我有一个简单的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而不是实际的德语翻译文本。
此:
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