我在PHP支持的网站(PHP / 5.3在Windows上作为Apache模块运行)中安装了一个gettext。问题是某些任意字符串无法翻译。一些文本(少于1%,始终相同)保留在原始语言中。疯狂的是细节:
周围的字符串确实被翻译了:
Line 95: <th><?php echo _('Address'); ?></th> <-- Translated -->
Line 96: <th><?php echo _('Number'); ?></th> <-- Not translated!!! -->
Line 97: <th><?php echo _('City'); ?></th> <-- Translated -->
任何想法或假设?
答案 0 :(得分:2)
gettext库依赖于环境变量中传输的区域设置信息。这在Windows上的Apache mod_php SAPI(又名“PHP as Apache模块”)上非常不可靠,因为单个线程通常由不同的脚本共享。
在我的情况下,我正在运行http://parent.example.com
,它将内部HTTP发布请求(带有Curl)发送到http://child.example.com
,然后编写并打印结果。碰巧两个站点都托管在同一个站点上,因此两个脚本共享环境,我得到了这个序列:
我能够使用Process Monitor实用程序对此进行诊断。我在执行页面加载时捕获数据,然后通过“路径以.mo
结束”进行过滤。这表明Apache除了正确的目录之外还加载了一个意外的目录。
快速&amp;肮脏的解决方法我在bindtextdomain()
之后再次呼叫textdomain()
和curl_exec()
。 (从长远来看,我将不得不迁移到FastCGI,使用纯PHP的gettext库或说服客户端切换到Linux,无论更容易。)