2000-01-19 18:07:23 -05:00
|
|
|
\section{Writing non-English applications}\label{nonenglishoverview}
|
|
|
|
|
|
|
|
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.
|
2000-12-30 16:35:25 -05:00
|
|
|
|
|
|
|
wxWindows library provides mechanism that helps you avoid distributing many
|
2000-01-19 18:07:23 -05:00
|
|
|
identical, only differently encoded, packages with your application
|
|
|
|
(e.g. help files and menu items in iso8859-13 and windows-1257). Thanks
|
2000-07-15 15:51:35 -04:00
|
|
|
to this mechanism you can, for example, distribute only iso8859-13 data
|
2000-01-19 18:07:23 -05:00
|
|
|
and it will be handled transparently under all systems.
|
|
|
|
|
2000-01-21 17:58:18 -05:00
|
|
|
Please read \helpref{Internationalization}{internationalization} which
|
2000-07-15 15:51:35 -04:00
|
|
|
describes the locales concept.
|
2000-01-19 18:07:23 -05:00
|
|
|
|
2000-07-15 15:51:35 -04:00
|
|
|
In the following text, wherever {\it iso8859-2} and {\it windows-1250} are
|
2000-01-19 18:07:23 -05:00
|
|
|
used, any encodings are meant and any encodings may be substituted there.
|
|
|
|
|
|
|
|
\wxheading{Locales}
|
|
|
|
|
2000-07-15 15:51:35 -04:00
|
|
|
The best way to ensure correctly displayed texts in a GUI across platforms
|
2000-01-21 17:58:18 -05:00
|
|
|
is to use locales. Write your in-code messages in English or without
|
2000-07-15 15:51:35 -04:00
|
|
|
diacritics and put real messages into the message catalog (see
|
2000-01-21 17:58:18 -05:00
|
|
|
\helpref{Internationalization}{internationalization}).
|
2000-01-19 18:07:23 -05:00
|
|
|
|
2000-07-15 15:51:35 -04:00
|
|
|
A standard .po file begins with a header like this:
|
2000-01-21 17:58:18 -05:00
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
# 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"
|
|
|
|
\end{verbatim}
|
|
|
|
|
2002-03-15 18:29:22 -05:00
|
|
|
Note this particular line:
|
2000-01-21 17:58:18 -05:00
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
"Content-Type: text/plain; charset=CHARSET\n"
|
|
|
|
\end{verbatim}
|
|
|
|
|
2000-12-30 16:35:25 -05:00
|
|
|
It specifies the charset used by the catalog. All strings in the catalog
|
|
|
|
are encoded using this charset.
|
2000-01-21 17:58:18 -05:00
|
|
|
|
2000-12-30 16:35:25 -05:00
|
|
|
You have to fill in proper charset information. Your .po file may look like this
|
|
|
|
after doing so:
|
2000-01-21 17:58:18 -05:00
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
# 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"
|
2000-12-30 16:35:25 -05:00
|
|
|
"Content-Transfer-Encoding: 8bit\n"
|
2000-01-21 17:58:18 -05:00
|
|
|
\end{verbatim}
|
|
|
|
|
2000-12-30 16:35:25 -05:00
|
|
|
(Make sure that the header is {\bf not} marked as {\it fuzzy}.)
|
|
|
|
|
2000-01-21 17:58:18 -05:00
|
|
|
wxWindows is able to use this catalog under any supported platform
|
2000-12-30 16:35:25 -05:00
|
|
|
(although iso8859-2 is a Unix encoding and is normally not understood by
|
|
|
|
Windows).
|
2000-01-21 17:58:18 -05:00
|
|
|
|
2000-07-15 15:51:35 -04:00
|
|
|
How is this done? When you tell the wxLocale class to load a message catalog that
|
2002-03-15 18:29:22 -05:00
|
|
|
contains correct header, it checks the charset. The catalog is then converted
|
|
|
|
to the charset used (see
|
|
|
|
\helpref{wxLocale::GetSystemEncoding}{wxlocalegetsystemencoding} and
|
|
|
|
\helpref{wxLocale::GetSystemEncodingName}{wxlocalegetsystemencodingname}) by
|
|
|
|
user's operating system. This is default behaviour of the
|
|
|
|
\helpref{wxLocale}{wxlocale} class; you can disable it by {\bf not} passing
|
|
|
|
{\tt wxLOCALE\_CONV\_ENCODING} to \helpref{wxLocale::Init}{wxlocaleinit}.
|
2000-01-19 18:07:23 -05:00
|
|
|
|
|
|
|
\wxheading{Font mapping}
|
|
|
|
|
2003-01-23 14:49:53 -05:00
|
|
|
You can use \helpref{wxMBConv classes}{mbconvclasses} and
|
2000-01-21 17:58:18 -05:00
|
|
|
\helpref{wxFontMapper}{wxfontmapper} to display text:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
2002-04-06 10:04:27 -05:00
|
|
|
if (!wxFontMapper::Get()->IsEncodingAvailable(enc, facename))
|
2000-01-21 17:58:18 -05:00
|
|
|
{
|
|
|
|
wxFontEncoding alternative;
|
2003-01-23 14:49:53 -05:00
|
|
|
if (wxFontMapper::Get()->GetAltForEncoding(enc, &alternative,
|
|
|
|
facename, false))
|
2000-01-21 17:58:18 -05:00
|
|
|
{
|
2003-01-23 14:49:53 -05:00
|
|
|
wxCSConv convFrom(wxFontMapper::Get()->GetEncodingName(enc));
|
|
|
|
wxCSConv convTo(wxFontMapper::Get()->GetEncodingName(alternative));
|
|
|
|
text = wxString(text.mb_str(convFrom), convTo);
|
2000-01-21 17:58:18 -05:00
|
|
|
}
|
|
|
|
else
|
2003-01-23 14:49:53 -05:00
|
|
|
...failure (or we may try iso8859-1/7bit ASCII)...
|
2000-01-21 17:58:18 -05:00
|
|
|
}
|
|
|
|
...display text...
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
\wxheading{Converting data}
|
|
|
|
|
|
|
|
You may want to store all program data (created documents etc.) in
|
2003-01-23 14:49:53 -05:00
|
|
|
the same encoding, let's say {\tt utf-8}. You can use
|
|
|
|
\helpref{wxCSConv}{wxcsconv} class to convert data to encoding used by the
|
|
|
|
system your application is running on (see
|
|
|
|
\helpref{wxLocale::GetSystemEncoding}{wxlocalegetsystemencoding}).
|
2000-01-21 17:58:18 -05:00
|
|
|
|
2000-01-19 18:07:23 -05:00
|
|
|
\wxheading{Help files}
|
|
|
|
|
|
|
|
If you're using \helpref{wxHtmlHelpController}{wxhtmlhelpcontroller} there is
|
2000-07-15 15:51:35 -04:00
|
|
|
no problem at all. You must only make sure that all the HTML files contain
|
|
|
|
the META tag, e.g.
|
2000-01-19 18:07:23 -05:00
|
|
|
|
|
|
|
\begin{verbatim}
|
2000-08-24 16:56:21 -04:00
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso8859-2">
|
2000-01-19 18:07:23 -05:00
|
|
|
\end{verbatim}
|
|
|
|
|
2000-07-15 15:51:35 -04:00
|
|
|
and that the hhp project file contains one additional line in the {\tt OPTIONS}
|
2000-01-19 18:07:23 -05:00
|
|
|
section:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
Charset=iso8859-2
|
|
|
|
\end{verbatim}
|
|
|
|
|
2000-07-15 15:51:35 -04:00
|
|
|
This additional entry tells the HTML help controller what encoding is used
|
2000-01-19 18:07:23 -05:00
|
|
|
in contents and index tables.
|
2000-02-06 14:11:10 -05:00
|
|
|
|