2

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

我在考虑两种不同的方法,但对我来说,它们都不是 100% 好的:

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

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

还有什么我想念的,那会是更好的方法吗?

谢谢!!

4

1 回答 1

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 标准将对您有所帮助。

于 2013-03-18T11:26:10.123 回答