From d8b66c7c1bb28672402f2bf1e410a1ee8fc4bfb6 Mon Sep 17 00:00:00 2001 From: Mark McLoughlin Date: Mon, 1 Apr 2013 02:01:00 +0100 Subject: 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 --- openstack/common/gettextutils.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'openstack/common') diff --git a/openstack/common/gettextutils.py b/openstack/common/gettextutils.py index 1e66538..efc6ec2 100644 --- a/openstack/common/gettextutils.py +++ b/openstack/common/gettextutils.py @@ -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) -- cgit