.Net 3.5を使用すると、中国語のローカライズされたリソースに奇妙なバグがあります。この問題は、コンソールアプリケーションやWindowsフォームアプリケーションに影響し、再現するのは簡単です。中国語のリソースが.Net 3.5で動作しない
中国のリソースは基本的には使用されていませんが、他のリソース(フランス語や英語など)が使用されています。さらに、.Net 4.xを使用するとうまく動作します。
Windows 7とWindows 10では間違っています(Windows 8.xは試していませんが、間違っていると思います)。
これは、コンソールアプリケーションで再現するのは簡単です:
- はデフォルト.NET 3.5コンソールアプリケーションを作成します。
- は、「Resources.resx」デフォルトのリソースファイルを追加し、それに名前/値のペアを追加します。テスト、私は英語だ
- 「Resources.fr.resx」ファイルを追加し、それに追加します名前/値ペア:テスト、私はフランスの
- だが、「Resources.zh.resx」ファイルを追加し、それに名前/値のペアを追加します。テストを、私は中国の
- だのコードを追加します。
Main()
メソッドの下にあります。
コード:私たちは非中国のシステム上でこのコードをテストすることができるように
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture;
Console.WriteLine(System.Threading.Thread.CurrentThread.CurrentUICulture);
Console.WriteLine(ConsoleApplication1.Properties.Resources.Test);
(最初の行は単に便宜上です。 CurrentUICultureのロケールが変更されずに既に中国語になっているため、実際の中国語システムで実行しているときにその行を削除できますが、それでもバグは発生します)。
コントロールパネル|地域、英語(米国)にフォーマットを変更し、プログラムを実行します。出力は次のようになります。
en-US
I'm English
今フランス語(フランス)に地域の形式を変更し、プログラムを実行します。出力は次のようになります。
fr-FR
I'm French
今中国語(簡体字、中国)にを地域の形式を変更し、プログラムを実行します。出力は次のようになります。
zh-CN
I'm English
これは機能していないことに注意してください。
他に何も変更せずに、プロジェクトのプロパティを変更して.Net 4以降のバージョンをビルドし、再実行します。今度の出力は
zh-CN
I'm Chinese
です.Net 4で動作します。
私の質問は以下のとおりです。
- 誰がこれを再現することはできますか?
- これは既知のバグですか?
- 回避策はありますか?
地雷のビット、zh-CNとzh-CHS、およびzh-Hansはすべて簡体字中国語を意味します。あなたがzh-CNにマッチしたければ、中国本土に特化した簡体字中国語を選ぶ必要があります。 "中国語(簡体字、中華人民共和国)"というタイトルのデザイナー。フォールバックが必要な場合は、リソースにzh-Hansを使用する必要があります。そんな感じ。 –
@ハンスパッサン私はそれを試みます。これは、.Net 4.xで修正された何らかのバグのようです。なぜなら、中国語のすべてのサブカルチャーのために "Resources.zh.resx"に戻ってしまうからです(実際は.Net 4.xでもそうです)。私は、 "Resources.zh-CN.resx"を.Net 3.5で使用することを発見しましたが、他の方言は使用できません。 –
関連していると思われるこのブログが見つかりました:https://blogs.msdn.microsoft.com/shawnste/2007/12/13/zh-hans-zh-hant-and-the-old-zh-chs-zh- cht /。また、[CultureInfoのドキュメント](https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx?f=255&MSPPError=-2147217396)もこれを明示しているので、答えは:あなたが示唆したように 'zh-Hans'を使用してください。 –