如何将i18n应用于存储在数据库中的值?

时间:2013-03-18 11:10:35

标签: internationalization

我正在使用带有MVC4和Entity Framework 5的Visual Studio 2012构建一个网站。 问题是,我必须将i18n应用于存储在数据库中的某些值。例如,我需要有一个下拉列表,显示西班牙语和英语的就业领域(工程,健康,财务等)。

我在考虑两种不同的方法,但是对我来说,没有一种方法听起来很好:

  1. 在“区域”表中添加列以反映不同语言的区域名称(例如:AreaId,EnglishName,SpanishName)。这听起来并不太好,因为我很幸运只有2种语言,但如果我有100种语言可以支持呢?

  2. 不要保存数据库中的区域,而是使用i18n键并从资源文件中读取它们,将它们添加到视图中。这是为视图添加逻辑(我可能不得不在那里使用迭代),所以看起来也不太好。

  3. 还有其他我缺少的东西,那会是更好的方法吗?

    谢谢!

1 个答案:

答案 0 :(得分:0)

首先,我确实认为将i18n逻辑与数据库实体分开是一种更好的灵活性和维护方法。

因此,为了使i18n与数据库分开,您可以使用枚举(这取决于您,因为它也有一些缺点)或者您可以为每个就业区域使用i18n变量。例如,message.properties.en你可以:

employmentArea.engineering = Engineering
employmentArea.health = Health
employmentArea.finance = Finance

由于某些原因,如果您确实需要使用数据库,则可以使用单独的语言表,这可以解决您的问题,如下所示:

area

id code    
-- ----    
1  eng     
2  heath   
3  finance 

area_language

id area_id lang_code name
-- ------- --------- ----
1  1       en        Engineering
2  2       en        Health
3  3       en        Finance
4  1       es        Ingeniería
5  2       es        Salud
6  3       es        Financiar

因此,您可以按lang_code进行过滤。使用lang_code过滤器的iso标准可以帮助您。