Arabic and Farsi languages use their own digits. This template filter translates any digits in the supplied unicode string into the correct ones for the language. The previous version used StringIO to parse the string one character at a time. It now uses regular expressions.
I just saw that kcarnold created two snippets that also removed the need for StringIO: 981 and 982. That last snippet is almost the same as this one.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import re
from django import template
from django.utils import translation
from django.template import defaultfilters
register = template.Library()
LANGUAGE_DIGITS = {
'ar': u'\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669',
'fa': u'\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9',
}
digit_re = re.compile('\d')
def i18n_digits(str, lang=None):
"""
Translate the digits in a string into the digits used in the given
language. If no language is given, the language code from the current
language is used. While the input can be a basic string, the output will
always be unicode.
"""
uc_str = unicode(str)
if lang is None:
lang = translation.get_language()
digits_table = LANGUAGE_DIGITS.get(lang, None)
if digits_table is not None:
def digit_replace(match):
return digits_table[int(match.group())]
return digit_re.sub(digit_replace, uc_str)
else:
return uc_str
i18n_digits = defaultfilters.stringfilter(i18n_digits)
register.filter('i18n_digits', i18n_digits)
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 10 months, 2 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 10 months, 2 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 5 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 6 months ago
- Help text hyperlinks by sa2812 1 year, 6 months ago
Comments
Please login first before commenting.