Я делаю приложение, которое использует globalize для перевода db. Мне нужно создать пользовательский интерфейс для администраторов, который должен быть , только имея доступ к определенным локалям, чтобы они могли переводить их.Как указать локаль I18n для зарегистрированных пользователей
Я думаю, что это два способа сделать это. 1- используйте Pundit (см. Ниже), или 2- после входа администратора, я указываю их локаль (не знаю, как это сделать). Я открыт для других предложений.
Предложение 1
Я начал использовать Pundit, потому что я думал, что я мог бы использовать для определения областей локаль для целей ограничения. Мне нужно иметь три уровня ролей. Суперпользователь может охватить все языки. Пользователь «europe» имеет доступ ко всем языкам из европейских стран. И пользователь конкретной страны может переводить только свою страну.
class IndustryArticlePolicy
attr_reader :user, :model
def initialize(user, model)
@user = user
@industry_article = model
end
class Scope < Struct.new(:user, :scope)
attr_reader :user, :scope
def initialize(user, scope)
@user = user
@scope = scope
end
def scope
if user.super_user?
scope.all
elsif user.europe?
#see method below - don't think it works
scope.where(I18n.locale.europe)
elsif user.role.present?
#dont think below works either
scope.where(role: @user.role.to_sym == I18n.locale)
else
scope.none
end
end
end
def index
@user.super_user? || @user.role.exists?
end
def europe
I18n.locale = :ru
end
end
Предложение 2
(пытаясь выяснить, как указать I18N для зарегистрированного пользователя)
Спасибо заранее!