From de218d0d390e1f38d7f5345095c08e2d754f653e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Calonne?= <aurel@nexedi.com> Date: Mon, 13 Mar 2006 19:55:52 +0000 Subject: [PATCH] add a Message class to encapsulate domain, message and mapping git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@6086 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5Form/Message.py | 93 +++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100755 product/ERP5Form/Message.py diff --git a/product/ERP5Form/Message.py b/product/ERP5Form/Message.py new file mode 100755 index 0000000000..79dd1b0a92 --- /dev/null +++ b/product/ERP5Form/Message.py @@ -0,0 +1,93 @@ +############################################################################## +# +# Copyright (c) 2006 Nexedi SARL and Contributors. All Rights Reserved. +# Aurélien Calonne <aurel@nexedi.com> +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + +from Globals import InitializeClass, Persistent +from AccessControl import ClassSecurityInfo +from Products.PythonScripts.Utility import allow_class +from Products.PageTemplates.GlobalTranslationService import getGlobalTranslationService +from Globals import get_request +from cPickle import dumps, loads +from base64 import b64encode, b64decode + +try: + from string import Template +except ImportError: + from Products.ERP5Type.patches.string import Template + + +class Message(Persistent): + """ + This class encapsulates message, mapping and domain for a given message + """ + + security = ClassSecurityInfo() + security.declareObjectPublic() + + def __init__(self, domain = None, message = '', mapping = None,): + self.message = message + self.mapping = mapping + self.domain = domain + + security.declarePublic('dump') + def dump(self): + """ + Return a pickle version of the object + """ + return b64encode(dumps(self, 2)) + + security.declarePublic('load') + def load(self, string): + """ + Get properties from pickle version + """ + o = loads(b64decode(string)) + self.message = o.message + self.domain = o.domain + self.mapping = o.mapping + + def __str__(self): + """ + Return the translated message + """ + context = get_request()['PARENTS'][0] + translation_service = getGlobalTranslationService() + if self.domain is None or translation_service is None : + # Map the translated string with given parameters + if type(self.mapping) is type({}): + if isinstance(translated_str, unicode) : + translated_str = self.message.encode('utf8') + self.message = Template(self.message).substitute(mapping) + if not isinstance(self.message, unicode): + self.message = self.message.decode('utf8') + return self.message + else: + return translation_service.translate(self.domain, self.message, mapping=self.mapping, context=context).encode('utf8') + + +InitializeClass(Message) +allow_class(Message) -- 2.30.9