2013-03-18 161 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標準將有助於你。

相關問題