【问题标题】:Multilanguage URLs in DjangoDjango 中的多语言 URL
【发布时间】:2010-07-22 06:51:14
【问题描述】:

在 Django 中支持多语言 URL 的最佳方式是什么?喜欢:

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

我应该在 urls.py 中使用多语言吗:

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

这似乎不是一个好的解决方案,我无法让它工作:))

【问题讨论】:

  • 我对 Python 一无所知,但如果您要使用多语言 URL,请务必对任何非 US-ASCII 字符进行编码。此外,最好将其他 URL 重定向到单个规范页面,但如果您不能这样做,请确保在规范页面中包含 &lt;link rel="canonical" /&gt;。有关详细信息,请参阅此 Google 博客文章:googlewebmastercentral.blogspot.com/2010/03/…
  • @Lèse majesté:感谢您的提示。它说“开发多语言网站时无需创建特殊的 URL”。这是否意味着谷歌没有区别?例如:/product 和 /produkte URL 对 Google 来说是一样的吗?我记得我读过一篇谷歌文章,说的正好相反。
  • 该部分的意思是,最好的做法是像您已经做过的那样,使 URL 清楚地表明您所在网站的本地化版本(无论是通过语言代码子域或使用本地化 URL)。您不需要这样做,因为 Google 仍然能够仅通过内容来确定页面的语言,但这仍然是一种很好的做法。
  • 阅读更多内容后,如果您有多个本地化页面,我不确定是否需要使用规范链接。一方面,您不希望因重复内容而受到处罚,但也不希望 Google 为您的英文网页编制索引。我认为本地化页面会有另一个rel 值,但我能找到的最好的是lang-alt-(例如lang-alt-fr)和lang-orig-(例如lang-orig-en)的HTML5 提案:wiki.whatwg.org/wiki/RelExtensions跨度>
  • @Lèse majesté:谢谢你们的cmets。

标签: python django url-routing multilingual


【解决方案1】:

此解决方案不起作用,因为 urls.py 文件在第一个用户实际可以发出任何请求之前在 Django 服务器中加载一次,因此它必须是用户独立文件(任何模块级代码都应该是用户独立的,因为它只加载一次)。

我的猜测是 Django url 解析器在请求中间的某个地方进行 str() 转换,所以你可以使用一些装饰器类:

(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

这是猜测,所以我不确定它是否会起作用。

【讨论】:

  • 感谢您的回答。实际上它将是两个不同的安装(站点)。所以我不是在寻找任何依赖于用户的解决方案。我想要的只是一个通用的解决方案。因此,例如,将来我可以拥有一个法语网站。然后我可以只更改一项设置,然后它将仅支持该站点的法语 URL。
【解决方案2】:

最好的方法是为每种语言使用相同的网址。无论如何,它们不是供最终用户阅读的。

你有没有想过当你的 url 不能用 ASCII 表示时会发生什么?

【讨论】:

  • 这对搜索引擎很重要。所以,我想支持这一点。我说的是 ASCII 表示/slug 版本。既然我可以决定,那就没有问题了。
  • @pocoa,谢谢,你有一些链接我可以读到需要这样翻译 url 的搜索引擎吗?
  • @gnibbler:实际上,我当时正在寻找那个。现在我不确定。我在看上面 Lèse majesté 的链接。谷歌表示“开发多语言网站时无需创建特殊的 URL。”也许我错了,也许我真的不需要它。我正在努力寻找答案。对不起,如果我误导你了。
  • @gnibbler:我问过另一个问题。请查看stackoverflow.com/questions/3306742/multilanguage-urls
  • 您应该始终使用 slug 而不是原始内容,这样编码就不是问题了。我不同意用户不阅读网址,我确实阅读过它们。搜索引擎也会阅读它们,更重要的是,如果 url 包含它,它们会在找到的页面的 url 中突出显示搜索词。
【解决方案3】:

我知道这是一个老问题,但我一直在寻找类似的东西并找到了transurlvania 项目。希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-15
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多