From 32d230e1fc1d5f8ea2f735a1d9893599c793264c Mon Sep 17 00:00:00 2001
From: Yoshinori Okuji <yo@nexedi.com>
Date: Tue, 20 Jun 2006 10:04:33 +0000
Subject: [PATCH] Add a new method "translate". Make sure that __str__ returns
 a string object. Add __unicode__ to return a unicode object.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@8084 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5Type/Message.py | 43 ++++++++++++++++++++++++++++---------
 1 file changed, 33 insertions(+), 10 deletions(-)

diff --git a/product/ERP5Type/Message.py b/product/ERP5Type/Message.py
index 0d016e58c5..c7dd9b6f70 100644
--- a/product/ERP5Type/Message.py
+++ b/product/ERP5Type/Message.py
@@ -86,24 +86,24 @@ class Message(Persistent):
     self.mapping = o.mapping
     self.default = o.default
 
-  def __str__(self):
+  def translate(self):
     """
-    Return the translated message
+    Return the translated message. If the original is a string object,
+    the return value is a string object. If it is a unicode object,
+    the return value is a unicode object.
     """
     request = get_request()
     if request is not None:
       context = request['PARENTS'][0]
       translation_service = getGlobalTranslationService()
+
+    message = self.message
     if self.domain is None or request is None or translation_service is None :
       # Map the translated string with given parameters
-      message = self.message
       if type(self.mapping) is type({}):
         if isinstance(message, unicode) :
-          message = message.encode('utf8')
+          message = message.encode('utf-8')
         message = Template(message).substitute(self.mapping)
-        if not isinstance(message, unicode):
-          message = message.decode('utf8')
-      return message
     else:
       translated_message = translation_service.translate(
                                              self.domain,
@@ -112,9 +112,32 @@ class Message(Persistent):
                                              context=context,
                                              default=self.default)
       if translated_message is not None:
-        return translated_message.encode('utf8')
-      else:
-        return self.message
+        message = translated_message
+
+    if isinstance(self.message, str) and isinstance(message, unicode):
+      message = message.encode('utf-8')
+    elif isinstance(self.message, unicode) and isinstance(message, str):
+      message = message.decode('utf-8')
+
+    return message
+
+  def __str__(self):
+    """
+    Return the translated message as a string object.
+    """
+    message = self.translate()
+    if isinstance(message, unicode):
+      message = message.encode('utf-8')
+    return message
+
+  def __unicode__(self):
+    """
+    Return the translated message as a unicode object.
+    """
+    message = self.translate()
+    if isinstance(message, str):
+      message = message.decode('utf-8')
+    return message
 
 InitializeClass(Message)
 allow_class(Message)
-- 
2.30.9