summaryrefslogtreecommitdiff
path: root/repoze
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2010-04-19 09:18:37 +0000
committerChris McDonough <chrism@agendaless.com>2010-04-19 09:18:37 +0000
commitcffb6b8a0141579324565c022de8079c9affe44c (patch)
treedf6fb725c5d54699c699c8193a1f7ff6f07e4ca7 /repoze
parent8eefee0b38b2abc3f4e7cc147a45bebb16dd78cc (diff)
downloadpyramid-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.py41
-rw-r--r--repoze/bfg/tests/test_i18n.py41
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):