TL;DR: 如果使用父主题中的字符串,例如它们在父主题中的使用方式,则不需要为子主题设置文本域。
但如果您使用父主题中未使用的字符串,为了使其可翻译,您将需要另一个具有相关翻译的文本域(.mo
) 文件。
翻译工作流当WordPress在翻译函数中遇到字符串时,它:
检查是否已加载所需文本域的翻译(通过load_plugin_textdomain
或load_theme_textdomain
或load_textdomain
), 如果是,则转到第3点
检查翻译文件夹(默认情况下wp-content/languages
) 包含匹配的textdomain文件。匹配的textdomain文件为"{$domain}-{$locale}.mo"
哪里$domain
是要翻译的字符串的文本域,并且$locale
是网站的当前区域设置。如果找不到该文件,则返回原始字符串,否则将加载该字符串并将WP转发到下一点加载textdomain时,WP会查看该文件中是否包含所需的字符串,如果没有返回原始字符串,则WP会转发到下一点如果找到的翻译字符串需要某种单数/复数分辨率(例如使用_n()
) 这些都完成了。否则,WP将转发到下一点过滤器挂钩应用于转换的字符串(请参见https://developer.wordpress.org/?s=gettext&post_type%5B%5D=wp-parser-hook) 最后返回结果那么呢当您在子主题的翻译功能中使用父主题文本域时(假设父主题发货并加载textdomain文件,或者在翻译文件夹中有翻译文件),WordPress将到达第3点在上面的列表中,因此如果字符串在文件中可用(因为用于父主题),它将被转换,否则不会被转换。这意味着父主题中的自定义字符串需要自己的翻译文件。
理论上,可以在另一个翻译文件中使用父textdomain,因为WordPress能够多次加载同一个文本域;“合并”;但这有问题,因为该格式中可能只存在一个文件"{$domain}-{$locale}.mo"
在翻译文件夹中(请参见上面列表中的第2点)。
因此,总而言之,如果子主题包含父主题中未使用的字符串,使其可翻译的唯一可行方法是使用自己的文本域和翻译文件。