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


PoEdit don't parse string in PHP comments

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

这意味着在 PHP 注释(//或

#)或文档块 (/* */) 中找不到的任何翻译都将被跳过。

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

以下是我正在尝试执行的操作的示例:

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

我希望 POEDIT 检测"//_('否')"

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

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

卡尔。

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

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

您如何看待此解决方案?

相当古老的线程...
但我认为这表明我做事的方式可能会有所帮助

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

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')
    );
}

gettext的工作方式,xgettext(这是Poedit所说的 - 没有更多的事情)从源代码中提取可翻译的字符串。如果一个字符串没有在源代码中使用,那么它显然永远不会在运行时使用,翻译它也没有意义——翻译不会被使用。注释不是代码的一部分,所以xgettext当然会忽略它们。否则根本就没有任何意义。

Gettext具有gettext_noop()功能,在手册中进行了很好的描述,可以处理像您这样的罕见情况。

你可能想定义一些这样的辅助函数,并将其用作Poedit中的附加关键字,尽管这个StackOverflow问题的答案解释了为什么这样的事情在PHP中有点毫无意义。