~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/i18n.py

  • Committer: Tarmac
  • Author(s): Vincent Ladeuil
  • Date: 2017-01-30 14:42:05 UTC
  • mfrom: (6620.1.1 trunk)
  • Revision ID: tarmac-20170130144205-r8fh2xpmiuxyozpv
Merge  2.7 into trunk including fix for bug #1657238 [r=vila]

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 
23
23
"""i18n and l10n support for Bazaar."""
24
24
 
 
25
from __future__ import absolute_import
 
26
 
25
27
import gettext as _gettext
26
28
import os
27
29
import sys
28
30
 
 
31
 
29
32
_translations = None
30
33
 
31
34
 
82
85
 
83
86
 
84
87
def install(lang=None):
85
 
    """Enables gettext translations."""
 
88
    """Enables gettext translations in bzr."""
86
89
    global _translations
87
90
    if installed():
88
91
        return
 
92
    _translations = install_translations(lang)
 
93
 
 
94
 
 
95
def install_translations(lang=None, domain='bzr', locale_base=None):
 
96
    """Create a gettext translation object.
 
97
    
 
98
    :param lang: language to install.
 
99
    :param domain: translation domain to install.
 
100
    :param locale_base: plugins can specify their own directory.
 
101
 
 
102
    :returns: a gettext translations object to use
 
103
    """
89
104
    if lang is None:
90
105
        lang = _get_current_locale()
91
106
    if lang is not None:
92
107
        languages = lang.split(':')
93
108
    else:
94
109
        languages = None
95
 
    _translations = _gettext.translation(
96
 
            'bzr',
97
 
            localedir=_get_locale_dir(),
 
110
    translation = _gettext.translation(
 
111
            domain,
 
112
            localedir=_get_locale_dir(locale_base),
98
113
            languages=languages,
99
114
            fallback=True)
 
115
    return translation
 
116
 
 
117
 
 
118
def add_fallback(fallback):
 
119
    """
 
120
    Add a fallback translations object.  Typically used by plugins.
 
121
 
 
122
    :param fallback: gettext.GNUTranslations object
 
123
    """
 
124
    install()
 
125
    _translations.add_fallback(fallback)
100
126
 
101
127
 
102
128
def uninstall():
105
131
    _translations = None
106
132
 
107
133
 
108
 
def _get_locale_dir():
109
 
    if hasattr(sys, 'frozen'):
110
 
        base = os.path.dirname(
111
 
                unicode(sys.executable, sys.getfilesystemencoding()))
 
134
def _get_locale_dir(base):
 
135
    """Returns directory to find .mo translations file in, either local or system
 
136
 
 
137
    :param base: plugins can specify their own local directory
 
138
    """
 
139
    fs_enc = sys.getfilesystemencoding()
 
140
    if getattr(sys, 'frozen', False):
 
141
        if base is None:
 
142
            base = os.path.dirname(unicode(sys.executable, fs_enc))
112
143
        return os.path.join(base, u'locale')
113
144
    else:
114
 
        base = os.path.dirname(unicode(__file__, sys.getfilesystemencoding()))
 
145
        if base is None:
 
146
            base = os.path.dirname(unicode(__file__, fs_enc))
115
147
        dirpath = os.path.realpath(os.path.join(base, u'locale'))
116
148
        if os.path.exists(dirpath):
117
149
            return dirpath
118
 
        else:
119
 
            return '/usr/share/locale'
 
150
    return os.path.join(unicode(sys.prefix, fs_enc), u"share", u"locale")
120
151
 
121
152
 
122
153
def _check_win32_locale():
160
191
        if lang:
161
192
            return lang
162
193
    return None
 
194
 
 
195
 
 
196
def load_plugin_translations(domain):
 
197
    """Load the translations for a specific plugin.
 
198
 
 
199
    :param domain: Gettext domain name (usually 'bzr-PLUGINNAME')
 
200
    """
 
201
    locale_base = os.path.dirname(
 
202
        unicode(__file__, sys.getfilesystemencoding()))
 
203
    translation = install_translations(domain=domain,
 
204
        locale_base=locale_base)
 
205
    add_fallback(translation)
 
206
    return translation