サンプル集  >  VC  >  多言語化
多言語化
2014/11/18

多言語化したアプリを作ります。

◆環境
OS Windows 7 Professional Service Pack 1 64bit
VC Microsoft Visual C++ 2005 77972-235-2482122-41082

メインのプロジェクトを作成します。

[ファイル]-[新規作成]-[プロジェクト]を選択します。

「プロジェクトの種類」欄で[Visual C++]-[MFC]を選択し、[MFC アプリケーション]を選択します。 「プロジェクト名」は「MultiLangTest」にします。

ウィザードを「次へ」で進め「ダイアログ ベース」を選択して「完了」を押します。

続いて、日本語の情報を持つプロジェクトを作成します。

[ファイル]-[新規作成]-[プロジェクト]を選択します。

「プロジェクトの種類」欄で[Visual C++]-[MFC]を選択し、[MFC DLL]を選択します。 「プロジェクト名」は「Lang_JPN」にしてソリューションに追加を選択します。

ウィザードを「次へ」で進め「MFC をスタティックにリンクした通常の DLL」を選択して「完了」を押します。

続いて、英語の情報を持つプロジェクトを作成します。

[ファイル]-[新規作成]-[プロジェクト]を選択します。

「プロジェクトの種類」欄で[Visual C++]-[MFC]を選択し、[MFC DLL]を選択します。 「プロジェクト名」は「Lang_USA」にしてソリューションに追加を選択します。

ウィザードを「次へ」で進め「MFC をスタティックにリンクした通常の DLL」を選択して「完了」を押します。

作成した Lang_JPN と Lang_USA のリソースに String Table を追加します。

String Table に以下の値を追加します。

IDキャプション
IDS_APP_TITLE1000Title
IDS_APP_DETAIL1001Detail

Lang_JPNとLang_USAのプロジェクトの String Table に以下の値を追加します。

プロジェクトIDキャプション
Lang_JPNIDS_APP_TITLE1000表題
IDS_APP_DETAIL1001詳細の説明です。
Lang_USAIDS_APP_TITLE1000Title
IDS_APP_DETAIL1001Detail messages.

フォームは以下のようにしました。

JapaneseとEnglishのボタンを押すと、中央のラベルをそれぞれの言語で更新するようにします。

MultiLangTestDlg.cpp (抜粋)
155: 
156: 
157: 
158: 
159: 
160: 
161: 
162: 
163: 
164: 
165: 
166: 
167: 
168: 
169: 
170: 
171: 
172: 
173: 
174: 
175: 
176: 
177: 
178: 
179: 
180: 
181: 
182: 
183: 
184: 
185: 
186: 
187: 
188: 
189: 
190: 
191: 
192: 
193: 
194: 
195: 
196: 
197: 
198: 
199: 
200: 
201: 
202: 
203: 
204: 
205: 
206: 
void CMultiLangTestDlg::OnBnClickedJpn()
{
    // TODO: ここにコントロール通知ハンドラ コードを追加します。
    SetWords( L"Lang_JPN.dll" );
}

void CMultiLangTestDlg::OnBnClickedEng()
{
    // TODO: ここにコントロール通知ハンドラ コードを追加します。
    SetWords( L"Lang_USA.dll" );
}

// LPCWSTR dll  DLLファイルのパス
void CMultiLangTestDlg::SetWords( LPCWSTR dll )
{
    // DLLを読み込み
    HMODULE hDLL = LoadLibrary( dll );
    if( ! hDLL )
    {
        m_stMsg.SetWindowTextW( L"LoadLibrary failed." );
        return;
    }

    SetCStatic( hDLL, IDS_APP_TITLE,  &m_stMsg );
    SetCStatic( hDLL, IDS_APP_DETAIL, &m_stMsg2 );
}

// HMODULE  hDLL  DLLモジュール
// LONG     id    ID
// CStatic* st    CStatic
void CMultiLangTestDlg::SetCStatic( HMODULE  hDLL
                                  , LONG     id
                                  , CStatic* st
                                  )
{
    // 文字列を取得
    #define BUF_LEN 100
    TCHAR szBuf[BUF_LEN];
    int ret = LoadString( hDLL
                        , id
                        , szBuf
                        , BUF_LEN
                        );
    if ( ret == 0 )
    {
        m_stMsg.SetWindowTextW( L"LoadString failed." );
        return;
    }

    // 取得した文字列を設定
    st->SetWindowTextW( szBuf );
}

実行してみます。 起動直後はデフォルトのキャプションが表示されています。

Japaneseボタンを押します。

日本語が表示されました。

続いてEnglishボタンを押します。

英語語が表示されました。

押すボタンで読み込むDLLを切り替えて表示する内容を変えています。

▲ PageTop  ■ Home


Copyright (C) 2014 ymlib.com