summaryrefslogtreecommitdiff
path: root/repoze/bfg/i18n.py
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/bfg/i18n.py
parent8eefee0b38b2abc3f4e7cc147a45bebb16dd78cc (diff)
downloadpyramid-cffb6b8a0141579324565c022de8079c9affe44c.tar.gz
pyramid-cffb6b8a0141579324565c022de8079c9affe44c.tar.bz2
pyramid-cffb6b8a0141579324565c022de8079c9affe44c.zip
Punt and use zope.i18nmessageid.
Diffstat (limited to 'repoze/bfg/i18n.py')
-rw-r--r--repoze/bfg/i18n.py41
1 files changed, 21 insertions, 20 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)