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 回答