FreeBSD ハンドブック
Prev | Chapter 16. 地域化 (localization) - I18N/L10N の利用と設定 | Next

# 16.3. 地域化の利用

I18N は FreeBSD に特有のものではなく、一つの考え方です。 以下の慣習にしたがって FreeBSD を利用するようにしてください。

地域化の設定は言語コード、 国コード、エンコーディングという三つの用語を基本とします。 ロケール名はこれらから以下のように構成されます。

    言語コード_国コード.エンコーディング

## 16.3.1. 言語コードと国コード

FreeBSD (やその他の国際化をサポートした UNIX®-like なシステム) を特定の言語に地域化するには、 国と言語を特定するためのコードを知る必要があります (国コードはアプリケーションに指定された言語のどの変種 (variation) を用いれば良いかを教えてくれます)。 加えて、ウェブブラウザ、SMTP/POP サーバ、 ウェブサーバなどもこれらを元に様々な選択を行います。 以下は言語/国コードの例です。

言語/国コード | 説明
--- | ---
en_US | 英語 (合衆国)
ru_RU | ロシア語 (ロシア)
zh_TW | 繁体字中国語 (台湾)

## 16.3.2. エンコーディング

いくつかの言語では、8-bit やワイド文字、 多バイト文字など ASCII とは異なったエンコード法を用います (multibyte(3) 参照)。 古いアプリケーションはこれらを認識せず、 誤ってコントロール文字として認識してしまいます。 最近のアプリケーションは、大抵 8-bit 文字を認識します。 実装方法にも依りますが、アプリケーションのコンパイル時もしくは configure 時に、ワイド/多バイト文字のサポートを指定する必要があるかも知れません。 ワイド/多バイト文字を入力したり処理したりすることを可能にするために、 FreeBSD Ports Collection では各言語向けに異なったプログラムを提供しています。 各 FreeBSD Port の国際化文書を参照してください。

特に、正しく configure したり、configure/Makefile/ コンパイラに適切な値を渡すために、アプリケーションの 文書を良く読む必要があります。

次のことを心に留めておいてください。

- 言語固有の、C 言語の char で表現できる シングルバイトの文字セット (multibyte(3) を参照)、たとえば ISO-8859-1, ISO-8859-15, KOI8-R, CP437。

- ワイド、多バイトのエンコーディング、たとえば EUC, Big5。

現在有効な文字セットのリストに関しては IANA Registry をチェックしてください。

> Note: FreeBSD 4.5 以降では、 X11 互換のロケール符号を用いています。

## 16.3.3. 国際化アプリケーション

FreeBSD の ports/packages システムでは、 それとひと目でわかるように国際化アプリケーションには名前に `I18N` という文字が含まれています。 ただし、それらのアプリケーションが常にあなたの望む言語を サポートしているとは限りません。

## 16.3.4. ロケールの設定

通常は、ログインシェルで環境変数 `LANG` に ロケール名を設定し export すれば十分です。これは、ユーザーの `~/.login_conf` ファイル、またはユーザーの シェルの初期設定ファイル (`~/.profile`, `~/.bashrc`, `~/.cshrc`) でできます。 `LC_CTYPE` や `LC_CTIME` のような ロケールのサブセットを設定する必要はありません。 詳細に関しては、各言語向けの FreeBSD 文書を参照してください。

以下の二つの環境変数を設定ファイルで指定する必要があります。

- POSIX® setlocale(3) 関連の関数のための `LANG`

- アプリケーション用の MIME 文字セットのための `MM_CHARSET`

これにはユーザのシェルの設定、アプリケーション固有の設定、 X11 の設定などが含まれます。

### 16.3.4.1. ロケールを設定する方法

ロケールを設定するには以下で説明するように、二つの方法があります。 一つは推奨される方法で、ログインクラス (login class) において環境変数に割り当てる方法。 もう一つはシステムのシェル 初期化ファイル において環境変数の指定を追加する方法です。

#### 16.3.4.1.1. ログインクラスを用いる方法

この方法では、 各シェルの初期化ファイルに特定のシェル設定を追加する代わりに、 すべてのシェルにおいて一度に必要なロケール名と MIME 文字セットを環境変数に割り当てることができます。 ユーザの設定はユーザ自身で行なえますが、 管理者の設定にはスーパユーザの権限が必要となります。

##### 16.3.4.1.1.1. ユーザの設定

ユーザのホームディレクトリの `.login_conf` ファイルを用いて、 両方の変数に Latin-1 エンコーディングを設定する 簡単な例は次の通りです。

    me:\
        :charset=ISO-8859-1:\
        :lang=de_DE.ISO8859-1:

これは、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

詳細に関しては 管理者の設定 と login.conf(5) を参照してください。

##### 16.3.4.1.1.2. 管理者の設定

`/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:

#### ログインクラスを vipw(8) で変更する

新しいユーザを追加するために `vipw` を用います。そして以下のようなエントリを作成します。

    user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh

#### ログインクラスを adduser(8) で変更する

新しいユーザを追加するために `adduser` を用います。そして以下の手順を踏みます。

- `/etc/adduser.conf` で `defaultclass = `language`` と設定します。 この場合、他の言語のユーザには `default` クラスを指定することを 忘れないでください。

- もうひとつの方法は、adduser(8) が

      Enter login class: default []:

  と聞いてきたときに、毎回言語を指定するやり方です。

- さらに別の方法は、異なる言語を利用するユーザを 追加する際に、以下のようにするやり方です。

      # adduser -class language

#### ログインクラスを pw(8) で変更する

新しいユーザを追加するために pw(8) を 用いる場合、以下の形式で実行します。

    # pw useradd user_name -L language

#### 16.3.4.1.2. シェルの初期化ファイルによる方法

> Note: シェルごとに異なった設定が必要なため、 この方法は推奨されません。 代わりに ログインクラスを用いる方法を使ってください。

ロケール名と 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

と指定します。

## 16.3.5. コンソールの設定

C 言語の char で表現できるシングルバイトの文字セット用に、 `/etc/rc.conf` でその言語に対応した適切なコンソールフォントを指定してください。

    font8x16=フォント名
    font8x14=フォント名
    font8x8=フォント名

ここで `フォント名` は `/usr/share/syscons/fonts` ディレクトリ にあるフォントファイルから `.fnt` という拡張子を除いたものです。

また、`sysinstall` (FreeBSD バージョンが 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"

設定省略時には、syscons(4) ドライバのマウスカーソルは キャラクタセット中の 0xd0-0xd3 の範囲を占めています。そのため、 利用している言語がこの範囲のキャラクタセットを使っている場合、 カーソルの占める範囲を重ならないように移動させなければなりません。 5.0 より前のバージョンの FreeBSD では、 次の行をカーネルコンフィグレーションファイルに追加することで対処できます。

    options         SC_MOUSE_CHAR=0x03

FreeBSD 4.4 以降の場合は、`/etc/rc.conf` に次の行を追加してください。

    mousechar_start=3

`キーマップ名` は `/usr/share/syscons/keymaps` ディレクトリにあるキーマップファイルから `.kbd` という拡張子を除いたものです。 どのキーマップを使うかよくわからないなら、kbdmap(1) で再起動せずにキーマップを試すことができます。

ファンクションキーの並びはキーマップにより定義されてはいないため、 端末タイプに合わせたファンクションキーを設定するために `keychange` が必要となります。

また、`/etc/ttys` の中のすべての `ttyv*` において、 正しいコンソール端末タイプを設定するようにしてください。 現在の定義済の値は以下の通りです。

文字セット | 端末タイプ
--- | ---
ISO-8859-1 もしくは ISO-8859-15 | `cons25l1`
ISO-8859-2 | `cons25l2`
ISO-8859-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`

## 16.3.6. X11 の設定

X11 は FreeBSD プロジェクトの一部ではありませんが、 FreeBSD ユーザのための情報を記しておきます。 詳細に関しては、Xorg ウェブサイトや、あなたの使っている X11 サーバのサイトを参照してください。

`~/.Xresources` を使うことで、 アプリケーション固有の国際化の設定 (フォント、メニューなど) を追加することができます。

### 16.3.6.1. フォントの表示

Xorg サーバ (`x11-servers/xorg-server`) か XFree86™ サーバ (`x11-servers/XFree86-4-Server`) をインストールし、言語の TrueType® フォントをインストールします。 ロケールを正しく設定すれば、 選んだ言語がメニューなどに表示されるはずです。

### 16.3.6.2. 非英語の文字を入力する

X11 Input Method (XIM) プロトコルはすべての X11 クライアント用の新たな標準規格です。 すべての X11 アプリケーションは XIM 入力サーバからの入力を受け取る XIM クライアントとして書かれるべきです。 様々な言語用の XIM サーバが存在します。

## 16.3.7. プリンタの設定

プリンタにはいくつかの C 言語の char で表現できる シングルバイトの文字セットがハードウェアに組み込まれています。 ワイド/多バイトの文字セットでは特殊な設定が必要であり、 apsfilter を使うことをお勧めします。 言語固有のコンバータを用いて、PostScript® か PDF フォーマット に文書をコンバートする場合もあるでしょう。

## 16.3.8. カーネルとファイルシステム

FreeBSD の高速ファイルシステム (FFS) は 8-bit 透過であり、 C 言語の char で表現できるいかなる文字セットも使うことが できます (multibyte(3) を参照)。 しかし、ファイルシステム中には文字セットの名前は記録されていません。 したがって、これは単なる 8-bit であり、 エンコーディングに関しては何の情報もないのです。 公式には、FFS はまだいかなるワイド/マルチバイトの文字セットもサポートしていません。 しかし FFS でそのようなサポートを行うためのパッチが、 多くのワイド/マルチバイトの文字セットに存在します。 それらは単に一時的で汎用性のない解決策であり、 わたしたちはそれらをソースツリーに含めないことを決めています。 これらのパッチに関しては、各言語のウェブサイトを参照してください。

FreeBSD の MS-DOS® ファイルシステムでは、 MS-DOS, Unicode 文字セット、FreeBSD ファイルシステムの 文字セットの間で変換を行うことが可能です。 詳細は mount_msdos(8) を参照してください。

Prev | Home | Next
基礎知識 | Up | 国際化に対応したプログラムのコンパイル