每个解 (1 https://stackoverflow.com/questions/2177895/how-do-you-use-gettext-on-server-apache-you-cant-restart, 2 http://www.php.net/manual/en/function.gettext.php#58310, 3 http://blog.ghost3k.net/articles/php/11/gettext-caching-in-php)建议更改domain
摆脱缓存问题,但这会在内存中创建大量过时的缓存。
因此,我深入研究了 gnu-gettext 源代码以获取有关缓存策略的详细信息(bindtextdom.c:78。)
When bindtextdomain(domain, dirname)
被调用时,它会检查是否domain
存在于缓存中;如果是这样,它将检查是否dirname
和缓存里的一样。如果失败,它将强制刷新同一域的缓存,而不是在内存中创建一个新的。
修复方法非常简单,首先创建一个指向locale
你的文件夹.mo
文件存储:
cd locale
ln -s . nocache
然后在前面添加一行bindtextdomain()
bindtextdomain('domain', './locale/nocache');
bindtextdomain('domain', './locale');
现在每次都强制刷新缓存。
Updates:
这个 hack 在某些情况下可能不起作用(无法弄清楚确切的条件。)这个解决方案是NOT你应该在生产环境中使用它,但仅适用于那些需要在保持 httpd 运行的同时修复某些问题的人!
只要有可能,请从一开始就避免使用 gettext,这确实是古老的东西,应该永远弃用。