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

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: 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.createcontextgroup("po-1025", [("x-unknown", context)],
georgeyk 2008/07/24 05:14:28 I think this should be done though a method. So we
53 purpose="match information")
48 54
49 #Handle #: location comments 55 #Handle #: location comments
50 for location in inputunit.getlocations(): 56 for location in inputunit.getlocations():
51 unit.createcontextgroup("po-reference", self.contextlist(locatio n), purpose="location") 57 unit.createcontextgroup("po-reference", self.contextlist(locatio n), purpose="location")
52 58
53 #Handle #. automatic comments 59 #Handle #. automatic comments
54 comment = inputunit.getnotes("developer") 60 comment = inputunit.getnotes("developer")
55 if comment: 61 if comment:
56 unit.createcontextgroup("po-entry", [("x-po-autocomment", commen t)], purpose="information") 62 unit.createcontextgroup("po-entry", [("x-po-autocomment", commen t)], purpose="information")
57 unit.addnote(comment, origin="developer") 63 unit.addnote(comment, origin="developer")
58 64
59 #TODO: x-format, etc. 65 #TODO: x-format, etc.
60 66
61 67
62 #Handle # other comments 68 #Handle # other comments
63 comment = inputunit.getnotes("translator") 69 comment = inputunit.getnotes("translator")
64 if comment: 70 if comment:
65 unit.createcontextgroup("po-entry", [("x-po-trancomment", comment)], purpose="information") 71 unit.createcontextgroup("po-entry", [("x-po-trancomment", comment)], purpose="information")
66 unit.addnote(comment, origin="po-translator") 72 unit.addnote(comment, origin="po-translator")
67 73
68 return unit 74 return unit
69 75
70 def contextlist(self, location): 76 def contextlist(self, location):
71 contexts = [] 77 contexts = []
72 if ":" in location: 78 if ":" in location:
73 sourcefile, linenumber = location.split(":", 1) 79 sourcefile, linenumber = location.split(":", 1)
74 else: 80 else:
75 sourcefile, linenumber = location, None 81 sourcefile, linenumber = location, None
76 contexts.append(("sourcefile", sourcefile)) 82 contexts.append(("sourcefile", sourcefile))
77 if linenumber: 83 if linenumber:
78 contexts.append(("linenumber", linenumber)) 84 contexts.append(("linenumber", linenumber))
79 return contexts 85 return contexts
80 86
81 def convertstore(self, inputstore, templatefile=None, **kwargs): 87 def convertstore(self, inputstore, templatefile=None, **kwargs):
82 """converts a .po file to .xlf format""" 88 """converts a .po file to .xlf format"""
83 if templatefile is None: 89 if templatefile is None:
84 outputstore = poxliff.PoXliffFile(**kwargs) 90 outputstore = poxliff.PoXliffFile(**kwargs)
85 else: 91 else:
86 outputstore = poxliff.PoXliffFile(templatefile, **kwargs) 92 outputstore = poxliff.PoXliffFile(templatefile, **kwargs)
87 filename = inputstore.filename 93 filename = inputstore.filename
88 for inputunit in inputstore.units: 94 for inputunit in inputstore.units:
89 if inputunit.isblank(): 95 if inputunit.isblank():
90 continue 96 continue
91 transunitnode = self.convertunit(outputstore, inputunit, filename) 97 transunitnode = self.convertunit(outputstore, inputunit, filename)
92 return str(outputstore) 98 return str(outputstore)
93 99
94 def convertpo(inputfile, outputfile, templatefile): 100 def convertpo(inputfile, outputfile, templatefile):
95 """reads in stdin using fromfileclass, converts using convertorclass, writes to stdout""" 101 """reads in stdin using fromfileclass, converts using convertorclass, writes to stdout"""
96 inputstore = po.pofile(inputfile) 102 inputstore = po.pofile(inputfile)
97 if inputstore.isempty(): 103 if inputstore.isempty():
98 return 0 104 return 0
99 convertor = po2xliff() 105 convertor = po2xliff()
100 outputstring = convertor.convertstore(inputstore, templatefile) 106 outputstring = convertor.convertstore(inputstore, templatefile)
101 outputfile.write(outputstring) 107 outputfile.write(outputstring)
102 return 1 108 return 1
103 109
104 def main(argv=None): 110 def main(argv=None):
105 from translate.convert import convert 111 from translate.convert import convert
106 formats = {"po": ("xlf", convertpo), ("po", "xlf"): ("xlf", convertpo)} 112 formats = {"po": ("xlf", convertpo), ("po", "xlf"): ("xlf", convertpo)}
107 parser = convert.ConvertOptionParser(formats, usepots=True, usetemplates=Tru e, description=__doc__) 113 parser = convert.ConvertOptionParser(formats, usepots=True, usetemplates=Tru e, description=__doc__)
108 parser.run(argv) 114 parser.run(argv)
109 115
110 if __name__ == '__main__': 116 if __name__ == '__main__':
111 main() 117 main()
OLDNEW

Powered by Google App Engine
This is Rietveld r159