2008-09-23 9 views
89

私は、このような場合には小さなプロジェクトに取り組む必要があるので、C#で多言語に適したアプリケーションを作ることを検討してきました。私は基本的にこれを行う2つの方法を見つけました:C#/ WinFormsで多言語アプリケーションを作成するベストプラクティス?

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

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

しかし、これを行う方法はほかにもあります。

だから、ベストプラクティスは何ですか?小規模なアプリケーション(いくつかのフォーム、データベース接続など)にはどのようなものが最も簡単で、大規模なアプリケーションに最適なのは何ですか?

+2

私は、建設的ではない(または他の "有効ではない"タイプの質問)が最も価値のある質問の1つであることに気づいた:これも良い質問であると思う多言語サポートのために多言語アドインを使用する方法に関する良いデモンストレーションhttps://www.youtube.com/watch?v=SNIyP1QQdVs – Prokurors

+0

インターネット上の知識のすべての断片を時々まとめて、今、この質問は非常に貴重です。確かに、柔らかい質問を閉じることは、それらを開いたままにするより建設的ではありません。私はこれがその時代の一つだと思います。 :) –

答えて

18

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

私は2つの異なる方法を使用しています

  • 形当たりリソースファイル
  • グローバルリソースファイル

リソースファイル/フォームは、実装が簡単で、あなただけに必要リソースファイルに値を入力しますが、ラベルがアプリケーション全体に分散されているため、この方法を維持するのが難しいと感じています。

グローバルリソースファイルを使用すると、すべてのラベル(イメージなど)を1つのファイル(言語ごと)に集中できますが、手動でフォームのロードにラベルを設定することを意味します。 「このファイル等のエラーメッセージのためにも使用することができ

味の問題...

一つの最後の点は、私は、英語とフランス語でプログラムを書く私は「EN」と「FR」を使用していません「en-US」および「fr-FR」を含む。物事を複雑にしないで、英語(アメリカ人、英語、オーストラリア人など)の異なる異国人は、1つだけを使用するのに十分な相違点がありません(同じことがフランス語になります)。

+2

時には方言について心配する必要があります。たとえば、繁体字中国語(台湾)と簡体字中国語(中国本土)では、漢字が全く異なります。 – MarkJ

+1

@MarkJ [MSDNドキュメント](http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(v = vs80).aspx)には、繁体字中国語と簡体字中国語が方言ではないことが記載されています(国/地域)が中立の文化です。 Msdn:「中立文化とは、ある言語に関連するが、ある国/地域ではない文化です。特定の文化は、言語や国/地域に関連する文化です。たとえば、「fr」は中立です「zh-CHS」(簡体字中国語)と「zh-CHT」(繁体字中国語)は中立的な文化であることに注意してください。 – broadband

+0

私は最近、[link](http://www.codeproject.com/Articles/15248/Globalization-of-Windows-Applications-in-Minute)の助けを借りてこれを行いました。そこには2つのステップはありません:1.すべてをクリックします.resourceファイルを開き、 "Build Action"プロパティを "Content"に設定します。 2.すべての.resourceファイルをクリックし、 "Copy to Output Directory"プロパティを "Copy Always"に設定します。 – Sourav

9

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

2つのファイルのフィールドは同じで、まだ入力されていないドイツ語のフィールドはすべて、アプリケーションファイルに英語以外のファイル言語として英語で表示されます。文字列を探しているときには、最も特定のもの(ex -de.resx)から最も特定のもの(ex .resx)になります。

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

4

私は翻訳プロセス全体を非常に簡単にする専門ローカライゼーション製品の著者です。これは、任意のソリューションからすべての ".resx"文字列を抽出し、無料のスタンドアロンアプリケーションを使用して翻訳できる単一のファイルにロードするVisual Studioアドインです(翻訳者は私のサイトからダウンロードできます)。同じアドインが変換された文字列をソリューションにインポートします。多くの内蔵セーフガード、たくさんの鐘や笛、オンラインヘルプ(これはあまり必要ありません)で非常に使いやすいです。 http://www.hexadigm.com

+0

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

+0

ありがとう(ありがとう)。私は製品を始める前に(約10年前に)あなたに同意していただろうが、MSFTが今日それを実装した場合、それは私を失業させるだろう:) – Larry

関連する問題