13

例如,我知道如何通过使用 Poedit 生成 .po 和 .mo 文件来为主题和模板创建翻译。但是由于模板名称是在每个模板文件顶部的 PHP 注释中编写的,因此我无法翻译它。

WordPress 模板标题:

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

模板名称由 Wordpress 以某种方式解析,并用于在创建页面时填充模板选择下拉列表。

所以我的问题是:有没有办法翻译 WordPress 模板名称?WordPress 是否还会查找我可以在模板文件中设置的任何特定变量?还是不可能?

4

2 回答 2

15

我最近偶然发现了这一点。这是我解决这个问题的方法:

首先,将(如果您还没有)添加Text Domain: mytext_domain到您的style.cssmytext_domain您的主题的实际文本域在哪里。

然后在主题中的某处添加对翻译函数的虚拟调用(最好将其添加到模板名称声明下方,这样您就不会想知道为什么要放置它):

/**
 * Template Name: Three columns
 *
 * @package WordPress
 */
__( 'Three columns', 'mytext_domain' );

这样做的原因是因为 WordPress 将您的模板名称传递给translate()函数,但由于翻译插件解析您的代码,他们不知道您的模板名称应该是 .po(或者是 .mo?)文件的一部分。__()修复该问题的虚拟调用。

Text Domain声明添加到 style.css 的原因是因为这是 WordPress 在解析模板名称时查找主题的文本域的地方。

我不能给你确切的来源,因为我真的只是在核心代码周围摸索,直到我弄清楚它是如何工作的以及如何能够翻译我的模板名称。

PP:我不确定 Poedit 是如何工作的——如果你手动添加翻译,你可能不需要虚拟调用——只需在有和没有它的情况下进行测试,然后使用最适合你的 :)

于 2012-11-26T09:00:30.887 回答
6

更好的方法:

  1. Text Domain: theme-slug如果您还没有这样做,请将标题添加到您的 style.css 文件中。

  2. 通过查看 develop.svn 主干来查看官方 WordPress 开发人员包:http: //develop.svn.wordpress.org/trunk/

  3. 在那里,您将找到一个名为 /tools/i18n 的目录。在那个目录中有一个makepot.php文件。您可以将其用于主题,如下所示:

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

这将使用最新的 WordPress 代码为您创建 POT 文件。它从标头、所有 WordPress i18n 函数以及所有内容中获取字符串。这也意味着您不需要像其他答案所暗示的那样创建任何“假”字符串。

确保你也svn update每隔一段时间做一次,因为 i18n 工具和核心主干代码可以每隔一段时间更新一次新事物。

请注意,使用 i18n 工具时,它们需要在中继结帐中。您不能在文件系统中移动它们,因为它们依赖于 WordPress 函数来对文件进行一些解析,因此它们具有从树中备份到 WordPress 核心 /src 目录的相对包含路径。整个主干目录需要完好无损,工具才能正常工作。但是,可以取消配置主干目录,您不需要安装 WordPress,它只需要一些 WordPress 代码来正确解析文件。

于 2013-11-12T10:52:25.537 回答