Django:我如何本地化我的网址?

时间:2011-04-28 12:28:05

标签: django

如何在Django中本地化我的网址?

url(u'^{0}/$'.format(_('register')), RegisterView.as_view(), name='register'),

我尝试了上述内容,但是当我停止并启动服务器时,它似乎才起作用。我想在应用程序启动时会翻译网址。

那么如果有办法解决这个问题呢?

2 个答案:

答案 0 :(得分:2)

比在_()中投掷urls.py要复杂一点。您自己已经发现了这个原因:当Django启动时,URL被评估一次,而不是每个请求都被评估。因此你必须

a)将所有可能的翻译放在urls.py

b)自己实施路由

甲。全部在urls.py

url('hello', hello, name="hello_en"),
url('hallo', hello, name="hello_de"),
url('buenos_dias', hello, name="hello_es"),

显然不是一个很好的解决方案,但它适用于小型项目。

B中。实施路由

这有它自身的缺点,特别是在使用reverse()时。但是,它原则上是有效的:

urls.py:

#...
url('(?<path>.+)', dispatcher),
#...

views.py:

def dispatcher(request, path):
    if path == "hallo":
        lang = "de"
    elif path == "buenos_dias":
        lang = "de"
    else:
        lang = "en"

当然,您可以使查找更加智能,但是您必须做出预先假设:

# if request.session['language'] can be trusted:
def dispatcher(request, path):
    list_of_views = ['contact', 'about', 'foo']
    v = None
    for view in list_of_views:
        if _(view) == path:
            v = view
            break
    if v is None:
        # return 404 or the home page

答案 1 :(得分:0)

django 1.4中引入了URL的国际化

请参阅https://docs.djangoproject.com/en/dev/topics/i18n/translation/#url-internationalization

这正是您正在寻找的