2009-07-28 4 views
5

私はいつもgettextについて聞いたことがあります - 文字列引数に基づいて翻訳を検索するためのunixコマンドなのですが、それは.potファイルを生成しますが、誰かが私に説明してくれますか? Webフレームワークでは?gettextを使ってPHPでi18nのサポートを追加しますか?

確立されたフレームワークがどのようにそれを行っているかを見て回るかもしれませんが、自分の解決策を提供するために実際に掘り下げる前に、

答えて

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" 

これら

はあなたのローカライズを作成するために通過する必要が主な手順は次のとおりです

  • すべてのテキスト出力は、あなたのPHPファイルを解析し、ベースに.poテキストファイルを作成するために、gettextの機能(gettextの()、ngettext()、_())
  • 使用にxgettext(* NIX)を使用する必要があります
  • 使用poedit
  • の.poファイルからバイナリな.moファイルを作成するために、
  • 使用msgfmt(* NIX).poファイルに翻訳テキストを追加するには、/

ロケールのようなディレクトリ構造に.moのファイルを置きますde_DE/LC_MESSAGES/myPHPApp.mo

ロケール/ en_EN/LC_MESSAGES/myPHPApp.mo

ロケール/語it_IT/LC_MESSAGES/myPHPApp.mo

あなたは、PHPスクリプトは、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"); 
?> 

が良いチュートリアル

+0

しかし、上記のためhereを見て、その部分のために非常に明確ですPHPマニュアルの例では、指定された文字列を翻訳していないようです。この例とは何か関係がありますか? –

関連する問題