在Rails 3中更改运行时的语言环境

时间:2011-07-25 21:13:13

标签: ruby-on-rails ruby-on-rails-3 internationalization ruby-on-rails-3.1

我正在使用rails 3应用程序,它在我的locales文件夹中有不同的语言。这些文件是en.yml,pu.yml,sp.yml。所有语言都必须转换为各种格式,我需要帮助,让用户选择任何语言,如

<%= link_to "English language", ...%> <%= link_to "spanish", ...%>

当用户选择语言时,语言被设置为用户的首选语言,这样用户无需在每次登录后继续选择语言。

2 个答案:

答案 0 :(得分:17)

只需在locale模型中添加User字符串属性,然后在before_filter中设置application_controller.rb即可:

before_filter :set_locale
...
def set_locale
  I18n.locale = current_user.locale if current_user
end

Rails Internationalization (I18n) API的更多信息!

答案 1 :(得分:6)

添加到ream88的答案:

<%= link_to "spanish", :controller => 'locale', :action => 'set', :id => 'es' %>

在LocaleController(或任何其他控制器)

def set
  locale = params[:id]
  raise 'unsupported locale' unless ['es', 'en', ... ].include?(locale)
  current_user.locale = locale
  current_user.save
  redirect_to :back
end