特定のロケールを使用したい、I18n.translate()
またはI18n.t()
使用したいのですが、I18n.localeは使用しません。毎回使いたくないので、関数自体をオーバーライドできたらいいなと思います。I18n.t(:my_key, locale: :my_locale)
私はそれを新しいヘルパーに入れようとしました:
# my_helper.rb
module MyHelper
def translate(key, options = {})
options[:locale] = MY_LOCALE
I18n.translate key, options
end
alias :t :translate
end
これt('word')
は、のような「ハードキー」では問題なく機能しますが、のような「ダイナミックキー」の正しいパスが見つかりませんt('.title')
。これは、私のパーシャルのパスを使用する必要がありますde.users.form.title
。
助けてくれてありがとう!
次の機能の間には混乱があるように思われます。
I18n.translate
、I18nジェムと ActionView::Helpers::TranslationHelper#translate
、RailsからI18n.translate
期待する「レイジールックアップ」(つまり、ルックアップキーがドットで始まる場合は現在のパーシャルにスコープする)を実行しません。それはの特徴であるActionView::Helpers::TranslationHelper#translate
とともに、いくつかの他。
遅延読み込みを取得するためのActionView::Helpers::TranslationHelper#translate
呼び出しなしで、メソッドがオーバーライドされていますsuper
。したがって、メソッドのオーバーライドを継続したい場合は、次のことをお勧めします。
# my_helper.rb
module MyHelper
def translate(key, options = {})
# If you don't want to ignore options[:locale] if it's passed in,
# change to options[:locale] ||= MY_LOCALE
options[:locale] = MY_LOCALE
super(key, options)
end
alias :t :translate
end
個人的には、t(:my_key, locale: :my_locale)
オーバーライドなしでビューで毎回使用するか、せいぜいActionView::Helpers::TranslationHelper#translate
特定のロケールを強制する追加のビジネスロジックで呼び出しをラップアラウンドする個別のヘルパーメソッドを使用したいと思います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加