4

私はモデルを飾るためにドレイパーの宝石を使用します。ここで私はかなり古典的な設定を持っています:Draper gemでi18n translateメソッドを使用するには?

# app/decorators/subject_decorator.rb 
class SubjectDecorator < ApplicationDecorator 
    decorates :subject 

    def edit_link 
    h.link_to(h.t('.edit'), '#') 
    end 
end 

私は国際化にi18nを使用します。しかし、これを実行すると、私は得る:

Cannot use t(".edit") shortcut because path is not available 

私は誰もこれを前に行っているのだろうかと思いましたか?それはかなりまっすぐ進むはずです。あなたが使用する必要があり、あなたのコード内

答えて

6

I18n.t('mylabelkey') 

それを試してみる...それは

7

を動作するはずの問題は、彼らはドンので、あなたがデコレータでlazy lookupの利点を取ることができないです」ビュー・ファイル・レベル(索引、表示、編集など)を決定するコンテキストはありません。だから、あなたはちょうどt('subjects.show.edit')のようなものすべてを綴る必要があります。

ここで私はそれを私のためにいくらか働かせるためにやっています。

class ApplicationDecorator < Draper::Base 
    def translate(key, options={}) 
    if key.to_s[0] == '.' 
     key = model_class.to_s.downcase.pluralize + key 
    end 

    I18n.translate(key, options) 
    end 
    alias :t :translate 
end 

これはあなたに完全なsubjects.show.editの参照を取得することはできません、あなただけのsubjects.editを得るでしょうが、それは私には何もないよりはましに思えました。

+0

'model_name.i18n_key + key'を使う方が良いかもしれません。 –

2

あなたがしなければならないのは、

include Draper::LazyHelpers 

...あなたのデコレータのクラスの先頭にこれを追加することです...そしてそれは国際化のものを含む、最も一般的なヘルパーメソッドの多くを処理します。あなたはまた、あなたのドレープクラスのすべての "h"を書くこともできます。

関連する問題