提问人:Tim Schmelter 提问时间:7/21/2023 最后编辑:Tim Schmelter 更新时间:7/21/2023 访问量:88
为什么只有国家/地区的 CultureInfo 是中立的文化?
Why CultureInfo with country only is a neutral culture?
问:
也许我不明白什么是中立文化,但文档很明确:
中性区域性是与语言关联的区域性,但 与国家或地区无关。它与特定的文化不同, 这是一种与语言和 国家或地区。例如,fr 是中性法语的名称 文化,而 fr-FR 是法国文化在法国的名称。
因此,我认为这是一种中立的文化,事实上它是:
var englishCulture = new CultureInfo("en");
Console.WriteLine(englishCulture.IsNeutralCulture); // True
但这只是一个没有语言的国家,所以它不是一个中立的文化:
var greatBritainCulture = new CultureInfo("GB");
Console.WriteLine(greatBritainCulture.IsNeutralCulture); // True
但它也是一种中立的文化。为什么?这同样适用于例如。US
当然,对于 en-GB,它按预期返回 false:
Console.WriteLine(new CultureInfo("en-GB").IsNeutralCulture); // False
答:
2赞
pfx
7/21/2023
#1
这被当作一种自定义文化来处理,而是一种语言。
返回 ,这是小写的值。new CultureInfo("GB")
GB
TwoLetterISOLanguageName
gb
GB
var culture = new CultureInfo("GB");
Console.WriteLine(culture.TwoLetterISOLanguageName); // gb
如果仅指定了一种语言,则区域性被认为是中性的。
为了避免在期望预定义时最终出现自定义区域性,可以通过 CultureInfo.GetCultureInfo(string name, bool predefinedOnly)
检索区域性
当作为 的值传递时,将为未定义的区域性抛出 a。true
predefinedOnly
CultureNotFoundException
var culture = CultureInfo.GetCultureInfo("GB", true);
评论
0赞
Ralf
7/21/2023
链接的文档至少有评论,系统将“尝试使用来自其他区域性的数据或一些常量值构建区域性”,如果在默认情况下找不到它(使用仅具有区域性名称的 ctor 或 GetCulture),但大概是我们能得到的最佳“为什么”答案。
0赞
pfx
7/21/2023
@Ralf同意了。该文件可以使用有关“来自其他文化”的更多细节。
评论
new CultureInfo("GB")
被处理为一种自定义文化,作为语言; 返回(小写)。只有一种语言,它也被视为中性。很少使用 ;要检索区域性,可以使用 .GB
TwoLetterISOLanguageName
gb
GB
CultureInfo
CultureInfo.GetCultureInfo(...)