WPML的字符串翻译让您翻译您主题和插件中的文本。

然而,为了让这些译文在网站上出现,必须满足一些条件:

  • 文字必须包含在GetText调用中。
  • 必须有textdomain参数。

WPML不会翻译硬编码在PHP中,并且未被包含于带有textdomain的GetText调用中的文本。

示例

未包含于GetText中的静态文本

<h2>Links</h2>

问题:『Links’这个单词没有包含在GetText调用中,无法翻译。

解决办法:将该文本包含在GetText Echo调用中:

<h2><?php _e('Links','theme-text-domain'); ?></h2>

我们将 『Links’包含在gettext调用 _e() 中(可翻译的echo)。 现在,WPML可以翻译它。

函数中的文本没有包含在GetText中

by <?php echo(the_author('', false)); ?>

问题:短语不可翻译。

解决方案:这个短语包含了一些静态文字和一些动态文本。 全部需要被包含于GetText调用中并使用参数。

<?php printf( __( 'by %s', 'theme-text-domain' ), the_author('', false) ); ?>

译员将获得的文本是’by %s’。 这样好,因为这允许译员更改词序,而更改语序在某些语言中是必须的。

请注意,在本例中,我们使用了__() GetText调用。 这个调用类似于_e(),但它不写入输出(echo 则写入)。 printf调用进行输出。

文本域参数丢失

<?php _e('Roadmap') ?>

问题:gettext调用中没有textdomain参数。

解决方案:添加文本域。

<?php _e('Roadmap','theme-text-domain') ?>

文本域告诉GetText(和WPML)文本属于什么。 这是个没有任何意思的字符串,但对您有意义。 您可以选择您喜欢的的任何字符串,但您应该保持一致。 文本域将把相关的字符串分组。

显然,『theme-text-domain』不是一个好的唯一名称。 举例来说,如果您的主题名称为『star-geeks』,那么它就是比较好的文本域值。