diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 4e81a4295..95fdd93ea 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -54,7 +54,7 @@ jobs: --verbose --output runtime --module-path "${JAVA_HOME}/jmods" - --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr + --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.zipfs --strip-native-commands --no-header-files --no-man-pages diff --git a/.github/workflows/mac-dmg.yml b/.github/workflows/mac-dmg.yml index 27320dba8..ab160f468 100644 --- a/.github/workflows/mac-dmg.yml +++ b/.github/workflows/mac-dmg.yml @@ -70,7 +70,7 @@ jobs: --verbose --output runtime --module-path "${JAVA_HOME}/jmods" - --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr + --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr,jdk.zipfs --strip-native-commands --no-header-files --no-man-pages diff --git a/.github/workflows/win-exe.yml b/.github/workflows/win-exe.yml index 45ce36c2e..2e018e305 100644 --- a/.github/workflows/win-exe.yml +++ b/.github/workflows/win-exe.yml @@ -83,7 +83,7 @@ jobs: --verbose --output runtime --module-path "jfxjmods;${JAVA_HOME}/jmods" - --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr + --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr,jdk.zipfs --strip-native-commands --no-header-files --no-man-pages diff --git a/dist/linux/appimage/build.sh b/dist/linux/appimage/build.sh index 487a1fee0..cadc1f5eb 100755 --- a/dist/linux/appimage/build.sh +++ b/dist/linux/appimage/build.sh @@ -24,7 +24,7 @@ ${JAVA_HOME}/bin/jlink \ --verbose \ --output runtime \ --module-path "${JAVA_HOME}/jmods" \ - --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr \ + --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.zipfs \ --strip-native-commands \ --no-header-files \ --no-man-pages \ diff --git a/dist/linux/debian/rules b/dist/linux/debian/rules index be1014ea9..d7d6c5684 100755 --- a/dist/linux/debian/rules +++ b/dist/linux/debian/rules @@ -27,7 +27,7 @@ override_dh_auto_build: $(JAVA_HOME)/bin/jlink \ --output runtime \ --module-path "${JMODS_PATH}" \ - --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr \ + --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,javafx.base,javafx.graphics,javafx.controls,javafx.fxml,jdk.unsupported,jdk.crypto.ec,jdk.security.auth,jdk.accessibility,jdk.management.jfr,jdk.zipfs \ --strip-native-commands \ --no-header-files \ --no-man-pages \ diff --git a/dist/mac/dmg/build.sh b/dist/mac/dmg/build.sh index 23917f9c5..8a3e4a85a 100755 --- a/dist/mac/dmg/build.sh +++ b/dist/mac/dmg/build.sh @@ -46,7 +46,7 @@ cp ../../../target/${MAIN_JAR_GLOB} ../../../target/mods ${JAVA_HOME}/bin/jlink \ --output runtime \ --module-path "${JAVA_HOME}/jmods" \ - --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr \ + --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr,jdk.zipfs \ --strip-native-commands \ --no-header-files \ --no-man-pages \ diff --git a/dist/win/build.ps1 b/dist/win/build.ps1 index 74532a96a..08513d47d 100644 --- a/dist/win/build.ps1 +++ b/dist/win/build.ps1 @@ -51,7 +51,7 @@ if ($clean -and (Test-Path -Path $runtimeImagePath)) { --verbose ` --output runtime ` --module-path "$Env:JAVA_HOME/jmods" ` - --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr ` + --add-modules java.base,java.desktop,java.instrument,java.logging,java.naming,java.net.http,java.scripting,java.sql,java.xml,jdk.unsupported,jdk.crypto.ec,jdk.accessibility,jdk.management.jfr,jdk.zipfs ` --strip-native-commands ` --no-header-files ` --no-man-pages ` @@ -93,6 +93,7 @@ if ($clean -and (Test-Path -Path $appPath)) { --java-options "-Dcryptomator.integrationsWin.keychainPaths=`"~/AppData/Roaming/$AppName/keychain.json`"" ` --java-options "-Dcryptomator.showTrayIcon=true" ` --java-options "-Dcryptomator.buildNumber=`"msi-$revisionNo`"" ` + --win-console ` --resource-dir resources ` --icon resources/$AppName.ico diff --git a/src/main/java/org/cryptomator/launcher/SupportedLanguages.java b/src/main/java/org/cryptomator/launcher/SupportedLanguages.java index 453545fb6..e770a2af4 100644 --- a/src/main/java/org/cryptomator/launcher/SupportedLanguages.java +++ b/src/main/java/org/cryptomator/launcher/SupportedLanguages.java @@ -7,7 +7,9 @@ import org.slf4j.LoggerFactory; import javax.inject.Inject; import javax.inject.Singleton; import java.io.IOException; +import java.net.URI; import java.net.URISyntaxException; +import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.text.Collator; @@ -15,6 +17,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.stream.StreamSupport; @Singleton @@ -60,11 +63,17 @@ public class SupportedLanguages { */ private static List getSupportedLanguageTags() { try { - var i18Dir = Path.of(SupportedLanguages.class.getResource("/i18n").toURI()); - try (var dirStream = Files.newDirectoryStream(i18Dir, "strings_*.properties")) { - return StreamSupport.stream(dirStream.spliterator(), false) // - .map(SupportedLanguages::getBCP47CodeFromFileName) // - .toList(); + var i18DirURI = SupportedLanguages.class.getResource("/i18n").toURI(); + var uriScheme = i18DirURI.getScheme(); + if (uriScheme.equals("jar")) { + final String[] array = i18DirURI.toString().split("!"); + try (var jarFs = FileSystems.newFileSystem(URI.create(array[0]), Map.of())) { + return streamDirectory(jarFs.getPath(array[1])); + } + } else if (uriScheme.equals("file")) { + return streamDirectory(Path.of(i18DirURI)); + } else { + throw new IOException("Unsupported uri scheme: " + uriScheme); } } catch (URISyntaxException | IOException e) { LOG.warn("Unable to determine additional supported languages.", e); @@ -72,6 +81,14 @@ public class SupportedLanguages { } } + private static List streamDirectory(Path i18Dir) throws IOException { + try (var dirStream = Files.newDirectoryStream(i18Dir, "strings_*.properties")) { + return StreamSupport.stream(dirStream.spliterator(), false) // + .map(SupportedLanguages::getBCP47CodeFromFileName) // + .toList(); + } + } + private static String getBCP47CodeFromFileName(Path p) { var fileName = p.getFileName().toString(); return fileName.substring("strings_".length(), fileName.indexOf(".properties")).replace('_', '-');