Мы создали пользовательский метод JS для работы с кастомными локалями, который загружает объект I18n на стороне браузера с использованием пользовательского атрибута.
Я хочу инициировать повторную оценку метода JsLocaleHelper для каждого из зависимых клиентов.
Пытаюсь найти способ вызвать это с серверной стороны.
Раньше это работало, но, похоже, недавно что-то изменилось.
Данные корректны, когда я удаляю локальный кеш клиента в браузере, но, очевидно, это неприемлемо для использования в продакшене. Тем не менее, это подтверждает, что проблема заключается в локальном кэшировании.
Среди尝试ов было следующее:
Discourse.request_refresh!
или более точный:
Discourse.request_refresh!(user_ids: user_ids)
что, по-видимому, принудительно обновляет данные при навигации. Однако я подозреваю, что скрипт кэшируется, поэтому это не решение.
Я только что протестировал Discourse.request_refresh!, и он действительно перезагружает все JavaScript-активы при следующем переходе. Возможно, это не вызывает обновление JsLocaleHelper, так как я недостаточно осведомлён о том, как это работает.
Вы пробовали вызвать ExtraLocalesController.clear_cache! после внесения изменений в extra-locales? Это должно пересчитать версию при следующем запросе.
Спасибо. Да, у меня есть. Я полагаю, что это происходит только на стороне сервера и не меняет номер версии в наборе JS-файлов, настроенном во время инициализации. На стороне сервера проблем нет.
Я рассматриваю возможность переноса этих данных в объект сайта и сериализатор, чтобы получить больше контроля.
Что ж, полагаю, я не понимаю, чего вы пытаетесь добиться.
Я предположил, что вы хотите, чтобы клиент просто подхватывал данные, добавленные на сервере, при следующей перезагрузке. Если вы хотите делать всё на стороне клиента, почему бы не обновить I18n.extras напрямую на клиенте?
Если я запущу эту команду из консоли Rails, как это приведет к инвалидации скриптов на клиенте?
(К сведению: теги являются особым случаем, так как используются в слагах, поэтому мне приходится добавлять специальный объект для включения переводов; я не могу сериализовать перевод тега везде, так как маршруты перестанут работать).
В следующий раз, когда клиент перезагрузит страницу, он увидит в HTML другой хэш и загрузит новый скрипт. Именно так работает функция «Настройка текста» (она использует пакет «overrides»):