Previous: , Up: gettext   [Contents][Index]


11.2.7 *gettext関数の最適化

この点を議論するには、GNU gettextの実装の優位性について話す必要があります。インターナショナライズされたプログラムは、翻訳する必要のある文字列がループ内にあるような場合に性能が劣化すると思う読者がいるかもしれません。たしかにループを実行するごとに文字列が評価されることによる劣化は無視できません。ループの実行中に文字列が変化しない場合に毎回文字列を翻訳する場合は、時間の無駄になります。以下の例で考えてみましょう:

{
  while (…)
    {
      puts (gettext ("Hello world"));
    }
}

選択したlocaleが実行中に変更されないような場合、翻訳結果の文字列は常に同じです。以下のようなやり方も1つの方法です:

{
  str = gettext ("Hello world");
  while (…)
    {
      puts (str);
    }
}

しかしこの解決策は、すべての状況で使える訳ではありません(例: 実行中にlocaleが変更される場合)。また、コードも読みにくくなってしまいます。

この理由により、GNU gettextは以前の結果をキャッシュしています。同じ翻訳が2度要求された場合、要求の間に新たなメッセージカタログがロードされていなければ、2度目の呼び出しではgettextは結果をキャッシュから取得します。