在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();
}
您对此解决方案有何看法?
答案 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 works,xgettext
(Poedit称之为 - 其中没有更多内容)从源代码中提取可翻译的字符串。如果在源代码中没有使用字符串,那么它显然永远不会在运行时使用,并且没有必要翻译它 - 不会使用转换。评论不是代码的一部分,因此当然 xgettext
会忽略它们。否则就没有任何意义。
Gettext具有gettext_noop()
功能,described well in the manual可以处理像您这样的罕见情况。
你可能想要定义一些这样的辅助函数,并将其用作Poedit中的附加关键字,尽管this StackOverflow question的答案解释了为什么这样的东西在PHP中毫无意义。