-1

我一直在查看以下链接

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo%28v=vs.71%29.aspx

但我仍然不明白如何使用 CultureInfo 类(例如“en”或“fr”......等)随机检索有效的 2 个字母的文化值。

请帮忙。

谢谢

4

3 回答 3

4

(我不确定您究竟为什么想要这个,但是...)您可以使用CultureInfo.GetCultures获得随机文化,然后从结果中随机选择:

var allCultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
var random = new Random();
int index = random.Next(0, allCultures.Length);

var culture = allCultures[index];

string twoLetterCode = culture.TwoLetterISOLanguageName;

请注意,这没有考虑到具有相同 2 个字母代码的文化不是偶数。这将在所有文化中随机选择,但不是通过 2 个字母代码均匀选择。如果你想要一个更随机的分布,你可以使用:

var uniqueCultureCodes = CultureInfo.GetCultures(CultureTypes.AllCultures)
                      .Select(c => c.TwoLetterISOLanguageName)
                      .Distinct()
                      .ToList();

var random = new Random();
int index = random.Next(0, uniqueCultureCodes.Count);

string twoLetterCode = uniqueCultureCodes[index];

这将创建两个字母代码的不同列表,然后从中随机选择。


编辑:如果您的目标只是创建一个CultureInfo给定的两个字母代码,例如“en”或“fr”,您可以这样做:

CultureInfo culture = new CultureInfo("en");
于 2012-08-01T16:34:52.497 回答
1

如果您不关心该区域( 的最后一部分<language>-<region>),您将需要使用:

CultureInfo[] languages = CultureInfo.GetCultures(CultureTypes.NeutralCultures);

检索不同的语言。如果您使用:

CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);

英语比德语有更大的变化(英语文化比德语多)。

于 2012-08-01T16:44:22.847 回答
1

但我仍然不明白如何使用 CultureInfo 类(例如“en”或“fr”......等)随机创建一个有效的 2 字母文化值。

你的意思是你想得到一个随机的文化?只需获取所有有效的文化,并从该集合中获取一个随机元素。(您可以使用System.Random,但请注意您需要处理的各种问题。)

编辑:请注意,如果您只想从已知缩写中获取单一文化,我建议您使用CultureInfo.GetCultureInfo而不是CultureInfo构造函数。这允许缓存,并为您提供几乎可以肯定是您想要的只读文化。(关于只读数据的推理更容易......)

于 2012-08-01T16:33:57.677 回答