2009-09-20 67 views
3

我在poedit中創建了一個語言文件,用於使用PHP gettext函數,現在在頁面上我正在測試它,我找不到它來查找/加載我創建的.po或.mo文件任何人看到我做錯了什麼?如何在PHP中使用gettext加載語言?

$locale = "en_US"; 
putenv("LC_ALL=$locale"); 
setlocale(LC_ALL, $locale); 
bindtextdomain("default", "/includes/locale"); 
textdomain("default"); 

//my .po ad .mo file is located here /includes/locale/en/default.mo 

即使我試圖加載默認的英朗的文件,我已經在文件中改變了一些文本,以確保它是從語言文件中讀取,目前它只是顯示默認的文本,而不是做一個翻譯,我想我可能有錯誤的路徑

+0

查看我的評論。使用/不是\ – cletus 2009-09-20 02:04:02

+0

[PHP-I18N](https://github.com/delight-im/PHP-I18N)可以爲你做所有事情。 – caw 2014-07-04 20:42:26

回答

7

我終於得到它的工作,我在這裏張貼,所以也許它可以幫助別人,它有點混淆它記錄的方式我覺得。

我會用FR(法語)這個演示

$locale = "fr_fr"; 
putenv("LC_ALL=$locale"); 
setlocale(LC_ALL, $locale); 
bindtextdomain("default", "/includes/locale"); 
textdomain("default"); 

在上面的bindtextdomain功能,第一個參數是對的.po語言文件減去擴展名。第二個參數是文件夾的路徑,這是哪裏有一點棘手/無證...在這裏設置的文件夾中,你必須爲每種語言創建一個文件夾,它是2位國家代碼,然後在這個國家代碼中文件夾我不得不添加這個文件夾名爲LC_MESSAGESLC_MESSAGES裏面是您的default.po文件去。

這是我能得到它的工作,那種令人迷惑,因爲路徑lang文件夾沒有提及的加粗部分在這裏任何事情的唯一途徑:

langfolder/fr_FR目錄/ LC_MESSAGES/default.po

它仍然是很奇怪的,雖然,default.po對我的作品,但如果我把它改到別的上面,然後將代碼的東西改變的.po的文件名和文件的.mo匹配就不會較長時間的工作,只適用於default這個名字或我,我開始思考也許gettext做幕後緩存

+2

有一些gettext緩存,所以如果你改變一個.mo文件,你經常需要重新啓動Apache。 – Lane 2012-01-17 15:54:44

+0

這對我不起作用,我需要將'.utf8'添加到'$ locale'並且它工作。 – jcubic 2017-08-02 09:21:09

2

我懷疑這是你的路徑。

「/ includes/locale」是否是主機上正確的目錄?或者是相對於某些東西?注意:您需要完整的路徑名,而不是相對於您的主目錄或安裝目錄。因此這可能是這樣的:

  • C:/ XAMPP/htdocs中/包括/區域
  • 在/ var/WWW /包括/區域
  • /家/用戶名/包括/區域

找到它的完整目錄是什麼?

+0

是的,我剛剛試過C:\ webserver \ htdocs \ includes \ locale是實際的路徑,我在瀏覽器中檢查並加載,但它無法幫助gettext,這很奇怪我有一個小演示,沒有完整路徑的罰款,但它有一堆奇怪的目錄名稱,也許他們是必需的,但無法找到很多關於它的信息,雖然 – JasonDavis 2009-09-20 01:49:58

+0

使用正斜槓而不是反斜槓。即使Windows是\,把它放在像我所做的/ – cletus 2009-09-20 02:03:28

+0

什麼讓我困惑的是bindtextdomain和textdomain函數,一個域,我想到site.com,但在這裏我認爲它意味着不同的東西 – JasonDavis 2009-09-20 02:07:54