【发布时间】:2020-05-03 21:02:21
【问题描述】:
我正在开发一个 ASP.NET Core MVC 应用程序,需要为实体设计多语言值。有很多关于如何使用 .resx 在 UI 页面中支持本地化的信息。我正在寻找一些常见的模式来支持实体的本地化(而不是网页上的静态内容),它可以由用户编辑。
假设数据库表中有一个带有状态的简单字典
Id Name
----------------------------------------------
1 Not processed
2 To be cancelled
3 To be corrected
4 Processed
5 Rejected
用户可以创建新状态或添加其他语言的翻译。问题是如何设计表格以及如何存储其他语言的翻译?
目前我有几种方法
1) 使用所有支持的语言创建表 Languages。创建表Translations
Id LanguageId Key Value
------------------------------------------------
1 en NotProcessed Not processed
2 pl NotProcessed Nie przetworzony
3 de NotProcessed Nicht verarbeitet
4 en ToBeCancelled To be cancelled
5 de ToBeCancelled Zu stornieren
状态表将是
Id Name TranslationKey
----------------------------------------------
1 Not processed NotProcessed
2 To be cancelled ToBeCancelled
然后根据语言选择将显示给用户的适当翻译。
2) 不要创建 Translations 表,而是添加列
Id Name Translations
----------------------------------------------
1 Not processed en:Not processed;pl:Nie przetworzony;de:Nicht verarbeitet
2 To be cancelled en:To be cancelled;de:Zu stornieren
你怎么看?我不知道如何为我的实体保留翻译,可能有一些可靠的方法。请建议。
【问题讨论】:
-
我不喜欢使用基于数据库的本地化。但如果必须,我会选择第一个,因为它使用的是标准化且更高效的表。
-
另见an open source implementation,他们也几乎使用第一种方法。
标签: asp.net-core design-patterns database-design localization translation