【问题标题】:What steps are involved when adding Globalize to my Rails Project将 Globalize 添加到我的 Rails 项目时涉及哪些步骤
【发布时间】:2014-07-09 14:42:28
【问题描述】:

我有一个需要多语言的 Rails 项目。我在为我的 rails 项目启用 globalize 时遇到了一些问题。

我想知道是否有一个完整的清单/配方可以为 Rails 应用程序启用国际化。

请注意,我使用 ActiveAdmin,它也需要成为其中的一部分。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 activeadmin globalize


    【解决方案1】:

    安装

    config/application.rb 中设置您希望支持的语言环境:

    config.i18n.available_locales = [:de, :en]
    

    按照Globalize Readme 中的描述添加迁移

    确保删除您正在翻译的列上的NOT NULL 约束,因为它们将被迁移到新的翻译表中:

    change_column :categories, :title, :string, null: true
    

    设置语言环境

    根据 HTTP Accept Language Header 检测语言:

    application_controller.rb

    # ...
    def set_locale
      I18n.locale = extract_locale
    end
    
    def extract_locale
      headers = request.env['HTTP_ACCEPT_LANGUAGE'] || 'de'
      case headers.scan(/^[a-z]{2}/).first
        when 'en'
          'en'
        else
          'de'
      end
    end
    

    空的''翻译

    Globalize 为丢失的翻译提供了一种后备机制。我有点惊讶某些值在我的前端没有后备。这是由空白值引起的。为了解决这个问题,我必须为translates 方法调用添加选项fallbacks_for_empty_translations: true

    translates :title, :description, fallbacks_for_empty_translations: true
    

    注意:此选项也可用于active_admin_translates 方法调用。

    活动记录

    范围和查询

    使用翻译字段的范围也必须更改:

    default_scope -> { order :title }
    

    变成:

    default_scope -> { order('category_translations.title').includes(:translations) }
    

    活动管理员

    设置

    有一个 gem 支持 Globalize 和 ActiveAdmin:

    # For Rails 4 use the master branch from github
    gem "activeadmin-globalize", github: 'stefanoverna/activeadmin-globalize', branch: 'master'
    

    过滤器

    默认情况下,已翻译属性的过滤器将不再起作用:

    filter :title
    

    必须改为:

    # as: :string is required otherwise the filter won't be shown
    filter :translations_name, as: :string
    

    排序

    虽然以下内容适用于已翻译的列:

    # Admin: Categories.rb
    index do
      column :title
    end
    

    只要我们要排序,就会出现错误,因为title 列不在数据库中。

    更新我只在某些型号上安装了这个,我不清楚什么时候会失败。所以对于某些模型,我不得不禁用排序:

    column :title, sortable: false
    

    【讨论】:

    • 想找这个代码filter :translations_name, as: :string很久了!我的翻译过滤器不起作用,现在完美了!任何可排序的解决方案吗?谢谢!
    • 可以,可以按翻译排序:blog.sed.hu/2014/07/01/…
    • @micred 按翻译排序的链接失效了,有人知道怎么弄吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    相关资源
    最近更新 更多