5

私はいつもgettextについて聞いたことがあります-提供された文字列引数に基づいて翻訳を検索し、.potファイルを生成するのはある種のUNIXコマンドであることは知っていますが、誰かが素人の言葉でこれがどのように処理されるかを説明できますか?ウェブフレームワーク?

確立されたフレームワークがどのようにそれを行っているかを見て回るかもしれませんが、実際に物事を掘り下げて独自のソリューションを提供する前に、全体像をもう少し明確にするのに役立つ可能性があるため、素人の説明が役立ちます.

4

1 に答える 1

12

gettextシステムは、同じ文の異なる言語の翻訳を含むソーステキストファイルから作成された一連のバイナリファイルから文字列をエコーし​​ます。

ルックアップキーは「基本」言語の文です。

ソースコードには次のようなものがあります

echo _("Hello, world!");

言語ごとに、キーと翻訳されたバージョンを含む対応するテキストファイルがあります(printf関数で使用できる%sに注意してください)

french
msgid "Hello, world!"
msgstr "Salut, monde!"
msgid "My name is %s"
msgstr "Mon nom est %s"

italian
msgid "Hello, world!"
msgstr "Ciao, mondo!"
msgid "My name is %s"
msgstr "Il mio nome è %s"

これらは、ローカリゼーションを作成するために実行する必要がある主な手順です

  • すべてのテキスト出力はgettext関数(gettext()、ngettext()、_())を使用する必要があります
  • xgettext(* nix)を使用してphpファイルを解析し、ベースの.poテキストファイルを作成します
  • poeditを使用して.poファイルに翻訳テキストを追加します
  • msgfmt(* nix)を使用して、.poファイルからバイナリ.moファイルを作成します
  • .moファイルを次のようなディレクトリ構造に配置します

locale / de_DE / LC_MESSAGES / myPHPApp.mo

locale / en_EN / LC_MESSAGES / myPHPApp.mo

locale / it_IT / LC_MESSAGES / myPHPApp.mo

次に、phpスクリプトで使用する必要のあるロケールを設定する必要があります

PHPマニュアルの例は、その部分について非常に明確です。

<?php
// Set language to German
setlocale(LC_ALL, 'de_DE');

// Specify location of translation tables
bindtextdomain("myPHPApp", "./locale");

// Choose domain
textdomain("myPHPApp");

// Translation is looking for in ./locale/de_DE/LC_MESSAGES/myPHPApp.mo now

// Print a test message
echo gettext("Welcome to My PHP Application");

// Or use the alias _() for gettext()
echo _("Have a nice day");
?>

常にphpマニュアルから良いチュートリアルをここで探してください

于 2009-07-28T10:14:20.970 に答える