Php 为Drupal和Wordpress i18n函数(uu()和t())编写适配器是否与gettext/.pot生成不兼容?

Php 为Drupal和Wordpress i18n函数(uu()和t())编写适配器是否与gettext/.pot生成不兼容?,php,wordpress,drupal,adapter,gettext,Php,Wordpress,Drupal,Adapter,Gettext,我正在编写一个wordpress插件,并计划它的drupal实现。我正在将wordpress函数包装到适配器中。因此,我为编写了一个适配器 class Ai1ec_Wordpress_Template_Adapter implements Ai1ec_Template_Adapter { ... public function translate( $text ) { return __( $text, AI1EC_PLUGIN_NAME ); }

我正在编写一个wordpress插件,并计划它的drupal实现。我正在将wordpress函数包装到适配器中。因此,我为
编写了一个适配器

class Ai1ec_Wordpress_Template_Adapter implements Ai1ec_Template_Adapter {

    ...

    public function translate( $text ) {
        return __( $text, AI1EC_PLUGIN_NAME );
    }
我不是gettext的专家,一个collegue写信给我:

当xgettext解析代码以生成.pot时,将失败 文件WP i18n函数,如_18;()要求使用字符串文字 作为第一个参数传递,而不是变量。和IIRC一样 Drupal的t()函数为true

我已经阅读了法典条目


找不到与此相关的确切信息。soemone能解释一下为什么这不起作用,以及我如何写一些与Wordpress和Drupal兼容的东西吗?

Wordpress和Drupal版本都应该使用变量中的字符串。 Drupal版本的措辞有些混乱。Drupal文档的意思是,如果原始文本的来源是用户生成的,那么您应该小心

$foo = 'bar';
($foo == 'bar') == true;

一般来说,您的同事是正确的,如果您将变量传递给转换函数,除非将相同的字符串作为文本传递给其他地方,否则它们将不会被转换。这是因为生成翻译模板不会运行代码,而是在上面搜索特定的函数名。翻译方法有两个目的,一是翻译参数,二是向翻译模板生成程序标识翻译模板文件中应包含哪些字符串

您需要告诉翻译模板生成代码(通常是xgettext)程序,函数的参数是可翻译字符串。对于xgettext,这可以通过-k参数完成。WordPress可能已经有了自己的xgettext包装器,您可以使用它


您显式链接的drupal文档说,除非您确定文本在其他地方作为文本传递,否则不应将变量传递给t()。

这或多或少是我想的。如果您签出,您将看到字符串作为参数传递。