Coverage for tw2/core/i18n.py : 74%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
2import gettext
3import os
5import six
7try:
8 from pkg_resources import resource_filename
9except ImportError:
10 resource_filename = None
12from speaklater import make_lazy_string
14from . import core
16import logging
17log = logging.getLogger(__name__)
20def get_localedir():
21 """Get the location of locales."""
22 locale_dir = ''
23 if resource_filename is not None:
24 try:
25 locale_dir = resource_filename(__name__, "i18n")
26 except NotImplementedError:
27 pass
28 if not hasattr(os, 'access'):
29 return os.path.join(os.path.dirname(__file__), 'i18n')
30 if os.access(locale_dir, os.R_OK | os.X_OK):
31 return locale_dir
32 locale_dir = os.path.join(os.path.dirname(__file__), 'i18n')
33 if not os.access(locale_dir, os.R_OK | os.X_OK):
34 locale_dir = os.path.normpath('/usr/share/locale')
35 return locale_dir
38def get_translator(lang=None, domain='tw2core', localedir=get_localedir()):
39 if six.PY3:
40 return gettext.translation(domain=domain, languages=lang,
41 localedir=localedir, fallback=True).gettext
42 else:
43 return gettext.translation(domain=domain, languages=lang,
44 localedir=localedir, fallback=True).ugettext
47def tw2_translation_string(sval):
49 def lookup_provided_translator(_sval):
50 mw = core.request_local().get('middleware')
51 if not mw:
52 return _sval
54 try:
55 translator = get_translator(mw.config.get_lang())
56 except AttributeError:
57 try:
58 translator = mw.config.translator
59 except AttributeError:
60 return _sval
62 return translator(_sval)
64 return make_lazy_string(lambda: lookup_provided_translator(sval))
67_ = tw2_translation_string
69__all__ = [
70 'tw2_translation_string',
71 '_',
72]