2013-03-16 45 views
0

我正在開發一個網站項目,我需要將項目國際化。現在,我使用資源文件。i18n asp.net mvc4屬性?

我Almos酒店都已經國際化,但有一兩件事,我想出了至極,我想知道怎麼做是這樣的:

假設我有那些已經在我的分貝班系列,每個類都有一個名爲Description的字符串屬性。有沒有基於區域設置瀏覽器顯示說明的方法?我的意思是,我使用英文瀏覽器並用英文顯示描述,但我將其更改爲法文並用法文顯示這些描述? (我想爲每個描述分配一個「數字」值,然後在資源文件中有1:人力資源,2:IT,3:HealthCare等等。認爲這是一種,搞砸)

非常感謝您

回答

1

那麼鑑於描述文本是常數,不能你寫相應的文本翻譯按鍵到你的數據庫,然後獲取匹配(本地化)價值從您的翻譯文件?如果您無法更改數據庫,也許只需使用DB中的現有值作爲翻譯文件中的鍵並映射到相應的翻譯。你可能不得不擺脫空間等,但這不應該是一個大問題。

在你的DB:

Human Resources 
Health Care 
... 

翻譯文件,例如:

英語:

Human_Resources | Human Resources 
Health_Care  | Health Care 
... 

法國:

Human_Resources | Service du personnel 
... 

檢索翻譯值(僞):

var translationKey = descriptionValueFromDB.Replace(' ', '_'); 
var translatedDescription = ResourceManager.GetString(translationKey); 

你覺得呢?

乾杯,亞歷

UPDATE: 顯示的視圖中的翻譯字符串簡單的使用標準技術。我假設您正在使用模型對象將數據提供給您的視圖。然後,你可以,例如寫現成的翻譯到您的模型和視圖中使用它:

public class FooModel 
    { 
     public string Description {get; set;} 
     public string TranslatedDescription 
     { 
     get { return Description.ToTranslationKey().Translate(); } 
     } 
    } 

    public static class TranslationExtensions 
    { 
     public static string ToTranslationKey(this string term) 
     { 
     if (string.IsNullOrEmpty(term)) 
      return term; 

     return term.Replace(' ', '_'); 
     } 

     public static string Translate(this string term) 
     { 
     if (string.IsNullOrEmpty(term)) 
      return term; 

     return ResourceManager.GetString(term); 
     } 
    } 

<div id="fooDescription">@Model.TranslatedDescription</div> 

當然,你也可以在翻譯部分移動到視圖,如果你喜歡這更好:

<div id="fooDescription">@Model.Description.ToTranslationKey().Translate()</div> 

Mkay?

+0

我喜歡你的想法亞歷克斯,但我不知道如何用剃刀處理它。我能想到的唯一方法是替換控制器中的對象屬性,我認爲這不是一種很好的方法,因爲我會覆蓋對象。 你能幫我從視圖中怎麼做嗎?謝謝 – 2013-03-16 10:24:19

+0

我爲可能的方法添加了示例代碼。 – 2013-03-16 13:35:06