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"
Возможно ли это?
Ответы
Ответ 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