Merge lp:~therp-nl/aeroo/7.0_translate_plain_text_oo into lp:aeroo

Proposed by Holger Brunn (Therp)
Status: Needs review
Proposed branch: lp:~therp-nl/aeroo/7.0_translate_plain_text_oo
Merge into: lp:aeroo
Diff against target: 74 lines (+44/-1)
2 files modified
report_aeroo/report_aeroo.py (+19/-1)
report_aeroo/translate.py (+25/-0)
To merge this branch: bzr merge lp:~therp-nl/aeroo/7.0_translate_plain_text_oo
Reviewer Review Type Date Requested Status
Alistek developers - http://www.alistek.com Pending
Review via email: mp+179006@code.launchpad.net

Description of the change

This enumerates all text nodes in a document and offers them to be translated. On rendering, this translations are picked up, taking setLang from the document into account.

To post a comment you must log in.
Revision history for this message
Stefan Rijnhart (Opener) (stefan-opener) wrote :

Unmerged revisions

6. By Holger Brunn (Therp)

[IMP] make plain text in openoffice documents translatable

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'report_aeroo/report_aeroo.py'
2--- report_aeroo/report_aeroo.py 2013-05-16 15:53:25 +0000
3+++ report_aeroo/report_aeroo.py 2013-08-07 15:37:25 +0000
4@@ -525,8 +525,26 @@
5 basic.Serializer.add_custom_property(module_info['website'], 'URL')
6 basic.Serializer.add_creation_date(time.strftime('%Y-%m-%dT%H:%M:%S'))
7
8+ # stream filter function for translation
9+ def _translate_stream(stream):
10+ for kind, data, pos in stream:
11+ result = (kind, data, pos)
12+ if kind == 'TEXT' and len(data) > 3:
13+ result = (
14+ kind,
15+ pool.get('ir.translation')._get_source(
16+ cr, uid, report_xml.report_name,
17+ report_xml.report_type,
18+ oo_parser.localcontext.get('lang',
19+ oo_parser.localcontext['user_lang']),
20+ data),
21+ pos)
22+ yield result
23+
24 try:
25- data = basic.generate(**oo_parser.localcontext).render().getvalue()
26+ data = basic.generate(**oo_parser.localcontext)\
27+ .filter(_translate_stream)\
28+ .render().getvalue()
29 except osv.except_osv, e:
30 raise
31 except Exception, e:
32
33=== modified file 'report_aeroo/translate.py'
34--- report_aeroo/translate.py 2013-05-16 15:53:25 +0000
35+++ report_aeroo/translate.py 2013-08-07 15:37:25 +0000
36@@ -32,6 +32,12 @@
37 from tools.misc import UpdateableStr
38 from tools import osutil
39 from babel.messages import extract
40+try:
41+ from cStringIO import StringIO
42+except ImportError:
43+ from StringIO import StringIO
44+from aeroolib.plugins.opendocument import Template, OOSerializer
45+import base64
46
47 _logger = logging.getLogger(__name__)
48
49@@ -190,6 +196,25 @@
50 trans_ids = trans_obj.search(cr, uid, [('type', '=', 'report'),('res_id', '=', obj.id)])
51 for t in trans_obj.read(cr, uid, trans_ids, ['name','src']):
52 push_translation(module, "report", t['name'], xml_name, t['src'])
53+ if obj.in_format in ['oo-odt', 'oo-ods']\
54+ and obj.report_sxw_content:
55+ template_io = StringIO()
56+ template_io.write(
57+ base64.decodestring(obj.report_sxw_content))
58+ serializer = OOSerializer(template_io)
59+ basic = Template(source=template_io, serializer=serializer)
60+ def push_oo_translations(nodes):
61+ for node in nodes:
62+ if not isinstance(node, tuple):
63+ continue
64+ if node[0] == 'TEXT':
65+ push_translation(
66+ module, obj.report_type, name, 0,
67+ node[1], [str(node[2][2])])
68+ if node[0] == 'SUB':
69+ for n in node[1]:
70+ push_oo_translations(n)
71+ push_oo_translations(basic.stream)
72 ##############################
73 else:
74 if obj.report_rml:

Subscribers

People subscribed via source and target branches