diff options
author | Guido van Rossum <guido@python.org> | 2007-07-12 08:04:06 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2007-07-12 08:04:06 (GMT) |
commit | 652f446d4212bbfcd5a50c5250ab280f3d969db5 (patch) | |
tree | 6e0068c796175065a943b95d8cf1e4d236d80b0b /Lib | |
parent | 076da0957b1af50cccf40ec5c60742212b4a1f90 (diff) | |
download | cpython-652f446d4212bbfcd5a50c5250ab280f3d969db5.zip cpython-652f446d4212bbfcd5a50c5250ab280f3d969db5.tar.gz cpython-652f446d4212bbfcd5a50c5250ab280f3d969db5.tar.bz2 |
Fixes for str/uni/bytes for gettext.py. test_gettext.py passes.
Fix by Christian Heimes, SF# 1751958, who writes:
I tested the fixes with the Zope3 zope.app.locales packages.
The mo files are loaded and parsed w/o any problem.
The translation with gettext.gettext is working as expected.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/gettext.py | 46 |
1 files changed, 13 insertions, 33 deletions
diff --git a/Lib/gettext.py b/Lib/gettext.py index a23c2ac..d3f8538 100644 --- a/Lib/gettext.py +++ b/Lib/gettext.py @@ -292,8 +292,8 @@ class GNUTranslations(NullTranslations): if mlen == 0: # Catalog description lastk = k = None - for item in tmsg.splitlines(): - item = item.strip() + for b_item in tmsg.split(os.linesep): + item = str(b_item).strip() if not item: continue if ':' in item: @@ -319,38 +319,30 @@ class GNUTranslations(NullTranslations): # cause no problems since us-ascii should always be a subset of # the charset encoding. We may want to fall back to 8-bit msgids # if the Unicode conversion fails. - if '\x00' in msg: + if b'\x00' in msg: # Plural forms msgid1, msgid2 = msg.split('\x00') tmsg = tmsg.split('\x00') if self._charset: msgid1 = str(msgid1, self._charset) tmsg = [str(x, self._charset) for x in tmsg] + else: + msgid1 = str(msgid1) + tmsg = [str(x) for x in tmsg] for i in range(len(tmsg)): catalog[(msgid1, i)] = tmsg[i] else: if self._charset: msg = str(msg, self._charset) tmsg = str(tmsg, self._charset) + else: + msg = str(msg) + tmsg = str(tmsg) catalog[msg] = tmsg # advance to next entry in the seek tables masteridx += 8 transidx += 8 - def gettext(self, message): - missing = object() - tmsg = self._catalog.get(message, missing) - if tmsg is missing: - if self._fallback: - return self._fallback.gettext(message) - return message - # Encode the Unicode tmsg back to an 8-bit string, if possible - if self._output_charset: - return tmsg.encode(self._output_charset) - elif self._charset: - return tmsg.encode(self._charset) - return tmsg - def lgettext(self, message): missing = object() tmsg = self._catalog.get(message, missing) @@ -362,22 +354,6 @@ class GNUTranslations(NullTranslations): return tmsg.encode(self._output_charset) return tmsg.encode(locale.getpreferredencoding()) - def ngettext(self, msgid1, msgid2, n): - try: - tmsg = self._catalog[(msgid1, self.plural(n))] - if self._output_charset: - return tmsg.encode(self._output_charset) - elif self._charset: - return tmsg.encode(self._charset) - return tmsg - except KeyError: - if self._fallback: - return self._fallback.ngettext(msgid1, msgid2, n) - if n == 1: - return msgid1 - else: - return msgid2 - def lngettext(self, msgid1, msgid2, n): try: tmsg = self._catalog[(msgid1, self.plural(n))] @@ -401,6 +377,8 @@ class GNUTranslations(NullTranslations): return str(message) return tmsg + gettext = ugettext + def ungettext(self, msgid1, msgid2, n): try: tmsg = self._catalog[(msgid1, self.plural(n))] @@ -413,6 +391,8 @@ class GNUTranslations(NullTranslations): tmsg = str(msgid2) return tmsg + ngettext = ungettext + # Locate a .mo file using the gettext strategy def find(domain, localedir=None, languages=None, all=0): |