2 字母 ISO 国家代码到 CultureInfo

2 Letter ISO Country Code to CultureInfo

我有一个 Xamarin.Forms 应用程序正在获取 GeoLocation 的 2 个字母的 ISO 国家/地区代码。我需要应用程序以本地样式显示货币。因此,如果我将 phone 从英国带到日本,它会显示以日元格式设置的货币字段。

格式化十进制货币最直接的方法是使用 CultureInfo 对象。

如何从 2 个字母的 ISO 国家/地区代码获取 CultureInfo 对象。几天来我一直在努力实现这一目标,但找不到转化路径。

有什么指点吗?

您可以通过两个字母的代码搜索所有文化:

CultureInfo.GetCultures(CultureTypes.AllCultures)
           .Where(cu => cu.TwoLetterISOLanguageName == code);

注意可能有多个结果。

var isoCountryCode = "GB"; // Replace with the one you got from GeoLocation.
var cultureInfo = CultureInfo.GetCultures(CultureTypes.AllCultures)
                          .Where(c => c.Name.EndsWith("-" + isoCountryCode )).First;

如果您查看 CultureCodes provided by microsoft 的列表,您会发现文化的前两个字母指的是语言,后两个字母指的是国家/地区。例如,对于日语,您将有 "ja" 和 "ja-JP").

因此,如果您在文化列表中搜索以所需国家/地区代码结尾的文化,您应该会获得所需国家/地区所有可用 CultureInfo 的列表。

然后您可以再次浏览它们以找到用户选择的语言(如果可用)或任意选择一种。