Patch #1349274: gettext.install() now optionally installs additional
translation functions other than _() in the builtin namespace.
This commit is contained in:
parent
e466217ab9
commit
602b9ba6b3
|
@ -219,13 +219,16 @@ true.
|
||||||
\end{funcdesc}
|
\end{funcdesc}
|
||||||
|
|
||||||
\begin{funcdesc}{install}{domain\optional{, localedir\optional{, unicode
|
\begin{funcdesc}{install}{domain\optional{, localedir\optional{, unicode
|
||||||
\optional{, codeset}}}}
|
\optional{, codeset\optional{, names}}}}}
|
||||||
This installs the function \function{_} in Python's builtin namespace,
|
This installs the function \function{_} in Python's builtin namespace,
|
||||||
based on \var{domain}, \var{localedir}, and \var{codeset} which are
|
based on \var{domain}, \var{localedir}, and \var{codeset} which are
|
||||||
passed to the function \function{translation()}. The \var{unicode}
|
passed to the function \function{translation()}. The \var{unicode}
|
||||||
flag is passed to the resulting translation object's \method{install}
|
flag is passed to the resulting translation object's \method{install}
|
||||||
method.
|
method.
|
||||||
|
|
||||||
|
For the \var{names} parameter, please see the description of the
|
||||||
|
translation object's \method{install} method.
|
||||||
|
|
||||||
As seen below, you usually mark the strings in your application that are
|
As seen below, you usually mark the strings in your application that are
|
||||||
candidates for translation, by wrapping them in a call to the
|
candidates for translation, by wrapping them in a call to the
|
||||||
\function{_()} function, like this:
|
\function{_()} function, like this:
|
||||||
|
@ -239,6 +242,7 @@ Python's builtin namespace, so it is easily accessible in all modules
|
||||||
of your application.
|
of your application.
|
||||||
|
|
||||||
\versionchanged[Added the \var{codeset} parameter]{2.4}
|
\versionchanged[Added the \var{codeset} parameter]{2.4}
|
||||||
|
\versionchanged[Added the \var{names} parameter]{2.5}
|
||||||
\end{funcdesc}
|
\end{funcdesc}
|
||||||
|
|
||||||
\subsubsection{The \class{NullTranslations} class}
|
\subsubsection{The \class{NullTranslations} class}
|
||||||
|
@ -332,12 +336,21 @@ defines the encoding used to return translated messages.
|
||||||
\versionadded{2.4}
|
\versionadded{2.4}
|
||||||
\end{methoddesc}
|
\end{methoddesc}
|
||||||
|
|
||||||
\begin{methoddesc}[NullTranslations]{install}{\optional{unicode}}
|
\begin{methoddesc}[NullTranslations]{install}{\optional{unicode
|
||||||
|
\optional{, names}}}
|
||||||
If the \var{unicode} flag is false, this method installs
|
If the \var{unicode} flag is false, this method installs
|
||||||
\method{self.gettext()} into the built-in namespace, binding it to
|
\method{self.gettext()} into the built-in namespace, binding it to
|
||||||
\samp{_}. If \var{unicode} is true, it binds \method{self.ugettext()}
|
\samp{_}. If \var{unicode} is true, it binds \method{self.ugettext()}
|
||||||
instead. By default, \var{unicode} is false.
|
instead. By default, \var{unicode} is false.
|
||||||
|
|
||||||
|
If the \var{names} parameter is given, it must be a sequence containing
|
||||||
|
the names of functions you want to install in the builtin namespace in
|
||||||
|
addition to \function{_()}. Supported names are \code{'gettext'} (bound
|
||||||
|
to \method{self.gettext()} or \method{self.ugettext()} according to the
|
||||||
|
\var{unicode} flag), \code{'ngettext'} (bound to \method{self.ngettext()}
|
||||||
|
or \method{self.ungettext()} according to the \var{unicode} flag),
|
||||||
|
\code{'lgettext'} and \code{'lngettext'}.
|
||||||
|
|
||||||
Note that this is only one way, albeit the most convenient way, to
|
Note that this is only one way, albeit the most convenient way, to
|
||||||
make the \function{_} function available to your application. Because it
|
make the \function{_} function available to your application. Because it
|
||||||
affects the entire application globally, and specifically the built-in
|
affects the entire application globally, and specifically the built-in
|
||||||
|
@ -353,6 +366,8 @@ _ = t.gettext
|
||||||
|
|
||||||
This puts \function{_} only in the module's global namespace and so
|
This puts \function{_} only in the module's global namespace and so
|
||||||
only affects calls within this module.
|
only affects calls within this module.
|
||||||
|
|
||||||
|
\versionchanged[Added the \var{names} parameter]{2.5}
|
||||||
\end{methoddesc}
|
\end{methoddesc}
|
||||||
|
|
||||||
\subsubsection{The \class{GNUTranslations} class}
|
\subsubsection{The \class{GNUTranslations} class}
|
||||||
|
|
|
@ -239,9 +239,19 @@ class NullTranslations:
|
||||||
def set_output_charset(self, charset):
|
def set_output_charset(self, charset):
|
||||||
self._output_charset = charset
|
self._output_charset = charset
|
||||||
|
|
||||||
def install(self, unicode=False):
|
def install(self, unicode=False, names=None):
|
||||||
import __builtin__
|
import __builtin__
|
||||||
__builtin__.__dict__['_'] = unicode and self.ugettext or self.gettext
|
__builtin__.__dict__['_'] = unicode and self.ugettext or self.gettext
|
||||||
|
if hasattr(names, "__contains__"):
|
||||||
|
if "gettext" in names:
|
||||||
|
__builtin__.__dict__['gettext'] = __builtin__.__dict__['_']
|
||||||
|
if "ngettext" in names:
|
||||||
|
__builtin__.__dict__['ngettext'] = (unicode and self.ungettext
|
||||||
|
or self.ngettext)
|
||||||
|
if "lgettext" in names:
|
||||||
|
__builtin__.__dict__['lgettext'] = self.lgettext
|
||||||
|
if "lngettext" in names:
|
||||||
|
__builtin__.__dict__['lngettext'] = self.lngettext
|
||||||
|
|
||||||
|
|
||||||
class GNUTranslations(NullTranslations):
|
class GNUTranslations(NullTranslations):
|
||||||
|
@ -479,9 +489,9 @@ def translation(domain, localedir=None, languages=None,
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
def install(domain, localedir=None, unicode=False, codeset=None):
|
def install(domain, localedir=None, unicode=False, codeset=None, names=None):
|
||||||
t = translation(domain, localedir, fallback=True, codeset=codeset)
|
t = translation(domain, localedir, fallback=True, codeset=codeset)
|
||||||
t.install(unicode)
|
t.install(unicode, names)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -145,6 +145,14 @@ trggrkg zrffntr pngnybt yvoenel.''')
|
||||||
# Try unicode return type
|
# Try unicode return type
|
||||||
t.install(unicode=True)
|
t.install(unicode=True)
|
||||||
eq(_('mullusk'), 'bacon')
|
eq(_('mullusk'), 'bacon')
|
||||||
|
# Test installation of other methods
|
||||||
|
import __builtin__
|
||||||
|
t.install(unicode=True, names=["gettext", "lgettext"])
|
||||||
|
eq(_, t.ugettext)
|
||||||
|
eq(__builtin__.gettext, t.ugettext)
|
||||||
|
eq(lgettext, t.lgettext)
|
||||||
|
del __builtin__.gettext
|
||||||
|
del __builtin__.lgettext
|
||||||
|
|
||||||
|
|
||||||
class GettextTestCase2(GettextBaseTest):
|
class GettextTestCase2(GettextBaseTest):
|
||||||
|
|
|
@ -366,6 +366,9 @@ Extension Modules
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Patch #1349274: gettext.install() now optionally installs additional
|
||||||
|
translation functions other than _() in the builtin namespace.
|
||||||
|
|
||||||
- Patch #1337756: fileinput now accepts Unicode filenames.
|
- Patch #1337756: fileinput now accepts Unicode filenames.
|
||||||
|
|
||||||
- Patch #1373643: The chunk module can now read chunks larger than
|
- Patch #1373643: The chunk module can now read chunks larger than
|
||||||
|
|
Loading…
Reference in New Issue