#ruby-on-rails #ruby-on-rails-3 #internationalization #ruby-on-rails-3.1 #ruby-on-rails-2
#ruby-on-rails #ruby-on-rails-3 #интернационализация #ruby-on-rails-3.1 #ruby-on-rails-2
Вопрос:
В документах Rails, похоже, существуют разные местоположения по умолчанию для строк I18N, в зависимости от того, был ли инициирован поиск I18N из представления, модели / проверки, контроллера, помощника, …, если это метка и т.д…
Как я могу увидеть, где Rails пытается выполнить поиск по умолчанию, например, когда я просто использую t(‘.something’) ?
Ответ №1:
Вы можете обезьянничать с серверной частью I18N в режиме разработки, чтобы распечатать ключи I18n, которые просматриваются в серверной части.
Проверьте здесь:
http://www.unixgods.org/Rails/where_is_Rails_trying_to_lookup_L10N_strings.html
Комментарии:
1. Работает для меня. Используя RubyMine, вы можете открыть gem и вставить эти puts в код и запустить сервер в RM. очистить. Тем не менее, я бы предпочел
config.i18n.lookup_debug = true
2. Извините, это было желание. Его там нет AFAIK. У вас есть ссылка на инструкцию Sven Fuchs?
3. У меня был с ним разговор в Твиттере — найдите «@svenfuchs config.i18n.lookup_debug» и нажмите «развернуть»
4. к сожалению
config.i18n.lookup_debug
, не существует.5. Ссылка, похоже, сейчас 404.
Ответ №2:
автономный I18n.t
не имеет никакого префикса к вашему ключу перевода, вот вспомогательные методы / модули, которые отвечают за магию rails:
(нажмите на ссылку «источник» под описанием методов, чтобы увидеть, что происходит внутри)
ActionView:
http://api.rubyonrails.org/classes/ActionView/Helpers/TranslationHelper.html#method-i-t
ActiveModel:
http://api.rubyonrails.org/classes/ActiveModel/Translation.html#method-i-i18n_scope
AbstractController
http://api.rubyonrails.org/classes/AbstractController/Translation.html
Ответ №3:
Приведенное выше решение не помогает определить, в каком файле выполняется поиск ключа. Я не нашел никакого элегантного решения для этого, ниже приведен лучший метод, который я придумал. Инструкции должны быть адаптированы для производственного блока.
- Откройте консоль rails
bundle exec rails c
- Запустите
I18n.load_path.join("n")
и скопируйте это в свой буфер обмена. Если вы используете pry с некоторыми помощниками буфера обмена, просто запуститеcopy
в консоли - Откройте новое окно терминала и запустите
pbpaste | ack 'en.yml$' | xargs ack 'key:'
его, чтобы распечатать список файлов, содержащих ключ, к которому I18n пытается получить доступ
Комментарии:
1. Например
I18n.load_path.join("n")
, когда несколько файлов определяют один и тот же ключ, в зависимости от порядка load_paths какое определение файлаI18n
в конечном итоге будет использоваться?
Ответ №4:
В rails 3.2 (возможно, также в более низких версиях) t -helper в представлениях создает span, который показывает, какой ключ был найден для перевода. Это не решение для всех случаев (от контроллера и так далее), Но я думаю, что это может быть ответом для многих людей, которые ищут этот вопрос, где полный патч monkey сверху будет сверху (патч monkey также работает для меня в i18n 0.7.0 и даетподробнее)
title="translation missing: de.<path to key>"
Ответ №5:
Если перевод, который вы пытаетесь отладить, устанавливается в контроллере, есть простое решение:
Установите переменную в контроллере в тег, который не существует, и прочитайте путь, возвращаемый предупреждением о пропущенном переводе.
Например, в контроллере
@test = t('.choco_pizza')
На ваш взгляд:
<%= @test %>
Вернет:
translation missing: fr.unexpected_namespace.controller_name.action_name.choco_pizza