Previous: src/Makefile, Up: Adjusting Files [Contents][Index]
GNU
gettext
により提供される、パッケージのインターナショナリゼーションはオプションであり、2つの状況でオフに切り替えることが考えられます:
intl/
が含まれておらず、libintl.hヘッダー(および、それに関連付けられたlibintlライブラリー)がまだシステムにインストールされていない場合は、コンパイルエラーよりもインターナショナリゼーションのサポートなしでパッケージをビルドする方が望ましいでしょう。
Cプリプロセッサーのマクロは、これら2つのケースを検知するのに使用できます。通常、libintl.h
が見つかって、明示的に利用不可されていなければ、autoconfが設定ファイルを生成するときに、ENABLE_NLS
マクロが1に定義されます。しかし上記以外の状況では、このマクロは定義されず、それゆえCでは0に評価されます。
gettext.hは、ENABLE_NLS
マクロにもとづいて<libintl.h>を使用する、便利なヘッダーファイルです。ENABLE_NLS
がセットされていると、<libintl.h>がインクルードされ、セットされていない場合はlibintl.h関数のために代用のno-op(訳注:
no-op = no operation =
何もしない)が定義されます。わたしたちは直接<libintl.h>を使うのではなく、"gettext.h"
を使うことを推奨します。そうすれば古いシステムへの可搬性が保証され、もし望むならインストーラーでインターナショナリゼーションをオフにできます。
#include "gettext.h"
Cのソースコードは下記の行を、上記のように書き換えます(訳注: 下が修正前で、上が修正後です。通常とは逆の順序で説明しているので間違えないでください)。
#include <libintl.h>
gettext.h
の場所は通常、補助のインクルードファイルを含んだディレクトリーです。多くのGNUパッケージには、ヘルパー関数を含むlib/ディレクトリーがあるので、gettext.hはそこに配置すればよいでしょう。他のパッケージでは、srcディレクトリーに配置することができます。
gettext.h
をパブリックな場所にインストールしないでください。このファイルを必要とするすべてのパッケージは、パッケージ自身にそのファイルのコピーが含まれているからです。