区域设置不能切换到Rails 4

nux*_*xxx 7 ruby ruby-on-rails rails-i18n ruby-on-rails-4

我的Rails应用程序是在rails 4.0.2上,我在使用locale变量和params[:locale]从官方rails 指南之后的url方案切换翻译时遇到问题.我有一个单页的网站我的网站.

我的国际化路线:

scope "(:locale)", locale: /en|de/ do
  #my routes here
end
Run Code Online (Sandbox Code Playgroud)

我的应用控制器

before_filter :set_locale
  def set_locale
     I18n.locale = params[:locale] || I18n.default_locale
     #Rails.application.routes.default_url_options[:locale]= I18n.locale
  end

  # app/controllers/application_controller.rb
  def default_url_options(options = {})
     { locale: I18n.locale }.merge options
  end
Run Code Online (Sandbox Code Playgroud)

用于更改视图中区域设置变量的链接:

<%= link_to_unless I18n.locale == :en, "English", locale: :en %>
|
<%= link_to_unless I18n.locale == :de, "Deutsch", locale: :de %>
Run Code Online (Sandbox Code Playgroud)

会发生什么:locale变量设置正确但翻译没有切换.如果我删除其中一个翻译文件(目前用于英语和德语),语言将切换到剩余的翻译文件.当我放回另一个翻译文件并尝试通过更改语言环境变量切换到它时,它永远不会切换到另一种语言.

为什么我的代码没有改变翻译?

spi*_*ann 0

我认为您需要更明确地定义对区域设置的约束:

scope path: '(:locale)', constraints: { locale: /en|de/ } do
  # routes you want to localize
end
Run Code Online (Sandbox Code Playgroud)