アプリケーションの国際化 (略して i18n) には単にテキストメッセージを他のメッセージに翻訳すること以上のことが含まれます。日付や時間、通貨の形式も変更する必要がありますし、ある言語は左から右へ、別の言語では右から左へ表記するでしょう。文字コードも異なりますし、他にもたくさんのことを変更する必要がありますが、これは必要な最初のステップです。wxWidgets は wxLocale クラスを使用したメッセージ翻訳機能を提供しており、wxWidgets 自体がいくつかの言語に完全に翻訳されています。最新の翻訳版は wxWidgets のホームページを参照してください。そして、あなたが wxWidgets をまだ翻訳されていない言語に翻訳した場合、私達はそれを将来のバージョンに含めることを喜んで承認するでしょう!
wxWidgets の採用している国際化の方法は GNU gettext パッケージの方式に従っています。wxWidgets では gettext のカタログとバイナリ互換性のあるメッセージカタログを使用します。これにより、メッセージカタログを扱う際に gettext のすべてのプログラムを使用できます。しかし、実行時には追加のライブラリは必要ないため、メッセージカタログの他には何も配布する必要がないことに注意してください。
プログラム開発を行なっている間はメッセージカタログを扱うために gettext パッケージが必要となります。注意: gettext バージョン < 0.10 はバグが多いため、最新版を利用するべきです!
メッセージカタログには次の 2 種類があります: 拡張子が .po でテキスト形式のソースカタログと、ソースカタログから msgfmt プログラム (gettext パッケージの一部です) を使って生成する、拡張子が .mo のバイナリカタログです。プログラム実行時にはバイナリファイルだけが必要です。
アプリケーションの翻訳にはいくつかのステップが含まれます:
_()
マクロを利用してプログラム中のテキストを 翻訳する。 xgettext
プログラムが標準的な _()
や (-k
オプションを使用することで) wxGetTranslation を識別し、それらの中にある文字列をすべて抽出してくれるためです。代わりに -a
オプションを使用することもできますが、そうするとまったく翻訳する必要のない文字列が大量に見つかることになるでしょう。これにより、テキスト形式のメッセージカタログ (.po ファイル) が生成されます。 もしメニューラベル内のアクセラレータの修飾子名 ( Ctrl、Alt、Shift) を翻訳した場合、アクセラレータが動作しなくなることに気がつくでしょう。 メッセージカタログでは、修飾子の名前を小文字にしたもの (ctrl、alt、shift) とは別の名前に翻訳する必要があります。これによって、 wxWidgets がそれらの名前を翻訳されたものとして認識できるようになります。修飾子の翻訳について、今のところ wxWidgets はすべてに対応しているわけではありません。Backspace、End、Insert といった特殊キーの名前が翻訳された場合、wxWidgets はまだ取り扱うことができません。