i18n の手順については、様々なメーリングリストや他の場所で蓄積された沢山のちょっとした技があります。 いくつかのあまり明白ではない落とし穴についてここで列記しておきます。
これら列記されたものに加えて、GNOME 翻訳プロジェクト (GNOME Translation Project, GTP) のコーディネータの一人 Christian Rose が書いた文書 [menthos] を注意深く読んだ方がよいでしょう。 この文書には多数の状況の例と簡単に翻訳可能なテキストの書き方 (慣用句を避けるといった明かなものだけではなく、 翻訳のテキストマークアップとはなっていないようなより微妙な問題についても) についてのアドバイスが含まれています。 実際、私がこのチュートリアルで彼の素晴しい働きの重複を避けることができたように、 読者も Christian の文書を読むべきです。
決して空文字列をマークアップしないように。 これによって空文字列を返すのではなく、 相当する言語ファイルのヘッダーを取得してしまう副作用があります。 [訳注: 多分 po ファイル冒頭の msgid "" フィールドのこと。 このフィールドには翻訳ではなく po ファイル自体のメタ情報が含まれている]
_("") というようなコードを書くのを避けるのは比較的簡単ですが、 動的に生成される文字列については注意する必要があります。 空になるかもしれない可能性があるなら、まずチェックして翻訳するべき内容がないなら _() を呼ばないようにします。
国際化されたアプリケーションをテストしようとしているのなら、 翻訳の結果を見るのに make install するのを忘れないようにしなければなりません。 なぜならライブラリ内の i18n サポートは、 メッセージファイルがある場所への明示的なパス (bindtextdomain() の第二引数) を共なって初期化され、 プログラムはそのパスを見に行くからです。 もし指定ロカールディレクトリに何もみつからなかったとしても、 現在のディレクトリを探すようなフォールバックの仕組みはありません。
アプリケーションのAbout(情報)ボックスをつくるときには、 フィールドの内の一つに翻訳者名を渡すことができます。 実行時のロカールの翻訳者を表示するために、 ほとんどの GNOME アプリケーションでは次のようなコードを持っています:
gchar *translator_credits = _("translator_credits"); ... about_box = gnome_about_new(... strcmp (translator_credits, "translator_credits") != 0 ? \ translator_credits : NULL, ... |
それから翻訳者は translator_credits 文字列を彼/彼女達自身の名前に翻訳します。 もし実行時のロカールについて翻訳者がいない (すなわち _() が原文を返す)なら、 About (情報)ボックスコンストラクタには翻訳者クレジットが渡されず、 タブは表示されません。
翻訳者は translator_credits を見て、 正しいコンテキストではどう訳せばよいか知っているので、 これをこの目的のために使うことを推奨します。