4

言語設定をローカライズする最良の方法はありますか? たとえば、フランス語で動作するアプリケーションが既にあり、それを完全に英語にローカライズしたいとします。

アプリケーションのコードへの影響を最小限に抑えながら、アプリケーションを簡単にローカライズする方法はありますか?つまり、コード自体に大きな変更を加えてはいけませんが、いくつか追加するだけで十分です。VB6 でリソース ファイルを使用していると聞いたことがありますが、特に日本語のフォントに問題があるようで、ラベルに特別にガベージ chars をスローします。さて、アプリケーション コードにあまり多くの変更を加えずに、アプリケーションの文字セットを変更する最良の方法は何でしょうか。

このアプリケーションには、対処しなければならないレガシー コードがあります。

4

2 に答える 2

2

リソース ファイルを使用し、コードベースと UI の (ほぼ) すべての文字列を ID に置き換えました。{#1234}文字列を表示するたびに、文字列 ID 1234 のような文字列を受け取り、文字列 ID 1234 を読み込む単一の関数を呼び出します(それを使用LoadString()して返します。UI については、フォーム上のすべてのコントロールを列挙し、表示されている文字列を同じ関数に渡します。

Localise Meこれは、各フォームのLoadイベントでの単一の呼び出しと、TranslateString("{#1234}", "name", Name)何かを動的に設定/表示するたびに呼び出すことを意味しました。

フォントについては、Visual Basic Programmer's Guide のこの例を参照してください。Localiseメソッドの一部として、すべてのコントロールでこれを呼び出します。

フォントや言語が異なれば、同じテキストでも縦方向のスペースの量が異なることを忘れないでください。これを考慮してフォーム レイアウトを調整するか、動的にリフローする必要があります (コントロールを最も長いラベルに揃える、下にシフトしてより長い全幅テキストを許可するなど)。

于 2013-01-28T11:31:01.710 に答える
1

質問の「アプリケーションのコードへの影響を最小限に抑えながら」の部分については、リソース検索関連の機能を独自のクラスにカプセル化し、文字列をフェッチするメソッドを公開することをお勧めします (カルチャ指定子引数を渡すことによって)。

その後の作業の大部分は、適切な文字列を取得するために、おそらくハードコードされた文字列からメソッド呼び出しにコードを変換することです。この回答のバリアントを実装する: VB6 で String.Format() を実装すると、「文化」の概念もカプセル化し、このメソッドの署名にいくつかのcultureInfo引数を導入するとStringFormat(おそらく it と呼ぶStringFormatLocal)、生活が大幅に簡素化されます。

要点は、現在のアプリがローカライズされていない場合、おそらくローカライズについて心配する必要はないということです。それをローカライズするということは、新しい問題を導入することを意味するため、レガシー コードへの影響を最小限に抑えるために、コード ベース全体で「マジック ストリング」と「マジック フォーマット」を探して破棄する必要があります (UI がハードコーディングされている場合)。設計時のキャプションと画像、それらも削除します)、それらをローカライズ API の呼び出しに置き換えて、ローカライズの問題を分離したままにします。

ここで、保存、読み込み、特に非 ANSI 文字列リソースの使用に関する詳細について、別の回答を確認したいと思います...

于 2013-01-28T05:30:59.380 に答える