为什么翻译不是针对主题进行的?

时间:2018-07-20 作者:André Kelling

Background

我用的是Sportpress的主题新秀。

我创建了一个儿童主题。

翻译文件是存在的,尤其是德语在我的情况下。

Wordpress设置为德语。

The Problem

除了搜索结果页面内容或分页等模板提供的主题外,翻译在任何地方都可以正常工作。

受影响的是SRP标题、未找到的页面标题和未找到的页面内容。它们只是停留在默认的英语中。分页也会受到影响。

未找到页面内容中的搜索表单翻译得很好。我猜是因为它是Wordpress的默认模板。

Code

这里是来自父主题的一些受影响的代码行。

搜索标题

<h1 class="page-title entry-title"><?php printf( __( \'Search Results for: %s\', \'rookie\' ), \'<span>\' . get_search_query() . \'</span>\' ); ?></h1>
找不到标题:

<h1 class="page-title"><?php _e( \'Nothing Found\', \'rookie\' ); ?></h1>
找不到文本:

<p><?php _e( \'Sorry, but nothing matched your search terms. Please try again with some different keywords.\', \'rookie\' ); ?></p>
分页:

<?php if ( get_next_posts_link() ) : ?>
            <div class="nav-previous"><?php next_posts_link( __( \'<span class="meta-nav">&larr;</span> Older posts\', \'rookie\' ) ); ?></div>
            <?php endif; ?>

            <?php if ( get_previous_posts_link() ) : ?>
            <div class="nav-next"><?php previous_posts_link( __( \'Newer posts <span class="meta-nav">&rarr;</span>\', \'rookie\' ) ); ?></div>
            <?php endif; ?>

Findings

我检查了一下。德语的mo条目与Locao translate插件一起存在。

我替换了搜索结果标题Search Results for: %s 与类别标题Category: %s, 它在分类页面上进行翻译(因为分类档案标题由Wordpress提供),但也不在SRP上!

这种行为的原因是什么

Workaround

父主题正在通过加载域load_theme_textdomain( \'rookie\', get_template_directory() . \'/languages\' ); 并指向存在所有翻译文件(.pot、de\\u de.po和de\\u de.mo)的正确位置。

我抄了相关的。采购订单和。mo文件转到wp content/languages/themes/directory,现在一切正常。

但这真的是最好的解决方案吗

2 个回复
SO网友:Tim

我下载了免费的新手家长主题,在成功的搜索结果屏幕上显示“搜索结果:%s”的翻译没有问题。

这在WordPress languages文件夹中工作wp-content/languages/themes/rookie-de_DE.mo 以及本地翻译的自定义目录。如果文件命名正确,则会在那里工作,因为父主题使用“load\\u theme\\u textdomain”正确加载“rookie”文本域。

您的文件在WordPress languages目录下的名称是否正确?与主题文件夹中的de\\u de.mo文件不同,系统位置需要前缀,因此文件应命名为rookie-de\\u de.mo

SO网友:mmm

将文件放入wp-content/languages/themes/ 这不是一个好主意,因为在下次更新时,文件将被覆盖。

纠正这种情况的最佳方法是将。具有名称的子主题中的mo文件de_DE.mo.
然后,如果您将文件放入目录wp-content/themes/rookie-child/languages, 输入此代码wp-content/themes/rookie-child/functions.php :

add_action("after_setup_theme", function () {

    load_theme_textdomain( \'rookie\', get_stylesheet_directory() . \'/languages\' );


}, 5);

结束

相关推荐

页面模板中的PHP代码与函数

我创建了许多WordPress网站,并学习了我认为正确的PHP实践,即函数包含在函数中。php文件,几乎所有的函数。php应该包装在一个函数中,页面模板中可以包含直接的php,等等。但我对“为什么”有点动摇。页面模板与函数文件的区别是什么,它们改变了每个模板中的工作方式和不工作方式?我假设这是装货订单,但如果您能提供更高级的指导/指示,我们将不胜感激。编辑-好的,我确实了解它的“最佳实践”方面。功能应该是可重用的,等等。我在寻找更多的技术原因,什么时候/为什么它不工作。