テクニカル ノート 57: MFC コンポーネントのローカライズ

このいくつかのデザインと使用することができますコンポーネントをローカライズ アプリケーションまたは OLE コントロール、または DLL は、MFC を使用する手順について説明します。

概要

実際に MFC を使用するコンポーネントをローカライズするときに解決するのには 2 つの問題があります。まず最初に、独自のリソース-文字列、ダイアログ、およびコンポーネントに固有なその他のリソースをローカライズする必要があります。MFC を使用して構築するほとんどのコンポーネントを含めるし、MFC で定義されているリソースの数を使用します。ローカライズされた MFC リソースも提供する必要があります。幸いにも、いくつかの言語は既に MFC 自体で指定されています。

コンポーネントを準備する必要がありますそのターゲット環境で実行するさらに、(ヨーロッパ、または DBCS 環境が有効)。ほとんどの部分については、この高ビット セットの文字を正しく処理し、2 バイト文字の文字列の処理、アプリケーションによって異なります。すべてのプラットフォームではセットアップ時に接続は別のリソースで使用される 1 つ「世界」バイナリができるなど、MFC、既定で、これら環境両方の有効です。

コンポーネントのリソースのローカライズ

アプリケーションまたは DLL のローカライズだけリソース、ターゲットの言語に一致するリソースに置き換えます必要があります。独自のリソースの場合は、これは比較的簡単です: リソース エディターでリソースを編集し、アプリケーションをビルドします。コードがない文字列またはローカライズをハード コーディングされた C++ ソース コードに-希望のテキストが正しく記述されている場合すべてのローカリゼーション リソースを単に変更することによって行うことができます。実際には、すべてのローカライズ バージョンを提供しても、元のコードのビルド含まないようにコンポーネントを実装できます。これより複雑になりますが、価値があるし、MFC 自体を選択するメカニズムです。また、リソース エディターに、exe ファイルまたは DLL ファイルを読み込んで、リソースを直接編集するアプリケーションをローカライズすることが可能です。これは再は、新しいバージョンのアプリケーションをビルドするたびにこれらの変更が必要ですが。

回避方法の 1 つは呼ばれるサテライト DLL、別の DLL にすべてのリソースを見つけることです。この DLL は、[動的に実行時に読み込まれ、リソースの代わりにその DLL すべてのコードをメインのモジュールからから読み込まれます。MFC は、この方法を直接サポートします。MYAPP と呼ばれるアプリケーションを考えてみましょう。EXE;それはすべての MYRES と呼ばれる DLL 内にあるリソースがあります。DLL。 アプリケーションのinitinstance 関数はその DLL をロードし、その場所からリソースをロードすると、MFC の原因には、次を実行します。:

CMyApp::InitInstance(){//init コードの最初の事のHINSTANCE hInst = LoadLibrary("myres.dll");場合 (hInst! = NULL)AfxSetResourceHandle(hInst);//その他の初期化コードを実行しますか...}

その時から、MFC は myapp.exe の代わりにその DLL からリソースがロードされます。DLL-MFC アプリケーションのインスタンスは、特定のリソースの検索で検索されませんのすべてのリソース、ただし、現在必要があります。この手法は、同様に通常の Dll、OLE コントロールを適用します。セットアップ プログラムは、適切なバージョンの MYRES コピーします。DLL リソース ロケールに応じてしたいです。

リソースを作成するは比較的簡単ですだけ DLL。DLL プロジェクトを作成、追加。RC ファイルには、必要なリソースを追加します。この手法を使用していない既存のプロジェクトがある場合は、そのプロジェクトからリソースをコピーできます。リソース ファイルをプロジェクトに追加した後、プロジェクトをビルドするにはほぼ準備ができました。行う必要があります、リンカー /NOENTRYを含めるオプションを設定するだけです。これは、DLL にはエントリ ポイント-がない、リンカーに指示はコードがあるないため、エントリ ポイントがないです。

特価;Visual C 4.0 およびそれ以降のリソース エディターごとに複数の言語をサポートしています。RC ファイル。これは非常に簡単に 1 つのプロジェクトでのローカライズを管理することができます。各言語のリソースは、リソース エディターによって生成されたプリプロセッサのディレクティブによって制御されます。(&N)。

付属の MFC を使用してリソースのローカライズ

2 つの MFC から、MFC アプリケーションを付け: コードおよびリソース。つまり、MFC はさまざまなエラー メッセージ、組み込みのダイアログ ボックスと、MFC クラスで使用されるその他のリソースがあります。完全にあなたのアプリケーションをローカライズするには、アプリケーションのリソースだけでなく、mfc から直接リソースをローカライズする必要があります。MFC でサポート言語の 1 つのターゲットとする言語の場合は、ローカライズされたリソースを使用するかどうかを確認するだけように MFC は多数の言語リソース ファイルを自動的に提供します。

MFC サポートこのコラムの執筆: 中国語、ドイツ語、スペイン語、フランス語、イタリア語、日本語、韓国語。これらのローカライズ版が含まれているファイルで MFC\INCLUDE\L.* いる ('L' はローカライズために立っている) ディレクトリ。ドイツのファイル MFC\INCLUDE\L.DEU には、たとえばです。MFC\INCLUDE にあるファイルの代わりにこれらの RC ファイルを使用するアプリケーションが発生するには、単に追加、 /IC:\PROGRAM FILES\DEVSTUDIO\VC\MFC\INCLUDE\L.DEU 、RC のコマンド行に (これは単なる例です-選択と同様に、Visual C をインストールしたディレクトリのロケールを代わりにする必要があります)。

アプリケーションは静的に MFC にリンクしている場合、上記の手順が動作します。動的に (、AppWizard は既定なので) は、ほとんどのアプリケーションをリンクします。このシナリオでは、だけでなく、コードを動的にリンク-ので、リソースです。この結果、アプリケーションでは、リソースをローカライズすることができますがそれが存在する場合 MFC 実装リソースは、MFC4x.DLL だ (またはそれ以降のバージョン) または MFC4xLOC.DLL から読み込まれます。あなたは、この 2 つの異なる角度からアプローチすることができます。

Professional および Enterprise Edition の機能のみの特価;静的に MFC にリンクされる Visual の C++ の Professional および Enterprise Edition でのみサポートされているです。詳細についてを参照してください Visual C のエディション(&N)。

複雑なアプローチが船のローカライズされた MFC4xLOC.DLLs の 1 つ (のような MFC4xDEU、ドイツ語、スペイン語、等のための MFC4xESP.DLL)、または、それ以降のバージョンにあり、ユーザーがアプリケーションをインストールすると、適切な MFC4xLOC.DLL をシステム ディレクトリにインストールします。これは、開発者とエンドユーザーの両方の非常に複雑にすることができますなどは推奨されません。テクニカル ノート 56この手法とその注意事項の詳細についてを参照してください。

最も簡単なと最も安全な方法は、1 つを使用している場合、アプリケーションまたは DLL 自体だ (またはそのサテライト DLL) に、ローカライズされた MFC リソースを含めることです。これは、MFC4xLOC.DLL を正しくインストールする、問題を回避できます。あなたも削除する必要があります同じ手順 (RC コマンドラインが正しくローカライズされたリソースを指すを設定上記)、静的の場合これを行うを除いて、 /D_AFXDLL 、定義 AppWizard で追加されました。ときに /D_AFXDLL が定義されて、AFXRES。(彼らは、MFC Dll から代わりにプルアップされるため) H (やその他の MFC RC ファイル) 実際に任意のリソース定義しません。

番号順テクニカル ノート|nbsp;カテゴリ別テクニカル ノート(&N)

Index