2010-09-10 80 views
4

我正在開發一個PHP和Smarty的web應用程序。我使用gettext來實現國際化,但是我遇到了一個問題:它只能有時,絕對隨機地工作。我用putenv + setlocale + bindtextdomain + textdomain加載一個語言環境(例如'de_DE'),重新加載頁面,並查看「搜索」;重新加載,我看到「Suche」;還有兩次重新加載並獲得「Suche」,但Thirth再次給我「搜索」,然後我看到「搜索」很多次,突然間我可以再次看到「Suche」......隨機。Gettext(i18n)和Smarty運行不穩定

我已經停用了Smarty的緩存,但同樣的問題。我已經配置Smarty爲不同的語言使用不同的目錄,templates_c/en_GB,templates_c/de_DE等等。編譯工作正常。

我使用smarty-gettext進行模板翻譯。

有沒有關於使用gettext和Smarty的已知問題?

編輯添加一些信息:我跑我的測試在Linux機器:

的Apache2 2.2.14

的gettext 0.17

PHP 5.3.2

智者3- SVN $修訂版:3286

+1

運行,我發現,重啓動Apache(全重啓:/etc/init.d/apache2 restart),它恢復正常工作,但當我進入生產環境時,我無法接受這個解決方案......任何想法? – ARemesal 2010-09-10 11:26:28

回答

1

您是否已安裝/啓用Xcache或任何其他操作碼cacher?嘗試禁用它們。

1

我遇到了同樣的問題 - 有時頁面顯示翻譯,有時它不。

但我使用香草PHP(沒有Smarty),並在Mac OS X(不是Linux)上運行。

我的代碼如下所示:

$locale='fr_FR'; //...for example... 
putenv("LC_ALL=$locale"); 
setlocale(LC_ALL,$locale); 
bindtextdomain("messages","./locale"); 
bind_textdomain_codeset("messages","UTF-8"); 
textdomain("messages"); 

目前試圖尋找這個問題下來 - 我會讓你知道,如果我成功了。

0

用於實際使用俄語單詞時,使用語言環境「pt_BR」時出現類似問題。 通過將區域設置設置爲「ru_RU」來解決此問題。 希望這可能有所幫助。

這是我的配置是實際工作:

$directory = './locale'; 
$domain = 'smartybook'; 
$locale ="ru_RU"; 
setlocale(LC_ALL, $locale); 
bindtextdomain($domain, $directory); 
textdomain($domain); 
bind_textdomain_codeset($domain, 'UTF-8'); 

還有一個重要的注意事項: 開始工作只使用msgfmt -c -v -o 的msgfmt -o是不夠的了。 同樣重要的是:發出格式化命令時需要root, 也別忘了重啓apache。