Nous avons créé une méthode JS personnalisée pour certains travaux de locale personnalisés qui charge l’objet I18n côté navigateur avec un attribut personnalisé.
Je veux déclencher une réévaluation de cette méthode JsLocaleHelper sur chacun des clients dépendants.
J’essaie de trouver un moyen de déclencher cela côté serveur.
Cela fonctionnait auparavant, mais semble avoir changé récemment.
Les données sont correctes lorsque je supprime le cache client local du navigateur, mais ce n’est évidemment pas viable pour une utilisation en production. Cela prouve cependant que le problème est le cache local.
Parmi les choses que j’ai essayées, il y a :
Discourse.request_refresh!
ou plus ciblé :
Discourse.request_refresh!(user_ids: user_ids)
ce qui semble forcer le rafraîchissement lors de la navigation. Cependant, je suspecte que le script est mis en cache, ce n’est donc pas une solution.
Je viens de tester Discourse.request_refresh! et il semble bien recharger tous les assets javascript lors de la prochaine navigation. Il ne déclenche peut-être pas un rafraîchissement de JsLocaleHelper, je ne suis pas suffisamment informé sur son fonctionnement.
Avez-vous essayé d’appeler ExtraLocalesController.clear_cache! après avoir apporté des modifications à extra-locales ? Cela devrait recalculer la version lors de la prochaine requête.
Merci. Oui, je l’ai fait. Je pense qu’il s’agit uniquement du côté serveur et que cela ne change pas le numéro de version du jeu de fichiers JS fourni lors du démarrage. Côté serveur, il n’y a aucun problème.
J’envisage de déplacer ces données vers l’objet site et le sérialiseur pour voir si je peux avoir plus de contrôle.
Eh bien, je suppose que je ne comprends pas ce que vous essayez d’accomplir.
Je supposais que vous vouliez que le client récupère simplement les données que vous avez ajoutées sur le serveur lors du prochain rechargement. Si vous voulez tout faire côté client, pourquoi ne pas mettre à jour I18n.extras directement côté client.
Si j’exécute cette commande depuis la console Rails, comment invalide-t-elle les scripts sur le client ?
(Pour information, les balises sont un cas particulier car elles sont utilisées dans les slugs, j’ai donc dû ajouter un objet spécial pour inclure les traductions, je ne peux pas sérialiser une traduction de balise partout car les routes ne fonctionneraient pas).
La prochaine fois que le client rechargera la page, il verra un hachage différent dans le HTML et chargera le nouveau script. C’est ainsi que fonctionne la fonctionnalité « Personnaliser le texte » (elle utilise le bundle « overrides »).
Je n’utilise donc pas de remplacements car nous ne parlons pas de localisation JS côté client vanilla.
Pour une raison quelconque, l’utilisation actuelle de notre fichier personnalisé JsLocaleHelper ne s’intègre pas dans ce système de mise à jour du numéro de version.
Mais c’est extrêmement utile, merci Gerhard, car je pourrai étudier comment le serveur provoque la mise à jour de ce numéro de version.
Je note également que le fichier de remplacements est discrétionnaire, intéressant !
Problème résolu. J’ai simplement dû m’assurer que le numéro de version était basé sur le contenu du fichier js personnalisé. Je l’ai maintenant en fonctionnement en développement