gettext 特定字符串不被翻译

gettext Specific strings don't get translated

我在 PHP 驱动的网站上安装了一个有效的 gettext(PHP/5.3 运行 作为 Windows 上的 Apache 模块)。问题是 某些任意字符串没有被翻译 。少数文本(不到 1% 且始终相同)保留原始语言。疯狂的一点是细节:

有什么想法或假设吗?

gettext 库依赖于在环境变量中传输的语言环境信息。这在 Windows 上的 Apache mod_php SAPI(又名 "PHP as Apache module")上非常不可靠,因为单个线程通常会被不同的脚本共享。

在我的例子中,我是 运行 http://parent.example.com,它向 http://child.example.com 发出内部 HTTP post 请求(使用 Curl),然后组合并打印结果。碰巧这两个站点都托管在同一个站点上,所以两个脚本共享环境,我得到这个序列:

  1. 家长将"parent.mo"设置为目录
  2. 子集"child.mo"为目录
  3. 家长想打印翻译的文本,从错误的目录中拿东西
  4. 这两个站点是相关的,因此它们共享许多字符串,但不是全部(因此获得大多数翻译的红鲱鱼。

我能够使用 Process Monitor 实用程序对此进行诊断。我在加载页面时捕获数据,然后按 "path ends with .mo" 过滤。这表明 Apache 除了加载正确的目录外,还加载了一个意外的目录。

作为快速且肮脏的解决方法,我在 curl_exec() 之后再次调用 bindtextdomain()textdomain()。 (从长远来看,我将不得不迁移到 FastCGI,使用纯 PHP gettext 库或说服客户端切换到 Linux,哪个更容易。)