This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2006年03月11日 23:20 by dsegan, last changed 2022年04月11日 14:56 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| gettext.py-fix | dsegan, 2006年03月11日 23:20 | Fix corner-case header fields parsing in gettext.py | ||
| Messages (7) | |||
|---|---|---|---|
| msg27754 - (view) | Author: Danilo Segan (dsegan) | Date: 2006年03月11日 23:20 | |
See http://bugzilla.gnome.org/show_bug.cgi?id=334256 The problem is a PO file like the following: test.po: msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "#-#-#-#-# plo.po (PACKAGE VERSION) #-#-#-#-#\n" (these kinds of entries are sometimes inserted by msgmerge, so they're somewhat common) Any Python program trying to access this breaks: $ python test.py Traceback (most recent call last): File "test.py", line 7, in ? gt = gettext.GNUTranslations(file) File "/usr/lib/python2.4/gettext.py", line 177, in __init__ self._parse(fp) File "/usr/lib/python2.4/gettext.py", line 300, in _parse v = v.split(';') AttributeError: 'list' object has no attribute 'split' test.py is simple: #!/usr/bin/env python import gettext file = open("test.mo", "rb") if file: gt = gettext.GNUTranslations(file) The problem is the corner-case: plural-forms precedes this kind of comment, so "v" is split (v=v.split(";")). In the next instance, lastk is "plural-forms", yet the entry doesn't contain ":", so it tries to set plural forms to v.split(";") again, which fails since v is already a list. The attached simple patch fixes this. |
|||
| msg27755 - (view) | Author: Martin v. Löwis (loewis) * (Python committer) | Date: 2006年03月19日 11:51 | |
Logged In: YES user_id=21627 Several things seem to be going on here: 1. gettext.py is clearly wrong; it shouldn't break on that file. 2. it is trying to process multi-line fields here. So the patch is also wrong, as it just sets k and v to None. 3. I believe that the PO file presented is also wrong. I believe the intention of the header is that it should have the RFC822 style syntax, which doesn't allow for # comment lines. The tool should use a syntax like X-Filename: plo.po; package=PACKAGE; version=VERSION; To summarize, I think the attempt to process multi-line fields in the header is misguided, and gettext.py should just fetch the first line of content-type and plural-forms. |
|||
| msg27756 - (view) | Author: Danilo Segan (dsegan) | Date: 2006年03月20日 04:07 | |
Logged In: YES user_id=219596 Agreed on all points, except the "summary": multi-line plural forms are actually supported and widely used. Anyway, gettext.py should fail gracefully in case of any problem in the header, instead of running into exception. |
|||
| msg27757 - (view) | Author: Martin v. Löwis (loewis) * (Python committer) | Date: 2006年03月20日 07:50 | |
Logged In: YES user_id=21627 dsegan: Can you give a real-world (i.e. non-documentation) example of a PO file with a multi-line plural formula? |
|||
| msg27758 - (view) | Author: Danilo Segan (dsegan) | Date: 2006年03月21日 23:28 | |
Logged In: YES user_id=219596 No. And based on what Bruno said, it's obviously not supported (and since it's a GNU thingy, Bruno would probably know best ;). [btw, we need no plural forms in documentation at all, at least not in static content translation; Yelp's gnome-doc-utils stylesheets provide plural forms for where they are appropriate] |
|||
| msg27759 - (view) | Author: Alexis Deruelle (potorange) | Date: 2007年02月13日 12:31 | |
gettext chokes on empty Plural-Forms ?
#> audit2allow
Traceback (most recent call last):
File "/usr/bin/audit2allow", line 34, in ?
gettext.install('policycoreutils')
File "/usr/lib/python2.4/gettext.py", line 482, in install
t = translation(domain, localedir, fallback=True, codeset=codeset)
File "/usr/lib/python2.4/gettexTraceback (most recent call last):
File "/usr/bin/audit2allow", line 34, in ?
gettext.install('policycoreutils')
File "/usr/lib/python2.4/gettext.py", line 482, in install
t = translation(domain, localedir, fallback=True, codeset=codeset)
File "/usr/lib/python2.4/gettext.py", line 467, in translation
t = _translations.setdefault(key, class_(open(mofile, 'rb')))
File "/usr/lib/python2.4/gettext.py", line 177, in __init__
self._parse(fp)
File "/usr/lib/python2.4/gettext.py", line 302, in _parse
print v[1]
IndexError: list index out of range
t.py", line 467, in translation
t = _translations.setdefault(key, class_(open(mofile, 'rb')))
File "/usr/lib/python2.4/gettext.py", line 177, in __init__
self._parse(fp)
File "/usr/lib/python2.4/gettext.py", line 302, in _parse
print v[1]
IndexError: list index out of range
#> msgunfmt /usr/share/locale/fr/LC_MESSAGES/policycoreutils.mo | grep -i plural
"Plural-Forms: \n"
Bellow is a patch that fixes this for me.
--- /usr/lib/python2.4/gettext.py.orig 2007年02月13日 13:25:54.000000000 +0100
+++ /usr/lib/python2.4/gettext.py 2007年02月13日 12:36:29.000000000 +0100
@@ -298,8 +298,9 @@
self._charset = v.split('charset=')[1]
elif k == 'plural-forms':
v = v.split(';')
- plural = v[1].split('plural=')[1]
- self.plural = c2py(plural)
+ if len(v) > 1:
+ plural = v[1].split('plural=')[1]
+ self.plural = c2py(plural)
# Note: we unconditionally convert both msgids and msgstrs to
# Unicode using the character encoding specified in the charset
# parameter of the Content-Type header. The gettext documentation
|
|||
| msg110376 - (view) | Author: Mark Lawrence (BreamoreBoy) * | Date: 2010年07月15日 16:10 | |
I'm closing this as a duplicate of 1475523 as the latter has a unit test patch file attached, I'll also merge the nosy lists. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:56:15 | admin | set | github: 43019 |
| 2010年07月15日 16:13:59 | eric.araujo | set | superseder: gettext breaks on plural-forms header |
| 2010年07月15日 16:10:49 | BreamoreBoy | set | status: open -> closed nosy: + BreamoreBoy messages: + msg110376 resolution: duplicate |
| 2010年07月14日 13:35:19 | BreamoreBoy | set | dependencies: - gettext breaks on plural-forms header |
| 2009年12月02日 19:03:19 | dmalcolm | set | nosy:
+ dmalcolm |
| 2009年03月21日 02:20:00 | ajaksu2 | set | dependencies: + gettext breaks on plural-forms header |
| 2009年03月21日 01:35:54 | ajaksu2 | set | keywords:
+ patch stage: test needed type: behavior versions: + Python 2.6, - Python 2.4 |
| 2006年03月11日 23:20:02 | dsegan | create | |