7    国際化アプリケーションのプログラミング上の注意

この章では,国際化アプリケーションを開発する上で考慮しなければならないさまざまな作業について説明します。 次のような作業があります。

この章では,国際化アプリケーションの作成に必要なツールに関する情報を説明します。 この章で説明する内容は,国際化アプリケーションをオペレーティング・システム上で使用する方法にも深く関係します。 この章の情報を使用するとき,姉妹編の『国際化機能ユーザーズ・ガイド』も参照すると役に立ちます。

次のマニュアルでは,オペレーティング・システム上でアジア系言語用に提供されているカスタマイズ方法とソフトウェアの使用方法について,言語ごとに説明しています。

これらのマニュアルは,本オペレーティング・システムのドキュメント Web サイト (http://h30097.www3.hp.com/docs/pub_page/V51A_DOCS/PRG_DOCS.HTM) で,プログラミング関連ドキュメントとして掲載されています。 中国語,日本語,および韓国語のテクニカル・リファレンスのテキストでは,英語以外の文字が使用されています。 これらの文字を Web ブラウザで表示するには,適切な言語サポート・サブセットをシステム上にインストールする必要があります。 また,ロケールには,テクニカル・リファレンスで使用されるローカル言語文字を含むロケールを設定する必要があります。

本オペレーティング・システムのドキュメントには,サポートされているすべての言語およびコードセットのリファレンス・ページの他に,国際化 ( i18n_intro(5)) や,地域化 ( l10n_intro(5)) に関する入門編のリファレンス・ページがあります。

7.1    入力システムの選択

日本語や中国語,韓国語などの言語では,文字や語句を入力するのに入力システムを使用します。 入力システムを使用すると,入力データにさまざまな編集を加えて文字の入力が行えます。 文字入力の途中で入力されるデータは,前編集文字列と呼ばれます。

X ウィンドウの入力システム仕様では,次のユーザ入力 (前編集) スタイルが規定されています。

一般に,各ロケールにおける入力システムは,複数のユーザ入力スタイルをサポートしますが,すべての入力スタイルをサポートしているわけではありません。 入力システムによってサポートされている言語で操作を行うときは,VendorShell リソースの XmNpreeditType を使用して,入力スタイルの優先順位を指定できます。 省略時の設定では,このリソースは次のように定義されています。

OnTheSpot,OverTheSpot,OffTheSpot,Root

これらの値の優先順位は,入力システムがサポートしていれば On-the-Spot スタイルが使用され,On-the-Spot がサポートされず Over-the-Spot がサポートされていれば,Over-the-Spot が使用されることを示します (Off-the-Spot と Root-Window に関しても同様)。

XmNpreeditType リソース値をアプリケーションに渡すには,次のいずれかの方法を使用します。

入力スタイルは,専用の入力サーバによってサポートされます。 入力サーバは独立したプロセスとして動作し,アプリケーションと通信しながら入力操作を処理します。

入力サーバは,アプリケーションと同じシステムで実行している必要はありませんが,1 つの例外を除き,アプリケーションを起動する前に実行されており,アプリケーションからアクセス可能でなければなりません。

Motif アプリケーションが,国際化されて簡体字中国語をサポートしており,Reconnectable リソースに True が設定されている XmText または XmTextField ウィジェットを含んでいる場合,アプリケーションは入力サーバとの接続を,アプリケーションの最初の起動時,またはサーバの停止および再起動時に確立することができます。 詳細については, XmText(3X) および XmTextField(3X) のリファレンス・ページを参照してください。

本オペレーティング・システムで利用可能な入力サーバや,各サーバがサポートしている入力スタイルについては,『国際化機能ユーザーズ・ガイド』を参照してください。

7.2    ユーザ定義文字と語句入力の管理

日本,台湾,および中国で使用される文字セットには,アジア地域の場所の名前や人名に使用されることがある一部の文字が含まれていません。 そのような文字はユーザが定義でき,サイト別のデータベースに格納されます。 そのようなデータベースは,ユーザ定義文字 (UDC) または文字属性データベースと呼ばれます。 表意文字を定義するときは,その文字のフォント・グリフ,照合ファイル,およびその他のサポート・ファイルも定義しなければなりません。

UDC データベースの設定方法および使用方法については 付録 B を参照してください。

韓国,台湾,および中国のユーザは,キーワード,省略形,あるいは頭字語を使用して,完全な語句を入力できます。 この機能は,語句データベースと入力メカニズムによってサポートされます。 語句データベースの設定および使用方法については,『国際化機能ユーザーズ・ガイド』を参照してください。

/var/i18n/conf/cp_dirs 構成ファイルによって,ソフトウェア・サービスやハードウェアに,UDC や語句入力をサポートするデータベースを検索させることができます。

例 7-1 に,cp_dirs ファイルの省略時のエントリを示します。 これらのエントリを編集し,省略時の位置を変更できます。

例 7-1:  省略時の cp_dirs ファイル

#
# Attribute directory configuration file
#
#                       System location         User location
#                       ===============         =============
udc     -               /var/i18n/udc           ~/.udc
odl     -               /var/i18n/odl           ~/.odl
sim     -               /var/i18n/sim           ~/.sim
cdb     /usr/i18n/.cdb  /var/i18n/cdb           ~/.cdb
iks     -               /var/i18n/iks           ~/.iks
pre     -               /var/i18n/fonts         ~/.fonts
bdf     -               /var/i18n/fonts         ~/.fonts
pcf     -               /var/i18n/fonts         ~/.fonts

cp_dirs ファイル内の個々の行は,1 つのエントリを表しており,次のフォーマットを持ちます。

[service_name standard_path system_path user_path ]

service_name は次のいずれかです。

cp_dirs ファイルには,各サービスについて 1 つのエントリしか含められません。 エントリ行の残りのフィールドは,次のパス指定で構成されます。

上記の位置は,次のいずれかの形式で指定します。

cp_dirs ファイル内のコメント行は,番号記号 (#) で始まります。

7.3    ロケールの指定によるソート順序の割り当て

sort コマンドは,現在のロケールで定義されている照合順序に従って文字をソートします。 ロケールによっては,対応する文字セットに対して複数の照合規則を適用できます。 ただし,その場合には,言語,地域,およびコードセットの同じ組み合わせについて,複数のロケール名が存在します。 これらのバリエーションは,ユーザが複数の照合順序を選択できるようにするためのものです。

言語,地域,およびコードセットの組み合わせについて複数のロケールが存在する場合,@variant 形式のサフィックスが付加されることがあります。 一般に,%L 指定子を使用して作成されるパス名で問題が生じないようにするために,@ サフィックスが付加されているロケール名は,適切なロケール・カテゴリ変数にのみ指定するようにします。 次の例では,LC_COLLATE に割り当てられるロケールと LANG に割り当てられるロケールは,照合順序のみが異なります。

% setenv LANG zh_TW.eucTW
% setenv LC_COLLATE zh_TW.eucTW@radical

ほとんどの言語では,1 つまたは複数のロケールを介して,複数の照合順序をサポートするのが適切な方法です。 ただし,アジア系言語における照合順序には,次に示す理由から,さらに追加のサポートが必要になります。

これらの理由から asort コマンドが提供されており,アジア系言語をサポートする言語別サブセットをインストールすれば,このコマンドが使用できるようになります。 asort コマンドは,省略時の設定では,LC_COLLATE 変数で定義されている照合順序を使用し,sort コマンドがサポートするすべてのフラグをサポートします。 また,asort コマンドには次のフラグが追加されています。

このコマンドの使用方法については, asort(1) のリファレンス・ページを参照してください。

7.4    英語以外の言語におけるリファレンス・ページの処理

一般に,UNIX システムのアプリケーションを開発するプログラマは,アプリケーションとそのコンポーネントを解説するためのオンラインのリファレンス・ページ (manpage) を作成します。 国際市場でアプリケーションを販売するためには,UNIX のテキスト処理用のコマンドとユーティリティで,翻訳版のリファレンス・ページが扱えなければなりません。 このニーズに応えるために,Tru64 UNIX には nrofftbl,および man コマンドの拡張版が用意されています。

7.4.1    nroff コマンド

nroff コマンドは,ロケールをサポートするための次の機能を備えています。

表意文字を含むリファレンス・ページをフォーマットする場合,nroff コマンドは各文字を 1 つの単語として扱います。 2 バイトの英字と句読点を含む表意文字の文字列は,以下の制約に基づいて次の行に折り返されます。

標準の行頭禁則文字と行末禁則文字のリストは,nroff カタログ・ファイルで定義されています。 これらの文字の詳細については,次の言語固有のマニュアルを参照してください。

これらのマニュアルは,本オペレーティング・システムのドキュメント Web サイト (http://h30097.www3.hp.com/docs/pub_page/V51A_DOCS/PRG_DOCS.HTM) で,プログラミング関連ドキュメントとして掲載されています。

行頭禁則文字と行末禁則文字は,nroff が句読点や右カッコをテキスト行の先頭に置いたり,左カッコをテキスト行の末尾に置くことを防ぐためのものです。 標準の制約は,ソース・ファイル中に .ki.ko コマンドを埋め込むことにより,オン/オフできます。

また,次のコマンドを使用して,行頭禁則文字と行末禁則文字の個人用セットを定義することもできます。

.kl 'no-first-list'no-last-list '

パラメータ no-first-listno-last-list は,行頭禁則文字と行末禁則文字のカテゴリに含める文字の並びです。 個人用の行頭禁則文字と行末禁則文字のリストを取り消すには,パラメータにヌル文字列を指定して .kl コマンドを入力します。 次に例を示します。

.kl '''

注意

.kl コマンドで指定した文字は,行頭禁則文字と行末禁則文字の標準セットを補足するのではなく,上書きします。 そのため,行頭禁則文字と行末禁則文字の標準セットを個人用セットと併用することはできません。

コマンド .kl ''' を入力すると,現在のロケールにおける標準の行頭禁則文字と行末禁則文字セットが使用されます。

nroff コマンドでは,テキストを右揃えにすることも,右揃えにしないことも可能です。 テキストを右揃えにすると,nroff は行中の単語の間にスペースを挿入します。 表意文字は,フォーマット処理のほとんどの過程で単語として扱われますが,スペースで区切ることが可能かどうかという点で,文字ごとに違いがあります。 前にスペースを置ける文字,後にスペースを置ける文字,あるいはこの両方が可能な文字のリストが,言語別ユーザ・マニュアルに記載されています。 このユーザ・マニュアルは,Tru64 UNIX の言語別サブセットをインストールすると,オンラインで利用できます。 テキストを右揃えにする場合,nroff コマンドは次の位置にだけスペースを挿入します。

これ以外の場合,連続した表意文字の間にはスペースは挿入されません。 したがって,テキスト行が表意文字だけを含んでいるときは,右揃えが不可能な場合があります。

7.4.2    tbl コマンド

tbl コマンドは,.TS.TE マクロで区切られたブロック内で,表フォーマット・コマンドの前処理を実行します。 tbl コマンドは,英語以外の言語のテキストに現れるマルチバイト文字を扱えます。

tbl コマンドは,neqn (数式フォーマット・プリプロセッサ) と一緒に使用されることが多く,nroff コマンドに渡された入力に対してフィルタ処理を行います。 その場合,最初に tbl を指定して,パイプを通して渡されるデータ量を最小限に抑えます。 次に例を示します。

% cd /usr/usr/share/ja_JP.deckanji/man/man1
% tbl od.1 | neqn | nroff -Tlpr -man -h | lpr -Pmyprinter

アジア系言語のテキストをプリントするときは,その言語をサポートしているプリンタを使用しなければなりません。

7.4.3    man コマンド

man コマンドは,リファレンス・ページ・ファイル内のマルチバイト文字を扱えます。 省略時の設定では,man コマンドは,/usr/share/man/usr/local/man ディレクトリを検索する前に,/usr/share/locale_name/man ディレクトリにあるリファレンス・ページを自動的に検索します。 したがって,インストールされているロケールが LANG 環境変数に設定されており,そのロケールに対応するリファレンス・ページの翻訳版が存在する場合,man コマンドは適切な言語でリファレンス・ページを表示します。

さらに,特定の言語用のリファレンス・ページの翻訳版が,ユーザのロケールのコードセットと合わないコードセットでエンコードされているときは,man コマンドは自動的にコードセット変換を適用します (適切なコンバータが利用可能な場合)。 man コマンドの検索パスの再設定や,コードセット変換の詳細については, man(1) のリファレンス・ページを参照してください。

7.5    データ・ファイルのコードセットの変換

各ロケールは,特定のコードセットに基づいています。 そのため,あるコードセットでエンコードされているデータを含むファイルを使用するアプリケーションを,別のコードセットに基づくロケールで実行する場合には,文字の解釈が正しく行えないことがあります。 たとえば,ある仮想的な言語に "quo" という文字があり,その文字が,あるコードセットでは \031,別のコードセットでは \042 としてエンコードされているとします。 文字 "quo" がデータ・ファイル内で \031 として格納されている場合,そのファイルからデータを読み込むアプリケーションは,同じコードセットに基づくロケールで実行されなければなりません。 さもないと,\031 は "quo" 以外の文字として認識されます。

ユーザ,あるいはユーザが実行するアプリケーションは,プロセス環境を特定のロケールに設定して,ロケールが基づくコードセットとは異なるコードセットで作成されたデータ・ファイルを使用しなければならない場合があります。 異なる言語環境や,ユーザのロケールとは異なるコードセットでデータ・ファイルが使用される例を,次に示します。

iconv コマンドや,iconv_open()iconv(),および iconv_close() 関数を使用することにより,データ・ファイルをあるコードセットから別のコードセットに変換できます。 たとえば次のコマンドは,SJIS コードセットでエンコードされているファイル accounts_local 内のデータを読み込み,そのデータを eucJP コードセットに変換して,結果をファイル accounts_central に追加します。

% iconv -f SJIS -t eucJP accounts_local \
>> accounts_central

man コマンドや国際化対応のプリント・フィルタなど,多数のコマンドおよびユーティリティで,iconv() 関数と,関連するコンバータを使用して,コードセットの変換を行います。

iconv コマンドおよび関連する関数は,データを変換する際にアルゴリズムに基づくコンバータか,テーブル・コンバータのいずれかを使用できます。 アルゴリズムに基づくコンバータは,システムにインストールされていれば,/usr/lib/nls/loc/iconv ディレクトリに置かれています。 このディレクトリは,コンバータを探すときに最初に検索されるディレクトリです。 このディレクトリには,同じコンバータに対して,システムで指定された別の名前をマップするための別名ファイル (iconv.alias) も含まれています。 テーブル・コンバータは,システムにインストールされていれば,/usr/lib/nls/loc/iconvTable ディレクトリに置かれています。 LOCPATH 変数が定義されている場合,この変数の値はコマンドの省略時の検索パスに置き換わりします。

iconv コマンドは,コンバータ名が次のフォーマットになっているものと想定します。

from-codeset_ to-codeset

上記の例では,iconv コマンドは コンバータ /usr/lib/nls/loc/iconv/SJIS_eucJP を検索して使用します。

また,HKSCS (Hong Kong Supplementary Character Set) のコードセット変換をサポートするオペレーティング・システムがあるとします。 HKSCS は,ロケールでも文字セット名でもありませんが,中国語で行われる電子通信やデータ交換の共通言語インタフェースを提供するために使用されます。 HKSCS の文字は,コンピュータでのみ使用されます。 Tru64 UNIX では,HKSCS は,HKSCS 文字を含み,サポートが HKSCS と Unicode 間のコード変換に限定される,拡張 Big-5 エンコーディングの名前として使用されます。 iconv コマンドを使用すると,HKSCS によるコードセット変換は,次のいずれかとして指定されます。

Hong Kong Supplementary Character Set についての詳細は, HKSCS(5) のリファレンス・ページを参照してください。

表 7-1 に,Tru64 UNIX が英語のデータに関してサポートするコードセット変換を示します。 次のマニュアルには,アジア系言語でサポートされているコードセット変換テーブルの説明があります。

iconv コマンドについての詳細は, iconv(3) および iconv_intro(5) のリファレンス・ページを参照してください。 プログラムがコードセット変換に使用できる関数については, iconv_open(3)iconv(1),および iconv_close(3) のリファレンス・ページを参照してください。 特定の言語で使用可能なコードセット・コンバータについては,その言語のリファレンス・ページを参照してください。

表 7-1:  英語でサポートされているコードセット変換

コードセット ASCII-GR ISO8859-1 ISO8859-1-GL ISO8859-1-GR
ASCII-GR - × ×
ISO8859-1 -
ISO8859-1-GL × - ×
ISO8859-1-GR × × -

7.6    中国語および韓国語の PostScript サポートでのフォント・レンダラの使用

この節では,中国語と韓国語の PostScript フォントをサポートする Motif アプリケーションを作成する場合の,フォント・レンダラの使用について説明します。 表意文字用のキャッシュ・サイズの調整やローカル言語用のウィンドウのカスタマイズについては,『国際化機能ユーザーズ・ガイド』を参照してください。

7.6.1    マルチバイト PostScript フォント用のフォント・レンダラの使用法

オペレーティング・システムには,中国語と韓国語で利用可能な PostScript フォントを X アプリケーションで使用できるようにするレンダラが備わっています。 システム管理者は,X サーバやフォント・サーバを介して使用する,次の種類のフォントに対応するレンダラをセットアップできます。

IOSWWXFR** サブセットをインストールすると,PostScript アウトライン・フォントのフォント・レンダリングが自動的に使用できるようになります。

7.6.1.1    2 バイト PostScript フォント用のフォント・レンダラのセットアップ

中国語と韓国語の PostScript フォント用のフォント・レンダラは,適切な構成ファイルを編集することにより,X サーバまたはフォント・サーバを介して使用するようにセットアップできます。

アジア系言語用の 2 バイト PostScript フォントのレンダラは,次の情報を含むそれ自体の構成ファイルを持ちます。

この構成ファイルの省略時パス名は /var/X11/renderer/DECpscf_config ですが,このパス名は DECPSCF_CONFIG_PATH 環境変数を設定することにより変更できます。

7.6.1.2    UDC フォント用のフォント・レンダラのセットアップ

UDC フォント・レンダラは UDC データベースに直接アクセスして,フォント・グリフを取得します。 そのため,このレンダラを使用する X アプリケーションは,cgen ユーティリティによって作成された .pcf ファイルを使用する必要はありません。

UDC フォント・レンダラは,X サーバまたはフォント・サーバを介して使用するようにセットアップできます。

7.6.1.3    TrueType フォント用のフォント・レンダラの使用

オペレーティング・システムには,TrueType フォントを使用可能にするフォント・レンダラ (/usr/shlib/X11/libfr_TrueType.so) が含まれています。 現在,オペレーティング・システム製品に含まれている TrueType フォントは,中国語の簡体字のみです。 ただし,サイトで使用するアプリケーションで別言語の他社製 TrueType フォントが必要なときには,フォント・レンダラを構成して,このようなフォントを使用することもできます。 詳細は TrueType(5X) のリファレンス・ページを参照してください。