数据库存储值的全球化

Fie*_*nix 5 c# sql-server asp.net-mvc-4

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

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

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

Zoh*_*led 3

我设计的最后一个多语言应用程序使用了一个语言表,对于每个具有任何字符串类型(char、varchar 等)的表,我都有一个翻译表。

沿着这些思路:

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)
)
Run Code Online (Sandbox Code Playgroud)

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