2011-05-22 56 views
4

我正在为需要3种语言(英语和其他2种语言)本地化的网络应用程序客户端工作。我了解如何使用ASP.NET应用程序中的资源来显示静态数据的本地化版本。但是,我不确定如何处理本地化用户输入数据的问题。例如,管理员可能想要在应用程序中添加一些新的元数据(例如新产品类别)。这最终需要翻译成所有3种语言,但最初将以管理员知道的任何语言输入。由于这种数据不是静态的,我们将其存储在数据库中。我们是否应该为主键添加文化代码以区分同一数据的不同本地化版本?有没有一种“最佳实践”或模式,我不知道这种问题?如何在数据库中存储用户输入数据的本地化版本?

回答

2

使用MainItemID和LanguageCode(EN,DE,FR等)的组合PK让子表成为您的实体。此子表存储您的语言特定文本。

如果你总是有英语,或者它是一个后备,那么你可以有DE,FR等子表和英语主表。 LEFT JOIN和ISNULL会照顾到这一点。

无论哪种方式是确定的,这取决于您确切的需求,我怀疑是第一个。当然,你需要确保你至少有一个子行的数据输入,例如,一个新的产品类别

+0

感谢您的建议! – 2011-05-23 06:41:45

0

我的解决方案是创建一个字符串列,它保存所有支持语言的编码数据。需要特殊的应用程序逻辑来插入和提取数据。 支持多语言数据的专业文本编辑器也有很多帮助。

+0

这只假设一个代码客户端,不能在数据库级搜索,不是? – gbn 2011-05-22 17:34:09

+0

实际上我使用了一个名为DefaultTitle的列来进行搜索和适当的显示。 – Marko 2011-05-22 17:38:22

1

我建议你制作一张表来跟踪Language,然后在另一个表中使用languageID作为外键而不是语言代码。

Language(LanguageID, Name) 

然后在其他表中使用该LanguageID作为外键。

例如您正在本地存储本地化文字

LocalizedTextTable(ID,text,LanguageID) 
+0

如果语言代码已经是唯一的,是否有理由将这个额外连接添加到'Language'表中? – dnc253 2012-07-30 15:22:56