2

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

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

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

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

4

2 に答える 2

4

#1 については、GetSystemDefaultLangID関数を使用して、マシンの言語識別子を取得できます。

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

#3 については、言語ごとに 1 つのリソース DLL を用意し、それぞれに同じリソース ID を含めます。言語がわかったら、その言語の DLL をロードすれば、あとはそのまま機能します。

于 2009-01-29T02:46:22.903 に答える
3

Re 1:以前の GetSystemDefuaultLangID の提案は良いものです。

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

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

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

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

ローカライズは、英語のテキストを選択した言語に変換する機能です。NoLocalize は何もしません。

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

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

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

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

DLL からロードする代わりに #1 を使用する理由は、このソリューションを維持する作業が不要であり、その場で変換する必要がある新しい文字列を追加できるためです。

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

于 2009-01-29T03:29:11.740 に答える