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

Интересно, возможно ли разрешить редактирование текста в группах не только администраторам? Хотя бы модераторам?

Мы хотим использовать другой тон и собственные формулировки в нашем сообществе, чтобы добиться понимания со стороны наших пользователей.

Вы можете предоставить группам право редактировать посты, созданные другими, изменив настройку сайта «Редактировать все посты групп» — это то, что вы искали?

Привет, спасибо за ваш ответ. Я хочу включить возможность редактирования текста в Discourse (также известную как локализация, языковые строки) :slight_smile:

Я понимаю, что в настоящее время эта функция доступна только администраторам, но мне кажется, что она больше подходит для модераторов и редакторов.

Спасибо за уточнение, сейчас это невозможно

Хорошо, я делюсь ответом 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. Безопасность

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