Package translate :: Package convert :: Module po2wordfast

[hide private]
[frames] | no frames]

# Source Code for Module translate.convert.po2wordfast

      1  #!/usr/bin/env python
      2  # -*- coding: utf-8 -*-
      3  #
      4  # Copyright 2005-2007 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
     23  """convert Gettext PO localization files to a Wordfast translation memory file
     24
     25  see: http://translate.sourceforge.net/wiki/toolkit/po2wordfast for examples and
     26  usage instructions
     27  """
     28
     29  import os
     30
     31  from translate.storage import po
     32  from translate.storage import wordfast
     33  from translate.convert import convert
     34  from translate.misc import wStringIO
     35
     36
     37 -class po2wordfast:
     38
     39 -    def convertfiles(self, inputfile, wffile, sourcelanguage='en', targetlanguage=None):
     40          """converts a .po file (possibly many) to a Wordfast TM file"""
     41          inputstore = po.pofile(inputfile)
     42          for inunit in inputstore.units:
     43              if inunit.isheader() or inunit.isblank() or not inunit.istranslated():
     44                  continue
     45              source = inunit.source
     46              target = inunit.target
     47              newunit = wffile.addsourceunit(source)
     48              newunit.target = target
     49              newunit.targetlang = targetlanguage
     50
     51
     52 -def convertpo(inputfile, outputfile, templatefile, sourcelanguage='en', targetlanguage=None):
     53      """reads in stdin using fromfileclass, converts using convertorclass, writes to stdout"""
     54      convertor = po2wordfast()
     55      outputfile.wffile.header.targetlang = targetlanguage
     56      convertor.convertfiles(inputfile, outputfile.wffile, sourcelanguage, targetlanguage)
     57      return 1
     58
     59
     60 -class wfmultifile:
     61
     62 -    def __init__(self, filename, mode=None):
     63          """initialises wfmultifile from a seekable inputfile or writable outputfile"""
     64          self.filename = filename
     65          if mode is None:
     66              if os.path.exists(filename):
     67                  mode = 'r'
     68              else:
     69                  mode = 'w'
     70          self.mode = mode
     71          self.multifilename = os.path.splitext(filename)[0]
     72          self.wffile = wordfast.WordfastTMFile()
     73
     74 -    def openoutputfile(self, subfile):
     75          """returns a pseudo-file object for the given subfile"""
     76
     77          def onclose(contents):
     78              pass
     79          outputfile = wStringIO.CatchStringOutput(onclose)
     80          outputfile.filename = subfile
     81          outputfile.wffile = self.wffile
     82          return outputfile
     83
     84
     85 -class WfOptionParser(convert.ArchiveConvertOptionParser):
     86
     87 -    def recursiveprocess(self, options):
     88          if not options.targetlanguage:
     89              raise ValueError("You must specify the target language")
     90          super(WfOptionParser, self).recursiveprocess(options)
     91          self.output = open(options.output, 'w')
     92          #options.outputarchive.wffile.setsourcelanguage(options.sourcelanguage)
     93          self.output.write(str(options.outputarchive.wffile))
     94
     95
     96 -def main(argv=None):
     97      formats = {"po": ("txt", convertpo), ("po", "txt"): ("txt", convertpo)}
     98      archiveformats = {(None, "output"): wfmultifile, (None, "template"): wfmultifile}
     99      parser = WfOptionParser(formats, usepots=False, usetemplates=False, description=__doc__, archiveformats=archiveformats)
    100      parser.add_option("-l", "--language", dest="targetlanguage", default=None,
    101                        help="set target language code (e.g. af-ZA) [required]", metavar="LANG")
    102      parser.add_option("", "--source-language", dest="sourcelanguage", default='en',
    103                        help="set source language code (default: en)", metavar="LANG")
    104      parser.passthrough.append("sourcelanguage")
    105      parser.passthrough.append("targetlanguage")
    106      parser.run(argv)
    107
    108
    109  if __name__ == '__main__':
    110      main()
    111