Version: 2.9.4
非英語アプリケーションの作成

この概要では英語以外の言語を用いてユーザとやり取りするアプリケーションの作成方法について説明します。残念なことに、Unix や Windows では多くの言語で異なる文字コードが使用されています。(そして、他のプラットフォームではさらに複雑なことになっています) 通常、これらの文字コードは多くの文字で異なっているため、すべてのプラットフォームで同じテキストを使用することはできません。

wxWidgets ライブラリは (エンコーディングだけが異なる) 多くの同一なパッケージを配布しなくてもすむ仕組みを提供しています。(例えば iso8859-13 と windows-1257 を使用したヘルプファイルやメニュー項目などです) この仕組みのおかげで、例えば iso8859-13 のデータを配布するだけで、すべてのシステムでこのデータが透過的に処理されます。

ロケールの概念については 国際化 を参照してください。

以降の文章で iso8859-2windows-1250 が使用されているところは任意のエンコーディングを意味しており、好きなエンコーディングに置き換えてください。

ロケール

プラットフォームをまたがって GUI に正しくテキストを表示する最善の方法はロケールを使用することです。コード中のメッセージは英語か、もしくは発音区別符号を使用せずに書き、実際のメッセージはメッセージカタログ (国際化 参照) に書くようにしてください。

標準の .po ファイルはこのようなヘッダで始まります:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 1999-02-19 16:03+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: ENCODING\n"

この行に注目してください:

"Content-Type: text/plain; charset=CHARSET\n"

これはカタログで使用される文字コードを指定しています。カタログ内のすべての文字列はこの文字コードで符号化されています。

ここに適切な文字コードの情報を記入する必要があります。これを行ったあとの .po ファイルはこのようになります:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 1999-02-19 16:03+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso8859-2\n"
"Content-Transfer-Encoding: 8bit\n"

(ヘッダが fuzzy としてマーク されない ようにしてください)

wxWidgets の対応しているすべてのプラットフォームでこのカタログを使用できます。(iso8859-2 は Unix のエンコーディングであり、通常は Windows で使用できないとしてもです)

これはどのように行われるのでしょうか? 正しいヘッダを含むメッセージカタログを読み込むように wxLocale クラスへ指示すると、そこで文字コードのチェックが行われます。そして、ユーザのオペレーティングシステムで使用されている文字コード (wxLocale::GetSystemEncodingwxLocale::GetSystemEncodingName 参照) へカタログが変換されます。

ソース中の非英語文字列や 8 ビット文字

ソースコード中の msgid には発音区別符号を含まない文字 (つまり、7 ビット ASCII 文字列) だけを使用するべきで、それらは英語で書いてください。

ソフトウェアを wxWidgets に移植する場合、非英語リテラル文字列を含むレガシーなソースコードに直面するかもしれません。それらの文字列を英語に翻訳し、元の文字列をメッセージカタログに記載する代わりに、非英語の msgid を使用するように wxWidgets を設定し、メッセージカタログを用いて英語へ翻訳しても構いません。

フォントマッピング

テキストを表示するのに wxMBConv の概要wxFontMapper を使用できます:

if (!wxFontMapper::Get()->IsEncodingAvailable(enc, facename))
{
    wxFontEncoding alternative;
    if (wxFontMapper::Get()->GetAltForEncoding(enc, &alternative,
                                               facename, false))
    {
        wxCSConv convFrom(wxFontMapper::Get()->GetEncodingName(enc));
        wxCSConv convTo(wxFontMapper::Get()->GetEncodingName(alternative));
        text = wxString(text.mb_str(convFrom), convTo);
    }
    else
        ...失敗 (iso8859-1/7ビット ASCII を試すかもしれない)...
}
...テキストを表示する...

データの変換

プログラムで扱うデータ (作成したドキュメントなど) をすべて同じエンコーディングで保持したいと思うかもしれません。仮に utf-8 としましょう。wxCSConv を使用することで、アプリケーションを実行しているシステムで使用されているエンコーディングにデータを変換することができます。(wxLocale::GetSystemEncoding 参照)

ヘルプファイル

wxHtmlHelpController を使用しているのであれば何も問題ありません。必要なことはすべての HTML ファイルに次のような META タグを含めることだけです。

<meta http-equiv="Content-Type" content="text/html; charset=iso8859-2">

また、hhp プロジェクトファイルの OPTIONS セクションに一行追加する必要があります:

Charset=iso8859-2

この追加のエントリはコンテンツとインデックステーブルで使用されているエンコーディングを HTML ヘルプコントローラに通知します。

 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines