Package translate :: Package tools :: Module pypo2phppo

[hide private]
[frames] | no frames]

# Source Code for Module translate.tools.pypo2phppo

      1  #!/usr/bin/env python
      2  # -*- coding: utf-8 -*-
      3  #
      4  # Copyright 2009 Mozilla Corporation, Zuza Software Foundation
      5  #
      6  # This file is part of translate.
      7  #
      8  # translate is free software; you can redistribute it and/or modify
      9  # it under the terms of the GNU General Public License as published by
     10  # the Free Software Foundation; either version 2 of the License, or
     11  # (at your option) any later version.
     12  #
     13  # translate is distributed in the hope that it will be useful,
     14  # but WITHOUT ANY WARRANTY; without even the implied warranty of
     15  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16  # GNU General Public License for more details.
     17  #
     18  # You should have received a copy of the GNU General Public License
     19  # along with translate; if not, write to the Free Software
     20  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     21
     22  """ Convert Python format .po files to PHP format .po files """
     23
     24  import re
     25
     26  from translate.storage import po
     27  from translate.misc.multistring import multistring
     28
     29
     30 -class pypo2phppo:
     31
     32 -    def convertstore(self, inputstore):
     33          """Converts a given .po file (Python Format) to a PHP format .po file, the difference being
     34              how variable substitutions work.  PHP uses a %1$s format, and Python uses
     35              a {0} format (zero indexed).  This method will convert, e.g.:
     36                  I have {1} apples and {0} oranges
     37                      to
     38                  I have %2$s apples and %1$s oranges
     39              This method ignores strings with %s as both languages will recognize that.
     40          """
     41          thetargetfile = po.pofile(inputfile="")
     42
     43          for unit in inputstore.units:
     44              newunit = self.convertunit(unit)
     45              thetargetfile.addunit(newunit)
     46          return thetargetfile
     47
     48 -    def convertunit(self, unit):
     49          developer_notes = unit.getnotes(origin="developer")
     50          translator_notes = unit.getnotes(origin="translator")
     51          unit.removenotes()
     52          unit.addnote(self.convertstrings(developer_notes))
     53          unit.addnote(self.convertstrings(translator_notes))
     54          unit.source = self.convertstrings(unit.source)
     55          unit.target = self.convertstrings(unit.target)
     56          return unit
     57
     58 -    def convertstring(self, string):
     59          return re.sub('\{(\d)\}', lambda x: "%%%d$s" % (int(x.group(1))+1), string)
     60
     61 -    def convertstrings(self, input):
     62          if isinstance(input, multistring):
     63              strings = input.strings
     64          elif isinstance(input, list):
     65              strings = input
     66          else:
     67              return self.convertstring(input)
     68
     69          for index, string in enumerate(strings):
     70              strings[index] = re.sub('\{(\d)\}', lambda x: "%%%d$s" % (int(x.group(1))+1), string)
     71          return strings
     72
     73
     74 -def convertpy2php(inputfile, outputfile, template=None):
     75      """Converts from Python .po to PHP .po
     76
     77      @param inputfile: file handle of the source
     78      @param outputfile: file handle to write to
     79      @param template: unused
     80      """
     81      convertor = pypo2phppo()
     82      inputstore = po.pofile(inputfile)
     83      outputstore = convertor.convertstore(inputstore)
     84      if outputstore.isempty():
     85          return False
     86      outputfile.write(str(outputstore))
     87      return True
     88
     89
     90 -def main(argv=None):
     91      """Converts from Python .po to PHP .po"""
     92      from translate.convert import convert
     93
     94      formats = {"po": ("po", convertpy2php)}
     95      parser = convert.ConvertOptionParser(formats, description=__doc__)
     96      parser.run(argv)
     97
     98
     99  if __name__ == '__main__':
    100      main()
    101