Add a gettextutils.install() helper function
Part of fixing bug #995287 Every top-level script in every project needs to call gettext.install() so that a _() builtin function is installed and strings are translated using the correct translation domain. However, translations are always installed in the default localedir (which is commonly '/usr/share/locale') and, in cases like devstack, may be found in a project-specific localedir. To support such a use case we should have project-specific environment variables for overriding the default value of localedir - e.g. NOVA_LOCALEDIR. Add a new gettextutils.install() helper method to make this as easy as possible for projects to get right. Change-Id: I6c8549c8ff00797c96f2dd4b0b5266d18d77aa19
This commit is contained in:
parent
fe8f5c64eb
commit
6072f65d5e
|
@ -24,6 +24,7 @@ Usual usage in an openstack.common module:
|
|||
"""
|
||||
|
||||
import gettext
|
||||
import os
|
||||
|
||||
|
||||
t = gettext.translation('oslo', 'locale', fallback=True)
|
||||
|
@ -31,3 +32,19 @@ t = gettext.translation('oslo', 'locale', fallback=True)
|
|||
|
||||
def _(msg):
|
||||
return t.ugettext(msg)
|
||||
|
||||
|
||||
def install(domain):
|
||||
"""Install a _() function using the given translation domain.
|
||||
|
||||
Given a translation domain, install a _() function using gettext's
|
||||
install() function.
|
||||
|
||||
The main difference from gettext.install() is that we allow
|
||||
overriding the default localedir (e.g. /usr/share/locale) using
|
||||
a translation-domain-specific environment variable (e.g.
|
||||
NOVA_LOCALEDIR).
|
||||
"""
|
||||
gettext.install(domain,
|
||||
localedir=os.environ.get(domain.upper() + '_LOCALEDIR'),
|
||||
unicode=True)
|
||||
|
|
|
@ -17,7 +17,9 @@
|
|||
|
||||
import logging
|
||||
|
||||
from openstack.common.gettextutils import _
|
||||
import mock
|
||||
|
||||
from openstack.common import gettextutils
|
||||
from tests import utils
|
||||
|
||||
|
||||
|
@ -27,4 +29,16 @@ LOG = logging.getLogger(__name__)
|
|||
class GettextTest(utils.BaseTestCase):
|
||||
|
||||
def test_gettext_does_not_blow_up(self):
|
||||
LOG.info(_('test'))
|
||||
LOG.info(gettextutils._('test'))
|
||||
|
||||
def test_gettext_install_looks_up_localedir(self):
|
||||
with mock.patch('os.environ.get') as environ_get:
|
||||
with mock.patch('gettext.install') as gettext_install:
|
||||
environ_get.return_value = '/foo/bar'
|
||||
|
||||
gettextutils.install('blaa')
|
||||
|
||||
environ_get.assert_called_once_with('BLAA_LOCALEDIR')
|
||||
gettext_install.assert_called_once_with('blaa',
|
||||
localedir='/foo/bar',
|
||||
unicode=True)
|
||||
|
|
Loading…
Reference in New Issue