CakePHP3全局与插件PO翻译文件优先级及缓存更新问题咨询
CakePHP 3 插件与全局翻译优先级及缓存问题解答
翻译优先级说明
- 插件的翻译会优先于全局翻译,但核心取决于翻译调用时使用的翻译域:
- 在插件代码内部调用翻译函数(如
__('需要翻译的文本'))时,CakePHP 会自动以插件名称作为默认翻译域(比如myplugin),优先加载插件目录下的myplugin.po文件。 - 若同一个翻译文本(msgid)同时存在于插件的
myplugin.po和全局的default.po中:插件内的调用会使用插件的翻译结果,应用代码中的调用则会使用全局default.po的内容。 - 若想在插件内强制使用全局翻译,可在调用时指定默认域:
__('需要翻译的文本', [], 'default')。
- 在插件代码内部调用翻译函数(如
翻译更新不生效的缓存问题
你当前清除的/tmp/cache/myplugin/目录并非翻译缓存的核心存储位置,CakePHP 3 的翻译缓存通常存放在/tmp/cache/persistent/下,文件多以cake_i18n_开头。
建议执行以下命令彻底清除相关缓存:
rm -fr /tmp/cache/persistent/cake_i18n_* rm -fr /tmp/cache/myplugin/
同时,若手动修改 PO 文件后未生效,可尝试删除对应目录下的 MO 文件(系统会自动重新编译 PO 文件生成新的 MO 文件)。
内容的提问来源于stack exchange,提问作者R0bertinski
相关产品推荐
相关产品推荐

