Next: srfi.37 - args-fold プログラム引数処理, Previous: srfi.27 - ランダムビットのソース, Up: ライブラリモジュール - SRFI [Contents][Index]
srfi.29 - 地域化このモジュールは SRFI-29 で定義されたメッセージの地域化機構を実装したものです。
実際には、このモジュールは2つのサブモジュール、srfi.29.bundle
および srfi.29.format で構成されています。srfi.29モジュールは
このふたつのモジュールをextendしています。このようにしているのは、
SRFI-29 での format 手続きの定義が Gauche ネイティヴの(すなわち
Common Lisp の) format とでは ~@* 指令の扱い
において互換性がないからです。
そんなわけで、SRFI-29 の format を含む srfi.29.format と
それ以外(「バンドル」API)を含む srfi.29.bundle に分離しました。
プログラムを SRFI-29 と完全に互換性のあるものにしたければ、srfi.29
モジュールを使って下さい。こうすると Gauche ネイティヴの
format が上書きされます。SRFI-29 の「バンドル」API を使いたいだけで、
Gauche の format をそのままにしておきたいなら、srfi.29.bundle
を使って下さい。
地域化機能は text.gettext モジュールによっても提供され
(see text.gettext - 地域化メッセージ)、Gauche でメッセージの地域化をするのなら
text.gettext を使うのが好ましい方法です。srfi.29 モジュールは
主として SRFI-29 の機能を使っているコードをポーティングするためにあります。
バンドル指定子はシンボルを要素とする任意のリストです。しかし 典型的には以下のようなフォームになります。
(package language country details …)
ここで、package はソフトウェアパッケージを指定し、 language および country は言語と国コードを指定、そして、 details はエンコーディングのようなそのほかの情報を指定します。
デフォルトのバンドル指定子の値は以下のようなパラメータで取得可能です。
[SRFI-29]{srfi.29}
current-language および current-country パラメータは
ISO 639-1 の言語コードと ISO 3166-1 の国コードをそれぞれシンボルで
保持しています。current-locale-details はエンコーディングのような
補助的な地域情報のリストを保持しています。
これらのパラメータは、環境変数 LANG が lang_country.encoding
フォーマットの形式で設定されていれば、初期化されます。たとえば、
LANG が ja_JP.eucJP に設定されていれば、それらの
パラメータはそれぞれ ja、jp、(eucjp) に設定されます。
LANG が C であるかあるいは定義されていなければ、
デフォルト値は、それぞれ en、us、() です。
[SRFI-29]{srfi.29} テンプレートキー(シンボル)と特定ロケールのメッセージ(文字列)の連想リストを bundle-specifier をキーとして、バンドルデータベースに入れます。
Gauche は現在のところメモリ上のバンドルデータベースのみサポートしています。
つまり、地域化されてメッセージを探しあてるには、そのアプリケーション内で
declare-bundle! を呼ぶ必要があるということです。
[SRFI-29]{srfi.29}
Gauche は今のところ永続バンドルデータベースをサポートしていないので、
これらの手続きはなにもせず #f を返します
(これはいまのところ srfi-29 の振舞いと適合しています)。
[SRFI-29]{srfi.29} 地域化されたメッセージを検索します。当該メッセージは package-name パッケージの中で、message-template-name シンボルと関連つけられています。
[SRFI-29]{srfi.29}
SRFI-29 は SRFI-28 の format 手続きの仕様(これは ~a、
~s、~% および ~~ 指令をサポートしている)を
引数再配置をサポートするために拡張しています。
~N@* 指令は N-番目のオプション引数から値を引き出す次の
指令の契機となります。参照された値が消費されることはありません。また、
参照された値がその後につづく指令の処理に影響を与えることはありません。
SRFI-28 の仕様は Gauche ネイティヴの format (see 出力) と
互換性がありますが、この SRFI-29 の拡張には互換性がありません。
具体的には、Gauche ネイティヴの format の ~N@* 指定は
引数ポインタを N-番目のオプション引数を指すように変更します。
それゆえ、そのあとに続くすべての引数に影響をあたえます。
この非互換性があるために、この関数は、分離したモジュール
srfi.29.format で定義されています。srfi.29.bundle と
srfi.29.format を拡張する srfi.29 を使うと、format
手続きは SRFI-29 の format でそのモジュール内で上書きされます。
Gauche ネイティヴの format を使いたければ、srfi.29.bundle
だけを使うようにしてください。
Next: srfi.37 - args-fold プログラム引数処理, Previous: srfi.27 - ランダムビットのソース, Up: ライブラリモジュール - SRFI [Contents][Index]