Django中的多语言URL

1 投票
4 回答
1532 浏览
提问于 2025-04-16 01:40

在Django中,支持多语言网址的最佳方法是什么?比如:

http://myenglishwebsite.com/user/foo
http://mygermanwebsite.com/benutzer/foo

我应该在urls.py里使用多语言吗,比如这样:

(r'^%s/(?P<slug>[-w]+)/$' % _('user'), 'myapp.view.relatedaction')

这似乎不是一个好的解决方案,而且我也没能让它正常工作 :))

4 个回答

0

我知道这个问题已经很老了,但我在找类似的东西时发现了一个叫做 transurlvania 的项目。希望这对你有帮助。

0

最好的办法就是对每种语言都使用相同的网址。反正这些网址并不是给用户看的。

你有没有想过,当你的网址不能用ASCII字符表示时会发生什么?

1

这个解决方案不管用,因为在Django服务器启动时,urls.py文件会被加载一次,这个过程是在第一个用户发起请求之前完成的。所以这个文件必须是和用户无关的(任何模块级别的代码都应该和用户无关,因为它只会加载一次)。

我猜Django的URL解析器在处理请求的某个环节会进行字符串转换,所以你可以使用一些装饰器类:

(URLLangDecorator(r'^%s/(?P<slug>[-w]+)/$', ['user']), 'myapp.view.relatedaction')
class URLLangDecorator:
    def __init__(self, url, params):
        self.url, self.params = url, params

    def __str__(self):
        return self.url % map(_, self.params)
    # Django can also preform "%" operation, so to be safe:
    def __mod__(self, arg):
        return str(self) % arg

这只是我的猜测,所以我不确定这样做是否有效。

撰写回答