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/gettext.py | |
| 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/gettext.py')
| -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):  | 
