gpt4 book ai didi

ruby-on-rails - 将 Globalize 添加到我的 Rails 项目时涉及哪些步骤

转载 作者:行者123 更新时间:2023-12-03 16:20:17 26 4
gpt4 key购买 nike

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

我想知道是否有一个全面的 list /配方来启用 Rails 应用程序的国际化。

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

最佳答案

安装

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) }

活跃管理员

设置

有一个支持 Globalize 和 ActiveAdmin 的 gem:

# 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

关于ruby-on-rails - 将 Globalize 添加到我的 Rails 项目时涉及哪些步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24656770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com