【问题标题】:Rails I18n do not include default locale in URLRails I18n 在 URL 中不包含默认语言环境
【发布时间】:2020-07-07 01:53:06
【问题描述】:

TL;DR

我正在开发一个多语言和区域性的 Ruby-on-Rails (6.0) 项目。我希望 URL 不包含默认语言环境和区域 (I18n),而必须出现所有其他语言和区域。

当前:

mysite.com/en-us/xyz mysite.com/es-mx/xyz

预期:

mysite.com/xyz mysite.com/es-mx/xyz

其他信息:

所以我正在为客户开发一个多语言应用程序,将一个简单的 Wordpress 网站变成一个实际的 Web 应用程序。大多数要求都发生在登录之后,因此从 SEO 的角度来看,我并不关心这个世界。

但是,原始网站只有英文版。我们仍然重用(重建)几个可公开访问并在 Google 的 SERP 中排名良好的页面。我们不能丢失这些站点,即使在短期内也不能,因此 301 重定向不会这样做。

现在我所拥有的是针对语言和地区的 URL - 这里是摘录:

  • myapp.com/zh-cn/xyz
  • myapp.com/zh-CN/xyz
  • myapp.com/es-mx/xyz
  • myapp.com/he-il/xyz
  • myapp.com/hi-in/xyz

一切都很好,除了我需要英语美国版本,这是默认的语言和地区,不​​会出现在 URL 中。

  • zh-CN:myapp.com/xyz --> 默认语言(预期:无语言环境!)
  • zh-CN:myapp.com/zh-gb/xyz
  • es-MX: myapp.com/es-mx/xyz
  • he-IL:myapp.com/he-il/xyz
  • hi-IN: myapp.com/hi-in/xyz

我已经浏览了可用的资源,但找不到任何东西:

非常感谢任何指针或可能的解决方案!

【问题讨论】:

标签: ruby-on-rails internationalization rails-i18n ruby-on-rails-6


【解决方案1】:

假设你的 application_controller.rb

  def default_url_options
    { locale: I18n.locale }
  end

试试

  def default_url_options
    { locale: ((I18n.locale == I18n.default_locale) ? nil : I18n.locale) }
  end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    相关资源
    最近更新 更多