2017-02-13 3 views
2

Документы являются отрывочными о том, как это сделать должным образом. Я пробовал это:Как правильно реализовать I18n в Blacklight для полей?

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 

И этого достаточно для многих вещей; Однако, мои поля настроены так (после Blacklight гида):

class CatalogController < ApplicationController 
    include Blacklight::Catalog 

    configure_blacklight do |config| 
    # ... 
    config.add_facet_field 'date', label: 'Date', single: false 
    # ... 
    end 
end 

Эта конфигурация происходит до того, как запрос будет обработан, так что если я пытаюсь использовать I18n.t('Date') для label, он не будет реагировать на изменения в местности, и всегда будет обслуживать метки, соответствующие языку по умолчанию.

Что такое «правильный» способ сделать это?

EDIT: Нашли решение для отдельных полей. Все еще ищет «правильное» решение для полей поиска (config.add_search_field). Кажется, что они просто показывают их label, если они есть, и #labelize -d key если нет. В качестве быстрого измерения затычки, я сделал этот класс:

class Localized 
    def initialize(key) 
    @key = key 
    end 

    def to_s 
    I18n.t(key) 
    end 
end 

и настроил поле поиска с

... label: Localized.new('blacklight.search.general.all_fields') 
+0

Когда вы включаете Blacklight :: Catalog', вы изменяете цепочку предков для 'CatalogController', которая обычно будет' CatalogController -> Blacklight :: Catalog -> ApplicationController', поэтому, когда вызывается 'set_locale' перед вызовом функции action , он запускается после метода 'configure_backlight'. Вероятно, перемещение до действия 'set_locale' в' CatalogController' исправит его. – Surya

+0

@Surya: Просто попробовал, все еще застрял в 'en.Date'. Я проверил (по передовой методике отладки 'puts" YO "'), что блок 'configure_blacklight' выполняется только один раз (по первому запросу), а не один раз за запрос. – Amadan

+1

Похоже, он должен вызываться [через вспомогательные методы] (https://github.com/projectblacklight/blacklight/blob/1cfced619f9582a0655d7151a5ec1c01dc99db97/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb#L85-L103): ['render_search_to_s_filters'] (https://github.com/projectblacklight/blacklight/blob/291d0c08bb58c10bba9f2b35c9030945fabf0d53/app/helpers/blacklight/search_history_constraints_helper_behavior.rb#L30), передайте ключ ': f' в отношении выбранной локали. – Surya

ответ

0

Благодаря Сурию, я видел, где искать. Вспомогательные методы уже вызывается шаблонами по умолчанию Blacklight, если используются правильные ключи. Итак, чтобы локализовать полевую метку date на английском языке, нужен ключ с именем en.blacklight.search.fields.date.

Смежные вопросы