a493c9731410cad0a079d306d852919e5cf7b8ab
[fnpdjango.git] / fnpdjango / utils / urls.py
1 """
2 Utilities for urlconfs.
3 """
4
5 import re
6 from django.conf import settings
7 from django.core.urlresolvers import LocaleRegexURLResolver
8 from django.utils.translation import get_language
9
10
11 class MyLocaleRegexURLResolver(LocaleRegexURLResolver):
12     """
13     A URL resolver that always matches the active language code as URL prefix.
14
15     Rather than taking a regex argument, we just override the ``regex``
16     function to always return the active language-code as regex.
17     """
18     @property
19     def regex(self):
20         language_code = get_language()
21         if language_code == settings.LANGUAGE_CODE:
22             return re.compile('')
23         if language_code not in self._regex_dict:
24             regex_compiled = re.compile('^%s/' % language_code, re.UNICODE)
25             self._regex_dict[language_code] = regex_compiled
26         return self._regex_dict[language_code]
27
28
29 def i18n_patterns(*args):
30     """
31     Adds the language code prefix to every URL pattern within this
32     function. This may only be used in the root URLconf, not in an included
33     URLconf.
34
35     """
36     pattern_list = list(args)
37     if not settings.USE_I18N:
38         return pattern_list
39     return pattern_list + [MyLocaleRegexURLResolver(pattern_list)]