comparison genshi/filters/tests/i18n.py @ 560:f227a2f12e5f

Start implementation of advanced I18n as dicussed in #129 and the MailingList. This is not complete yet, but many simple cases work okay.
author cmlenz
date Thu, 05 Jul 2007 11:06:14 +0000
parents da5cbf6d134d
children aa8e85a4085e
comparison
equal deleted inserted replaced
558:2a6cf641cb5e 560:f227a2f12e5f
88 <input type="submit" value="Reply" title="Reply to comment $num" /> 88 <input type="submit" value="Reply" title="Reply to comment $num" />
89 </html>""") 89 </html>""")
90 translator = Translator() 90 translator = Translator()
91 messages = list(translator.extract(tmpl.stream)) 91 messages = list(translator.extract(tmpl.stream))
92 self.assertEqual(0, len(messages)) 92 self.assertEqual(0, len(messages))
93
94 def test_extract_i18n_msg(self):
95 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
96 xmlns:i18n="http://genshi.edgewall.org/i18n">
97 <p i18n:msg="">
98 Please see <a href="help.html">Help</a> for details.
99 </p>
100 </html>""")
101 translator = Translator()
102 messages = list(translator.extract(tmpl.stream))
103 self.assertEqual(1, len(messages))
104 self.assertEqual('Please see [1:Help] for details.', messages[0][2])
105
106 def test_translate_i18n_msg(self):
107 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
108 xmlns:i18n="http://genshi.edgewall.org/i18n">
109 <p i18n:msg="">
110 Please see <a href="help.html">Help</a> for details.
111 </p>
112 </html>""")
113 gettext = lambda s: u"Für Details siehe bitte [1:Hilfe]."
114 tmpl.filters.insert(0, Translator(gettext))
115 self.assertEqual("""<html>
116 <p>Für Details siehe bitte <a href="help.html">Hilfe</a>.</p>
117 </html>""", tmpl.generate().render())
118
119 def test_extract_i18n_msg_nested(self):
120 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
121 xmlns:i18n="http://genshi.edgewall.org/i18n">
122 <p i18n:msg="">
123 Please see <a href="help.html"><em>Help</em> page</a> for details.
124 </p>
125 </html>""")
126 translator = Translator()
127 messages = list(translator.extract(tmpl.stream))
128 self.assertEqual(1, len(messages))
129 self.assertEqual('Please see [1:[2:Help] page] for details.',
130 messages[0][2])
131
132 def test_translate_i18n_msg_nested(self):
133 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
134 xmlns:i18n="http://genshi.edgewall.org/i18n">
135 <p i18n:msg="">
136 Please see <a href="help.html"><em>Help</em> page</a> for details.
137 </p>
138 </html>""")
139 gettext = lambda s: u"Für Details siehe bitte [1:[2:Hilfeseite]]."
140 tmpl.filters.insert(0, Translator(gettext))
141 self.assertEqual("""<html>
142 <p>Für Details siehe bitte <a href="help.html"><em>Hilfeseite</em></a>.</p>
143 </html>""", tmpl.generate().render())
144
145 def test_extract_i18n_msg_empty(self):
146 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
147 xmlns:i18n="http://genshi.edgewall.org/i18n">
148 <p i18n:msg="">
149 Show me <input type="text" name="num" /> entries per page.
150 </p>
151 </html>""")
152 translator = Translator()
153 messages = list(translator.extract(tmpl.stream))
154 self.assertEqual(1, len(messages))
155 self.assertEqual('Show me [1:] entries per page.', messages[0][2])
156
157 def test_translate_i18n_msg_empty(self):
158 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
159 xmlns:i18n="http://genshi.edgewall.org/i18n">
160 <p i18n:msg="">
161 Show me <input type="text" name="num" /> entries per page.
162 </p>
163 </html>""")
164 gettext = lambda s: u"[1:] Einträge pro Seite anzeigen."
165 tmpl.filters.insert(0, Translator(gettext))
166 self.assertEqual("""<html>
167 <p><input type="text" name="num"/> Einträge pro Seite anzeigen.</p>
168 </html>""", tmpl.generate().render())
169
170 def test_extract_i18n_msg_multiple(self):
171 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
172 xmlns:i18n="http://genshi.edgewall.org/i18n">
173 <p i18n:msg="">
174 Please see <a href="help.html">Help</a> for <em>details</em>.
175 </p>
176 </html>""")
177 translator = Translator()
178 messages = list(translator.extract(tmpl.stream))
179 self.assertEqual(1, len(messages))
180 self.assertEqual('Please see [1:Help] for [2:details].', messages[0][2])
181
182 def test_translate_i18n_msg_multiple(self):
183 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
184 xmlns:i18n="http://genshi.edgewall.org/i18n">
185 <p i18n:msg="">
186 Please see <a href="help.html">Help</a> for <em>details</em>.
187 </p>
188 </html>""")
189 gettext = lambda s: u"Für [2:Details] siehe bitte [1:Hilfe]."
190 tmpl.filters.insert(0, Translator(gettext))
191 self.assertEqual("""<html>
192 <p>Für <em>Details</em> siehe bitte <a href="help.html">Hilfe</a>.</p>
193 </html>""", tmpl.generate().render())
194
195 def test_extract_i18n_msg_multiple_empty(self):
196 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
197 xmlns:i18n="http://genshi.edgewall.org/i18n">
198 <p i18n:msg="">
199 Show me <input type="text" name="num" /> entries per page, starting at page <input type="text" name="num" />.
200 </p>
201 </html>""")
202 translator = Translator()
203 messages = list(translator.extract(tmpl.stream))
204 self.assertEqual(1, len(messages))
205 self.assertEqual('Show me [1:] entries per page, starting at page [2:].',
206 messages[0][2])
207
208 def test_translate_i18n_msg_multiple_empty(self):
209 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
210 xmlns:i18n="http://genshi.edgewall.org/i18n">
211 <p i18n:msg="">
212 Show me <input type="text" name="num" /> entries per page, starting at page <input type="text" name="num" />.
213 </p>
214 </html>""")
215 gettext = lambda s: u"[1:] Einträge pro Seite, beginnend auf Seite [2:]."
216 tmpl.filters.insert(0, Translator(gettext))
217 self.assertEqual("""<html>
218 <p><input type="text" name="num"/> Eintr\xc3\xa4ge pro Seite, beginnend auf Seite <input type="text" name="num"/>.</p>
219 </html>""", tmpl.generate().render())
220
221 def test_extract_i18n_msg_with_directive(self):
222 tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
223 xmlns:i18n="http://genshi.edgewall.org/i18n">
224 <p i18n:msg="">
225 Show me <input type="text" name="num" py:attrs="{'value': x}" /> entries per page.
226 </p>
227 </html>""")
228 translator = Translator()
229 messages = list(translator.extract(tmpl.stream))
230 self.assertEqual(1, len(messages))
231 self.assertEqual('Show me [1:] entries per page.', messages[0][2])
232
233 # FIXME: this currently fails :-/
234 # def test_translate_i18n_msg_with_directive(self):
235 # tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
236 # xmlns:i18n="http://genshi.edgewall.org/i18n">
237 # <p i18n:msg="">
238 # Show me <input type="text" name="num" py:attrs="{'value': x}" /> entries per page.
239 # </p>
240 # </html>""")
241 # gettext = lambda s: u"[1:] Einträge pro Seite anzeigen."
242 # tmpl.filters.insert(0, Translator(gettext))
243 # self.assertEqual("""<html>
244 # <p><input type="text" name="num" value="x"/> Einträge pro Seite anzeigen.</p>
245 # </html>""", tmpl.generate().render())
93 246
94 247
95 class ExtractTestCase(unittest.TestCase): 248 class ExtractTestCase(unittest.TestCase):
96 249
97 def test_markup_template_extraction(self): 250 def test_markup_template_extraction(self):
Copyright (C) 2012-2017 Edgewall Software