Babel可以为Python和Javascript文件提取gettext消息,这是here。
Babel附带一些内置提取器:python(提取 来自Python源文件的消息),javascript和ignore(其中 没有提取任何东西)。
命令行提取程序记录在here - 但没有使用示例。
同样在上面的same pointer中,有一些提及配置文件用于提取,但没有太多扩展。
当我使用js文件在目录上运行提取器的基本命令时,我只生成了.PO头但没有消息。
$ pybabel extract /path/to/js-dir
# Translations template for PROJECT.
# Copyright (C) 2012 ORGANIZATION
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2012-04-22 19:39+1000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 0.9.6\n"
$
以下是我试图为以下内容提取消息的js文件中的示例段:
else if(data.status == "1"){
var follow_html = gettext('Follow');
object.attr("class", 'button follow');
object.html(follow_html);
var fav = getFavoriteNumber();
fav.removeClass("my-favorite-number");
if(data.count === 0){
data.count = '';
fav.text('');
}else{
var fmts = ngettext('%s follower', '%s followers', data.count);
fav.text(interpolate(fmts, [data.count]));
}
}
如果有人可以提供精确的CLI选项和配置设置来使提取工作,或者指向这样的指针,我将不胜感激。
答案 0 :(得分:6)
使用以下内容创建文件(babel.cfg
):
[javascript:*.js]
encoding = utf-8
然后,做:
pybabel extract -F babel.cfg /path/to/js-dir
这应该足以让你有一些消息字符串。
顺便说一句,您可以通过以下方式查阅extract
命令的帮助:
pybabel extract --help
答案 1 :(得分:2)
我有一个类似的问题,并且可以通过使用babel禁用默认关键字来绕过它。
pybabel extract -k __ -F babel.cfg --no-default-keywords /path/to/js-dir
禁用默认值(-k [keyword])时,必须在命令中至少指定一个关键字。我选择-k __
因为“__”是我正在寻找的模式。
只需使用此命令并将-k之后的“__”替换为babel.cfg文件中的一个。
编辑:这允许您使用自己的关键字而不是gettext()
答案 2 :(得分:0)
您可以在flask global中创建一个对象,并使用gettext
进行翻译g.i18n = {
'Casa' : lazy_gettext('Home'),
'Auto' : lazy_gettext('Car'),
'Persona' : lazy_gettext('Person')
}
然后将其添加为变量
<script>
var i18n = {{ g.i18n | tojson }}
</script>
并在JS中使用它:
var labelTranslate = {
Casa: i18n.Casa,
Persona: i18n.Persona,
Auto: i18n.Auto
};
答案 3 :(得分:0)
您实际上可以直接在Javascript中使用gettext
。
请参阅:jsgettext。它允许您使用标准的* gettext函数,包括使用上下文和/或复数形式的函数。
它可以读取PO / MO文件,也可以导入自定义的JSON文件。
请参阅this file的this project以获取完整示例。