基于 Poedit 正则表达式的解析器?

发布于 2024-07-22 11:26:07 字数 837 浏览 6 评论 0 原文

在我们的 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';

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

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

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

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

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

In our JS files we use the following format for Gettext translation:

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

This JS files will be parsed using PHP and the parsed strings get translated via Zend Framework Zend_Translate. The generated JS looks like this:

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

For extracting the strings to be translated and for translating our PHP files we use Poedit, it works very well.
Is there a way to parse the strings to be translated out of '!t[...]' using Poedit?

What would solve the problem is some sort of a Poedit parser that is regex based. Is there any such parser?

As an alternative, we could define a source code parser based on xgettext with the language PHP as parameter(you have to do it because xgettext doesn't know about .js files and it treats them a C files). Then we use the following format in our JS files:

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

Needless to say, it's really uncool to use code that looks like php all over the place just to be able to parse the strings with Poedit.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

苍景流年 2024-07-29 11:26:07

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

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

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

A regexp that matches your strings

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

I don't know if the \2 should be replaced by \1 or \3, you solution is the "e" modifier provided by the PCRE regex engine.

绮烟 2024-07-29 11:26:07

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

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

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

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

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

Poedit and xgettext do support JavaScript now (I honestly don't know if it was the case in 2009, but I think it wasn't), but they don't support string literals with custom markup in them. So you still can't extract from

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

but you can easily extract using a helper function:

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

if you just add t as a keyword in Poedit.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文