PoEdit不解析PHP注释中的字符串

时间:2013-11-14 00:54:26

标签: php poedit xgettext

在POEDIT中,似乎代码分析器在解析代码之前删除了任何PHP注释。

这意味着将跳过在PHP注释(//或#)或文档块(/ * * /)中找不到的任何翻译。

是否有任何解决方案可以包含它们并使其可检测到?

以下是我正在尝试做的一个例子:

class One{
    public static $enum = array(
        '0' => 'No', // _('No')
        '1' => 'Yes' // _('Yes')
    );
}

我希望POEDIT能够检测到“// _('No')”

之后,我可以像这样翻译“echo _(One :: $ enum [0]);”

感谢您的任何进一步回复:)

卡尔。

- 编辑 - 最后,3年后,我认为我找到了一个非常简单的解决方案。 因为静态变量是公共的,所以我可以在类中填充它:

One::$enum = array(
    '0' => _('No'),
    '1' => _('Yes')
);
class One{
   public static $enum = array();
}

您对此解决方案有何看法?

2 个答案:

答案 0 :(得分:2)

相当陈旧的线程......
但我认为这可能有助于表明我的做事方式

首先,您的建议的主要问题是代码重复

public static $enum = array(
    '0' => 'No', // _('No')
    '1' => 'Yes' // _('Yes')
);

这意味着如果要更改字符串,则必须记住更新字符串两次...
有可能你会在某个时候遗忘或遗漏一个。

这是我处理这类事情的方式

class One 
{
    const ENUM_NO  = 0;
    const ENUM_YES = 1;

    public static function getEnum() (
        return [
            self::ENUM_NO  => _('No'),
            self::ENUM_YES => _('Yes')
        ];
    );
}

好的,这意味着一些额外的线...... 但gettext开箱即用,字符串只能在一个位置进行编辑

同意,最好的事情是PHP允许

class One 
{
    public static $enum = array(
        '0' => _('No'),
        '1' => _('Yes')
    );
}

答案 1 :(得分:1)

The way gettext worksxgettext(Poedit称之为 - 其中没有更多内容)从源代码中提取可翻译的字符串。如果在源代码中没有使用字符串,那么它显然永远不会在运行时使用,并且没有必要翻译它 - 不会使用转换。评论不是代码的一部分,因此当然 xgettext会忽略它们。否则就没有任何意义。

Gettext具有gettext_noop()功能,described well in the manual可以处理像您这样的罕见情况。

你可能想要定义一些这样的辅助函数,并将其用作Poedit中的附加关键字,尽管this StackOverflow question的答案解释了为什么这样的东西在PHP中毫无意义。