在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中有点毫无意义。