1

因为我是正则表达式的新手,所以我无法管理以下内容:在许多框架中,我们使用 __($key) 之类的函数来本地化字符串。这不是很实用,因为我们要输入很多内容:

<?php echo __('Hello'); ?>. 

我喜欢使用以下语法:[[ Hello ]]。在后台它应该像这样工作:

preg_replace('some cool regex', $this->_($key), $view);

尽管我阅读了许多有关正则表达式的教程,但我无法意识到这一点。

此外,我想为这个函数提供一组变量,以使 i18n 字符串更加灵活。例子:

view.phtml: [[ You have n new messages | n=5 ]]
localization.csv: You have n new messages | You have { n ? 0 : 'no new messages' | 1 : '1 new message' | else : n + ' new messages' }.
result: You have 5 new Messages.

我很好奇你会如何做到这一点。对于任何朝着正确方向显示的提示,我将非常感谢。

4

1 回答 1

2

您可以做的是使用 preg_replace_callback 函数来处理每个匹配项:

$that = $this;
$view = preg_replace_callback('~\[\[\K(?>[^]]++|](?!]))*~', function ($m) use ($that) {
    return $that->__($m); }, $view);

我使用了闭包,但是您可以编写自己的命名函数并将其与preg_replace_callback一起使用

于 2013-06-19T21:31:27.440 回答