如何在c#中获取某个国家的主要CultureInfo

本文关键字:国家 CultureInfo 获取 | 更新日期: 2023-09-27 18:20:36

我正在开发一个asp.net mvc应用程序,需要本地化货币格式。因此,我决定让用户选择可以使用RegionInfo查找货币符号的国家/地区,并在CultureInfo上运行查询,并将第一个结果设置为用户的区域性。这是我的代码:

        public string GetPrimaryUICulture(string CountryCd) {
        CultureInfo Info;
        var _CultureInfox = new System.Globalization.RegionInfo(CountryCd);
        var _CultureInfo = CultureInfo.GetCultures(CultureTypes.SpecificCultures).Where(c => c.Name.EndsWith(CountryCd)).ToList();
        if (_CultureInfo.Count == 0)
        {
            Info = new CultureInfo("en-US");
        }
        else
        {
            Info = _CultureInfo.Where(p => p.NumberFormat.CurrencySymbol == _CultureInfox.CurrencySymbol).FirstOrDefault();
           // Info = _CultureInfo.Where(p => p.TwoLetterISOLanguageName.Equals("en")).FirstOrDefault();
            if (Info == null)
            {
                Info = _CultureInfo.Where(p => p.TwoLetterISOLanguageName.Equals("en")).FirstOrDefault();
                if (Info == null)
                {
                    Info = _CultureInfo.FirstOrDefault();
                }
            }
        }
        return Info.Name;
    }

现在的问题是,如果我将CountryCd设置为"IN",我从上面的函数中得到的结果是IN,对此我没有angularjs i18n文件;我所拥有的是嗨IN。

另一个解决方案是检索CultureInfo,它匹配为en-{{CountryName}},但存在货币问题。对于印度来说,这是可行的,但对于马来西亚(en MY),它给出的是$而不是RM。

如果情况变得更糟,我必须硬编码为:如果IN,那么hi IN,如果MY,那么ms MY。如果CH,那么ZH-CN等等…我真的不想这么做。

我希望你能理解我面临的问题,很抱歉我的英语不好,如果你需要进一步的澄清,请告诉我。

如何在c#中获取某个国家的主要CultureInfo

当它是web应用程序时,您可以简单地分析HTTP语言/区域设置标头,而不尝试从自定义字段猜测它。

安装程序中的大多数浏览器都会首先设置有效的区域设置。

此处详细介绍:

http://matthewwittering.com/blog/internationalization-localization/http-headers.html