区域设置不能切换到Rails 4

时间:2015-05-08 11:20:52

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

我的Rails应用程序在rails 4.0.2上,我在使用locale变量和params[:locale]来自官方路径guide之后的网址方案切换翻译时出现问题。我在my site有一个单页网站。

我的国际化路线:

scope "(:locale)", locale: /en|de/ do
  #my routes here
end

我的应用程序控制器

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

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

<%= link_to_unless I18n.locale == :en, "English", locale: :en %>
|
<%= link_to_unless I18n.locale == :de, "Deutsch", locale: :de %>

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

为什么我的代码不会改变翻译?

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,也许这对你来说是一个解决方案:

routes.rb更改

scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
  #your routes here
end
get '*path', to: redirect("/#{I18n.default_locale}/%{path}")
get '', to: redirect("/#{I18n.default_locale}")
application_controller.rb

中的

def set_locale
  I18n.locale = params[:locale] if params[:locale].present?
end

def default_url_options(options = {})
  {locale: I18n.locale}
end

P.S。

config/locales/en.yml这样的事情:

en:
  languages:
    en: "English"
    de: "Deutsch"

和德语config/locales/de.yml

在视图中

<%= link_to_unless_current t('languages.en'), locale: :en %>
|
<%= link_to_unless_current t('languages.de'), locale: :de %>

答案 1 :(得分:0)

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

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