如何翻译WordPress模板名称?

13

我知道如何通过使用Poedit生成.po和.mo文件来为主题和模板创建翻译。但是由于模板名称写在每个模板文件的PHP注释中,所以我认为没有办法进行翻译。

WordPress 模板头部:

/**
 * Template Name: Three columns
 *
 * @package WordPress
 */

当创建页面时,WordPress会以某种方式解析模板名称,并用其填充模板选择下拉菜单。

所以我的问题是:是否有一种方法可以翻译WordPress的模板名称? WordPress是否也寻找我可以在模板文件中设置的任何特定变量?还是完全不可能?

2个回答

15

我最近偶然发现了这个问题,以下是我的解决方式:

首先,在您的style.css中添加(如果您还没有)Text Domain: mytext_domain,其中mytext_domain是您的主题的实际文本域。

然后在主题中的某个位置添加一个虚拟调用翻译函数(最好是在模板名称声明下面添加,这样您就不会想知道为什么要添加它):

/**
 * Template Name: Three columns
 *
 * @package WordPress
 */
__( 'Three columns', 'mytext_domain' );
这样做的原因是因为WordPress将您的模板名称传递给translate()函数,但由于翻译插件解析您的代码,它们不知道您的模板名称应该成为.po(还是.mo?)文件的一部分。对__()的虚拟调用可以解决此问题。
而将Text Domain声明添加到您的style.css中的原因是,这是WordPress在解析模板名称时寻找您主题的文本域的位置。
我无法提供确切的来源,因为我只是查看了核心代码,直到我弄清楚它的工作原理以及如何能够翻译我的模板名称为止。
PS:我不确定Poedit如何工作-如果您手动添加翻译,您可能不需要虚拟调用,只需测试有无即可,并使用最适合您的版本 :)

1
太好了!那就行了。 :) 奇怪的是关于这个几乎没有文档资料。为了澄清给其他人看:您需要在 style.css 中的主题定义注释中添加“Text Domain: mytext_domain”。 - lejahmie
1
是的,基本上完全没有文档记录。我从这个票开始,然后一路浏览核心文件,直到理解它的运作方式 :) - Nikola Ivanov Nikolov

6
更好的方法:
  1. 如果你还没有这样做,将 Text Domain: theme-slug 头文件添加到你的 style.css 文件中。

  2. 通过检出 develop.svn 的 trunk: http://develop.svn.wordpress.org/trunk/,获取官方 WordPress 开发者包的副本。

  3. 在那里,你会找到一个名为 /tools/i18n 的目录。在该目录中有一个名为 makepot.php 的文件。你可以按如下方式为主题使用它:

> php makepot.php wp-theme /path/to/your/theme/directory theme-slug.pot

这将为你创建 POT 文件,使用最新的 WordPress 代码。它从头文件、所有 WordPress i18n 函数等获取字符串。这也意味着你不需要像其他答案建议的那样创建任何“假”字符串。

确保定期进行 svn update,因为 i18n 工具和核心 trunk 代码可能会定期更新以适应新功能。

注意,在使用 i18n 工具时,它们需要在 trunk checkout 中。你不能在文件系统中移动它们,因为它们依赖于 WordPress 函数来对文件进行一些解析,所以它们具有相对包含路径,回到 WordPress 核心 /src 目录。整个 trunk 目录需要完整无缺才能使工具正常工作。但是,trunk 目录可以未配置,你不需要安装运行的 WordPress,只需要一些 WordPress 代码来正确解析文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接