常量或变量的值只能由PHP解析器计算。用于extract the translatable strings 是用PHP编写的,但只是一个字符串解析器。它不会运行你的代码,因为那样会太慢而且容易出错。
下面是一个例子,说明这可能有多复杂:
interface FooTranslate
{
const TEXT_DOMAIN = \'foo\';
}
interface BarTranslate extends FooTranslate {}
class FooBar implements BarTranslate
{
public function greeting()
{
_e( \'hello!\', self::TEXT_DOMAIN );
}
}
(new FooBar)->greeting();
现在,在不执行PHP的情况下,为文本域找到正确的字符串值。困难的
所有对翻译函数的调用都必须使用一个简单的字符串。
这个developer handbook 非常清楚地告诉我们,不幸的是,以错误消息的形式并使用错误的引号:
不要对gettext函数的文本域部分使用变量名。不要将此作为快捷方式:__( ‘Translate me.’ , $text_domain );
第二点注意:请do not load your translation files on init
. 这是昂贵的:现在,这些文件在每次调用AJAX请求、评论提交和其他可能与插件无关的文件时都会加载。在要求WordPress包含文件之前,请检查当前请求上下文。