我的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
变量设置正确但翻译没有切换。如果我删除其中一个翻译文件(目前用于英语和德语),语言将切换到剩余的翻译文件。当我放回另一个翻译文件并尝试通过更改语言环境变量切换到它时,它永远不会切换到另一种语言。
为什么我的代码不会改变翻译?
答案 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