毎度お世話になります、yiwataです。
表題の件について、現在は言語ごとにリソースのDLLを切り替えて多言語対応を
実現しています。
この方法だと、対応言語が新たに生じる度にリソースDLLも用意してあげる必
要があります。
理想としてはテキスト(Unicode)に対応言語ごとに列を用意して、リソース
アイテムで表示する文字列を全て記載し、そのテキストをアプリ起動時に読み
込むことでリソースアイテム(例えば英語[米国])の表示内容を差し替える…です
が可能でしょうか?
※要は言語ごとのリソースDLLを用意せずにテキストだけで多言語対応が可能か?
ということです
VS2008上のリソースの[プロパティ]-[Language]項目で、指定した言語と表示
する言語が異なると言語によって文字化けが起きる場合があるので難しいと
推測しますが、インストール時に無数の言語から選択してインストール後は
その言語で起動する…というアプリをよく見掛けるので一体どういう仕組みに
なっているのかと思い、何かアドバイスが頂ければと思いましてここでお聞き
した次第です。
以上の件、宜しくお願いします。
[開発環境] VS2008+SP1(MFC)
[OS] Windows7 Professional(32/64bit)
Windowsアプリケーションのより簡単な多言語対応について
Re: Windowsアプリケーションのより簡単な多言語対応について
Windowsにしろ他のOSにしろ,この方式が現在考えられる一番簡単な方法になります。yiwata さんが書きました:表題の件について、現在は言語ごとにリソースのDLLを切り替えて多言語対応を
実現しています。
この方法だと、対応言語が新たに生じる度にリソースDLLも用意してあげる必
要があります。
この方式は,法則さえ決定してしまえば,言語を後から追加することができる方法であるためです。
Win32 APIには残念ながらこの方法は存在しないのですが,MFCであれば分離可能です。
.NET Frameworkも言語ごとのリソースDLLを作りますし,
「言語パック」という形で言語の追加が可能なソフトウェアはWindowsに限らず存在しますが,
結局は外部にファイルが存在する形になります。
自分で実装すれば可能なのですが,面倒ですよ。yiwata さんが書きました:理想としてはテキスト(Unicode)に対応言語ごとに列を用意して、リソース
アイテムで表示する文字列を全て記載し、そのテキストをアプリ起動時に読み
込むことでリソースアイテム(例えば英語[米国])の表示内容を差し替える…です
が可能でしょうか?
※要は言語ごとのリソースDLLを用意せずにテキストだけで多言語対応が可能か?
ということです
自分で実装と言うことは,フォールバックも考えないといけません。
また,複数人でリソースを用意する場合などは,さらに面倒で,マージコンフリクトを起こさないことが重要になります。
そうすると,別ファイルの方が取り扱いやすいです。
Win32リソースは単一ファイルにまとめる形ですが,過去20年に渡って使われている形式でもあり,文字化けするとは思えません。yiwata さんが書きました:VS2008上のリソースの[プロパティ]-[Language]項目で、指定した言語と表示
する言語が異なると言語によって文字化けが起きる場合があるので難しいと
推測しますが、インストール時に無数の言語から選択してインストール後は
その言語で起動する…というアプリをよく見掛けるので一体どういう仕組みに
なっているのかと思い、何かアドバイスが頂ければと思いましてここでお聞き
した次第です。
アプリケーションはUnicodeでコンパイルされていて,文字の表示にはW系のAPIが使われていますか。
オフトピック
DLGINITブロックに関しては,http://social.msdn.microsoft.com/Forums ... cgeneraljaのように,多言語化されていないようですが,
DLGINITはMFCの機能なので,「Win32リソース」自体の問題ではないです。
DLGINITはMFCの機能なので,「Win32リソース」自体の問題ではないです。
が,Menuなどのリソースのことも考えるなら,WinMainの最初の方で呼び出したあと,言語の切り替えはアプリケーション再起動の方が確実だと思います。
Re: Windowsアプリケーションのより簡単な多言語対応について
YuOさん
yiwataです。
連絡が遅れてスミマセン。
アプリはMFCベースでUNICODEでコンパイルしています。
頂いたレスならびにリンク先を参照しました。
色々考えて自分で実装する場合も想定してみましたが、全リソースが対象
となるとやはり自分で実装するのは色々と大変なので従来通りDLLの差し
替えで進めようと思います。
この度は詳細なアドバイス、ありがとうございました。
yiwataです。
連絡が遅れてスミマセン。
アプリはMFCベースでUNICODEでコンパイルしています。
頂いたレスならびにリンク先を参照しました。
色々考えて自分で実装する場合も想定してみましたが、全リソースが対象
となるとやはり自分で実装するのは色々と大変なので従来通りDLLの差し
替えで進めようと思います。
この度は詳細なアドバイス、ありがとうございました。