From 71d346eddd8aae80ce84ba5c6aa804947087b8c1 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Sat, 2 Apr 2022 12:17:10 +0200 Subject: [PATCH] apply chosen language at application start --- .../org/cryptomator/launcher/Cryptomator.java | 5 +++- .../launcher/SupportedLanguages.java | 29 ++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/cryptomator/launcher/Cryptomator.java b/src/main/java/org/cryptomator/launcher/Cryptomator.java index a358126d4..90f391ec6 100644 --- a/src/main/java/org/cryptomator/launcher/Cryptomator.java +++ b/src/main/java/org/cryptomator/launcher/Cryptomator.java @@ -34,14 +34,16 @@ public class Cryptomator { private final LoggerConfiguration logConfig; private final DebugMode debugMode; + private final SupportedLanguages supportedLanguages; private final Environment env; private final Lazy ipcMessageHandler; private final ShutdownHook shutdownHook; @Inject - Cryptomator(LoggerConfiguration logConfig, DebugMode debugMode, Environment env, Lazy ipcMessageHandler, ShutdownHook shutdownHook) { + Cryptomator(LoggerConfiguration logConfig, DebugMode debugMode, SupportedLanguages supportedLanguages, Environment env, Lazy ipcMessageHandler, ShutdownHook shutdownHook) { this.logConfig = logConfig; this.debugMode = debugMode; + this.supportedLanguages = supportedLanguages; this.env = env; this.ipcMessageHandler = ipcMessageHandler; this.shutdownHook = shutdownHook; @@ -63,6 +65,7 @@ public class Cryptomator { logConfig.init(); LOG.info("Starting Cryptomator {} on {} {} ({})", env.getAppVersion().orElse("SNAPSHOT"), SystemUtils.OS_NAME, SystemUtils.OS_VERSION, SystemUtils.OS_ARCH); debugMode.initialize(); + supportedLanguages.applyPreferred(); /* * Attempts to create an IPC connection to a running Cryptomator instance and sends it the given args. diff --git a/src/main/java/org/cryptomator/launcher/SupportedLanguages.java b/src/main/java/org/cryptomator/launcher/SupportedLanguages.java index 7f891ed1f..e02e876d6 100644 --- a/src/main/java/org/cryptomator/launcher/SupportedLanguages.java +++ b/src/main/java/org/cryptomator/launcher/SupportedLanguages.java @@ -1,12 +1,39 @@ package org.cryptomator.launcher; -import java.util.List; +import org.cryptomator.common.settings.Settings; +import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import javax.inject.Inject; +import javax.inject.Singleton; +import java.util.List; +import java.util.Locale; + +@Singleton public class SupportedLanguages { + private static final Logger LOG = LoggerFactory.getLogger(SupportedLanguages.class); // these are BCP 47 language codes, not ISO. Note the "-" instead of the "_": public static List LANGUAGAE_TAGS = List.of("ar", "bn", "bs", "ca", "cs", "de", "el", "es", "fil", "fr", "gl", "he", // "hi", "hr", "hu", "id", "it", "ja", "ko", "lv", "mk", "nb", "nl", "nn", "no", "pa", "pl", "pt", "pt-BR", "ro", "ru", // "sk", "sr", "sr-Latn", "sv", "ta", "te", "th", "tr", "uk", "zh", "zh-HK", "zh-TW"); + @Nullable + private final String preferredLanguage; + + @Inject + public SupportedLanguages(Settings settings) { + this.preferredLanguage = settings.languageProperty().get(); + } + + public void applyPreferred() { + if (preferredLanguage == null) { + LOG.debug("Using system locale"); + return; + } + var preferredLocale = Locale.forLanguageTag(preferredLanguage); + LOG.debug("Applying preferred locale {}", preferredLocale.getDisplayName(Locale.ENGLISH)); + Locale.setDefault(preferredLocale); + } }