Criamos um método JS personalizado para um trabalho de localidade personalizado que carrega o objeto I18n do lado do navegador com um atributo personalizado.
Quero acionar uma reavaliação deste método JsLocaleHelper em cada um dos clientes dependentes.
Estou tentando encontrar uma maneira de acionar isso do lado do servidor.
Isso costumava funcionar, mas parece ter mudado recentemente.
Os dados estão corretos quando eu excluo o cache local do cliente do navegador, mas obviamente isso não é viável para uso em produção. Isso prova que o problema é o cache local.
Coisas que tentei incluem:
Discourse.request_refresh!
ou o mais direcionado:
Discourse.request_refresh!(user_ids: user_ids)
que parece forçar a atualização na navegação. No entanto, suspeito que o script está sendo cacheado, então esta não é uma solução.
Acabei de testar Discourse.request_refresh! e parece que ele está recarregando todos os assets de javascript na próxima navegação. Pode não estar acionando uma atualização de JsLocaleHelper, não tenho informação suficiente sobre como isso funciona.
Você tentou chamar ExtraLocalesController.clear_cache! depois de fazer alterações em extra-locales? Isso deve recalcular a versão durante a próxima solicitação.
Obrigado. Sim, eu tenho. Acredito que isso seja apenas do lado do servidor e não altera o número da versão no conjunto de arquivos JS fornecido durante a inicialização. Do lado do servidor, não há problema.
Estou considerando mover esses dados para o objeto do site e o serializador para ver se consigo ter mais controle.
Bem, acho que não entendo o que você está tentando realizar.
Eu assumi que você queria que o cliente simplesmente pegasse os dados que você adicionou no servidor na próxima recarga. Se você quer fazer tudo no cliente, por que não atualizar I18n.extras diretamente no cliente.
Se eu executar esse comando do console do Rails, como ele invalida os scripts no cliente?
(Para sua informação, as tags são um caso especial, pois são usadas em slugs, então preciso adicionar um objeto especial para incluir traduções, não posso serializar uma tradução de tag em todos os lugares, pois as rotas não funcionariam).
Na próxima vez que o cliente recarregar a página, ele verá um hash diferente no HTML e carregará o novo script. É assim que funciona o recurso “Personalizar Texto” (ele usa o pacote “overrides”).
Problema resolvido. Eu simplesmente tive que garantir que o número da versão fosse baseado no conteúdo do arquivo js personalizado. Agora está funcionando em desenvolvimento