Как разделить локализацию пользовательского интерфейса и контента в ActiveAdmin

Нам нужно начать доставлять динамический контент на нескольких языках с помощью наших различных приложений.

Следует учитывать два типа локализации: локализацию пользовательского интерфейса и локализацию контента. Локализация пользовательского интерфейса - это язык, на котором доставляется интерфейс (статический текст), а локализация контента - это язык, на котором контент просматривается / редактируется (модель Rails).

В основном у нас есть 3 типа приложений

  1. Мобильные приложения - обращаются к конечным точкам API для операций CRUD
  2. Клиентское веб-приложение - построено с использованием backbone.js, поэтому также используются конечные точки API для операций CRUD через модели / коллекции магистрали.
  3. Веб-приложение администратора, созданное с использованием activeadmin (https://github.com/activeadmin/activeadmin)

Я должен отметить, что мы используем Rails 3.2, ActiveAdmin 0.6.6 (обновление необходимо, но не приоритет :))

Чтобы локализовать контент, мы ищем жемчужину глобализации (https://github.com/globalize/globalize)

Похоже, что нет никаких проблем с использованием globalize при взаимодействии с конечными точками API. Мы можем использовать заголовок Accept-Language и установить свойство I18n.locale в before_filter, и, похоже, все работает нормально. Это означает, что должны быть охвачены мобильные приложения и клиентское веб-приложение.

Для ActiveAdmin это становится немного сложнее. Для приложения ActiveAdmin мы хотели бы доставлять статический текст пользовательского интерфейса на предпочитаемом пользователем языке, позволяя им переключаться между языками для контента.

Драгоценный камень globalize использует свойство I18n.locale, чтобы определить, какой языковой стандарт обновлять / читать для переводов контента. Поскольку ActiveAdmin не использует AJAX, установка I18n.locale также повлияет на статический текст пользовательского интерфейса.

На данный момент это не имеет большого значения, поскольку у нас есть только один языковой стандарт для пользовательского интерфейса (config / locales содержат только файлы en yml). Это означает, что мы можем использовать метод, описанный на странице https://github.com/activeadmin/activeadmin/wiki/Specifying-locale и задайте свойство I18n.locale для обновления правильного динамического содержимого с помощью globalize, при этом интерфейс пользовательского интерфейса будет по-прежнему предоставляться на английском языке.

Однако, думая о будущем, когда мы потенциально добавим дополнительные языки для пользовательского интерфейса, я ищу идеи о том, как разделить языковой стандарт пользовательского интерфейса и языковой стандарт содержимого. Другие языки, такие как Java и C #, делают это с другими свойствами в своей эквивалентной библиотеке I18n, но Rails, похоже, не поддерживает это.

Мысли?

заранее спасибо


person ikbenben    schedule 07.09.2018    source источник


Ответы (1)


после дальнейшего расследования я остановился на геме activeadmin-globalize. Изначально я не думал, что он совместим с gem globalize на основе документации, но это

person ikbenben    schedule 16.09.2018