2017-02-18 2 views
0

私たちはサイトを3言語に翻訳することに決めました。私は今日、Googleとstackoverflowを検索し、すべての異なるソリューションを試して、より良い部分を費やしたが、私はそれを動作させることはできません。Windows 7のホームとPHP 7.0.8でgettextによる国際化が失敗する

Windows 7 Home Edition(私の開発マシン)では実行できないと恐れています。

// C:\Apache24\htdocs\locale\en_GB\LC_MESSAGES\messages.mo 
// C:\Apache24\htdocs\locale\en_GB\LC_MESSAGES\messages.po 
msgid "" 
msgstr "" 
"Project-Id-Version: iArbete 1.0.0\n" 
"Report-Msgid-Bugs-To: ******** \n" 
"Last-Translator: ********\n" 
"Language: en_GB\n" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
"Content-Transfer-Encoding: 8bit\n" 

msgid "iArbete" 
msgstr "workIng" 


// C:\Apache24\htdocs\index.php 
if(isset($_GET["locale"])) 
{ 
    $locale = $_GET["locale"]; 
} 
else 
{ 
    $locale = 'en_GB'; 
} 

putenv("LC_ALL=$locale"); 
setlocale(LC_ALL, $locale); 
echo getenv("LC_ALL"); 

$domain = 'messages'; 
bindtextdomain($domain, './locale'); 
textdomain($domain); 
bind_textdomain_codeset($domain, 'UTF-8'); 

echo _("iArbete"); 

echo _("iArbete"); "workIng"に変換する必要がありますが、そうではありません。それとも私はコンセプトを得ていないのですか?

---詳細----------------------------------------- ---------------

私はmoファイルをいくつか変更して再コンパイルしました。これは今見ています。

// C:\Apache24\htdocs\locale\en_GB\LC_MESSAGES\messages.mo 
// C:\Apache24\htdocs\locale\en_GB\LC_MESSAGES\messages.po 
msgid "" 
msgstr "" 
"Project-Id-Version: iArbete 1.0.0\n" 
"Report-Msgid-Bugs-To: ******** \n" 
"Last-Translator: ********\n" 
"Language: en_GB\n" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
"Content-Transfer-Encoding: 8bit\n" 

msgid "workIng" 
msgstr "iArbete" 

msgid "Menu" 
msgstr "Meny" 


// C:\Apache24\htdocs\index.php 
if(isset($_GET["locale"])) 
{ 
    $locale = $_GET["locale"]; 
} 
else 
{ 
    $locale = 'sv_SE'; 
    $locale = 'en_GB'; 
// $locale = 'ar_AE'; 
} 

putenv("LC_ALL=$locale"); 
setlocale(LC_ALL, $locale); 
// echo getenv("LC_ALL"); 

$domain = 'messages'; 
bindtextdomain($domain, './locale'); 
textdomain($domain); 
bind_textdomain_codeset($domain, 'UTF-8'); 

echo _("workIng"); 
echo _("Menu"); 

​​が "iArbete" msgid "Menu"に変換されますが何が起こっているか "Meny"

に翻訳されていませんか?それは最初の言葉だけが翻訳されるようにとても奇妙に感じます。だから私はpoの単語を再配置し、再コンパイルしましたが、まだ "workIng"は翻訳された唯一の単語ですか?

Googleドライブhereにファイルをアップロードしましたが、誰かが見たいと思っています。

+1

あなたの質問は何ですか? – Juned

+0

なぜ機能しないのですか? – Cirshiss

+0

'bindtextdomain'の直前に' var_dump(__ DIR __) 'を実行すると、' locale'サブディレクトリを含むディレクトリが表示されますか? 'messages.mo'ファイルへの完全なパスは何ですか? – lxg

答えて

0

あなたはmsgfmtを使用してMOファイルにあなたのPOファイルを変換する必要があります:「.moの」ファイルからそれを を区別するために、「の.po」ファイルで

手紙POは、ポータブルオブジェクトを意味し、 MOはマシンオブジェクトを表します。 は、[...]

POファイルは、特定のターゲット言語での 翻訳を与えられたパッケージの各元、翻訳可能な文字列を読み、人間によって編集され、そして仲間 されることを意図しています。 [...]

MOファイルはプログラムによって読み込まれることを意味し、性質上バイナリです。 [...]

POファイルが完全で信頼したら、「msgfmt」プログラムは、によって翻訳の 収量効率的な検索をしてもよい機械指向の形式にPOファイルを回転させるために使用される 、あります(MO Filesを参照)必要に応じて、 パッケージのプログラムを実行してください。 'msgfmt'プログラムのすべての実行モードの詳細については、msgfmt Invocationを参照してください。

- GNUマニュアルのgettext、sections 1.4 and 1.5

+0

私はこれをしました。それは問題ではありません。コンパイルされて以来、私は何を表示することができないので、私は自分のメッセージのソースを投稿しました。 – Cirshiss

+0

私はそれがキャッシュを持っているかもしれないと思っています。しかし、私が変更を加えるたびにキャッシュを整理するので、私はもう分かりません。おそらく他のファイルかもしれません。しかし、私がpoファイル内の何かを変更するときも、私はmoファイルを削除して再構成します。 – Cirshiss

関連する問題