1

在我们的 JS 文件中,我们使用以下格式进行 Gettext 翻译:

var str1 = '!t[The text that should be translated]';
var str2 = '!t[Some more text]';

此 JS 文件将使用 PHP 进行解析,解析后的字符串将通过 Zend Framework Zend_Translate 进行翻译。生成的 JS 如下所示:

var str1 = 'The text that should be translated';
var str2 = 'Some more text';

为了提取要翻译的字符串和翻译我们使用 Poedit 的 PHP 文件,它工作得非常好。
有没有办法'!t[...]'使用 Poedit 解析要翻译的字符串?

解决这个问题的是某种基于正则表达式的 Poedit 解析器。有没有这样的解析器?

作为替代方案,我们可以定义一个基于 xgettext 的源代码解析器,使用语言 PHP 作为参数(您必须这样做,因为 xgettext 不知道 .js 文件,它会将它们视为 C 文件)。然后我们在我们的 JS 文件中使用以下格式:

var str1 = '<?=_t("The text that should be translated")?>';
var str2 = '<?=_t("Some more text")?>';

不用说,为了能够用 Poedit 解析字符串而到处使用看起来像 php 的代码真的很不酷。

4

2 回答 2

0

与您的字符串匹配的正则表达式

 $translated = preg_replace('/[\'"]\!t\[(.+)\][\'"]/e', 'translate_function('\\2')', $str);

我不知道 \2 是否应该替换为 \1 或 \3,您的解决方案是 PCRE 正则表达式引擎提供的“e”修饰符。

于 2009-05-28T18:46:43.617 回答
0

Poedit 和 xgettext 现在确实支持 JavaScript(老实说,我不知道 2009 年是否是这种情况,但我认为不是),但它们不支持带有自定义标记的字符串文字。所以你仍然无法从中提取

var str1 = '!t[The text that should be translated]';

但您可以使用辅助函数轻松提取:

var str1 = t('The text that should be translated');

如果您只是t在 Poedit 中添加为关键字。

于 2016-02-14T19:05:48.580 回答