アプリケーションソフトの多言語化 (M17N) とかネイティブ言語サポートは2段階で行います。
国際化 (I18N): ソフトが複数のロケール (地域) を扱えるようにします。
地域化 (L10N): 特定のロケール (地域) を扱えるようにします。
|
ヒント |
|---|---|
|
M17N、I18N、L10N に対応する英語の multilingualization、internationalization、localization の中の "m" と "n"、"i" と "n"、"l" と "n" の間には 17、18、10 の文字があります。詳細は、国際化と地域化 を参照下さい。 |
国際化をサポートするプログラムの挙動は、ローカル化をサポートする環境変数 "$LANG"
を使って設定されます。libc
ライブラリーによるロカール依存機能の実際のサポートには、locales か
locales-all
パッケージをインストールする必要があります。locales パッケージは適切に初期化する必要があります。
locales と locales-all
パッケージのいずれもインストールされない場合、ロカール機能のサポートは失われ、システムは US 英語のメッセージ使い、データーを ASCII として取り扱います。この挙動は "$LANG" が
"LANG=" か "LANG=C" か
"LANG=POSIX" と設定されたのと同様です。
GNOME や KDE 等の現代的なソフトは多言語化されています。UTF-8
データーを扱えるようにすることで国際化され、gettext(1)
インフラで翻訳されたメッセージを提供することで地域化されています。翻訳されたメッセージは別の地域化パッケージとして供給されているかもしれません。
現行の Debian デスクトップ GUI システムは普通 GUI 環境下のロカールを
"LANG=xx_YY.UTF-8" と設定します。ここで、"xx" は
ISO 639 言語コード で
"YY" は ISO 3166
国コード です。これらの値はデスクトップ設定 GUI ダイアログで設定されプログラムの挙動を変えます。「"$LANG" 変数」を参照下さい
テキストデータの最も単純な表現は ASCII で、英語には十分で 127 未満の文字 (7 ビットで表現可能) を使います。
プレーンな英語のテキストですら非 ASCII 文字を含んでいるかもしれません。例えば微妙に曲がった左右のクォテーションマークは ASCII 内では利用できません。
“double quoted text” is not "double quoted ASCII" ‘single quoted text’ is not 'single quoted ASCII'
より多くの文字をサポートするために、多くの言語をサポートする多数の文字集合とエンコーディング体系が使用されてきました (表11.2「符号化方式値とその使い方リスト」 を参照下さい)。
ユニコード 文字セットは実質的に人類が知り得る全ての文字を21ビットのコードポイント範囲 (16進表記で 0 から 10FFFF まで) で表記できます。
テキスト エンコーディング システム UTF-8 は、ASCII データー処理システムとほぼ互換な賢明な 8 ビット データー ストリームにユニコード コードポイントを当てはめます。これが UTF-8 を現代的な好ましい選択肢にします。UTF はユニコード変換フォーマット (Unicode Transformation Format) の意味です。 ASCII プレーンテキスト データーが UTF-8 データーに変換されるとき、最初の ASCII データーと全く同じ内容とサイズです。UTF-8 ロケールを採用することで失いものはありません。
UTF-8
ロカールの下の互換アプリケーションプログラムを使うと、必要なフォントとインプットメソッドが導入され有効化されていれば、いかなる外国語のテキストデーターの表示や編集ができます。例えば、"LANG=fr_FR.UTF-8"
ロケールの下で、gedit(1) (GNOME デスクトップ用のテキストエディター)
は、メニューをフランス語で表示しながら中国語の文字の表示や編集ができます。
|
ヒント |
|---|---|
|
新標準の " |
|
注記 |
|---|---|
|
一部のプログラムは I18N をサポートした後でより多くのメモリーを消費するようになります。それらのプログラムは、実行速度最適化のために内部的に UTF-32 (UCS4) で Unicode のサポートをコードされていて、選ばれたロケールに無関係にそれぞれの ASCII 文字データー毎に4バイトを消費するからです。ここでも、UTF-8 ロケールを使ったからといって何も失うわけではありません。 |
システムが特定のロケールにアクセスできるように、ロケールデータをロケールデータベースからコンパイルする必要が有ります。
locales パッケージには、事前にコンパイルしたロケールデーターは同梱されていません。以下のようにして設定する必要があります:
# dpkg-reconfigure locales
このプロセスは2段階あります。
バイナリー形式にコンパイルしたい全ての必要なロケールデーターを選択します。(少なくとも1つの UTF-8 ロケールが含めて下さい)
PAM (「PAM と NSS」を参照下さい) によって使われるように
"/etc/default/locale" を作成しシステム全体のデフォールトのロケール値を設定。
"/etc/default/locale" 中に設定されたシステム全体のデフォルトロケール値は GUI
アプリケーション用の GUI 設定によりオーバーライドされるかもしれません。
|
注記 |
|---|---|
|
実際に使われる符号化方式は " |
locales-all
パッケージには、全てのロケールデーター用に事前にコンパイルしたロケールデーターが同梱されています。"/etc/default/locale"
を作成しないので、locales パッケージもまだインストール必要があるかもしれません。
|
ヒント |
|---|---|
|
いくつかの Debian 派生のディストリビューションの |
クロスプラットフォームのデーター交換 (「リムーバブルストレージデバイス」を参照下さい)
のために、特定の符号化方式 (エンコーディング) でファイルシステムをマウントする必要があるかもしれません。例えば、vfat ファイルシステムに関して mount(8)
はオプション無しの場合 CP437 とみなします。ファイル名に UTF-8 とか CP932
を使うためには明示的にマウントオプションを提供する必要があります。
|
注記 |
|---|---|
|
GNOME のような現代的なデスクトップ環境の下では、デスクトップアイコンを右クリックし "Drive" タブをクリックし "Setting" を開くようにクリックし "Mount options:" に"utf8" を入力すれば、ホットプラグできる USB フラッシュドライブを自動マウントする時のマウントオプションを設定できます。次回このUSB フラッシュドライブをマウントする際には UTF-8 でのマウントが有効です。 |
|
注記 |
|---|---|
|
もしシステムをアップグレードしたり旧式非 UTF-8 システムからディスクを移動したりする場合には、非 ASCII 文字のファイル名は ISO-8859-1 とか eucJP 等の今は非推奨の歴史的符号化方式で符号化をしているかもしれません。テキスト変換ツールの助力を得て、ファイル名を UTF-8 に変換します。「テキストデーター変換ツール」を参照下さい。 |
Samba は新規クライアント (Windows NT、200x、XP) には Unicode
を使いますが、旧式クライアント (DOS、Windows 9x/Me) には CP850
をデフォールトで使います。この旧式クライアントへのデフォールトは "/etc/samba/smb.conf"
ファイル中の "dos charset" を使って例えば日本語なら CP932 等と変更できます。
Debian システム中で表示されるエラーメッセージや標準のプログラムの出力やメニューやマニュアルページ等のテキストメッセージや文書の多くに翻訳があります。ほとんどの翻訳行為のバックエンドツールとして GNU gettext(1) コマンドツールチェインが使われています。
"Tasks" → "Localization" の下の aptitude(8)
リストは地域化されたメッセージをアプリケーションに追加したり翻訳された文書を提供する有用なバイナリーパッケージの徹底的なリストを提供します。
例えば、manpages-LANG
パッケージをインストールするとマンページで地域化したメッセージに使えるようになります。programname
に関するイタリア語のマンページを "/usr/share/man/it/" から読むには、次を実行します。
LANG=it_IT.UTF-8 man programname
GNU gettext は $LANGUAGE 環境変数を使って翻訳言語の優先順位をつけるようにできます。例えば:
$ export LANGUAGE="pt:pt_BR:es:it:fr"
詳しくは、info gettext を参照して "The LANGUAGE variable"
セクションを読んで下さい。
sort(1) や ls(1)
での並べ替え順はロケールの影響を受けます。LANG=en_US.UTF-8 をエクスポートすると辞書順
A->a->B->b...->Z->z で並べ替えられ、一方
LANG=C.UTF-8 をエクスポートすると ASCII バイナーリー順
A->B->...->Z->a->b... で並べ替えられます。
ls(1) の日付形式はロケールに影響されます。literal>" の日付形式は違います (「時間と日付のカスタム化表示」を参照下さい)。
date(1) の日付形式はロケールに影響されます。例えば以下です:
$ unset LC_ALL $ LANG=en_US.UTF-8 date Thu Dec 24 08:30:00 PM JST 2023 $ LANG=en_GB.UTF-8 date Thu 24 Dec 20:30:10 JST 2023 $ LANG=es_ES.UTF-8 date jue 24 dic 2023 20:30:20 JST $ LC_TIME=en_DK.UTF-8 date 2023-12-24T20:30:30 JST
数字の区切り方はロケール毎に異なります。例えば、英語のロケールでは一千点一は "1,000.1"
と表示されますが、ドイツ語のロケールでは "1.000,1"
と表示されます。スプレッドシートプログラムでこの違いを目にするしれません。
"$LANG" 環境変数の各詳細機能は、"$LC_*"
変数の設定でオーバーライドされます。これらの環境変数は更に "$LC_ALL"
変数の設定でオーバーライドされます。詳細は locale(7)
マンページを参照下さい。複雑な設定をするよほどの理由がない限り、これらは使わずただ "$LANG" 変数だけを
UTF-8 ロカールの 1 つに設定して使いましょう。
キーボード システムはシステムの異なるレーヤーで設定できます。
Linux カーネル: keyboard(5)
X サーバー: setxkbmap(1),
xkeyboard-config(5), 環境変数 XMODIFIERS
GUI デスクトップ環境: インプット メソッド 枠組: ibus,
fcitx5
アプリケーション: インプット元を設定する環境変数: GTK_IM_MODULE,
QT_IM_MODULE, QT_IM_MODULES, ...
インプット メソッド枠組み (IM) は以下で構成されます:
インプット メソッド エンジン (IME): 実際のインプット メソッド
設定: IBus yあ IME プラグインのような他のサービスの設定を取り扱う
パネル: 言語バーや選択候補テーブルのようなユーザー インターフェース
アプリケーションへの多言語入力は概略以下のように処理されます。
Keyboard UI panel Configuration Application
| ^ | | ^ ^
v | v v | |
Linux kernel -> Input method engine (IME) -+-> Gtk, Qt ---+ |
| ^ | |
| | +-> X11, Wayland -+
v |
IME plugin (ibus-mozc, ...)
Debian システムは keyboard-configuration
パッケージを使い多くの国際キーボード配列として機能するように設定できます。
# dpkg-reconfigure keyboard-configuration
Linux コンソールや X Window システムでは、これは "/etc/default/keyboard"
内の設定パラメーターを更新します。多くの欧州言語で用いられるアクセント付き文字を含めた多くの非 ASCII 文字は デッドキーや AltGr
キーやコンポーズキーを用い提供されます。
|
注記 |
|---|---|
|
もし ibus がアクティブな場合、たとえ古典的 X 上のデスクトップ環境下でも、あなたの |
X Window プロトコルと違い、Wayland のコアのプロトコルはアクセント付き文字すらサポートしません。 GNOME 用の Mutter とか KDE 用の KWin
等の人気のある Wayland コンポジターはテキスト入力用の text-input-unstable-v3
のような拡張プロトコルを実装しています ("current Wayland protocols and their
support status"を参照下さい)。
Waylandでは、text-input-unstable-v3 プロトコルがインプット
メソッドと相性よく機能します ("Wayland
input method project post-mortem" を参照下さい)。.
この text-input-unstable-v3 をサポートするGTK とか Qt
のようなライブラリーを用いてほとんどの GUI アプリケーションはビルドされます。
IBus とか Fcitx
(version 5)のような、人気の インプット メソッド エンジン (IME) はこの
text-input-unstable-v3 と相性よく機能します
IME は多くの言語のためのテキスト入力をプラグインを用いてサポートします。
最近の IME は、Wayland で欧州言語用のアクセント付き文字のテキスト入力をサポートするために、過去 X Window が提供していた
setxkbmap のような "X
Keyboard Extension (XKB) (X キーボード拡張機能) " の機能を中に組み込んでいます。
GNOME では "ibus" がそのパッケージ依存関係から自動導入されるデフォルトの IME です。
殆どの多言語キーボード入力機能は "GNOME Settings" か "GNOME Tweaks" から設定できます。
一部の多言語キーボード入力機能は ibus-setup(1) コマンドから設定する必要があるかもしれません。
絵文字 キーボード入力は "SUPER-." をタイプ
(Windows キーとピリオドキーの同時タイプ) に続いて、各絵文字のキーワードと SPACE-キーをタイプしてできます。
IBus とそのプラグイン パッケージのリストは以下の通りです。
表8.1 IBusとプラグイン パッケージのリスト
| パッケージ | ポプコン | サイズ | サポートされたロケール |
|---|---|---|---|
| ibus | V:213, I:252 | 1828 | dbus を用いるインプットメソッドのフレームワーク |
| ibus-mozc | V:2.1, I:3.8 | 978 | 日本語 |
| ibus-anthy | V:0.5, I:1.2 | 8958 | 日本語 |
| ibus-skk | V:0.04, I:0.14 | 242 | 日本語 |
| ibus-kkc | V:0.03, I:0.18 | 211 | 日本語 |
| ibus-libpinyin | V:1.2, I:5.1 | 2767 | 中国語 (zh_CN 用) |
| ibus-chewing | V:0.19, I:0.90 | 288 | 中国語 (zh_TW 用) |
| ibus-libzhuyin | V:0.00, I:0.11 | 41009 | 中国語 (zh_TW 用) |
| ibus-rime | V:0.26, I:0.49 | 78 | 中国語 (zh_CN/zh_CN 用) |
| ibus-cangjie | V:0.02, I:0.12 | 235 | 中国語 (zh_HK 用) |
| ibus-hangul | V:0.3, I:2.0 | 264 | 韓国語 |
| ibus-libthai | V:0.00, I:0.05 | 84 | タイ語 |
| ibus-table-thai | I:0.05 | 59 | タイ語 |
| ibus-unikey | V:0.20, I:0.43 | 286 | ベトナム語 |
| keyman | I:0.10 | 507 | 多言語: 2000 語以上のための Keyman プラグイン |
| ibus-table | V:0.08, I:1.00 | 2271 | IBus 用のテーブル プラグイン |
| ibus-m17n | V:0.3, I:2.0 | 373 | 多言語: インド系言語、アラビア語、他 |
Fcitx (version 5) インプトメソッド
フレームワークは中国人ユーザーに人気があり "ibus" と互換性があります。
"fcitx5"とそのプラグイン パッケージのリストは以下の通りです。
表8.2 Fcitx5とプラグイン パッケージのリスト
| パッケージ | ポプコン | サイズ | サポートされたロケール |
|---|---|---|---|
| fcitx5 | V:7, I:12 | 761 | "ibus"互換のインプとメソッドフレームワーク |
| fcitx5-mozc | V:1.0, I:1.6 | 1260 | 日本語 |
| fcitx5-anthy | V:0.06, I:0.20 | 808 | 日本語 |
| fcitx5-skk | V:0.05, I:0.14 | 369 | 日本語 |
| fcitx5-kkc | V:0.00, I:0.06 | 416 | 日本語 |
| fcitx5-chinese-addons | I:9.0 | 17 | 中国語 (zh_* 用メタパッケージ) |
| fcitx5-pinyin | V:3.8, I:9.4 | 1044 | 中国語 (zh_CN 用) |
| fcitx5-chewing | V:0.2, I:1.0 | 217 | 中国語 (zh_TW 用) |
| fcitx5-zhuyin | I:0.06 | 41051 | 中国語 (zh_TW 用) |
| fcitx5-rime | V:0.44, I:0.84 | 371 | 中国語 (zh_CN/zh_CN 用) |
| fcitx5-table-cangjie-large | I:0.12 | 1292 | 中国語 (zh_HK 用) |
| fcitx5-hangul | V:0.09, I:0.23 | 235 | 韓国語 |
| fcitx5-libthai | I:0.05 | 119 | タイ語 |
| fcitx5-table-thai | I:0.08 | 34 | タイ語 |
| fcitx5-unikey | V:0.08, I:0.20 | 588 | ベトナム語 |
| fcitx5-m17n | V:0.12, I:0.51 | 259 | 多言語: インド系言語、アラビア語、他 |
| fcitx5-table | V:0.4, I:9.2 | 520 | fcitx5 用のテーブル プラグイン |
| fcitx5-keyman | V:0.03, I:0.04 | 235 | 多言語: 2000 語以上のための Keyman プラグイン |
日本語インプットメソッドを英語環境 ("en_US.UTF-8") 下で起動するのが非常に便利です。IBus
を使ってどう実現したかを以下に記します。
日本語インプットツールパッケージの ibus-mozc (または
ibus-anthy) をインストールします。
一般: ibus-setup(1) を実行 → "Input Method" を選択 →
"Add" をクリック → "Japanese" → "Mozc (または Anthy)" →
"Add" をクリック
GNOME: "Settings" → "Keyboard" → "Input Sources" → "Input Sources" 中の
"+" をクリック → "Japanese" → "Mozc (または Anthy)" → "Add" をクリック
インプットソースはいくつ選んでも構いません。
ユーザーアカウントに再ログインします。
GUI ツールバーアイコンを右クリックして各インプットソースを設定します。
インプットソース間を、SUPER-SPACE を用いて切り替えます。(SUPER は普通 Windows キーです。)
|
ヒント |
|---|---|
|
シフト |
Wayland だと:
im-config パッケージは何もし無いし、安全に削除可能です。
環境変数の設定をする必要は、バックワード 互換性のため等を除けばきっと必要ないでしょう。
環境変数を設定する必要のある場合には、
"~/.config/environment.d/50-input-method.conf"
のようなファイルを作成して環境変数を設定します。
X Window だと:
im-config パッケージをインストールします。
im-config(8) のための GUI メニューエントリーは "Input method" です。
あるいは、ユーザのシェルから "im-config" を実行します。
im-config(8) は実行されるのが root からかどうかによって違った挙動をします。
im-config(8)
はユーザーからのアクション無しにシステム上で最も好ましいインプットメソッドを有効にします。
Linux コンソールは限定された文字しか表示できません。(非 GUI コンソール上で非ヨーロッパ言語を表示するには
jfbterm(1) のような特別なターミナルプログラムを使う必要があります。)
GUI 環境(7章GUI システム)は、必要なフォントデーターがあれば UTF-8 中の全ての文字を表示できます。(オリジナルフォントデーターで使われた符号化方式は面倒を見られているのでユーザーからは見えません。)
Debian システムは console-setup
パッケージを使い多くの国際化コンソール設定をともに使えるように設定できます。
# dpkg-reconfigure console-setup
Linux コンソールや X Window システムでは、これは
"/etc/default/console-setup"
内の設定パラメーターを更新し多くの欧州言語で用いられるアクセント付き文字を含めた多くの非 ASCII 文字を表示するようにします。
文字コンソールと ncurses(3) システム機能を設定するのはいくつかの要素があります。
"/etc/terminfo/*/*" ファイル (terminfo(5))
"$TERM" 環境変数 (term(7))
setterm(1)、stty(1)、tic(1)、toe(1)
もし xterm 用の terminfo エントリーが非 Debian
のxterm でうまく機能しない場合には、リモートから Debian
システムにログインする時にターミナルタイプ、"$TERM"、を
"xterm" から "xterm-r6"
のような機能限定版に変更します。詳細は "/usr/share/doc/libncurses5/FAQ"
を参照下さい。"dumb" は"$TERM" の最低機能の共通項です。
東アジアのロケールでは、箱描画文字やギリシャ文字やキリル文字はあなたが望むよりも広い幅で表示されて、ターミナル出力が揃わなくなるかもしれません (Unicode標準附属書 #11, 4.2 不明瞭文字 参照)。
この問題は回避可能です:
gnome-terminal: Preferences → Profiles →
Profile name → Compatibility → Ambiguous-wide
characters → Narrow
ncurses: 環境変数を export
NCURSES_NO_UTF8_ACS=0 と設定します。