我可以从两个字符的语言代码创建一个新的 CultureInfo 吗?
Can i create a new CultureInfo from a two-character language code?
我需要根据文化格式化数字,但我只有来自 HTTP 请求的 Accept-Language
,它是两个字母的代码,如 fr
(法语)
这足以创建可以处理数字的 CultureInfo 吗?
是的,你可以。以下代码:
var ci = new CultureInfo("fr");
Console.WriteLine(13.45.ToString(ci));
输出“13,45”,它在数字中使用了法国小数点分隔符。
A neutral culture is specified by only the two-letter lowercase language code. For example, fr specifies the neutral culture for French, and de specifies the neutral culture for German.
这是说明neutral cultures and specific cultures:
之间区别的注释
var language = "fr";
var c1 = new CultureInfo(language);
Console.WriteLine(c1.EnglishName); // "French"
Console.WriteLine(c1.IsNeutralCulture); // "True"
Console.WriteLine((3.14m).ToString("C", c1)); // "3,14 €"
var c2 = CultureInfo.CreateSpecificCulture(language);
Console.WriteLine(c2.EnglishName); // "French (France)"
Console.WriteLine(c2.IsNeutralCulture); // "False"
Console.WriteLine((3.14m).ToString("C", c2)); // "3,14 €"
var languageAndCountry = "fr-CA";
var c3 = new CultureInfo(languageAndCountry);
Console.WriteLine(c3.EnglishName); // "French (Canada)"
Console.WriteLine(c3.IsNeutralCulture); // "False"
Console.WriteLine((3.14m).ToString("C", c3)); // "3,14 $"
总而言之,如果你只有语言,你无法获得一切。您可以获得中立文化,或者选择 "typical" 国家/地区的 "canonical" 特定文化。
当您同时拥有语言和国家/地区时,如 "fr-CA"
,情况会更好。
在我的系统上,存在以下具有 "fr"
的特定文化:
fr-029, fr-BE, fr-BF, fr-BI, fr-BJ, fr-BL, fr-CA, fr-CD, fr-CF, fr-CG, fr-CH, fr-CI, fr-CM, fr-DJ, fr-DZ, fr-FR, fr-GA, fr-GF, fr-GN, fr-GP, fr-GQ, fr-HT, fr-KM, fr-LU, fr-MA, fr-MC, fr-MF, fr-MG, fr-ML, fr-MQ, fr-MR, fr-MU, fr-NC, fr-NE, fr-PF, fr-PM, fr-RE, fr-RW, fr-SC, fr-SN, fr-SY, fr-TD, fr-TG, fr-TN, fr-VU, fr-WF, fr-YT
(通过 string.Join(", ", CultureInfo.GetCultures(CultureTypes.SpecificCultures).Where(x => x.TwoLetterISOLanguageName == "fr"))
找到)
我需要根据文化格式化数字,但我只有来自 HTTP 请求的 Accept-Language
,它是两个字母的代码,如 fr
(法语)
这足以创建可以处理数字的 CultureInfo 吗?
是的,你可以。以下代码:
var ci = new CultureInfo("fr");
Console.WriteLine(13.45.ToString(ci));
输出“13,45”,它在数字中使用了法国小数点分隔符。
A neutral culture is specified by only the two-letter lowercase language code. For example, fr specifies the neutral culture for French, and de specifies the neutral culture for German.
这是说明neutral cultures and specific cultures:
之间区别的注释var language = "fr";
var c1 = new CultureInfo(language);
Console.WriteLine(c1.EnglishName); // "French"
Console.WriteLine(c1.IsNeutralCulture); // "True"
Console.WriteLine((3.14m).ToString("C", c1)); // "3,14 €"
var c2 = CultureInfo.CreateSpecificCulture(language);
Console.WriteLine(c2.EnglishName); // "French (France)"
Console.WriteLine(c2.IsNeutralCulture); // "False"
Console.WriteLine((3.14m).ToString("C", c2)); // "3,14 €"
var languageAndCountry = "fr-CA";
var c3 = new CultureInfo(languageAndCountry);
Console.WriteLine(c3.EnglishName); // "French (Canada)"
Console.WriteLine(c3.IsNeutralCulture); // "False"
Console.WriteLine((3.14m).ToString("C", c3)); // "3,14 $"
总而言之,如果你只有语言,你无法获得一切。您可以获得中立文化,或者选择 "typical" 国家/地区的 "canonical" 特定文化。
当您同时拥有语言和国家/地区时,如 "fr-CA"
,情况会更好。
在我的系统上,存在以下具有 "fr"
的特定文化:
fr-029, fr-BE, fr-BF, fr-BI, fr-BJ, fr-BL, fr-CA, fr-CD, fr-CF, fr-CG, fr-CH, fr-CI, fr-CM, fr-DJ, fr-DZ, fr-FR, fr-GA, fr-GF, fr-GN, fr-GP, fr-GQ, fr-HT, fr-KM, fr-LU, fr-MA, fr-MC, fr-MF, fr-MG, fr-ML, fr-MQ, fr-MR, fr-MU, fr-NC, fr-NE, fr-PF, fr-PM, fr-RE, fr-RW, fr-SC, fr-SN, fr-SY, fr-TD, fr-TG, fr-TN, fr-VU, fr-WF, fr-YT
(通过 string.Join(", ", CultureInfo.GetCultures(CultureTypes.SpecificCultures).Where(x => x.TwoLetterISOLanguageName == "fr"))
找到)