Browse Source

apply chosen language at application start

Sebastian Stenzel 3 năm trước cách đây
mục cha
commit
71d346eddd

+ 4 - 1
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> ipcMessageHandler;
 	private final ShutdownHook shutdownHook;
 
 	@Inject
-	Cryptomator(LoggerConfiguration logConfig, DebugMode debugMode, Environment env, Lazy<IpcMessageHandler> ipcMessageHandler, ShutdownHook shutdownHook) {
+	Cryptomator(LoggerConfiguration logConfig, DebugMode debugMode, SupportedLanguages supportedLanguages, Environment env, Lazy<IpcMessageHandler> 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.

+ 27 - 0
src/main/java/org/cryptomator/launcher/SupportedLanguages.java

@@ -1,12 +1,39 @@
 package org.cryptomator.launcher;
 
+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<String> 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);
+	}
 }