
Reviewed-by: Leonardo Garcia <lagarcia@br.ibm.com> On 02/09/2014 08:47 PM, Aline Manera wrote:
From: Aline Manera <alinefm@br.ibm.com>
KimchiException will be the base for all other Exception types in Kimchi It will translate the error message before raising it. Then UI can use the message directly. That way we avoid duplicating messages on UI and backend. Also add i18n.py which will contain all the backend messages to be translated.
Signed-off-by: Aline Manera <alinefm@br.ibm.com> --- plugins/sample/Makefile.am | 1 + plugins/sample/__init__.py | 7 ++++++- plugins/sample/i18n.py | 29 +++++++++++++++++++++++++++++ src/kimchi/Makefile.am | 1 + src/kimchi/exception.py | 28 ++++++++++++++++++++++++++++ src/kimchi/i18n.py | 29 +++++++++++++++++++++++++++++ src/kimchi/root.py | 3 +++ 7 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 plugins/sample/i18n.py create mode 100644 src/kimchi/i18n.py
diff --git a/plugins/sample/Makefile.am b/plugins/sample/Makefile.am index 0cb5723..afab703 100644 --- a/plugins/sample/Makefile.am +++ b/plugins/sample/Makefile.am @@ -26,4 +26,5 @@ EXTRA_DIST = \ __init__.py \ API.json \ model.py \ + i18n.py \ sample.conf diff --git a/plugins/sample/__init__.py b/plugins/sample/__init__.py index a1fe44e..fff9aa7 100644 --- a/plugins/sample/__init__.py +++ b/plugins/sample/__init__.py @@ -27,8 +27,10 @@ import os from cherrypy import expose
+from kimchi.config import PluginPaths from kimchi.control.base import Collection, Resource -from model import Model +from plugins.sample.i18n import messages +from plugins.sample.model import Model
model = Model() @@ -40,6 +42,9 @@ class Drawings(Resource): self.description = Description(model) self.rectangles = Rectangles(model) self.circles = Circles(model) + self.paths = PluginPaths('sample') + self.domain = 'sample' + self.messages = messages self.api_schema = json.load(open(os.path.join(os.path.dirname( os.path.abspath(__file__)), 'API.json')))
diff --git a/plugins/sample/i18n.py b/plugins/sample/i18n.py new file mode 100644 index 0000000..204460c --- /dev/null +++ b/plugins/sample/i18n.py @@ -0,0 +1,29 @@ +# +# Project Kimchi +# +# Copyright IBM, Corp. 2013 +# +# Authors: +# Aline Manera <alinefm@linux.vnet.ibm.com> +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +import gettext + +_ = gettext.gettext + + +messages = { +} diff --git a/src/kimchi/Makefile.am b/src/kimchi/Makefile.am index 1653c0c..51a496e 100644 --- a/src/kimchi/Makefile.am +++ b/src/kimchi/Makefile.am @@ -32,6 +32,7 @@ kimchi_PYTHON = \ distroloader.py \ exception.py \ featuretests.py \ + i18n.py \ iscsi.py \ isoinfo.py \ mockmodel.py \ diff --git a/src/kimchi/exception.py b/src/kimchi/exception.py index a37015b..7fcce54 100644 --- a/src/kimchi/exception.py +++ b/src/kimchi/exception.py @@ -20,6 +20,34 @@ # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+import cherrypy +import gettext + + +from kimchi.template import get_lang, validate_language + + +class KimchiException(Exception): + def __init__(self, code='', args={}): + lang = validate_language(get_lang()) + paths = cherrypy.request.app.root.paths + domain = cherrypy.request.app.root.domain + messages = cherrypy.request.app.root.messages + text = messages.get(code, code) + + try: + translation = gettext.translation(domain, paths.mo_dir, [lang]) + except: + translation = gettext + + for key, value in args.iteritems(): + if not isinstance(value, unicode): + args[key] = unicode(value, 'utf-8') + + msg = unicode(translation.gettext(text), 'utf-8') % args + pattern = "%s: %s" % (code, msg) + Exception.__init__(self, pattern) +
class NotFoundError(Exception): pass diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py new file mode 100644 index 0000000..204460c --- /dev/null +++ b/src/kimchi/i18n.py @@ -0,0 +1,29 @@ +# +# Project Kimchi +# +# Copyright IBM, Corp. 2013 +# +# Authors: +# Aline Manera <alinefm@linux.vnet.ibm.com> +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +import gettext + +_ = gettext.gettext + + +messages = { +} diff --git a/src/kimchi/root.py b/src/kimchi/root.py index ce4a49c..2b5c4b8 100644 --- a/src/kimchi/root.py +++ b/src/kimchi/root.py @@ -28,6 +28,7 @@ import os
from kimchi import auth from kimchi import template +from kimchi.i18n import messages from kimchi.config import paths from kimchi.control import sub_nodes from kimchi.control.base import Resource @@ -95,6 +96,8 @@ class KimchiRoot(Root): self.api_schema = json.load(open(os.path.join(paths.src_dir, 'API.json'))) self.paths = paths + self.domain = 'kimchi' + self.messages = messages
@cherrypy.expose def login(self, *args):