【问题标题】:Check if current URL pattern exist in another language in Django检查当前 URL 模式是否存在于 Django 中的另一种语言中
【发布时间】:2018-01-05 08:01:06
【问题描述】:

我正在尝试在 Django 中启动我的新网站,其中有很多设置,这些设置在未来将更难实现。其中之一是网站国际化,还有 url 模式国际化。

我想要实现的是拥有这样的网址:

www.example.com/news                 [en] [news]
www.example.com/en/news              [en] [news]
www.example.com/no/nyheter           [no] [news]
www.example.com/en/top-articles      [en] [top articles]

在我访问的每个页面上,我希望网站导航有一个下拉菜单,其中包含网站语言以及当前选择的语言。类似这样:

<ul class="dropdown">
    <li><a href="/en/news" hreflang="en" class="active">English</a></li>
    <li><a href="/no/nyheter" hreflang="no" rel="alternate">Norsk</a></li>
</ul>

现在换成另一种语言,有没有办法查看当前页面是否存在用户可以选择的语言?

如果当前页面不存在所选择的语言,我希望用户返回到所选语言的首页。所以下拉菜单看起来像这样:

<ul class="dropdown">
    <li><a href="/en/top-articles" hreflang="en" class="active">English</a></li>
    <li><a href="/no" hreflang="no">Norsk</a></li>
</ul>

【问题讨论】:

  • 您是在为每个资源创建翻译文件,还是在数据库中为每种语言保存每个资源的内容?
  • @OluwafemiSule 我正在考虑拥有翻译文件,对于文章等内容,我将在数据库中创建多个,每个用于每种语言。

标签: django internationalization url-pattern


【解决方案1】:

我看到您这样做的一种方法是根据用户选择在用户会话中设置django_language

Django 将处理任何文本的翻译 使用gettext_lazy 指定。您的 URL 将使用 Django url.reverse 函数以及 django_language 和其他参数生成。

确定当前页面是否以用户可以选择的语言存在将归结为您的实施。

例如,内容模型将有一个语言字段,以便于查询语言匹配 django_language 的记录。如果没有匹配,则可以重定向到 language 首页,假设它始终存在。

参考资料:

http://django-book.readthedocs.io/en/latest/chapter19.html

【讨论】:

  • 有没有办法通过 Django 中的模板来回溯这个?那么让我们说get_url "en" as url,如果存在它会返回URL?如果不是,它返回 false,我可以在模板中验证这一点以输出语言首页吗?这可能吗?我刚刚通读了有关国际化的完整文档,但找不到特定的回溯选项……至于验证某些 url,例如文章,我知道我必须创建自己的数据库查找。跨度>
  • 如果您想将模板内的 url 回溯到首页的 url,则应考虑编写自定义模板标签。这真的会很奇怪。我推荐的是在视图函数或方法中回溯。这样,您始终可以将用户重定向到适当的语言首页。
  • 好点,也许我应该这样做。您知道 gettext 是否允许使用变量而不是字符串?我有一个共享的标题模板,我需要使用该模板为每个页面传递一个 head_title 变量。通过每个页面的视图进行翻译时,使用变量而不是字符串看起来更简洁。
  • 是的 gettext 允许使用变量。
  • 太好了,我会试试你描述的方式:)
猜你喜欢
  • 2012-07-11
  • 1970-01-01
  • 2012-10-04
  • 2014-01-02
  • 2015-11-12
  • 2021-07-02
  • 1970-01-01
  • 2023-03-20
  • 2019-08-21
相关资源
最近更新 更多