如何在Django中本地化我的网址?
url(u'^{0}/$'.format(_('register')), RegisterView.as_view(), name='register'),
我尝试了上述内容,但是当我停止并启动服务器时,它似乎才起作用。我想在应用程序启动时会翻译网址。
那么如果有办法解决这个问题呢?
答案 0 :(得分:2)
比在_()
中投掷urls.py
要复杂一点。您自己已经发现了这个原因:当Django启动时,URL被评估一次,而不是每个请求都被评估。因此你必须
a)将所有可能的翻译放在urls.py
或
b)自己实施路由
url('hello', hello, name="hello_en"),
url('hallo', hello, name="hello_de"),
url('buenos_dias', hello, name="hello_es"),
显然不是一个很好的解决方案,但它适用于小型项目。
这有它自身的缺点,特别是在使用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
这正是您正在寻找的