Как расширить метод I18n.translate в рельсах? - PullRequest
4 голосов
/ 15 июля 2011

прямо сейчас, когда у меня в приложении есть какой-то код типа

<%= t :test %>

и нет перевода для: test Я вижу что-то подобное на мой взгляд:

<span class="translation_missing" title="translation missing: en.test">Test</span>

Что я хотел бы добавить, так это включить аналогичный диапазон даже для существующих переводов, поэтому, если перевод существует, я бы хотел получить что-то вроде:

<span class="translation_existing" title="translation existing: en.test">Translated string</span>

обратите внимание на другое имя класса в промежутке. И строка должна быть действительно переведена.

Как я могу достичь этого результата, переопределив метод перевода?

Заранее спасибо

Gnagno

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

"t" является помощником вида: http://api.rubyonrails.org/classes/ActionView/Helpers/TranslationHelper.html#method-i-t

Его исходный код легко просмотреть и создать собственный, вы также можете переопределить помощник, переопределив его в ApplicationHelper.

Но ИМХО, вам не следует переопределять его, а создавать свой собственный с другим именем. Есть очень много случаев, когда вы захотите использовать помощник "t" в некоторых частях ваших представлений, которые могут испортиться, если вы добавите дополнительную разметку HTML (то есть: я использую помощник "t" в разделе моих страниц, чтобы перевести заголовок, метатеги и т. д.) ...

1 голос
/ 12 апреля 2013

Я создал помощник, который перезаписывает метод 't', который является просто ярлыком для 'translate':

def t(*a)           # I don't care what params go in
  key = a.first     # just want to override behaviour based on the key

  #if my overrides contain the key
  if value = @i18n_overrides["#{I18n.locale}.#{key}"] 
    return value # return the overrided value
  end

  translate(*a) # otherwise letting i18n do its thing
end

Вот такие более чистые подходы, но у меня они не сработали:

Пробовал с использованием псевдонима, но понял, что t или translate не 'существуют в этой области на момент выполнения тела класса.

Пробовал звонить ActionView::Helpers::TranslationHelper.translate вместо translate, но это тоже не сработало.

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