私はすでに多言語ウェブサイトのソリューションを持っていますが、それが良いソリューションであるかどうかはわかりません..そして可能な限り柔軟です. まず、Visual WebGUI を使用してプロジェクトを開発しています。簡単に言うと、webgui は Web プログラミングですが、WinForms に非常に似ています。
だから、ここにあります:
MDI アプリケーションがあります。これは、上部に MainMenu があり、内部で多くのウィンドウを開く機能を備えたシンプルな Web ページです。
まず、メインのスタートアップ プロジェクトで resx ファイルを作成します。
"myStrings.resx"
デフォルトの言語と「」をドイツ語の翻訳としましょう"myStrings.de-DE.resx
。翻訳されるすべての文字列は、その 2 つのリソース ファイルに含まれている必要があります。
さて、私の最大の関心事。すべてのクラス (フォームまたはフォームなし) で、次のようなメソッドが必要です (この例では、変換するコントロールは 1 つだけです)。
private void adjustCulture() { System.Resources.ResourceManager rm = new System.Resources.ResourceManager("MyApp.myStrings", typeof(testWindow).Assembly); label2.Text = rm.GetString("DefaultString", culture); }
そして、この関数をすべてのウィンドウに個別に実装する必要があるため、これは非常に気になります。また、そのウィンドウ内のすべてのコントロール (翻訳されるもののみ) とは限りません。そのため、少し「柔軟性がありません」。
5.また、デザイナーでラベルを初期化することはできません。コンストラクターですべての初期化を手動で行う必要があります。
label2.Text = rm.GetString("DefaultString", culture);
(or in Designer partial class inside InitializeComponent method - but also, manually).
6.最後に、誰かが言語を変更した場合:
すべてのウィンドウの Load イベントで、常にadjustCulture関数を呼び出す必要があります。まず第一に、初期化する..第二に、誰かが (MDI メニューで) 言語をドイツ語に変更し、その瞬間に MDI で 3 つのウィンドウを開いたときに..全員を個別に翻訳する必要があります。そのため、開いているウィンドウ ハンドラーをどこかに保存し、全員の Load イベントを呼び出す必要があります。
それは多言語 webgui アプリケーションの良い解決策ですか? または、より良い解決策はありますか?より柔軟ですか?