Windowsアプリケーションのより簡単な多言語対応について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
yiwata
記事: 4
登録日時: 11年前

Windowsアプリケーションのより簡単な多言語対応について

#1

投稿記事 by yiwata » 11年前

毎度お世話になります、yiwataです。

表題の件について、現在は言語ごとにリソースのDLLを切り替えて多言語対応を
実現しています。
この方法だと、対応言語が新たに生じる度にリソースDLLも用意してあげる必
要があります。

理想としてはテキスト(Unicode)に対応言語ごとに列を用意して、リソース
アイテムで表示する文字列を全て記載し、そのテキストをアプリ起動時に読み
込むことでリソースアイテム(例えば英語[米国])の表示内容を差し替える…です
が可能でしょうか?
※要は言語ごとのリソースDLLを用意せずにテキストだけで多言語対応が可能か?
ということです

VS2008上のリソースの[プロパティ]-[Language]項目で、指定した言語と表示
する言語が異なると言語によって文字化けが起きる場合があるので難しいと
推測しますが、インストール時に無数の言語から選択してインストール後は
その言語で起動する…というアプリをよく見掛けるので一体どういう仕組みに
なっているのかと思い、何かアドバイスが頂ければと思いましてここでお聞き
した次第です。

以上の件、宜しくお願いします。

[開発環境] VS2008+SP1(MFC)
[OS] Windows7 Professional(32/64bit)

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: Windowsアプリケーションのより簡単な多言語対応について

#2

投稿記事 by YuO » 11年前

yiwata さんが書きました:表題の件について、現在は言語ごとにリソースのDLLを切り替えて多言語対応を
実現しています。
この方法だと、対応言語が新たに生じる度にリソースDLLも用意してあげる必
要があります。
Windowsにしろ他のOSにしろ,この方式が現在考えられる一番簡単な方法になります。
この方式は,法則さえ決定してしまえば,言語を後から追加することができる方法であるためです。

Win32 APIには残念ながらこの方法は存在しないのですが,MFCであれば分離可能です。
.NET Frameworkも言語ごとのリソースDLLを作りますし,
「言語パック」という形で言語の追加が可能なソフトウェアはWindowsに限らず存在しますが,
結局は外部にファイルが存在する形になります。
yiwata さんが書きました:理想としてはテキスト(Unicode)に対応言語ごとに列を用意して、リソース
アイテムで表示する文字列を全て記載し、そのテキストをアプリ起動時に読み
込むことでリソースアイテム(例えば英語[米国])の表示内容を差し替える…です
が可能でしょうか?
※要は言語ごとのリソースDLLを用意せずにテキストだけで多言語対応が可能か?
ということです
自分で実装すれば可能なのですが,面倒ですよ。
自分で実装と言うことは,フォールバックも考えないといけません。
また,複数人でリソースを用意する場合などは,さらに面倒で,マージコンフリクトを起こさないことが重要になります。
そうすると,別ファイルの方が取り扱いやすいです。
yiwata さんが書きました:VS2008上のリソースの[プロパティ]-[Language]項目で、指定した言語と表示
する言語が異なると言語によって文字化けが起きる場合があるので難しいと
推測しますが、インストール時に無数の言語から選択してインストール後は
その言語で起動する…というアプリをよく見掛けるので一体どういう仕組みに
なっているのかと思い、何かアドバイスが頂ければと思いましてここでお聞き
した次第です。
Win32リソースは単一ファイルにまとめる形ですが,過去20年に渡って使われている形式でもあり,文字化けするとは思えません。
アプリケーションはUnicodeでコンパイルされていて,文字の表示にはW系のAPIが使われていますか。
オフトピック
DLGINITブロックに関しては,http://social.msdn.microsoft.com/Forums ... cgeneraljaのように,多言語化されていないようですが,
DLGINITはMFCの機能なので,「Win32リソース」自体の問題ではないです。
なお,Win32の文字列リソース自体は,SetThreadUILanguageで動的に切り替わります。
が,Menuなどのリソースのことも考えるなら,WinMainの最初の方で呼び出したあと,言語の切り替えはアプリケーション再起動の方が確実だと思います。

yiwata
記事: 4
登録日時: 11年前

Re: Windowsアプリケーションのより簡単な多言語対応について

#3

投稿記事 by yiwata » 11年前

 YuOさん

 yiwataです。
 連絡が遅れてスミマセン。

 アプリはMFCベースでUNICODEでコンパイルしています。
 頂いたレスならびにリンク先を参照しました。
 色々考えて自分で実装する場合も想定してみましたが、全リソースが対象
 となるとやはり自分で実装するのは色々と大変なので従来通りDLLの差し
 替えで進めようと思います。

 この度は詳細なアドバイス、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る