0

我有一个网站,我需要根据两个字符的语言名称显示当前文化中的一些语言名称。

例如,当文化为法语时,我需要显示:

  • fr -> 法语
  • zh -> 英语
  • de -> 阿勒曼

在德国(de)文化中

  • fr -> 法语
  • zh -> 英语
  • de -> 阿勒曼

...

currentThread 文化已经是正确的(意味着我处于“FR”本地化)。

问题是,如果我在法国文化中并且我这样做:

System.Globalization.CultureInfo.GetCultureInfo("de")

我收到这个对象:

Calendar: {System.Globalization.GregorianCalendar}
CompareInfo: {CompareInfo - de}
CultureTypes: NeutralCultures | InstalledWin32Cultures | FrameworkCultures
DateTimeFormat: {System.Globalization.DateTimeFormatInfo}
DisplayName: "German"
EnglishName: "German"
IetfLanguageTag: "de"
IsNeutralCulture: true
IsReadOnly: true
KeyboardLayoutId: 7
LCID: 7
Name: "de"
NativeName: "Deutsch"
NumberFormat: {System.Globalization.NumberFormatInfo}
OptionalCalendars: {System.Globalization.Calendar[1]}
Parent: {}
TextInfo: {TextInfo - de}
ThreeLetterISOLanguageName: "deu"
ThreeLetterWindowsLanguageName: "DEU"
TwoLetterISOLanguageName: "de"
UseUserOverride: false

我希望显示名称在当前语言环境中(所以“Allemand”)。

我确定这是可能的,我是否缺少语言包?在哪个级别?视窗?ASP?MVC?或者我应该使用不同的代码?

4

1 回答 1

1

.NET Framework 不提供您所要求的内容(即任意语言中的文化名称)。属性EnglishNameNativeName是不言自明的。至于DisplayName,这将为您提供系统语言中的文化名称(因此,如果您使用法语运行 .NET Framework,您将获得“Allemand”——如果您使用英语运行它,您'会得到“德语”)。

为了澄清最后一点,.NET Framework 本身已本地化为多种语言,您可以通过下载语言包(例如http://www.microsoft.com/en-us )获得 .NET Framework 的本地化版本/download/details.aspx?id=3324用于 .NET 4.0)。如果你这样做,那么你DisplayName得到的将取决于你系统的语言环境以及是否安装了相应语言的语言包。无论如何,我不相信您可以依靠它来解决您的场景,因为您无法动态切换系统区域设置。

更新:我忘了提及解决方案,以防它不明显:您可以将语言列表与所有其他用户界面字符串一起添加到可本地化的资源中,即包括字符串“法语”、“英语”和“德语”,例如您的法语翻译将本地化为“Français”、“Anglais”、“Allemand”。

于 2012-09-07T12:28:05.957 回答