PHP中的非确定性gettext行为

时间:2015-10-25 09:11:15

标签: php gettext

我在PHP中使用gettext,我有一个非常奇怪的问题。当我不断重新加载页面时,字符串大部分时间都没有翻译成英语 ,但有时他们是!!!

我的代码是这样的(虽然它是更大代码的一部分):

bindtextdomain ('messages', dirname(__FILE__) . '/lang/nocache'); # https://stackoverflow.com/a/13629035 (nevim jestli je to u me problem, ale pro jistotu
bindtextdomain ('messages', dirname(__FILE__) . '/lang');
textdomain('messages');
bind_textdomain_codeset('messages', 'UTF-8');

$rv = setlocale(LC_MESSAGES, 'en_US.UTF-8');
var_dump($rv); # always returns "en_US.UTF-8"

echo "<br>TEST: " . _("Úvod");
echo "<br>TEST: " . _("Výsledky");
echo "<br>TEST: " . gettext("Úvod");

当我将此代码段剪切为单独的PHP文件时,文本始终被翻译。虽然产生这种非确定性,但我并不怀疑我的代码更大,因为这段代码是紧凑的,不受其他部分的影响。我怀疑这种奇怪的非决定论只出现在某些条件下,不幸的是,当我把它放在一个小的测试文件中时,这些条件就会消失(你必须非常清楚墨菲律法的噩梦: - ))。

我不知道它是否是gettext cache problem,但我没有更改翻译。我尝试了recommended nocache dir trick,我也尝试重新启动Apache(Apache / 2.4.10(Debian)),但它没有帮助。我的PHP版本是5.6.12-0 + deb8u1。

这怎么可能是不确定的?问题出在哪里?

/etc/php5/apache2/php.ini中的

编辑编码:

; PHP's default character set is set to UTF-8.
; http://php.net/default-charset
default_charset = "UTF-8"

; PHP internal character encoding is set to empty.
; If empty, default_charset is used.
; http://php.net/internal-encoding
;internal_encoding =

; PHP input character encoding is set to empty.
; If empty, default_charset is used.
; http://php.net/input-encoding
;input_encoding =

; PHP output character encoding is set to empty.
; If empty, default_charset is used.
; mbstring or iconv output handler is used.
; See also output_buffer.
; http://php.net/output-encoding
;output_encoding =

1 个答案:

答案 0 :(得分:0)

目录中确实存在问题,因为__FILE__的代码位于不同的目录中,我将其包含在内,并没有意识到__FILE__将提供错误的路径。所以我改编了路径:

bindtextdomain('messages', './lang/nocache'); # http://stackoverflow.com/a/13629035 
bindtextdomain('messages', './lang');

但真正奇怪的是,即使有错误的目录,它有时也会有效!!! 这真的很危险。