You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

l10n.py 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. from django.template import Library, Node, TemplateSyntaxError
  2. from django.utils import formats
  3. register = Library()
  4. @register.filter(is_safe=False)
  5. def localize(value):
  6. """
  7. Force a value to be rendered as a localized value,
  8. regardless of the value of ``settings.USE_L10N``.
  9. """
  10. return str(formats.localize(value, use_l10n=True))
  11. @register.filter(is_safe=False)
  12. def unlocalize(value):
  13. """
  14. Force a value to be rendered as a non-localized value,
  15. regardless of the value of ``settings.USE_L10N``.
  16. """
  17. return str(formats.localize(value, use_l10n=False))
  18. class LocalizeNode(Node):
  19. def __init__(self, nodelist, use_l10n):
  20. self.nodelist = nodelist
  21. self.use_l10n = use_l10n
  22. def __repr__(self):
  23. return '<%s>' % self.__class__.__name__
  24. def render(self, context):
  25. old_setting = context.use_l10n
  26. context.use_l10n = self.use_l10n
  27. output = self.nodelist.render(context)
  28. context.use_l10n = old_setting
  29. return output
  30. @register.tag('localize')
  31. def localize_tag(parser, token):
  32. """
  33. Force or prevents localization of values, regardless of the value of
  34. `settings.USE_L10N`.
  35. Sample usage::
  36. {% localize off %}
  37. var pi = {{ 3.1415 }};
  38. {% endlocalize %}
  39. """
  40. use_l10n = None
  41. bits = list(token.split_contents())
  42. if len(bits) == 1:
  43. use_l10n = True
  44. elif len(bits) > 2 or bits[1] not in ('on', 'off'):
  45. raise TemplateSyntaxError("%r argument should be 'on' or 'off'" % bits[0])
  46. else:
  47. use_l10n = bits[1] == 'on'
  48. nodelist = parser.parse(('endlocalize',))
  49. parser.delete_first_token()
  50. return LocalizeNode(nodelist, use_l10n)