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") == "no" 
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