Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(75)

Side by Side Diff: translate/convert/po2xliff.py

Issue 65: xliff2po & po2xliff should handle context SVN Base: https://translate.svn.sourceforge.net/svnroot/translate/src/trunk/
Patch Set: Update (minor changes) Created 1 year, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 # 3 #
4 # Copyright 2005, 2006 Zuza Software Foundation 4 # Copyright 2005, 2006 Zuza Software Foundation
5 # 5 #
6 # This file is part of translate. 6 # This file is part of translate.
7 # 7 #
8 # translate is free software; you can redistribute it and/or modify 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 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 10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version. 11 # (at your option) any later version.
12 # 12 #
13 # translate is distributed in the hope that it will be useful, 13 # translate is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of 14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 # GNU General Public License for more details. 16 # GNU General Public License for more details.
17 # 17 #
18 # You should have received a copy of the GNU General Public License 18 # You should have received a copy of the GNU General Public License
19 # along with translate; if not, write to the Free Software 19 # along with translate; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 # 21 #
22 22
23 """convert Gettext PO localization files to XLIFF localization files 23 """convert Gettext PO localization files to XLIFF localization files
24 24
25 see: http://translate.sourceforge.net/wiki/toolkit/po2xliff for examples and 25 see: http://translate.sourceforge.net/wiki/toolkit/po2xliff for examples and
26 usage instructions 26 usage instructions
27 """ 27 """
28 28
29 from translate.storage import po 29 from translate.storage import po
30 from translate.storage import poxliff 30 from translate.storage import poxliff
31 31
32 class po2xliff: 32 class po2xliff:
33 def convertunit(self, outputstore, inputunit, filename): 33 def convertunit(self, outputstore, inputunit, filename):
34 """creates a transunit node""" 34 """creates a transunit node"""
35 source = inputunit.source 35 source = inputunit.source
36 target = inputunit.target 36 target = inputunit.target
37 if inputunit.isheader(): 37 if inputunit.isheader():
38 unit = outputstore.addheaderunit(target, filename) 38 unit = outputstore.addheaderunit(target, filename)
39 else: 39 else:
40 unit = outputstore.addsourceunit(source, filename, True) 40 unit = outputstore.addsourceunit(source, filename, True)
41 unit.target = target 41 unit.target = target
42 #Explicitly marking the fuzzy state will ensure that normal (transla ted) 42 #Explicitly marking the fuzzy state will ensure that normal (transla ted)
43 #units in the PO file end up as approved in the XLIFF file. 43 #units in the PO file end up as approved in the XLIFF file.
44 if target: 44 if target:
45 unit.markfuzzy(inputunit.isfuzzy()) 45 unit.markfuzzy(inputunit.isfuzzy())
46 else: 46 else:
47 unit.markapproved(False) 47 unit.markapproved(False)
48
49 #Handle msgctxt
50 context = inputunit.getcontext()
51 if context:
52 unit.setcontext_message(context)
48 53
49 #Handle #: location comments 54 #Handle #: location comments
50 for location in inputunit.getlocations(): 55 for location in inputunit.getlocations():
51 unit.createcontextgroup("po-reference", self.contextlist(locatio n), purpose="location") 56 unit.createcontextgroup("po-reference", self.contextlist(locatio n), purpose="location")
52 57
53 #Handle #. automatic comments 58 #Handle #. automatic comments
54 comment = inputunit.getnotes("developer") 59 comment = inputunit.getnotes("developer")
55 if comment: 60 if comment:
56 unit.createcontextgroup("po-entry", [("x-po-autocomment", commen t)], purpose="information") 61 unit.createcontextgroup("po-entry", [("x-po-autocomment", commen t)], purpose="information")
57 unit.addnote(comment, origin="developer") 62 unit.addnote(comment, origin="developer")
58 63
59 #TODO: x-format, etc. 64 #TODO: x-format, etc.
60 65
61 66
62 #Handle # other comments 67 #Handle # other comments
63 comment = inputunit.getnotes("translator") 68 comment = inputunit.getnotes("translator")
64 if comment: 69 if comment:
65 unit.createcontextgroup("po-entry", [("x-po-trancomment", comment)], purpose="information") 70 unit.createcontextgroup("po-entry", [("x-po-trancomment", comment)], purpose="information")
66 unit.addnote(comment, origin="po-translator") 71 unit.addnote(comment, origin="po-translator")
67 72
68 return unit 73 return unit
69 74
70 def contextlist(self, location): 75 def contextlist(self, location):
71 contexts = [] 76 contexts = []
72 if ":" in location: 77 if ":" in location:
73 sourcefile, linenumber = location.split(":", 1) 78 sourcefile, linenumber = location.split(":", 1)
74 else: 79 else:
75 sourcefile, linenumber = location, None 80 sourcefile, linenumber = location, None
76 contexts.append(("sourcefile", sourcefile)) 81 contexts.append(("sourcefile", sourcefile))
77 if linenumber: 82 if linenumber:
78 contexts.append(("linenumber", linenumber)) 83 contexts.append(("linenumber", linenumber))
79 return contexts 84 return contexts
80 85
81 def convertstore(self, inputstore, templatefile=None, **kwargs): 86 def convertstore(self, inputstore, templatefile=None, **kwargs):
82 """converts a .po file to .xlf format""" 87 """converts a .po file to .xlf format"""
83 if templatefile is None: 88 if templatefile is None:
84 outputstore = poxliff.PoXliffFile(**kwargs) 89 outputstore = poxliff.PoXliffFile(**kwargs)
85 else: 90 else:
86 outputstore = poxliff.PoXliffFile(templatefile, **kwargs) 91 outputstore = poxliff.PoXliffFile(templatefile, **kwargs)
87 filename = inputstore.filename 92 filename = inputstore.filename
88 for inputunit in inputstore.units: 93 for inputunit in inputstore.units:
89 if inputunit.isblank(): 94 if inputunit.isblank():
90 continue 95 continue
91 transunitnode = self.convertunit(outputstore, inputunit, filename) 96 transunitnode = self.convertunit(outputstore, inputunit, filename)
92 return str(outputstore) 97 return str(outputstore)
93 98
94 def convertpo(inputfile, outputfile, templatefile): 99 def convertpo(inputfile, outputfile, templatefile):
95 """reads in stdin using fromfileclass, converts using convertorclass, writes to stdout""" 100 """reads in stdin using fromfileclass, converts using convertorclass, writes to stdout"""
96 inputstore = po.pofile(inputfile) 101 inputstore = po.pofile(inputfile)
97 if inputstore.isempty(): 102 if inputstore.isempty():
98 return 0 103 return 0
99 convertor = po2xliff() 104 convertor = po2xliff()
100 outputstring = convertor.convertstore(inputstore, templatefile) 105 outputstring = convertor.convertstore(inputstore, templatefile)
101 outputfile.write(outputstring) 106 outputfile.write(outputstring)
102 return 1 107 return 1
103 108
104 def main(argv=None): 109 def main(argv=None):
105 from translate.convert import convert 110 from translate.convert import convert
106 formats = {"po": ("xlf", convertpo), ("po", "xlf"): ("xlf", convertpo)} 111 formats = {"po": ("xlf", convertpo), ("po", "xlf"): ("xlf", convertpo)}
107 parser = convert.ConvertOptionParser(formats, usepots=True, usetemplates=Tru e, description=__doc__) 112 parser = convert.ConvertOptionParser(formats, usepots=True, usetemplates=Tru e, description=__doc__)
108 parser.run(argv) 113 parser.run(argv)
109 114
110 if __name__ == '__main__': 115 if __name__ == '__main__':
111 main() 116 main()
OLDNEW

Powered by Google App Engine
This is Rietveld r159