2

我对 babel 和 lingua 有疑问。我希望 babel/lingua 扫描我的源文件夹以查找用于创建 pot-catalog 的特定字符串。

这是我的 setup.py

...

requires = [
    ...
    'Babel',
    'lingua',
    ]

extractors = { 'dbas': [
    ('**.py', 'python', None ),
    ('**.pt', 'chameleon', None ),
    ('static/**', 'ignore', None),
    ]}

setup(name='DBAS',
    ...
    message_extractors=extractors,
    ...
    )

还有我的 setup.cfg

[compile_catalog]
directory = dbas/locale
domain = mydbas
statistics = true

[extract_messages]
copyright_holder = Acme Inc.
output_file = dbas/locale/mydbas.pot
charset = UTF-8

[init_catalog]
domain = mydbas
input_file = dbas/locale/mydbas.pot
output_dir = dbas/locale

[update_catalog]
domain = mydbas
input_file = dbas/locale/mydbas.pot
output_dir = dbas/locale
previous = true

在我的init .py 我有这样的东西:

config.add_translation_dirs('dbas:locale')

例如我的 404 模板就是这个:

<!DOCTYPE html>
<html lang="${request.locale_name}"
            metal:use-macro="load: basetemplate.pt"
            xmlns="http://www.w3.org/1999/xhtml"
            xml:lang="en"
            xmlns:i18n="http://xml.zope.org/namespaces/i18n"
            i18n:domain="dbas">

<head>
    <link type="text/css" href="${request.static_url('dbas:static/css/theme_center.css')}" rel="stylesheet">
</head>

<body>

    <div class="center">
        <div class="error">
            <h1><span class="font-semi-bold" i18n:translate="404">404 Error</span></h1>
            <p class="lead font-normal">The page &quot;<span class="font-semi-bold">${page_notfound_viewname}</span>&quot; for could not be found.</p>
            <br>
            <input class="button button-block btn-lg btn btn-primary" type="submit" onClick="self.location.href='/'" value="Let's go home!" />
        </div>
    </div>

</body>
<html>

现在我可以运行:

python3 setup.py develop
setup.py extract_messages

我收到:

running extract_messages
extracting messages from dbas/__init__.py
extracting messages from dbas/helper.py
extracting messages from dbas/security.py
extracting messages from dbas/tests.py
extracting messages from dbas/views.py
extracting messages from dbas/database/__init__.py
extracting messages from dbas/database/initializedb.py
extracting messages from dbas/database/model.py
extracting messages from dbas/templates/404.pt
Traceback (most recent call last):
  File "setup.py", line 60, in <module>
    """,
  File "/usr/lib/python3.4/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/usr/lib/python3.4/distutils/dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "/usr/lib/python3.4/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/usr/local/lib/python3.4/dist-packages/babel/messages/frontend.py", line 305, in run
    for filename, lineno, message, comments, context in extracted:
  File "/usr/local/lib/python3.4/dist-packages/babel/messages/extract.py", line 163, in extract_from_dir
    strip_comment_tags):
  File "/usr/local/lib/python3.4/dist-packages/babel/messages/extract.py", line 190, in extract_from_file
    strip_comment_tags))
  File "/usr/local/lib/python3.4/dist-packages/babel/messages/extract.py", line 262, in extract
    raise ValueError('Unknown extraction method %r' % method)
ValueError: Unknown extraction method 'chameleon'

有人知道,怎么了?

4

1 回答 1

2

对于 babel 和 lingua 的最新版本,您的message_extractors配置可能已经过时。出于调试目的,您可以要求 lingua extractors。我实际上不知道如何为 babel 执行此操作。

$ bin/pot-create --list-extractors
chameleon         Chameleon templates (defaults to Python expressions)
python            Python sources
xml               Chameleon templates (defaults to Python expressions)
zcml              Zope Configuration Markup Language (ZCML)
zope              Zope templates (defaults to TALES expressions)

我最近关注了金字塔的 i18n/l10 叙述文档。提取工作流程似乎发生了变化。使用 lingua >=3.0.9 和 babel==1.3,我不再需要任何 setuptools 集成配置,例如 setup.cfg 并message_extractors为诸如 mines & yours 之类的常见情况定义。从 python 和 chameleon 模板中提取消息字符串开箱即用。但是金字塔文档应该有所改进。

几天后,我将我对该主题的观察通知了金字塔项目,建议对 lingua i18n.sh 脚本进行小改动,以帮助查找模糊消息。可能是这些资源也可以帮助您。

于 2015-05-17T14:27:39.473 回答