94

これが当てはまる小さなプロジェクトで作業する必要があるため、C# で複数の言語に適したアプリケーションを作成することを検討してきました。これを行うには、基本的に2つの方法を見つけました。

フォームの Localizable プロパティを true に設定し、Language プロパティを設定し、すべてのラベルなどを入力すれば、完了です。これに見られる主な欠点は、フォームの一部ではない他のものを複数の言語に対応させる方法 (ポップアップ ウィンドウ、ログ ファイル、ウィンドウなど) です。

「Lang.en-us.resx」などのリソース ファイルと、「Lang.nl-nl.resx」などの言語ごとに 1 つのリソース ファイルを作成し、文字列で埋めます。IDE は自動的にクラスを生成するように見えるので、コードでは Lang.SomeText を使用できます。これに見られる最大の欠点は、すべてのフォームに対して、すべてのラベルとその他のキャプションを自分でコードに設定する必要があることです (これらのリソースではデータ バインディングが機能しないようです)。

ただし、これを行う他の方法もあると確信しています。

それで、ベストプラクティスは何ですか?小規模なアプリケーション (いくつかのフォーム、データベース接続など) にとって最も簡単なのはどれで、大規模なアプリケーションに最も適しているのはどれですか?

4

3 に答える 3

20

私は常に多言語アプリケーションにリソース ファイルを使用してきました。
それらの使用方法を説明する Web 上の多くの記事があります。

私は2つの異なる方法を使用しました:

  • フォームごとのリソース ファイル
  • グローバル リソース ファイル

リソース ファイル/フォームは実装が簡単で、リソース ファイルに値を入力するだけで済みますが、ラベルがアプリケーション全体に分散しているため、このアプローチを維持するのは難しいと思います。

グローバル リソース ファイルを使用すると、すべてのラベル (画像など) を 1 つのファイル (言語ごと) に一元化できますが、フォーム ロードでラベルを手動で設定する必要があります。このファイルは、エラー メッセージなどにも使用できます。

味の問題…

最後のポイントとして、私は英語とフランス語でプログラムを書きます。「en-US」と「fr-FR」ではなく、「en」と「fr」を使用します。複雑にしないでください。英語のさまざまな方言 (アメリカ語、英語、オーストラリア語など) には、1 つだけを使用するほどの違いはほとんどありません (フランス語も同様です)。

于 2008-09-23T07:49:18.140 に答える
9

最近、ドイツ語と英語の両方をサポートするプログラムを作成しました。英語のリソースに LanguageResources.resx という名前を付け、ドイツ語のリソースに LanguageResources.de.resx という名前を付けただけで、正しい言語が自動的に選択されたことに驚きました。ResXFileCodeGenerator がすべてを処理してくれました。

2 つのファイルのフィールドは同じであり、まだ入力されていないドイツ語のフィールドはアプリケーションに英語として表示されることに注意してください。これは、最も一般的なファイル言語がデフォルト ファイルであるためです。文字列を検索すると、最も具体的なもの (例: .de-DE.resx) から最も具体的でないもの (例: .resx) に移動します。

文字列を取得するには、ResourceManager.GetString または ResourceManager.GetObject 呼び出しを使用します。アプリケーションは ResourceManager を無料で提供するはずです。

于 2008-09-23T13:28:00.713 に答える
6

これに遭遇する可能性のある他の人のために (最後の投稿から 1 年以上後)、私は翻訳プロセス全体を非常に簡単にするプロのローカリゼーション製品の作成者です。これは、任意のソリューションからすべての ".resx" 文字列を抽出し、無料のスタンドアロン アプリケーションを使用して翻訳できる単一のファイルに読み込む Visual Studio アドインです (翻訳者は私のサイトからダウンロードできます)。同じアドインは、翻訳された文字列をソリューションにインポートします。多くのビルトインセーフガード、多くの追加機能、およびオンラインヘルプ (あまり必要ありません) により、非常に使いやすくなっています。http://www.hexadigm.comを参照してください。

于 2011-03-30T01:00:22.820 に答える