4

私はレールでI18n.translateメソッドを拡張するには?今

<%= t :test %> 

のように私のアプリではいくつかのコードを持っているし、ために利用可能な翻訳が存在しない場合:私は私の見解では、このような何かを得るテストは:

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

私が望む何追加することも、翻訳を既存の同様のスパンを含めることで、翻訳が存在する場合は、私のような何かを取得したいと思います:

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

ノート番目をスパン内の異なるクラス名。そして文字列は本当に翻訳されるべきです。

translateメソッドをオーバーライドするとどうすればこの結果が得られますか?

事前に

ありがとうGnagno

答えて

2

「t」は、ビューヘルパーです: http://api.rubyonrails.org/classes/ActionView/Helpers/TranslationHelper.html#method-i-t

あなたも上書きすることができ、そのソースコードを表示したり、独自に作成するのは簡単ですApplicationHelperでそれを再定義することでヘルパーを作成します。

しかし、IMHOを再定義するのではなく、別の名前で自分自身を作成し​​てください。追加のHTMLマークアップを挿入すると、あなたのビューの一部に "t"ヘルパーを使用したい場合がたくさんあります(つまり、ページのセクションに "t"ヘルパーを使用しますタイトル、メタタグなど)私は「T」単に「翻訳」のショートカットです方法、上書きヘルパー作成

1

...翻訳:もっときれいなアプローチがこれらのだろう

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が存在しないことを認識しましたお尻の体。

translateの代わりにActionView::Helpers::TranslationHelper.translateを呼び出してみましたが、それでも機能しませんでした。

関連する問題