我的应用程序中的语言环境切换有一个非常奇怪的问题。我编写了简单的区域设置切换器,用于在会话中存储区域设置。它看起来像这样:
class LocalesController < ApplicationController
skip_authorization_check
def switch
session[:locale] = params[:locale]
redirect_to_back_or_default
end
private
def redirect_to_back_or_default(default = partners_root_path)
if request.env["HTTP_REFERER"].present? and request.env["HTTP_REFERER"] != request.env["REQUEST_URI"]
redirect_to :back
else
redirect_to default
end
end
end
在application_controller.rb中:
before_filter :set_locale
def set_locale
I18n.locale = session[:locale] || I18n.default_locale
end
在我的路线的顶部;
get 'locales/:locale', to: "locales#switch", as: :locales
在我的application.rb中我有:
#config.i18n.default_locale = 'pl' I must comment this line to switcher works..
I18n.locale = 'pl'
以及我对语言的更改链接:
%a.lang-pl{href: locales_path('pl')}
%a.lang-en{href: locales_path('en')}
此切换台可以正常工作但不是百分之百。当我切换语言时,我的大部分面包屑都无法正常工作。我将语言改为波兰语,我的应用程序正在寻找英文文件中的面包屑翻译......这很奇怪,我无法解决这个问题。例如,ReservationsController中的面包屑看起来像这样:
add_breadcrumb ->(controller){controller.current_partner.rental_company.name}, :partners_root_path
add_breadcrumb I18n.t('reservations.reservations'), :planned_partners_reservations_path
add_breadcrumb t('reservations.reservation.list_planned'
为了创建面包屑,我使用了breadcrumbs_on_rails gem。当我切换到波兰语langugage时,我附上截图是错误的(第一个和最后一个面包屑是好的,但第二个不是)。请帮忙。
编辑: 我发现了问题:
I18n.t('reservations.reservations')
这个I18n.t存在问题。当我将其更改为:
t('reservations.reservations')
并将其替换为索引操作,就像魅力一样。
现在的问题是如何将I18n更改为其他内容?
编辑: 我的控制器看起来像这样:
class EmployeesController < ApplicationController
add_breadcrumb ->(controller){controller.current_partner.rental_company.name}, :partners_root_path
add_breadcrumb I18n.t('partners.employees.home'), :partners_employees_path
def index
add_breadcrumb t('partners.employees.list')
@employees = @employees.order("partners.last_name ASC")
end
end
我的面包屑结构。这个I18n.t breadcrubms引起了这个问题。当我将I18n.t更改为:t并将其置于索引操作中时,一切都很好。现在的问题是如何使用这个I18n作品来处理面包屑......
答案 0 :(得分:0)
t
帮助器只是I18n.translate
方法的别名,由Rails&#39;提供。控制器和视图中的ActionPack
。在模型中,您仍然需要使用完整的东西:I18n.t
。
除此之外,使用哪种变体无关紧要。如果它有所不同,则意味着某些东西覆盖了t
帮助器。
translation_missing:en.reservations.reservations
表示一切都按预期工作,但您没有为此区域设置(en
)中的特定密钥提供实际翻译。为此,您需要转到config/locales/en.yml
并将其编辑为:
en:
reservations:
reservations: Your translation here..
我建议您再次浏览Rails I18n Guides。