我需要根据两个字母的ISO-3166国家/地区代码
来本地化我的C#DateTime对象https://en.wikipedia.org/wiki/ISO_3166-2
有办法吗?
我只能使用5个字符的国家/地区代表(en-US,nl-NL等等)来应用特定的文化。
System.Globalization.CultureInfo cultureinfo =
new System.Globalization.CultureInfo("nl-NL");
DateTime dt = DateTime.Parse(date, cultureinfo);
即使是一个射影映射也可以(即多个国家代码映射到单个C#文化)
答案 0 :(得分:3)
来自CultureInfo(string)
constructor文档;
有关预定义文化名称的列表,请参阅National Language Support (NLS) API Reference
同样来自CultureInfo.TwoLetterISOLanguageName
Property
当前CultureInfo语言的ISO 639-1双字母代码。
没有定义for subview in self.view.subviews {
if (subview is CustomPin) {
print(subview)
subview.removeFromSuperview()
}
}
,但有US
(如果你真的必须使用两个字母名称),你可以使用它。所有这些都在 标准中定义。
en
所有这两个字母的代码都有效,var cultureInfo = new CultureInfo("en");
除外InvariantCulture
,因此我们可以忽略它。我写了一个简单的代码来检查它。
iv
如何创建自己的地图?我建议按照这些步骤进行操作;
KeyValuePair<string, string>
结构,其中包含ISO-3166双字母代码作为第一个,ISO 639-1双字母代码作为第二个。foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
try
{
var c = new CultureInfo(culture.TwoLetterISOLanguageName);
}
catch (Exception)
{
Console.WriteLine(culture.TwoLetterISOLanguageName); // Only prints "iv"
}
}
双字母代码。答案 1 :(得分:1)
CultureInfo.Name的最后一部分是国家/地区的ISO-3166代码,所以这就是我最终解决方案的问题,
public static CultureInfo GetCultureFromTwoLetterCountryCode(string twoLetterISOCountryCode)
{
try
{
return CultureInfo.GetCultures(CultureTypes.AllCultures
& ~CultureTypes.NeutralCultures)
.Where(m => m.Name.EndsWith("-"+twoLetterISOCountryCode))
.FirstOrDefault();
}
catch
{
return null;
}
}
唯一的问题是某些国家/地区拥有多种文化,例如GB,因此您无法使用ISO-3166代码选择正确的文化,
cy-GB Welsh(英国)
en-GB English(United Kingdom)
gd-GB Scottish Gaelic(英国)
所以GetCultureFromTwoLetterCountryCode("GB")
会返回"cy-GB"
文化,这对威尔士来说可能没问题,但苏格兰没有。
您可以忽略这些异常或创建自己的cultureinfo数据库,并为每个国家/地区仅存储一种文化。那将是最好的解决方案。
答案 2 :(得分:0)
如果.net。
支持,您应该可以使用不变文化E.g。这有效:
var culture = new CultureInfo("EN");
正如您所指出的,似乎没有完全支持所有国家/地区代码,这是因为它需要的两个字符是中立文化。
您可以通过以下方式获取所有支持的文化列表:
CultureInfo.GetCultures(CultureTypes.AllCultures);
特别是中性的:
CultureInfo.GetCultures(CultureTypes.NeutralCultures);
var culture = new CultureInfo("US");
不起作用的原因是因为美国的中性文化是EN。 (具体文化为en-US
)。
转换Country Codes to Cultures还有其他很高的投票答案,我不会在这里进行欺骗。
答案 3 :(得分:0)
我认为你们让地区与文化混淆了吗?
RegionInfo r = new RegionInfo(“US”);
MessageBox.Show(r.DisplayName);
这将返回“美国”