問題
プログラムに言語を切り替えるシステムを実装しようとしています。CultureInfo と ResourceManager を使用してそれを実現できることがわかりました。リソースが見つからないという問題が数時間発生した後、このコードを作成しました。最終的に、stackoverflowで見つけて回答し、次のコードを配置しました。
CultureInfo culture;
culture = CultureInfo.CreateSpecificCulture("it-IT");
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
Assembly resourceAssembly = Assembly.Load("MY ASSEMBLY NAME");
ResourceManager manager = Properties.Resources.ResourceManager;
string[] manifests = resourceAssembly.GetManifestResourceNames();
string manifest = manifests[0].Replace(".resources", string.Empty);
manager = new ResourceManager(manifest, resourceAssembly);
string greeting = String.Format("The current culture is {0}.\n{1}",
Thread.CurrentThread.CurrentUICulture.Name,
manager.GetString("HelloString"));
MessageBox.Show(greeting);
これは多くのページ、ウィンドウ、およびユーザーコントロールを備えた非常に大きなプログラムであるため、さまざまなファイルから言語にアクセスする必要があります。上に投稿したコードは、ソリューションのルートを調べて、it-IT.resx という名前のファイルを探す必要があります。現在のカルチャは it-IT と書かれていますが、HelloString の値は書き込まれませんが、エラーにはならないので、リソース マネージャーに問題があることは間違いありませんが、なぜクラッシュしないのかわかりませんリソースが見つかりません。resx ファイル内に HelloString という値があると確信しています。