Я использовал веб-интерфейс администратора для изменения множества строк в Discourse. Из соображений оперативности[1] я не обновлял версии на других языках. Это, разумеется, привело к рассинхронизации.
В Fedora мы используем Weblate для переводов силами сообщества. (См. https://translate.fedoraproject.org/). Мне бы очень хотелось интегрировать эту систему, причём в идеале так, чтобы весь процесс был полностью автоматизирован: при обновлении строки на английском языке через интерфейс администратора она автоматически отправлялась в Weblate, а после получения перевода возвращалась обратно.
Реализация интеграции с использованием нашего API, где вы будете:
Опросить Discourse на наличие новых переопределений (без вебхуков)
Отправлять новые переводы из Weblate на ваш сайт Discourse.
Это предварительный обзор. Мы изучаем возможность количественной оценки существующих ограничений, поскольку наш текущий API возвращает только фиксированное количество переопределений переводов. Это означает, что нам потребуется внести изменения в эту конечную точку API, чтобы она работала.
Опрос, кажется, работает нормально — перевод все равно не будет мгновенным. Но нужно ли этому механизму опроса как-то отслеживать состояние? Было бы здорово, если бы он мог быть без состояния…
Вам не нужно отслеживать ничего на вашем сайте. Вы должны быть способны реализовать это без сохранения состояния.
Для опроса необходимо отправить GET-запрос по следующему пути на вашем сайте: /admin/customize/site_texts.json?locale=en&overridden=true&page=0
Измените параметр locale в соответствии с вашими потребностями. API возвращает до 50 результатов и поддерживает пагинацию (параметр page).
В JSON будет включено { "extras" : { "has_more" : true } }, если есть дополнительные результаты.
Обновление переопределения перевода выполняется путем отправки PUT-запроса по следующему пути: /admin/customize/site_texts/<id>
Замените <id> на ID строки, которую вы хотите перевести, например, “js.user.username.instructions”.
Тело PUT-запроса должно быть в формате данных формы (Content-Type: application/x-www-form-urlencoded; charset=UTF-8) и должно включать следующие атрибуты:
site_text[value]: перевод
site_text[locale]: локаль, например, “en”
По сути, вам нужно использовать те же вызовы API, что и в административном интерфейсе «Настройка текста».