我现在的文化如下:
var culture = Thread.CurrentThread.CurrentCulture.DisplayName;
问题在于我总是用英文命名:
如何以该特定语言获取文化的DisplayName?
谢谢你, 米格尔
答案 0 :(得分:14)
您需要显示NativeName
而不是DisplayName
。
答案 1 :(得分:5)
DisplayName
将以当前.NET框架的位置语言显示。
您可以使用NativeName
(或者甚至只是Name
我没有尝试过这个)而不是DisplayName
,这应该可以解决问题。
修改强>
使用以下代码测试后:
// set the current culture to German
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
var native = Thread.CurrentThread.CurrentCulture.NativeName;
var display = Thread.CurrentThread.CurrentCulture.DisplayName;
var name = Thread.CurrentThread.CurrentCulture.Name;
结果是:
native =“Deutsch(Deutschland)”
display =“德语(德国)”
name =“de-DE”
答案 2 :(得分:3)
如果只是试图获取文化的本地化语言(没有国家/地区),可以使用此代码段:
CultureInfo culture = Thread.CurrentThread.CurrentCulture;
string nativeName = culture.IsNeutralCulture
? culture.NativeName
: culture.Parent.NativeName;
如果有人使用特定的本地化语言名称,可以使用此名称:
string language = "es-ES";
CultureInfo culture = new CultureInfo(language);
string nativeName = culture.IsNeutralCulture
? culture.NativeName
: culture.Parent.NativeName;
如果想要一个标题案例名称(例如Français而不是français),请使用以下行:
string result = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(nativeName);
作为一种方法:
private static string GetTitleCaseNativeLanguage(string language)
{
CultureInfo culture = new CultureInfo(language);
string nativeName = culture.IsNeutralCulture
? culture.NativeName
: culture.Parent.NativeName;
return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(nativeName);
}
或作为扩展方法:
public static string GetNativeLanguageName(this CultureInfo culture, bool useTitleCase = true)
{
string nativeName = culture.IsNeutralCulture
? culture.NativeName
: culture.Parent.NativeName;
return useTitleCase
? CultureInfo.CurrentCulture.TextInfo.ToTitleCase(nativeName)
: nativeName;
}
答案 3 :(得分:0)
搜索cultureinfo.Displayname导致msdn上的nativename,导致How to translate CultureInfo language names