From 6bd416dfaa77633ab5ca5bf6f46ec9b64251e8ee Mon Sep 17 00:00:00 2001 From: Lianhao Lu Date: Wed, 3 Apr 2013 15:36:50 +0800 Subject: [PATCH] Remove gettext.install from ceilometer/__init__.py The gettext.install() installs a builtin _() function for translation purpose. If it is called multiple times, the last call will win and the translation domain set by the last call will be used. When the ceilometer.compute.nova_notifier driver used within nova, the gettext.install() call in ceilometer/__init__.py would change the previous translation domain set by nova. This is not what we want. We have to remove this shortcut, and put the gettext.install() call early on in a top level script. Instead of directly calling gettext.install(), we leverage the gettextutils.install() in openstack.common, so we can specifiy the localedir for ceilometer through the environment variable CEILOMETER_LOCALEDIR. This is part of the blueprint gettext-i18n-issue. Change-Id: Icb2dcfb319778042cf569dcb607f579d1e0fda3a --- bin/ceilometer-agent-central | 4 ++++ bin/ceilometer-agent-compute | 4 ++++ bin/ceilometer-api | 3 +++ bin/ceilometer-collector | 3 +++ bin/ceilometer-dbsync | 3 +++ bin/ceilometer-send-counter | 3 +++ ceilometer/__init__.py | 4 ---- ceilometer/openstack/common/gettextutils.py | 23 ++++++++++++++++++--- tools/hacking.py | 2 ++ 9 files changed, 42 insertions(+), 7 deletions(-) diff --git a/bin/ceilometer-agent-central b/bin/ceilometer-agent-central index a4cfcba419..919f16d7c0 100755 --- a/bin/ceilometer-agent-central +++ b/bin/ceilometer-agent-central @@ -22,6 +22,10 @@ eventlet.monkey_patch() import sys from oslo.config import cfg + +from ceilometer.openstack.common import gettextutils +gettextutils.install('ceilometer') + from ceilometer.central import manager from ceilometer.service import prepare_service from ceilometer.openstack.common import service diff --git a/bin/ceilometer-agent-compute b/bin/ceilometer-agent-compute index 95770740ab..27dff94713 100755 --- a/bin/ceilometer-agent-compute +++ b/bin/ceilometer-agent-compute @@ -22,6 +22,10 @@ eventlet.monkey_patch() import sys from oslo.config import cfg + +from ceilometer.openstack.common import gettextutils +gettextutils.install('ceilometer') + from ceilometer.compute import manager from ceilometer.service import prepare_service from ceilometer.openstack.common import service diff --git a/bin/ceilometer-api b/bin/ceilometer-api index ffe24a4659..06435ba24d 100755 --- a/bin/ceilometer-api +++ b/bin/ceilometer-api @@ -24,6 +24,9 @@ from wsgiref import simple_server from oslo.config import cfg +from ceilometer.openstack.common import gettextutils +gettextutils.install('ceilometer') + from ceilometer.api import app from ceilometer import service diff --git a/bin/ceilometer-collector b/bin/ceilometer-collector index 4fa81513b5..5f3586cf33 100755 --- a/bin/ceilometer-collector +++ b/bin/ceilometer-collector @@ -23,6 +23,9 @@ import sys from oslo.config import cfg +from ceilometer.openstack.common import gettextutils +gettextutils.install('ceilometer') + from ceilometer.collector import service as coll_service from ceilometer.service import prepare_service from ceilometer.openstack.common import service diff --git a/bin/ceilometer-dbsync b/bin/ceilometer-dbsync index 26eb74864f..f7926367b4 100755 --- a/bin/ceilometer-dbsync +++ b/bin/ceilometer-dbsync @@ -22,6 +22,9 @@ import sys from oslo.config import cfg +from ceilometer.openstack.common import gettextutils +gettextutils.install('ceilometer') + from ceilometer import service from ceilometer import storage diff --git a/bin/ceilometer-send-counter b/bin/ceilometer-send-counter index e8c6209286..33b8adbc5e 100755 --- a/bin/ceilometer-send-counter +++ b/bin/ceilometer-send-counter @@ -26,6 +26,9 @@ import sys from oslo.config import cfg from stevedore import dispatch +from ceilometer.openstack.common import gettextutils +gettextutils.install('ceilometer') + from ceilometer import counter from ceilometer import pipeline from ceilometer import service diff --git a/ceilometer/__init__.py b/ceilometer/__init__.py index 9ed525a335..8a0b49a4f6 100644 --- a/ceilometer/__init__.py +++ b/ceilometer/__init__.py @@ -13,7 +13,3 @@ # License for the specific language governing permissions and limitations # under the License. # - -import gettext - -gettext.install('ceilometer', unicode=1) diff --git a/ceilometer/openstack/common/gettextutils.py b/ceilometer/openstack/common/gettextutils.py index 589d3dbeba..414d5cec23 100644 --- a/ceilometer/openstack/common/gettextutils.py +++ b/ceilometer/openstack/common/gettextutils.py @@ -24,10 +24,27 @@ Usual usage in an openstack.common module: """ import gettext +import os - -t = gettext.translation('ceilometer', 'locale', fallback=True) +_localedir = os.environ.get('ceilometer'.upper() + '_LOCALEDIR') +_t = gettext.translation('ceilometer', localedir=_localedir, fallback=True) def _(msg): - return t.ugettext(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, + os.environ.get(domain.upper() + '_LOCALEDIR'), + unicode=True) diff --git a/tools/hacking.py b/tools/hacking.py index 2717375b1c..459fbb9616 100755 --- a/tools/hacking.py +++ b/tools/hacking.py @@ -21,6 +21,7 @@ Built on top of pep8.py """ +import gettext import imp import inspect import logging @@ -645,6 +646,7 @@ imports_on_separate_lines_N301_compliant = r""" """ if __name__ == "__main__": + gettext.install('ceilometer', unicode=True) #include nova path sys.path.append(os.getcwd()) #Run once tests (not per line)