如何使用子主题覆盖wp-content/Languages/Themes中的语言文件

时间:2016-09-30 作者:Omid Mohammadi

我想为Twenty15Theme创建一个子主题,它将定制很多东西,包括翻译。当我用我的语言(波斯语)安装WordPress时,它在wp-content/languages/themes

所以当我创建languages 文件夹,并向其中添加自定义语言文件,然后添加load_theme_textdomain( \'twentyfifteen\', get_stylesheet_directory() . \'/languages\' ) 到我的孩子主题functions.php 我的自定义语言文件不会加载,而是wp-content/languages/themes 负载我可以做什么来覆盖这些文件?

2 个回复
SO网友:Henrique Vianna

自WP 4.6起load_theme_textdomain() (因此load_child_theme_textdomain()) 将优先考虑。从WP在线翻译平台(translate.wordpress.org)下载的mo文件。由于一些新代码(here, on line 769) 这些函数将完全忽略您的本地。如果textdomain位于general languages目录中,则为mo文件。

但是,您可以使用更基本的load_textdomain() 函数直接加载。mo文件并覆盖原始域中的字符串,如下所示:

$domain = \'textdomain-to-override\';
$path = get_stylesheet_directory() . \'/languages/\'; // adjust to the location of your .mo file

$locale = apply_filters( \'theme_locale\', get_locale(), $domain );
load_textdomain( $domain, $path . $locale . \'.mo\' );

SO网友:cjbj

以下是source of load_textdomain (WP 4.6中):

如果文本域已存在,则将合并翻译。如果两个集合具有相同的字符串,则将从原始值进行转换。

换言之,为了使您的翻译覆盖二零一五,您必须确保您的mo文件首先加载,因此它们将被视为“原始”。要做到这一点,您可以使用以下事实:functions.php 在父级之前加载。

在父主题中,找到加载textdomain的函数。它可能使用after_setup_theme 钩确保您的子主题使用与父主题相同的textdomain。然后加载textdomainload_child_theme_textdomain 在同一个钩子上,但有一个higher priority.

相关推荐

Gutenberg通过wp.hooks.addFilter修改核心分类面板元素

我已经研究过修改现有的编辑器元素……但几乎没有。但我确实在Github得到了一个很好的回复,指出了这一点:https://github.com/WordPress/gutenberg/tree/master/packages/editor/src/components/post-taxonomies#custom-taxonomy-selector显然,分类小组可以通过wp.hooks.addFilter. 这是一个很好的开始!我已经能够使用该代码片段模拟一些虚拟代码,用Dashicon替换分类法面板。(