2013-06-18 72 views
2

我們在我們的PHP應用程序中使用gettext進行翻譯。它被初始化爲這樣:設置獨立於系統區域設置的gettext語言環境

<?php 
setlocale(LC_MESSAGES, $locale); 
putenv("LANG=$locale"); 
putenv("LANGUAGE=$locale"); 

bindtextdomain($domain, $pathToLocales); 
textdomain($domain); 

這工作正常,但它也轉換來自操作系統的錯誤消息。以DNS解析失敗爲例,而不是Name or service not known,我們在德國站點的錯誤日誌中看到Der Name oder der Dienst ist nicht bekannt。我有gisted a test case。該腳本將翻譯一個字符串,然後引發一個No such file or directory錯誤。我不希望這個錯誤被翻譯。

有什麼方法可以在不更改操作系統中的錯誤消息的情況下配置gettext語言環境?我們不想改變gettext到其他翻譯機制(數組,xliff,你的名字)。我們不關心Windows和mod_php,但該解決方案必須適用於php-fpm 5.4和cli。

回答

-1

你正在使用LC_MESSAGES系統響應的意思是什麼(如果PHP是用libintl編譯的話可用)'我會試圖忽略這個選項,例如setlocale(LC_ALL^LC_MESSAGES, $locale)

http://www.php.net/manual/en/function.setlocale.php

+0

LC_MESSAGES是gettext所必需的。如果您從位掩碼中刪除該內容,則翻譯不起作用。我想要的是一個不同的LC_MESSAGES gettext和PHP過程,如果這是不可能的,我希望有一個解決方案來重置bindtextdomain()&co後的系統LC_MESSAGES。沒有重置gettext到系統默認值。 – Peter