#11258 closed defect (fixed)
Catalog compilation and test case failures with Babel >= 1.0
| Reported by: | Ryan J Ollos | Owned by: | Jun Omae |
|---|---|---|---|
| Priority: | normal | Milestone: | 0.12.6 |
| Component: | i18n | Version: | 1.0-stable |
| Severity: | normal | Keywords: | babel10 |
| Cc: | Branch: | ||
| Release Notes: |
Add support for Babel 1.0 and later. |
||
| API Changes: | |||
| Internal Changes: | |||
Description
In the last day or so we've rocketed forward to Babel 1.2, now available on PyPI. I only noticed this just now due to some test case failures.
Compiling the catalogs results in:
(t11257)user@ubuntu:~/Workspace/t11257/teo-rjollos.git$ python setup.py compile_catalog -f
running compile_catalog
compiling catalog 'trac/locale/he/LC_MESSAGES/messages.po' to 'trac/locale/he/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/gl/LC_MESSAGES/messages.po' to 'trac/locale/gl/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/fa/LC_MESSAGES/messages.po' to 'trac/locale/fa/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/nb/LC_MESSAGES/messages.po' to 'trac/locale/nb/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/en_GB/LC_MESSAGES/messages.po' to 'trac/locale/en_GB/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/fi/LC_MESSAGES/messages.po' to 'trac/locale/fi/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/it/LC_MESSAGES/messages.po' to 'trac/locale/it/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/es_MX/LC_MESSAGES/messages.po' to 'trac/locale/es_MX/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/ja/LC_MESSAGES/messages.po' to 'trac/locale/ja/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/vi/LC_MESSAGES/messages.po' to 'trac/locale/vi/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/en_US/LC_MESSAGES/messages.po' to 'trac/locale/en_US/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/et/LC_MESSAGES/messages.po' to 'trac/locale/et/LC_MESSAGES/messages.mo'
error: trac/locale/ca/LC_MESSAGES/messages.po:668: unknown named placeholder u'resource'
error: trac/locale/ca/LC_MESSAGES/messages.po:704: unknown named placeholder u'subject'
error: trac/locale/ca/LC_MESSAGES/messages.po:709: unknown named placeholder u'subject'
error: trac/locale/ca/LC_MESSAGES/messages.po:736: unknown named placeholder u'page'
error: trac/locale/ca/LC_MESSAGES/messages.po:2722: unknown named placeholder u'revs'
error: trac/locale/ca/LC_MESSAGES/messages.po:2994: unknown named placeholder u'shortname'
error: trac/locale/ca/LC_MESSAGES/messages.po:4692: unknown named placeholder u'created'
error: trac/locale/ca/LC_MESSAGES/messages.po:4697: unknown named placeholder u'created'
error: trac/locale/ca/LC_MESSAGES/messages.po:5274: unknown named placeholder u'file'
error: trac/locale/ca/LC_MESSAGES/messages.po:5286: unknown named placeholder u'file'
error: trac/locale/ca/LC_MESSAGES/messages.po:5806: unknown named placeholder u'in_repo'
error: trac/locale/ca/LC_MESSAGES/messages.po:5811: unknown named placeholder u'in_repo'
error: trac/locale/ca/LC_MESSAGES/messages.po:6670: unknown named placeholder u'name'
error: trac/locale/ca/LC_MESSAGES/messages.po:6675: unknown named placeholder u'name'
error: trac/locale/ca/LC_MESSAGES/messages.po:6703: incompatible format for placeholder u'version': 'd' and 's' are not compatible
compiling catalog 'trac/locale/ca/LC_MESSAGES/messages.po' to 'trac/locale/ca/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/hu/LC_MESSAGES/messages.po' to 'trac/locale/hu/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/cs/LC_MESSAGES/messages.po' to 'trac/locale/cs/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/tr/LC_MESSAGES/messages.po' to 'trac/locale/tr/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/fr/LC_MESSAGES/messages.po' to 'trac/locale/fr/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/hy/LC_MESSAGES/messages.po' to 'trac/locale/hy/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/sv/LC_MESSAGES/messages.po' to 'trac/locale/sv/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/eo/LC_MESSAGES/messages.po' to 'trac/locale/eo/LC_MESSAGES/messages.mo'
compiling catalog 'trac/locale/pt_BR/LC_MESSAGES/messages.po' to 'trac/locale/pt_BR/LC_MESSAGES/messages.mo'
Traceback (most recent call last):
File "setup.py", line 162, in <module>
**extra
File "/usr/lib/python2.6/distutils/core.py", line 152, in setup
dist.run_commands()
File "/usr/lib/python2.6/distutils/dist.py", line 975, in run_commands
self.run_command(cmd)
File "/usr/lib/python2.6/distutils/dist.py", line 995, in run_command
cmd_obj.run()
File "/home/user/Workspace/t11257/lib/python2.6/site-packages/Babel-1.2-py2.6.egg/babel/messages/frontend.py", line 133, in run
catalog = read_po(infile, locale)
File "/home/user/Workspace/t11257/lib/python2.6/site-packages/Babel-1.2-py2.6.egg/babel/messages/pofile.py", line 121, in read_po
catalog = Catalog(locale=locale, domain=domain, charset=charset)
File "/home/user/Workspace/t11257/lib/python2.6/site-packages/Babel-1.2-py2.6.egg/babel/messages/catalog.py", line 247, in __init__
locale = Locale.parse(locale)
File "/home/user/Workspace/t11257/lib/python2.6/site-packages/Babel-1.2-py2.6.egg/babel/core.py", line 289, in parse
raise UnknownLocaleError(input_id)
babel.core.UnknownLocaleError: unknown locale 'zh_CN'
Running the tests cases with Python 2.6, including functional test cases, results in:
Doctest: trac.test.Mock ... ok
======================================================================
ERROR: test_i18n_date_hint (trac.util.tests.datefmt.I18nDateFormatTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/Workspace/t11257/teo-rjollos.git/trac/util/tests/datefmt.py", line 830, in test_i18n_date_hint
zh_CN = Locale.parse('zh_CN')
File "/home/user/Workspace/t11257/lib/python2.6/site-packages/Babel-1.2-py2.6.egg/babel/core.py", line 289, in parse
raise UnknownLocaleError(input_id)
UnknownLocaleError: unknown locale 'zh_CN'
<-- 5 more failures due to unknown locale 'zh_CN' -->
======================================================================
FAIL: test_format_compatibility (trac.util.tests.datefmt.I18nDateFormatTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/Workspace/t11257/teo-rjollos.git/trac/util/tests/datefmt.py", line 1026, in test_format_compatibility
datefmt.format_datetime(t, '%x %X', tz, en_US))
AssertionError: 'Aug 28, 2010 1:45:56 PM' != u'Aug 28, 2010, 1:45:56 PM'
======================================================================
FAIL: test_i18n_format_datetime (trac.util.tests.datefmt.I18nDateFormatTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/Workspace/t11257/teo-rjollos.git/trac/util/tests/datefmt.py", line 739, in test_i18n_format_datetime
locale=en_US))
AssertionError: 'Aug 28, 2010 1:45:56 PM' != u'Aug 28, 2010, 1:45:56 PM'
----------------------------------------------------------------------
Ran 1346 tests in 204.396s
FAILED (failures=2, errors=8)
Attachments (0)
Change History (23)
comment:1 by , 12 years ago
comment:2 by , 12 years ago
Another thing: if selecting zh_TW, i18n/l10n doesn't work.
In this case, Babel 1.x automatically expands to zh_Hant_TW. Trac expects zh_TW. See https://github.com/mitsuhiko/babel/issues/30.
>>> import babel >>> from babel.core import Locale >>> babel.__version__ '1.2' >>> Locale.parse('zh_TW') Locale('zh', territory='TW', script='Hant') >>> str(Locale.parse('zh_TW')) 'zh_Hant_TW'
2013-07-28 21:21:46,629 Trac[main] DEBUG: Negotiated locale: zh_Hant_TW -> ja
comment:3 by , 12 years ago
Just a quick heads up: the zn_CN not resolving correctly will be fixed in 1.3 (should be soon). However the locale parsing result will expand to zn_Hans_CN similar to how zh_TW expands to zh_Hant_TW.
There is very little I can do about this right now due to how Babel was structured. The CLDR no longer carries the base data sets so implementing the likely subtags was the quickest way for me to "fix" the issue.
Later versions of Babel will hopefully allow the locale to retain being zh_CN and internally do the subtag resolving and find the most appropriate data without changing the behavior of the locale. Similarly locales should then be able to finally have variants assigned.
You can track the status on that here: https://github.com/mitsuhiko/babel/issues/30. Work has not started yet :(
comment:5 by , 12 years ago
Thanks, Armin!
Other failures caused by differences of date/time formats are fixed in [11892]. Yet another thing is fixed in [11893].
======================================================================
FAIL: test_i18n_parse_date_datetime_meridiem (trac.util.tests.datefmt.I18nDateFormatTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/jun66j5/src/trac/edgewall/svn/branches/1.0-stable/trac/util/tests/datefmt.py", line 962, in test_i18n_parse_date_datetime_meridiem
zh_CN))
AssertionError: datetime.datetime(2011, 2, 22, 0, 45, 56, tzinfo=<FixedOffset "GMT +2:00" 2:00:00>) != datetime.datetime(2011, 2, 22, 12, 45, 56, tzinfo=<FixedOffset "GMT +2:00" 2:00:00>)
----------------------------------------------------------------------
Ran 1391 tests in 93.843s
FAILED (failures=1)
This is caused by periods except am/pm which are retrieved from get_period_names() in Babel 1.0+. In particular, the names are same for the am and morning periods in zh_CN. The method returns only am and pm until Babel 0.9.x.
>>> for key, val in sorted(get_period_names(locale='de').items()): print key, val ... afternoon Nachmittag am vorm. earlyMorning Morgen evening Abend morning Vormittag night Nacht noon Mittag pm nachm. >>> for key, val in sorted(get_period_names(locale='zh_CN').items()): print key, val ... afternoon 下午 am 上午 earlyMorning 清晨 midDay 中午 morning 上午 night 晚上 noon 中午 pm 下午 weeHours 凌晨
comment:6 by , 12 years ago
| Owner: | set to |
|---|---|
| Status: | new → assigned |
Merged [11876,11892-11893] into trunk in [11933].
comment:7 by , 12 years ago
| Summary: | Catalog compilation and test case failures with Babel 1.2 → Catalog compilation and test case failures with Babel >= 1.0 |
|---|
follow-up: 14 comment:8 by , 12 years ago
Three issues still are remaining with Babel 1.3 (zh-tw and zh-cn have the same issues).
- If selecting Chineses (zh-tw) in preference panel, expanded locale id, e.g.
zh_Hant_TW, will be stored in session data. - When user's locale is Chineses (zh-tw),
/chrome/js/messages/zh_Hant_TW.jsis added for javascript message catalog. It must bezh_TW.js. - minor issue,
init_catalog -l zh_TWgenerates the following instead ofLanguage-Team: zh_TW ...."Language-Team: zh_Hant_TW <LL@li.org>\n"
Proposed workaround for first and second can be found in log:jomae.git:ticket11258.
follow-up: 10 comment:9 by , 12 years ago
- Cannot save default language in Basic Settings admin panel (refs comment:13:ticket:11337). [ff5178d3/jomae.git] is the fix for it.
I'll push [3dba044f/jomae.git] and [ff5178d3/jomae.git] to 1.0-stable. Also, the first issue in comment:8 occurs on 0.12-stable with Babel 1.x. I'll backport [3dba044f/jomae.git] to 0.12-stable.
comment:10 by , 12 years ago
I'll backport [3dba044f/jomae.git] to 0.12-stable.
[0e6b0872/jomae.git] for 0.12-stable. On 0.12-stable, hyphen is used as separator of locale identifier in session data. After [10178], the separator has been changed from hyphen to underscore.
follow-up: 12 comment:11 by , 12 years ago
I'm not sure if this has been mentioned elsewhere, but another issue that could cause trouble for our users is that Trac 1.0.x (and even 1.1.x) supports Python 2.5, but Babel doesn't support Python < 2.6 since version 1.0. We end up with a traceback that is sure to surface on the mailing list from time to time:
$ easy_install babel Searching for babel Reading http://pypi.python.org/simple/babel/ Best match: Babel 1.3 Downloading https://pypi.python.org/packages/source/B/Babel/Babel-1.3.tar.gz#md5=5264ceb02717843cbc9ffce8e6e06bdb Processing Babel-1.3.tar.gz Writing /tmp/easy_install-0wKSNr/Babel-1.3/setup.cfg Running Babel-1.3/setup.py -q bdist_egg --dist-dir /tmp/easy_install-0wKSNr/Babel-1.3/egg-dist-tmp-loGAxe warning: no previously-included files matching '*' found under directory 'docs/_build' warning: no previously-included files matching '*.pyc' found under directory 'tests' warning: no previously-included files matching '*.pyo' found under directory 'tests' File "build/bdist.linux-x86_64/egg/babel/messages/mofile.py", line 75 if b':' in item: ^ SyntaxError: invalid syntax build/bdist.linux-x86_64/egg/babel/messages/catalog.py:142: Warning: 'as' will become a reserved keyword in Python 2.6 File "build/bdist.linux-x86_64/egg/babel/messages/catalog.py", line 142 except TranslationError as e: ^ SyntaxError: invalid syntax build/bdist.linux-x86_64/egg/babel/messages/frontend.py:419: Warning: 'as' will become a reserved keyword in Python 2.6 File "build/bdist.linux-x86_64/egg/babel/messages/frontend.py", line 419 except UnknownLocaleError as e: ^ SyntaxError: invalid syntax build/bdist.linux-x86_64/egg/babel/support.py:545: Warning: 'with' will become a reserved keyword in Python 2.6 File "build/bdist.linux-x86_64/egg/babel/support.py", line 545 with open(filename, 'rb') as fp: ^ SyntaxError: invalid syntax File "build/bdist.linux-x86_64/egg/babel/util.py", line 43 br'[ \t\f]* \# .* coding[=:][ \t]*([-\w.]+)', re.VERBOSE) ^ SyntaxError: invalid syntax /home/user/Workspace/t11329/lib/python2.5/site-packages/Babel-1.3-py2.5.egg/babel/support.py:545: Warning: 'with' will become a reserved keyword in Python 2.6 File "/home/user/Workspace/t11329/lib/python2.5/site-packages/Babel-1.3-py2.5.egg/babel/support.py", line 545 with open(filename, 'rb') as fp: ^ SyntaxError: invalid syntax File "/home/user/Workspace/t11329/lib/python2.5/site-packages/Babel-1.3-py2.5.egg/babel/util.py", line 43 br'[ \t\f]* \# .* coding[=:][ \t]*([-\w.]+)', re.VERBOSE) ^ SyntaxError: invalid syntax File "/home/user/Workspace/t11329/lib/python2.5/site-packages/Babel-1.3-py2.5.egg/babel/messages/mofile.py", line 75 if b':' in item: ^ SyntaxError: invalid syntax /home/user/Workspace/t11329/lib/python2.5/site-packages/Babel-1.3-py2.5.egg/babel/messages/catalog.py:142: Warning: 'as' will become a reserved keyword in Python 2.6 File "/home/user/Workspace/t11329/lib/python2.5/site-packages/Babel-1.3-py2.5.egg/babel/messages/catalog.py", line 142 except TranslationError as e: ^ SyntaxError: invalid syntax /home/user/Workspace/t11329/lib/python2.5/site-packages/Babel-1.3-py2.5.egg/babel/messages/frontend.py:419: Warning: 'as' will become a reserved keyword in Python 2.6 File "/home/user/Workspace/t11329/lib/python2.5/site-packages/Babel-1.3-py2.5.egg/babel/messages/frontend.py", line 419 except UnknownLocaleError as e: ^ SyntaxError: invalid syntax Adding Babel 1.3 to easy-install.pth file Installing pybabel script to /home/user/Workspace/t11329/bin Installed /home/user/Workspace/t11329/lib/python2.5/site-packages/Babel-1.3-py2.5.egg Processing dependencies for babel Finished processing dependencies for babel
follow-up: 15 comment:12 by , 12 years ago
Replying to rjollos:
I'm not sure if this has been mentioned elsewhere, but another issue that could cause trouble for our users is that Trac 1.0.x (and even 1.1.x) supports Python 2.5, but Babel doesn't support Python < 2.6 since version 1.0. We end up with a traceback that is sure to surface on the mailing list from time to time:
I've tried to add 'Babel': ['Babel>=0.9.5,<1.0'] to extras_require in Trac's setup.py. However it didn't work probably cause Babel is optional.
At least, I think that Babel's setup.py should have the check of Python version like this.
-
setup.py
diff --git a/setup.py b/setup.py index 7a566ab..f721375 100755
a b except ImportError: 15 15 from distutils.cmd import Command 16 16 17 17 18 if sys.version_info < (2, 6): 19 print("Babel requires Python 2.6 or later") 20 sys.exit(1) 21 if (3,) <= sys.version_info < (3, 3): 22 print("Babel requires Python 3.3 or later") 23 sys.exit(1) 24 25 18 26 class import_cldr(Command): 19 27 description = 'imports and converts the CLDR data' 20 28 user_options = []
comment:13 by , 12 years ago
| Keywords: | babel10 added; babel removed |
|---|
follow-up: 16 comment:14 by , 12 years ago
- When user's locale is Chineses (zh-tw),
/chrome/js/messages/zh_Hant_TW.jsis added for javascript message catalog. It must bezh_TW.js.
It's the last issue with Babel 1.3. Fixing the issue needs trick, locale.script = None, in [c5761471/jomae.git] which is not committed yet.
follow-up: 22 comment:15 by , 12 years ago
follow-up: 17 comment:16 by , 12 years ago
It's the last issue with Babel 1.3. Fixing the issue needs trick,
locale.script = None, in [c5761471/jomae.git] which is not committed yet.
The trick is rebased with latest branches in log:jomae.git:ticket11258.1_0.12.6dev and log:jomae.git:ticket11258.1.
follow-up: 23 comment:17 by , 12 years ago
| Release Notes: | modified (diff) |
|---|---|
| Resolution: | → fixed |
| Status: | assigned → closed |
The trick is rebased with latest branches in log:jomae.git:ticket11258.1_0.12.6dev and log:jomae.git:ticket11258.1.
Committed in [12363] into 0.12-stable and merged into 1.0-stable and trunk in [12364-12365].
comment:19 by , 12 years ago
| Milestone: | 1.0.2 → 0.12.6 |
|---|
follow-up: 21 comment:20 by , 12 years ago
| Resolution: | fixed |
|---|---|
| Status: | closed → reopened |
extract_messages command with Babel 1.3 shows the following error, originally reported at bloodhound:comment:47:ticket:694.
$ PYTHONPATH=. ~/venv/py26-babel1/bin/python setup.py extract_messages
running extract_messages
extracting messages from tracopt/__init__.py
extracting messages from tracopt/mimeview/__init__.py
extracting messages from tracopt/mimeview/enscript.py
extracting messages from tracopt/mimeview/php.py
Traceback (most recent call last):
File "setup.py", line 163, in <module>
**extra
File "/usr/lib/python2.6/distutils/core.py", line 152, in setup
dist.run_commands()
File "/usr/lib/python2.6/distutils/dist.py", line 975, in run_commands
self.run_command(cmd)
File "/usr/lib/python2.6/distutils/dist.py", line 995, in run_command
cmd_obj.run()
File "/home/jun66j5/venv/py26-babel1/lib/python2.6/site-packages/babel/messages/frontend.py", line 305, in run
for filename, lineno, message, comments, context in extracted:
File "/home/jun66j5/venv/py26-babel1/lib/python2.6/site-packages/babel/messages/extract.py", line 163, in extract_from_dir
strip_comment_tags):
File "/home/jun66j5/venv/py26-babel1/lib/python2.6/site-packages/babel/messages/extract.py", line 190, in extract_from_file
strip_comment_tags))
File "/home/jun66j5/venv/py26-babel1/lib/python2.6/site-packages/babel/messages/extract.py", line 267, in extract
for lineno, funcname, messages, comments in results:
File "/home/jun66j5/src/trac/edgewall/git/trac/dist.py", line 182, in extract_python
{'__builtins__':{}}, {})
File "<string>", line 0
SyntaxError: encoding declaration in Unicode string
comment:21 by , 12 years ago
| Resolution: | → fixed |
|---|---|
| Status: | reopened → closed |
comment:22 by , 10 years ago
Replying to Ryan J Ollos:
Replying to jomae:
At least, I think that Babel's setup.py should have the check of Python version like this.
Thanks, I opened a ticket.
Change has been committed to Babel master and will be included in Babel 3.0.
comment:23 by , 10 years ago
Replying to jomae:
The trick is rebased with latest branches in log:jomae.git:ticket11258.1_0.12.6dev and log:jomae.git:ticket11258.1.
Committed in [12363] into 0.12-stable and merged into 1.0-stable and trunk in [12364-12365].
After https://github.com/python-babel/babel/pull/305, that trick wouldn't work and raise a ValueError.



Ah, that's so bad.
The former issue is caused that CLDR removed locale-aliases and Babel doesn't accept the aliases. See http://unicode.org/cldr/trac/ticket/3930 and http://unicode.org/cldr/trac/changeset/5903.
The latter issue is fixed in [11876].