| LEFT | RIGHT |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 | 2 |
| 3 from translate.convert import po2xliff | 3 from translate.convert import po2xliff |
| 4 from translate.storage import po | 4 from translate.storage import po |
| 5 from translate.storage import poxliff | 5 from translate.storage import poxliff |
| 6 from translate.storage import lisa | 6 from translate.storage import lisa |
| 7 | 7 |
| 8 class TestPO2XLIFF: | 8 class TestPO2XLIFF: |
| 9 | 9 |
| 10 def po2xliff(self, posource, sourcelanguage='en', targetlanguage=None): | 10 def po2xliff(self, posource, sourcelanguage='en', targetlanguage=None): |
| 11 """helper that converts po source to xliff source without requiring file
s""" | 11 """helper that converts po source to xliff source without requiring file
s""" |
| 12 postore = po.pofile(posource) | 12 postore = po.pofile(posource) |
| 13 convertor = po2xliff.po2xliff() | 13 convertor = po2xliff.po2xliff() |
| 14 outputxliff = convertor.convertstore(postore, None, sourcelanguage=sourc
elanguage, targetlanguage=targetlanguage) | 14 outputxliff = convertor.convertstore(postore, None, sourcelanguage=sourc
elanguage, targetlanguage=targetlanguage) |
| 15 return poxliff.PoXliffFile(outputxliff) | 15 return poxliff.PoXliffFile(outputxliff) |
| 16 | 16 |
| 17 def getnode(self, xliff): | 17 def getnode(self, xliff): |
| 18 """Retrieves the trans-unit node from the dom""" | 18 """Retrieves the trans-unit node from the dom""" |
| 19 assert len(xliff.units) == 1 | 19 assert len(xliff.units) == 1 |
| 20 unit = xliff.units[0] | 20 unit = xliff.units[0] |
| 21 return unit | 21 return unit |
| 22 | 22 |
| 23 def test_minimal(self): | 23 def test_minimal(self): |
| 24 minipo = '''msgid "red"\nmsgstr "rooi"\n''' | 24 minipo = '''msgid "red"\nmsgstr "rooi"\n''' |
| 25 xliff = self.po2xliff(minipo) | 25 xliff = self.po2xliff(minipo) |
| 26 print "The generated xml:" | 26 print "The generated xml:" |
| 27 print str(xliff) | 27 print str(xliff) |
| 28 assert len(xliff.units) == 1 | 28 assert len(xliff.units) == 1 |
| 29 assert xliff.translate("red") == "rooi" | 29 assert xliff.translate("red") == "rooi" |
| 30 assert xliff.translate("bla") is None | 30 assert xliff.translate("bla") is None |
| 31 | 31 |
| 32 def test_basic(self): | 32 def test_basic(self): |
| 33 minipo = """# Afrikaans translation of program ABC | 33 minipo = """# Afrikaans translation of program ABC |
| 34 # | 34 # |
| 35 msgid "" | 35 msgid "" |
| 36 msgstr "" | 36 msgstr "" |
| 37 "Project-Id-Version: program 2.1-branch\n" | 37 "Project-Id-Version: program 2.1-branch\n" |
| 38 "Report-Msgid-Bugs-To: \n" | 38 "Report-Msgid-Bugs-To: \n" |
| 39 "POT-Creation-Date: 2006-01-09 07:15+0100\n" | 39 "POT-Creation-Date: 2006-01-09 07:15+0100\n" |
| 40 "PO-Revision-Date: 2004-03-30 17:02+0200\n" | 40 "PO-Revision-Date: 2004-03-30 17:02+0200\n" |
| 41 "Last-Translator: Zuza Software Foundation <xxx@translate.org.za>\n" | 41 "Last-Translator: Zuza Software Foundation <xxx@translate.org.za>\n" |
| 42 "Language-Team: Afrikaans <translate-discuss-xxx@lists.sourceforge.net>\n" | 42 "Language-Team: Afrikaans <translate-discuss-xxx@lists.sourceforge.net>\n" |
| 43 "MIME-Version: 1.0\n" | 43 "MIME-Version: 1.0\n" |
| 44 "Content-Type: text/plain; charset=UTF-8\n" | 44 "Content-Type: text/plain; charset=UTF-8\n" |
| 45 "Content-Transfer-Encoding: 8bit\n" | 45 "Content-Transfer-Encoding: 8bit\n" |
| 46 | 46 |
| 47 # Please remember to do something | 47 # Please remember to do something |
| 48 #: ../dir/file.xml.in.h:1 ../dir/file2.xml.in.h:4 | 48 #: ../dir/file.xml.in.h:1 ../dir/file2.xml.in.h:4 |
| 49 msgid "Applications" | 49 msgid "Applications" |
| 50 msgstr "Toepassings" | 50 msgstr "Toepassings" |
| (...skipping 111 matching lines...) Show 10 above Show 10 below |
| 162 assert len(xliff.units) == 1 | 162 assert len(xliff.units) == 1 |
| 163 node = xliff.units[0].xmlelement | 163 node = xliff.units[0].xmlelement |
| 164 contextgroups = node.findall(".//%s" % xliff.namespaced("context-group")
) | 164 contextgroups = node.findall(".//%s" % xliff.namespaced("context-group")
) |
| 165 assert len(contextgroups) == 1 | 165 assert len(contextgroups) == 1 |
| 166 for group in contextgroups: | 166 for group in contextgroups: |
| 167 assert group.get("name") == "po-entry" | 167 assert group.get("name") == "po-entry" |
| 168 assert group.get("purpose") == "information" | 168 assert group.get("purpose") == "information" |
| 169 tuples = self.getcontexttuples(node, xliff.namespace) | 169 tuples = self.getcontexttuples(node, xliff.namespace) |
| 170 assert tuples == [("x-po-trancomment", "Translate?\nHow?")] | 170 assert tuples == [("x-po-trancomment", "Translate?\nHow?")] |
| 171 | 171 |
| 172 assert xliff.units[0].getnotes("translator") == "Translate?\nHow?" | 172 assert xliff.units[0].getnotes("translator") == "Translate?\nHow?" |
| 173 | 173 |
| 174 | 174 |
| 175 def test_automaticcomments(self): | 175 def test_automaticcomments(self): |
| 176 minipo = r'''#. Don't translate. | 176 minipo = r'''#. Don't translate. |
| 177 #. Please | 177 #. Please |
| 178 msgid "one" | 178 msgid "one" |
| 179 msgstr "kunye" | 179 msgstr "kunye" |
| 180 ''' | 180 ''' |
| 181 xliff = self.po2xliff(minipo) | 181 xliff = self.po2xliff(minipo) |
| 182 print "The generated xml:" | 182 print "The generated xml:" |
| 183 xmltext = str(xliff) | 183 xmltext = str(xliff) |
| 184 print xmltext | 184 print xmltext |
| 185 assert xliff.translate("one") == "kunye" | 185 assert xliff.translate("one") == "kunye" |
| 186 assert len(xliff.units) == 1 | 186 assert len(xliff.units) == 1 |
| 187 node = xliff.units[0].xmlelement | 187 node = xliff.units[0].xmlelement |
| 188 contextgroups = node.findall(".//%s" % xliff.namespaced("context-group")
) | 188 contextgroups = node.findall(".//%s" % xliff.namespaced("context-group")
) |
| 189 assert len(contextgroups) == 1 | 189 assert len(contextgroups) == 1 |
| 190 for group in contextgroups: | 190 for group in contextgroups: |
| 191 assert group.get("name") == "po-entry" | 191 assert group.get("name") == "po-entry" |
| 192 assert group.get("purpose") == "information" | 192 assert group.get("purpose") == "information" |
| 193 tuples = self.getcontexttuples(node, xliff.namespace) | 193 tuples = self.getcontexttuples(node, xliff.namespace) |
| 194 assert tuples == [("x-po-autocomment", "Don't translate.\nPlease")] | 194 assert tuples == [("x-po-autocomment", "Don't translate.\nPlease")] |
| 195 | 195 |
| 196 def test_header(self): | 196 def test_header(self): |
| 197 minipo = r'''# Pulana Translation for bla | 197 minipo = r'''# Pulana Translation for bla |
| 198 # Hallo Ma! | 198 # Hallo Ma! |
| 199 #, fuzzy | 199 #, fuzzy |
| 200 msgid "" | 200 msgid "" |
| 201 msgstr "" | 201 msgstr "" |
| 202 "MIME-Version: 1.0\n" | 202 "MIME-Version: 1.0\n" |
| 203 ''' | 203 ''' |
| 204 xliff = self.po2xliff(minipo) | 204 xliff = self.po2xliff(minipo) |
| 205 print "The generated xml:" | 205 print "The generated xml:" |
| 206 xmltext = str(xliff) | 206 xmltext = str(xliff) |
| 207 print xmltext | 207 print xmltext |
| 208 assert len(xliff.units) == 1 | 208 assert len(xliff.units) == 1 |
| 209 unit = xliff.units[0] | 209 unit = xliff.units[0] |
| 210 assert unit.source == unit.target == "MIME-Version: 1.0\n" | 210 assert unit.source == unit.target == "MIME-Version: 1.0\n" |
| 211 assert unit.xmlelement.get("restype") == "x-gettext-domain-header" | 211 assert unit.xmlelement.get("restype") == "x-gettext-domain-header" |
| 212 assert unit.xmlelement.get("approved") != "yes" | 212 assert unit.xmlelement.get("approved") == "no" |
| 213 assert unit.xmlelement.get("{%s}space" % lisa.XML_NS) == "preserve" | 213 assert unit.xmlelement.get("{%s}space" % lisa.XML_NS) == "preserve" |
| 214 assert unit.getnotes("po-translator") == "Pulana Translation for bla\nH
allo Ma!" | 214 assert unit.getnotes("po-translator") == "Pulana Translation for bla\nH
allo Ma!" |
| 215 | 215 |
| 216 def test_fuzzy(self): | 216 def test_fuzzy(self): |
| 217 minipo = r'''#, fuzzy | 217 minipo = r'''#, fuzzy |
| 218 msgid "two" | 218 msgid "two" |
| 219 msgstr "pedi" | 219 msgstr "pedi" |
| 220 | 220 |
| 221 msgid "three" | 221 msgid "three" |
| 222 msgstr "raro" | 222 msgstr "raro" |
| 223 ''' | 223 ''' |
| 224 xliff = self.po2xliff(minipo) | 224 xliff = self.po2xliff(minipo) |
| 225 print "The generated xml:" | 225 print "The generated xml:" |
| 226 xmltext = str(xliff) | 226 xmltext = str(xliff) |
| 227 print xmltext | 227 print xmltext |
| 228 assert len(xliff.units) == 2 | 228 assert len(xliff.units) == 2 |
| 229 assert xliff.units[0].isfuzzy() | 229 assert xliff.units[0].isfuzzy() |
| 230 assert not xliff.units[1].isfuzzy() | 230 assert not xliff.units[1].isfuzzy() |
| 231 | 231 |
| 232 def test_germanic_plurals(self): | 232 def test_germanic_plurals(self): |
| 233 minipo = r'''msgid "cow" | 233 minipo = r'''msgid "cow" |
| 234 msgid_plural "cows" | 234 msgid_plural "cows" |
| 235 msgstr[0] "inkomo" | 235 msgstr[0] "inkomo" |
| 236 msgstr[1] "iinkomo" | 236 msgstr[1] "iinkomo" |
| 237 ''' | 237 ''' |
| 238 xliff = self.po2xliff(minipo) | 238 xliff = self.po2xliff(minipo) |
| 239 print "The generated xml:" | 239 print "The generated xml:" |
| 240 xmltext = str(xliff) | 240 xmltext = str(xliff) |
| 241 print xmltext | 241 print xmltext |
| 242 assert len(xliff.units) == 1 | 242 assert len(xliff.units) == 1 |
| 243 assert xliff.translate("cow") == "inkomo" | 243 assert xliff.translate("cow") == "inkomo" |
| 244 | 244 |
| 245 def test_funny_plurals(self): | 245 def test_funny_plurals(self): |
| 246 minipo = r'''msgid "cow" | 246 minipo = r'''msgid "cow" |
| 247 msgid_plural "cows" | 247 msgid_plural "cows" |
| 248 msgstr[0] "inkomo" | 248 msgstr[0] "inkomo" |
| 249 msgstr[1] "iinkomo" | 249 msgstr[1] "iinkomo" |
| 250 msgstr[2] "iiinkomo" | 250 msgstr[2] "iiinkomo" |
| 251 ''' | 251 ''' |
| 252 xliff = self.po2xliff(minipo) | 252 xliff = self.po2xliff(minipo) |
| 253 print "The generated xml:" | 253 print "The generated xml:" |
| 254 xmltext = str(xliff) | 254 xmltext = str(xliff) |
| 255 print xmltext | 255 print xmltext |
| 256 assert len(xliff.units) == 1 | 256 assert len(xliff.units) == 1 |
| 257 assert xliff.translate("cow") == "inkomo" | 257 assert xliff.translate("cow") == "inkomo" |
| 258 | 258 |
| 259 def test_language_tags(self): | 259 def test_language_tags(self): |
| 260 minipo = r'''msgid "Een" | 260 minipo = r'''msgid "Een" |
| 261 msgstr "Uno" | 261 msgstr "Uno" |
| 262 ''' | 262 ''' |
| 263 xliff = self.po2xliff(minipo, "af", "es") | 263 xliff = self.po2xliff(minipo, "af", "es") |
| 264 assert xliff.sourcelanguage == "af" | 264 assert xliff.sourcelanguage == "af" |
| 265 assert xliff.targetlanguage == "es" | 265 assert xliff.targetlanguage == "es" |
| 266 | 266 |
| 267 def test_variables(self): | 267 def test_variables(self): |
| 268 minipo = r'''msgid "%s%s%s%s has made %s his or her buddy%s%s" | 268 minipo = r'''msgid "%s%s%s%s has made %s his or her buddy%s%s" |
| 269 msgstr "%s%s%s%s het %s sy/haar vriend/vriendin gemaak%s%s"''' | 269 msgstr "%s%s%s%s het %s sy/haar vriend/vriendin gemaak%s%s"''' |
| 270 xliff = self.po2xliff(minipo) | 270 xliff = self.po2xliff(minipo) |
| 271 print xliff.units[0].source | 271 print xliff.units[0].source |
| 272 assert xliff.units[0].source == "%s%s%s%s has made %s his or her buddy%s
%s" | 272 assert xliff.units[0].source == "%s%s%s%s has made %s his or her buddy%s
%s" |
| 273 | 273 |
| 274 def test_approved(self): | 274 def test_approved(self): |
| 275 minipo = r'''#, fuzzy | 275 minipo = r'''#, fuzzy |
| 276 msgid "two" | 276 msgid "two" |
| 277 msgstr "pedi" | 277 msgstr "pedi" |
| 278 | 278 |
| 279 msgid "three" | 279 msgid "three" |
| 280 msgstr "raro" | 280 msgstr "raro" |
| 281 | 281 |
| 282 msgid "four" | 282 msgid "four" |
| 283 msgstr "" | 283 msgstr "" |
| 284 ''' | 284 ''' |
| 285 xliff = self.po2xliff(minipo) | 285 xliff = self.po2xliff(minipo) |
| 286 print "The generated xml:" | 286 print "The generated xml:" |
| 287 xmltext = str(xliff) | 287 xmltext = str(xliff) |
| 288 print xmltext | 288 print xmltext |
| 289 assert len(xliff.units) == 3 | 289 assert len(xliff.units) == 3 |
| 290 assert xliff.units[0].xmlelement.get("approved") != "yes" | 290 assert xliff.units[0].xmlelement.get("approved") == "no" |
| 291 assert not xliff.units[0].isapproved() | 291 assert not xliff.units[0].isapproved() |
| 292 assert xliff.units[1].xmlelement.get("approved") == "yes" | 292 assert xliff.units[1].xmlelement.get("approved") == "yes" |
| 293 assert xliff.units[1].isapproved() | 293 assert xliff.units[1].isapproved() |
| 294 assert xliff.units[2].xmlelement.get("approved") == "no" | 294 assert xliff.units[2].xmlelement.get("approved") == "no" |
| 295 assert not xliff.units[2].isapproved() | 295 assert not xliff.units[2].isapproved() |
| 296 | 296 |
| 297 def test_po_with_msgctxt(self): |
| 298 minipo = 'msgctxt "numbers"\nmsgid "one"\nmsgstr "um"\n' |
| 299 xliff = self.po2xliff(minipo) |
| 300 print str(xliff) |
| 301 node = xliff.units[0].xmlelement |
| 302 contextgroups = node.findall(".//%s" % xliff.namespaced("context-group")
) |
| 303 assert len(contextgroups) == 1 |
| 304 for group in contextgroups: |
| 305 assert group.get("name") == "po-1025" |
| 306 assert group.get("purpose") == "match information" |
| 307 tuples = self.getcontexttuples(node, xliff.namespace) |
| 308 assert tuples == [('x-unknown', 'numbers')] |
| LEFT | RIGHT |