PoEdit and PHP annotations


PoEdit and PHP annotations

我正在寻找一种让PoEdit理解PHP注释的方法。以下是我希望PoEdit提取并放入目录的代码示例:

class MyController extends Controller {
    /**
     * @Title "Home"
     */
    public function index() {
        ...
    }
}

有趣的部分是@Title注释。它在前控制器中被访问,并被分配到主视图,有效地结束在<title>...</title>标签中。

现在我需要翻译这个字符串,但PoEdit似乎只理解_()表达式,并且将@Title添加到关键字中是不起作用的。这可能是因为PHP中的注释在注释块中。

有什么方法可以强制PoEdit理解注释吗?

简短的回答,你不能。

POEdit使用xgettext扫描文件,因此使用特定语法,忽略注释行。

例如,如果您的关键字是_,则以下示例将被解析为:

_('test');->字符串"测试"

_("test");->字符串"测试"

_('test'->字符串"测试"

_ 'test->无捕获

_('test->无捕获

_(test)->无捕获

_($test)->无捕获

//_('test');->无捕获

/*_('test');*/->无捕获

您可以使用其他参数执行xgettext,但我不确定您是否能够实现目标。


一个简单的解决方案(不是标准的ofc)是添加其他关键字,如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.'>';

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

您可以将其与.*'*'s'@('w+)'s'"('w+)'".*-$1进行匹配,在匹配中将进行注释(Title),$2将为值:(Home)