Ho usato l’interfaccia di amministrazione web per modificare diverse stringhe di Discourse. Per comodità[1] ho ignorato le versioni non inglesi. Ciò significa, ovviamente, che sono fuori sincronia.
In Fedora, utilizziamo Weblate per le traduzioni guidate dalla community. (Vedi https://translate.fedoraproject.org/). Mi piacerebbe collegarlo, idealmente in modo che ci sia un flusso di lavoro interamente automatico in cui, quando una stringa viene aggiornata in inglese tramite l’interfaccia di amministrazione, viene inviata a Weblate e, quando c’è una traduzione, ritorna.
Implementazione di un’integrazione utilizzando la nostra API in cui si dovrebbe:
Effettuare il polling di Discourse per nuove sovrascritture (nessun webhook)
Inserire nuove traduzioni da Weblate nel tuo sito Discourse.
Questo è il riepilogo preliminare. Stiamo esaminando la quantificazione delle limitazioni esistenti, poiché la nostra API attuale restituisce solo una quantità fissa di sovrascritture di traduzione. Ciò significa che dovremmo apportare modifiche a tale endpoint API per farlo funzionare.
Il polling sembra a posto — la traduzione non sarà comunque istantanea. Ma il coso del polling deve tenere traccia in qualche modo? È bello quando può essere stateless…
Non c’è bisogno di tenere traccia di nulla sul tuo sito. Dovresti essere in grado di implementarlo stateless.
Per il polling, devi inviare una richiesta GET al seguente percorso sul tuo sito: /admin/customize/site_texts.json?locale=en&overridden=true&page=0
Regola il parametro locale in base alle tue esigenze. L’API restituisce fino a 50 risultati e supporta la paginazione (parametro page).
Il JSON includerà { "extras" : { "has_more" : true } } quando ci sono più risultati.
L’aggiornamento di un override di traduzione funziona inviando una richiesta PUT al seguente percorso: /admin/customize/site_texts/<id>
Sostituisci <id> con l’ID della stringa che vuoi tradurre, ad esempio “js.user.username.instructions”.
Il payload della richiesta PUT deve essere form data (Content-Type: application/x-www-form-urlencoded; charset=UTF-8) e deve includere i seguenti attributi:
site_text[value]: la traduzione
site_text[locale]: la locale, ad esempio “en”
Essenzialmente, devi utilizzare le stesse chiamate API che utilizza l’interfaccia di amministrazione Customize Text.