2

User テーブルですべてのユーザーのロケールを設定しました。これらの手順に従って、ユーザーがログインした後にロケールを取得しました。ユーザーがブラウザーをリロードするまで機能し、標準ロケール (en) が再びアクティブになります。セッションで user.locale の値を保持するにはどうすればよいですか? Rails_Admin を使用しています。つまり、ユーザー モデルはありますが、ユーザー モデルのコントローラーはありません。

 # ApplicationController
 def after_sign_in_path_for(resource_or_scope)
  if resource_or_scope.is_a?(User) && resource_or_scope.locale !=  I18n.locale
    I18n.locale = resource_or_scope.locale
  end
  super
end 
4

3 に答える 3

4

セッションに入れることは有効な答えですが、current_userメソッドを使用してユーザーのロケールを取得できます(そして、セッションを少しきれいに保ちます)

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :set_locale # get locale directly from the user model

  def set_locale
    I18n.locale = user_signed_in? ? current_user.locale.to_sym : I18n.default_locale
  end
end
于 2012-10-19T20:07:42.917 に答える
3

セッションに保存し、ユーザーがアクションを呼び出すたびにセッションから取得することができました(ApplicationControllerのbefore_filter):

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :set_locale # get locale from session when user reloads the page

  # get locale of user
  def after_sign_in_path_for(resource_or_scope)
    if resource_or_scope.is_a?(User) && resource_or_scope.locale.to_sym !=  I18n.locale
      I18n.locale = resource_or_scope.locale.to_sym # no strings accepted
      session[:locale] = I18n.locale      
    end        
    super
  end

  def set_locale
    I18n.locale = session[:locale]
  end
end
于 2012-10-19T20:01:56.437 に答える
1

user_locale という User モデルに文字列列を追加し、アプリケーション コントローラーにコードを追加しました。ストレージ、デフォルト、およびロケールをパラメーターとして使用できるようにします。

移行:

class AddLocaleToUser < ActiveRecord::Migration
 def change
   add_column :users, :user_locale, :string
 end
end 

application_controller.rb:

before_action :set_locale

private 

def set_locale
 valid_locales=['en','es']

 if !params[:locale].nil? && valid_locales.include?(params[:locale]) 
   I18n.locale=params[:locale]
   current_user.update_attribute(:user_locale,I18n.locale) if user_signed_in?
 elsif user_signed_in? && valid_locales.include?(current_user.user_locale)
   I18n.locale=current_user.user_locale
 else
  I18n.locale=I18n.default_locale
 end
end
于 2014-10-17T19:24:12.890 に答える