2009-04-15 8 views
1

MFCを初めて使用しているため、実行時に言語を変更できるマルチ言語アプリケーションを構築する必要があります。リソースDLLからコントロールのキャプションをロードする

AFAIK MFCで国際化する一般的な方法は、リソースのみのDLLを作成することです。しかし、実行時にリソースDLLを切り替えるには簡単な方法がないようです(つまり、DLLをロードし、いくつかの関数を呼び出すと、MFCはすべてのものを自動的に更新します)。

したがって、すべてのコントロールなどを手動で更新する必要があります。私はすでにDLLの文字列テーブルから文字列を読み込むことができましたが、ボタンのようなコントロールのキャプションは対応するダイアログに格納されています(私のリソースハッカーを信頼すれば:))私はそれらをロードし、追加の文字列を手動で文字列テーブルに格納する。

また、別の方法がありますか?

それはどんな違いを行った場合...私は大規模なローカライズされたMFCプロジェクトに取り組むMS埋め込まのVisual C++ 4

答えて

1

を使用する必要があります。

  1. 各言語に固有のキー - >ローカライズされた文字列の辞書です。これを実装するにはいくつかの方法がありますが、後になります。ダイアログリソースで

  2. コントロールIDまたはキャプションが初期化コール::EnumChildWindowsで翻訳

  3. ベースのCDialog、CFormViewの、などの作成をルックアップするために使用されるキーにしてに設定されています。コールバックでは、翻訳をルックアップして、コントロールのキャプションを翻訳に置き換えます。

辞書にはいくつかの方法があります。

  • 組み込みのローカライズされたリソースの選択と文字列テーブルを使用するには、コントロールを文字列IDに一致させる必要があります。コントロールIDが文字列IDと一致するように慎重に確認するか、キャプション内のIDをASCIIエンコードしてから、atoiを使用してint値を解析できます。

  • 組み込みのローカライズされた文字列テーブルの処理を忘れて、各言語の独自の文字列 - >文字列辞書を維持することができます。これにより、レイアウトを簡単にするリソース内のローカライズされていない文字列にキャプションを設定できます(ただし、すべての言語でテストする必要があります)。独自の「依存性注入」を実行して、正しい辞書をアップする。コアバイナリを再構築せずに、更新された/追加の言語をリリースしたいと考えています。

1

あなたは(はるかによって最も簡単な解決策、そしてあなたはIMOを使用する必要があります1)アプリケーションの再起動を必要としない場合は、リソースDLLのを使用して、メインウィンドウを再作成することができるときユーザーは言語を切り替えます。そうすれば、MFCは新しい言語でメニューなどを再作成します。リソースハンドルを切り替えた瞬間から、すでに新しいダイアログが新しい言語で表示されます。

これは埋め込まれた世界とどう関係しているのか分かりませんが、私の経験はデスクトップMFCからのものです。

関連する問題