Solaris 2.6 での変更のほとんどは以前の国際化機能の改善です。国際化サポートに関する詳細な情報については、『プログラミングの国際化』を参照してください。
プログラムの国際化に関わるアプリケーション開発者は次のガイドラインに従ってください。
setlocale(3C) を呼び出して LANG
環境変数を設定する
標準のコードセットを使用し、8 ビット境界を守る
strftime(3C) を使用して日付および時刻を出力する
ユーザが照合のために判読できるように strcmp(3) を strcoll(3C) に置き換える
gettext(3C) もしくは catget(3C) を呼び出してロケール固有のメッセージカタログから翻訳された文字列を検索する
Solaris 2.6 環境は拡張 UNIX コード (EUC)、VTF8、PCK、V165 をサポートしています。これにより、1 つのシステムで複数バイトと複数のコードセットを利用できます。
SunOS 4.x は ASCII 以外の文字のシングルバイト表現をサポートしていました。Solaris 2.6 では、複数バイト表現がサポートされています。このサポートは数千文字もあるアジア系言語の文字セットに必要です。
libc に含まれる複数バイトライブラリには次のような機能があります。
複数バイト文字からワイド文字への文字変換
ワイド文字の標準入出力
ワイド文字の分類
ワイド文字のフォーマット化
Solaris 2.6 は複数バイトファイル名をサポートしていますが、ログイン名とマシン名は ASCII 文字に制限するようにしてください。
SunOS 4.x のメッセージカタログのサポートは Solaris 2.6 で強化され、複数バイト文字を使ってメッセージカタログを作成できるようになりました。
メッセージカタログを使うと、アプリケーションはアプリケーションが実行された母国語で実行時のメッセージを表示できます。これらのメッセージカタログは、言語ロケールによって指定される母国語用にはじめに作成しなければなりません。
SunOS リリース 5.6 のロケールデータベース (/usr/lib/locale/locale) は、SunOS 5.x のロケールデータベースとは全く異なります。ただし、ユーザ側からは違いは分かりません。
Solaris 2.6 のほとんどのシステムコマンドはメッセージ化されました。これらコマンドの多くには複数バイト機能があります。つまり、複数バイト文字表現が可能になっています。より多くのコマンドがメッセージ化されたことにより、ローカリゼーションの労力は軽減されます。
installtxt(1) コマンドは msgfmt(1) に変更されました。メッセージを抽出するには新しい xgettext(1) コマンドを使用します。
strftime(3C) を変更すると、日付および時刻フォーマットに影響を与えます。date(1) コマンドの出力フォーマットに依存するシェルプログラムは、新しいフォーマットを処理できるように修正しなければなりません。
chrtbl(8) と catdef(8) は、localedef(1) に置き換えられました。
/usr/xpg2lib/libxpg2.a アーカイブライブラリは利用できません。これらのルーチンは、libc に入りました。
表 17-1 にこれらのインタフェースの新しい位置を示します。
表 17-1 xpg2lib ライブラリルーチンの位置
ルーチン |
Solaris 2.6 での位置 |
---|---|
/usr/lib/libc |
|
/usr/lib/libc |
|
/usr/lib/libc |
|
/usr/lib/libc |
|
/usr/lib/libc |
|
/usr/lib/libc |
|
未サポート |
|
/usr/lib/libc |
|
/usr/lib/libc |
|
/usr/lib/libc |
|
/usr/lib/libc |
|
/usr/lib/libc |
|
/usr/lib/libc |
|
/usr/lib/libc |
これらのルーチンを使用するプログラムは -lxpg2 を C コンパイラに渡す必要はありませんが、libintl.h を含む必要があるものが現在あります。(これらのルーチンについては、表 17-1 を参照してください)。
setlocale(3C) によって戻される文字列におけるロケールカテゴリの順位は、SunOS 4.x と Solaris 2.6 では異なります。この文字列は通常 setlocale(3C) への次の呼び出しによって使用され、順位は問題とされません。アプリケーションはロケールカテゴリの特定の順位に依存しないようにしてください。