Ruby on rails 区域设置未在Rails 4中切换
我的Rails应用程序在Rails 4.0.2上,在切换官方Rails下url方案中的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
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
中的德语而不是视图中的德语:|