来自子主题的可翻译字符串未包含在翻译文件中

Translatable strings from child theme not included in translation files

所以我认为我有翻译集的所有配置,但我的可翻译字符串没有加载到 .po 或 .pot。

在functions.php中:

function opportune_child_setup() {
    load_child_theme_textdomain( 'opportune', get_stylesheet_directory() . '/languages' );
}
add_action( 'after_setup_theme', 'opportune_child_setup' );

在style.css中:

/*
[...]
Text Domain: opportune
*/

可翻译字符串(示例):

<label for="custom_field"><?php _e( "Company Tax ID", 'opportune' ) ?></label>

翻译文件目录:

themes/opportune-child/languages/opportune.pot
themes/opportune-child/languages/pt_PT.mo
themes/opportune-child/languages/pt_PT.po

.po 和 .mo 文件是基于 opportune.pot 在父主题中使用 Poedit 创建的(位于等效目录中:)

themes/opportune/languages/opportune.pot

我什至在我的 wp-config.php 中进行了硬编码(尽管已经在 WP Admin 中设置):

define('WP_LANG', 'pt_PT');

我查看字符串是否已加载到 .po 或 .pot 的方法是:我转到包含可翻译字符串的页面,进行硬刷新(删除缓存),下载 .po 和 .pot,然后搜索字符串。 None 的字符串已加载。

我已经使用了Loco Translate插件,我认为配置正确,但仍然没有结果。

我错过了什么?非常感谢!

首先,child 主题不应使用与 parent 主题相同的文本域。

如果您只使用来自 parent 主题的字符串,那么只需翻译 parent。但是,如果您要将新字符串添加到自己的 PHP 文件中,请使用单独的文本域。

因此,如果 "Company Tax ID" 是您添加的字符串并且它不在 parent 中,请确保它位于与 child 主题文件夹匹配的文本域中,即 "opportune-child".


其次,字符串不会像您所说的那样自动 "loaded into po files"。您可以通过从 PHP 文件中提取字符串来创建 .pot 文件。然后你基于你的 .po 文件。阅读 WordPress internationalization 以了解此过程。

不要创建文件 "based on opportune.pot",因为 parent 主题是一个单独的实体。您只需要提取和加载您为 child 定义的字符串。让 parent 自己照顾自己。


这里有翻译 child 主题的指南: https://localise.biz/wordpress/plugin/child-themes

完全披露:我是作者。