0

私は Web サイトを持っており、2 文字の言語名に基づいて、現在のカルチャで言語名を表示する必要があります。

たとえば、カルチャが FRench の場合に表示する必要があります。

  • fr -> フランセ
  • エン -> アングレ
  • デ -> アルマン

ドイツ文化では

  • fr -> フランセ
  • エン -> アングレ
  • デ -> アルマン

...

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など)をダウンロードすることで、ローカライズされたバージョンの.NETFrameworkを入手できます。 /download/details.aspx?id=3324 for .NET 4.0)。これを行うDisplayNameと、システムのロケールと、対応する言語の言語パックがインストールされているかどうかの両方に依存します。いずれにせよ、システムロケールを動的に切り替えることはできないため、シナリオでこれを信頼できるとは思いません。

更新:明確でない場合に備えて、解決策について言及するのを忘れました。言語のリストを、他のすべてのユーザーインターフェイス文字列と一緒にローカライズ可能なリソースに追加できます。たとえば、「フランス語」、「英語」、「ドイツ語」の文字列を含めることができます。フランス語の翻訳者は、「Français」、「Anglais」、「Allemand」としてローカライズします。

于 2012-09-07T12:28:05.957 に答える