0

アプリケーションをローカライズしたため、rails-breadcrumbで問題が発生しました。

私のコントローラーでは、これを持っています:

class FooController < PrivateController
  add_breadcrumb I18n.t('breadcrumbs.foo.index'), :foo_url  
end

en.ymlブレッドクラムが表示されるとき、設定した言語に関係なく、ローカライズされた文字列は常に から取得されますI18n.locale

コードを見た後、add_breadcrumbとして機能することが発生し、いくつかのテストの後、コンテンツに正しいロケールがあっても、渡された値はそうではないように思われるというbefore_filter結論に達しました。add_breadcrumb

これを試してみると:

add_breadcrumb I18n.t('breadcrumbs.foo.index', :locale => "fr"), :foo_url  

すべてがうまくいきます。

文字列を正しくローカライズするにはどうすればよいですか?

よろしくお願いします

4

1 に答える 1

1

私はついにこれを手に入れました。私の問題は、I18n に翻訳を依頼したときに私のロケールについて何も知らなかったことが原因であると判断した後、ローカリゼーション自体を管理するために Rails-breadcrumb にモンキー パッチを適用しました。

最初のパラメーターとしてシンボルを渡し、I18n.translate()rails-breadcrumb を呼び出すことを知っています。

add_breadcrumb (:'breadcrumbs.foo.index'), :foo_url  

d

# config/initializers/rails-breadcrumb-fix.rb
module Rails
  module Breadcrumbs

    class ActionController::Base

      protected

      def add_breadcrumb(name, url = '')
        @breadcrumbs ||= []
        # if given `name` is a Symbol, we localize it
        if name.is_a?(Symbol)
          name = I18n.t(name)
        end
        url = send(url) if url.is_a?(Symbol)
        @breadcrumbs << [name, url]
      end

      def self.add_breadcrumb(name, url, options = {})
        before_filter options do |controller|
          controller.send(:add_breadcrumb, name, url)
        end
      end

    end

    module Helper

      def breadcrumbs(separator = "&rsaquo;")
        @breadcrumbs.map do |txt, path|
          link_to_unless (path.blank? || current_page?(path)), h(txt), path
        end.join(" #{separator} ").html_safe
      end

    end

  end
end

ActionController::Base.send(:include, Rails::Breadcrumbs)
ActionView::Base.send(:include, Rails::Breadcrumbs::Helper)
于 2012-06-03T07:45:31.457 に答える