9

私は、MFC アプリでいくつかの作業を行う必要がある .NET 担当者です。このアプリは、VS2010 に変換した VS2008 MFC 実行可能ファイルです。元の開発者は、アプリケーションのコマンド ラインで、キーと値のペアを含む .txt ファイルの名前を指定して、ローカライズを行いました。実行可能ファイルへのインストールされたショートカットは、アプリがインストールされている国に応じて異なる .txt ファイルを指定します。これはもちろん、.exe を直接実行するだけでは機能しません。これは私には奇妙なやり方のように思えます。

これを適切な MFC の方法で行いたいのですが、Google で決定的な答えを見つけるのに苦労しています。私の理解では、このローカリゼーションには .rc ファイルの文字列テーブルを使用する必要がありますか? これは MFC の現在のベスト プラクティスですか?

文字列テーブルに関しては、異なる言語ごとに複数の文字列テーブルを作成するのが慣例であると読みました。MFC アプリケーションはどの言語を使用するかをどのように選択しますか? マシンの現在の言語設定に基づいていますか、それともこれを制御できますか (ビルドしている Wix .msi インストーラーで言語を指定する必要があるかもしれません)?

また、MFC アプリケーション内にすべてのリソースを埋め込むことが支持されなくなり、別のリソース .dll をコンパイルする必要があることも読みました。これは本当ですか?それを行う方法を調査してください...

最後に、MFC で Unicode をサポートするには何か特別なことをする必要がありますか?それとも MFC は既定で Unicode ですか?

ありがとう

4

2 に答える 2

11

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

注:リソーススクリプト(.rc)には文字列テーブルが1つだけ含まれている必要があります。

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

私のこの他のcodeprojectの記事では、システム設定またはユーザー設定に従ってリソースDLLを簡単にロードできます。コードは、ユーザー設定(ユ​​ーザーのUI言語と地域設定に基づく)に最も一致する使用可能な言語であるリソースDLLを検索します。このコードを使用すると、使用可能なすべての言語でメニューを簡単に作成することもできます。そうすれば、ユーザーはデフォルトの選択を上書きできます。

免責事項:私の広告は続きます。スキップしてください:-)

リソースの翻訳、翻訳の管理、およびリソースDLLの作成については、appTranslatorを確認することをお勧めします。

ADの終わり:-)

Unicodeに関しては、MFCにはANSIバージョンとUnicodeバージョンのコードが付属しています。ANSIアプリとUnicodeアプリのどちらを作成するかは、ユーザー次第です。プロジェクト設定の最初のページで選択するだけです。もちろん、最初から始める場合は、間違いなくUnicodeを使用する必要があります。ただし、レガシーの理由でANSI / MBCSを維持する必要がある場合でも、それほど心配する必要はありません。アプリのローカライズを妨げることはありません。

于 2012-01-08T20:46:39.050 に答える
6

数年前、MFC で複数の言語を使用する必要があったときは、個別のリソース DLL を使用していました。必要なことは、リソース関数が使用するハンドルを switch に 1 回呼び出すだけで、それ以降はすべて自動的に行われます。

弦を交換するだけではありません。特にダイアログには文字列が含まれており、翻訳後にそれらの文字列が長くなりすぎた場合は、レイアウトを変更する必要がある場合があります。

于 2012-01-05T03:44:50.660 に答える