[PHP] gettextで同じ原文をコンテキストごとに訳し分ける

PHPではpgettext(= particular gettext)が標準関数として存在しないため、ユーザー定義関数として独自に定義します。

if (!function_exists('pgettext')) {
  function pgettext($context, $msgid)
  {
    $contextString = "{$context}\004{$msgid}";
    $translation = gettext($contextString);
    return ($translation === $contextString) ? $msgid : $translation;
  }
}
  • 訳し分けが必要な文ではgettextの代わりにpgettextを使用します。
  • $contextはpoファイル内で「msgctxt」として保存されます。
  • 「\004」= EOT(End Of Transmission)
  • gettextでは以前の翻訳結果がキャッシュされるため、新しい翻訳を取得するにはApacheを再起動します。