I've problems with babel and lingua. I want babel/lingua to scan my source folder for specific strings for creating the pot-catalog.
This is my setup.py
...
requires = [
...
'Babel',
'lingua',
]
extractors = { 'dbas': [
('**.py', 'python', None ),
('**.pt', 'chameleon', None ),
('static/**', 'ignore', None),
]}
setup(name='DBAS',
...
message_extractors=extractors,
...
)
And my 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
In my init.py I have something like this:
config.add_translation_dirs('dbas:locale')
And for example my 404 template is this one:
<!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 "<span class="font-semi-bold">${page_notfound_viewname}</span>" 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>
Now I can run:
python3 setup.py develop
setup.py extract_messages
And I am receiving:
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'
Does someone know, whats wrong?
Your message_extractors
configuration may be outdated for recent versions of babel and lingua. For debugging purposes you could ask for lingua extractors. I actually do not know how to do this for 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)
I recently followed pyramid's narrative documentation for i18n/l10. Extraction workflow seems to have changed. Using lingua >=3.0.9 and babel==1.3 I did not needed any setuptools integration configuration anymore like setup.cfg and defining message_extractors
for a common case like mines & yours. Extraction of message strings from python & chameleon templates worked out-of-the-box. But pyramid documentation should be improved a bit.
A couple of days later I notified the pyramid project about my observations on the topic and suggested a small change to lingua i18n.sh script that helps finding fuzzy messages. May be theses resources help you as well.