複数の言語に翻訳したいWinForms
アプリケーションがあります。しかし、私はWinForms
アプリのローカライズの経験がなく、この件に関して非常に矛盾する情報を見つけました。
基本的に、私が欲しいのは:
strings
とints
が含まれている必要がありますが、CultureInfo
私が見たほとんどのソリューションには、1つの_.resx
_ファイルperForm
または外部サテライトアセンブリ、あるいはその両方があります。
_.net Framework 3.5 SP1
_必要な場合。
編集:
ほとんどの場合、Visual Studioはすでに私が欲しいものをサポートしていますが、2つの問題があります。 _Form.Localizable
_をtrue
に設定すると、この素敵なDesigner
サポートがありますが、resx
ごとにForm
が1つ生成されます。 InitializeComponent
で手動でオーバーライドするという考えは、定期的に上書きされるデザイナー作成のコードであるため失敗します。
理論的には、次のことだけを行います。
ComponentResourceManager
の作成をオーバーライドして、自分のグローバルresx
を指すようにし、ApplyResources
の呼び出しを、CultureInfo
を3番目のパラメータとして受け取るオーバーロードに変更します。InitializeComponent()
の後に呼び出され、その動作をオーバーライドする関数呼び出しをコンストラクターに追加する必要があるようです。それはひどく非効率的に思えますが、Visual StudioはInitializeComponent()
へのタッチについて警告するときに適切です。
現時点では、確かに自分の_WinForms localization Framework
_を転がしています...
同様の問題でC#.Net 3.5プロジェクトを完了しました。私たちは8つの言語(英語を含む)を持つ既存の多言語アプリケーション用のWinFormsプラグインを作成していました。
これが私たちのやり方です:
すべてのフォームとUIをデフォルトの言語である英語で作成します。
すべての内部文字列をリソースファイルに入れます(カスタムエラーメッセージやダイアログボックスのタイトルなど、フォームに直接結び付けられていないもの)
ほとんどの作業とテストが完了したら、ローカライズしました。
各フォームにはすでに.resxファイルがありましたが、これは空でした。プロパティ 'Localizable'をtrueに設定します。resxファイルには、ボタンのサイズや文字列などが含まれています。
他の各言語では、フォームの「Language」プロパティを変更しました。たとえば、「スペイン語(チリ)」ではなく「スペイン語」などの各言語の基本バージョンを選択したので、すべての「スペイン語」方言で機能するようになりました。
次に、各コントロールを調べ、そのテキストを翻訳し、必要に応じてサイズを変更しました。これにより、言語とフォームの組み合わせごとに.resxが作成されました。
次に、8つの言語について、フォームごとに8つの.resxと、一般的な文字列用に8つの.resxが残されました。コンパイルすると、出力フォルダーには作成した.dllが含まれ、次に.resources.dllが含まれる各言語のサブフォルダーが含まれます。
言語プロパティを変更して、文字列とレイアウトが正しいことを確認するだけで、デザイナーでUIのバージョンをテストできました。
結局のところ、私たちが頭を抱えたとたん、それは非常に簡単で無痛でした。
フォームの読み込みにカスタム調整を書き込む必要はありませんでした
私はASP.NETについて同様の質問をしていて、最初の答えを得ました-このツールとそのワークフローもあなたに役立つかもしれません-見てください: Lingobit Localizer
それはあなたのWinformsアプリをロードすることができるようで、あなたがそれをしている間あなたがあなたのラベル等を翻訳し始めて、そしてフォームを見ることを可能にします。増分翻訳や翻訳メモリなど、他の多くの機能(同じ用語を繰り返し使用する場合)。
(Winformsの場合)かなり有望に見えますが、自分では使用していません。
潜在的な.NETローカリゼーションツール(---)の 広範なリストを次に示します -よくわかりません。どのように機能し、何がカバーされているかを確認してください。探しているものが見つかるかもしれません。 。
マーク
これは大きなテーマであり、あなたが望むものを達成するための多くの方法があります。フレームワークは基本を提供しますが、完全なソリューションでは、特定の要素を自分で実装する必要があります。
たとえば、デフォルトのフレームワーク実装では、すべてのリソースに対して.resxファイルを作成します。 ASP.Netでは、これは各ユーザー/サーバーコントロールまたはページを意味します。これは簡単なメンテナンスには向いておらず、リソースをデータベースに移動する場合は、独自のプロバイダーを実装する必要があります。
Winformsの知識は限られていますが、SilverlightまたはWPFを使用している場合は、次のURLでGuy Smith-Ferrierのこの件に関する記事を読んでください。 http://www.guysmithferrier.com/category/Internationalization.aspx =。彼はまたあなたの人生を楽にすることができるいくつかのツールセットを持っています: http://www.dotneti18n.com/Downloads.aspx 。
私は以前彼と一緒に仕事をしたことがあり、その主題をより深く理解している人に出会ったことはありません。
最初と2番目の要件に対する解決策はありませんが、フォームのローカライズは各Wordを翻訳するほど簡単ではないことに注意してください。翻訳された各テキストがそれぞれのコントロールに収まることを確認する必要があります。また、別の文化で変更する必要があるアイコンや画像があるかもしれません。
3つ目のポイントとして、次の行を使用して手動で言語を変更できます。
CultureInfo ci = new CultureInfo("fr");
Thread.CurrentThread.CurrentUICulture = ci;
あなたが求めているもの:
Vanilla Visual StudioのIDEでは実行できません。
それが必要とするのは、基本的にこれらのすべてのステップを実行するいくつかのカスタム作業です:
リソース:(決して完全なリストではありません)