2014-10-18 67 views
0

我嘗試爲多語言PHP網站創建資源文件。 我創建了.po文件,然後轉換爲二進制.mo文件與這個小庫https://github.com/josscrowcroft/php.mo,但他們似乎並沒有工作。但是,如果我用Poedit打開生成的.po文件,然後點擊保存,我發現.mo文件的大小與最初的文件大小相比有所變化,而.po文件的工作原理也是如此。我不知道如何在不使用Poedit工具的情況下直接使用它。如何在php中使用從數據庫翻譯的strigs生成.po文件?

請給我一些建議,如果你有!由於

+0

可能重複的[.po到.mo轉換器在PHP?](http://stackoverflow.com/questions/1181681/po-to-mo-convertor-in-php) – 2014-10-18 14:06:12

+0

問題是不是在.mo文件中轉換.po文件,而是在.po文件的創建中。如果我查看由我和Poedit創建的.po文件,它們在內容上看起來完全相同,但不知何故,大小是有點不同!我希望我能我自己更清楚 – Bogdan 2014-10-18 14:34:03

回答

0

下面的文本是http://php.net/manual/en/book.gettext.php

複製「 一個重要的事情要記住: 不要忘記設置字符集在.po文件 例如:

」內容-Type:text/plain;字符集= UTF-8 \ n」個

然後PHP就可以找到你生成,使用的msgfmt .mo作爲文件,從字符集設置.po文件。

正因爲如此,我浪費了很多時間了代碼調試,每一個變化不大的人來測試建議本手冊及互聯網上:

<?php 

//this: 
setlocale(LC_MESSAGES, 'pt_BR') 
//or this: 
setlocale(LC_MESSAGES, 'pt_BR.utf8') 
//or this: 
setlocale(LC_MESSAGES, '') 

//this: 
putenv("LANG=pt_BR.utf8"); 
//or this: 
putenv("LANGUAGE=pt_BR.utf8"); 

//this: 
bindtextdomain('mydomain', dirname(__FILE__).'/locale'); 
//or this: 
bindtextdomain("*", dirname(__FILE__).'/locale'); 
//or this: 
bindtextdomain('*', dirname(__FILE__).'/locale'); 

//setting or not "bind_textdomain_codeset()": 
bind_textdomain_codeset("mydomain", 'UTF-8'); 
?> 

以及什麼locale目錄名來設置:

./locale/pt_BR.UTF8/LC_MESSAGES /mydomain.mo

./locale/pt_BR/LC_MESSAGES/mydomain.mo

./locale/pt/LC_MESSAGES/mydomain.mo

最後,代碼,其帶來的正確翻譯的字符串(也帶有正確的字符集)是:

<?php 

$directory = dirname(__FILE__).'/locale'; 
$domain = 'mydomain'; 
$locale ="pt_BR.utf8"; 

//putenv("LANG=".$locale); //not needed for my tests, but people say it's useful for windows 

setlocale(LC_MESSAGES, $locale); 
bindtextdomain($domain, $directory); 
textdomain($domain); 
bind_textdomain_codeset($domain, 'UTF-8'); 
?> 

然後使用pt_BR計算出三個目錄的名稱.utf8語言環境。 (我的測試是重新啓動Apache然後嘗試每個目錄)。

我希望能幫助別人,因爲我已經浪費不浪費太多的時間... = P

使用: 的Ubuntu 8.04(代) 的Apache 2.2.8 PHP 5.2.4-2ubuntu5 .0 「

相關問題