Next: , Previous: , Up: Programming Languages   [Contents][Index]


15.1 言語実装者の視点

すべてのプログラム言語およびスクリプト言語は、gettextをサポートするのに適した文字列の表記をもっています。gettextをサポートするとは、以下のことを意味します:

  1. 翻訳可能な文字列にたいする書式を言語に追加する必要があります。原則としてはgettextの関数呼び出しですが、省略した書式はインターナショナライズされたプログラムの可読性を向上する助けとなります。たとえばCでは_("string")、GNU awkでは_"string"という書式が使用されます。
  2. 実行時のgettext呼び出し(または等価な処理)により、このような翻訳可能な文字列を評価するための用意をする必要があります。
  3. 同様に、その言語でngettextdcgettextdcngettextの関数を利用可能にする必要があります。これらの関数が使用されることは少ないかもしれません。しかしngettextは正しくpluralを処理するために、そしてdcgettextdcngettextLC_TIMELC_MONETARYなどの、LC_MESSAGES以外のlocale関連の環境変数を処理する等の、特別の目的のために必要です。後者の関数についてはCのヘッダーファイル<locale.h>の定数LC_*が通常、環境変数や文字列で参照するため、その言語からも参照できるようにする必要があります。
  4. その言語からtextdomain関数を利用可能にするか、TEXTDOMAINのような"魔法"の変数を用意するなどして、プログラマーがメッセージドメインを明示できるようにする必要があります。同様に、bindtextdomain関数のように、プログラマーがメッセージカタログをどこから検索するかを、明示できるようにする機能を提供する必要があります。
  5. setlocale (LC_ALL, "")を、言語が実行されたスタートアップ時に呼び出すか、プログラマーが呼び出して処理できるようにするべきです。localeカテゴリーのLC_MESSAGESLC_CTYPEがどちらもセットされていないときは、gettextはno-opとして振る舞うことを思い出してください。
  6. プログラマーには、プログラムから翻訳可能な文字列をPOファイルに抽出する方法が必要です。GNU xgettextは、非常に多くの異なるプログラム言語をサポートするように拡張されています。どうすればサポートされるかについては、GNU gettextのメンテナーに連絡してください。文字列の抽出機能が、あなたの言語のパーサーに統合されれば、GNU xgettextをあなたの言語の文字列抽出機能のフロントエンドとすることができます。
  7. 言語のライブラリーに、書式文字列と書式文字列の引数を位置番号や名前で示せるような機能をもたせる必要があります。これはいくつかの言語やメッセージでは、2つ以上の代替の引数にたいして、翻訳者はそれらの代替の引数を異なった順序で出力する必要があるからです。詳細は、c-format Flagを参照してください。
  8. 言語に2つ以上の実装があって、それらのすべてがgettextを実装している訳ではないにもかかわらず、それらの異なる実装間でプログラムに可搬性をもたせなければならないような場合には、no-i18nエミュレーションを提供する必要があります。これにより、実際に翻訳された文字列がなくても、あなたの実装向けに記述されたプログラムを他の実装で利用することができます。
  9. プログラマーが翻訳文字列にマークを付与するタスクを助けるために、EmacsのPOモードが使用される場合があります(Markingを参照してください)。遠慮なくGNU gettextのメンテナーに連絡してください。そうすれば彼らがpo-mode.elにあなたの言語にたいするサポートを追加することができます。

実装から考えると、可搬性と著作権の面において異なる効果をもつ、3つのアプローチが利用できます。