切换Blacklight标签的语言环境后需要刷新页面

hum*_*nim 9 ruby-on-rails blacklight rails-i18n

我正在尝试创建一个基于Blacklight的Rails应用程序的阿拉伯语版本.这是我面临的问题:

当我切换语言时,除了Blacklight标签外,一切都完美无缺.只有当我刷新页面时才会翻译标签.

这是我要显示的标签:"ترتيبحسبعام"(翻译:按年份排序)

但这就是我目前得到的:"年ترتيبحسب"

从阿拉伯语切换回英语时会出现同样的问题 - 标签以阿拉伯语显示,直到我刷新页面.

这就是我的Blacklight配置:

class CatalogController < ApplicationController
  include Blacklight::Catalog

  configure_blacklight do |config|
    # ...
    config.add_sort_field 'pub_date_sort desc, title_sort asc', :label => I18n.t('sortby.year')
    # ...
  end
end
Run Code Online (Sandbox Code Playgroud)

以下是我在Application控制器中设置区域设置的方法:

class ApplicationController < ActionController::Base

 before_filter :set_locale
 def set_locale
   I18n.locale = params[:locale] || I18n.default_locale
 end

 # ...
end
Run Code Online (Sandbox Code Playgroud)

我不确定发生了什么,我非常感谢你的帮助.

Bor*_*aMa 4

我认为在第一页渲染时没有考虑正确的区域设置的问题在于,它configure_blacklight是在类被解释时运行的类方法CatalogController,即在运行 for 区域设置切换之前before_filter。(实际上我不太明白为什么它在页面重新加载后实际上起作用,因为我希望 before 过滤器始终在设置黑光配置运行。)

尽管如此, Blacklight 项目最近添加了对国际化搜索和排序字段的支持- 请参阅Pull Request #1566。看来此更改尚未公开发布,因此您需要使用master分支版本才能实际使用此功能。

一般来说,Blacklight 以及这个新功能都使用 Rails I18n API来处理本地化标签,因此您应该使用 I18n 字典 YAML 文件,而不是手动指定标签(有关更多信息和选项,请参阅Rails 指南)。

在您的特定情况下,将在以下键下查找排序字段的标签:

"blacklight.search.fields.sort.#{key}"
Run Code Online (Sandbox Code Playgroud)

其中key是传递给排序字段定义的第一个参数的值。因此,对于您的特定领域,您应该在词典中定义如下内容:

en:    
  blacklight:
    search:
      fields:
        sort:
          pub_date_sort desc, title_sort asc: "Sort by Year"
Run Code Online (Sandbox Code Playgroud)

(这适用于英文版本)。我很惊讶 YAML 在键定义中没有空格和逗号问题,但实际上我测试过,这样的键在 I18n API 使用时工作正常。