8

私はMFCアプリケーションで何か作業をしなければならない.NETの人です。このアプリは、私がVS2010に変換したVS2008 MFC実行ファイルです。元の開発者は、アプリケーションコマンドラインでキー値のペアを持つ.txtファイルの名前を指定することでローカリゼーションを行いました。実行可能ファイルにインストールされたショートカットは、アプリケーションがインストールされている国に応じて別の.txtファイルを指定します。これは、.exeを直接実行するだけではうまくいきません。これは私にものをする奇妙な方法のように思えます。VC++ 10 MFC:ローカリゼーションを行う正しい方法は何ですか

私はこれをMFCのやり方でやりたいのですが、私はGoogleで決定的な回答を見つけるのが難しいです。私の理解は、このローカリゼーションには.rcファイルのString Tableを使用する必要があります。これはMFCの現在のベストプラクティスですか?

文字列テーブルに関して、私は、実際には異なる言語の複数の文字列テーブルを作成することを練習していると読んでいます。 MFCアプリケーションは、使用する言語をどのように選択するのですか?マシンの現在の言語設定に基づいているか、これを制御することができますか(Wix .msiインストーラによって言語が指定されている可能性があります)。

また、MFCアプリケーション内のすべてのリソースを埋め込むことが有利でなくなり、別のリソース.dllsをコンパイルする必要があることも読んでいますか?これはどういうふうに調べているのですか...

最後に、MFCがUnicodeをサポートするために何か特別な処理を行う必要がありますか?またはMFC Unicodeがデフォルトですか?私はMFCで複数の言語で動作するように持っていたとき

+1

MFCとUnicodeは独立しています。ウィザードを使用してプロジェクトをビルドする場合、Unicodeがオプションの1つになります(デフォルトにする必要があります)。それ以外の場合は、プロジェクト設定で見つけることができます。 –

+0

もう1つのCP記事:http://www.codeproject.com/Articles/11040/Multiple-language-support-for-MFC-applications-wit –

答えて

10

考えられるのは、すべてのローカライズ可能なアイテムをリソースに格納するということです。メニューやダイアログなどの標準UIオブジェクトは自動的にそこに格納されますが、文字列リテラル(エラーメッセージ、メッセージボックスプロンプトなど)などの項目は、ソースコードから文字列テーブルに移動されます。この短いcodeproject articleのmineは、コード内の文字列テーブルから文字列を簡単に引き出す方法を示しています。

注:リソーススクリプト(.rc)には1つの文字列テーブルのみが必要です。

そこからリソースを翻訳し、リソースDLL(別名サテライトDLL)を作成できます。考え方は、各言語の.rcファイルの別のコピーを保持することです。各翻訳は、コードレスの DLLにコンパイルされ、リソースのコンテナとして機能します。

This other codeproject article of myineでは、システム設定またはユーザー設定に応じてリソースDLLを簡単に読み込むことができます。コードは、使用可能な言語がユーザー設定(ユ​​ーザーのUI言語と地域設定に基づく)に最もよく一致するリソースDLLを探します。このコードでは、使用可能なすべての言語のメニューを簡単に作成することもできます。これにより、ユーザーはデフォルトの選択を無効にすることができます。

免責条項:私の広告が続きます。

翻訳の管理、翻訳の管理、リソースDLLの作成に関しては、appTranslatorをチェックしてください。コードのANSIとUnicodeバージョンのUnicode、MFC発送に関して

:-) ADの

END。 ANSIまたはUnicodeアプリケーションを構築するかどうかは、あなた次第です。プロジェクト設定の最初のページで選択するだけです。もちろん、あなたが最初から始まっているなら、あなたは間違いなくUnicodeに行くべきです。しかし、従来の理由でANSI/MBCSにとどまる場合は、心配する必要はありません。アプリのローカライズを妨げることはありません。

6

年前

おかげで、私たちは別々のリソースDLLを使用していました。必要なのは、リソース関数を使用するハンドルを切り替え、その時点からすべてが自動的に切り替えることだけです。

文字列を変更するだけではありません。特にダイアログには文字列が含まれているため、翻訳後に文字列が長くなり過ぎるとレイアウトを変更する必要があります。

+0

MFCでは、文字列をダイアログから区切る方法はありません。 – OneWorld

+0

@OneWorldそれはMFCだけではなく、ダイアログを作成するためのWindows APIは埋め込み文字列を持つダイアログリソースに依存しています。 –

関連する問題