From 901a290dd9260e80ad3b7270ed91a1ae8bb3b524 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Mon, 24 Apr 2023 17:35:25 +0200 Subject: [PATCH 1/8] prepare 1.8.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6c98a255a..3a0c6e320 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.cryptomator cryptomator - 1.8.0-SNAPSHOT + 1.8.0 Cryptomator Desktop App From d1270ceeb2833404b5b95fd43521560a47f46ca8 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Tue, 25 Apr 2023 10:44:41 +0200 Subject: [PATCH 2/8] finalize 1.8.0 --- dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml b/dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml index 2b830e108..107261f2b 100644 --- a/dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml +++ b/dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml @@ -66,6 +66,7 @@ + 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 3/8] 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 From 8e7e7de358aca956af8c9237d22e5d09b8c09706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ju=CC=88rgen=20Kleer?= Date: Wed, 26 Apr 2023 17:34:47 +0200 Subject: [PATCH 4/8] Refactoring make LANGUAGE_TAGS private and provide a getter --- .../org/cryptomator/launcher/Cryptomator.java | 5 +--- .../launcher/SupportedLanguages.java | 28 +++++++++++-------- .../InterfacePreferencesController.java | 9 +++--- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/cryptomator/launcher/Cryptomator.java b/src/main/java/org/cryptomator/launcher/Cryptomator.java index 2b066c730..c8f0dd3d3 100644 --- a/src/main/java/org/cryptomator/launcher/Cryptomator.java +++ b/src/main/java/org/cryptomator/launcher/Cryptomator.java @@ -35,15 +35,13 @@ public class Cryptomator { private static final Logger LOG = LoggerFactory.getLogger(Cryptomator.class); private final DebugMode debugMode; - private final SupportedLanguages supportedLanguages; private final Environment env; private final Lazy ipcMessageHandler; private final ShutdownHook shutdownHook; @Inject - Cryptomator(DebugMode debugMode, SupportedLanguages supportedLanguages, Environment env, Lazy ipcMessageHandler, ShutdownHook shutdownHook) { + Cryptomator(DebugMode debugMode, Environment env, Lazy ipcMessageHandler, ShutdownHook shutdownHook) { this.debugMode = debugMode; - this.supportedLanguages = supportedLanguages; this.env = env; this.ipcMessageHandler = ipcMessageHandler; this.shutdownHook = shutdownHook; @@ -80,7 +78,6 @@ public class Cryptomator { LOG.debug("Dagger graph initialized after {}ms", System.currentTimeMillis() - STARTUP_TIME); LOG.info("Starting Cryptomator {} on {} {} ({})", env.getAppVersion(), 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 988641fa8..e50b7b29a 100644 --- a/src/main/java/org/cryptomator/launcher/SupportedLanguages.java +++ b/src/main/java/org/cryptomator/launcher/SupportedLanguages.java @@ -1,16 +1,16 @@ 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.text.Collator; -import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Locale; +import java.util.stream.Collectors; @Singleton public class SupportedLanguages { @@ -18,20 +18,16 @@ 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 "_". // "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", // + public static final List LANGUAGE_TAGS = List.of("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"; + public static final String ENGLISH = "en"; - @Nullable - private final String preferredLanguage; + private final List sortedLanguageTags; @Inject public SupportedLanguages(Settings settings) { - this.preferredLanguage = settings.languageProperty().get(); - } - - public void applyPreferred() { + var preferredLanguage = settings.languageProperty().get(); if (preferredLanguage == null) { LOG.debug("Using system locale"); } else { @@ -39,10 +35,18 @@ public class SupportedLanguages { LOG.debug("Applying preferred locale {}", preferredLocale.getDisplayName(Locale.ENGLISH)); Locale.setDefault(preferredLocale); } - SupportedLanguages.LANGUAGE_TAGS.sort((a, b) -> { + sortedLanguageTags = LANGUAGE_TAGS.stream().sorted((a, b) -> { var collator = Collator.getInstance(Locale.getDefault()); collator.setStrength(Collator.PRIMARY); return collator.compare(Locale.forLanguageTag(a).getDisplayName(), Locale.forLanguageTag(b).getDisplayName()); - }); + }).collect(Collectors.toList()); + sortedLanguageTags.add(0, Settings.DEFAULT_LANGUAGE); + sortedLanguageTags.add(1, ENGLISH); + } + + public List getLanguageTags() { + return Collections.unmodifiableList(sortedLanguageTags); + } + } diff --git a/src/main/java/org/cryptomator/ui/preferences/InterfacePreferencesController.java b/src/main/java/org/cryptomator/ui/preferences/InterfacePreferencesController.java index 9cc94a83f..05b733f86 100644 --- a/src/main/java/org/cryptomator/ui/preferences/InterfacePreferencesController.java +++ b/src/main/java/org/cryptomator/ui/preferences/InterfacePreferencesController.java @@ -34,6 +34,7 @@ public class InterfacePreferencesController implements FxController { private final ObjectProperty selectedTabProperty; private final LicenseHolder licenseHolder; private final ResourceBundle resourceBundle; + private final SupportedLanguages supportedLanguages; public ChoiceBox themeChoiceBox; public CheckBox showMinimizeButtonCheckbox; public CheckBox showTrayIconCheckbox; @@ -43,13 +44,14 @@ public class InterfacePreferencesController implements FxController { public RadioButton nodeOrientationRtl; @Inject - InterfacePreferencesController(Settings settings, TrayMenuComponent trayMenu, ObjectProperty selectedTabProperty, LicenseHolder licenseHolder, ResourceBundle resourceBundle) { + InterfacePreferencesController(Settings settings, SupportedLanguages supportedLanguages, TrayMenuComponent trayMenu, ObjectProperty selectedTabProperty, LicenseHolder licenseHolder, ResourceBundle resourceBundle) { this.settings = settings; this.trayMenuInitialized = trayMenu.isInitialized(); this.trayMenuSupported = trayMenu.isSupported(); this.selectedTabProperty = selectedTabProperty; this.licenseHolder = licenseHolder; this.resourceBundle = resourceBundle; + this.supportedLanguages = supportedLanguages; } @FXML @@ -65,10 +67,7 @@ public class InterfacePreferencesController implements FxController { showTrayIconCheckbox.selectedProperty().bindBidirectional(settings.showTrayIcon()); - // 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.getItems().addAll(supportedLanguages.getLanguageTags()); preferredLanguageChoiceBox.valueProperty().bindBidirectional(settings.languageProperty()); preferredLanguageChoiceBox.setConverter(new LanguageTagConverter(resourceBundle)); From 7d62fc78de92627f916da5c0561f8103220b543d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ju=CC=88rgen=20Kleer?= Date: Thu, 27 Apr 2023 18:03:41 +0200 Subject: [PATCH 5/8] Set preferred locale in constructor, make it default in applyPreferred --- .../org/cryptomator/launcher/Cryptomator.java | 5 +++- .../launcher/SupportedLanguages.java | 25 ++++++++++--------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/cryptomator/launcher/Cryptomator.java b/src/main/java/org/cryptomator/launcher/Cryptomator.java index c8f0dd3d3..2b066c730 100644 --- a/src/main/java/org/cryptomator/launcher/Cryptomator.java +++ b/src/main/java/org/cryptomator/launcher/Cryptomator.java @@ -35,13 +35,15 @@ public class Cryptomator { private static final Logger LOG = LoggerFactory.getLogger(Cryptomator.class); private final DebugMode debugMode; + private final SupportedLanguages supportedLanguages; private final Environment env; private final Lazy ipcMessageHandler; private final ShutdownHook shutdownHook; @Inject - Cryptomator(DebugMode debugMode, Environment env, Lazy ipcMessageHandler, ShutdownHook shutdownHook) { + Cryptomator(DebugMode debugMode, SupportedLanguages supportedLanguages, Environment env, Lazy ipcMessageHandler, ShutdownHook shutdownHook) { this.debugMode = debugMode; + this.supportedLanguages = supportedLanguages; this.env = env; this.ipcMessageHandler = ipcMessageHandler; this.shutdownHook = shutdownHook; @@ -78,6 +80,7 @@ public class Cryptomator { LOG.debug("Dagger graph initialized after {}ms", System.currentTimeMillis() - STARTUP_TIME); LOG.info("Starting Cryptomator {} on {} {} ({})", env.getAppVersion(), 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 e50b7b29a..23d3e8fe0 100644 --- a/src/main/java/org/cryptomator/launcher/SupportedLanguages.java +++ b/src/main/java/org/cryptomator/launcher/SupportedLanguages.java @@ -25,28 +25,29 @@ public class SupportedLanguages { private final List sortedLanguageTags; + private final Locale preferredLocale; + @Inject public SupportedLanguages(Settings settings) { var preferredLanguage = settings.languageProperty().get(); - if (preferredLanguage == null) { - LOG.debug("Using system locale"); - } else { - var preferredLocale = Locale.forLanguageTag(preferredLanguage); - LOG.debug("Applying preferred locale {}", preferredLocale.getDisplayName(Locale.ENGLISH)); - Locale.setDefault(preferredLocale); - } - sortedLanguageTags = LANGUAGE_TAGS.stream().sorted((a, b) -> { - var collator = Collator.getInstance(Locale.getDefault()); + preferredLocale = preferredLanguage == null ? Locale.getDefault() : Locale.forLanguageTag(preferredLanguage); + var sorted = LANGUAGE_TAGS.stream().sorted((a, b) -> { + var collator = Collator.getInstance(preferredLocale); collator.setStrength(Collator.PRIMARY); return collator.compare(Locale.forLanguageTag(a).getDisplayName(), Locale.forLanguageTag(b).getDisplayName()); }).collect(Collectors.toList()); - sortedLanguageTags.add(0, Settings.DEFAULT_LANGUAGE); - sortedLanguageTags.add(1, ENGLISH); + sorted.add(0, Settings.DEFAULT_LANGUAGE); + sorted.add(1, ENGLISH); + sortedLanguageTags = Collections.unmodifiableList(sorted); + } + public void applyPreferred() { + LOG.debug("Using locale {}", preferredLocale); + Locale.setDefault(preferredLocale); } public List getLanguageTags() { - return Collections.unmodifiableList(sortedLanguageTags); + return sortedLanguageTags; } } From 9297562c99be7e9bd6ddbc266c2776f5ecc7ae4d Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Fri, 5 May 2023 10:52:51 +0200 Subject: [PATCH 6/8] improve auto-generated release notes [ci skip] --- .github/release.yml | 23 +++++++++++++++++++++++ .github/workflows/build.yml | 4 ++++ 2 files changed, 27 insertions(+) create mode 100644 .github/release.yml diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 000000000..9f091a4d6 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,23 @@ +# .github/release.yml +# see https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes#configuring-automatically-generated-release-notes + +changelog: + exclude: + authors: + - cryptobot + - dependabot + - github-actions + categories: + - title: What's New 🎉 + labels: + - release-notes:feature + - title: Bugfixes 🐛 + labels: + - release-notes:bugfix + - title: Other Changes 📎 + labels: + - "*" + exclude: + labels: + - release-notes:feature + - release-notes:bugfix \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b31bfa08a..681ba1f94 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -53,4 +53,8 @@ jobs: body: |- :construction: Work in Progress + Please be patient, the builds are still running. We will publish new versions of Cryptomator here in a few moments. + + As usual, the GPG signatures can be checked using [our public key `5811 7AFA 1F85 B3EE C154 677D 615D 449F E6E6 A235`](https://gist.github.com/cryptobot/211111cf092037490275f39d408f461a). --- + \ No newline at end of file From e8f8466d9a2747f4bf338a0fbaee13148d155e36 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Fri, 5 May 2023 10:56:44 +0200 Subject: [PATCH 7/8] adjusted labels used in auto-generated release notes [ci skip] --- .github/release.yml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.github/release.yml b/.github/release.yml index 9f091a4d6..5ab2e03f7 100644 --- a/.github/release.yml +++ b/.github/release.yml @@ -10,14 +10,20 @@ changelog: categories: - title: What's New 🎉 labels: - - release-notes:feature + - type:feature-request + - type:enhancement - title: Bugfixes 🐛 labels: - - release-notes:bugfix + - type:security-issue + - type:bug + - type:minor-bug - title: Other Changes 📎 labels: - "*" exclude: labels: - - release-notes:feature - - release-notes:bugfix \ No newline at end of file + - type:feature-request + - type:enhancement + - type:security-issue + - type:bug + - type:minor-bug \ No newline at end of file From 2a704d5eb49c0fd509c72fdfb7ff7192e8a5cb09 Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Fri, 5 May 2023 11:45:02 +0200 Subject: [PATCH 8/8] init collator once --- .../org/cryptomator/launcher/SupportedLanguages.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/cryptomator/launcher/SupportedLanguages.java b/src/main/java/org/cryptomator/launcher/SupportedLanguages.java index 23d3e8fe0..1d2f22da7 100644 --- a/src/main/java/org/cryptomator/launcher/SupportedLanguages.java +++ b/src/main/java/org/cryptomator/launcher/SupportedLanguages.java @@ -31,11 +31,11 @@ public class SupportedLanguages { public SupportedLanguages(Settings settings) { var preferredLanguage = settings.languageProperty().get(); preferredLocale = preferredLanguage == null ? Locale.getDefault() : Locale.forLanguageTag(preferredLanguage); - var sorted = LANGUAGE_TAGS.stream().sorted((a, b) -> { - var collator = Collator.getInstance(preferredLocale); - collator.setStrength(Collator.PRIMARY); - return collator.compare(Locale.forLanguageTag(a).getDisplayName(), Locale.forLanguageTag(b).getDisplayName()); - }).collect(Collectors.toList()); + var collator = Collator.getInstance(preferredLocale); + collator.setStrength(Collator.PRIMARY); + var sorted = LANGUAGE_TAGS.stream() // + .sorted((a, b) -> collator.compare(Locale.forLanguageTag(a).getDisplayName(), Locale.forLanguageTag(b).getDisplayName())) // + .collect(Collectors.toList()); sorted.add(0, Settings.DEFAULT_LANGUAGE); sorted.add(1, ENGLISH); sortedLanguageTags = Collections.unmodifiableList(sorted);