[解決済み】C#でローカライゼーションを使用する方法
質問
どうしてもローカライズがうまくいきません。
私はクラスライブラリを持っています。今、私は resx ファイルを作成し、スレッドカルチャーに基づいていくつかの値を返します。
どうすればいいのでしょうか?
どのように解決するのですか?
-
以下のようにして、プロジェクトにResourceファイル("strings.resx"と呼ぶことができます)を追加してください。
右クリック プロパティ を選択し 新規追加 -> 新規項目... をクリックし、コンテキストメニューの ビジュアル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に入れることができるのです。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] List<T>をオブジェクトのプロパティでソートする方法
-
[解決済み] 特定のプロパティに対するLINQのDistinct()
-
[解決済み] あるコンストラクタを別のコンストラクタから呼び出す
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] コードが含まれるアセンブリのパスを取得するにはどうすればよいですか?
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み] .NETのCultureInfoのCurrentCultureとCurrentUICultureのプロパティの違いは何ですか?