Package translate :: Package convert :: Module po2csv

[hide private]
[frames] | no frames]

# Source Code for Module translate.convert.po2csv

      1  #!/usr/bin/env python
      2  # -*- coding: utf-8 -*-
      3  #
      4  # Copyright 2003-2006 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 Gettext PO localization files to Comma-Separated Value (.csv) files
     23
     24  see: http://translate.sourceforge.net/wiki/toolkit/po2csv for examples and
     25  usage instructions
     26  """
     27
     28  from translate.storage import po
     29  from translate.storage import csvl10n
     30
     31
     32 -class po2csv:
     33
     34 -    def convertcomments(self, inputunit):
     35          return " ".join(inputunit.getlocations())
     36
     37 -    def convertunit(self, inputunit):
     38          csvunit = csvl10n.csvunit()
     39          if inputunit.isheader():
     40              return None
     41              #csvunit.location = "location"
     42              #csvunit.source = "source"
     43              #csvunit.target = "target"
     44          elif inputunit.isblank():
     45              return None
     46          else:
     47              csvunit.location = self.convertcomments(inputunit)
     48              csvunit.source = inputunit.source
     49              csvunit.target = inputunit.target
     50          return csvunit
     51
     52 -    def convertplurals(self, inputunit):
     53          """Convert PO plural units
     54
     55          We only convert the first plural form.  So languages with multiple
     56          plurals are not handled.  For single plural languages we simply
     57          skip this plural extraction.
     58          """
     59          if len(inputunit.target.strings) == 1:  # No plural forms
     60              return None
     61          csvunit = csvl10n.csvunit()
     62          csvunit.location = self.convertcomments(inputunit)
     63          csvunit.source = inputunit.source.strings[1]
     64          csvunit.target = inputunit.target.strings[1]
     65          return csvunit
     66
     67 -    def convertstore(self, inputstore, columnorder=None):
     68          if columnorder is None:
     69              columnorder = ['location', 'source', 'target']
     70          outputstore = csvl10n.csvfile(fieldnames=columnorder)
     71          for inputunit in inputstore.units:
     72              outputunit = self.convertunit(inputunit)
     73              if outputunit is not None:
     74                  outputstore.addunit(outputunit)
     75              if inputunit.hasplural():
     76                  outputunit = self.convertplurals(inputunit)
     77                  if outputunit is not None:
     78                      outputstore.addunit(outputunit)
     79          return outputstore
     80
     81
     82 -def convertcsv(inputfile, outputfile, templatefile, columnorder=None):
     83      """reads in inputfile using po, converts using po2csv, writes to outputfile"""
     84      # note that templatefile is not used, but it is required by the converter...
     85      inputstore = po.pofile(inputfile)
     86      if inputstore.isempty():
     87          return 0
     88      convertor = po2csv()
     89      outputstore = convertor.convertstore(inputstore, columnorder)
     90      outputfile.write(str(outputstore))
     91      return 1
     92
     93
     94 -def main(argv=None):
     95      from translate.convert import convert
     96      formats = {"po": ("csv", convertcsv)}
     97      parser = convert.ConvertOptionParser(formats, usepots=True, description=__doc__)
     98      parser.add_option("", "--columnorder", dest="columnorder", default=None,
     99          help="specify the order and position of columns (location,source,target)")
    100      parser.passthrough.append("columnorder")
    101      parser.run(argv)
    102
    103
    104  if __name__ == '__main__':
    105      main()
    106