我正在寻找一种让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)