Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 区域设置未在Rails 4中切换_Ruby On Rails_Ruby_Ruby On Rails 4_Rails I18n - Fatal编程技术网

Ruby on rails 区域设置未在Rails 4中切换

Ruby on rails 区域设置未在Rails 4中切换,ruby-on-rails,ruby,ruby-on-rails-4,rails-i18n,Ruby On Rails,Ruby,Ruby On Rails 4,Rails I18n,我的Rails应用程序在Rails 4.0.2上,在切换官方Rails下url方案中的locale变量和params[:locale]的翻译时遇到问题。我有一个单页网站在 我的国际化路线: scope "(:locale)", locale: /en|de/ do #my routes here end 我的应用程序控制器 before_filter :set_locale def set_locale I18n.locale = params[:locale] || I18

我的Rails应用程序在Rails 4.0.2上,在切换官方Rails下url方案中的
locale
变量和
params[:locale]
的翻译时遇到问题。我有一个单页网站在

我的国际化路线:

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
变量,但未切换翻译。如果删除其中一个翻译文件(当前为英语和德语),则语言将切换到其余的翻译文件。当我放回另一个翻译文件并试图通过更改locale变量切换到它时,它从未切换到另一种语言


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

我认为您需要更明确地定义语言环境的约束:

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

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

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\u controller.rb中

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

def default_url_options(options = {})
  {locale: I18n.locale}
end
p、 美国

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 %>

|

不幸的是,这并没有改变什么。我希望您可以对此进行修补,因为Rails 4.0.2存在一些严重的安全问题,强烈建议使用4.0.13。像这样的工具可以在出现问题之前为您提供提示。感谢您的建议,我修补了gemset rails 4.0.13。您的代码给了我一个输出缓冲区错误:
语法错误,意外',',,预期::或'['或'.'..k_to_,除非当前为“英语”,locale::en);@output_buffer…
好!您需要编辑
config/locales/en.yml
en:languages:en:“English”de:“Deutsch”
config/locales/de.yml
中的德语而不是视图中的德语:|