2013-03-18 31 views
2

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

我想的是两种不同的方法,但他们没有听起来100%确定我:

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

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

还有什么我失踪了,那会是更好的方法吗?

谢谢!

回答

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标准将有助于你。

相关问题