我正在使用默认的Rails i18n并且遇到了i18ing breadcrumb的问题。我使用名为“breadcrumbs_on_rails”的gem来渲染面包屑,所以我在控制器中添加了痕迹 - 链接,如下所示:
add_breadcrumb I18n.t('interface.home'), :root_path
问题是,该控制器似乎不知道当前的语言环境,并且总是使用默认语言。
如何告诉i18n使用所选语言环境,而不是默认语言?
更新 控制器了解当前的区域设置。但问题出现在奇怪的情况下。我在一个方法的两个不同的地方使用相同的代码,并发现,i18n不能在 6 行上工作,并且在以下示例代码的 10 行上工作:< / p>
def index
@device = Device.find_by_id(params[:device_id])
if @device != nil
if current_user?(User.find(@device))
logger.debug I18n.locale # Outputs en - wrong
add_breadcrumb t('interface.all_events'), device_events_path(@device) # Does not work
logger.debug I18n.locale # Outputs de - correct
add_breadcrumb @device.title, device_path(@device)
logger.debug I18n.locale # Outputs de - correct
add_breadcrumb t('interface.all_events'), device_events_path(@device) # Works perfect
@events = @device.events.paginate(page: params[:page], per_page: 30)
else
redirect_to :root
end
else
redirect_to :root
end
end
Locale在application_controller.rb中设置,就像在教程中建议的那样,但使用http_accept_language进行检测:
class ApplicationController < ActionController::Base
protect_from_forgery
include SessionsHelper
def default_url_options(options={})
I18n.locale = get_accepted_language
{ :locale => get_accepted_language }
end
def get_accepted_language
available_locales = %w{en de}
request.user_preferred_languages
request.preferred_language_from(available_locales)
end
end
网址如下所示:http://localhost:3000/de/devices/3/events
答案 0 :(得分:2)
获取并设置当前区域设置:
I18n.locale
获取默认语言区域:
I18n.default_locale
以下是您所需要的: http://guides.rubyonrails.org/i18n.html
尝试使用官方指南中的方法。您可以使用before_filter
设置区域设置:
class ApplicationController < ActionController::Base
protect_from_forgery
include SessionsHelper
before_filter :set_locale
def set_locale
I18n.locale = params[:locale] || I18n.default_locale
end
def default_url_options(options={})
I18n.locale = get_accepted_language
{ :locale => get_accepted_language }
end
def get_accepted_language
available_locales = %w{en de}
request.user_preferred_languages
request.preferred_language_from(available_locales)
end
end