地域化 (localization) - I18N/L10N の利用と設定
AndreyChernov寄稿:
Michael C.Wu改訂:
この章では
FreeBSD は、ユーザーおよび貢献者が世界中にいる、非常に分散した
プロジェクトです。この章では、英語以外の言語を使うユーザーの実用に
耐えられるようにする FreeBSD の国際化 (internationalization) と
地域化 (localization) 機能について解説します。
システムレベルでもアプリケーションレベルでも、国際化の実装には
様々な側面があるので、必要に応じて読者に対してより専門的な文書情報を
示すことにします。
この章では、以下の分野について説明します。
近代的なオペレーティングシステムで、異なる言語および
ロケールがどのように符号化されているか。
ログインシェルでロケールを設定するには
どうするか。
コンソールを英語以外の言語用に設定するには
どうするか。
様々な言語で効率的に X Window System を使うには
どうすればよいか。
国際化されたアプリケーションを書くための
情報はどこにあるか。
この章を読む前に、以下のことを理解しておく必要があります。
サードパーティ製アプリケーションのインストール方法
()。
基礎知識
I18N/L10N とは?
国際化 (internationalization)
地域化 (localization)
地域化(localization)
開発者たちはしばしば、internationalization を縮めて I18N
と表記します。18 は internationalization の最初と最後の間の
文字数です。L10N も同じ命名法を用いて
localization
を縮めたものです。
これらを合わせて、I18N/L10N された (すなわち国際化/地域化された)
手法、プロトコル、アプリケーションは、自分達の好みの言語を
使うことを可能にしてくれます。
国際化されたアプリケーションはライブラリとして国際化キット
を用いてプログラミングされています。
これは開発者が単純なファイルを書いて、
表示されるメニューやテキストを各国語に翻訳できるようにしてくれます。
プログラマのみなさんには、
これらの方法を利用することを強く推奨します。
なぜ I18N/L10N を使わなければいけないの?
英語以外の言語を見たり、入力したり、処理したりする場合はいつでも、
I18N/L10N が使われます。
I18N で使えるようになる言語には何があるの?
I18N や L10N は FreeBSD に限った話題ではありません。
現在では、世界中の主要な言語のほとんどから選ぶことができます。
たとえば中国語、ドイツ語、日本語、韓国語、フランス語、ロシア語、
ベトナム語などがありますが、これらに限定されるわけではありません。
ロケール(locale)
地域化の利用
I18N は FreeBSD に特有のものではなく、一つの考え方です。
以下の慣習にしたがって FreeBSD を利用するようにしてください。
地域化の設定は言語コード、
国コード、エンコーディングという三つの用語を基本とします。
ロケール名はこれらから以下のように構成されます。
言語コード_国コード.エンコーディング
言語コードと国コード
言語コード
国コード
FreeBSD (やその他の国際化をサポートした &unix;-like なシステム)
を特定の言語に地域化するには、
国と言語を特定するためのコードを知る必要があります
(国コードはアプリケーションに指定された言語のどの変種
(variation) を用いれば良いかを教えてくれます)。
加えて、ウェブブラウザ、SMTP/POP サーバ、
ウェブサーバなどもこれらを元に様々な選択を行います。
以下は言語/国コードの例です。
言語/国コード
説明
en_US
英語 (合衆国)
ru_RU
ロシア語 (ロシア)
zh_TW
繁体字中国語 (台湾)
エンコーディング
エンコーディング
ASCII
いくつかの言語では、8-bit やワイド文字、
多バイト文字など ASCII とは異なったエンコード法を用います
(&man.multibyte.3; 参照)。
古いアプリケーションはこれらを認識せず、
誤ってコントロール文字として認識してしまいます。
最近のアプリケーションは、大抵 8-bit 文字を認識します。
実装方法にも依りますが、アプリケーションのコンパイル時もしくは
configure 時に、ワイド/多バイト文字のサポートを指定する必要があるかも知れません。
ワイド/多バイト文字を入力したり処理したりすることを可能にするために、
FreeBSD Ports Collection
では各言語向けに異なったプログラムを提供しています。
各 FreeBSD Port の国際化文書を参照してください。
特に、正しく configure したり、configure/Makefile/
コンパイラに適切な値を渡すために、アプリケーションの
文書を良く読む必要があります。
次のことを心に留めておいてください。
言語固有の、C 言語の char で表現できる
シングルバイトの文字セット
(&man.multibyte.3; を参照)、たとえば
ISO8859-1, ISO8859-15, KOI8-R, CP437。
ワイド、多バイトのエンコーディング、たとえば EUC, Big5。
現在有効な文字セットのリストに関しては
IANA Registry
をチェックしてください。
&os;
では、X11 互換のロケール符号を用いています。
国際化アプリケーション
FreeBSD の ports/packages システムでは、
それとひと目でわかるように国際化アプリケーションには名前に
I18N という文字が含まれています。
ただし、それらのアプリケーションが常にあなたの望む言語を
サポートしているとは限りません。
ロケールの設定
通常は、ログインシェルで環境変数 LANG に
ロケール名を設定し export すれば十分です。これは、ユーザーの
~/.login_conf ファイル、またはユーザーの
シェルの初期設定ファイル (~/.profile,
~/.bashrc, ~/.cshrc)
でできます。
LC_CTYPE や LC_CTIME のような
ロケールのサブセットを設定する必要はありません。
詳細に関しては、各言語向けの FreeBSD 文書を参照してください。
以下の二つの環境変数を設定ファイルで指定する必要があります。
POSIX
&posix; &man.setlocale.3; 関連の関数のための
LANG
MIME
アプリケーション用の MIME 文字セットのための
MM_CHARSET
これにはユーザのシェルの設定、アプリケーション固有の設定、
X11 の設定などが含まれます。
ロケールを設定する方法
ロケール (locale)
ログインクラス
ロケールを設定するには以下で説明するように、二つの方法があります。
一つは推奨される方法で、ログインクラス (login
class) において環境変数に割り当てる方法。
もう一つはシステムのシェル
初期化ファイル
において環境変数の指定を追加する方法です。
ログインクラスを用いる方法
この方法では、
各シェルの初期化ファイルに特定のシェル設定を追加する代わりに、
すべてのシェルにおいて一度に必要なロケール名と MIME
文字セットを環境変数に割り当てることができます。
ユーザの設定はユーザ自身で行なえますが、
管理者の設定にはスーパユーザの権限が必要となります。
ユーザの設定
ユーザのホームディレクトリの
.login_conf ファイルを用いて、
両方の変数に Latin-1 エンコーディングを設定する
簡単な例は次の通りです。
me:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:
繁体字中国語 (Traditional Chinese)BIG-5 エンコーディング
これは、BIG-5 エンコーディングされた繁体字中国語用の環境変数を設定する
.login_conf の一例です。
中国語、日本語、韓国語用のロケール変数を
正しく認識しないソフトウェアに対処するため、
よりたくさんの変数を設定していることに注目してください。
#Users who do not wish to use monetary units or time formats
#of Taiwan can manually change each variable
me:\
:lang=zh_TW.Big5:\
:lc_all=zh_TW.Big:\
:lc_collate=zh_TW.Big5:\
:lc_ctype=zh_TW.Big5:\
:lc_messages=zh_TW.Big5:\
:lc_monetary=zh_TW.Big5:\
:lc_numeric=zh_TW.Big5:\
:lc_time=zh_TW.Big5:\
:charset=big5:\
:xmodifiers="@im=xcin": #Setting the XIM Input Server
詳細に関しては
管理者の設定 と
&man.login.conf.5; を参照してください。
管理者の設定
/etc/login.conf において、
正しい言語がユーザのクラスに指定されていることを確認してください。
/etc/login.conf は、このようになります。
language_name:accounts_title:\
:charset=MIME_charset:\
:lang=locale_name:\
:tc=default:
先ほどの例のように Latin-1
での設定はこのようになります。
german:German Users Accounts:\
:charset=ISO-8859-1:\
:lang=de_DE.ISO8859-1:\
:tc=default:
ユーザのログインクラスを変更する前に次のコマンドを実行して、
/etc/login.conf
の新たな設定がシステムに見えるようにしてください。
&prompt.root; cap_mkdb /etc/login.conf
ログインクラスを &man.vipw.8; で変更する
vipw
新しいユーザを追加するために vipw
を用います。そして以下のようなエントリを作成します。
user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh
ログインクラスを &man.adduser.8; で変更する
adduser
ログインクラス
新しいユーザを追加するために adduser
を用います。そして以下の手順を踏みます。
/etc/adduser.conf で
defaultclass = language
と設定します。
この場合、他の言語のユーザには
default クラスを指定することを
忘れないでください。
もうひとつの方法は、&man.adduser.8; が
Enter login class: default []:
と聞いてきたときに、毎回言語を指定するやり方です。
さらに別の方法は、異なる言語を利用するユーザを
追加する際に、以下のようにするやり方です。
&prompt.root; adduser -class language
ログインクラスを &man.pw.8; で変更する
pw
新しいユーザを追加するために &man.pw.8; を
用いる場合、以下の形式で実行します。
&prompt.root; pw useradd user_name -L language
シェルの初期化ファイルによる方法
シェルごとに異なった設定が必要なため、
この方法は推奨されません。
代わりに ログインクラスを用いる方法を使ってください。
MIME
ロケール(locale)
ロケール名と MIME 文字コードを追加するには、
/etc/profile や
/etc/csh.login などのシェル初期化ファイル
に以下の二つの環境変数を設定します。
以下に示す例は、ドイツ語の設定です。
/etc/profile では
次のように設定します。
LANG=de_DE.ISO8859-1; export LANG
MM_CHARSET=ISO-8859-1; export MM_CHARSET
また /etc/csh.login では
次のように設定します。
setenv LANG de_DE.ISO8859-1
setenv MM_CHARSET ISO-8859-1
もしくは、上記のやり方を
/usr/share/skel/dot.profile
(/etc/profile と同形式) や
/usr/share/skel/dot.login
(/etc/csh.login と同形式)
に追加することもできます。
X11 では、
$HOME/.xinitrc に
使用しているシェルに合った形式で
LANG=de_DE.ISO8859-1; export LANG
もしくは、
setenv LANG de_DE.ISO8859-1
と指定します。
コンソールの設定
C 言語の char で表現できるシングルバイトの文字セット用に、
/etc/rc.conf
でその言語に対応した適切なコンソールフォントを指定してください。
font8x16=フォント名
font8x14=フォント名
font8x8=フォント名
ここで フォント名
は /usr/share/syscons/fonts ディレクトリ
にあるフォントファイルから .fnt
という拡張子を除いたものです。
sysinstall
keymap
screenmap
また、sysinstall (&os; バージョンが 5.2
よりも古い場合は /stand/sysinstall)
を使って、C 言語の char で表現できるシングルバイトの文字セット用の正しい
キーマップとスクリーンマップを指定するようにしてください。
sysinstall では、Configure
を選択し、Console を選択します。
もしくは、/etc/rc.conf
に以下の行を加えてください。
scrnmap=スクリーンマップ名
keymap=キーマップ名
keychange="ファンクションキー番号の並び"
ここで スクリーンマップ名
は /usr/share/syscons/scrnmaps ディレクトリ
にあるマップファイルから .scm
という拡張子を除いたものです。
VGA アダプタが疑似グラフィクス領域のフォント文字マトリクスで
bit 8 を bit 9 に拡張することに対処するために
(例えばスクリーンフォントが
bit 8 列を使っている時に文字をその領域から外に移動する場合)、
フォントに適切にマップされたスクリーンマップが必要となります。
もし、/etc/rc.conf を以下のように設定して、
moused デーモンを有効化している場合は、
次の段落に書かれているマウスカーソルに関する情報を確認してください。
moused_enable="YES"
moused
設定省略時には、&man.syscons.4; ドライバのマウスカーソルは
キャラクタセット中の 0xd0-0xd3 の範囲を占めています。そのため、
利用している言語がこの範囲のキャラクタセットを使っている場合、
カーソルの占める範囲を重ならないように移動させなければなりません。
&os; でこれを回避するには、次の行を
/etc/rc.conf に追加してください。
mousechar_start=3
キーマップ名 は
/usr/share/syscons/keymaps
ディレクトリにあるキーマップファイルから .kbd
という拡張子を除いたものです。
どのキーマップを使うかよくわからないなら、&man.kbdmap.1;
で再起動せずにキーマップを試すことができます。
ファンクションキーの並びはキーマップにより定義されてはいないため、
端末タイプに合わせたファンクションキーを設定するために
keychange が必要となります。
また、/etc/ttys の中のすべての
ttyv* において、
正しいコンソール端末タイプを設定するようにしてください。
現在の定義済の値は以下の通りです。
文字セット
端末タイプ
ISO8859-1 もしくは ISO8859-15
cons25l1
ISO8859-2
cons25l2
ISO8859-7
cons25l7
KOI8-R
cons25r
KOI8-U
cons25u
CP437 (VGA のデフォルト)
cons25
US-ASCII
cons25w
ワイド/多バイト文字の言語については、
/usr/ports/language
内の適切な FreeBSD port を利用してください。
いくつかの ports はシステムからシリアルの vtty
のように見えるようにコンソールとして振る舞います。
したがって、X11 と疑似シリアルコンソール用に充分な
vtty を確保しておかなければなりません。
コンソールで他の言語を使うためのアプリケーションのリストの
一部です。
言語
ports の位置
繁体字中国語 (BIG-5)
chinese/big5con
日本語
japanese/kon2-16dot または
japanese/mule-freewnn
韓国語
korean/han
X11 の設定
X11 は FreeBSD プロジェクトの一部ではありませんが、
FreeBSD ユーザのための情報を記しておきます。
詳細に関しては、&xorg;
ウェブサイトや、あなたの使っている
X11 サーバのサイトを参照してください。
~/.Xresources を使うことで、
アプリケーション固有の国際化の設定 (フォント、メニューなど)
を追加することができます。
フォントの表示
X11 True Type フォントサーバ
&xorg; サーバ
(x11-servers/xorg-server) か
&xfree86; サーバ
(x11-servers/XFree86-4-Server)
をインストールし、言語の &truetype; フォントをインストールします。
ロケールを正しく設定すれば、
選んだ言語がメニューなどに表示されるはずです。
非英語の文字を入力する
X11 Input Method (XIM)
X11 Input Method (XIM) プロトコルはすべての X11
クライアント用の新たな標準規格です。
すべての X11 アプリケーションは XIM 入力サーバからの入力を受け取る
XIM クライアントとして書かれるべきです。
様々な言語用の XIM サーバが存在します。
プリンタの設定
プリンタにはいくつかの C 言語の char で表現できる
シングルバイトの文字セットがハードウェアに組み込まれています。
ワイド/多バイトの文字セットでは特殊な設定が必要であり、
apsfilter を使うことをお勧めします。
言語固有のコンバータを用いて、&postscript; か PDF フォーマット
に文書をコンバートする場合もあるでしょう。
カーネルとファイルシステム
FreeBSD の高速ファイルシステム (FFS) は 8-bit 透過であり、
C 言語の char で表現できるいかなる文字セットも使うことが
できます (&man.multibyte.3; を参照)。
しかし、ファイルシステム中には文字セットの名前は記録されていません。
したがって、これは単なる 8-bit であり、
エンコーディングに関しては何の情報もないのです。
公式には、FFS
はまだいかなるワイド/マルチバイトの文字セットもサポートしていません。
しかし FFS でそのようなサポートを行うためのパッチが、
多くのワイド/マルチバイトの文字セットに存在します。
それらは単に一時的で汎用性のない解決策であり、
わたしたちはそれらをソースツリーに含めないことを決めています。
これらのパッチに関しては、各言語のウェブサイトを参照してください。
DOS
Unicode
FreeBSD の &ms-dos; ファイルシステムでは、
&ms-dos;, Unicode 文字セット、FreeBSD ファイルシステムの
文字セットの間で変換を行うことが可能です。
詳細は &man.mount.msdos.8; を参照してください。
国際化に対応したプログラムのコンパイル
FreeBSD ports の多くはすでに国際化されています。
いくつかには port の名前に -I18N と付いています。
これらはもちろんのこと、他のプログラムも国際化への対応を組み込んだものがあり、
コンパイルに際して特別な注意を払う必要はありません。
MySQL
しかし、MySQL のようなアプリケーションでは、
特定の文字セットを使うように Makefile
を設定する必要があります。
これは大抵 Makefile の中で
対処されているか、ソース中の configure
に値を渡すことで対応しています。
FreeBSD を特定の言語に地域化する
ロシア語 (KOI8-R エンコーディング)
AndreyChernov原作:
地域化
ロシア語
KOI8-R エンコーディングの詳細については、
KOI8-R References
(Russian Net Character Set) を参照してください。
ロケールの設定
以下の行を
~/.login_conf に追加してください。
me:My Account:\
:charset=KOI8-R:\
:lang=ru_RU.KOI8-R:
ロケール を
設定する際の例については、この章の前の方を参照してください。
コンソールの設定
/etc/rc.conf
ファイルに次の行を追加してください。
mousechar_start=3
また、/etc/rc.conf
で以下の設定を使ってください。
keymap="ru.koi8-r"
scrnmap="koi8-r2cp866"
font8x16="cp866b-8x16"
font8x14="cp866-8x14"
font8x8="cp866-8x8"
/etc/ttys の各
ttyv* エントリにおいて、
端末タイプとして cons25r
を指定してください。
コンソールを設定する際の例については、この章の前の方を参照してください。
プリンタの設定
プリンタ
ロシア語用の文字を搭載したプリンタはほとんど
ハードウェアコードページ CP866 を使っているため、
KOI8-R を CP866 に変換する専用の出力フィルタが必要となります。
このフィルタはデフォルトで
/usr/libexec/lpr/ru/koi2alt に
インストールされています。
ロシア語用のプリンタの /etc/printcap
エントリは以下のようになります。
lp|Russian local line printer:\
:sh:of=/usr/libexec/lpr/ru/koi2alt:\
:lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:
記述の詳細については &man.printcap.5;
を参照してください。
&ms-dos; ファイルシステムとロシア語ファイル名
以下の &man.fstab.5; エントリの例は、マウントされた
&ms-dos; ファイルシステムにおいてロシア語ファイル名を
使えるようにします。
/dev/ad0s2 /dos/c msdos rw,-Wkoi2dos,-Lru_RU.KOI8-R 0 0
オプションは利用するロケール名を選択し、
オプションは文字変換表を設定します。
オプションを使う時は、変換表が
/usr/libdata/msdosfs にあるので、
/usr を &ms-dos; パーティションより前に
マウントするようにしてください。詳しくは、
&man.mount.msdos.8; のマニュアルを参照してください。
X11 の設定
まず X 以外のロケールの設定を行ってください。
&xorg; を使っているなら、
x11-fonts/xorg-fonts-cyrillic
パッケージをインストールしてください。
/etc/X11/xorg.conf ファイルの
"Files"
セクションをチェックしてください。
既存の FontPath
エントリの前に以下の行を追加しなければなりません。
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/misc"
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/75dpi"
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/100dpi"
もし高解像度のビデオモードを使っている場合には、
75 dpi と 100 dpi の行を入れ替えてください。
ロシア語のキーボードを使えるようにするには、
以下の行を xorg.conf ファイルの
"Keyboard" セクションに追加します。
Option "XkbLayout" "us,ru"
Option "XkbOptions" "grp:toggle"
また、XkbDisable が無効
(コメントアウト) になっていることを確認してください。
grp:caps_toggle
については、ロシア語/ラテン文字の切り替えは
CapsLock で行います。
従来の CapsLock の機能は
ShiftCapsLock
で使うことができます (ラテン文字モードの時のみ)。
grp:toggle
については、ロシア語/ラテン文字の切り替えは
Right Alt で行います。
&xorg; では、理由は不明ですが
grp:caps_toggle は動作しません。
キーボードに &windows;
キーがあり、
ロシア語モードでそのキーにいくつかの非英字キーが
割り当てられているようなら、xorg.conf
ファイルに以下の行を追加してください。
Option "XkbVariant" ",winkeys"
ロシア語の XKB キーボードは、
地域化されていないアプリケーションではうまく動かないかも知れません。
地域化がされたアプリケーションは少なくともプログラムの最初の方で
XtSetLanguageProc (NULL, NULL, NULL);
を呼び出すべきです。
X11 アプリケーションを地域化する方法については、
KOI8-R for X Window
を参照してください。
台湾向けの繁体字中国語への地域化
地域化
繁体字中国語
FreeBSD-Taiwan プロジェクトは、多くの
中国語 ports を利用した、
FreeBSD を中国語化するための手引き
http://netlab.cse.yzu.edu.tw/~statue/freebsd/zh-tut/
を提供しています。
FreeBSD Chinese HOWTO の現在の編集者は
Shen Chuan-Hsing statue@freebsd.sinica.edu.tw です。
Chuan-Hsing Shen statue@freebsd.sinica.edu.tw は
FreeBSD-Taiwan の zh-L10N-tut を使って
Chinese
FreeBSD Collection (CFC) を作成しました。
パッケージとスクリプトは
ftp://freebsd.csie.nctu.edu.tw/pub/taiwan/CFC/
から入手できます。
ドイツ語への地域化 (すべての ISO 8859-1 言語向け)
地域化
ドイツ語
Slaven Rezic eserte@cs.tu-berlin.de は
FreeBSD マシン上でウムラウトを使うためのチュートリアルを書きました。
チュートリアルはドイツ語で書かれており、
http://www.de.FreeBSD.org/de/umlaute/
から入手できます。
日本語/韓国語への地域化
地域化
日本語
地域化
韓国語
日本語に関しては
http://www.jp.FreeBSD.org/
を、韓国語に関しては
http://www.kr.FreeBSD.org/
を参照してください。
英語以外の FreeBSD ドキュメント
FreeBSD の一部を他の言語に翻訳してくれている人たちがいます。
これらは メインサイトのリンクを辿るか
/usr/share/doc
から入手できます。