=== modified file 'openerp/osv/osv.py'
--- openerp/osv/osv.py	2012-01-24 12:42:52 +0000
+++ openerp/osv/osv.py	2012-04-15 19:01:03 +0000
@@ -173,6 +173,11 @@
             try:
                 if method.startswith('_'):
                     raise except_osv('Access Denied', 'Private methods (such as %s) cannot be called remotely.' % (method,))
+                
+                #Set default context for translations
+                user = pooler.get_pool(cr.dbname).get('res.users').browse (cr, uid, uid)
+                context = {'lang': user.context_lang, 'tz': user.context_tz}
+
                 res = self.execute_cr(cr, uid, obj, method, *args, **kw)
                 if res is None:
                     _logger.warning('The method %s of the object %s can not return `None` !', method, obj)

=== modified file 'openerp/tools/translate.py'
--- openerp/tools/translate.py	2012-02-06 20:31:51 +0000
+++ openerp/tools/translate.py	2012-04-15 19:01:03 +0000
@@ -203,12 +203,14 @@
         is_new_cr = False
         try:
             frame = inspect.currentframe()
+            lang = None
+            while frame and not lang:
+                lang = self._get_lang(frame)
+                frame = frame.f_back
+
             if frame is None:
                 return source
-            frame = frame.f_back
-            if not frame:
-                return source
-            lang = self._get_lang(frame)
+                
             if lang:
                 cr, is_new_cr = self._get_cr(frame)
                 if cr:

=== modified file 'openerp/workflow/wkf_service.py'
--- openerp/workflow/wkf_service.py	2011-09-24 14:52:58 +0000
+++ openerp/workflow/wkf_service.py	2012-04-15 19:01:03 +0000
@@ -40,6 +40,13 @@
     def __init__(self, name='workflow'):
         netsvc.Service.__init__(self, name)
         self.wkf_on_create_cache={}
+        
+    def _get_lang (self, cr, uid):
+        cr.execute('select context_lang from res_users where id=%s', (uid,))
+
+        for (context_lang,) in cr.fetchall():
+            return {'lang': context_lang}
+        return {'lang': 'en_US'}
 
     def clear_cache(self, cr, uid):
         self.wkf_on_create_cache[cr.dbname]={}
@@ -54,6 +61,8 @@
         :param res_id: the model instance id the workflow belongs to
         :param cr: a database cursor
         """
+        context = self._get_lang(cr, uid)
+        
         ident = (uid,res_type,res_id)
         cr.execute('select id from wkf_instance where res_id=%s and res_type=%s and state=%s', (res_id or None,res_type or None, 'active'))
         for (id,) in cr.fetchall():
@@ -70,6 +79,8 @@
         :param res_id: the model instance id the workflow belongs to
         :param cr: a database cursor
         """
+        context = self._get_lang(cr, uid)
+        
         cr.execute('select instance_id from wkf_triggers where res_id=%s and model=%s', (res_id,res_type))
         res = cr.fetchall()
         for (instance_id,) in res:
@@ -85,6 +96,8 @@
         :param res_id: the model instance id the workflow belongs to
         :param cr: a database cursor
         """
+        context = self._get_lang(cr, uid)
+        
         ident = (uid,res_type,res_id)
         instance.delete(cr, ident)
 
@@ -96,6 +109,8 @@
         :param res_id: the model instance id to own the created worfklow instance
         :param cr: a database cursor
         """
+        context = self._get_lang(cr, uid)
+        
         ident = (uid,res_type,res_id)
         self.wkf_on_create_cache.setdefault(cr.dbname, {})
         if res_type in self.wkf_on_create_cache[cr.dbname]:
@@ -118,6 +133,9 @@
         """
         result = False
         ident = (uid,res_type,res_id)
+        
+        context = self._get_lang(cr, uid)
+        
         # ids of all active workflow instances for a corresponding resource (id, model_nam)
         cr.execute('select id from wkf_instance where res_id=%s and res_type=%s and state=%s', (res_id, res_type, 'active'))
         for (id,) in cr.fetchall():
@@ -138,6 +156,8 @@
         :param new_rid: the model instance id to own the worfklow instance
         :param cr: a database cursor
         """
+        context = self._get_lang(cr, uid)
+        
         # get ids of wkf instances for the old resource (res_id)
 #CHECKME: shouldn't we get only active instances?
         cr.execute('select id, wkf_id from wkf_instance where res_id=%s and res_type=%s', (res_id, res_type))
