我有一个现有的多语言Django应用程序,我正在移植到Django 1.4.I18n支持目前基于一些丑陋的黑客,我想使用Django的内置i18n模块.
一个限制是我不想更改已经存在的URL.这个网站已经活跃了一段时间,并且有一些外部链接,我不想打破或重定向.网址方案的工作方式如下:英文内容位于网站的根目录,而其他语言则使用域名中的前缀:
英文网址:
/
/articles/
/suggestions/
Run Code Online (Sandbox Code Playgroud)
西班牙语网址:
/es/
/es/articulos/
/es/sugerencias/
Run Code Online (Sandbox Code Playgroud)
我已经将翻译后的页面与Django 1.4的i18n模块配合使用了,但它确实非常非常希望将所有英文网址放在/ en /下.我尝试了一些不同的黑客,包括为英文版定义非国际化的网址:
def build(callback):
return callback('',
url(_(r'^$'), home.index, name="home"),
url(_(r'^articles/$'), content.article_list, name='article_list'),
url(_(r'^suggestions/$'), suggestions.suggestions, name='suggestions'),
)
urlpatterns = build(patterns)
urlpatterns += build(i18n_patterns)
Run Code Online (Sandbox Code Playgroud)
这使得网址正确解析,但执行反向解析的{%url%}标记不起作用.
完成非前缀英语网址的最佳方法是什么?
我已经正确安装了国际化。
它适用于以下网址:
/en/bookings/ #English
/es/reservas/ #Spanish
Run Code Online (Sandbox Code Playgroud)
在主页中,语言切换也能正常工作。
- 有什么问题吗?
当我更改翻译页面中的语言时,例如 /en/bookings/,如果我将语言转换为西班牙语 (es),我将再次重定向到 /en/bookings/ 并看到英文页面。
如果我更改前缀(如这个答案),重定向将转到不存在的 /es/bookings/ 。
我不想被重定向到主页。
- 我喜欢什么?
如果我在 /en/bookings/ 并切换到西班牙语,我想重定向到 /es/reservas/,所有翻译的 url。
什么是最好的方法?
谢谢。