子主题是否需要文本域


8

对不起,菜鸟问题。

子主题是否需要文本域?我正在构建一个没有声明文本域的简单子主题。因此,当我使用要翻译的字符串时,应该使用父主题的文本域(是的,父主题已加载了文本域,并且还具有.mo / .po文件)。

例如,在我的子主题模板中添加此行

<?php __('Some String', 'parent-text-domain');> 

上面的字符串会被翻译吗?

提前致谢

Answers:


7

TL; DR:如果您使用父主题中的字符串,则可以在父主题中使用它们,例如,无需为子主题设置文本域。

但是,如果您使用父主题中未使用的字符串以使其可翻译,则需要另一个带有相关翻译(.mo)文件的文本域。


翻译工作流程

当WordPress在翻译功能中遇到字符串时:

  1. 如果翻译所需的文本域已经被加载(通过支票load_plugin_textdomainload_theme_textdomainload_textdomain),如果这样去点3。
  2. 检查翻译文件夹(默认情况下wp-content/languages)是否包含匹配的textdomain文件。匹配的textdomain文件在"{$domain}-{$locale}.mo"哪里$domain是要转换的字符串的文本域,并且$locale是网站的当前语言环境。如果找不到该文件,则返回原始字符串,否则将加载该文件并将WP转发到下一个点。
  3. 加载textdomain时,WP会检查该文件中是否包含所需的字符串,如果未返回原始字符串,则WP转发到下一点。
  4. 如果找到的翻译后的字符串需要某种单数/复数分辨率(例如,使用时_n()),则可以完成这些操作。否则,WP将前进到下一点。
  5. 筛选器挂钩应用于已转换的字符串(请参阅https://developer.wordpress.org/?s=gettext&post_type%5B%5D=wp-parser-hook),最后返回结果。

所以?

当您在子主题的翻译功能中使用父主题文本域时(假设父主题附带并加载了textdomain文件,或者在translations文件夹中有翻译文件),WordPress将到达上面列表中的第3该字符串在文件中可用(因为在父主题中使用了该字符串),它将被翻译,否则就不翻译。

这意味着父主题中的自定义字符串需要自己的翻译文件。

从理论上讲,可以在另一个翻译文件中使用父文本域,因为WordPress能够加载相同文本域的次数更多,“合并”它们,但这存在问题,因为"{$domain}-{$locale}.mo"翻译文件夹中的格式可能只有一个文件(请参阅上面列表中的第2点。

因此,总而言之,使子主题可翻译的唯一可行方法(如果它包含父主题中未使用的字符串)是使用自己的文本域和自己的翻译文件。


很好的答案!还有一个问题-假设父主题具有此字符串“ background-color”,并且在子代中也存在此字符串。因此,在这种情况下,我可以安全地使用父主题的文本域吗?__('background-color','parent-text-domain')?
Ayanize

是的@Ayanize如果父主题具有__('background-color', 'parent-text-domain'),则可以在子主题中使用相同的主题,而无需执行任何其他操作即可将其翻译。
gmazzap

0

如果您的子主题包含与父主题不同的字符串。

现在,在子主题中使用其他文本域的正确方法是该load_child_theme_textdomain()功能。您可以像使用其他load _..._ textdomain函数一样使用它。

谨防!

与插件语言文件不同,像my_child_theme-de_DE.mo这样的名称将不起作用。尽管插件语言文件允许您在文件名中指定文本域,但这不适用于主题和子主题。主题的语言文件应仅包含语言快捷方式

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.