Abbiamo creato un metodo JS personalizzato per alcuni lavori di localizzazione personalizzati che carica l’oggetto I18n lato browser con un attributo personalizzato.
Voglio attivare una rivalutazione di questo metodo JsLocaleHelper su ciascuno dei client dipendenti.
Sto cercando un modo per attivarlo dal lato server.
Questo funzionava ma sembra essere cambiato di recente.
I dati sono corretti quando elimino la cache locale del client dal browser, ma ovviamente questo non è sostenibile per l’uso in produzione. Dimostra però che il problema è la cache locale.
Tra le cose che ho provato ci sono:
Discourse.request_refresh!
o il più mirato:
Discourse.request_refresh!(user_ids: user_ids)
che sembra forzare il refresh alla navigazione. Tuttavia, sospetto che lo script venga memorizzato nella cache, quindi questa non è una soluzione.
Ho appena testato Discourse.request_refresh! e sembra che stia ricaricando tutte le risorse javascript alla prossima navigazione. Potrebbe non attivare un aggiornamento di JsLocaleHelper, non sono sufficientemente informato su come funzioni.
Hai provato a chiamare ExtraLocalesController.clear_cache! dopo aver apportato modifiche a extra-locales? Dovrebbe ricalcolare la versione durante la richiesta successiva.
Grazie. Sì, l’ho fatto. Credo che sia solo lato server e non cambi il numero di versione sul file JS fornito impostato durante il bootstrap. Lato server non c’è problema.
Sto pensando di spostare questi dati nell’oggetto del sito e nel serializzatore per vedere se riesco ad avere più controllo.
Beh, immagino di non capire cosa stai cercando di realizzare.
Presumevo volessi che il client semplicemente prelevasse i dati che hai aggiunto sul server al prossimo ricaricamento. Se vuoi fare tutto sul client, perché non aggiornare I18n.extras direttamente sul client.
Se eseguo quel comando dalla console di Rails, come invalida gli script sul client?
(A titolo informativo, i tag sono un caso speciale poiché vengono utilizzati negli slug, quindi devo aggiungere un oggetto speciale per includere le traduzioni, non posso serializzare una traduzione di tag ovunque poiché le route non funzionerebbero).
La prossima volta che il client ricaricherà la pagina, vedrà un hash diverso nell’HTML e caricherà il nuovo script. È così che funziona la funzionalità “Personalizza testo” (utilizza il bundle “override”).
Quindi non sto usando le sovrascritture per questo, poiché non stiamo parlando della localizzazione JS lato client vanilla.
Per qualche motivo, l’uso attuale del nostro file personalizzato JsLocaleHelper non si aggancia a quel sistema di aggiornamento del numero di versione.
Ma questo è estremamente utile, grazie Gerhard, poiché potrò studiare come il server causa l’aggiornamento di quel numero di versione.
Noto anche che il file delle sovrascritture è discrezionale, interessante!
Problema risolto. Ho semplicemente dovuto assicurarmi che il numero di versione fosse basato sul contenuto del file js personalizzato. Ora funziona in dev