我得到的当前文化如下:
var culture = Thread.CurrentThread.CurrentCulture.DisplayName;
问题是我总是得到英文名字:
- EN变成英语
- PT 变成葡萄牙语而不是葡萄牙语
- FR变成法语而不是...
如何获得该特定语言的文化的 DisplayName?
谢谢你,米格尔
您需要显示NativeName
而不是DisplayName
.
如果您只是想获得一种文化的本地化语言(没有国家/地区),则可以使用以下代码段:
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;
}
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 (德意志)"
display = "德语(德国)"
名称=“de-DE”
对cultureinfo.Displayname 的搜索导致msdn 上的nativename,这导致如何翻译CultureInfo 语言名称