我遇到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
一切都很顺利。
如何强制我的字符串被正确本地化?
先谢谢你
答案 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 = "›")
@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)