0

自从我本地化了我的应用程序以来,我遇到了rails-breadcrumb的问题。

在我的控制器中,我有这个:

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

当我的面包屑显示时,本地化字符串总是取自en.yml,无论我设置哪种语言I18n.locale

在查看了代码之后,它add_breadcrumb充当了 a 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 回答