C# でローカリゼーションを使用する方法 質問する

C# でローカリゼーションを使用する方法 質問する

ローカリゼーションがうまく機能しないようです。

クラス ライブラリがあります。そこでresxファイルを作成し、スレッド カルチャに基づいていくつかの値を返したいと思います。

どうやってやるの?

ベストアンサー1

  • 次の操作を実行して、プロジェクトにリソース ファイルを追加します (「strings.resx」という名前を付けることができます)。プロジェクトの[プロパティ]
    を右クリックし、コンテキスト メニューで[追加] -> [新しい項目...]を選択し、 Visual C# 項目の一覧で[リソース ファイル]を選択して名前を付けます。strings.resx
  • resx ファイルに文字列リソースを追加し、適切な名前を付けます (例: 「Hello」という名前を付け、値に「Hello」を指定します)
  • リソース ファイルを保存します (注: 2 文字の言語コードがないため、これがデフォルトのリソース ファイルになります)
  • プログラムに参照を追加しますSystem.Threading:System.Globalization

次のコードを実行します:

Console.WriteLine(Properties.strings.Hello);

「Hello」と出力されるはずです。

次に、「strings.fr.resx」という名前の新しいリソース ファイルを追加します (「fr」の部分に注意してください。このファイルにはフランス語のリソースが含まれます)。strings.resx と同じ名前で、値がフランス語の文字列リソースを追加します (Name="Hello", Value="Salut")。次のコードを実行すると、Salut が印刷されます。

Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
Console.WriteLine(Properties.strings.Hello);

システムは「fr-FR」のリソースを検索します。リソースは見つかりません (ファイルで「fr」を指定しているため)。その後、「fr」のチェックに戻り、見つかったリソース (および使用) が見つかります。

次のコードは、「Hello」を出力します。

Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
Console.WriteLine(Properties.strings.Hello);

これは、「en-US」リソースも「en」リソースも見つからないため、最初から追加したデフォルトにフォールバックするからです。

必要に応じて、より具体的なリソースを含むファイルを作成できます (たとえば、フランスとカナダのフランス語の場合はそれぞれ strings.fr-FR.resx と strings.fr-CA.resx)。このような各ファイルには、フォールバックするリソースとは異なる文字列のリソースを追加する必要があります。したがって、フランスとカナダでテキストが同じ場合は、strings.fr.resx に配置し、カナダのフランス語で異なる文字列は strings.fr-CA.resx に配置することができます。

おすすめ記事