From 663911991ddd27ca96f25cc0af95ee4bb082a642 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Thu, 3 Oct 2024 18:31:53 +0300 Subject: [PATCH] fix: Do not cache translation bundles in dev mode For #20118 --- .../i18n/TranslationFileRequestHandler.java | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/flow-server/src/main/java/com/vaadin/flow/i18n/TranslationFileRequestHandler.java b/flow-server/src/main/java/com/vaadin/flow/i18n/TranslationFileRequestHandler.java index 72e65106ad6..8f2cfa758f7 100644 --- a/flow-server/src/main/java/com/vaadin/flow/i18n/TranslationFileRequestHandler.java +++ b/flow-server/src/main/java/com/vaadin/flow/i18n/TranslationFileRequestHandler.java @@ -27,6 +27,7 @@ import org.slf4j.LoggerFactory; import java.io.IOException; +import java.util.List; import java.util.Locale; import java.util.MissingResourceException; import java.util.Objects; @@ -85,8 +86,10 @@ public boolean synchronizedHandleRequest(VaadinSession session, return true; } Locale locale = getLocale(request); + + boolean productionMode = session.getConfiguration().isProductionMode(); ResourceBundle translationPropertyFile = getTranslationPropertyFile( - locale); + locale, productionMode); if (translationPropertyFile == null) { handleNotFound(response); } else { @@ -147,7 +150,8 @@ private Locale getLocale(VaadinRequest request) { return Locale.forLanguageTag(languageTag); } - private ResourceBundle getTranslationPropertyFile(Locale locale) { + private ResourceBundle getTranslationPropertyFile(Locale locale, + boolean productionMode) { Locale bestMatchLocale = getBestMatchLocale(locale); if (bestMatchLocale == null) { if (FALLBACK_LOCALE.equals(locale)) { @@ -176,9 +180,30 @@ private ResourceBundle getTranslationPropertyFile(Locale locale) { bestMatchLocale.getDisplayName()); } } - return i18NProvider.getBundle(bestMatchLocale, - ResourceBundle.Control.getNoFallbackControl( - ResourceBundle.Control.FORMAT_PROPERTIES)); + ResourceBundle.Control noFallbackControl = ResourceBundle.Control + .getNoFallbackControl(ResourceBundle.Control.FORMAT_PROPERTIES); + + ResourceBundle.Control noCacheNoFallbackControl = new ResourceBundle.Control() { + @Override + public long getTimeToLive(String baseName, Locale locale) { + return TTL_DONT_CACHE; + } + + @Override + public Locale getFallbackLocale(String baseName, Locale locale) { + return noFallbackControl.getFallbackLocale(baseName, locale); + } + + @Override + public List getFormats(String baseName) { + return noFallbackControl.getFormats(baseName); + } + + }; + + ResourceBundle.Control control = productionMode ? noFallbackControl + : noCacheNoFallbackControl; + return i18NProvider.getBundle(bestMatchLocale, control); } private Locale getBestMatchLocale(Locale locale) {