From 10c60d749236934dc298d96daf91b22eefcc0fbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ju=CC=88rgen=20Kleer?= Date: Wed, 26 Apr 2023 15:24:50 +0200 Subject: [PATCH] https://github.com/cryptomator/cryptomator/issues/2813 > List of languages should have system default, English and then all other languages in alphabetic order. > That is, in alphabetic order with respect to the language the list is localized in (seems to be English always) --- .../launcher/SupportedLanguages.java | 21 +++++++++++++------ .../InterfacePreferencesController.java | 11 +++++----- .../launcher/SupportedLanguagesTest.java | 2 +- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/cryptomator/launcher/SupportedLanguages.java b/src/main/java/org/cryptomator/launcher/SupportedLanguages.java index 760fb1168..988641fa8 100644 --- a/src/main/java/org/cryptomator/launcher/SupportedLanguages.java +++ b/src/main/java/org/cryptomator/launcher/SupportedLanguages.java @@ -7,6 +7,8 @@ import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Singleton; +import java.text.Collator; +import java.util.Arrays; import java.util.List; import java.util.Locale; @@ -14,10 +16,12 @@ import java.util.Locale; 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 final List LANGUAGAE_TAGS = List.of("en", "ar", "be", "bn", "bs", "ca", "cs", "da", "de", "el", "es", "fil", "fa", "fr", "gl", "he", // + // these are BCP 47 language codes, not ISO. Note the "-" instead of the "_". + // "en" is not part of this list - it is always inserted at the top. + public static final List LANGUAGE_TAGS = Arrays.asList("ar", "be", "bn", "bs", "ca", "cs", "da", "de", "el", "es", "fil", "fa", "fr", "gl", "he", // "hi", "hr", "hu", "id", "it", "ja", "ko", "lv", "mk", "nb", "nl", "nn", "no", "pa", "pl", "pt", "pt-BR", "ro", "ru", "si", "sk", "sr", "sr-Latn", "sv", "sw", // "ta", "te", "th", "tr", "uk", "vi", "zh", "zh-HK", "zh-TW"); + public static final String ENGLISH = "en"; @Nullable private final String preferredLanguage; @@ -30,10 +34,15 @@ public class SupportedLanguages { public void applyPreferred() { if (preferredLanguage == null) { LOG.debug("Using system locale"); - return; + } else { + var preferredLocale = Locale.forLanguageTag(preferredLanguage); + LOG.debug("Applying preferred locale {}", preferredLocale.getDisplayName(Locale.ENGLISH)); + Locale.setDefault(preferredLocale); } - var preferredLocale = Locale.forLanguageTag(preferredLanguage); - LOG.debug("Applying preferred locale {}", preferredLocale.getDisplayName(Locale.ENGLISH)); - Locale.setDefault(preferredLocale); + SupportedLanguages.LANGUAGE_TAGS.sort((a, b) -> { + var collator = Collator.getInstance(Locale.getDefault()); + collator.setStrength(Collator.PRIMARY); + return collator.compare(Locale.forLanguageTag(a).getDisplayName(), Locale.forLanguageTag(b).getDisplayName()); + }); } } diff --git a/src/main/java/org/cryptomator/ui/preferences/InterfacePreferencesController.java b/src/main/java/org/cryptomator/ui/preferences/InterfacePreferencesController.java index dd463b9e3..9cc94a83f 100644 --- a/src/main/java/org/cryptomator/ui/preferences/InterfacePreferencesController.java +++ b/src/main/java/org/cryptomator/ui/preferences/InterfacePreferencesController.java @@ -1,6 +1,5 @@ package org.cryptomator.ui.preferences; -import com.google.common.base.Strings; import org.cryptomator.common.LicenseHolder; import org.cryptomator.common.settings.Settings; import org.cryptomator.common.settings.UiTheme; @@ -66,8 +65,10 @@ public class InterfacePreferencesController implements FxController { showTrayIconCheckbox.selectedProperty().bindBidirectional(settings.showTrayIcon()); - preferredLanguageChoiceBox.getItems().add(null); - preferredLanguageChoiceBox.getItems().addAll(SupportedLanguages.LANGUAGAE_TAGS); + // System default and English at the top of the list + preferredLanguageChoiceBox.getItems().add(Settings.DEFAULT_LANGUAGE); + preferredLanguageChoiceBox.getItems().add(SupportedLanguages.ENGLISH); + preferredLanguageChoiceBox.getItems().addAll(SupportedLanguages.LANGUAGE_TAGS); preferredLanguageChoiceBox.valueProperty().bindBidirectional(settings.languageProperty()); preferredLanguageChoiceBox.setConverter(new LanguageTagConverter(resourceBundle)); @@ -141,9 +142,7 @@ public class InterfacePreferencesController implements FxController { return resourceBundle.getString("preferences.interface.language.auto"); } else { var locale = Locale.forLanguageTag(tag); - var lang = locale.getDisplayLanguage(locale); - var region = locale.getDisplayCountry(locale); - return lang + (Strings.isNullOrEmpty(region) ? "" : " (" + region + ")"); + return locale.getDisplayName(); } } diff --git a/src/test/java/org/cryptomator/launcher/SupportedLanguagesTest.java b/src/test/java/org/cryptomator/launcher/SupportedLanguagesTest.java index 7d76409e8..8ea48465b 100644 --- a/src/test/java/org/cryptomator/launcher/SupportedLanguagesTest.java +++ b/src/test/java/org/cryptomator/launcher/SupportedLanguagesTest.java @@ -25,7 +25,7 @@ public class SupportedLanguagesTest { } public static Stream languageTags() { - return SupportedLanguages.LANGUAGAE_TAGS.stream() // + return SupportedLanguages.LANGUAGE_TAGS.stream() // .filter(tag -> !"en".equals(tag)); // english uses the default bundle } } \ No newline at end of file