Подтвердить что ты не робот

Rails/I18n: область по умолчанию

Я использую модуль I18n по умолчанию для Rails для перевода строк в представлениях.

<%= t("registration.heading") %>

Теперь, когда я нахожусь в режиме регистрации, все мои строки начинаются с registration. Мне всегда приходится писать

<%= t("registration.heading.notice") %>
// or
<%= t(:heading, :scope => :registration) %>

Было бы неплохо определить область по умолчанию для этого файла (возможно, даже в контроллере), поэтому вызов t автоматически добавляет заданную область

// controller
set_i18n_default_scope :registration

// view
<%= t(:heading) %>

// --> looks in "registration.heading"

Возможно ли это?

4b9b3361

Ответ 1

Если вы организуете свои переводы, добавляя имя вида, как в:

en:
  registration:
    index:
      heading: "Registration heading"

то вы можете использовать это:

<%= t(".heading") %>

Обратите внимание, что первый символ является точкой.

Вы можете прочитать об этом в Руководство по API интернационализации Rails (I18n)

Если у вас есть тексты, которые разделяются между многочисленными представлениями, и вы не хотите копировать один и тот же перевод в каждом разделе для каждого представления, вы можете использовать ссылки YAML. Они хорошо описаны в википедии: http://en.wikipedia.org/wiki/YAML#Repeated_nodes

Ответ 2

Это возможно. Проверьте раздел 4.1.4 API Rails i18n

4.1.4 "Ленивый" поиск

Rails 2.3 реализует удобный способ чтобы посмотреть локаль внутри просмотров. Когда у вас есть следующее словарь:

  es:   books:
          index:
             title: "Título" 

вы можете найти значение books.index.title внутри

приложение/просмотров/книги/index.html.erb шаблон, подобный этому (обратите внимание на точку):

<%= t '.title' %>

Ответ 3

Что касается ленивых поисков:

Здесь общее решение для такого рода задач

Общая проблема: Где Rails пытается искать строки L10N/I18N? - например. при выполнении Lazy Lookups

Нелегко догадаться, потому что это отличается от просмотров, контроллеров, моделей, ярлыков, помощников или проверок... и т.д., но...

Легко узнать прямо, используя это:

http://www.unixgods.org/~tilo/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html

это помогает выяснить, что Rails считает текущую область действия (например, при использовании ".heading" )

3 простых шага:

  • создайте файл. /config/initializers/i 18n.rb, как описано в статье выше
  • поместите t ('. heading') на ваш взгляд
  • запустите "сервер rails" и посмотрите на вывод консоли, где Rails считает, что местоположение по умолчанию для ".heading" для этого представления... например. что ключ I18N

(4. затем добавьте строку I18N в местоположение, идентифицированное ключом)

Работает как шарм: -)

Ответ 4

Если вы хотите распечатать ключи, которые ищут ленивый режим I18n gem, вы можете добавить это в файл i18n.rb в папку initializers:

module I18n
  module Backend
    class Simple
      module Implementation
        alias_method :lookup_orig, :lookup

        # Give ability to check I18n looked up keys in lazy mode by setting env var I18N_DEBUG to true
        # 
        def lookup(locale, key, scope = [], options = {})
          puts "I18N keys: #{I18n.normalize_keys(locale, key, scope, options[:separator])}" if ENV['I18N_DEBUG']
          lookup_orig(locale, key, scope, options)
        end
      end
    end
  end
end

(Gist: https://gist.github.com/capripot/6e6cf778ad2db0443280)

И затем запустите свой сервер, например:

I18N_DEBUG=true bundle exec rails server