如何在 ActiveAdmin 中将 UI 和内容本地化分开

How to keep UI and Content Localisation separate in ActiveAdmin

我们需要开始使用我们不同的应用以多种语言提供动态内容。

应考虑两种类型的本地化:UI 本地化和内容本地化。 UI 本地化是界面使用的语言(静态文本),而内容本地化是语言内容是 viewed/edited(Rails 模型)

我们基本上有 3 种类型的应用程序

  1. 移动应用程序 - 为 CRUD 操作点击 API 个端点
  2. 客户端 Web 应用程序 - 使用 backbone.js 构建,因此也使用 API 端点通过 backbone models/collections
  3. 进行 CRUD 操作
  4. Admin 网络应用程序 - 使用 activeadmin (https://github.com/activeadmin/activeadmin)构建

我应该注意我们正在使用 Rails 3.2,ActiveAdmin 0.6.6(需要升级但不是优先级:))

为了本地化内容,我们正在寻求全球化 gem (https://github.com/globalize/globalize)

在与 API 端点交互时使用全球化似乎没有任何问题。我们可以使用 Accept-Language header 并在 before_filter 中设置 I18n.locale 属性,一切似乎都正常。这意味着应该涵盖移动应用程序和客户端 Web 应用程序。

对于 ActiveAdmin,这变得有点困难。对于 ActiveAdmin 应用程序,我们希望以用户的首选语言提供 UI 静态文本,同时允许他们在内容的语言之间切换。

全球化 gem 利用 I18n.locale 属性 来确定 update/read 内容翻译的语言环境。由于 ActiveAdmin 未使用 AJAX,设置 I18n.locale 也会影响 UI 静态文本。

目前,这不是什么大问题,因为我们只有一个语言环境用于 UI(config/locales 仅包含 en yml 文件)。这意味着我们可以使用 https://github.com/activeadmin/activeadmin/wiki/Specifying-locale 中描述的方法并设置 I18n.locale 属性 以通过全球化更新正确的动态内容,同时 UI 接口将继续交付英语

但是,考虑到未来,我们可能会为 UI 添加其他语言,我正在寻找如何将 UI 区域设置和内容区域设置分开的想法。其他语言,例如 Java 和 C#,在其 I18n 等效库中使用不同的属性来执行此操作,但 Rails 似乎不接受此

想法?

提前致谢

经过进一步调查,我最终使用了 activeadmin-globalize gem。最初,我不认为它与基于文档的全球化 gem 兼容,但它是