我正在开发一个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”,我从上面的函数得到的结果是as-IN,我没有angularjs i18n文件;我拥有的是hi-IN。
另一个解决方案是检索CultureInfo,匹配为en - {{CountryName}},但存在货币问题。对于印度来说,这是有效的,但对于马来西亚(en-MY)来说,它给出了$而不是RM。
如果事情变得更糟,我必须硬编码:如果IN然后hi-IN,如果MY,那么ms-MY。如果CH,那么ZH-CN等...我真的不想做。
我希望你能理解我面临的问题,抱歉我的英语不好,如果你需要进一步澄清,请告诉我。
答案 0 :(得分:0)
虽然它是Web应用程序,但您可以简单地分析HTTP语言/语言环境标题,而不是试图从自定义字段中猜出它。
设置中的大多数浏览器都会在第一时间设置有效的区域设置。
详细信息:
http://matthewwittering.com/blog/internationalization-localization/http-headers.html