Wir haben eine benutzerdefinierte JS-Methode für benutzerdefinierte Locale-Arbeiten erstellt, die das Browser-seitige I18n-Objekt mit einem benutzerdefinierten Attribut lädt.
Ich möchte eine Neubewertung dieser JsLocaleHelper-Methode auf jedem der abhängigen Clients auslösen.
Ich versuche, einen Weg zu finden, dies von der Serverseite aus auszulösen.
Dies hat früher funktioniert, scheint sich aber kürzlich geändert zu haben.
Die Daten sind korrekt, wenn ich den lokalen Client-Cache aus dem Browser lösche, aber das ist offensichtlich für den Produktionseinsatz nicht tragbar. Es beweist jedoch, dass das Problem der lokale Cache ist.
Zu den Dingen, die ich versucht habe, gehören:
Discourse.request_refresh!
oder das gezieltere:
Discourse.request_refresh!(user_ids: user_ids)
was anscheinend einen Refresh beim Navigieren erzwingt. Ich vermute jedoch, dass das Skript gecacht wird, sodass dies keine Lösung ist.
Ich habe gerade Discourse.request_refresh! getestet und es scheint, dass alle JavaScript-Assets bei der nächsten Navigation neu geladen werden. Es löst möglicherweise keine JsLocaleHelper-Aktualisierung aus, ich bin nicht ausreichend darüber informiert, wie das funktioniert.
Haben Sie versucht, ExtraLocalesController.clear_cache! aufzurufen, nachdem Sie Änderungen an extra-locales vorgenommen haben? Es sollte die Version während der nächsten Anfrage neu berechnen.
Danke. Ja, das habe ich. Ich glaube, das ist nur serverseitig und ändert die Versionsnummer nicht in der bereitgestellten JS-Datei, die während des Bootstrap eingerichtet wurde. Serverseitig gibt es kein Problem.
Ich überlege, diese Daten in das Site-Objekt und den Serializer zu verschieben, um zu sehen, ob ich mehr Kontrolle habe.
Nun, ich schätze, ich verstehe nicht, was Sie erreichen wollen.
Ich ging davon aus, dass Sie möchten, dass der Client die Daten, die Sie auf dem Server hinzugefügt haben, beim nächsten Neuladen einfach abruft. Wenn Sie alles auf dem Client tun möchten, warum aktualisieren Sie I18n.extras nicht direkt auf dem Client.
Wenn ich diesen Befehl von der Rails-Konsole aus ausführe, wie werden dadurch die Skripte auf dem Client ungültig?
(Zu Ihrer Information: Tags sind ein Sonderfall, da sie in Slugs verwendet werden. Daher muss ich ein spezielles Objekt hinzufügen, um Übersetzungen einzuschließen. Ich kann nicht überall eine Tag-Übersetzung serialisieren, da die Routen sonst nicht funktionieren würden).
Wenn der Client die Seite das nächste Mal neu lädt, sieht er einen anderen Hash im HTML und lädt das neue Skript. So funktioniert die Funktion „Text anpassen“ (sie verwendet das „overrides“-Bundle).
Ich verwende hier keine Overrides, da wir nicht über die clientseitige JS-Lokalisierung von Vanilla sprechen.
Aus irgendeinem Grund wird die aktuelle Verwendung unserer benutzerdefinierten JsLocaleHelper-Datei nicht in dieses Versionsnummern-Update-System integriert.
Aber das ist äußerst nützlich, danke Gerhard, da ich untersuchen kann, wie der Server diese Versionsnummer aktualisiert.
Ich stelle auch fest, dass die Override-Datei diskretionär ist, interessant!
Problem behoben. Ich musste nur sicherstellen, dass die Versionsnummer auf dem Inhalt der benutzerdefinierten JS-Datei basiert. Ich habe es jetzt in der Entwicklung zum Laufen gebracht