diff --git a/report_aeroo/report_aeroo.py b/report_aeroo/report_aeroo.py index 15ab64f2..b229864b 100644 --- a/report_aeroo/report_aeroo.py +++ b/report_aeroo/report_aeroo.py @@ -574,10 +574,29 @@ def create_aeroo_report(self, cr, uid, ids, data, report_xml, context=None, outp basic.Serializer.add_custom_property(module_info['website'], 'URL') basic.Serializer.add_creation_date(time.strftime('%Y-%m-%dT%H:%M:%S')) + # stream filter function for translation + def _translate_stream(stream): + for kind, data, pos in stream: + result = (kind, data, pos) + if kind == 'TEXT' and len(data) > 3: + result = ( + kind, + pool.get('ir.translation')._get_source( + cr, uid, report_xml.report_name, + report_xml.report_type, + oo_parser.localcontext.get( + 'lang', + oo_parser.localcontext['user_lang']), + data), + pos) + yield result + try: if deferred: deferred.set_status(_('Generate document')) - data = basic.generate(**oo_parser.localcontext).render().getvalue() + data = basic.generate(**oo_parser.localcontext)\ + .filter(_translate_stream)\ + .render().getvalue() except osv.except_osv, e: raise except Exception, e: diff --git a/report_aeroo/translate.py b/report_aeroo/translate.py index 4bec691e..09fad7b9 100644 --- a/report_aeroo/translate.py +++ b/report_aeroo/translate.py @@ -30,6 +30,12 @@ from openerp.tools import misc from openerp.tools import osutil from babel.messages import extract +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO +from aeroolib.plugins.opendocument import Template, OOSerializer +import base64 import openerp _logger = logging.getLogger(__name__) @@ -169,6 +175,26 @@ def get_root_view(xml_id): trans_ids = trans_obj.search(cr, uid, [('type', '=', 'report'),('res_id', '=', obj.id)]) for t in trans_obj.read(cr, uid, trans_ids, ['name','src']): push_translation(module, "report", t['name'], xml_name, t['src'].encode('UTF-8')) + if obj.in_format in ['oo-odt', 'oo-ods']\ + and obj.report_sxw_content: + template_io = StringIO() + template_io.write( + base64.decodestring(obj.report_sxw_content)) + serializer = OOSerializer(template_io) + basic = Template(source=template_io, serializer=serializer) + + def push_oo_translations(nodes): + for node in nodes: + if not isinstance(node, tuple): + continue + if node[0] == 'TEXT': + push_translation( + module, obj.report_type, name, 0, + node[1].encode('UTF-8'), [str(node[2][2])]) + if node[0] == 'SUB': + for n in node[1]: + push_oo_translations(n) + push_oo_translations(basic.stream) ############################## else: if obj.report_rml: