1

在 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();
}

您如何看待这个解决方案?

4

2 回答 2

2

Rather old thread...
but I figure it might help to indicate my way of doing things

First of all, the major issue with your suggestion is code duplication

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

This means that you have to remember to update the string twice if you were to change it...
Chances are that you will, at some point, forget or miss one.

This is how I deal with this kind of things

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

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

Ok, so that means quite some extra lines...
But gettext works out of the box and the strings are only to be edited in one single location

Agreed, the best thing would be for PHP to allow

class One 
{
    public static $enum = array(
        '0' => _('No'),
        '1' => _('Yes')
    );
}
于 2016-02-26T09:36:05.243 回答
1

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

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

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

于 2013-11-14T06:40:23.833 回答