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