Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Babel CLI提取器提取Javascript gettext消息_Javascript_Python_Localization_Gettext_Python Babel - Fatal编程技术网

使用Babel CLI提取器提取Javascript gettext消息

使用Babel CLI提取器提取Javascript gettext消息,javascript,python,localization,gettext,python-babel,Javascript,Python,Localization,Gettext,Python Babel,据说Babel可以为Python和Javascript文件提取gettext消息 Babel附带了一些内置提取器:python(用于提取 来自Python源文件的消息)、javascript和ignore(其中 不提取任何内容) 命令行提取器有文档记录,但没有使用示例 同样在上面,也提到了一个用于提取的配置文件,但没有进行太多扩展 当我在一个包含js文件的目录上运行提取器的基本命令时,只生成了.PO头,但没有消息 $ pybabel extract /path/to/js-dir # Tr

据说Babel可以为Python和Javascript文件提取gettext消息

Babel附带了一些内置提取器:python(用于提取 来自Python源文件的消息)、javascript和ignore(其中 不提取任何内容)

命令行提取器有文档记录,但没有使用示例

同样在上面,也提到了一个用于提取的配置文件,但没有进行太多扩展

当我在一个包含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"

$ 
如果有人能够提供准确的CLI选项和配置设置以使提取工作正常,或者提供指向这些选项的指针,我将不胜感激。

创建一个包含以下内容的文件(
babel.cfg
):

[javascript:*.js]
encoding = utf-8
然后,做:

pybabel extract -F babel.cfg /path/to/js-dir
这应该足以让您拥有一些消息字符串

顺便说一句,您可以通过以下操作查阅
extract
命令的帮助:

pybabel extract --help

我有一个类似的问题,并能够绕过它禁用默认关键字与巴贝尔

pybabel extract -k __ -F babel.cfg --no-default-keywords /path/to/js-dir 
禁用默认值(-k[关键字])时,必须在命令中至少指定一个关键字。我选择了
-k\uuuu
,因为“\uuuuu”是我一直在寻找的一种模式

只需使用这个命令,并用babel.cfg文件中的一个替换-k之后的“_uuu”


编辑:这允许您使用自己的关键字而不是gettext()

您可以在as flask global中创建一个对象,并使用gettext进行转换

g.i18n = {
    'Casa' : lazy_gettext('Home'),
    'Auto' : lazy_gettext('Car'),
    'Persona' : lazy_gettext('Person')
}
然后将其作为变量添加

<script>
    var i18n = {{ g.i18n | tojson }}
</script>

实际上,您可以直接在Javascript中使用
gettext

请参阅:。它允许您使用标准的*gettext函数,包括使用上下文和/或复数形式的函数

它可以读取PO/MO文件,也可以导入定制的JSON文件


有关完整的示例,请参阅。

您在js中使用的gettext/ngettext函数是什么?我现在也在同一个阶段——我让巴贝尔为html和python工作,但不是JS——事实上这是一个操作系统项目(Askbot)——你可以在这里检查一下——顺便说一句,我已经解决了我的问题:很抱歉响应太晚了。我做的正是你所概述的,并且得到了与我的问题中所显示的完全相同的结果。你有没有在相当大的例子上测试过这个命令?我也有同样的问题。然后我创建了一个babel.cfg文件,其中包含以下内容:``[javascript:*.js]extract\u messages=````现在它可以工作了!另外,定义一个复数关键字如下:
-k“ngettext:1,2”
<script>
    var i18n = {{ g.i18n | tojson }}
</script>
var labelTranslate = {
                    Casa: i18n.Casa,
                    Persona: i18n.Persona,
                    Auto: i18n.Auto
                };