win32 で多言語アプリケーションを構築するためのベスト プラクティスは何ですか?

StackOverflow https://stackoverflow.com/questions/490297

質問

Windows Mobile 上で GUI アプリケーションを構築する必要があり、ユーザーが希望する言語を選択できるようにするか、アプリケーションが自動的に言語を選択できるようにしたいと考えています。必要なリソースだけを含む複数の DLL を使用することを検討します。

1) ユーザーの介入なしにアプリケーションに適切なリソース言語を自動的に選択させるための推奨 (デフォルト?) 方法は何ですか?サンプルはありますか?

2) ユーザー/アプリケーションが表示する言語を制御できるようにするためのオプションは何ですか?

3) 可能であれば、複数の言語リソースを含む DLL を作成し、言語を動的に選択するにはどうすればよいですか?

役に立ちましたか?

解決

#1のために、あなたはに GetSystemDefaultLangID の機能を使用することができますマシンの言語識別子を取得します。

#2のために、あなたがサポートする言語のリストを表示でき、ユーザーがいずれかを選択した場合、テキストファイルやレジストリに選択を書く(のWindows Mobile上のレジストリはありますか?)。起動時に、ファイルやレジストリ内の選択範囲がない場合にのみ、#1の関数を使用します。

#3のために、我々はそれを行う方法は、同じリソースIDが含まれ、それぞれが、言語ごとに一つのリソースDLLを持つことです。あなたが言語を把握したら、その言語用のDLLをロードし、残りはただ働きます。

他のヒント

Re1: 以前の GetSystemDefaultLangID の提案は良い提案です。

再 2: インストールの最初のステップとして問い合わせることができます。または、言語ごとに異なるインストーラーをパッケージ化することもできます。

Re3: 理論的には、上記の DLL メソッドは素晴らしいように思えますが、実際には、個人的にはまったくうまく機能しませんでした。

より良い方法は、プログラム内のすべての文字列を次のいずれかで囲むことです。Localize または NoLocalize。

MessageBox(Localize("Hello"), Localize("Title"), MB_OK);
RegOpenKey(NoLocalize("\\SOFTWARE\\RegKey"), ...);

Localize は、英語のテキストを選択した言語に変換する単なる機能です。NoLocalize は何も行いません。

ただし、選択したスクリプト言語でいくつかの便利なスクリプトを作成できるため、文字列をこれらの値で囲む必要があります。

1) すべての Localize(" プレフィックスを検索し、english=otherlangauge の名前と値のペアを含む .ini ファイルを出力するスクリプト。出力 .ini ファイルにすでにマッピングが含まれている場合は、再度追加する必要はありません。ini ファイルを完全に再作成することはありません。スクリプトを実行するたびに、不足しているファイルが追加されるだけです。

2) すべての文字列を検索し、それらが Localize(" または NoLocalize(") で囲まれていることを確認するスクリプト。そうでない場合は、どの文字列をローカライズする必要があるかを示します。

#2 が重要な理由は、すべての文字列が実際にローカライズが必要かどうかを意識的にマークされていることを確認する必要があるためです。そうしないと、適切なローカリゼーションが行われていることを確認することは絶対に不可能です。

DLL からロードする代わりに #1 を選択する理由は、このソリューションを維持するのに手間がかからず、その場で翻訳する必要がある新しい文字列を追加できるためです。

プログラムとともに出力される ini ファイルを出荷します。また、これらの ini ファイルを翻訳者に渡して、翻訳者が english=other language のペアを変換できるようにします。相手から返送されてきたら、チェックインした .ini ファイルを翻訳者が指定したファイルに置き換えるだけです。#1 で説明したようにスクリプトを実行すると、翻訳者が翻訳中に不足している翻訳があれば再追加されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top