rails-breadcrumb和I18n

时间:2012-06-02 21:08:40

标签: ruby-on-rails internationalization breadcrumbs

我遇到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  

一切都很顺利。

如何强制我的字符串被正确本地化?

先谢谢你

1 个答案:

答案 0 :(得分:1)

我最终得到了这个。在我确定我的问题出自I18n对我的语言环境一无所知这一事实,因为我要求它翻译某些内容时,我修补了rails-breadcrumb以管理本地化本身。

知道我将符号作为第一个参数传递,我在rails-breadcrumb中调用I18n.translate()

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)