C#/ WinFormsで多言語アプリケーションを作成するためのベストプラクティス?[閉まっている]


94

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

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

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

ただし、これを行う方法は他にもあると思います。

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


3
私は、建設的ではない(または他の「SOには無効」タイプの質問)が最も価値のある質問の1つであることに気づきました:)これも良い質問です(投票はそれを証明すると思います)多言語サポートに多言語アドインを使用するにはyoutube.com/watch?v=SNIyP1QQdVs
Prokurors

1
時々、インターネット上のすべての知識の断片をつなぎ合わせるのはとても難しいので、この質問は今、非常に貴重だと思います。確かに、ソフトな質問を閉じることは、開いたままにすることほど建設的ではない場合があり、これはそのような場合の1つだと思います。:)

回答:


20

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

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

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

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

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

味の問題...

最後に、英語とフランス語でプログラムを作成し、「en-US」と「fr-FR」ではなく、「en」と「fr」を使用しています。物事を複雑にしないでください。英語の異なる方言(アメリカ、英語、オーストラリアなど)には、1つだけを使用するのに十分な違いがあります(フランス語でも同じです)。


2
時々方言を心配する必要があります。たとえば、中国語の文字は、繁体字中国語(台湾)と簡体字中国語(中国本土)では完全に異なります。
MarkJ 2009年

1
@MarkJ MSDNドキュメントには、繁体字中国語と簡体字中国語は方言(国/地域)ではなく、中立的な文化であると記載されています。Msdn: "ニュートラルカルチャとは、言語に関連付けられているが国/地域に関連付けられていないカルチャです。特定のカルチャとは、言語と国/地域に関連付けられているカルチャです。たとえば、" fr "はニュートラルです。 "zh-CHS"(簡体字中国語)と "zh-CHT"(繁体字中国語)は中立的な文化であることに注意してください。 "
ブロードバンド

私は最近linkの助けを借りてこれを行いましたが、そこには記載されていない2つのステップがあります。1.すべての.resourceファイルをクリックして、「Build Action」プロパティを「Content」に設定します。2.すべての.resourceファイルをクリックし、[出力ディレクトリにコピー]プロパティを[常にコピー]に設定します。
Sourav

1
@Kiquenet .NETワイドサポートを含む完全な(コード付きの)回答については、次を参照してください:stackoverflow.com/a/35813707/2901207
CularBytes

9

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

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

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


6

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


1
これは、visualstudioにネイティブ関数として追加する必要があります。素晴らしいソフトウェア!
Caverna

感謝します(ありがたいです)。製品を開始する前(約10年前)にあなたに同意しましたが、MSFTが今日それを実装した場合、私は廃​​業します:)
Larry
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.