翻译url模式并在url前面加上语言代码。
django-i18nurls的Python项目详细描述
这个django应用程序可以在url模式前面加上active 语言,并使用gettext使url模式可翻译。还有这个 包包含一个能够激活正确语言的中间件 (基于请求的URL中的语言前缀)。
注意
在djangocon eu 2011冲刺中,我写了一个补丁 Django核心的功能。此修补程序已被接受,并将 包括在Django 1.4中(感谢Jannis Leidel和Russell Keith Magee 他们的反馈和评论补丁)。
django文档:Internationalization: in URL patterns。
转换URL模式
安装此包后,还可以将url模式标记为可翻译 使用ugettext_lazy()函数。示例:
from django.conf.urls.defaults import patterns, include, url from django.utils.translation import ugettext_lazy as _ from i18nurls.i18n import i18n_patterns urlpatterns = patterns('' url(r'^sitemap\.xml$', 'sitemap.view', name='sitemap_xml'), ) news_patterns = patterns('' url(r'^$', 'news.views.index', name='index'), url(_(r'^category/(?P<slug>[\w-]+)/$'), 'news.views.category', name='category'), url(r'^(?P<slug>[\w-]+)/$', 'news.views.details', name='detail'), ) urlpatterns += i18n_patterns('', url(_(r'^about/$'), 'about.view', name='about'), url(_(r'^news/$'), include(news_patterns, namespace='news')), )
创建翻译后,reverse()函数将返回 活动语言中的URL。示例:
from django.core.urlresolvers import reverse from django.utils.translation import activate >>> activate('en') >>> reverse('news:category', kwargs={'slug': 'recent'}) '/en/news/category/recent/' >>> activate('nl') >>> reverse('news:category', kwargs={'slug': 'recent'}) '/nl/nieuws/categorie/recent/'
在模板中反转
如果本地化的url在模板中被反转,它们总是使用当前的 语言。使用language模板链接到另一种语言的url 标签。它启用所附模板部分中的给定语言:
{% load i18nurls i18n %} {% get_available_languages as languages %} {% trans "View this category in:" %} {% for lang_code, lang_name in languages %} {% language lang_code %} <a href="{% url category slug=category.slug %}">{{ lang_name }}</a> {% endlanguage %} {% endfor %}
另请参见:Reversing in templates。
安装
- 安装django-i18nurls包(例如:pip install django-i18nurls)。
- 将i18nurls添加到settings.INSTALLED_APPS中。
- 将i18nurls.middleware.LocaleMiddleware添加到 settings.MIDDLEWARE_CLASSES(确保它在 CommonMiddleware)。
更改日志
v0.7
- {% language %}template标记已实现(感谢harro van der klauw)。
- LocaleMiddleware类不再修补(问题3)。
- i18n_patterns不再修补。
- 在LocaleMiddlewareregex中,尾部斜杠现在是可选的。
v0.6.1
- 模板和区域设置文件夹已添加到setup.py脚本(问题1)。
v0.6
- api已更改,因此它将与即将发布的django 1.4中的i18n_patterns匹配。
v0.5.2
- 一些自述错误已更正。
v0.5.1
- 一些代码清理。
v0.5
- 初次发布。