Package Gnumed :: Package pycommon :: Module gmI18N
[frames] | no frames]

Module gmI18N

source code

GNUmed client internationalization/localization.

All i18n/l10n issues should be handled through this modules.

Theory of operation:

To activate proper locale settings and translation services you need to

- import this module
- call activate_locale()
- call install_domain()

The translating method gettext.gettext() will then be
installed into the global (!) namespace as _(). Your own
modules thus need not do _anything_ (not even import gmI18N)
to have _() available to them for translating strings. You
need to make sure, however, that gmI18N is imported in your
main module before any of the modules using it. In order to
resolve circular references involving modules that
absolutely _have_ to be imported before this module you can
explicitly import gmI18N into them at the very beginning.

The text domain (i.e. the name of the message catalog file)
is derived from the name of the main executing script unless
explicitly passed to install_domain(). The language you
want to translate to is derived from environment variables
by the locale system unless explicitly passed to
install_domain().

This module searches for message catalog files in 3 main locations:

 - standard POSIX places (/usr/share/locale/ ...)
 - below "${YOURAPPNAME_DIR}/po/"
 - below "<directory of binary of your app>/../po/"

For DOS/Windows I don't know of standard places so probably
only the last option will work. I don't know a thing about
classic Mac behaviour. New Macs are POSIX, of course.

It will then try to install candidates and *verify* whether
the translation works by checking for the translation of a
tag within itself (this is similar to the self-compiling
compiler inserting a backdoor into its self-compiled
copies).

If none of this works it will fall back to making _() a noop.

@copyright: authors


Author: H. Herb <hherb@gnumed.net>, I. Haywood <i.haywood@ugrad.unimelb.edu.au>, K. Hilbert <Karsten.Hilbert@gmx.net>

License: GPL v2 or later (details at http://www.gnu.org)

Functions
 
activate_locale()
Get system locale from environment.
source code
 
install_domain(domain=None, language=None, prefer_local_catalog=False)
Install a text domain suitable for the main script.
source code
 
get_encoding()
Try to get a sane encoding.
source code
Variables
  system_locale = ''
  system_locale_level = {}
  __orig_tag__ = u'Translate this or i18n into <en_EN> will not ...
  __package__ = 'Gnumed.pycommon'

Imports: sys, os, regex, locale, gettext, logging, codecs


Function Details

get_encoding()

source code 

Try to get a sane encoding.

On MaxOSX locale.setlocale(locale.LC_ALL, '') does not have the desired effect, so that locale.getlocale()[1] still returns None. So in that case try to fallback to locale.getpreferredencoding().

<sys.getdefaultencoding()>

  • what Python itself uses to convert string <-> unicode when no other encoding was specified
  • ascii by default
  • can be set in site.py and sitecustomize.py

<locale.getlocale()[1]>

  • what the current locale is *actually* using as the encoding for text conversion

<locale.getpreferredencoding()>

  • what the current locale would *recommend* using as the encoding for text conversion

Variables Details

__orig_tag__

Value:
u'Translate this or i18n into <en_EN> will not work properly !'