从标准CultureInfo获取所有区域性CultureInfo

5
我在学习C#,我想要实现以下功能:
我有两个下拉框: 1. 第一个下拉框列出所有标准语言(比如en, de, fr等); 2. 在第二个下拉框中,我想要根据第一个下拉框选择的语言获取该语言的地区语言(如果我选择“en”,那么应该列出"en-US", "en-GB"...)。
请问有谁能帮我完成这个功能呢?:D
谢谢! Arion
2个回答

5
您可以使用以下内容:
var parent = CultureInfo.GetCultureInfo(selectedLanguage);
var regionalLanguages = CultureInfo.GetCultures(CultureTypes.AllCultures)
                                   .Where(x => x.Parent.Equals(parent));

哦...如果我的选择语言是“en”,那么regionalLanguages的计数应该为0。我认为这不正确。^^ - Arion Tinner
请使用当前代码再试一次。我发布的第一个版本不正确,因为它没有使用Equals而是使用了==。另外,请注意selectedLanguage应该是包含语言的字符串,例如"en"。除此之外,我已经测试过代码,它可以正常工作,所以我不知道还有什么问题。 - Daniel Hilgarth

0

可能有更简单的方法,但这个方法可行:

  1. 创建一个将中性文化映射到特定国家文化的 Dictionary<CultureInfo, HashSet<CultureInfo>>
  2. 调用 CultureInfo.GetCultures() 获取所有已安装的文化。
  3. 对于返回的每个 CultureInfo,调用 IsNeutral 查看它是否是中性文化。如果是,则将其添加到字典中,并将空哈希集作为值。如果不是,则调用 CultureInfo.Parent 直到获得中性文化,然后将中性文化作为键和特定国家文化添加到 HashSet 中。
请注意,一些国家中立的文化似乎是特定于某个国家的,例如zh-Hans(简体中文)和zh-Hant(繁体中文)。您还将获得一些遗留文化,例如zh-CHS和zh-CHT(再次是简体和繁体中文),也可能会有一些带有变音符号的文化。

肯定可以更容易些。但它也能正常工作。 :D 谢谢您的帮助。 - Arion Tinner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接