ResourceManager 如何处理自定义文化的文化回退?
How does the ResourceManager handle culture Fallback for custom cultures?
我创建了一个名为 es-CO-ZF
的自定义文化。这种文化基于 es-CO
:
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
所以我看到的是资源管理器似乎不知道或弄清楚自定义区域性的基本语言是西班牙语,即使根据 CultureInfo 对象及其语言属性语言是西班牙语。
我是不是做错了什么?
我应该怎么做才能使 ResourceManager
退回到 es
我的自定义文化?
创建自定义文化时,将 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();
我创建了一个名为 es-CO-ZF
的自定义文化。这种文化基于 es-CO
:
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
所以我看到的是资源管理器似乎不知道或弄清楚自定义区域性的基本语言是西班牙语,即使根据 CultureInfo 对象及其语言属性语言是西班牙语。
我是不是做错了什么?
我应该怎么做才能使 ResourceManager
退回到 es
我的自定义文化?
创建自定义文化时,将 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();