全球化我的rails应用程序

时间:2013-03-09 13:42:27

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

我有一个简单的rails应用程序(甚至不是数据库驱动的)。基本上我想让它支持两种语言。我的方法是在页脚中有两个小标志 ,一个是GB(用于英语),另一个用于德语(用于德国)。当用户点击一个时,该网站的语言将更改为国家/地区标志的相应语言

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

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

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

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

我坚持的另一件事(我在i18n的文档中找不到)是我如何为每个区域设置加载不同的图像!

非常感谢任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:2)

此:

I18n.locale = params[:lang]

不会在请求中保留,因此当您重定向(=新请求)时,它会恢复为英语。

您应该在会话中保存语言设置:

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

并检查每个请求的会话。您可以在before_filter中的ApplicationController中执行此操作:

class ApplicationController
  before_filter :set_language

  def set_language
    I18n.locale = session[:lang] if session[:lang]
  end
end