Internationalization¶
The elib.intl module provides enhanced internationalization (I18N) services for your Python modules and applications.
elib.intl wraps Python’s gettext()
functionality and adds the following on
Microsoft Windows systems:
- automatic detection of the current screen language (not necessarily the same as the installation language) provided by MUI packs,
- makes sure internationalized C libraries which internally invoke gettext() or dcgettext() can properly locate their message catalogs. This fixes a known limitation in gettext’s Windows support when using eg. gtk.builder or gtk.glade.
See http://www.gnu.org/software/gettext/FAQ.html#windows_setenv for more information.
The elib.intl module defines the following functions:
-
elib.intl.
install
(domain, localedir)¶ Parameters: - domain – translation domain
- localedir – locale directory
Installs the function _() in Python’s builtin namespace, based on domain and localedir. Codeset is always UTF-8.
As seen below, you usually mark the strings in your application that are candidates for translation, by wrapping them in a call to the _() function, like this:
import elib.intl elib.intl.install('myapplication', '/path/to/usr/share/locale') print _('This string will be translated.')
Note that this is only one way, albeit the most convenient way, to make the _() function available to your application. Because it affects the entire application globally, and specifically Python’s built-in namespace, localized modules should never install _(). Instead, you should use
elib.intl.install_module()
to make _() available to your module.
-
elib.intl.
install_module
(domain, localedir)¶ Parameters: - domain – translation domain
- localedir – locale directory
Returns: an anonymous function object, based on domain and localedir. Codeset is always UTF-8.
You may find this function usefull when writing localized modules. Use this code to make _() available to your module:
import elib.intl _ = elib.intl.install_module('mymodule', '/path/to/usr/share/locale') print _('This string will be translated.')
When writing a package, you can usually do this in the package’s __init__.py file and import the _() function from the package namespace as needed.