șinele-pâine și I18n

Am intrat într-o problemă cu rails-breadcrumb de când mi-am localizat aplicația.

În controlorul meu, am luat acest lucru:

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

When my breadcrumb is displayed, the localized string is always taken from en.yml, no matter which language i set up in I18n.locale

După ce am privit codul, se întâmplă ca add_breadcrumb să acționeze ca un before_filter , iar după un anumit test am ajuns la concluzia că, chiar dacă conținutul add_breadcrumb are localizarea corectă, se pare că valoarea trecută nu este valabilă.

Dacă încerc acest lucru:

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

Totul merge bine.

Cum îmi forțez șirul să fie corect localizat?

Vă mulțumesc pentru avans

0

1 răspunsuri

Am înțeles asta în sfârșit. după ce mi-am dat seama că problema mea se datorează faptului că I18n nu știa nimic despre localizarea mea, așa cum i-am cerut să traducă ceva, am replicat maimuța cu pâslă pentru a gestiona localizarea în sine.

Știu că trec un simbol ca primii parametri și sună I18n.translate() în 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 = "›")
        @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)
0
adăugat