2009-10-05 10 views
10

私はVS 2005と.netフレームワーク2.0を使って開発された既存のwinformsアプリケーションを持っています。既存のWindows Formsアプリケーションをグローバル化しますか?

このアプリケーションをグローバル化する必要があります。 2つのロケールはドイツ語と日本語です。

私たちはローカライズされたフォームのリソースを作成するために、フォームのローカライズプロパティを使用することができますし、メッセージボックスで使用される文字列の他のリソースファイルを持つことができます知っている、例外など。

私は既存のアプリケーションをグローバル化するための最良の方法を知りたいです各フォームにlocalizeプロパティを設定するか、ラベル名とコントロール名を抽出するツールがありますか?

また、いくつかのコンポジットを使用していますコード内のいくつかの場所で文字列を連結してメッセージ文字列を連結する方法、これらをローカライズする方法

グローバル化アクティビティを開始する前に、アプリケーションをVS 2008および.net framework 3.5に移行します。

答えて

7

私はLTR言語でしか作業していませんでしたが、日本語は触れていません。このことを念頭に置いて、ここに私の頭の上から私のベストプラクティスのいくつかを以下のとおりです。

  • 入れて、すべての言語固有の(私はにつき1つの.resxファイルを使用したいの.resxファイルに、プログラムの文字列と文字列の断片ダイアログボックス)、自動生成されたクラスとプロパティを使用して文字列を呼び出します。コードには言語固有の文字列が残ってはいけません(コード中に文字列がほとんどないことを意味します)。良いパターンは、言語の構文が変わるので、フォーマット文字列を.resxに入れることです。
  • すべてのフォームでLocalizableプロパティをTrueに設定し、言語固有の変更を直接行います(Languageプロパティを使用)。
  • 言語固有の文字列を表示するものは、必要な場所に余分なスペースを持つようにフォームを設計します(注:ドイツ語は英語よりも長くなります)。 IMOでは、言語の基本的な変更のためにフォームを完全に再配置する必要はありません。しかし、日本語のような言語で行う必要があります。
  • テキストを動的に設定する必要があるラベルなどのコントロールでは、唯一のマーカーであることがわかるようにフォーム上にテキストを設定します。私はこれに "##"を使用しています。これは本当に際立っています。ダイナミックテキストの「サンプル」にテキストを設定しないでください。フォームを見るだけでどのコントロールが動的に設定されるのかは決して思い出せません。
+0

ありがとう。いくつかのことが変更されたり、リソースファイル内のテキストを変更する必要がある場合、このアプローチを使用して保守性とスケーラビリティを知りたいと思います。これをもう1つの言語に拡張したい場合は、アプリケーションが既に存在する場合製造?再コンパイルと再デプロイが必要ですか? – ksa

+0

この方法では、追加と変更の両方のメイン実行可能ファイルを再コンパイルして再デプロイする必要があります。しかし、単純な多言語実装で_something_を再デプロイする必要があります。これは問題ではありません。なぜなら、言語文字列は、リリース前にスペルチェック/文法チェックが行われていて、クライアントが望む新しい言語を追加するのは比較的まれなことです。 –

+0

私たちのアプリケーションでは、新しい言語サポートを追加する必要があります。したがって、言語以外のアプリケーションに変更がなければ、新しい.resxファイルを作成し、サテライトアセンブリを生成して適切なディレクトリ構造に配置することができます。これは再コンパイルを必要としません、そうですか?もう1つの質問は、異なるロケールのユーザー間でいくつかのデータを共有する場合、入力したユーザーデータの翻訳です。 – ksa

1

ソースコントロールとしてVisual Source Safeを使用している場合は、を入力しないでください。ソースコード内に日本語のテキストを追加します。 Visual StudioはUnicodeソースファイルを処理できますが、VSSはUnicodeソースファイルをうまく処理しません。

自分自身を日本語に翻訳したアプリケーションで作業していましたが、ソースコード自体(MessageBoxのような関数への呼び出し用)に日本語が含まれていたため、ファイルが破損していました。オリジナルのチェックイン版に壊れてしまいました。この破損は、大部分のコードファイルが日本語文字ベースのものになり、VSSがUnicodeベースのCSファイル(文字あたり2バイトを使用)の一部を1バイトだけシフトしたために発生しました。これらのファイルを修正

はこれだけこれをしない、私の上司は私の肩の上にピアリングと私たちは運命だったかについて叫んで、手動作業の多くを必要と。

Best way to implement multi-language/globalization in large .NET project

Best practice to make a multi language application in C#/WinForms?

は個人的に、私は簡単な方法を好む:

はまた、ここではこのトピックに関する他のStackOverflowの質問のカップルです。 Excelや、翻訳する必要があるアプリケーションのテキスト(テキストプロパティ、MessageBox関数で使用する文字列など)をExcelで作成し、翻訳者にスプレッドシートを送信します。アプリケーションでは、フォーム上のすべてのコントロールを反復処理し、Textプロパティを変換された値に変更する各フォームのLoadイベントでメソッドを呼び出します。 MessageBoxへのすべての呼び出しを、表示されるテキストを変換する中間関数への呼び出しで置き換え、変換されたテキストでMessageBoxを呼び出します。

組み込みのグローバリゼーション方法を使用すると、手作業で各グローバル化されたフォームを作成し、手動ですべてのテキストを翻訳に置き換えなければならないため、多くの作業が必要になるため、プログラマが流暢になる必要があります。私が言及する方法はプログラム的に行われ、プログラマが翻訳された言語に堪能である必要はありません。

+1

バックアップをしていないという理由で上司に叫んではいけません。フランス語でも彼を叫び、日本の字幕で。 – Timmerz

+0

私たちは*「* Visual Source Safe」と呼ばれた場所にバックアップを作成しました。私はこのようなことは、リポジトリを元のチェックインされたファイルに壊す可能性があるとは思っていませんでした。 – MusiGenesis

+0

あなたは明らかにバックアップの概念を理解していません。 – Timmerz

0

はあなたが外部のXMLファイルを使用するためにコミュニティがローカライズします。 http://www.codeplex.com/url2jpegを見ると、このオープンソースプロジェクトはこのようにローカライズされており、自動フォームローカリゼーションにはReflectionを使用しています。

文字列の場合は、隠しラベルを使用します。

2

ローカライゼーションプロパティを設定する方が、文字列だけでなく、さまざまなコンポーネントのジオメトリもベースの.resxファイルに抽出されるため、各フォームに設定する方がよいでしょう。ノミネートされた言語では、コンポーネントの元のサイズが翻訳に適していることはほとんどありません。

一般的に、異なる言語の同じパターンのパターンにマップされないため、文字列をフラグメントから構成することはお勧めできません。値を入力するには、書式設定された文字列(String.Format)を使用しますが、元の言語の文法と文章の順序に依存するものはありません。

関連する問題