2011-06-17 14 views
11

一些gettext鍵不適用於我 - 它們顯示的是鍵而不是翻譯,儘管有一個。我正在用PHP File_Gettext梨庫的.mo文件,它似乎是工作好了,所以我做了下面的腳本來嘗試一下,哪些鍵不做工精細:如何調試php gettext?

$locale = 'en_GB'; 
$domain = 'messages'; 

setlocale(LC_ALL, $locale); 
putenv("LC_ALL=".$locale); 
bindtextdomain($domain, "D:/_gt"); 
bind_textdomain_codeset($domain, 'UTF-8'); 
textdomain($domain); 

$mocreator = new File_Gettext_MO(); 
$mocreator->load('D:/_gt/en_GB/LC_MESSAGES/messages.mo'); 

foreach ($mocreator->strings as $key => $value) { 
    if ($value == gettext($key)) { 
     var_dump("ok"); 
    } else { 
     var_dump($key, $value, gettext($key)); 
    } 
} 

從上面的輸出我看到一些關鍵的工作 - 我看到了很多的ok秒 - 和一些不這樣做,得到如下:

string 'Cancelled' (length=9) 
string 'Storniert' (length=9) 
string 'Cancelled' (length=9) 

因此,有翻譯的文件中,但失敗的gettext使用它們因爲某些原因。

+0

檢查翻譯文件。我認爲gettext比'File_Gettext_MO'更準確。在其中尋找字符串「Cacnelled」,可能是你可以看到的東西。您可能還想將MO文件中的零件添加到問題中。 – hakre 2011-06-17 08:57:11

+0

@hakre,我可以在裏面看到'Cancelled'和'Storniert'。我應該添加哪部分文件? – Fluffy 2011-06-17 09:31:57

+0

這是什麼庫? File_Gettext梨?我無法在任何地方找到File_Gettext_MO。 – Gazzer 2011-08-26 04:42:21

回答

1

現在這是一個相當古老的問題,我必須指出,我不太熟悉gettext的具體問題。但是我有一些數組鍵的問題,如字符串和編碼。

D:/_gt給我的印象是你使用某種Windows,如果我沒有弄錯,所有的Windows版本都默認使用latin-1-「with-special-locale」。我相信這個問題可能是編碼相關的,因爲你指定的文件爲utf8但我無法幫到你沒有.mo文件。但請嘗試切換putenvsetlocale聲明的位置。

或空格缺失?請問正確的密碼是" Cancelled"

但正如有人在評論中所說,這只是猜測沒有10.mo文件。

如果您已經找到自己的答案,請添加它來幫助其他互聯網! :D

+0

這似乎不是一個Windows問題,因爲在服務器上具有相同的行爲相同的腳本。正如你在輸出中看到的那樣,空格是可以的。其實,我沒有找到解決方案 - 我現在只是使用DB + memcached,這似乎工作得很好。 – Fluffy 2011-06-29 07:31:12

+0

此外,我試圖找到一些模式,其中的鍵不工作 - 就像多字節字符出現,所有後來的鍵都被打破。但是,雖然文件中的按鍵是按字母排序的,但那些不起作用的按鍵是隨機的。 – Fluffy 2011-06-29 07:35:18