Mercurial > genshi > mirror
changeset 776:ddb58d74c8ee trunk
Added tests for the parameter support added to advanced internationalization in [901]. See #129.
author | cmlenz |
---|---|
date | Tue, 08 Jul 2008 19:46:08 +0000 |
parents | 886934df7fea |
children | 7a8ed44a5cfd |
files | genshi/filters/i18n.py genshi/filters/tests/i18n.py |
diffstat | 2 files changed, 72 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/genshi/filters/i18n.py +++ b/genshi/filters/i18n.py @@ -347,6 +347,8 @@ def __init__(self, params=u'', lineno=-1): """Initialize the message buffer. + :param params: comma-separated list of parameter names + :type params: `basestring` :param lineno: the line number on which the first stream event belonging to the message was found """ @@ -463,6 +465,7 @@ return parts + def extract_from_code(code, gettext_functions): """Extract strings from Python bytecode. @@ -506,6 +509,7 @@ yield funcname, strings return _walk(code.ast) + def extract(fileobj, keywords, comment_tags, options): """Babel extraction method for Genshi templates.
--- a/genshi/filters/tests/i18n.py +++ b/genshi/filters/tests/i18n.py @@ -11,6 +11,7 @@ # individuals. For the exact contribution history, see the revision # history and logs, available at http://genshi.edgewall.org/log/. +from datetime import datetime import doctest from StringIO import StringIO import unittest @@ -262,6 +263,73 @@ <p><input type="text" name="num"/> Eintr\xc3\xa4ge pro Seite, beginnend auf Seite <input type="text" name="num"/>.</p> </html>""", tmpl.generate().render()) + def test_extract_i18n_msg_with_param(self): + tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" + xmlns:i18n="http://genshi.edgewall.org/i18n"> + <p i18n:msg="name"> + Hello, ${user.name}! + </p> + </html>""") + translator = Translator() + messages = list(translator.extract(tmpl.stream)) + self.assertEqual(1, len(messages)) + self.assertEqual('Hello, %(name)s!', messages[0][2]) + + def test_translate_i18n_msg_with_param(self): + tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" + xmlns:i18n="http://genshi.edgewall.org/i18n"> + <p i18n:msg="name"> + Hello, ${user.name}! + </p> + </html>""") + gettext = lambda s: u"Hallo, %(name)s!" + tmpl.filters.insert(0, Translator(gettext)) + self.assertEqual("""<html> + <p>Hallo, Jim!</p> + </html>""", tmpl.generate(user=dict(name='Jim')).render()) + + def test_translate_i18n_msg_with_param_reordered(self): + tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" + xmlns:i18n="http://genshi.edgewall.org/i18n"> + <p i18n:msg="name"> + Hello, ${user.name}! + </p> + </html>""") + gettext = lambda s: u"%(name)s, sei gegrüßt!" + tmpl.filters.insert(0, Translator(gettext)) + self.assertEqual("""<html> + <p>Jim, sei gegrüßt!</p> + </html>""", tmpl.generate(user=dict(name='Jim')).render()) + + def test_extract_i18n_msg_with_two_params(self): + tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" + xmlns:i18n="http://genshi.edgewall.org/i18n"> + <p i18n:msg="name, time"> + Posted by ${post.author} at ${entry.time.strftime('%H:%m')} + </p> + </html>""") + translator = Translator() + messages = list(translator.extract(tmpl.stream)) + self.assertEqual(1, len(messages)) + self.assertEqual('Posted by %(name)s at %(time)s', messages[0][2]) + + def test_translate_i18n_msg_with_two_params(self): + tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" + xmlns:i18n="http://genshi.edgewall.org/i18n"> + <p i18n:msg="name, time"> + Written by ${entry.author} at ${entry.time.strftime('%H:%M')} + </p> + </html>""") + gettext = lambda s: u"%(name)s schrieb dies um %(time)s" + tmpl.filters.insert(0, Translator(gettext)) + entry = { + 'author': 'Jim', + 'time': datetime(2008, 4, 1, 14, 30) + } + self.assertEqual("""<html> + <p>Jim schrieb dies um 14:30</p> + </html>""", tmpl.generate(entry=entry).render()) + def test_extract_i18n_msg_with_directive(self): tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/" xmlns:i18n="http://genshi.edgewall.org/i18n">