[IMP] backport of rev odo@openerp.com-20120202143210-05p1w24t6u77cyv8 of trunk: tools...
authorChristophe Simonis <chs@openerp.com>
Thu, 9 Feb 2012 10:52:03 +0000 (11:52 +0100)
committerChristophe Simonis <chs@openerp.com>
Thu, 9 Feb 2012 10:52:03 +0000 (11:52 +0100)
Original commit information:
------------------------------------------------------------
revno: 4002
revision-id: odo@openerp.com-20120202143210-05p1w24t6u77cyv8
parent: xmo@openerp.com-20120131154023-lbxqpdirjk9df694
committer: Olivier Dony <odo@openerp.com>
branch nick: trunk
timestamp: Thu 2012-02-02 15:32:10 +0100
message:
  [IMP] tools.translate: be more lenient and accept standart gettext source annotations

   The GetText spec says that PO auto-comments indicating
    the source location have this form:
     #: /path/to/file:lineno
    However OpenERP's POT export system defaults to a modified
    version of this format with an extra 'type' field:
     #: type:/path/to/file:lineno
    The babel extractors we use for openerp-web's translations
    have the GetText format hardcoded, so it's a good idea
    to be more lenient and allow the standards annotations too.
    We can use a default 'code' type for such cases.

    For openerp-web translations the type does not matter,
    as the translations will be directly loaded by the
    web engine from the PO files and served in Javascript
   to the browser, with no typing needed.

    This patch simply avoids failing to parse updated PO files
    that will contain standard GetText annotations for the
    openerp-web related terms.

bzr revid: chs@openerp.com-20120209105203-7y9busughofi65vf

bin/tools/translate.py

index d7e2f63..aa69b39 100644 (file)
@@ -295,11 +295,14 @@ class TinyPoFile(object):
                 if line.startswith('#~ '):
                     break
                 if line.startswith('#:'):
-                    if ' ' in line[2:].strip():
-                        for lpart in line[2:].strip().split(' '):
-                            tmp_tnrs.append(lpart.strip().split(':',2))
-                    else:
-                        tmp_tnrs.append( line[2:].strip().split(':',2) )
+                    for lpart in line[2:].strip().split(' '):
+                        trans_info = lpart.strip().split(':',2)
+                        if trans_info and len(trans_info) == 2:
+                            # looks like the translation type is missing, which is not
+                            # unexpected because it is not a GetText standard. Default: 'code'
+                            trans_info[:0] = ['code']
+                        if trans_info and len(trans_info) == 3:
+                            tmp_tnrs.append(trans_info)
                 elif line.startswith('#,') and (line[2:].strip() == 'fuzzy'):
                     fuzzy = True
                 line = self.lines.pop(0).strip()