代码之家  ›  专栏  ›  技术社区  ›  Alexandru Pupsa

我可以用两个字符的语言代码创建新的CultureInfo吗?

  •  5
  • Alexandru Pupsa  · 技术社区  · 7 年前

    我需要根据文化设置一个数字的格式,但我只有 Accept-Language 来自HTTP请求,它是两个字母的代码,如 fr (法语)

    这是否足以创建可以处理数字的CultureInfo?

    2 回复  |  直到 7 年前
        1
  •  5
  •   Jeppe Stig Nielsen    7 年前

    这是一个注释,用于说明 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 $"
    

    总之,如果你只有语言,你就不可能得到一切。你可以得到一种中立的文化,或者一种“典型”的特定文化,其中选择了一些“典型”国家。

    当您同时拥有语言和国家时,如 "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、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 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 VU、fr WF、fr YT这就是为什么

    (发现 string.Join(", ", CultureInfo.GetCultures(CultureTypes.SpecificCultures).Where(x => x.TwoLetterISOLanguageName == "fr")) )

        2
  •  4
  •   Chris    7 年前

    是的,你可以。以下代码:

    var ci = new CultureInfo("fr");
    Console.WriteLine(13.45.ToString(ci));
    

    输出“13,45”,在数字中使用法国十进制分隔符。

    这个 CultureInfo documentation 说:

    中性区域性仅由两个字母的小写语言代码指定。例如,fr为法语指定中性文化,de为德语指定中性文化。