PoEdit and PHP annotations

6

我希望找到一种方法让PoEdit理解PHP注释。以下是我想让PoEdit捕捉并放入目录中的代码示例:

class MyController extends Controller {

    /**
     * @Title "Home"
     */
    public function index() {
        ...
    }

}

有趣的部分是@Title注解。它在前端控制器中被访问并分配给主视图,最终有效地出现在<title>...</title>标签内。
现在我需要翻译这个字符串,但PoEdit似乎只能理解_()表达式,将@Title添加到关键字中不起作用。这可能是因为PHP中的注释块中包含注解。
有没有办法强制PoEdit理解注解?

4
我不喜欢在文档中使用注释来实际执行操作。注释应该用于人类可读的文本以理解代码,并可能帮助IDE选择变量类型。它不应在应用程序中起任何功能作用。 - Madara's Ghost
这是在PHP中进行注释的唯一方法,实际上它得到了语言反射子系统的认可。请参见各种反射类上的getDocComment()方法。此外,它们确实对人类可读 - 与上面的示例相比,另一种选择可能是在操作代码中使用PageView :: getInstance()-> setTitle(“Home”)。 - Michał Niedźwiedzki
我同意@Truth的观点,使用注释来完成任务就像将变量保存为空文件名一样,虽然可以这样做,但感觉很奇怪。此外,仅仅为了读取值而将文件作为文本访问似乎是一种浪费,因为我们可以使用普通变量,例如公共类属性,设置所需的任何值。 - Mahn
1
@Mahn,这可能对你来说有些尴尬,因为你可能从未使用过注释。在更强大的语言中,注释并不罕见,它们有助于隐藏与其操作上下文松散相关的大块逻辑。要了解更多,请查找“面向方面编程”一词。我的代码中还有更多的注释,我敢说它们将控制器代码减少了大约一半。此外,我不进行文本解析- PHP会在运行时自动完成,因此我只能访问引擎已经解析的内容。 - Michał Niedźwiedzki
2个回答

3
简短回答,你无法做到。
POEdit使用xgettext扫描您的文件,因此使用特定语法,忽略已注释的行。
例如,如果您的关键字是_,则以下示例将被解析为: _('test'); -> 字符串'test' _("test"); -> 字符串'test' _('test' -> 字符串'test' _ 'test -> 不会捕获 _('test -> 不会捕获 _(test) -> 不会捕获 _($test) -> 不会捕获 //_('test'); -> 不会捕获 /*_('test');*/ -> 不会捕获
您可以使用其他参数执行xgettext,但我不确定您是否能够实现您的目标。

一种简单的解决方法(当然不是标准的)是添加其他关键字,如placeholder,并创建一个PHP函数,例如:

function placeholder($string){}

并使用它,以便POEdit可以解析它。
class MyController extends Controller {

    /**
     * @Title "Home"
     */
    public function index() {
      placeholder('Home');  
      ...
    }

}

在您的前端解析器中,只需使用简单的_($value),即可将标题翻译为所需语言。
不知道您的代码如何,但假设它与此类似。
假设$tag = 'title',$value = 'Home'。
echo '<'.$tag.'>'._($value).'</'.$tag.'>';

0

如果你真的想以这种方式做,那么你可以从php文件中提取所需的字符串到外部文件中,同时用_(string)替换注释部分中的每个匹配,并在该文件上运行Poedit。

您可以使用.*\*\s\@(\w+)\s\"(\w+)\".*进行匹配 - 匹配中的$1将是注释(标题),$2将是值:(主页)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接