1
2
3 from translate.convert import po2xliff
4 from translate.storage import po
5 from translate.storage import poxliff
6 from translate.storage import lisa
7
9
10 - def po2xliff(self, posource, sourcelanguage='en', targetlanguage=None):
11 """helper that converts po source to xliff source without requiring files"""
12 postore = po.pofile(posource)
13 convertor = po2xliff.po2xliff()
14 outputxliff = convertor.convertstore(postore, None, sourcelanguage=sourcelanguage, targetlanguage=targetlanguage)
15 return poxliff.PoXliffFile(outputxliff)
16
18 """Retrieves the trans-unit node from the dom"""
19 assert len(xliff.units) == 1
20 unit = xliff.units[0]
21 return unit
22
31
33 minipo = """# Afrikaans translation of program ABC
34 #
35 msgid ""
36 msgstr ""
37 "Project-Id-Version: program 2.1-branch\n"
38 "Report-Msgid-Bugs-To: \n"
39 "POT-Creation-Date: 2006-01-09 07:15+0100\n"
40 "PO-Revision-Date: 2004-03-30 17:02+0200\n"
41 "Last-Translator: Zuza Software Foundation <xxx@translate.org.za>\n"
42 "Language-Team: Afrikaans <translate-discuss-xxx@lists.sourceforge.net>\n"
43 "MIME-Version: 1.0\n"
44 "Content-Type: text/plain; charset=UTF-8\n"
45 "Content-Transfer-Encoding: 8bit\n"
46
47 # Please remember to do something
48 #: ../dir/file.xml.in.h:1 ../dir/file2.xml.in.h:4
49 msgid "Applications"
50 msgstr "Toepassings"
51 """
52 xliff = self.po2xliff(minipo)
53 print "The generated xml:"
54 print str(xliff)
55 assert xliff.translate("Applications") == "Toepassings"
56 assert xliff.translate("bla") is None
57 xmltext = str(xliff)
58 assert xmltext.index('<xliff ') >= 0
59 assert xmltext.index(' version="1.1"') >= 0
60 assert xmltext.index('<file')
61 assert xmltext.index('source-language')
62 assert xmltext.index('datatype')
63
65 """Test multiline po entry"""
66 minipo = r'''msgid "First part "
67 "and extra"
68 msgstr "Eerste deel "
69 "en ekstra"'''
70 xliff = self.po2xliff(minipo)
71 print "The generated xml:"
72 print str(xliff)
73 assert xliff.translate('First part and extra') == 'Eerste deel en ekstra'
74
75
77 """Test the escaping of newlines"""
78 minipo = r'''msgid "First line\nSecond line"
79 msgstr "Eerste lyn\nTweede lyn"
80 '''
81 xliff = self.po2xliff(minipo)
82 print "The generated xml:"
83 xmltext = str(xliff)
84 print xmltext
85 assert xliff.translate("First line\nSecond line") == "Eerste lyn\nTweede lyn"
86 assert xliff.translate("First line\\nSecond line") is None
87 assert xmltext.find("line\\nSecond") == -1
88 assert xmltext.find("lyn\\nTweede") == -1
89 assert xmltext.find("line\nSecond") > 0
90 assert xmltext.find("lyn\nTweede") > 0
91
93 """Test the escaping of tabs"""
94 minipo = r'''msgid "First column\tSecond column"
95 msgstr "Eerste kolom\tTweede kolom"
96 '''
97 xliff = self.po2xliff(minipo)
98 print "The generated xml:"
99 xmltext = str(xliff)
100 print xmltext
101 assert xliff.translate("First column\tSecond column") == "Eerste kolom\tTweede kolom"
102 assert xliff.translate("First column\\tSecond column") is None
103 assert xmltext.find("column\\tSecond") == -1
104 assert xmltext.find("kolom\\tTweede") == -1
105 assert xmltext.find("column\tSecond") > 0
106 assert xmltext.find("kolom\tTweede") > 0
107
109 """Test the escaping of quotes (and slash)"""
110 minipo = r'''msgid "Hello \"Everyone\""
111 msgstr "Good day \"All\""
112
113 msgid "Use \\\"."
114 msgstr "Gebruik \\\"."
115 '''
116 xliff = self.po2xliff(minipo)
117 print "The generated xml:"
118 xmltext = str(xliff)
119 print xmltext
120 assert xliff.translate('Hello "Everyone"') == 'Good day "All"'
121 assert xliff.translate(r'Use \".') == r'Gebruik \".'
122 assert xmltext.find(r'\"') > 0 or xmltext.find(r'\"') > 0
123 assert xmltext.find(r"\\") == -1
124
125 - def getcontexttuples(self, node, namespace):
126 """Returns all the information in the context nodes as a list of tuples
127 of (type, text)"""
128 contexts = node.findall(".//{%s}context" % namespace)
129 return [(context.get("context-type"), lisa.getText(context)) for context in contexts]
130
150
173
174
195
197 minipo = r'''# Pulana Translation for bla
198 # Hallo Ma!
199 #, fuzzy
200 msgid ""
201 msgstr ""
202 "MIME-Version: 1.0\n"
203 '''
204 xliff = self.po2xliff(minipo)
205 print "The generated xml:"
206 xmltext = str(xliff)
207 print xmltext
208 assert len(xliff.units) == 1
209 unit = xliff.units[0]
210 assert unit.source == unit.target == "MIME-Version: 1.0\n"
211 assert unit.xmlelement.get("restype") == "x-gettext-domain-header"
212 assert unit.xmlelement.get("approved") != "yes"
213 assert unit.xmlelement.get("{%s}space" % lisa.XML_NS) == "preserve"
214 assert unit.getnotes("po-translator") == "Pulana Translation for bla\nHallo Ma!"
215
217 minipo = r'''#, fuzzy
218 msgid "two"
219 msgstr "pedi"
220
221 msgid "three"
222 msgstr "raro"
223 '''
224 xliff = self.po2xliff(minipo)
225 print "The generated xml:"
226 xmltext = str(xliff)
227 print xmltext
228 assert len(xliff.units) == 2
229 assert xliff.units[0].isfuzzy()
230 assert not xliff.units[1].isfuzzy()
231
233 minipo = r'''msgid "cow"
234 msgid_plural "cows"
235 msgstr[0] "inkomo"
236 msgstr[1] "iinkomo"
237 '''
238 xliff = self.po2xliff(minipo)
239 print "The generated xml:"
240 xmltext = str(xliff)
241 print xmltext
242 assert len(xliff.units) == 1
243 assert xliff.translate("cow") == "inkomo"
244
246 minipo = r'''msgid "cow"
247 msgid_plural "cows"
248 msgstr[0] "inkomo"
249 msgstr[1] "iinkomo"
250 msgstr[2] "iiinkomo"
251 '''
252 xliff = self.po2xliff(minipo)
253 print "The generated xml:"
254 xmltext = str(xliff)
255 print xmltext
256 assert len(xliff.units) == 1
257 assert xliff.translate("cow") == "inkomo"
258
266
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"'''
270 xliff = self.po2xliff(minipo)
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"
273
296