php regex模板+本地化改进

时间:2013-06-19 21:22:46

标签: php regex

因为我是regex的新手,我无法管理以下内容: 在许多框架中,我们使用__($ 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.

我很好奇你会怎么做。我非常感谢任何提示朝着正确的方向发展。

1 个答案:

答案 0 :(得分:2)

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

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

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