Next: Programmers for other Languages, Previous: Programming Languages, Up: Programming Languages [Contents][Index]
すべてのプログラム言語およびスクリプト言語は、gettext
をサポートするのに適した文字列の表記をもっています。gettext
をサポートするとは、以下のことを意味します:
gettext
の関数呼び出しですが、省略した書式はインターナショナライズされたプログラムの可読性を向上する助けとなります。たとえばCでは_("string")
、GNU
awkでは_"string"
という書式が使用されます。
gettext
呼び出し(または等価な処理)により、このような翻訳可能な文字列を評価するための用意をする必要があります。
ngettext
、dcgettext
、dcngettext
の関数を利用可能にする必要があります。これらの関数が使用されることは少ないかもしれません。しかしngettext
は正しくpluralを処理するために、そしてdcgettext
とdcngettext
はLC_TIME
やLC_MONETARY
などの、LC_MESSAGES
以外のlocale関連の環境変数を処理する等の、特別の目的のために必要です。後者の関数についてはCのヘッダーファイル<locale.h>
の定数LC_*
が通常、環境変数や文字列で参照するため、その言語からも参照できるようにする必要があります。
textdomain
関数を利用可能にするか、TEXTDOMAIN
のような"魔法"の変数を用意するなどして、プログラマーがメッセージドメインを明示できるようにする必要があります。同様に、bindtextdomain
関数のように、プログラマーがメッセージカタログをどこから検索するかを、明示できるようにする機能を提供する必要があります。
setlocale (LC_ALL,
"")
を、言語が実行されたスタートアップ時に呼び出すか、プログラマーが呼び出して処理できるようにするべきです。localeカテゴリーのLC_MESSAGES
とLC_CTYPE
がどちらもセットされていないときは、gettextはno-opとして振る舞うことを思い出してください。
xgettext
は、非常に多くの異なるプログラム言語をサポートするように拡張されています。どうすればサポートされるかについては、GNU
gettext
のメンテナーに連絡してください。文字列の抽出機能が、あなたの言語のパーサーに統合されれば、GNU
xgettext
をあなたの言語の文字列抽出機能のフロントエンドとすることができます。
gettext
を実装している訳ではないにもかかわらず、それらの異なる実装間でプログラムに可搬性をもたせなければならないような場合には、no-i18nエミュレーションを提供する必要があります。これにより、実際に翻訳された文字列がなくても、あなたの実装向けに記述されたプログラムを他の実装で利用することができます。
gettext
のメンテナーに連絡してください。そうすれば彼らがpo-mode.elにあなたの言語にたいするサポートを追加することができます。
実装から考えると、可搬性と著作権の面において異なる効果をもつ、3つのアプローチが利用できます。
gettext
用のintl/ディレクトリーを使って統合する方法があります。これにより、すべてのプラットフォームでインターナショナリゼーションが可能になります。この場合、パッケージは法的にはGNU
General Public Licenseの下に配布されることに注意してください。そしてGNU
projectはフリーソフトウェアの蓄積にたいするあなたの貢献を歓迎するでしょう。
gettext
関数にたいしてリンクする方法があります。たとえば、autoconfがgettext()
をngettext()
をテストしてこの状況を検知します。当面のところ、このテストはGNUシステムでは成功しますが、他のシステムでは成功しません。また、厳密な著作権の制限はありません。
gettext
の機能をエミュレート、もしくは再実装する方法があります。この方法には、完全な可搬性と著作権の制限がないという利点があります。しかしGNU
gettext
の機能(環境変数LANGUAGE
、locale
aliaseのデータベース、自動的な文字コード変換、pluralの処理のような機能)を再実装する必要があるという欠点もあります。