none
マルチランゲージ対応について RRS feed

  • 質問

  • VS2005のVC++環境ですが、現在日本語のアプリケーションを英語版対応にしようとしています。

    「フォームのLocalizeをtureにし、Launguageを変更」すれば良いようなことが書かれていましたが、このような設定は

    見つかりませんでした。VS2005だからか、.NETを使っていないからだかよくわかりませんが、VS2005のVC++で多言語

    対応の開発をするにはどうすれば良いでしょうか?

    よろしくお願いします。

    2011年11月4日 9:07

回答

  • MFCの場合、自分は概ね次のような仕組みでやってます。

    1.母体言語を含む特定言語専用のリソースファイルを作成する。
    2.文字列リソースを含む言語に依存する全てのリソースは、
     これらのリソースからロードするものとする。
    3.リソースIDは全てのDLLに対して共通とする。
    4.それらのリソース毎に特定言語専用のDLLを作成する。
    5.アプリケーションは、選択された言語のDLLをLoadLibrary()で
     ロードしそのハンドルを取得する。
    6.AfxSetResourceHandle( DLLのハンドル)する。

    当たり前ですが、

    7.言語に依存するコードは全てDLLに移動、GetProcAddress()化。
    8.文字列などもあらかじめリソースに移動。
    9.0x00400000、AfxGetInstanceHandle()等、アプリケーション
     を指定して「リソース」をロードしているところは全て
     AfxGetResourceHandle()に変更。
    10.文法依存コードの排除。
    11.Unicode化必須。


    • 編集済み 仲澤@失業者 2011年11月7日 1:01
    • 回答としてマーク ndb 2011年11月11日 2:45
    2011年11月7日 1:00
  • 「フォームのLocalizeをtureにし、Launguageを変更」すれば良いようなことが書かれていましたが、このような設定は見つかりませんでした。VS2005だからか、.NETを使っていないからだかよくわかりませんが

    この設定は Windows フォームアプリケーション、つまり .NET 対応アプリケーション向けのものです。
    ネイティブ C++ プロジェクトには存在しません。

    VS2005のVC++で多言語対応の開発をするにはどうすれば良いでしょうか?

    複数の言語のリソースファイルを用意することになると思いますが、私自身、ネイティブ C++ で多言語対応をする必要性がなかったため、具体的な手順までは回答できかねます。
    こういったサンプルがあるようなので参考にしてみてはいかがでしょうか。
    http://msdn.microsoft.com/ja-jp/library/fe5w38bb(v=vs.80).aspx


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク ndb 2011年11月11日 2:44
    2011年11月4日 13:47
    モデレータ

すべての返信

  • 「フォームのLocalizeをtureにし、Launguageを変更」すれば良いようなことが書かれていましたが、このような設定は見つかりませんでした。VS2005だからか、.NETを使っていないからだかよくわかりませんが

    この設定は Windows フォームアプリケーション、つまり .NET 対応アプリケーション向けのものです。
    ネイティブ C++ プロジェクトには存在しません。

    VS2005のVC++で多言語対応の開発をするにはどうすれば良いでしょうか?

    複数の言語のリソースファイルを用意することになると思いますが、私自身、ネイティブ C++ で多言語対応をする必要性がなかったため、具体的な手順までは回答できかねます。
    こういったサンプルがあるようなので参考にしてみてはいかがでしょうか。
    http://msdn.microsoft.com/ja-jp/library/fe5w38bb(v=vs.80).aspx


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク ndb 2011年11月11日 2:44
    2011年11月4日 13:47
    モデレータ
  • MFCの場合、自分は概ね次のような仕組みでやってます。

    1.母体言語を含む特定言語専用のリソースファイルを作成する。
    2.文字列リソースを含む言語に依存する全てのリソースは、
     これらのリソースからロードするものとする。
    3.リソースIDは全てのDLLに対して共通とする。
    4.それらのリソース毎に特定言語専用のDLLを作成する。
    5.アプリケーションは、選択された言語のDLLをLoadLibrary()で
     ロードしそのハンドルを取得する。
    6.AfxSetResourceHandle( DLLのハンドル)する。

    当たり前ですが、

    7.言語に依存するコードは全てDLLに移動、GetProcAddress()化。
    8.文字列などもあらかじめリソースに移動。
    9.0x00400000、AfxGetInstanceHandle()等、アプリケーション
     を指定して「リソース」をロードしているところは全て
     AfxGetResourceHandle()に変更。
    10.文法依存コードの排除。
    11.Unicode化必須。


    • 編集済み 仲澤@失業者 2011年11月7日 1:01
    • 回答としてマーク ndb 2011年11月11日 2:45
    2011年11月7日 1:00