[Python-checkins] python/dist/src/Lib gettext.py,1.23,1.24

niemeyer at users.sourceforge.net niemeyer at users.sourceforge.net
Thu Jul 22 20:44:02 CEST 2004


Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3065/Lib
Modified Files:
	gettext.py 
Log Message:
This change implements the following gettext features, as 
discussed recently in python-dev: 
In _locale module: 
- bind_textdomain_codeset() binding 
In gettext module: 
- bind_textdomain_codeset() function 
- lgettext(), lngettext(), ldgettext(), ldngettext(), 
 which return translated strings encoded in 
 preferred system encoding, if 
 bind_textdomain_codeset() was not used. 
- Added equivalent functionality in translate()
 function and catalog classes. 
Every change was also documented.
Index: gettext.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/gettext.py,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -d -r1.23 -r1.24
*** gettext.py	4 May 2004 09:21:43 -0000	1.23
--- gettext.py	22 Jul 2004 18:44:00 -0000	1.24
***************
*** 47,51 ****
 
 
! import copy, os, re, struct, sys
 from errno import ENOENT
 
--- 47,51 ----
 
 
! import locale, copy, os, re, struct, sys
 from errno import ENOENT
 
***************
*** 172,175 ****
--- 172,176 ----
 self._info = {}
 self._charset = None
+ self._output_charset = None
 self._fallback = None
 if fp is not None:
***************
*** 190,193 ****
--- 191,199 ----
 return message
 
+ def lgettext(self, message):
+ if self._fallback:
+ return self._fallback.lgettext(message)
+ return message
+ 
 def ngettext(self, msgid1, msgid2, n):
 if self._fallback:
***************
*** 198,201 ****
--- 204,215 ----
 return msgid2
 
+ def lngettext(self, msgid1, msgid2, n):
+ if self._fallback:
+ return self._fallback.lngettext(msgid1, msgid2, n)
+ if n == 1:
+ return msgid1
+ else:
+ return msgid2
+ 
 def ugettext(self, message):
 if self._fallback:
***************
*** 217,220 ****
--- 231,240 ----
 return self._charset
 
+ def output_charset(self):
+ return self._output_charset
+ 
+ def set_output_charset(self, charset):
+ self._output_charset = charset
+ 
 def install(self, unicode=False):
 import __builtin__
***************
*** 316,327 ****
 return message
 # Encode the Unicode tmsg back to an 8-bit string, if possible
! if self._charset:
 return tmsg.encode(self._charset)
 return tmsg
 
 def ngettext(self, msgid1, msgid2, n):
 try:
 tmsg = self._catalog[(msgid1, self.plural(n))]
! if self._charset:
 return tmsg.encode(self._charset)
 return tmsg
--- 336,362 ----
 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)
+ if tmsg is missing:
+ if self._fallback:
+ return self._fallback.lgettext(message)
+ return message
+ if self._output_charset:
+ 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
***************
*** 334,337 ****
--- 369,386 ----
 return msgid2
 
+ def lngettext(self, msgid1, msgid2, n):
+ try:
+ tmsg = self._catalog[(msgid1, self.plural(n))]
+ if self._output_charset:
+ return tmsg.encode(self._output_charset)
+ return tmsg.encode(locale.getpreferredencoding())
+ except KeyError:
+ if self._fallback:
+ return self._fallback.lngettext(msgid1, msgid2, n)
+ if n == 1:
+ return msgid1
+ else:
+ return msgid2
+ 
 def ugettext(self, message):
 missing = object()
***************
*** 398,402 ****
 
 def translation(domain, localedir=None, languages=None,
! class_=None, fallback=False):
 if class_ is None:
 class_ = GNUTranslations
--- 447,451 ----
 
 def translation(domain, localedir=None, languages=None,
! class_=None, fallback=False, codeset=None):
 if class_ is None:
 class_ = GNUTranslations
***************
*** 415,421 ****
 if t is None:
 t = _translations.setdefault(key, class_(open(mofile, 'rb')))
! # Copy the translation object to allow setting fallbacks.
! # All other instance data is shared with the cached object.
 t = copy.copy(t)
 if result is None:
 result = t
--- 464,473 ----
 if t is None:
 t = _translations.setdefault(key, class_(open(mofile, 'rb')))
! # Copy the translation object to allow setting fallbacks and
! # output charset. All other instance data is shared with the
! # cached object.
 t = copy.copy(t)
+ if codeset:
+ t.set_output_charset(codeset)
 if result is None:
 result = t
***************
*** 425,430 ****
 
 
! def install(domain, localedir=None, unicode=False):
! translation(domain, localedir, fallback=True).install(unicode)
 
 
--- 477,483 ----
 
 
! def install(domain, localedir=None, unicode=False, codeset=None):
! t = translation(domain, localedir, fallback=True, codeset=codeset)
! t.install(unicode)
 
 
***************
*** 432,435 ****
--- 485,490 ----
 # a mapping b/w domains and locale directories
 _localedirs = {}
+ # a mapping b/w domains and codesets
+ _localecodesets = {}
 # current global domain, `messages' used for compatibility w/ GNU gettext
 _current_domain = 'messages'
***************
*** 450,464 ****
 
 
 def dgettext(domain, message):
 try:
! t = translation(domain, _localedirs.get(domain, None))
 except IOError:
 return message
 return t.gettext(message)
 
 
 def dngettext(domain, msgid1, msgid2, n):
 try:
! t = translation(domain, _localedirs.get(domain, None))
 except IOError:
 if n == 1:
--- 505,535 ----
 
 
+ def bind_textdomain_codeset(domain, codeset=None):
+ global _localecodesets
+ if codeset is not None:
+ _localecodesets[domain] = codeset
+ return _localecodesets.get(domain)
+ 
+ 
 def dgettext(domain, message):
 try:
! t = translation(domain, _localedirs.get(domain, None),
! codeset=_localecodesets.get(domain))
 except IOError:
 return message
 return t.gettext(message)
 
+ def ldgettext(domain, message):
+ try:
+ t = translation(domain, _localedirs.get(domain, None),
+ codeset=_localecodesets.get(domain))
+ except IOError:
+ return message
+ return t.lgettext(message)
 
 def dngettext(domain, msgid1, msgid2, n):
 try:
! t = translation(domain, _localedirs.get(domain, None),
! codeset=_localecodesets.get(domain))
 except IOError:
 if n == 1:
***************
*** 468,479 ****
--- 539,564 ----
 return t.ngettext(msgid1, msgid2, n)
 
+ def ldngettext(domain, msgid1, msgid2, n):
+ try:
+ t = translation(domain, _localedirs.get(domain, None),
+ codeset=_localecodesets.get(domain))
+ except IOError:
+ if n == 1:
+ return msgid1
+ else:
+ return msgid2
+ return t.lngettext(msgid1, msgid2, n)
 
 def gettext(message):
 return dgettext(_current_domain, message)
 
+ def lgettext(message):
+ return ldgettext(_current_domain, message)
 
 def ngettext(msgid1, msgid2, n):
 return dngettext(_current_domain, msgid1, msgid2, n)
 
+ def lngettext(msgid1, msgid2, n):
+ return ldngettext(_current_domain, msgid1, msgid2, n)
 
 # dcgettext() has been deemed unnecessary and is not implemented.


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /