The docs are sketchy on how to do it properly. I tried this:
class ApplicationController < ActionController::Base
# ...
before_action :set_locale
def set_locale
session[:locale] = I18n.locale = params.delete(:locale) || session[:locale] || I18n.default_locale
end
end
And this suffices for a lot of things; however, my fields are configured like this (following the Blacklight guide):
class CatalogController < ApplicationController
include Blacklight::Catalog
configure_blacklight do |config|
# ...
config.add_facet_field 'date', label: 'Date', single: false
# ...
end
end
This configuration happens before the request is processed, so if I try to use I18n.t('Date') for label, it will not respond to changes in locale, and will always serve the labels corresponding to the default locale.
What is the "correct" way to do this?
EDIT: Found the solution for the individual fields. Still searching for the "proper" solution for the search fields (config.add_search_field). It seems those are just displaying their label if present, and #labelize-d key if not. As a quick stop-gap measure, I made this class:
class Localized
def initialize(key)
@key = key
end
def to_s
I18n.t(key)
end
end
and configured the search field with
... label: Localized.new('blacklight.search.general.all_fields')