翻译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

  • 初次发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JPanel自动调整大小   从Java更新MySQL数据库中的时间字段   在字符数组中读取字符串而不使用任何字符串函数,甚至java中的C++   java这段代码适合二叉树中的Euler教程吗?   如何在java中拆分字符串我的空行   爪哇舞厅舞者使用信号灯解决问题   java Android Studio MainActivity即使在新项目上也不存在   java Box2D:在矩形体的两端施加力,以实现2D无人机模拟。无法正确定位世界/本地点   python如何在Java中使用HTTP GET请求?   java如何使用ArrayList?   java为什么在缺少@Transactional时不抛出TransactionRequiredException?   java安卓活动可重用性   java Hibernate按属性获取记录不起作用   java如何在Android中使用SQLite多表触发带计数的连接查询?   java要读取的文本文件的正确文件路径   java使用JXL在Excel中切换网格线   java你能在没有外键的情况下用OneToOne关系链接两个实体吗?   java NotificationListenerService。cancelNotification引发NullPointerException   java我如何告诉Jersey客户端对其反序列化的每个类执行@JsonIgnoreProperties(ignoreUnknown=true)的等效操作?   循环特殊情况的java处理