1

我有一个简单的 Rails 应用程序(甚至不是数据库驱动的)。基本上我想让它支持两种语言。我的方法是在页脚中有两个小标志,一个是 GB(用于English),一个是 Germany (用于German)。当用户点击一个时,网站的语言会变为国家标志的相应语言

我的 [ en.yml ] 和 [ de.yml ] 都设置好了,我在所有视图中都使用了它们的键,我什至通过在 [ en 之间交换 [ config.i18n.default_locale ] 属性来测试它们是否可以工作] 和 [ de ] 在 [ config/application.rb ] 中。在这方面一切都很好。

但是,我对如何实现语言更改机制感到困惑。我创建了一个名为 [ Language ] 的控制器,并在其中定义了一个名为 [ Set ] 的方法,但除此之外,它几乎是空白的,这是我认为应该发生的事情:

class LanguageController < ApplicationController
  def set
    I18n.locale = params[:lang]
    redirect_to(:controller => 'home', :action => 'index')
  end
end

以上似乎不起作用。当我调用 [ /language/set?lang="de" ] 时,本地化字符串变为而不是实际的德语翻译文本。

4

1 回答 1

2

This:

I18n.locale = params[:lang]

does not persist across requests, so when you redirect (= a new request) it reverts back to English.

You should save the language setting in a session:

class LanguageController < ApplicationController
  def set
    session[:lang] = params[:lang].to_sym
    redirect_to(:controller => 'home', :action => 'index')
  end
end

And check the session on each request. You can do this in a before_filter in your ApplicationController:

class ApplicationController
  before_filter :set_language

  def set_language
    I18n.locale = session[:lang] if session[:lang]
  end
end
于 2013-03-09T14:17:49.913 回答