mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Add ConcatenatedLazyText object
This object will allow splitting large translatable strings into more pieces, so translators don't have to re-translate the entire text when a small part changes. https://fedorahosted.org/freeipa/ticket/3587
This commit is contained in:
@@ -136,6 +136,9 @@ class LazyText(object):
|
||||
|
||||
This class is not used directly. See the `Gettext` and `NGettext`
|
||||
subclasses.
|
||||
|
||||
Concatenating LazyText objects with the + operator gives
|
||||
ConcatenatedLazyText objects.
|
||||
"""
|
||||
|
||||
__slots__ = ('domain', 'localedir', 'key', 'args')
|
||||
@@ -176,6 +179,12 @@ class LazyText(object):
|
||||
"""
|
||||
return not self.__eq__(other)
|
||||
|
||||
def __add__(self, other):
|
||||
return ConcatenatedLazyText(self) + other
|
||||
|
||||
def __radd__(self, other):
|
||||
return other + ConcatenatedLazyText(self)
|
||||
|
||||
|
||||
class Gettext(LazyText):
|
||||
"""
|
||||
@@ -390,6 +399,43 @@ class NGettext(LazyText):
|
||||
return ng(self.singular, self.plural, count)
|
||||
|
||||
|
||||
class ConcatenatedLazyText(object):
|
||||
"""Concatenation of multiple strings, or any objects convertible to unicode
|
||||
|
||||
Used to concatenate several LazyTexts together.
|
||||
This allows large strings like help text to be split, so translators
|
||||
do not have to re-translate the whole text when only a small part changes.
|
||||
|
||||
Additional strings may be added to the end with the + or += operators.
|
||||
"""
|
||||
def __init__(self, *components):
|
||||
self.components = list(components)
|
||||
|
||||
def __repr__(self):
|
||||
return '%s(%r)' % (self.__class__.__name__, self.components)
|
||||
|
||||
def __unicode__(self):
|
||||
return u''.join(unicode(c) for c in self.components)
|
||||
|
||||
def __json__(self):
|
||||
return unicode(self)
|
||||
|
||||
def __mod__(self, kw):
|
||||
return unicode(self) % kw
|
||||
|
||||
def __add__(self, other):
|
||||
if isinstance(other, ConcatenatedLazyText):
|
||||
return ConcatenatedLazyText(*self.components + other.components)
|
||||
else:
|
||||
return ConcatenatedLazyText(*self.components + [other])
|
||||
|
||||
def __radd__(self, other):
|
||||
if isinstance(other, ConcatenatedLazyText):
|
||||
return ConcatenatedLazyText(*other.components + self.components)
|
||||
else:
|
||||
return ConcatenatedLazyText(*[other] + self.components)
|
||||
|
||||
|
||||
class GettextFactory(object):
|
||||
"""
|
||||
Factory for creating ``_()`` functions.
|
||||
|
||||
Reference in New Issue
Block a user