数据库存储值的全球化

时间:2014-06-04 18:39:36

标签: c# sql-server asp.net-mvc-4

我们正在使用资源文件(.resx)将我们的.NET 4.5 MVC C#应用程序翻译成不同的语言。这适用于位于视图中的静态文本。但是,我们从SQL数据库中提取的值也需要转换。

示例:下拉列表,其中包含从数据库中的表填充的值。

在数据库中翻译这些值的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

我设计的最后一个多语言应用程序我已经使用了一个表语言,并且对于每个有任何字符串类型的表(char,varchar etc`),我都有一个转换表。

这些方面的东西:

CREATE TABLE TblLanguage 
(
   Language_Id int identity(1,1) PRIMARY KEY,
   Language_EnglishName varchar(30),
   Language_NativeName nvarchar(30),
   CONSTRAINT UC_TblLanguage UNIQUE(Language_EnglishName) 
)

CREATE TABLE TblSomeData (
    SomeData_Id int identity(1,1) PRIMARY KEY,
    SomeData_TextColumn varchar(50),
    ....
)

CREATE TABLE TblSomeData_T ( -- _T stands for translation 
   SomeData_T_SomeData_Id int FOREIGN KEY TblSomeData(SomeData_Id),
   SomeData_T_Language_Id int FOREIGN KEY TblLanguage (Language_Id),
   SomeData_T_TextColumn nvarchar(100),
   PRIMARY KEY (SomeData_T_SomeData_Id , SomeData_T_Language_Id)
)

我的应用程序使用英语作为默认(或主要)语言,因此我将默认语言保留在基表中,只保留转换表上的翻译。当然,如果您愿意,您可以仅在翻译表中保留字符串值。请注意,这不会考虑每种文化的不同日期和数字格式,这是在表示层上完成的。