1

JavaScript ファイルからの翻訳用の文字列エクストラクタを作成しました。開始点として使用した jsgettext プロジェクトを見つけました (を参照)。

正規表現を使用して、__()javascript ファイル内のメソッドへの呼び出しを検索します。単純な呼び出しは正常に検出されますが、次のような引数を持つ呼び出しは検出され__('string', { a: 'b'})ません。

正規表現を変更して、メソッド呼び出しにも引数を一致させようとしましたが、成功しませんでした (私は正規表現の専門家ではありません)。

私の質問は次のとおりです。このような文字列に一致するように次の正規表現を変更する方法は?

// this is catched successfully 
// var string = __("Please enter %number% more characters.");

// this is problematic
var string = __("Please enter %number% more characters.", { '%number%' : 2 });

正規表現:

 $keywords = join('|', array('__'));
 preg_match_all('# (?:' . $keywords . ') \(\\ *" ( (?: (?>[^"\\\\]++) | \\\\\\\\ | (?<!\\\\)\\\\(?!\\\\) | \\\\" )* ) (?<!\\\\)"\\ *\) #ix', $content, $matches, PREG_SET_ORDER);

ありがとうございました

4

1 に答える 1

0

次のように呼び出し全体を一致させる必要はないと思います。

__("Please enter %number% more characters.", { '%number%' : 2 });

一致する必要があるだけです:

__("Please enter %number% more characters.",

残りはデータベース内の翻訳の一部であってはならない単なる引数であるため、そのままにしておきます。

したがって、 81行目と89行目の正規表現を編集して終了する*(?:\)|,) #ixだけ*\) #ixで十分です。

于 2013-04-02T10:51:59.730 に答える