9

我使用this blog by Alex Adamyan上的代碼創建了本地化MVC網站。ResourceManager在使用自定義文化時未選擇正確的資源集

如果我使用現有的文化,這很有效。但是,我正在嘗試本地化Tagalog(tl或tl-PH)。 Windows沒有這種文化建立在,所以我已創建了一個(我曾經嘗試都TL與TL-PH),按照下面的代碼:

public static void CreateCustomCultures() 

{ 

    var cultureBuilder = new CultureAndRegionInfoBuilder(
          "tl", CultureAndRegionModifiers.Neutral); 

    cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US")); 
    cultureBuilder.LoadDataFromRegionInfo(new RegionInfo("US")); 
    cultureBuilder.IsMetric = true; 
    cultureBuilder.CultureEnglishName = "Tagalog"; 
    cultureBuilder.CultureNativeName = "Tagalog"; 
    cultureBuilder.RegionEnglishName = "Tagalog"; 
    cultureBuilder.RegionNativeName = "Tagalog"; 
    cultureBuilder.TwoLetterISOLanguageName = "tl"; 
    cultureBuilder.ThreeLetterISORegionName = "PH"; 
    cultureBuilder.Register(); 

    var cultureBuilder2 = new CultureAndRegionInfoBuilder(
          "tl-PH", CultureAndRegionModifiers.None); 

    cultureBuilder2.LoadDataFromCultureInfo(new CultureInfo("en-US")); 
    cultureBuilder2.LoadDataFromRegionInfo(new RegionInfo("US")); 
    cultureBuilder2.IsMetric = true; 
    cultureBuilder2.CultureEnglishName = "Tagalog"; 
    cultureBuilder2.CultureNativeName = "Tagalog"; 
    cultureBuilder2.RegionEnglishName = "Tagalog"; 
    cultureBuilder2.RegionNativeName = "Tagalog"; 
    cultureBuilder2.TwoLetterISOLanguageName = "tl"; 
    cultureBuilder2.ThreeLetterISORegionName = "PH"; 
    cultureBuilder2.Register(); 

} 

我也有設在我的測試網站四個資源文件〜/Views/Home/Resources:

  • Home.aspx.resx;
  • Home.aspx.tl.resx
  • Home.aspx.tl-PH.resx
  • Home.aspx.de.resx

當我建,我得到以下三個適當命名的目錄,我的bin目錄,每個目錄都有一個適當命名的dll。

因此,當我去我的網站主頁http://localhost:1907我得到默認(英文)的語言字符串。

當我去德國(德)主頁http://localhost:1907/de我得到德國版本的網站。

當我轉到tagalog版本http://localhost:1907/tlhttp://localhost:1907/tl-PH時,我得到英文版本而不是他加祿語版本。

我已經放置在資源獲取斷點代碼和已證實,當前線程的區域性和UI區域性設置是否正確,以菲律賓語文化和他加祿語是傳遞給resourceManager.GetString(鍵,文化)文化。

有什麼想法?我沒有正確創建自己的文化嗎?

+0

cultureBuilder2.LoadDataFromCultureInfo(new CultureInfo(「en-US」)); cultureBuilder2.LoadDataFromRegionInfo(new RegionInfo(「US」)); zh-CN? – 2010-09-21 09:36:34

+0

@Avatar:它只是加載美國英語文化的設置(如十進制和分組分隔符和/或格式)。它不應該加載適當的資源... – 2010-11-05 20:31:33

+0

我很確定你已經正確地創建了你的自定義文化。我唯一擔心的是你的三字母ISO 3166國家代碼,顯然只有兩個字母。然而,它不應該。 – 2010-11-05 20:34:21

回答

1

我認爲你的文化從不登記,至少其中一個不是。

下面的代碼將引發異常,因爲您無法爲中性文化指定區域值。就像你不能爲中性文化創建一個DateTimeFormatInfo對象一樣。

var cultureBuilder = new CultureAndRegionInfoBuilder(
         "tl", CultureAndRegionModifiers.Neutral); 

cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US")); 
cultureBuilder.LoadDataFromRegionInfo(new RegionInfo("US")); 
cultureBuilder.IsMetric = true; 
cultureBuilder.CultureEnglishName = "Tagalog"; 
cultureBuilder.CultureNativeName = "Tagalog"; 
cultureBuilder.RegionEnglishName = "Tagalog"; 
cultureBuilder.RegionNativeName = "Tagalog"; 
cultureBuilder.TwoLetterISOLanguageName = "tl"; 
cultureBuilder.ThreeLetterISORegionName = "PH"; 
cultureBuilder.Register(); 

應該是這樣的

var cultureBuilder = new CultureAndRegionInfoBuilder(
         "tl", CultureAndRegionModifiers.Neutral); 

cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US")); 
cultureBuilder.CultureEnglishName = "Tagalog"; 
cultureBuilder.CultureNativeName = "Tagalog"; 
cultureBuilder.TwoLetterISOLanguageName = "tl"; 
cultureBuilder.Register(); 

第二特定文化似乎好。

相關問題