From d9aa6ae91a3c7fa81cb618af8d8e260579fdeb8d Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Sat, 2 Apr 2022 12:16:57 +0200 Subject: [PATCH] display "language" chooser in general preferences --- .../launcher/SupportedLanguages.java | 12 +++++++ .../GeneralPreferencesController.java | 35 +++++++++++++++++++ .../resources/fxml/preferences_general.fxml | 5 +++ src/main/resources/i18n/strings.properties | 2 ++ 4 files changed, 54 insertions(+) create mode 100644 src/main/java/org/cryptomator/launcher/SupportedLanguages.java diff --git a/src/main/java/org/cryptomator/launcher/SupportedLanguages.java b/src/main/java/org/cryptomator/launcher/SupportedLanguages.java new file mode 100644 index 000000000..7f891ed1f --- /dev/null +++ b/src/main/java/org/cryptomator/launcher/SupportedLanguages.java @@ -0,0 +1,12 @@ +package org.cryptomator.launcher; + +import java.util.List; + +public class SupportedLanguages { + + // 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"); + +} diff --git a/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java b/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java index 7430cf207..3ebdad4a4 100644 --- a/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java +++ b/src/main/java/org/cryptomator/ui/preferences/GeneralPreferencesController.java @@ -1,5 +1,6 @@ package org.cryptomator.ui.preferences; +import com.google.common.base.Strings; import org.cryptomator.common.Environment; import org.cryptomator.common.LicenseHolder; import org.cryptomator.common.settings.Settings; @@ -7,6 +8,7 @@ import org.cryptomator.common.settings.UiTheme; import org.cryptomator.integrations.autostart.AutoStartProvider; import org.cryptomator.integrations.autostart.ToggleAutoStartFailedException; import org.cryptomator.integrations.keychain.KeychainAccessProvider; +import org.cryptomator.launcher.SupportedLanguages; import org.cryptomator.ui.common.FxController; import org.cryptomator.ui.fxapp.FxApplicationWindows; import org.cryptomator.ui.traymenu.TrayMenuComponent; @@ -27,6 +29,7 @@ import javafx.scene.control.Toggle; import javafx.scene.control.ToggleGroup; import javafx.stage.Stage; import javafx.util.StringConverter; +import java.util.Locale; import java.util.Optional; import java.util.ResourceBundle; import java.util.Set; @@ -53,6 +56,7 @@ public class GeneralPreferencesController implements FxController { public CheckBox showMinimizeButtonCheckbox; public CheckBox showTrayIconCheckbox; public CheckBox startHiddenCheckbox; + public ChoiceBox preferredLanguageChoiceBox; public CheckBox debugModeCheckbox; public CheckBox autoStartCheckbox; public ToggleGroup nodeOrientation; @@ -90,6 +94,11 @@ public class GeneralPreferencesController implements FxController { startHiddenCheckbox.selectedProperty().bindBidirectional(settings.startHidden()); + preferredLanguageChoiceBox.getItems().add(null); + preferredLanguageChoiceBox.getItems().addAll(SupportedLanguages.LANGUAGAE_TAGS); + preferredLanguageChoiceBox.valueProperty().bindBidirectional(settings.languageProperty()); + preferredLanguageChoiceBox.setConverter(new LanguageTagConverter(resourceBundle)); + debugModeCheckbox.selectedProperty().bindBidirectional(settings.debugMode()); autoStartProvider.ifPresent(autoStart -> autoStartCheckbox.setSelected(autoStart.isEnabled())); @@ -183,6 +192,32 @@ public class GeneralPreferencesController implements FxController { } + private static class LanguageTagConverter extends StringConverter { + + private final ResourceBundle resourceBundle; + + LanguageTagConverter(ResourceBundle resourceBundle) { + this.resourceBundle = resourceBundle; + } + + @Override + public String toString(String tag) { + if (tag == null) { + return resourceBundle.getString("preferences.general.language.auto"); + } else { + var locale = Locale.forLanguageTag(tag); + var lang = locale.getDisplayLanguage(locale); + var region = locale.getDisplayCountry(locale); + return lang + (Strings.isNullOrEmpty(region) ? "" : " (" + region + ")"); + } + } + + @Override + public String fromString(String displayLanguage) { + throw new UnsupportedOperationException(); + } + } + private class KeychainProviderDisplayNameConverter extends StringConverter { @Override diff --git a/src/main/resources/fxml/preferences_general.fxml b/src/main/resources/fxml/preferences_general.fxml index ea087b9e3..1e3be74c6 100644 --- a/src/main/resources/fxml/preferences_general.fxml +++ b/src/main/resources/fxml/preferences_general.fxml @@ -38,6 +38,11 @@ + + + diff --git a/src/main/resources/i18n/strings.properties b/src/main/resources/i18n/strings.properties index 6648496b9..4c2ab688c 100644 --- a/src/main/resources/i18n/strings.properties +++ b/src/main/resources/i18n/strings.properties @@ -199,6 +199,8 @@ preferences.general.unlockThemes=Unlock dark mode preferences.general.showMinimizeButton=Show minimize button preferences.general.showTrayIcon=Show tray icon (requires restart) preferences.general.startHidden=Hide window when starting Cryptomator +preferences.general.language=Language (requires restart) +preferences.general.language.auto=System Default preferences.general.debugLogging=Enable debug logging preferences.general.debugDirectory=Reveal log files preferences.general.autoStart=Launch Cryptomator on system start