【问题标题】:Always display locales in URL in rails 4 app在 Rails 4 应用程序的 URL 中始终显示语言环境
【发布时间】:2016-12-28 01:57:57
【问题描述】:

所以我使用 i18n gem,因为我的 rails 网络应用程序必须支持 2 种语言:FR 和 NL。

我将 FR 设为默认语言环境。

我的目标是确保在任何情况下,区域设置(即 /fr/ 或 /nl/)始终显示在 URL 中。

这是 locale=nl 的情况,但不是 locale=fr 作为默认语言环境的情况。

这里有一个用户故事的例子:

  1. 用户到达网站后必须选择他/她的语言:假设“FR”(“FR”是默认语言环境)
  2. 用户现在可以浏览网站
  3. 用户访问页面“Newsfeed”页面,他/她的 URL 是 http://localhost:3000/newsfeed

在此示例中,URL 应该是 http://localhost:3000/fr/newsfeed(在 URL 中带有 /fr/

这些是我的路线:

scope '(:locale)', constraints: { locale: /nl|fr/ } do

  resources :articles, :path => 'newsfeed', only: [:index, :edit, :destroy, :update, :new, :create]

  root to: 'languages#select'

  get '*path' => redirect('/')
end

在我的 application.rb 我有

config.i18n.default_locale = :fr
config.i18n.available_locales = [:fr, :nl]

在欢迎页面,用户必须选择他们的语言,我有这个

<%= link_to "Neederlands", home_path(:locale => 'nl') %> | <%= link_to "Français", home_path(:locale => 'fr') %>

总而言之,locale=nl 的 URL 将始终显示 *http://localhost:3000/nl/newsfeed 但对于默认区域设置 fr 情况并非如此,我需要解决这个问题。

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails locale rails-i18n


    【解决方案1】:

    我认为你需要重写 url_for 方法。

    module ActionController::Base
      def url_for(options)
        options.merge! {:locale => "correct locale"}
        super
      end
    end
    

    这个方法是在其他 Rails 类中定义的,我猜也像在视图和路由中一样。所以你需要覆盖所有这些。

    【讨论】:

      猜你喜欢
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 2012-05-30
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多