Rails / I18n: область по умолчанию - PullRequest
18 голосов
/ 26 мая 2011

Я использую модуль 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"

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

Ответы [ 4 ]

19 голосов
/ 26 мая 2011

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

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

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

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

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

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

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

8 голосов
/ 26 мая 2011

Это возможно. Проверьте раздел 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' %>
6 голосов
/ 07 сентября 2011

Относительно отложенных поисков:

Вот общее решение для такого рода проблем

Распространенная проблема: Где пытается Railsискать строки L10N / I18N? - например, при выполнении отложенных поисков

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

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

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

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

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

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

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

Работает как брелок: -)

0 голосов
/ 24 марта 2015

Если вы хотите распечатать ключи, которые ищет ленивый режим 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

(Суть: https://gist.github.com/capripot/6e6cf778ad2db0443280)

А затем запустите ваш сервер, например:

I18N_DEBUG=true bundle exec rails server
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...