1
2
3 from translate.convert import xliff2po
4 from translate.misc import wStringIO
5
7 xliffskeleton = '''<?xml version="1.0" ?>
8 <xliff version="1.1" xmlns="urn:oasis:names:tc:xliff:document:1.1">
9 <file original="filename.po" source-language="en-US" datatype="po">
10 <body>
11 %s
12 </body>
13 </file>
14 </xliff>'''
15
17 """helper that converts xliff source to po source without requiring files"""
18 inputfile = wStringIO.StringIO(xliffsource)
19 convertor = xliff2po.xliff2po()
20 outputpo = convertor.convertstore(inputfile)
21 print "The generated po:"
22 print type(outputpo)
23 print str(outputpo)
24 return outputpo
25
35
37 headertext = '''Project-Id-Version: program 2.1-branch
38 Report-Msgid-Bugs-To:
39 POT-Creation-Date: 2006-01-09 07:15+0100
40 PO-Revision-Date: 2004-03-30 17:02+0200
41 Last-Translator: Zuza Software Foundation <xxx@translate.org.za>
42 Language-Team: Afrikaans <translate-discuss-xxx@lists.sourceforge.net>
43 MIME-Version: 1.0
44 Content-Type: text/plain; charset=UTF-8
45 Content-Transfer-Encoding: 8bit'''
46
47 minixlf = (self.xliffskeleton % '''<trans-unit id="1" restype="x-gettext-domain-header" approved="no" xml:space="preserve">
48 <source>%s</source>
49 <target>%s</target>
50 <note from="po-translator">Zulu translation of program ABC</note>
51 </trans-unit>
52 <trans-unit>
53 <source>gras</source>
54 <target>utshani</target>
55 </trans-unit>''') % (headertext, headertext)
56
57 print minixlf
58 pofile = self.xliff2po(minixlf)
59 assert pofile.translate("gras") == "utshani"
60 assert pofile.translate("bla") is None
61 potext = str(pofile)
62 assert potext.index('# Zulu translation of program ABC') == 0
63 assert potext.index('msgid "gras"\n')
64 assert potext.index('msgstr "utshani"\n')
65 assert potext.index('MIME-Version: 1.0\\n')
66
86
106
108 """Tests location comments (#:)"""
109 minixlf = self.xliffskeleton % '''<trans-unit id="1">
110 <source>nonsense</source>
111 <target>matlhapolosa</target>
112 <context-group name="po-reference" purpose="location">
113 <context context-type="sourcefile">example.c</context>
114 <context context-type="linenumber">123</context>
115 </context-group>
116 <context-group name="po-reference" purpose="location">
117 <context context-type="sourcefile">place.py</context>
118 </context-group>
119 </trans-unit>'''
120 pofile = self.xliff2po(minixlf)
121 assert pofile.translate("nonsense") == "matlhapolosa"
122 assert pofile.translate("bla") is None
123 unit = pofile.units[0]
124 locations = unit.getlocations()
125 assert len(locations) == 2
126 assert "example.c:123" in locations
127 assert "place.py" in locations
128
130 """Tests fuzzyness"""
131 minixlf = self.xliffskeleton % '''<trans-unit approved="no">
132 <source>book</source>
133 </trans-unit>
134 <trans-unit id="2" approved="yes">
135 <source>nonsense</source>
136 <target>matlhapolosa</target>
137 </trans-unit>
138 <trans-unit id="2" approved="no">
139 <source>verb</source>
140 <target state="needs-review-translation">lediri</target>
141 </trans-unit>'''
142 pofile = self.xliff2po(minixlf)
143 assert pofile.translate("nonsense") == "matlhapolosa"
144 assert pofile.translate("verb") == "lediri"
145 assert pofile.translate("book") is None
146 assert pofile.translate("bla") is None
147 assert len(pofile.units) == 3
148
149
150 assert not pofile.units[1].isfuzzy()
151 assert pofile.units[2].isfuzzy()
152
154 """Tests fuzzyness"""
155 minixlf = self.xliffskeleton % '''<group restype="x-gettext-plurals">
156 <trans-unit id="1[0]" xml:space="preserve">
157 <source>cow</source>
158 <target>inkomo</target>
159 </trans-unit>
160 <trans-unit id="1[1]" xml:space="preserve">
161 <source>cows</source>
162 <target>iinkomo</target>
163 </trans-unit>
164 </group>'''
165 pofile = self.xliff2po(minixlf)
166 print str(pofile)
167 potext = str(pofile)
168 assert len(pofile.units) == 1
169 assert potext.index('msgid_plural "cows"')
170 assert potext.index('msgstr[0] "inkomo"')
171 assert potext.index('msgstr[1] "iinkomo"')
172
173
175 """This tests a basic XLIFF file without xmlns attribute"""
176
177 xliffskeleton = '''<?xml version="1.0" ?>
178 <xliff version="1.1">
179 <file original="filename.po" source-language="en-US" datatype="po">
180 <body>
181 %s
182 </body>
183 </file>
184 </xliff>'''
185