9

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

当我切换语言时,除了 Blacklight 标签之外,所有内容都可以完美翻译。只有当我刷新页面时标签才会被翻译。

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

但这就是我目前得到的:“Year ترتيب حسب”

从阿拉伯语切换回英语时会发生同样的问题 - 标签显示为阿拉伯语,直到我刷新页面。

这是我的 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

这是我在应用程序控制器中设置语言环境的方式:

class ApplicationController < ActionController::Base

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

 # ...
end

我不确定发生了什么,非常感谢您在这方面的帮助。

4

1 回答 1

4

我认为在第一页渲染中没有考虑正确的语言环境的问题在于,它configure_blacklight是一个在解释类时运行的类方法,即运行 for locale 切换之前。(实际上我不太明白为什么它在页面重新加载后实际上可以工作,因为我希望在设置黑光配置后总是运行之前的过滤器。)CatalogControllerbefore_filter

不过,最近在 Blacklight 项目中添加了对 I18n 搜索和排序字段的支持- 请参阅Pull Request #1566。似乎此更改尚未包含在公开版本中,因此您需要使用master分支版本才能实际使用此功能。

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

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

"blacklight.search.fields.sort.#{key}"

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

en:    
  blacklight:
    search:
      fields:
        sort:
          pub_date_sort desc, title_sort asc: "Sort by Year"

(这将是英文版)。我很惊讶 YAML 在密钥定义中的空格和逗号没有问题,但实际上我测试过 I18n API 使用这些密钥时可以正常工作。

于 2017-04-14T21:57:30.150 回答