国际化
项目背景
Woocommerce 5.4.2(wordpress的插件)
Wordpress 5.7.2
PHP 7.4.19
Mysql 5.6.51
wordpress国际化的文件只针对.mo后缀的文件(机器识别的文件),除此以外,无论怎么修改.po文件或者.pot文件都不影响,但修改后的po文件需要编译输出到mo文件,po格式和pot几乎没啥区别,无需过多关注
修改woocommerce的文本域
- 翻译不了,应该无法匹配对应的mo文件
- 将woocommerce-zh_CN.mo改为woocommerce1-zh_CN.mo后可以翻译这个advanced,其他的由于文本域不匹配,无法翻译
相关文献参考地址
- https://zhuanlan.zhihu.com/p/114810810
Poedit
wordpress专业的翻译工具
地址
文字域
使用文本域来表示属于该插件的所有文本很重要。 文本域是唯一的标识符,可以确保WordPress能够区分所有加载的翻译。 这增加了可移植性,并通过已经存在的WordPress工具更好地发挥作用。 文本域必须与插件的插槽相匹配。 如果您的插件是一个名为my-plugin.php的文件,或者它包含在一个名为my-plugin的文件夹中,则域名应为my-plugin。 如果您的插件托管在wordpress.org上,那么它必须是插件URL(wordpress.org/plugins/)中的一小部分。
文本域名必须使用破折号而不是下划线。
文本域也需要添加到插件头。 即使插件被禁用,WordPress也使用它来国际化你的插件元数据。 文本域应与加载文本域时使用的文本域相同。
标题示例:
/*
* Plugin Name: My Plugin
* Author: Plugin Author
* Text Domain: my-plugin
*/
域路径
使用域路径,以便当插件被禁用时,WordPress知道在哪里找到翻译。 仅当翻译位于单独的语言文件夹中时才有用。 例如,如果.mo文件位于languages文件夹中,则Domain Path将是“/languages”,必须用第一个斜杠写入。 默认为插件的languages文件夹.
标题示例:
/*
* Plugin Name: My Plugin
* Author: Plugin Author
* Text Domain: my-plugin
* Domain Path: /languages
*/
- 综上所述:修改文本域后,只要__()的第二个参数文本域能匹配就没问题!
- 这段代码说明,自己加的翻译包如果是hook是plugins_loaded的话,可能被覆盖,所以应该使用acticated_plugin这个hook点
private function init_hooks() {
register_activation_hook( WC_PLUGIN_FILE,