Usei a interface de administração web para alterar várias strings do Discourse. Por conveniência[1], ignorei as versões em outros idiomas. Isso significa, é claro, que elas estão dessincronizadas.
No Fedora, usamos o Weblate para traduções impulsionadas pela comunidade. (Veja https://translate.fedoraproject.org/). Eu adoraria conectar isso, idealmente para que haja um fluxo de trabalho totalmente automático onde, quando uma string é atualizada em inglês pela interface de administração, ela é enviada para o Weblate e, quando há uma tradução, ela retorna.
Implementando uma integração usando nossa API onde você:
Consultaria o Discourse para novas substituições (sem webhooks)
Enviaria novas traduções do Weblate para o seu site Discourse.
Essa é a descrição preliminar. Estamos analisando a quantificação das limitações existentes, pois nossa API atual retorna apenas uma quantidade fixa de substituições de tradução. O que significa que precisaríamos fazer alterações nesse endpoint da API para que funcione.
A pesquisa parece boa — a tradução não será instantânea de qualquer maneira. Mas o negócio de pesquisa precisa manter o controle de alguma forma? É bom quando pode ser sem estado…
Não há necessidade de rastrear nada em seu site. Você deve ser capaz de implementá-lo sem estado.
Para polling, você precisa enviar uma solicitação GET para o seguinte caminho em seu site: /admin/customize/site_texts.json?locale=en&overridden=true&page=0
Ajuste o parâmetro locale às suas necessidades. A API retorna até 50 resultados e suporta paginação (parâmetro page).
O JSON incluirá { "extras" : { "has_more" : true } } quando houver mais resultados.
Atualizar uma substituição de tradução funciona enviando uma solicitação PUT para o seguinte caminho: /admin/customize/site_texts/<id>
Substitua <id> pelo ID da string que você deseja traduzir, por exemplo, “js.user.username.instructions”.
A carga útil da solicitação PUT deve ser dados de formulário (Content-Type: application/x-www-form-urlencoded; charset=UTF-8) e deve incluir os seguintes atributos:
site_text[value]: a tradução
site_text[locale]: o locale, por exemplo, “en”
Essencialmente, você precisa usar as mesmas chamadas de API que a interface de administração Customize Text usa.