如何使我的Ruby on Rails应用程序全球化

问题描述 投票:1回答:1

我有一个简单的Rails应用程序(甚至不是数据库驱动的)。基本上,我想使其支持两种语言。我的解决方法是在页脚中放置两个小标志,其中一个GB(对于English)和德国之一(对于German)。当用户单击一个时,站点的语言将更改为相应的国家标记语言

我有我的[en.yml]和[de.yml]的所有设置,并且在所有视图中都使用了它们的密钥,甚至我还tested通过交换[ [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”]时,本地化的字符串更改为keys而不是实际的德语翻译文本。

ruby-on-rails-3.1 internationalization globalization
1个回答
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_filterApplicationController中执行此操作:

class ApplicationController
  before_filter :set_language

  def set_language
    I18n.locale = session[:lang] if session[:lang]
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.