Разрешить группе изменять переводы в текстах сайта Discourse

Хорошо, я делюсь ответом Discourse Helper для тех, кто заинтересован и обладает необходимыми знаниями для этого :slight_smile:

Я считаю, что это необходимо для улучшения UI/UX (модернизации наших форумов), таких как редактор сообщений, ИИ и последние улучшения, которые мы наблюдали.

Используемый английский язык очень нейтральный и простой, и это имеет смысл, но в моем случае переводы на испанский по умолчанию не очень хороши.

Редактирование строк в интерфейсе Discourse допустимо, но отнимает много времени, и я просто хочу делегировать эту задачу.

Я понимаю, что невозможно загрузить все строки как JSON-файл, но отредактированные тексты?

Загрузка всех текстов на всех языках и редактирование файла должно быть обходным путем, чтобы получить желаемый результат за 1/5 времени.


Высокоуровневая структура плагина

  1. Создание каркаса плагина

    • Используйте:

      rake plugin:create[custom-site-texts-group]
      
  2. Бэкенд: Расширение прав доступа

    • Переопределите соответствующий контроллер, например Admin::SiteTextController, чтобы разрешить членам вашей пользовательской группы(групп) доступ к конечным точкам редактирования текстов.

    • Вы можете использовать что-то подобное:

      add_to_class(:admin_constraint, :matches?) do |request|
        user = ... # загрузить текущего пользователя из запроса
        return true if user.admin?
        # Проверка членства в вашей группе
        group_id = Group.find_by(name: 'yourgroupname')&.id
        return user.group_ids.include?(group_id)
      end 
      

      Это лишь иллюстрация — вам необходимо найти правильную проверку прав доступа и убедиться, что она ограничена только редактированием локализации, а не полным доступом администратора.

  3. Фронтенд: Предоставление UI членам группы

    • Используйте PluginAPI для внедрения UI для членов вашей группы там, где у администраторов есть «Настройка текстов сайта».

    • Скройте этот UI для других пользователей.

  4. Безопасность

    • Перепроверьте права доступа в любых переопределенных действиях контроллера и маршрутах. Никогда не доверяйте проверкам на стороне клиента.