Skip to content

Commit

Permalink
Do not modify mapping in tstring if (partially) updating mapping in t…
Browse files Browse the repository at this point in the history
…ranslator call.
  • Loading branch information
wichert committed Feb 3, 2012
1 parent 3afa341 commit db73244
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
11 changes: 7 additions & 4 deletions translationstring/__init__.py
Expand Up @@ -270,15 +270,18 @@ def Translator(translations=None, policy=None):
def translator(tstring, domain=None, mapping=None):
if not hasattr(tstring, 'interpolate'):
tstring = TranslationString(tstring, domain=domain, mapping=mapping)
elif mapping:
if tstring.mapping:
new_mapping = tstring.mapping.copy()
new_mapping.update(mapping)
else:
new_mapping = mapping
tstring = TranslationString(tstring, domain=domain, mapping=new_mapping)
translated = tstring
if translations is not None:
translated = policy(translations, tstring, domain)
if translated == tstring:
translated = tstring.default
if tstring.mapping is None:
tstring.mapping = mapping
elif mapping is not None:
tstring.mapping.update(mapping)
if translated and '$' in translated and tstring.mapping:
translated = tstring.interpolate(translated)
return translated
Expand Down
3 changes: 3 additions & 0 deletions translationstring/tests/test_integration.py
Expand Up @@ -91,6 +91,9 @@ def test_translator_with_interpolation_partially_overridden_in_translate(self):
result = translator(tstring, mapping={'two': 'kakkonen'})
self.assertEqual(result, 'yksi kakkonen ${three}')

# Make sure original mapping is not touched
self.assertEqual(tstring.mapping, {'one': 'yksi', 'two': 'kaksi'})


class PluralizerIntegrationTests(unittest.TestCase):
def _makeTranslations(self):
Expand Down

0 comments on commit db73244

Please sign in to comment.