英語以外のアプリケーションを書く
Writing non-English applications
ここでは,英語以外の言語でユーザーとやりとりするアプリケーションの書き方を説明する.
不幸な事に,多くの言語はプラットフォームによって違う文字コード体系を用いている.
そういった文字コード体系では多くの文字が違い,同じテキストを全てのプラットフォームで用いることは不可能である.
wxWidgetsは一つのアプリケーションを,文字コードのみが違う
(例えばiso8859-13とwindows-1257で書かれたヘルプファイルやメニュー項目)
多くのパッケージとして配布することの回避をサポートする機構を提供する.
この機構によって,例えば全てのシステムで透過的に扱われるiso8859-13のデータだけを配布することができる.
ロケールという概念について説明した
国際化(Internationalization)を読んでください
以降の文書では,iso8859-2 と windows-1250を用いているが,他の文字コードでも同じである
This article describes how to write applications that communicate with
user in language other than English. Unfortunately many languages use
different charsets under Unix and Windows (and other platforms, to make
situation even more complicated). These charsets usually differ in so
many characters it is impossible to use same texts under all platforms.
wxWidgets library provides mechanism that helps you avoid distributing many
identical, only differently encoded, packages with your application
(e.g. help files and menu items in iso8859-13 and windows-1257). Thanks
to this mechanism you can, for example, distribute only iso8859-13 data
and it will be handled transparently under all systems.
Please read Internationalization which
describes the locales concept.
In the following text, wherever iso8859-2 and windows-1250 are
used, any encodings are meant and any encodings may be substituted there.
ロケール
Locales
複数のプラットフォームで正しくテキストをGUIに表示する一番の方法はロケールを用いることだ.
ソースコードの中では英語かそれ以外のキーワードを用い,本当に表示するものはメッセージカタログ
(
国際化(Internationalization)を参照)の中に書く.
標準的な.poファイルはこのようなヘッダで始まる.
The best way to ensure correctly displayed texts in a GUI across platforms
is to use locales. Write your in-code messages in English or without
diacritics and put real messages into the message catalog (see
Internationalization).
A standard .po file begins with a header like this:
# 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"
次の行に注目する.
Note this particular line:
"Content-Type: text/plain; charset=CHARSET\n"
これはカタログで用いられている文字コードを指定する.このカタログの中の全ての文字列はこの文字コードを用いて
エンコードされている.
It specifies the charset used by the catalog. All strings in the catalog
are encoded using this charset.
そこには正確な文字コードに関する情報を記す必用がある.
そうした.poファイルはこのようになる.
You have to fill in proper charset information. Your .po file may look like this
after doing so:
# 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属性をつけないこと)
(Make sure that the header is not marked as fuzzy.)
wxWidgetsはこのカタログをどんなプラットフォームでも用いることが出来る.
(iso8859-2がUnixのエンコードで,通常はWindowsでは読めないとしてもwxWidgetsは大丈夫)
wxWidgets is able to use this catalog under any supported platform
(although iso8859-2 is a Unix encoding and is normally not understood by
Windows).
How is this done? When you tell the wxLocale class to load a message catalog that
contains correct header, it checks the charset. The catalog is then converted
to the charset used (see
wxLocale::GetSystemEncoding and
wxLocale::GetSystemEncodingName) by
user's operating system. This is default behaviour of the
wxLocale class; you can disable it by
not passing
wxLOCALE_CONV_ENCODING to
wxLocale::Init.
フォントマップ
Font mapping
if (!wxFontMapper::Get()->IsEncodingAvailable(enc, facename))
{
wxFontEncoding alternative;
if (wxTheFontMapper->GetAltForEncoding(enc, &alternative,
facename, FALSE))
{
wxEncodingConverted encconv;
if (!encconv.Init(enc, alternative))
...failure...
else
text = encconv.Convert(text);
}
else
...failure...
}
...display text...
データの変換
Converting data
プログラムのデータ(ドキュメント等)全てを一つのエンコーディング(仮にwindows1250とする)
で保管したいとする.
明らかに,最も優れた方法は
wxEncodingConverterを
用いることである.
You may want to store all program data (created documents etc.) in
the same encoding, let's say windows1250. Obviously, the best way would
be to use
wxEncodingConverter.
ヘルプファイル
Help files
If you're using
wxHtmlHelpController there is
no problem at all. You must only make sure that all the HTML files contain
the META tag, e.g.
<meta http-equiv="Content-Type" content="text/html; charset=iso8859-2">
そしてhhpプロジェクトファイルはOPTIONSセクションにこの1行を含む.
and that the hhp project file contains one additional line in the OPTIONS
section:
Charset=iso8859-2
この行はHTMLヘルプコントローラに,コンテンツやインデックステーブルにどのエンコーディングが用いられて
いるかを知らせる.
This additional entry tells the HTML help controller what encoding is used
in contents and index tables.