1

Stackoverflow ユーザーの Casimir et Hippolyte は、 [[ 何か ]]のような文字列を$this->_()関数で返されるローカライズされた文字列に置き換える素晴らしい関数をくれました。

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

ブラケットを置き換えないことを除いて機能します。したがって、I18n ファイルに"Yes|Ja"を指定し、ビュー ファイルに[[ Yes ]]と記述した場合、[[ Ja ]]が表示されます。

グーグルで数時間試してみましたが、残念ながら何もありませんでした。何か案は?

4

2 に答える 2

1

申し訳ありませんが、パターンを次のように置き換えることができます。

$that = $this;
$view = preg_replace_callback(
        '~\[\[((?:[^]]+|](?!]))*+)]]~', function ($m) use ($that) {
        return $that->__($m[1]); }, $view);
于 2013-06-22T06:39:13.477 に答える
1

これにより、2 つの角括弧がキャプチャされます \K\[\[(?>[^]]++|](?!]))]]*

入力テキスト

like [[ yes|ja ]] with 

マッチ

[0] => [[ yes|ja ]]
[1] => yes|ja 

私は Python プログラマーではありませんが、スクリプトを次のように変更したいと思うでしょう。

$that = $this;
$view = preg_replace_callback('~\K\[\[(?>[^]]++|](?!]))]]*~', function ($m) use ($that) {
   return $that->__($m[1]); }, $view);
于 2013-06-22T01:20:30.910 に答える