2015-10-16 28 views
0

我創建了一個名爲es-CO-ZF的自定義文化。這種文化的基礎的es-COResourceManager如何處理自定義文化的文化回退?

var cultureInfo = new CultureInfo("es"); 
var regionInfo = new RegionInfo("CO"); 

var infoBuilder = new CultureAndRegionInfoBuilder(
    "es-CO-ZF", CultureAndRegionModifiers.None); 

infoBuilder.LoadDataFromCultureInfo(cultureInfo); 
infoBuilder.LoadDataFromRegionInfo(regionInfo); 
infoBuilder.Register(); 

以下是CultureInfo對象的控制檯打印:

Name: . . . . . . . . . . . . . es-CO-zf 
EnglishName:. . . . . . . . . . Spanish 
NativeName: . . . . . . . . . . español 
TwoLetterISOLanguageName: . . . es 
ThreeLetterISOLanguageName: . . spa 
ThreeLetterWindowsLanguageName: ESP 

爲了測試區域性後備我創建了以下RESX文件:

App.resx (en-US, default culture) 
    String1 > English 
App.es.resx 
    String1 > español 
App.es-CO.resx 
    String2 > Colombia 
App.es-CO-ZF.resx 
    String2 > Colombia Custom 

並獲得本地化字符串如下:

CultureInfo culture = CultureInfo.CreateSpecificCulture("en-CO-ZF"); 
var string1 = App.ResourceManager.GetString("String1", culture); 
var string2 = App.ResourceManager.GetString("String2", culture); 

當使用內置文化es-CO我得到了以下的結果:使用自定義的文化我希望下面的結果時

String1: español 
String2: Colombia 

所以:

String1: español 
String2: Colombia Custom 

但我得到:

String1: English 
String2: Colombia Custom 

所以我看到的是資源管理器似乎並不知道,或弄清楚,bas自定義文化的語言是西班牙語,即使根據CultureInfo對象和它的語言屬性,基本語言也是西班牙語。

我做錯了什麼?

我該怎麼做才能讓我的自定義文化ResourceManager回落到es

回答

2

創建自定義文化時,將CultureAndRegionInfoBuilder對象的Parent屬性設置爲您希望在自定義文化的本地化不可用時希望返回的文化。

var cultureInfo = new CultureInfo("es"); 
var regionInfo = new RegionInfo("CO"); 

var infoBuilder = new CultureAndRegionInfoBuilder(
    "es-CO-ZF", CultureAndRegionModifiers.None); 

infoBuilder.LoadDataFromCultureInfo(cultureInfo); 
infoBuilder.LoadDataFromRegionInfo(regionInfo); 

//set the parent for culture fallback 
infoBuilder.Parent = new CultureInfo("es-CO"); 

infoBuilder.Register(); 
相關問題