From 6efb839fd025785bbe8d0c5560d113267c4fb1f2 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Mon, 24 Jul 2023 15:00:28 +0200 Subject: [PATCH 01/12] prepare 1.10.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b54dd2b44..9912e7b93 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.cryptomator cryptomator - 1.10.0-SNAPSHOT + 1.10.0 Cryptomator Desktop App From 7d7b88829ddca4be233d65f6a5f954f693e0e230 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Tue, 1 Aug 2023 10:04:07 +0200 Subject: [PATCH 02/12] allow notarization on manually dispatched builds --- .github/workflows/mac-dmg.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/mac-dmg.yml b/.github/workflows/mac-dmg.yml index 1b3b4f0b9..764af2d9a 100644 --- a/.github/workflows/mac-dmg.yml +++ b/.github/workflows/mac-dmg.yml @@ -8,6 +8,11 @@ on: version: description: 'Version' required: false + notarize: + description: 'Notarize' + required: true + default: false + type: boolean env: JAVA_VERSION: 20 @@ -222,7 +227,7 @@ jobs: env: VERSION_NO: ${{ needs.get-version.outputs.semVerNum }} - name: Notarize .dmg - if: startsWith(github.ref, 'refs/tags/') + if: startsWith(github.ref, 'refs/tags/') || inputs.notarize uses: cocoalibs/xcode-notarization-action@v1 with: app-path: 'Cryptomator-*.dmg' From c7e23f964655c680f524c31597e70709265771d3 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Wed, 6 Sep 2023 16:40:00 +0200 Subject: [PATCH 03/12] build AppImage for aarch64 --- .../{appimage-amd64.yml => appimage.yml} | 34 +++++++++++++------ .github/workflows/mac-dmg.yml | 2 +- 2 files changed, 25 insertions(+), 11 deletions(-) rename .github/workflows/{appimage-amd64.yml => appimage.yml} (87%) diff --git a/.github/workflows/appimage-amd64.yml b/.github/workflows/appimage.yml similarity index 87% rename from .github/workflows/appimage-amd64.yml rename to .github/workflows/appimage.yml index dbc180473..47bcc97ee 100644 --- a/.github/workflows/appimage-amd64.yml +++ b/.github/workflows/appimage.yml @@ -14,6 +14,8 @@ env: JAVA_VERSION: 20 OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_linux-x64_bin-jmods.zip' OPENJFX_JMODS_AMD64_HASH: 'f522ac2ae4bdd61f0219b7b8d2058ff72a22f36a44378453bcfdcd82f8f5e08c' + OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_linux-aarch64_bin-jmods.zip' + OPENJFX_JMODS_AARCH64_HASH: 'c0d80ebbe0aab404ef9ad8b46c05bf533a1e40b39b2720eebd9238d81f6326ca' jobs: get-version: @@ -23,8 +25,20 @@ jobs: build: name: Build AppImage - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} needs: [get-version] + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + appimage-suffix: x86_64 + openjfx-url: ${{ env.OPENJFX_JMODS_AMD64 }} + openjfx-sha: ${{ env.OPENJFX_JMODS_AMD64_HASH }} + - os: [self-hosted, Linux, ARM64] + appimage-suffix: aarch64 + openjfx-url: ${{ env.OPENJFX_JMODS_AARCH64 }} + openjfx-sha: ${{ env.OPENJFX_JMODS_AARCH64_HASH }} steps: - uses: actions/checkout@v3 - name: Setup Java @@ -38,21 +52,21 @@ jobs: - name: Download OpenJFX jmods id: download-jmods run: | - curl -L ${{ env.OPENJFX_JMODS_AMD64 }} -o openjfx-jmods.zip - echo "${{ env.OPENJFX_JMODS_AMD64_HASH }} openjfx-jmods.zip" | shasum -a256 --check + curl -L ${{ matrix.openjfx-url }} -o openjfx-jmods.zip + echo "${{ matrix.openjfx-sha }} openjfx-jmods.zip" | shasum -a256 --check mkdir -p openjfx-jmods unzip -j openjfx-jmods.zip \*/javafx.base.jmod \*/javafx.controls.jmod \*/javafx.fxml.jmod \*/javafx.graphics.jmod -d openjfx-jmods - name: Ensure major jfx version in pom and in jmods is the same run: | - JMOD_VERSION_AMD64=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1) - JMOD_VERSION_AMD64=${JMOD_VERSION_AMD64#*@} - JMOD_VERSION_AMD64=${JMOD_VERSION_AMD64%%.*} + JMOD_VERSION=$(jmod describe openjfx-jmods/javafx.base.jmod | head -1) + JMOD_VERSION=${JMOD_VERSION#*@} + JMOD_VERSION=${JMOD_VERSION%%.*} POM_JFX_VERSION=$(mvn help:evaluate "-Dexpression=javafx.version" -q -DforceStdout) POM_JFX_VERSION=${POM_JFX_VERSION#*@} POM_JFX_VERSION=${POM_JFX_VERSION%%.*} if [ $POM_JFX_VERSION -ne $JMOD_VERSION_AMD64 ]; then - >&2 echo "Major JavaFX version in pom.xml (${POM_JFX_VERSION}) != amd64 jmod version (${JMOD_VERSION_AMD64})" + >&2 echo "Major JavaFX version in pom.xml (${POM_JFX_VERSION}) != amd64 jmod version (${JMOD_VERSION})" exit 1 fi - name: Set version @@ -133,7 +147,7 @@ jobs: ln -s bin/cryptomator.sh Cryptomator.AppDir/AppRun - name: Download AppImageKit run: | - curl -L https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-x86_64.AppImage -o appimagetool.AppImage + curl -L https://github.com/AppImage/AppImageKit/releases/download/13/appimagetool-${{ matrix.appimage-suffix }}.AppImage -o appimagetool.AppImage chmod +x appimagetool.AppImage ./appimagetool.AppImage --appimage-extract - name: Prepare GPG-Agent for signing with key 615D449FE6E6A235 @@ -145,8 +159,8 @@ jobs: GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }} - name: Build AppImage run: > - ./squashfs-root/AppRun Cryptomator.AppDir cryptomator-${{ needs.get-version.outputs.semVerStr }}-x86_64.AppImage - -u 'gh-releases-zsync|cryptomator|cryptomator|latest|cryptomator-*-x86_64.AppImage.zsync' + ./squashfs-root/AppRun Cryptomator.AppDir cryptomator-${{ needs.get-version.outputs.semVerStr }}-${{ matrix.appimage-suffix }}.AppImage + -u 'gh-releases-zsync|cryptomator|cryptomator|latest|cryptomator-*-${{ matrix.appimage-suffix }}.AppImage.zsync' --sign --sign-key=615D449FE6E6A235 --sign-args="--batch --pinentry-mode loopback" - name: Create detached GPG signatures run: | diff --git a/.github/workflows/mac-dmg.yml b/.github/workflows/mac-dmg.yml index fe10ce531..8d693b051 100644 --- a/.github/workflows/mac-dmg.yml +++ b/.github/workflows/mac-dmg.yml @@ -77,7 +77,7 @@ jobs: POM_JFX_VERSION=${POM_JFX_VERSION%%.*} if [ $POM_JFX_VERSION -ne $JMOD_VERSION ]; then - >&2 echo "Major JavaFX version in pom.xml (${POM_JFX_VERSION}) != jmod version (${JMOD_VERSION_AMD64})" + >&2 echo "Major JavaFX version in pom.xml (${POM_JFX_VERSION}) != jmod version (${JMOD_VERSION})" exit 1 fi - name: Set version From 8786b5ee2a14e9ff522adc55926b28c670f3baea Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Wed, 6 Sep 2023 16:43:58 +0200 Subject: [PATCH 04/12] can't use env vars in matrix builds --- .github/workflows/appimage.yml | 12 ++++-------- .github/workflows/mac-dmg.yml | 12 ++++-------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 47bcc97ee..e3841c8dc 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -12,10 +12,6 @@ on: env: JAVA_DIST: 'temurin' JAVA_VERSION: 20 - OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_linux-x64_bin-jmods.zip' - OPENJFX_JMODS_AMD64_HASH: 'f522ac2ae4bdd61f0219b7b8d2058ff72a22f36a44378453bcfdcd82f8f5e08c' - OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_linux-aarch64_bin-jmods.zip' - OPENJFX_JMODS_AARCH64_HASH: 'c0d80ebbe0aab404ef9ad8b46c05bf533a1e40b39b2720eebd9238d81f6326ca' jobs: get-version: @@ -33,12 +29,12 @@ jobs: include: - os: ubuntu-latest appimage-suffix: x86_64 - openjfx-url: ${{ env.OPENJFX_JMODS_AMD64 }} - openjfx-sha: ${{ env.OPENJFX_JMODS_AMD64_HASH }} + openjfx-url: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_linux-x64_bin-jmods.zip' + openjfx-sha: 'f522ac2ae4bdd61f0219b7b8d2058ff72a22f36a44378453bcfdcd82f8f5e08c' - os: [self-hosted, Linux, ARM64] appimage-suffix: aarch64 - openjfx-url: ${{ env.OPENJFX_JMODS_AARCH64 }} - openjfx-sha: ${{ env.OPENJFX_JMODS_AARCH64_HASH }} + openjfx-url: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_linux-aarch64_bin-jmods.zip' + openjfx-sha: 'c0d80ebbe0aab404ef9ad8b46c05bf533a1e40b39b2720eebd9238d81f6326ca' steps: - uses: actions/checkout@v3 - name: Setup Java diff --git a/.github/workflows/mac-dmg.yml b/.github/workflows/mac-dmg.yml index 8d693b051..a394101ff 100644 --- a/.github/workflows/mac-dmg.yml +++ b/.github/workflows/mac-dmg.yml @@ -17,10 +17,6 @@ on: env: JAVA_DIST: 'temurin' JAVA_VERSION: 20 - OPENJFX_JMODS_AMD64: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_osx-x64_bin-jmods.zip' - OPENJFX_JMODS_AMD64_HASH: '55b8ff7453d59c89ae129f6c9c5ad7b09a5d359568811b376ac1766c14d6a17c' - OPENJFX_JMODS_AARCH64: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_osx-aarch64_bin-jmods.zip' - OPENJFX_JMODS_AARCH64_HASH: 'c60f5f19aa847e0e620e0b011e5de68f2c6755641c2141cec27a0b89f612beaf' jobs: get-version: @@ -41,15 +37,15 @@ jobs: output-suffix: x64 xcode-path: '/Applications/Xcode_13.2.1.app' fuse-lib: macFUSE - openjfx-url: ${{ env.OPENJFX_JMODS_AMD64 }} - openjfx-sha: ${{ env.OPENJFX_JMODS_AMD64_HASH }} + openjfx-url: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_osx-x64_bin-jmods.zip' + openjfx-sha: '55b8ff7453d59c89ae129f6c9c5ad7b09a5d359568811b376ac1766c14d6a17c' - os: [self-hosted, macOS, ARM64] architecture: aarch64 output-suffix: arm64 xcode-path: '/Applications/Xcode_13.2.1.app' fuse-lib: FUSE-T - openjfx-url: ${{ env.OPENJFX_JMODS_AARCH64 }} - openjfx-sha: ${{ env.OPENJFX_JMODS_AARCH64_HASH }} + openjfx-url: 'https://download2.gluonhq.com/openjfx/20.0.2/openjfx-20.0.2_osx-aarch64_bin-jmods.zip' + openjfx-sha: 'c60f5f19aa847e0e620e0b011e5de68f2c6755641c2141cec27a0b89f612beaf' steps: - uses: actions/checkout@v3 - name: Setup Java From f19ff590051cc39841a9b554a2d9c2cb352877e6 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Wed, 6 Sep 2023 16:47:29 +0200 Subject: [PATCH 05/12] add suffix to uploaded artifacts --- .github/workflows/appimage.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index e3841c8dc..fbbc879b6 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -165,7 +165,7 @@ jobs: - name: Upload artifacts uses: actions/upload-artifact@v3 with: - name: appimage + name: appimage-${{ matrix.appimage-suffix }} path: | cryptomator-*.AppImage cryptomator-*.AppImage.zsync From 18b648473174b30cc4df876a2fa24b32d2f43b5a Mon Sep 17 00:00:00 2001 From: Cryptobot Date: Mon, 11 Sep 2023 09:46:49 +0200 Subject: [PATCH 06/12] New Crowdin updates (#3095) New translations strings.properties Arabic; Chinese Simplified; Filipino; German; Japanese; Norwegian Bokmal; Polish; Portuguese, Brazilian; Spanish; Swedish; Ukrainian; [ci skip] --- src/main/resources/i18n/strings_ar.properties | 34 ++++++++++-- src/main/resources/i18n/strings_de.properties | 4 +- src/main/resources/i18n/strings_es.properties | 4 ++ .../resources/i18n/strings_fil.properties | 54 +++++++++++++++++++ src/main/resources/i18n/strings_ja.properties | 4 ++ src/main/resources/i18n/strings_nb.properties | 4 ++ src/main/resources/i18n/strings_pl.properties | 1 + .../resources/i18n/strings_pt_BR.properties | 4 ++ src/main/resources/i18n/strings_sv.properties | 4 ++ src/main/resources/i18n/strings_uk.properties | 6 +++ src/main/resources/i18n/strings_zh.properties | 4 ++ 11 files changed, 117 insertions(+), 6 deletions(-) diff --git a/src/main/resources/i18n/strings_ar.properties b/src/main/resources/i18n/strings_ar.properties index e8531fe20..832667de1 100644 --- a/src/main/resources/i18n/strings_ar.properties +++ b/src/main/resources/i18n/strings_ar.properties @@ -41,6 +41,7 @@ traymenu.vault.reveal=إظهار # Add Vault Wizard addvaultwizard.title=أضِف مخزنًا ## New +addvaultwizard.new.title=إضافة مخزن جديد ### Name addvaultwizard.new.nameInstruction=اختر اسم للمخزن addvaultwizard.new.namePrompt=اسم الخزينة @@ -85,11 +86,12 @@ addvault.new.readme.storageLocation.8=2. فتح المخزن باستخدام Cr addvault.new.readme.storageLocation.9=3. افتح موقع الوصول بالنقر على زر "إظهار". addvault.new.readme.storageLocation.10=إذا كنت بحاجة إلى المساعدة، قم بالاطلاع على كتيب الوثائق: %s addvault.new.readme.accessLocation.fileName=مرحبا.rtf -addvault.new.readme.accessLocation.1=🔐️ المجلدات المشفرة 🔐️ +addvault.new.readme.accessLocation.1=🔐️ وحدة التخزين مشفرة 🔐️ addvault.new.readme.accessLocation.2=هذا هو موقع الوصول للخرنة الخاص بك. addvault.new.readme.accessLocation.3=سيتم تشفير أي ملفات تضاف إلى هذا المجلد من قبل Cryptomator. يمكنك العمل عليه كأي مجلد آخر. هذه فقط طريقة عرض غير مشفرة لمحتوياتها، ملفاتك تبقى مشفرة على القرص الصلب الخاص بك طوال الوقت. addvault.new.readme.accessLocation.4=لا تتردد في إزالة هذا الملف. ## Existing +addvaultwizard.existing.title=أضِف مخزن موجود addvaultwizard.existing.instruction=اختر ملف "vault.cryptomator" من خزينتك الحالية. إذا كان يوجد فقط ملف اسمه "masterkey.cryptomator"، اختره عوضاً عنه. addvaultwizard.existing.chooseBtn=اختر… addvaultwizard.existing.filePickerTitle=حدد مِلَفّ المخزن @@ -132,9 +134,10 @@ unlock.success.rememberChoice=تذكر اختياري ولا تظهر هذا م unlock.success.revealBtn=اظهار القرص ## Failure unlock.error.customPath.message=غير قادر على تركيب المخزن إلى المسار المخصص -unlock.error.customPath.description.notSupported=إذا كنت ترغب في الاستمرار في استخدام المسار المخصص، يرجى الذَّهاب إلى التفضيلات وتحديد نوع واسطة التخزين الذي يدعمها. خلاف ذلك، انتقل إلى خيارات المخزن واختر نقطة تركيب مدعومة. +unlock.error.customPath.description.notSupported=إذا كنت ترغب في الاستمرار في استخدام المسار المخصص، يرجى الذَّهاب إلى التفضيلات وتحديد نوع وحدة التخزين\n الذي يدعمها. خلاف ذلك، انتقل إلى خيارات المخزن واختر نقطة تركيب مدعومة. unlock.error.customPath.description.notExists=مسار التركيب المخصص غير موجود. قم بإنشائه في نظام الملفات المحلي الخاص بك أو اختر غيره في خيارات الخزانة. unlock.error.customPath.description.inUse=حرف القرص أو مسار التركيب المخصص "%s" قيد الاستخدام بالفعل. +unlock.error.customPath.description.hideawayNotDir=لا يمكن إزالة المِلَفّ المؤقت المخفي "%3$s" المستخدم لفتح القُفْل. الرجاء التحقق من المِلَفّ ثم حذفه يدوياً. unlock.error.customPath.description.couldNotBeCleaned=لا يمكن تركيب خزانتك على المسار "%s". الرجاء المحاولة مرة أخرى أو اختيار مسار مختلف. unlock.error.customPath.description.notEmptyDir=مسار التركيب المخصص "%s" ليس مجلد فارغ. الرجاء اختيار مجلد فارغ وحاول مرة أخرى. unlock.error.customPath.description.generic=لقد اخترت مسار تركيب مخصص لهذه الخزانة، ولكن استخدامه فشل مع الرسالة: %2$s @@ -245,6 +248,11 @@ health.result.severityFilter.info=معلومات health.result.severityFilter.warn=تحذير health.result.severityFilter.crit=حرج health.result.severityTip.good=الخطورة: جيد\nبنية المخزن عادية. +health.result.severityTip.info=الخطورة: معلومات\nبنية المخزن سليمة، إصلاح المقترح. +health.result.severityTip.warn=الخطورة: تحذير\nبنية المخزن تالفة، ننصح لإصلاح. +health.result.severityTip.crit=الخطورة: حرجة\nبنية المخزن تالفة، وتم تحديد فقدان البيانات. +health.result.fixStateFilter.all=حالة لإصلاح - الكل +health.result.fixStateFilter.fixable=قابلة للإصلاح health.result.fixStateFilter.notFixable=غير قابل للإصلاح health.result.fixStateFilter.fixing=يتم الإصلاح… health.result.fixStateFilter.fixed=تم الإصلاح @@ -259,15 +267,33 @@ preferences.title=تفضيلات ## General preferences.general=عام preferences.general.startHidden=إخفاء النافذة عند بدء تشغيل Cryptomator +preferences.general.autoCloseVaults=اقفل الخزانات المفتوحة تلقائياً عند الإقلاع عن التطبيق preferences.general.debugLogging=تمكين سجلات التصحيح preferences.general.debugDirectory=عرض ملفات السجل preferences.general.autoStart=تشغيل Cryptomator عند بدء تشغيل النظام preferences.general.keychainBackend=تخزين كلمات المرور مع ## Interface +preferences.interface=الواجهة +preferences.interface.theme=الشكل والمظهر +preferences.interface.theme.automatic=تلقائي preferences.interface.theme.dark=مظلم (أسود) preferences.interface.theme.light=فاتح (أبيض) +preferences.interface.unlockThemes=تفعيل الوضع الداكن +preferences.interface.language=اللغة (يتطلب إعادة التشغيل) +preferences.interface.language.auto=النظام الافتراضي +preferences.interface.interfaceOrientation=اتجاه الواجهة +preferences.interface.interfaceOrientation.ltr=من اليسار إلى اليمين +preferences.interface.interfaceOrientation.rtl=من اليمين إلى اليسار +preferences.interface.showMinimizeButton=إظهار زر التصغير +preferences.interface.showTrayIcon=إظهار أيقونة اللوحة (يتطلب إعادة تشغيل) ## Volume preferences.volume=القرص الإفتراضي +preferences.volume.type=‮نوع وحدة التخزين +preferences.volume.type.automatic=تلقائي +preferences.volume.docsTooltip=افتح الوثائق لمعرفة المزيد عن مختلف أنواع وحدة التخزين. +preferences.volume.fuseRestartRequired=لتطبيق التغييرات، يحتاج Cryptomator إلى إعادة التشغيل. +preferences.volume.tcp.port=منفذ TCP +preferences.volume.supportedFeatures=يدعم نوع وحدة تخزين المختار الميزات التالية: ## Updates preferences.updates=تحديثات preferences.updates.currentVersion=الإصدار الحالي: %s @@ -353,8 +379,8 @@ wrongFileAlert.message=هل حاولت تشفير هذه الملفات؟ wrongFileAlert.description=لهذا الغرض، بوفر Cryptomator مجلداً في مدير ملفات النظام الخاص بك. wrongFileAlert.instruction.0=لتشفير الملفات، قم باتباع الخطوات التالية: wrongFileAlert.instruction.1=1. فتح المخزن الخاص بك. -wrongFileAlert.instruction.2=2. انقر على "إظهار" لفتح المجلد في مدير الملفات الخاص بك. -wrongFileAlert.instruction.3=3. أضف ملفاتك إلى هذا المجلد. +wrongFileAlert.instruction.2=2. انقر على "إظهار" لفتح وحدة التخزين في مدير ملفاتك. +wrongFileAlert.instruction.3=3. أضِف ملفاتك إلى هذه وحدة التخزين. wrongFileAlert.link=لمزيد من المساعدة، قم بزيارة # Vault Options diff --git a/src/main/resources/i18n/strings_de.properties b/src/main/resources/i18n/strings_de.properties index 2568b791c..25bcf8541 100644 --- a/src/main/resources/i18n/strings_de.properties +++ b/src/main/resources/i18n/strings_de.properties @@ -366,8 +366,8 @@ main.vaultlist.contextMenu.unlockNow=Jetzt entsperren main.vaultlist.contextMenu.vaultoptions=Tresoroptionen anzeigen main.vaultlist.contextMenu.reveal=Laufwerk anzeigen main.vaultlist.addVaultBtn=Hinzufügen -main.vaultlist.addVaultBtn.menuItemNew=Neuer Tresor... -main.vaultlist.addVaultBtn.menuItemExisting=Bestehender Tresor... +main.vaultlist.addVaultBtn.menuItemNew=Neuer Tresor … +main.vaultlist.addVaultBtn.menuItemExisting=Bestehender Tresor … ## Vault Detail ### Welcome main.vaultDetail.welcomeOnboarding=Danke, dass du zum Schutz deiner Dateien Cryptomator gewählt hast. Falls du Hilfe brauchst, schau dir unsere Anleitungen an: diff --git a/src/main/resources/i18n/strings_es.properties b/src/main/resources/i18n/strings_es.properties index 8b3070c25..27804b73c 100644 --- a/src/main/resources/i18n/strings_es.properties +++ b/src/main/resources/i18n/strings_es.properties @@ -41,6 +41,7 @@ traymenu.vault.reveal=Revelar # Add Vault Wizard addvaultwizard.title=Añadir bóveda ## New +addvaultwizard.new.title=Añadir nueva bóveda ### Name addvaultwizard.new.nameInstruction=Elegir un nombre para la bóveda addvaultwizard.new.namePrompt=Nombre de la bóveda @@ -90,6 +91,7 @@ addvault.new.readme.accessLocation.2=Este es el lugar de acceso de la bóveda. addvault.new.readme.accessLocation.3=Los archivos agregados a este volumen serán cifrados por Cryptomator. Se puede trabajar con ellos como en cualquier otra unidad/carpeta. Esta es sólo una vista descifrada del contenido, sus archivos permanecen cifrados en el disco duro todo el tiempo. addvault.new.readme.accessLocation.4=No dude en eliminar este archivo. ## Existing +addvaultwizard.existing.title=Añadir bóveda existente addvaultwizard.existing.instruction=Elija el archivo "vault.cryptomator" de su bóveda existente. Si solo existe un archivo llamado "masterkey.cryptomator", selecciónelo en su lugar. addvaultwizard.existing.chooseBtn=Elegir… addvaultwizard.existing.filePickerTitle=Seleccionar archivo de bóveda @@ -364,6 +366,8 @@ main.vaultlist.contextMenu.unlockNow=Desbloquear ahora main.vaultlist.contextMenu.vaultoptions=Mostrar opciones de la bóveda main.vaultlist.contextMenu.reveal=Revelar unidad main.vaultlist.addVaultBtn=Añadir +main.vaultlist.addVaultBtn.menuItemNew=Nueva bóveda... +main.vaultlist.addVaultBtn.menuItemExisting=Bóveda existente... ## Vault Detail ### Welcome main.vaultDetail.welcomeOnboarding=Gracias por elegir Cryptomator para proteger sus archivos. En caso de necesitar ayuda, revise nuestras guías: diff --git a/src/main/resources/i18n/strings_fil.properties b/src/main/resources/i18n/strings_fil.properties index 1a4dd5202..b9fb10c8e 100644 --- a/src/main/resources/i18n/strings_fil.properties +++ b/src/main/resources/i18n/strings_fil.properties @@ -20,6 +20,10 @@ error.description=Oops! Hindi inaasahan ng Cryptomator na ito'y mangyari. Maaari error.hyperlink.lookup=Hanapin ang solusyon error.hyperlink.report=I-report ang problema error.technicalDetails=Mga detalye: +error.existingSolutionDescription=Hindi inaasahan ng Cryptomator na mangyayari ito. Ngunit nakakita kami ng kasalukuyang solusyon para sa error na ito. Mangyaring tingnan ang sumusunod na link. +error.hyperlink.solution=Hanapin ang solusyon +error.lookupPermissionMessage=Maaaring maghanap ng solusyon ang Cryptomator para sa problemang ito online. Magpapadala ito ng kahilingan sa aming database ng problema mula sa iyong IP address. +error.dismiss=I-dismiss error.lookUpSolution=Itignan ang solusyon # Defaults @@ -37,6 +41,7 @@ traymenu.vault.reveal=Ipakita # Add Vault Wizard addvaultwizard.title=Magdagdag ng Vault ## New +addvaultwizard.new.title=Magdagdag ng Bagong Vault ### Name addvaultwizard.new.nameInstruction=Pangalanan ang vault addvaultwizard.new.namePrompt=Pangalan ng Vault @@ -47,34 +52,78 @@ addvaultwizard.new.locationPrompt=… addvaultwizard.new.directoryPickerLabel=Custom Location addvaultwizard.new.directoryPickerButton=Mamili… addvaultwizard.new.directoryPickerTitle=Pumili ng Direktoryo +addvaultwizard.new.fileAlreadyExists=Mayroon nang file o direktoryo na may pangalan ng vault +addvaultwizard.new.locationDoesNotExist=Ang isang direktoryo sa tinukoy na landas ay hindi umiiral o hindi ma-access +addvaultwizard.new.locationIsNotWritable=Walang access sa pagsulat sa tinukoy na landas +addvaultwizard.new.locationIsOk=Angkop na lokasyon para sa iyong vault +addvaultwizard.new.invalidName=Di-wastong pangalan ng vault +addvaultwizard.new.validName=Wastong pangalan ng vault +addvaultwizard.new.validCharacters.message=Maaaring naglalaman ang pangalan ng vault ng mga sumusunod na character: +addvaultwizard.new.validCharacters.chars=Mga character ng salita (hal. a, ж o 수) +addvaultwizard.new.validCharacters.numbers=Numero +addvaultwizard.new.validCharacters.dashes=Hyphen (%s) o underscore (%s) ### Expert Settings +addvaultwizard.new.expertSettings.enableExpertSettingsCheckbox=Paganahin ang mga setting ng eksperto +addvaultwizard.new.expertSettings.shorteningThreshold.invalid=Maglagay ng value sa pagitan ng 36 at 220 (default 220) addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Ibukas ang dokumentasyon para matuto pa. +addvaultwizard.new.expertSettings.shorteningThreshold.title=Pinakamataas na haba ng mga naka-encrypt na pangalan ng file +addvaultwizard.new.expertSettings.shorteningThreshold.valid=Wasto ### Password addvaultwizard.new.createVaultBtn=Gumawa ng bagong Vault +addvaultwizard.new.generateRecoveryKeyChoice=Hindi mo maa-access ang iyong data nang wala ang iyong password. Gusto mo ba ng recovery key para sa kaso na nawala mo ang iyong password? +addvaultwizard.new.generateRecoveryKeyChoice.yes=Oo pakiusap, mas ligtas kaysa sorry +addvaultwizard.new.generateRecoveryKeyChoice.no=Hindi, salamat, hindi ko mawawala ang aking password ### Information +addvault.new.readme.storageLocation.fileName=MAHALAGA.rtf +addvault.new.readme.storageLocation.1=⚠️ VAULT FILES ⚠️ addvault.new.readme.storageLocation.2=Ito ang lokasyon ng iyong vault na imbakan. addvault.new.readme.storageLocation.3=HUWAG +addvault.new.readme.storageLocation.4=• baguhin ang anumang mga file sa loob ng direktoryong ito o +addvault.new.readme.storageLocation.5=• i-paste ang anumang mga file para sa pag-encrypt sa direktoryong ito. addvault.new.readme.storageLocation.6=Kung gusto mo i-encrypt ang mga files at makita nang nilalaman ng vault, gawin ang nakasabi: addvault.new.readme.storageLocation.7=1. Idagdag ang vault na ito sa Cryptomator. +addvault.new.readme.storageLocation.8=2. I-unlock ang vault sa Cryptomator. +addvault.new.readme.storageLocation.9=3. Buksan ang lokasyon ng pag-access sa pamamagitan ng pag-click sa pindutang "Ibunyag". +addvault.new.readme.storageLocation.10=Kung kailangan mo ng tulong, bisitahin ang dokumentasyon: %s +addvault.new.readme.accessLocation.fileName=WELCOME.rtf +addvault.new.readme.accessLocation.1=🔐️ Naka-encrypt na VOLUME 🔐️ addvault.new.readme.accessLocation.2=Ito ang lokasyon ng iyong vault. +addvault.new.readme.accessLocation.3=Ang anumang mga file na idinagdag sa volume na ito ay ie-encrypt ng Cryptomator. Maaari mong gawin ito tulad ng sa anumang iba pang drive/folder. Ito ay isang decrypted view lamang ng nilalaman nito, ang iyong mga file ay mananatiling naka-encrypt sa iyong hard drive sa lahat ng oras. +addvault.new.readme.accessLocation.4=Huwag mag-atubiling tanggalin ang file na ito. ## Existing +addvaultwizard.existing.title=Magdagdag ng Umiiral na Vault +addvaultwizard.existing.instruction=Piliin ang "vault.cryptomator" file ng iyong kasalukuyang vault. Kung mayroon lamang file na may pangalang "masterkey.cryptomator," piliin iyon sa halip. addvaultwizard.existing.chooseBtn=Mamili… +addvaultwizard.existing.filePickerTitle=Piliin ang Vault File +addvaultwizard.existing.filePickerMimeDesc=Cryptomator Vault ## Success +addvaultwizard.success.nextStepsInstructions=Idinagdag ang vault na "%s".\nKailangan mong i-unlock ang vault na ito para ma-access o magdagdag ng mga content. Bilang kahalili, maaari mo itong i-unlock sa anumang susunod na oras. +addvaultwizard.success.unlockNow=I-unlock Ngayon # Remove Vault removeVault.title=Tanggalin %s removeVault.message=Itangal ang vault? +removeVault.description=Makakalimutan lang nito ang Cryptomator tungkol sa vault na ito. Maaari mo itong idagdag muli. Walang matatanggal na mga naka-encrypt na file mula sa iyong hard drive. removeVault.confirmBtn=Itangal ang vault # Change Password +changepassword.title=Palitan ANG password +changepassword.enterOldPassword=Ilagay ang kasalukuyang password para sa "%s" +changepassword.finalConfirmation=Naiintindihan ko na hindi ko maa-access ang aking data kung nakalimutan ko ang aking password # Forget Password +forgetPassword.title=Kalimutan ang Password forgetPassword.message=Nakalimutan ang iyong password? +forgetPassword.description=Tatanggalin nito ang naka-save na password ng vault na ito mula sa keychain ng iyong system. +forgetPassword.confirmBtn=Kalimutan ang Password # Unlock +unlock.title=I-unlock ang "%s" +unlock.passwordPrompt=Ipasok ang password para sa "%s": unlock.savePassword=Maalala ang password unlock.unlockBtn=I-unlock ## Select +unlock.chooseMasterkey.message=Hindi nahanap ang masterkey file unlock.chooseMasterkey.filePickerTitle=Piliin ang masterkey file unlock.chooseMasterkey.filePickerMimeDesc=Cryptomator Masterkey ## Success @@ -100,6 +149,7 @@ lock.forced.retryBtn=Subukan muli ## Start ## Run ## Success +migration.success.unlockNow=I-unlock Ngayon ## Missing file system capabilities ## Impossible @@ -136,9 +186,12 @@ main.closeBtn.tooltip=Isara main.preferencesBtn.tooltip=Mga Kagustuhan ## Vault List main.vaultlist.contextMenu.lock=I-lock +main.vaultlist.contextMenu.unlockNow=I-unlock Ngayon +main.vaultlist.addVaultBtn=Idagdag ## Vault Detail ### Welcome ### Locked +main.vaultDetail.unlockNowBtn=I-unlock Ngayon ### Unlocked main.vaultDetail.lockBtn=I-lock ### Missing @@ -154,6 +207,7 @@ vaultOptions.general.vaultName=Pangalan ng Vault ## Mount vaultOptions.mount.mountPoint.directoryPickerButton=Mamili… ## Master Key +vaultOptions.masterkey.changePasswordBtn=Palitan ANG password ## Hub # Recovery Key diff --git a/src/main/resources/i18n/strings_ja.properties b/src/main/resources/i18n/strings_ja.properties index fa3d7d3e4..aa7af70d2 100644 --- a/src/main/resources/i18n/strings_ja.properties +++ b/src/main/resources/i18n/strings_ja.properties @@ -41,6 +41,7 @@ traymenu.vault.reveal=表示 # Add Vault Wizard addvaultwizard.title=金庫を追加 ## New +addvaultwizard.new.title=新しい金庫を追加 ### Name addvaultwizard.new.nameInstruction=金庫の名前を入力してください addvaultwizard.new.namePrompt=金庫の名前 @@ -90,6 +91,7 @@ addvault.new.readme.accessLocation.2=ここは金庫のアクセス先です。 addvault.new.readme.accessLocation.3=このボリュームに追加したファイルは Cryptomator によって暗号化されます。一般的なドライブ/フォルダー上のように作業することができます。ここでは復号したコンテンツのビューにすぎず、ファイルは常にハードドライブ上で暗号化されています。 addvault.new.readme.accessLocation.4=このファイルはいつでも削除できます。 ## Existing +addvaultwizard.existing.title=既存の金庫を追加 addvaultwizard.existing.instruction=すでにある金庫の "vault.cryptomator" ファイルを選択してください。"masterkey.cryptomator" という名前のファイルだけが存在する場合は、このファイルを代わりに選択してください。 addvaultwizard.existing.chooseBtn=選択... addvaultwizard.existing.filePickerTitle=金庫のファイルを選択 @@ -364,6 +366,8 @@ main.vaultlist.contextMenu.unlockNow=今すぐ解錠 main.vaultlist.contextMenu.vaultoptions=金庫のオプションを表示 main.vaultlist.contextMenu.reveal=ドライブを表示 main.vaultlist.addVaultBtn=追加 +main.vaultlist.addVaultBtn.menuItemNew=新しい金庫... +main.vaultlist.addVaultBtn.menuItemExisting=既存の金庫... ## Vault Detail ### Welcome main.vaultDetail.welcomeOnboarding=ファイルを保護するために Cryptomator を選んでいただきありがとうございます。ヘルプが必要であれば、スタートガイドをご覧ください: diff --git a/src/main/resources/i18n/strings_nb.properties b/src/main/resources/i18n/strings_nb.properties index 080df2a13..4a146b15c 100644 --- a/src/main/resources/i18n/strings_nb.properties +++ b/src/main/resources/i18n/strings_nb.properties @@ -41,6 +41,7 @@ traymenu.vault.reveal=Gjør synlig # Add Vault Wizard addvaultwizard.title=Legg til hvelv ## New +addvaultwizard.new.title=Legg til nytt hvelv ### Name addvaultwizard.new.nameInstruction=Navngi hvelvet addvaultwizard.new.namePrompt=Navn på hvelvet @@ -90,6 +91,7 @@ addvault.new.readme.accessLocation.2=Dette er hvelvets lagringssted. addvault.new.readme.accessLocation.3=Alle filer som er lagt til i dette volumet, blir kryptert av Cryptomator. Du kan jobbe med dem som på alle andre enheter/mapper. Dette er bare en dekryptert visning av innholdet, filene dine forblir kryptert på harddisken hele tiden. addvault.new.readme.accessLocation.4=Denne filen kan fjernes hvis ønskelig. ## Existing +addvaultwizard.existing.title=Legg til et eksisterende hvelv addvaultwizard.existing.instruction=Velg "vault.cryptomator"-filen til ditt eksisterende hvelv. Hvis det kun finnes en fil med navnet "masterkey.cryptomator", så velger du den i stedet. addvaultwizard.existing.chooseBtn=Velg… addvaultwizard.existing.filePickerTitle=Velg hvelvfil @@ -364,6 +366,8 @@ main.vaultlist.contextMenu.unlockNow=Lås opp nå main.vaultlist.contextMenu.vaultoptions=Alternativer for hvelvet main.vaultlist.contextMenu.reveal=Vis enheten main.vaultlist.addVaultBtn=Legg til +main.vaultlist.addVaultBtn.menuItemNew=Nytt hvelv... +main.vaultlist.addVaultBtn.menuItemExisting=Eksisterende hvelv... ## Vault Detail ### Welcome main.vaultDetail.welcomeOnboarding=Takk for at du valgte Cryptomator for å beskytte filene dine. Hvis du trenger hjelp, sjekk ut våre guider for å komme i gang: diff --git a/src/main/resources/i18n/strings_pl.properties b/src/main/resources/i18n/strings_pl.properties index c5f519308..a50b9f9ad 100644 --- a/src/main/resources/i18n/strings_pl.properties +++ b/src/main/resources/i18n/strings_pl.properties @@ -137,6 +137,7 @@ unlock.error.customPath.message=Nie można zamontować sejfu na niestandardowej unlock.error.customPath.description.notSupported=Jeśli chcesz nadal używać niestandardowej ścieżki, przejdź do preferencji i wybierz typ udziału, który ją obsługuje. W przeciwnym razie przejdź do opcji sejfu i wybierz obsługiwany punkt montowania. unlock.error.customPath.description.notExists=Niestandardowa ścieżka montowania nie istnieje. Stwórz ją w lokalnym systemie plików lub zmień ją w opcjach sejfu. unlock.error.customPath.description.inUse=Litera dysku lub podana ścieżka montowania "%s" jest już w użyciu. +unlock.error.customPath.description.hideawayNotDir=Nie można usunąć ukrytego pliku tymczasowego "%3$s", używanego do odblokowywania. Sprawdź plik, po czym usuń go ręcznie. unlock.error.customPath.description.couldNotBeCleaned=Twój sejf nie mógł być zamontowany do ścieżki "%s". Spróbuj ponownie lub wybierz inną ścieżkę. unlock.error.customPath.description.notEmptyDir=Wybrana ścieżka montowania "%s" nie jest pustym katalogiem. Wybierz pusty katalog i spróbuj ponownie. unlock.error.customPath.description.generic=Wybrałeś własną ścieżkę montowania dla tego sejfu, ale użycie jej nie powiodło się. Powód: %2$s diff --git a/src/main/resources/i18n/strings_pt_BR.properties b/src/main/resources/i18n/strings_pt_BR.properties index 6c512e1c6..970c50888 100644 --- a/src/main/resources/i18n/strings_pt_BR.properties +++ b/src/main/resources/i18n/strings_pt_BR.properties @@ -41,6 +41,7 @@ traymenu.vault.reveal=Exibir # Add Vault Wizard addvaultwizard.title=Adicionar Cofre ## New +addvaultwizard.new.title=Adicionar Novo Cofre ### Name addvaultwizard.new.nameInstruction=Escolha um nome para o cofre addvaultwizard.new.namePrompt=Nome do Cofre @@ -90,6 +91,7 @@ addvault.new.readme.accessLocation.2=Este é o local de acesso ao seu cofre. addvault.new.readme.accessLocation.3=Todos os arquivos adicionados a este volume serão criptografados de forma transparente pelo Cryptomator. Você pode trabalhar nele como se fosse qualquer unidade/pasta. Esta é apenas uma visão não criptografada do seu conteúdo, mas seus arquivos permanecem criptografados na sua unidade o tempo todo. addvault.new.readme.accessLocation.4=Fique à vontade para apagar este arquivo. ## Existing +addvaultwizard.existing.title=Adicionar Cofre Existente addvaultwizard.existing.instruction=Escolha o arquivo "vault.cryptomator" do seu cofre existente. Se existir apenas um arquivo chamado "masterkey.cryptomator", selecione outro. addvaultwizard.existing.chooseBtn=Selecionar… addvaultwizard.existing.filePickerTitle=Selecionar arquivo do Cofre @@ -364,6 +366,8 @@ main.vaultlist.contextMenu.unlockNow=Desbloquear Agora main.vaultlist.contextMenu.vaultoptions=Exibir Opções de Cofre main.vaultlist.contextMenu.reveal=Revelar Volume main.vaultlist.addVaultBtn=Adicionar +main.vaultlist.addVaultBtn.menuItemNew=Novo Cofre... +main.vaultlist.addVaultBtn.menuItemExisting=Cofre Existente... ## Vault Detail ### Welcome main.vaultDetail.welcomeOnboarding=Obrigado por escolher o Cryptomator para proteger seus arquivos. Se precisar de ajuda, confira nossos guias de introdução: diff --git a/src/main/resources/i18n/strings_sv.properties b/src/main/resources/i18n/strings_sv.properties index f1feda15c..c36dc1cf6 100644 --- a/src/main/resources/i18n/strings_sv.properties +++ b/src/main/resources/i18n/strings_sv.properties @@ -41,6 +41,7 @@ traymenu.vault.reveal=Visa # Add Vault Wizard addvaultwizard.title=Lägg till valv ## New +addvaultwizard.new.title=Lägg till nytt valv ### Name addvaultwizard.new.nameInstruction=Ange namn för valvet addvaultwizard.new.namePrompt=Valvnamn @@ -90,6 +91,7 @@ addvault.new.readme.accessLocation.2=Detta är ditt valvs åtkomstplats. addvault.new.readme.accessLocation.3=Alla filer som läggs till denna volym kommer att krypteras av Cryptomator. Du kan arbeta med dem som i vilken annan enhet/mapp som helst. Detta är bara en dekrypterad vy av dess innehåll, dina filer förblir krypterade på din hårddisk hela tiden. addvault.new.readme.accessLocation.4=Du kan ta bort denna fil. ## Existing +addvaultwizard.existing.title=Öppna befintligt valv addvaultwizard.existing.instruction=Välj filen "vault.cryptomator" i ditt befintliga valv. Om det endast finns en fil som heter "masterkey.cryptomator", välj den istället. addvaultwizard.existing.chooseBtn=Välj… addvaultwizard.existing.filePickerTitle=Välj valvfil @@ -364,6 +366,8 @@ main.vaultlist.contextMenu.unlockNow=Lås upp nu main.vaultlist.contextMenu.vaultoptions=Visa inställningar för valv main.vaultlist.contextMenu.reveal=Visa enhet main.vaultlist.addVaultBtn=Lägg till +main.vaultlist.addVaultBtn.menuItemNew=Nytt valv... +main.vaultlist.addVaultBtn.menuItemExisting=Öppna befintligt valv... ## Vault Detail ### Welcome main.vaultDetail.welcomeOnboarding=Tack för att du väljer Cryptomator för att skydda dina filer. Om du behöver hjälp kan du kolla in våra guider: diff --git a/src/main/resources/i18n/strings_uk.properties b/src/main/resources/i18n/strings_uk.properties index 2f45c80ab..cf4c5b0e1 100644 --- a/src/main/resources/i18n/strings_uk.properties +++ b/src/main/resources/i18n/strings_uk.properties @@ -20,6 +20,8 @@ error.description=Cryptomator не очікував, що таке трапит error.hyperlink.lookup=Дізнатися більше про цю помилку error.hyperlink.report=Повідомити про помилку error.technicalDetails=Подробиці: +error.hyperlink.solution=Знайдіть рішення +error.dismiss=Відхилити # Defaults defaults.vault.vaultName=Сховище @@ -36,6 +38,7 @@ traymenu.vault.reveal=Показати # Add Vault Wizard addvaultwizard.title=Додати сховище ## New +addvaultwizard.new.title=Додайте нове сховище ### Name addvaultwizard.new.nameInstruction=Оберіть назву для сховища addvaultwizard.new.namePrompt=Назва сховища @@ -57,6 +60,7 @@ addvaultwizard.new.validCharacters.chars=Літери (напр. a, ж or 수) addvaultwizard.new.validCharacters.numbers=Цифри addvaultwizard.new.validCharacters.dashes=Дефіс (%s) або підкреслення (%s) ### Expert Settings +addvaultwizard.new.expertSettings.shorteningThreshold.tooltip=Відкрийте документацію, щоб дізнатися більше. ### Password addvaultwizard.new.createVaultBtn=Створити сховище addvaultwizard.new.generateRecoveryKeyChoice=Ви не зможете отримати доступ до своїх даних, якщо втратите пароль. Хочете створити ключ відновлення на випадок втрати паролю? @@ -80,6 +84,7 @@ addvault.new.readme.accessLocation.2=Це місце розташування в addvault.new.readme.accessLocation.3=Будь-які файли, додані до цього тому, будуть зашифровані за допомогою Cryptomator. Ви можете працювати із ним як із будь-якою іншою директорією або накопичувачем. Це лише розшифрований вигляд його вмісту, ваші файли завжди знаходяться в зашифрованому вигляді на диску. addvault.new.readme.accessLocation.4=Якщо хочете, то можете видалити цей файл. ## Existing +addvaultwizard.existing.title=Додати існуюче сховище addvaultwizard.existing.instruction=Виберіть файл "vault.cryptomator" у вашому існуючому сховищі. Якщо існує лише файл з назвою "masterkey.cryptomator", виберіть його. addvaultwizard.existing.chooseBtn=Обрати… addvaultwizard.existing.filePickerTitle=Виберіть Vault Файл @@ -179,6 +184,7 @@ migration.error.missingFileSystemCapabilities.title=Непідтримувана # Health Check ## Start ## Start Failure +health.fail.moreInfo=Більше інформації ## Check Selection ## Detail view health.check.detail.checkRunning=Перевірка триває… diff --git a/src/main/resources/i18n/strings_zh.properties b/src/main/resources/i18n/strings_zh.properties index c60ff33c5..d47632466 100644 --- a/src/main/resources/i18n/strings_zh.properties +++ b/src/main/resources/i18n/strings_zh.properties @@ -41,6 +41,7 @@ traymenu.vault.reveal=显示 # Add Vault Wizard addvaultwizard.title=添加保险库 ## New +addvaultwizard.new.title=添加新保险库 ### Name addvaultwizard.new.nameInstruction=为保险库创建一个名称 addvaultwizard.new.namePrompt=保险库名称 @@ -90,6 +91,7 @@ addvault.new.readme.accessLocation.2=这是您的保险库的访问路径。 addvault.new.readme.accessLocation.3=任何添加到此卷的文件都将被 Cryptomator 加密。您可以像在一般磁盘/文件夹上那样操作它。 这只是对其内容的解密查看,您的文件会在硬盘上一直保持加密。 addvault.new.readme.accessLocation.4=您可以随时删除此文件。 ## Existing +addvaultwizard.existing.title=添加现有保险库 addvaultwizard.existing.instruction=请选择现有保险库中的“vault.cryptomator”文件。如果只有一个名为“masterkey.cryptomator”的文件,则改为选择该文件。 addvaultwizard.existing.chooseBtn=选择... addvaultwizard.existing.filePickerTitle=请选择保险库对应文件 @@ -364,6 +366,8 @@ main.vaultlist.contextMenu.unlockNow=立即解锁 main.vaultlist.contextMenu.vaultoptions=显示保险库选项 main.vaultlist.contextMenu.reveal=显示驱动器 main.vaultlist.addVaultBtn=添加 +main.vaultlist.addVaultBtn.menuItemNew=新保险库... +main.vaultlist.addVaultBtn.menuItemExisting=现有保险库... ## Vault Detail ### Welcome main.vaultDetail.welcomeOnboarding=感谢您使用 Cryptomator 来保护您的文件。如果您需要任何帮助,请查看我们的快速开始指南: From 0130c7cce697c0b426b08aef7cfbfbc8bb2b4121 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Mon, 11 Sep 2023 09:50:17 +0200 Subject: [PATCH 07/12] fix local windows build script [ci skip] --- dist/win/build.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/win/build.ps1 b/dist/win/build.ps1 index d695e7302..bef7a9acb 100644 --- a/dist/win/build.ps1 +++ b/dist/win/build.ps1 @@ -65,8 +65,8 @@ if( $jmodsChecksumActual -ne $jfxJmodsChecksum ) { Write-Error "Checksum mismatch for jfxJmods.zip. Expected: $jfxJmodsChecksum, actual: $jmodsChecksumActual" exit 1; } -Expand-Archive -Force -Path $jfxJmodsZip -DestinationPath ".\resources\" -Move-Item -Path ".\resources\javafx-jmods-*" -Destination ".\resources\javafx-jmods" -ErrorAction Stop +Expand-Archive -Path $jfxJmodsZip -DestinationPath ".\resources\" +Move-Item -Force -Path ".\resources\javafx-jmods-*" -Destination ".\resources\javafx-jmods" -ErrorAction Stop & "$Env:JAVA_HOME\bin\jlink" ` From 189e2679f1ce399ca09504db730bfbbc14bad038 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Mon, 11 Sep 2023 09:53:35 +0200 Subject: [PATCH 08/12] finalize 1.10.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 f1deff111..596ebea4a 100644 --- a/dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml +++ b/dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml @@ -66,6 +66,7 @@ + From bcb970afb1639fe5869a3670fbb9d2eeb8e0d2c6 Mon Sep 17 00:00:00 2001 From: Armin Schrenk Date: Wed, 13 Sep 2023 13:59:50 +0200 Subject: [PATCH 09/12] Update bug.yml Add missing FUSE option in volume type selection --- .github/ISSUE_TEMPLATE/bug.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 6c30aa606..9ced33c15 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -43,6 +43,7 @@ body: - WinFsp (Local Drive) - FUSE-T - macFUSE + - FUSE - WebDAV (Windows Explorer) - WebDAV (AppleScript) - WebDAV (gio) @@ -95,4 +96,4 @@ body: id: further-info attributes: label: Anything else? - description: Links? References? Screenshots? Configurations? Any data that might be necessary to reproduce the issue? \ No newline at end of file + description: Links? References? Screenshots? Configurations? Any data that might be necessary to reproduce the issue? From 84ac803a7d8dfa3682b25627c3c7b4ae8a3a86cd Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 18 Sep 2023 10:10:50 +0200 Subject: [PATCH 10/12] reordered properties [ci skip] --- .../org/cryptomator/common/Environment.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/cryptomator/common/Environment.java b/src/main/java/org/cryptomator/common/Environment.java index c47870dd8..8e378b93d 100644 --- a/src/main/java/org/cryptomator/common/Environment.java +++ b/src/main/java/org/cryptomator/common/Environment.java @@ -43,15 +43,15 @@ public class Environment { logCryptomatorSystemProperty(SETTINGS_PATH_PROP_NAME); logCryptomatorSystemProperty(IPC_SOCKET_PATH_PROP_NAME); logCryptomatorSystemProperty(KEYCHAIN_PATHS_PROP_NAME); + logCryptomatorSystemProperty(P12_PATH_PROP_NAME); logCryptomatorSystemProperty(LOG_DIR_PROP_NAME); logCryptomatorSystemProperty(LOOPBACK_ALIAS_PROP_NAME); - logCryptomatorSystemProperty(PLUGIN_DIR_PROP_NAME); logCryptomatorSystemProperty(MOUNTPOINT_DIR_PROP_NAME); logCryptomatorSystemProperty(MIN_PW_LENGTH_PROP_NAME); logCryptomatorSystemProperty(APP_VERSION_PROP_NAME); logCryptomatorSystemProperty(BUILD_NUMBER_PROP_NAME); + logCryptomatorSystemProperty(PLUGIN_DIR_PROP_NAME); logCryptomatorSystemProperty(TRAY_ICON_PROP_NAME); - logCryptomatorSystemProperty(P12_PATH_PROP_NAME); } public static Environment getInstance() { @@ -74,10 +74,6 @@ public class Environment { return getPaths(SETTINGS_PATH_PROP_NAME); } - public Stream getP12Path() { - return getPaths(P12_PATH_PROP_NAME); - } - public Stream getIpcSocketPath() { return getPaths(IPC_SOCKET_PATH_PROP_NAME); } @@ -86,6 +82,10 @@ public class Environment { return getPaths(KEYCHAIN_PATHS_PROP_NAME); } + public Stream getP12Path() { + return getPaths(P12_PATH_PROP_NAME); + } + public Optional getLogDir() { return getPath(LOG_DIR_PROP_NAME); } @@ -94,14 +94,14 @@ public class Environment { return Optional.ofNullable(System.getProperty(LOOPBACK_ALIAS_PROP_NAME)); } - public Optional getPluginDir() { - return getPath(PLUGIN_DIR_PROP_NAME); - } - public Optional getMountPointsDir() { return getPath(MOUNTPOINT_DIR_PROP_NAME); } + public int getMinPwLength() { + return Integer.getInteger(MIN_PW_LENGTH_PROP_NAME, DEFAULT_MIN_PW_LENGTH); + } + /** * Returns the app version defined in the {@value APP_VERSION_PROP_NAME} property or returns "SNAPSHOT". * @@ -115,8 +115,8 @@ public class Environment { return Optional.ofNullable(System.getProperty(BUILD_NUMBER_PROP_NAME)); } - public int getMinPwLength() { - return Integer.getInteger(MIN_PW_LENGTH_PROP_NAME, DEFAULT_MIN_PW_LENGTH); + public Optional getPluginDir() { + return getPath(PLUGIN_DIR_PROP_NAME); } public boolean showTrayIcon() { From e31e06b288be0be0e58ffe4ae7ed925819896277 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 18 Sep 2023 10:13:51 +0200 Subject: [PATCH 11/12] added `@VisibleForTesting` --- src/main/java/org/cryptomator/common/Environment.java | 3 ++- src/main/java/org/cryptomator/common/ErrorCode.java | 5 +++-- .../cryptomator/common/mount/MountWithinParentUtil.java | 9 +++++---- .../org/cryptomator/common/settings/VaultSettings.java | 3 ++- .../org/cryptomator/launcher/FileOpenRequestHandler.java | 3 ++- .../cryptomator/ui/addvaultwizard/ReadmeGenerator.java | 6 ++++-- .../ui/convertvault/HubToPasswordConvertController.java | 7 ++++--- .../cryptomator/ui/recoverykey/RecoveryKeyFactory.java | 3 ++- 8 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/cryptomator/common/Environment.java b/src/main/java/org/cryptomator/common/Environment.java index 8e378b93d..17816df96 100644 --- a/src/main/java/org/cryptomator/common/Environment.java +++ b/src/main/java/org/cryptomator/common/Environment.java @@ -2,6 +2,7 @@ package org.cryptomator.common; import com.google.common.base.Splitter; import com.google.common.base.Strings; +import org.jetbrains.annotations.VisibleForTesting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -128,7 +129,7 @@ public class Environment { return Optional.ofNullable(value).map(Paths::get); } - // visible for testing + @VisibleForTesting Stream getPaths(String propertyName) { Stream rawSettingsPaths = getRawList(propertyName, System.getProperty("path.separator").charAt(0)); return rawSettingsPaths.filter(Predicate.not(Strings::isNullOrEmpty)).map(Path::of); diff --git a/src/main/java/org/cryptomator/common/ErrorCode.java b/src/main/java/org/cryptomator/common/ErrorCode.java index 7363e2278..d75ab97d0 100644 --- a/src/main/java/org/cryptomator/common/ErrorCode.java +++ b/src/main/java/org/cryptomator/common/ErrorCode.java @@ -3,6 +3,7 @@ package org.cryptomator.common; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.base.Throwables; +import org.jetbrains.annotations.VisibleForTesting; import java.util.Locale; import java.util.Objects; @@ -114,7 +115,7 @@ public class ErrorCode { * @param bottomFrames Other stack frames, potentially forming the bottom of the stack of allFrames * @return The number of additional frames in allFrames. In most cases this should be equal to the difference in size. */ - // visible for testing + @VisibleForTesting static int countTopmostFrames(StackTraceElement[] allFrames, StackTraceElement[] bottomFrames) { if (allFrames.length < bottomFrames.length) { // if frames had been stacked on top of bottomFrames, allFrames would be larger @@ -124,7 +125,7 @@ public class ErrorCode { } } - // visible for testing + @VisibleForTesting static int commonSuffixLength(T[] set, T[] subset) { Preconditions.checkArgument(set.length >= subset.length); // iterate items backwards as long as they are identical diff --git a/src/main/java/org/cryptomator/common/mount/MountWithinParentUtil.java b/src/main/java/org/cryptomator/common/mount/MountWithinParentUtil.java index b632923a8..b436bc19a 100644 --- a/src/main/java/org/cryptomator/common/mount/MountWithinParentUtil.java +++ b/src/main/java/org/cryptomator/common/mount/MountWithinParentUtil.java @@ -1,6 +1,7 @@ package org.cryptomator.common.mount; import org.apache.commons.lang3.SystemUtils; +import org.jetbrains.annotations.VisibleForTesting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -66,7 +67,7 @@ public final class MountWithinParentUtil { } } - //visible for testing + @VisibleForTesting static MountPointState getMountPointState(Path path) throws IOException, IllegalMountPointException { if (Files.notExists(path, LinkOption.NOFOLLOW_LINKS)) { return MountPointState.NOT_EXISTING; @@ -82,7 +83,7 @@ public final class MountWithinParentUtil { return MountPointState.BROKEN_JUNCTION; } - //visible for testing + @VisibleForTesting enum MountPointState { NOT_EXISTING, @@ -93,7 +94,7 @@ public final class MountWithinParentUtil { } - //visible for testing + @VisibleForTesting static void removeResidualHideaway(Path mountPoint, Path hideaway) throws IOException { checkIsHideawayDirectory(mountPoint, hideaway); Files.delete(hideaway); //Fails if not empty @@ -155,7 +156,7 @@ public final class MountWithinParentUtil { } } - //visible for testing + @VisibleForTesting static Path getHideaway(Path mountPoint) { return mountPoint.resolveSibling(HIDEAWAY_PREFIX + mountPoint.getFileName().toString() + HIDEAWAY_SUFFIX); } diff --git a/src/main/java/org/cryptomator/common/settings/VaultSettings.java b/src/main/java/org/cryptomator/common/settings/VaultSettings.java index 7b7e319c9..6662f61ff 100644 --- a/src/main/java/org/cryptomator/common/settings/VaultSettings.java +++ b/src/main/java/org/cryptomator/common/settings/VaultSettings.java @@ -9,6 +9,7 @@ import com.google.common.base.CharMatcher; import com.google.common.base.Strings; import com.google.common.io.BaseEncoding; import org.apache.commons.lang3.SystemUtils; +import org.jetbrains.annotations.VisibleForTesting; import javafx.beans.Observable; import javafx.beans.binding.Bindings; @@ -126,7 +127,7 @@ public class VaultSettings { return json; } - //visible for testing + @VisibleForTesting static String normalizeDisplayName(String original) { if (original.isBlank() || ".".equals(original) || "..".equals(original)) { return "_"; diff --git a/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java b/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java index eb2418c69..dbdb37823 100644 --- a/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java +++ b/src/main/java/org/cryptomator/launcher/FileOpenRequestHandler.java @@ -6,6 +6,7 @@ *******************************************************************************/ package org.cryptomator.launcher; +import org.jetbrains.annotations.VisibleForTesting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -48,7 +49,7 @@ class FileOpenRequestHandler { handleLaunchArgs(FileSystems.getDefault(), args); } - // visible for testing + @VisibleForTesting void handleLaunchArgs(FileSystem fs, List args) { Collection pathsToOpen = args.stream().map(str -> { try { diff --git a/src/main/java/org/cryptomator/ui/addvaultwizard/ReadmeGenerator.java b/src/main/java/org/cryptomator/ui/addvaultwizard/ReadmeGenerator.java index 5cf14444a..2ffda4d73 100644 --- a/src/main/java/org/cryptomator/ui/addvaultwizard/ReadmeGenerator.java +++ b/src/main/java/org/cryptomator/ui/addvaultwizard/ReadmeGenerator.java @@ -1,5 +1,7 @@ package org.cryptomator.ui.addvaultwizard; +import org.jetbrains.annotations.VisibleForTesting; + import javax.inject.Inject; import java.util.List; import java.util.ResourceBundle; @@ -51,7 +53,7 @@ public class ReadmeGenerator { resourceBundle.getString("addvault.new.readme.accessLocation.4"))); } - // visible for testing + @VisibleForTesting String createDocument(Iterable paragraphs) { StringBuilder sb = new StringBuilder(RTF_HEADER); for (String p : paragraphs) { @@ -63,7 +65,7 @@ public class ReadmeGenerator { return sb.toString(); } - // visible for testing + @VisibleForTesting String escapeNonAsciiChars(CharSequence input) { StringBuilder sb = new StringBuilder(); appendEscaped(sb, input); diff --git a/src/main/java/org/cryptomator/ui/convertvault/HubToPasswordConvertController.java b/src/main/java/org/cryptomator/ui/convertvault/HubToPasswordConvertController.java index 51ff65ec1..fd6d49b89 100644 --- a/src/main/java/org/cryptomator/ui/convertvault/HubToPasswordConvertController.java +++ b/src/main/java/org/cryptomator/ui/convertvault/HubToPasswordConvertController.java @@ -16,6 +16,7 @@ import org.cryptomator.ui.common.FxmlFile; import org.cryptomator.ui.common.FxmlScene; import org.cryptomator.ui.fxapp.FxApplicationWindows; import org.cryptomator.ui.recoverykey.RecoveryKeyFactory; +import org.jetbrains.annotations.VisibleForTesting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -116,7 +117,7 @@ public class HubToPasswordConvertController implements FxController { }, Platform::runLater); // } - //visible for testing + @VisibleForTesting void convertInternal() throws CompletionException, IllegalArgumentException { var passphrase = newPasswordController.getNewPassword(); var vaultPath = vault.getPath(); @@ -141,7 +142,7 @@ public class HubToPasswordConvertController implements FxController { } } - //visible for testing + @VisibleForTesting void backupHubConfig(Path hubConfigPath) throws IOException { byte[] hubConfigBytes = Files.readAllBytes(hubConfigPath); Path backupPath = hubConfigPath.resolveSibling(VAULTCONFIG_FILENAME + BackupHelper.generateFileIdSuffix(hubConfigBytes) + MASTERKEY_BACKUP_SUFFIX); @@ -149,7 +150,7 @@ public class HubToPasswordConvertController implements FxController { LOG.debug("Successfully created hub config backup {}", backupPath.getFileName()); } - //visible for testing + @VisibleForTesting Path createPasswordConfig(Path passwordConfigPath, Path masterkeyFile, Passphrase passphrase) throws IOException, MasterkeyLoadingFailedException { var unverifiedVaultConfig = vault.getVaultConfigCache().get(); try (var masterkey = masterkeyFileAccess.load(masterkeyFile, passphrase)) { diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyFactory.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyFactory.java index 73279396d..8f5bb0500 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyFactory.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyFactory.java @@ -8,6 +8,7 @@ import org.cryptomator.cryptolib.api.InvalidPassphraseException; import org.cryptomator.cryptolib.api.Masterkey; import org.cryptomator.cryptolib.common.MasterkeyFileAccess; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.VisibleForTesting; import javax.inject.Inject; import javax.inject.Singleton; @@ -58,7 +59,7 @@ public class RecoveryKeyFactory { } } - // visible for testing + @VisibleForTesting String createRecoveryKey(byte[] rawKey) { Preconditions.checkArgument(rawKey.length == 64, "key should be 64 bytes"); byte[] paddedKey = Arrays.copyOf(rawKey, 66); From 6017d6b7a904a2d039a4c27d674f032a20a6fc3e Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 18 Sep 2023 12:34:49 +0200 Subject: [PATCH 12/12] bump webdav-nio-adapter containing fixes for CVE-2023-40167, CVE-2023-2976, CVE-2023-37895 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5e2e46028..311fcaf58 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ 1.3.0-beta6 3.0.0 2.0.0 - 2.0.3 + 2.0.4 3.13.0