MFC中英文同期

2241 ワード

実現思想:
従来の方法は、すべてのリソースをダイナミックライブラリに配置することです.1つの言語はダイナミックライブラリで、プログラムが実行されるときに異なるダイナミックライブラリをロードすることで多言語機能を実現します.このような欠点は、言語を動的に切り替えることができず、言語を交換した後にソフトウェアを再起動しなければならないということです.もちろん、常に言語を切り替えて遊ぶ必要はありませんが、ダイナミックライブラリの方法を採用し、プログラムがリソースを修正する必要がある場合は、すべてのダイナミックライブラリを更新する必要があります.これは非常に退屈で、漏れやすい仕事です.
私の方法は、使用するすべての文字列をファイルに配置し、1つの言語と1つのファイルを選択した言語に基づいて対応するファイルに文字列をロードすることです.これにより、言語を動的に切り替えることができるだけでなく、ユーザーは必要に応じて自分で新しい言語を追加することができます.
具体的な実装:
1、プログラム起動時に選択した言語を検査し、その言語ファイルを確定し、そのファイルパスを保存する
2、g_のようなグローバル関数を提供するLoadString(CString szID)は、提供された文字列IDに基づいてその内容を返し、具体的にどの言語の関数で判断するかによって、プログラムにおいて1つの文字列IDを提供すれば異なる言語の文字を自動的にロードすることができる.
3、プログラムでの使用方法:
元のコード:1. CString str; 2. str = " " ;
変更後:1. CString str; 2. str = g_LoadString( "IDS_LANGUAGE" );
4、ダイアログでどのように実現するか
プログラムで使用するように、文字列ごとに1回ロードする場合は、ダイアログボックスが多い場合は、ワークロードが大きすぎます.関数g_を提供しましたSetDialogStrings(CDialog*pDlg,UINT uDlgID)は、各ダイアログボックスが初期化時にこの関数を呼び出し、ダイアログボックスのポインタを渡し、私は関数の中ですべてのサブコントロールを繰り返し列挙し、文字を1つずつ設定します.これで多くの仕事を省くことができます
注意:静的テキスト(CStatic)のデフォルトIDはIDC_であるためSTATIC、値はすべて65535で、区別がつかないので、その文字を変更する必要があるCStaticのIDを変更するには、デフォルトの
5、言語ファイルのサンプル:
日本語版:01. [Setting] 02. Language=Chinese 03. 04. [String] 05. IDS_MENU_FILE= 06. IDS_MENU_FILE_NEW= (&N) 07. IDS_MENU_FILE_OPEN= (&O) 08. IDS_MENU_FILE_CLOSE= (&C) 09. IDS_MENU_FILE_EXIT= (&E)
英語:01. [Setting] 02. Language=English 03. 04. [String] 05. IDS_MENU_FILE=File 06. IDS_MENU_FILE_NEW=&New 07. IDS_MENU_FILE_OPEN=&Open 08. IDS_MENU_FILE_CLOSE=&Close 09. IDS_MENU_FILE_EXIT=&Exit