diff options
| author | Chris McDonough <chrism@agendaless.com> | 2010-04-19 09:18:37 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2010-04-19 09:18:37 +0000 |
| commit | cffb6b8a0141579324565c022de8079c9affe44c (patch) | |
| tree | df6fb725c5d54699c699c8193a1f7ff6f07e4ca7 /repoze | |
| parent | 8eefee0b38b2abc3f4e7cc147a45bebb16dd78cc (diff) | |
| download | pyramid-cffb6b8a0141579324565c022de8079c9affe44c.tar.gz pyramid-cffb6b8a0141579324565c022de8079c9affe44c.tar.bz2 pyramid-cffb6b8a0141579324565c022de8079c9affe44c.zip | |
Punt and use zope.i18nmessageid.
Diffstat (limited to 'repoze')
| -rw-r--r-- | repoze/bfg/i18n.py | 41 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_i18n.py | 41 |
2 files changed, 24 insertions, 58 deletions
diff --git a/repoze/bfg/i18n.py b/repoze/bfg/i18n.py index c22348a26..1aa2d13eb 100644 --- a/repoze/bfg/i18n.py +++ b/repoze/bfg/i18n.py @@ -1,8 +1,24 @@ +############################################################################## +# +# Copyright (c) 2004 Zope Corporation and Contributors. +# All Rights Reserved. +# +# This software is subject to the provisions of the Zope Public License, +# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. +# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED +# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS +# FOR A PARTICULAR PURPOSE. +# +############################################################################## + import re from zope.interface import implements from zope.interface import classProvides +from zope.i18nmessageid.message import Message + from repoze.bfg.interfaces import ITranslator from repoze.bfg.interfaces import ITranslatorFactory from repoze.bfg.interfaces import IChameleonTranslate @@ -10,6 +26,8 @@ from repoze.bfg.interfaces import IChameleonTranslate from repoze.bfg.threadlocal import get_current_registry from repoze.bfg.threadlocal import get_current_request +TranslationString = Message + def get_translator(request, translator_factory=None): """ Return a :term:`translator` for the given request based on the :term:`translator factory` registered for the current application @@ -59,23 +77,6 @@ class InterpolationOnlyTranslator(object): mapping = getattr(message, 'mapping', None) return interpolate(message, mapping) -class TranslationString(unicode): - __slots__ = ('msgid', 'domain', 'mapping') - def __new__(cls, text, msgid=None, domain=None, mapping=None): - self = unicode.__new__(cls, text) - if msgid is None: - msgid = unicode(text) - self.msgid = msgid - self.domain = domain - self.mapping = mapping or {} - return self - - def __reduce__(self): - return self.__class__, self.__getstate__() - - def __getstate__(self): - return unicode(self), self.msgid, self.domain, self.mapping - class ChameleonTranslate(object): implements(IChameleonTranslate) def __init__(self, translator_factory): @@ -95,9 +96,9 @@ class ChameleonTranslate(object): if mapping is None: mapping = {} if translator is None: - return unicode(default) % mapping - if not isinstance(text, TranslationString): - text = TranslationString(default, msgid=text, domain=domain, + return interpolate(unicode(default), mapping) + if not hasattr(text, 'mapping'): + text = TranslationString(text, domain=domain, default=default, mapping=mapping) return translator(text) diff --git a/repoze/bfg/tests/test_i18n.py b/repoze/bfg/tests/test_i18n.py index ebbbfd8d8..f2799e5e2 100644 --- a/repoze/bfg/tests/test_i18n.py +++ b/repoze/bfg/tests/test_i18n.py @@ -48,41 +48,6 @@ class TestInterpolationOnlyTranslator(unittest.TestCase): result = translator(message) self.assertEqual(result, u'text 1') -class TestTranslationString(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.i18n import TranslationString - return TranslationString - - def _makeOne(self, text, **kw): - return self._getTargetClass()(text, **kw) - - def test_ctor_defaults(self): - ts = self._makeOne('text') - self.assertEqual(ts, u'text') - self.assertEqual(ts.msgid, u'text') - self.assertEqual(ts.domain, None) - self.assertEqual(ts.mapping, {}) - - def test_ctor_nondefaults(self): - ts = self._makeOne( - 'text', msgid='msgid', domain='domain', mapping='mapping') - self.assertEqual(ts, u'text') - self.assertEqual(ts.msgid, 'msgid') - self.assertEqual(ts.domain, 'domain') - self.assertEqual(ts.mapping, 'mapping') - - def test___reduce__(self): - klass = self._getTargetClass() - ts = self._makeOne('text') - result = ts.__reduce__() - self.assertEqual(result, (klass, (u'text', u'text', None, {}))) - - def test___getstate__(self): - ts = self._makeOne( - 'text', msgid='msgid', domain='domain', mapping='mapping') - result = ts.__getstate__() - self.assertEqual(result, (u'text', 'msgid', 'domain', 'mapping')) - class TestChameleonTranslate(unittest.TestCase): def setUp(self): request = DummyRequest() @@ -124,8 +89,8 @@ class TestChameleonTranslate(unittest.TestCase): result = trans('text') self.assertEqual(result, 'text') self.assertEqual(self.request.chameleon_target_language, None) - self.assertEqual(result.msgid, 'text') self.assertEqual(result.domain, None) + self.assertEqual(result.default, 'text') self.assertEqual(result.mapping, {}) def test_with_allargs(self): @@ -138,9 +103,9 @@ class TestChameleonTranslate(unittest.TestCase): context=None, target_language='lang', default='default') self.assertEqual(self.request.chameleon_target_language, 'lang') - self.assertEqual(result, 'default') - self.assertEqual(result.msgid, 'text') + self.assertEqual(result, 'text') self.assertEqual(result.domain, 'domain') + self.assertEqual(result.default, 'default') self.assertEqual(result.mapping, {'a':'1'}) class Test_interpolate(unittest.TestCase): |
