1

私は単純なRailsアプリケーションを持っています(データベース駆動型でさえありません)。そして基本的には2つの言語をサポートさせたいと思っています。これに対する私のアプローチは、フッターに2つの小さなフラグを設定することです。1つはGB(英語の場合)、もう1つはドイツ(ドイツ語の場合)です。ユーザーがいずれかをクリックすると、サイトの言語が国旗の対応する言語に変わります

[en.yml]と[de.yml]をすべてセットアップし、すべてのビューでそれらのキーを使用ました。また、[config.i18n.default_locale]プロパティを[en [config/application.rb]の]と[de]。その点ではすべてうまくいきます。

しかし、私は言語変更メカニズムをどのように実現できるかについて悩んでいます。[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

これ:

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
于 2013-03-09T14:17:49.913 に答える