Browse Source

Merge branch 'release/1.7.3'

Armin Schrenk 2 years ago
parent
commit
4bb0026415

+ 1 - 1
.github/workflows/post-publish.yml

@@ -10,7 +10,7 @@ jobs:
     steps:
       - name: Download source tarball
         run: |
-          curl -L -H "Accept: application/vnd.github+json" ${{ github.event.release.tarball_url }} --output cryptomator-${{ github.event.release.tag_name }}.tar.gz
+          curl -L -H "Accept: application/vnd.github+json" https://github.com/cryptomator/cryptomator/archive/refs/tags/${{ github.event.release.tag_name }}.tar.gz --output cryptomator-${{ github.event.release.tag_name }}.tar.gz
       - name: Sign source tarball with key 615D449FE6E6A235
         run: |
           echo "${GPG_PRIVATE_KEY}" | gpg --batch --quiet --import

+ 1 - 0
dist/linux/common/org.cryptomator.Cryptomator.metainfo.xml

@@ -66,6 +66,7 @@
 	</content_rating>
 
 	<releases>
+		<release date="2023-03-15" version="1.7.3"/>
 		<release date="2023-03-07" version="1.7.2"/>
 		<release date="2023-03-03" version="1.7.1"/>
 		<release date="2023-03-01" version="1.7.0"/>

+ 8 - 10
pom.xml

@@ -3,7 +3,7 @@
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>org.cryptomator</groupId>
 	<artifactId>cryptomator</artifactId>
-	<version>1.7.2</version>
+	<version>1.7.3</version>
 	<name>Cryptomator Desktop App</name>
 
 	<organization>
@@ -17,6 +17,11 @@
 			<email>sebastian.stenzel@gmail.com</email>
 			<timezone>+1</timezone>
 		</developer>
+		<developer>
+			<name>Armin Schrenk</name>
+			<email>armin.schrenk+dev@mailbox.org</email>
+			<timezone>+1</timezone>
+		</developer>
 	</developers>
 
 	<properties>
@@ -28,13 +33,12 @@
 		<nonModularGroupIds>org.ow2.asm,org.apache.jackrabbit,org.apache.httpcomponents,de.swiesend,org.purejava,com.github.hypfvieh</nonModularGroupIds>
 
 		<!-- cryptomator dependencies -->
-		<cryptomator.cryptolib.version>2.1.1</cryptomator.cryptolib.version>
-		<cryptomator.cryptofs.version>2.6.1</cryptomator.cryptofs.version>
+		<cryptomator.cryptofs.version>2.6.2</cryptomator.cryptofs.version>
 		<cryptomator.integrations.version>1.2.0</cryptomator.integrations.version>
 		<cryptomator.integrations.win.version>1.2.0</cryptomator.integrations.win.version>
 		<cryptomator.integrations.mac.version>1.2.0</cryptomator.integrations.mac.version>
 		<cryptomator.integrations.linux.version>1.2.0</cryptomator.integrations.linux.version>
-		<cryptomator.fuse.version>2.0.3</cryptomator.fuse.version>
+		<cryptomator.fuse.version>2.0.4</cryptomator.fuse.version>
 		<cryptomator.dokany.version>2.0.0</cryptomator.dokany.version>
 		<cryptomator.webdav.version>2.0.2</cryptomator.webdav.version>
 
@@ -65,12 +69,6 @@
 
 	<dependencies>
 		<!-- Cryptomator Libs -->
-		<dependency>
-			<!-- needed due to https://github.com/cryptomator/cryptolib/issues/34 -->
-			<groupId>org.cryptomator</groupId>
-			<artifactId>cryptolib</artifactId>
-			<version>${cryptomator.cryptolib.version}</version>
-		</dependency>
 		<dependency>
 			<groupId>org.cryptomator</groupId>
 			<artifactId>cryptofs</artifactId>

+ 4 - 0
src/main/java/org/cryptomator/common/mount/MountPointPreparationException.java

@@ -2,6 +2,10 @@ package org.cryptomator.common.mount;
 
 public class MountPointPreparationException extends RuntimeException {
 
+	public MountPointPreparationException(String msg) {
+		super(msg);
+	}
+
 	public MountPointPreparationException(Throwable cause) {
 		super(cause);
 	}

+ 11 - 0
src/main/java/org/cryptomator/common/mount/MountWithinParentUtil.java

@@ -51,8 +51,19 @@ public final class MountWithinParentUtil {
 				if (SystemUtils.IS_OS_WINDOWS) {
 					Files.setAttribute(hideaway, WIN_HIDDEN_ATTR, true, LinkOption.NOFOLLOW_LINKS);
 				}
+				int attempts = 0;
+				while (!Files.notExists(mountPoint)) {
+					if (attempts >= 10) {
+						throw new MountPointPreparationException("Path " + mountPoint + " could not be cleared");
+					}
+					Thread.sleep(1000);
+					attempts++;
+				}
 			} catch (IOException e) {
 				throw new MountPointPreparationException(e);
+			} catch (InterruptedException e) {
+				Thread.currentThread().interrupt();
+				throw new MountPointPreparationException(e);
 			}
 		}
 	}

+ 85 - 4
src/main/resources/i18n/strings_be.properties

@@ -123,7 +123,14 @@ unlock.success.description=Змест скарбніцы "%s" цяпер дас
 unlock.success.rememberChoice=Запомні мой выбар і больш не пытай
 unlock.success.revealBtn=Паказаць дыск
 ## Failure
+unlock.error.customPath.message=Не магчыма змантажаваць скарбніцу да карыстальніцкай сцежкі
+unlock.error.customPath.description.notSupported=Калі ты надалей жадаеш карыстацца адмысловаю сцежкаю, калі ласка, пайдзі ў налады ды абары там тып тому, які падтрымлівае яе. У іншым выпадку пайдзі ў опцыі скарбніцы ды абяры там пункт мантажавання, які падтрымліваецца.
+unlock.error.customPath.description.notExists=Адмысловая сцежка мантажавання не існуе. Ствары яе ў сваёй файлавай сістэме, альбо змяні яе ў опцыях скарбніцы.
+unlock.error.customPath.description.generic=Ты абраў адмысловую сцежку мантажавання для гэтай скарбніцы, але скарыстацца ёю не ўдалося. Вось паведамленне пра памылку: %s
 ## Hub
+hub.noKeychain.message=Няма доступу да ключа прылады
+hub.noKeychain.description=Каб разамкнуць скарбніцы Hub, патрэбны ключ прылады, які захаваны ў звязку ключоў. Каб працягнуць, уключы "%s" ды абяры звязак ключоў у наладах.
+hub.noKeychain.openBtn=Адчыніць налады
 ### Waiting
 hub.auth.message=Чаканне спраўджання…
 hub.auth.description=Ты мусіш аўтаматычна перанакіравацца на старонку ўваходу.
@@ -147,6 +154,8 @@ hub.registerFailed.description=Падчас прысваення імя адбы
 hub.unauthorized.message=Адмова ў доступе
 hub.unauthorized.description=Тваёй прыладзе ў дадзены момант не дазволена мець доступ да гэтай скрабніцы. Запытайся ўладальніка скрабніцы за дазволам.
 ### License Exceeded
+hub.invalidLicense.message=Несапраўдная ліцэнзія Hub
+hub.invalidLicense.description=Твая інстанцыя Cryptomator Hub мае некарэктную ліцэнзію. Калі ласка, паведамі адміністратару Hub пра гэта, каб абнавіць альбо аднавіць ліцэнзію.
 
 # Lock
 ## Force
@@ -162,6 +171,12 @@ lock.fail.description=Скарбніцу "%s" не мажліва замкнуц
 migration.title=Абнавіць скарбніцу
 ## Start
 migration.start.header=Абнавіць скарбніцу
+migration.start.text=Каб адчыніць тваю скарбніцу "%s" у гэтай новай вэрсіі Cryptomator, скарбніца мусіць быць абноўленая да навейшага фармату. Перад тым, як пачаць, трэба ведаць наступнае:
+migration.start.remarkUndone=Не магчыма скасаваць гэта абнаўленне.
+migration.start.remarkVersions=Старэйшыя вэрсіі Cryptomator ня змогуць адчыніць абноўленую скарбніцу.
+migration.start.remarkCanRun=Ты мусіш упэўніцца, што на кожнай прыладзе, якая мае доступ да скарбніцы, працуе гэта вэрсія Cryptomator.
+migration.start.remarkSynced=Ты мусіш упэўніцца, што твая скарбніца цалкам сынхранаваная на гэтай ды іншых прыладах, перад тым як пачаць абнаўленне.
+migration.start.confirm=Я прачытала і зразумела інфармацыю зверху
 ## Run
 migration.run.enterPassword=Увядзіце пароль да "%s"
 migration.run.startMigrationBtn=Перамясціць скарбніцу
@@ -183,17 +198,47 @@ migration.impossible.heading=Не мажліва перанесці скарбн
 ## Start
 health.title=Тэст на цэласнасць для "%s"
 health.intro.header=Тэст на цэласнасць
+health.intro.remarkFix=Ня ўсе хібы могуць быць выпраўленыя.
 health.intro.remarkBackup=Калі даныя пашкоджаныя, дапаможа толькі рэзервовая копія.
+health.intro.affirmation=Я прачытала і зразумела інфармацыю зверху
 ## Start Failure
+health.fail.header=Падчас загрузкі налад скарбніцы адбылася памылка
+health.fail.ioError=Здарылася памылка падчас спробы прачытаць канфіґурацыйны файл.
+health.fail.parseError=Здарылася памылка падчас ператварэння канфіґурацыі скарбніцы.
 health.fail.moreInfo=Падрабязней
 ## Check Selection
+health.checkList.description=Абяры тэсты ў левым спісе альбо скарыстайся кнопкамі ўнізе.
 health.checkList.selectAllButton=Вылучыць усе элементы
 health.checkList.deselectAllButton=Адрабіць вылучэнне ўсіх элементаў
 health.check.runBatchBtn=Выканаць вылучаныя элементы
 ## Detail view
+health.check.detail.noSelectedCheck=Каб праглядзець вынікі, абяры тэсты цэласнасці ў левым спісе.
+health.check.detail.checkScheduled=Тэст пастаўлены ў чаргу.
+health.check.detail.checkRunning=Тэст адбываецца ў гэты момант…
+health.check.detail.checkSkipped=Тэст ня быў абраны для выканання.
+health.check.detail.checkFinished=Тэст паспяхова скончыўся.
+health.check.detail.checkFinishedAndFound=Тэст завершаны. Калі ласка, праглядзі вынікі.
+health.check.detail.checkFailed=Тэст быў спынены з-за памылкі.
 health.check.detail.checkCancelled=Праверка была скасавана.
+health.check.detail.listFilters.label=Фільтр
+health.check.detail.fixAllSpecificBtn=Адрамантаваць усё гэтага тыпу
 health.check.exportBtn=Экспартаваць справаздачу
 ## Result view
+health.result.severityFilter.all=Стан – Усе
+health.result.severityFilter.good=Добра
+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=Выпраўлена
+health.result.fixStateFilter.fixFailed=Няўдача выпраўлення
 ## Fix Application
 health.fix.fixBtn=Выправіць
 health.fix.successTip=Паспяхова выпраўлена
@@ -225,7 +270,16 @@ preferences.interface.showMinimizeButton=Паказаць кнопку згор
 preferences.interface.showTrayIcon=Паказваць іконку на інфармацыйнай панэлі (спатрэбіцца перазапуск)
 ## Volume
 preferences.volume=Віртуальны дыск
+preferences.volume.type=Тып тому (спатрэбіцца перазапуск)
 preferences.volume.type.automatic=Аўтаматычна
+preferences.volume.docsTooltip=Адчыні дакумэнтацыю, каб даведацца больш пра розныя тыпы тому.
+preferences.volume.tcp.port=Порт TCP
+preferences.volume.supportedFeatures=Абраны тып тому падтрымлівае наступныя функцыі:
+preferences.volume.feature.mountAuto=Аўтаматычны выбар пункту мантажавання
+preferences.volume.feature.mountToDir=Карыстальніцкая тэчка як пункт мантажавання
+preferences.volume.feature.mountToDriveLetter=Літара тому як пункт мантажавання
+preferences.volume.feature.mountFlags=Карыстальніцкія опцыі мантажавання
+preferences.volume.feature.readOnly=Мантажаванне толькі для чытання
 ## Updates
 preferences.updates=Абнаўленні
 preferences.updates.currentVersion=Бягучая версія: %s
@@ -234,7 +288,10 @@ preferences.updates.checkNowBtn=Праверыць зараз
 preferences.updates.updateAvailable=Даступна абнаўленне да версіі %s
 ## Contribution
 preferences.contribute=Падтрымай нас
+preferences.contribute.registeredFor=Сэртыфікат ахвяравальніка зарэгістраваны на %s
+preferences.contribute.noCertificate=Ахвяруй на Cryptomator ды атрымай сэртыфікат ахвяравальніка. Гэта штось падобнае на ліцэнзійны ключ, але для цудоўных людзей, якія карыстаюцца бясплатнай праграмай. ;-)
 preferences.contribute.getCertificate=Яшчэ ня маеш такога? Даведайся, як атрымаць.
+preferences.contribute.promptText=Устаў код сэртыфікату ахвяравальніка сюды
 #<-- Add entries for donations and code/translation/documentation contribution -->
 
 ## About
@@ -242,28 +299,37 @@ preferences.about=Пра нас
 
 # Vault Statistics
 stats.title=Статыстыкі для %s
+stats.cacheHitRate=Трапнасць кэшу
 ## Read
-stats.read.throughput.idle=Чытанне: -
+stats.read.throughput.idle=Чытанне: нічога
+stats.read.throughput.kibs=Чытанне: %.2f KiB/s
 stats.read.throughput.mibs=Чытанне: %.2f МіБ/с
 stats.read.total.data.none=Прачытана: -
+stats.read.total.data.kib=Прачытана: %.1f КіБ
 stats.read.total.data.mib=Прачытана: %.1f МіБ
 stats.read.total.data.gib=Прачытана: %.1f ҐіБ
 stats.decr.total.data.none=Расшыфравана: -
+stats.decr.total.data.kib=Расшыфравана: %.1f КіБ
 stats.decr.total.data.mib=Расшыфравана: %.1f МіБ
 stats.decr.total.data.gib=Расшыфравана: %.1f ҐіБ
-stats.read.accessCount=Агульная колькасць чытанняў: %d
+stats.read.accessCount=Прачытана агулам: %d
 ## Write
-stats.write.throughput.idle=Чытанне: -
+stats.write.throughput.idle=Пісанне: нічога
+stats.write.throughput.kibs=Пісанне: %.2f КіБ/с
 stats.write.throughput.mibs=Пісанне: %.2f МіБ/с
 stats.write.total.data.none=Напісана: -
+stats.write.total.data.kib=Запісана: %.1f КіБ
 stats.write.total.data.mib=Запісана: %.1f МіБ
 stats.write.total.data.gib=Запісана: %.1f ҐіБ
 stats.encr.total.data.none=Зашыфравана: -
+stats.encr.total.data.kib=Зашыфравана: %.1f КіБ
 stats.encr.total.data.mib=Зашыфравана: %.1f МіБ
 stats.encr.total.data.gib=Зашыфравана: %.1f ҐіБ
-stats.write.accessCount=Агульная колькасць запісаў: %d
+stats.write.accessCount=Запісана агулам: %d
 
 ## Accesses
+stats.access.current=Доступ: %d
+stats.access.total=Доступы агулам: %d
 
 
 # Main Window
@@ -293,12 +359,18 @@ main.vaultDetail.passwordSavedInKeychain=Пароль захаваны
 main.vaultDetail.unlockedStatus=РАЗАМКНЁНА
 main.vaultDetail.accessLocation=Змест тваёй скарбніцы даступны тут:
 main.vaultDetail.revealBtn=Паказаць дыск
+main.vaultDetail.copyUri=Скапіяваць URI
 main.vaultDetail.lockBtn=Замкнуць
 main.vaultDetail.bytesPerSecondRead=Чытанне:
 main.vaultDetail.bytesPerSecondWritten=Пісанне:
 main.vaultDetail.throughput.idle=бяздзейны
+main.vaultDetail.throughput.kbps=%.1f КіБ/с
 main.vaultDetail.throughput.mbps=%.1f МіБ/с
 main.vaultDetail.stats=Статыстыка скарбніцы
+main.vaultDetail.locateEncryptedFileBtn=Знайсці зашыфраваны файл
+main.vaultDetail.locateEncryptedFileBtn.tooltip=Абяры файл у тваёй скрабніцы, каб знайсці ягоны зашыфраваны адпаведнік
+main.vaultDetail.encryptedPathsCopied=Шлях скапіяваны ў буфер абмену!
+main.vaultDetail.filePickerTitle=Абраць файл унутры скарбніцы
 ### Missing
 main.vaultDetail.missing.info=Cryptomator ня змог знайсці скарбніцу па гэтай сцежцы.
 main.vaultDetail.missing.recheck=Пераправерыць
@@ -332,20 +404,26 @@ vaultOptions.general.actionAfterUnlock=Пасля паспяховага раз
 vaultOptions.general.actionAfterUnlock.ignore=Нічога не рабі
 vaultOptions.general.actionAfterUnlock.reveal=Паказаць дыск
 vaultOptions.general.actionAfterUnlock.ask=Запытацца
+vaultOptions.general.startHealthCheckBtn=Пачаць тэст на цэласнасць
 
 ## Mount
 vaultOptions.mount=Мантажаванне
+vaultOptions.mount.info=Опцыі залежаць ад абранага тыпу тому.
+vaultOptions.mount.linkToPreferences=Адчыніць налады віртуальнага дыску
 vaultOptions.mount.readonly=Толькі для чытання
 vaultOptions.mount.customMountFlags=Карыстальніцкія опцыі мантажавання
 vaultOptions.mount.winDriveLetterOccupied=занята
 vaultOptions.mount.mountPoint=Пункт мантажавання
 vaultOptions.mount.mountPoint.auto=Аўтаматычны выбар пасуючага месцазнаходжання
 vaultOptions.mount.mountPoint.driveLetter=Назначыць літару для дыску
+vaultOptions.mount.mountPoint.custom=Выкарыстаць абраную тэчку
 vaultOptions.mount.mountPoint.directoryPickerButton=Абраць…
+vaultOptions.mount.mountPoint.directoryPickerTitle=Абраць тэчку
 ## Master Key
 vaultOptions.masterkey=Пароль
 vaultOptions.masterkey.changePasswordBtn=Змяніць пароль
 vaultOptions.masterkey.forgetSavedPasswordBtn=Забыцца на захаваны пароль
+vaultOptions.masterkey.recoveryKeyExplanation=Ключ аднаўлення – гэта адзіная мажлівасць аднавіць доступ да тваёй скарбніцы, калі ты згубіш пароль.
 vaultOptions.masterkey.showRecoveryKeyBtn=Паказаць ключ аднаўлення
 vaultOptions.masterkey.recoverPasswordBtn=Скінуць пароль
 
@@ -362,6 +440,8 @@ recoveryKey.display.StorageHints=Захоўвай іх у бяспечным м
 recoveryKey.recover.title=Скінуць пароль
 recoveryKey.recover.prompt=Увядзі свой ключ аднаўлення для "%s":
 recoveryKey.recover.correctKey=Гэта валідны ключ аднаўлення
+recoveryKey.recover.wrongKey=Гэты ключ аднаўлення належыць іншай скарбніцы
+recoveryKey.recover.invalidKey=Несапраўдны ключ аднаўлення
 recoveryKey.printout.heading=Ключ аднаўлення Cryptomator\n"%s"\n
 ### Reset Password
 recoveryKey.recover.resetBtn=Скінуць
@@ -389,4 +469,5 @@ quit.lockAndQuitBtn=Замкнуць ды вайсці
 
 # Forced Quit
 quit.forced.message=Некаторыя скарбніцы не магчыма замкнуць
+quit.forced.description=Замыканне скарбніц было заблакавана праз дзеючыя аперацыі альбо праз адчыненыя файлы. Ты можаш прымусова замкнуць скарбніцы, але гэта можа прывесці да страты незахаваных даных.
 quit.forced.forceAndQuitBtn=Прымусіць і выйсці

+ 12 - 0
src/main/resources/i18n/strings_ca.properties

@@ -154,6 +154,8 @@ hub.registerFailed.description=S'ha produït un error en el procés de nomenamen
 hub.unauthorized.message=Accés denegat
 hub.unauthorized.description=El vostre dispositiu no ha estat encara autoritzat a accedir a aquesta caixa forta. Demaneu autorització al propietari.
 ### License Exceeded
+hub.invalidLicense.message=La llicència del Hub no és vàlida
+hub.invalidLicense.description=Aquest Cryptomator Hub no té una llicència vàlida. Informa si us plau a l'administrador perquè actualitzi o renovi la llicència.
 
 # Lock
 ## Force
@@ -274,6 +276,7 @@ preferences.interface.showTrayIcon=Mostra la icona en la barra (cal reiniciar)
 preferences.volume=Unitat virtual
 preferences.volume.type=Tipus de volum (requereix reiniciar)
 preferences.volume.type.automatic=Automàtic
+preferences.volume.docsTooltip=Obre la documentació per aprendre més sobre els diferents tipus de volums.
 preferences.volume.tcp.port=Port TCP
 preferences.volume.supportedFeatures=El tipus de volum escollit suporta les següents característiques:
 preferences.volume.feature.mountAuto=Selecció automàtica del punt de muntatge
@@ -303,21 +306,27 @@ stats.title=Estadístiques per a %s
 stats.cacheHitRate=Relació d'encerts de la memòria cau
 ## Read
 stats.read.throughput.idle=Llegit: inactiu
+stats.read.throughput.kibs=Lectura: %.2f KiB/s
 stats.read.throughput.mibs=Llegit: %.2f MiB/s
 stats.read.total.data.none=Dades llegides: -
+stats.read.total.data.kib=Dades llegides: %.1f KiB
 stats.read.total.data.mib=Dades llegides: %.1f MiB
 stats.read.total.data.gib=Dades llegides: %.1f GiB
 stats.decr.total.data.none=Dades desxifrades: -
+stats.decr.total.data.kib=Dades desxifrades: %.1f KiB
 stats.decr.total.data.mib=Dades desxifrades: %.1f MiB
 stats.decr.total.data.gib=Dades desxifrades: %.1f GiB
 stats.read.accessCount=Lectures en total: %d
 ## Write
 stats.write.throughput.idle=Escriu: inactiu
+stats.write.throughput.kibs=Escriptura: %.2f KiB/s
 stats.write.throughput.mibs=Escriu: %.2f MiB/s
 stats.write.total.data.none=Dades escrites
+stats.write.total.data.kib=Dades escrites: %.1f KiB
 stats.write.total.data.mib=Dades escrites: %.1f MiB
 stats.write.total.data.gib=Dades escrites: %.1f GiB
 stats.encr.total.data.none=Dades xifrades: -
+stats.encr.total.data.kib=Dades xifrades: %.1f KiB
 stats.encr.total.data.mib=Dades xifrades: %.1f MiB
 stats.encr.total.data.gib=Dades xifrades: %.1f GiB
 stats.write.accessCount=Total escrits: %d
@@ -360,6 +369,7 @@ main.vaultDetail.lockBtn=Bloqueja
 main.vaultDetail.bytesPerSecondRead=Lectura:
 main.vaultDetail.bytesPerSecondWritten=Escriu:
 main.vaultDetail.throughput.idle=inactiu
+main.vaultDetail.throughput.kbps=%.1f KiB/s
 main.vaultDetail.throughput.mbps=%.1f MiB/s
 main.vaultDetail.stats=Estadístiques de la caixa forta
 main.vaultDetail.locateEncryptedFileBtn=Trobar fitxer xifrat
@@ -436,6 +446,8 @@ recoveryKey.display.StorageHints=Conserveu-la en un lloc molt segur. P. ex.:\n 
 recoveryKey.recover.title=Canviar contrasenya
 recoveryKey.recover.prompt=Introduïu la vostra clau de recuperació de "%s":
 recoveryKey.recover.correctKey=La clau de recuperació és vàlida
+recoveryKey.recover.wrongKey=Aquesta clau de recuperació pertany a una caixa forta diferent
+recoveryKey.recover.invalidKey=Aquesta clau de recuperació no és vàlida
 recoveryKey.printout.heading=Clau de recuperació de Cryptomator\n"%s"\n
 ### Reset Password
 recoveryKey.recover.resetBtn=Reinicia

+ 8 - 1
src/main/resources/i18n/strings_de.properties

@@ -306,21 +306,27 @@ stats.title=Statistiken für %s
 stats.cacheHitRate=Cache-Trefferrate
 ## Read
 stats.read.throughput.idle=Leserate: inaktiv
+stats.read.throughput.kibs=Leserate: %.2f KiB/s
 stats.read.throughput.mibs=Leserate: %.2f MiB/s
 stats.read.total.data.none=Gelesen: -
+stats.read.total.data.kib=Gelesen: %.1f KiB
 stats.read.total.data.mib=Gelesen: %.1f MiB
 stats.read.total.data.gib=Gelesen: %.1f GiB
 stats.decr.total.data.none=Entschlüsselt: -
+stats.decr.total.data.kib=Entschlüsselt: %.1f KiB
 stats.decr.total.data.mib=Entschlüsselt: %.1f MiB
 stats.decr.total.data.gib=Entschlüsselt: %.1f GiB
 stats.read.accessCount=Lesezugriffe: %d
 ## Write
 stats.write.throughput.idle=Schreibrate: inaktiv
+stats.write.throughput.kibs=Schreibrate: %.2f KiB/s
 stats.write.throughput.mibs=Schreibrate: %.2f MiB/s
 stats.write.total.data.none=Geschrieben: -
+stats.write.total.data.kib=Geschrieben: %.1f KiB
 stats.write.total.data.mib=Geschrieben: %.1f MiB
 stats.write.total.data.gib=Geschrieben: %.1f GiB
 stats.encr.total.data.none=Verschlüsselt: -
+stats.encr.total.data.kib=Verschlüsselt: %.1f KiB
 stats.encr.total.data.mib=Verschlüsselt: %.1f MiB
 stats.encr.total.data.gib=Verschlüsselt: %.1f GiB
 stats.write.accessCount=Schreibzugriffe: %d
@@ -363,6 +369,7 @@ main.vaultDetail.lockBtn=Sperren
 main.vaultDetail.bytesPerSecondRead=Leserate:
 main.vaultDetail.bytesPerSecondWritten=Schreibrate:
 main.vaultDetail.throughput.idle=inaktiv
+main.vaultDetail.throughput.kbps=%.1f KiB/s
 main.vaultDetail.throughput.mbps=%.1f MiB/s
 main.vaultDetail.stats=Tresorstatistik
 main.vaultDetail.locateEncryptedFileBtn=Verschlüsselte Datei finden
@@ -438,7 +445,7 @@ recoveryKey.display.StorageHints=Bewahre ihn möglichst sicher auf, z. B.\n •
 ### Enter Recovery Key
 recoveryKey.recover.title=Passwort zurücksetzen
 recoveryKey.recover.prompt=Gib deinen Wiederherstellungsschlüssel für „%s“ ein:
-recoveryKey.recover.correctKey=Dies ist ein gültiger Wiederherstellungsschlüssel
+recoveryKey.recover.correctKey=Dieser Wiederherstellungsschlüssel ist gültig
 recoveryKey.recover.wrongKey=Dieser Wiederherstellungsschlüssel gehört zu einem anderen Tresor
 recoveryKey.recover.invalidKey=Dieser Wiederherstellungsschlüssel ist ungültig
 recoveryKey.printout.heading=Cryptomator-Wiederherstellungsschlüssel\n„%s“\n

+ 1 - 1
src/main/resources/i18n/strings_fr.properties

@@ -67,7 +67,7 @@ addvaultwizard.new.generateRecoveryKeyChoice.no=Non merci, je n'oublierai pas mo
 ### Information
 addvault.new.readme.storageLocation.fileName=IMPORTANT.rtf
 addvault.new.readme.storageLocation.1=Fichiers de coffre-fort
-addvault.new.readme.storageLocation.2=Ceci est le chemin de votre coffre-fort.
+addvault.new.readme.storageLocation.2=Ceci est l'emplacement de stockage de votre coffre.
 addvault.new.readme.storageLocation.3=NE PAS
 addvault.new.readme.storageLocation.4=•  modifier les fichiers dans ce répertoire ni
 addvault.new.readme.storageLocation.5=•  coller de fichier à chiffrer dans ce répertoire.

+ 7 - 0
src/main/resources/i18n/strings_he.properties

@@ -306,21 +306,27 @@ stats.title=סטטיסטיקה עבור %s
 stats.cacheHitRate=אחוז שימוש במטמון
 ## Read
 stats.read.throughput.idle=קריאה: ללא פעילות
+stats.read.throughput.kibs=נקרא: %.2f קילובייט/שניה
 stats.read.throughput.mibs=קריאה: %.2f MiB/s
 stats.read.total.data.none=מידע שנקרא: -
+stats.read.total.data.kib=מידע שנקרא: %.1f קילובייט
 stats.read.total.data.mib=מידע שנקרא: %.1f מגהבייט
 stats.read.total.data.gib=מידע שנקרא: %.1f גיגהבייט
 stats.decr.total.data.none=מידע שפוענח: -
+stats.decr.total.data.kib=מידע שפוענח: %.1f קילובייט
 stats.decr.total.data.mib=מידע שפוענח: %.1f מגהבייט
 stats.decr.total.data.gib=מידע שפוענח: %.1f גיגהבייט
 stats.read.accessCount=מספר קריאות כולל: %d
 ## Write
 stats.write.throughput.idle=כתיבה: ללא פעילות
+stats.write.throughput.kibs=נכתב: %.2f קילובייט/שניה
 stats.write.throughput.mibs=כתיבה: %.2f מגהבייט/שניה
 stats.write.total.data.none=מידע שנכתב: -
+stats.write.total.data.kib=מידע שנכתב: %.1f קילובייט
 stats.write.total.data.mib=מידע שנכתב: %.1f מגהבייט
 stats.write.total.data.gib=מידע שנכתב: %.1f גיגהבייט
 stats.encr.total.data.none=מידע שהוצפן: -
+stats.encr.total.data.kib=מידע שהוצפן: %.1f קילובייט
 stats.encr.total.data.mib=מידע שהוצפן: %.1f מגהבייט
 stats.encr.total.data.gib=מידע שהוצפן: %.1f גיגהבייט
 stats.write.accessCount=מספר כתיבות כולל: %d
@@ -363,6 +369,7 @@ main.vaultDetail.lockBtn=נעילה
 main.vaultDetail.bytesPerSecondRead=קריאה:
 main.vaultDetail.bytesPerSecondWritten=כתיבה:
 main.vaultDetail.throughput.idle=ללא פעילות
+main.vaultDetail.throughput.kbps=%.1f קילובייט/שניה
 main.vaultDetail.throughput.mbps=%.1f מגהביט לשניה
 main.vaultDetail.stats=סטטיסטיקת הכספת
 main.vaultDetail.locateEncryptedFileBtn=מצא קבצים מוצפנים

+ 9 - 0
src/main/resources/i18n/strings_nb.properties

@@ -154,6 +154,8 @@ hub.registerFailed.description=Under navngivingsprosessen oppsto det en feilmeld
 hub.unauthorized.message=Ingen tilgang
 hub.unauthorized.description=Enheten din har ikke blitt autorisert til å få tilgang til dette hvelvet ennå. Spør hvelveieren om å tillate det.
 ### License Exceeded
+hub.invalidLicense.message=Hub-lisens er ugyldig
+hub.invalidLicense.description=Cryptomator Hub instansen din har en ugyldig lisens. Vennligst informer en Hub-administrator om å oppgradere eller fornye lisensen.
 
 # Lock
 ## Force
@@ -304,21 +306,27 @@ stats.title=Statistikk for %s
 stats.cacheHitRate=Treffrate på hurtigminnet
 ## Read
 stats.read.throughput.idle=Les: inaktiv
+stats.read.throughput.kibs=Lest: %.2f KiB/s
 stats.read.throughput.mibs=Lest: %.2f MiB/s
 stats.read.total.data.none=Data lest: -
+stats.read.total.data.kib=Data lest: %.1f KiB
 stats.read.total.data.mib=Data lest: %.1f MiB
 stats.read.total.data.gib=Data lest: %.1f GiB
 stats.decr.total.data.none=Data dekryptert: -
+stats.decr.total.data.kib=Data dekryptert: %.1f KiB
 stats.decr.total.data.mib=Data dekryptert: %.1f MiB
 stats.decr.total.data.gib=Data dekryptert: %.1f GiB
 stats.read.accessCount=Lesninger totalt: %d
 ## Write
 stats.write.throughput.idle=Skrive: inaktiv
+stats.write.throughput.kibs=Skriver: %.2f KiB/s
 stats.write.throughput.mibs=Skriver: %.2f MiB/s
 stats.write.total.data.none=Data skrevet: -
+stats.write.total.data.kib=Data skrevet: %.1f KiB
 stats.write.total.data.mib=Data skrevet: %.1f MiB
 stats.write.total.data.gib=Data skrevet: %.1f GiB
 stats.encr.total.data.none=Data kryptert: -
+stats.encr.total.data.kib=Data kryptert: %.1f KiB
 stats.encr.total.data.mib=Data kryptert: %.1f MiB
 stats.encr.total.data.gib=Data kryptert: %.1f GiB
 stats.write.accessCount=Skrivninger totalt: %d
@@ -361,6 +369,7 @@ main.vaultDetail.lockBtn=Lås
 main.vaultDetail.bytesPerSecondRead=Lesehastighet:
 main.vaultDetail.bytesPerSecondWritten=Skriv:
 main.vaultDetail.throughput.idle=inaktiv
+main.vaultDetail.throughput.kbps=%.1f KiB/s
 main.vaultDetail.throughput.mbps=%.1f MiB/s
 main.vaultDetail.stats=Hvelvstatistikk
 main.vaultDetail.locateEncryptedFileBtn=Finn kryptert fil

+ 1 - 1
src/main/resources/i18n/strings_ru.properties

@@ -470,7 +470,7 @@ passwordStrength.messageLabel.4=Очень сильный
 # Quit
 quit.title=Выйти из приложения
 quit.message=Есть открытые хранилища
-quit.description=Пожалуйста, подтвердите, что вы хотите выйти. Криптоматор корректно заблокирует все разблокированные хранилища для предотвращения потери данных.
+quit.description=Подтвердите, что вы хотите выйти. Cryptomator корректно заблокирует все разблокированные хранилища для предотвращения потери данных.
 quit.lockAndQuitBtn=Заблокировать и выйти
 
 # Forced Quit

+ 59 - 0
src/main/resources/i18n/strings_sw.properties

@@ -123,7 +123,14 @@ unlock.success.description=Imefunguliwa "%s" kwa mafanikio! Kuba yako sasa inapa
 unlock.success.rememberChoice=Kumbuka chaguo, usionyeshe hii tena
 unlock.success.revealBtn=Fichua Kiendeshaji
 ## Failure
+unlock.error.customPath.message=Haiwezi kupachika kuba kwenye njia maalum
+unlock.error.customPath.description.notSupported=Ikiwa ungependa kuendelea kutumia njia maalum, tafadhali nenda kwa mapendeleo na uchague aina ya sauti inayoitumia. Vinginevyo, nenda kwa chaguo za kuba na uchague sehemu ya kupachika inayotumika.
+unlock.error.customPath.description.notExists=Njia maalum ya kupachika haipo. Iunde katika mfumo wako wa faili wa karibu au ubadilishe katika chaguzi za kuba.
+unlock.error.customPath.description.generic=Umechagua njia maalum ya kupachika kwa kuba hii, lakini kuitumia imeshindwa na ujumbe: %s
 ## Hub
+hub.noKeychain.message=Imeshindwa kufikia ufunguo wa kifaa
+hub.noKeychain.description=Ili kufungua kuba za Hub, ufunguo wa kifaa unahitajika, ambao hulindwa kwa kutumia mnyororo wa vitufe. Ili kuendelea, washa "%s" na uchague mnyororo wa vitufe katika mapendeleo.
+hub.noKeychain.openBtn=Fungua Mapendeleo
 ### Waiting
 hub.auth.message=Inasubiri uthibitishaji…
 hub.auth.description=Unapaswa kuelekezwa upya kiotomatiki kwa ukurasa wa kuingia.
@@ -147,6 +154,8 @@ hub.registerFailed.description=Hitilafu imetupwa katika mchakato wa kumtaja. Kwa
 hub.unauthorized.message=Ufikiaji umekataliwa
 hub.unauthorized.description=Kifaa chako bado hakijaidhinishwa kufikia kuba hii. Uliza mwenye kuba aidhinishe.
 ### License Exceeded
+hub.invalidLicense.message=Leseni ya Hub ni batili
+hub.invalidLicense.description=Mfano wako wa Cryptomator Hub una leseni batili. Tafadhali mjulishe msimamizi wa Hub ili kuboresha au kusasisha leseni.
 
 # Lock
 ## Force
@@ -162,6 +171,11 @@ lock.fail.description=Kuba "%s" haikuweza kufungwa. Hakikisha kazi isiyohifadhiw
 migration.title=Pandisha daraja Kuba
 ## Start
 migration.start.header=Pandisha daraja Kuba
+migration.start.text=Ili kufungua kuba yako "%s" katika toleo hili jipya la Cryptomator, kuba inahitaji kuboreshwa hadi umbizo jipya zaidi. Kabla ya kufanya hivyo, unapaswa kujua yafuatayo:
+migration.start.remarkUndone=Uboreshaji huu hauwezi kutenduliwa.
+migration.start.remarkVersions=Matoleo ya zamani ya Cryptomator hayataweza kufungua kuba iliyosasishwa.
+migration.start.remarkCanRun=Lazima uwe na uhakika kwamba kila kifaa ambacho unaweza kufikia kubaki kinaweza kutumia toleo hili la Cryptomator.
+migration.start.remarkSynced=Lazima uhakikishe kuwa kuba yako imesawazishwa kikamilifu kwenye kifaa hiki, na kwenye vifaa vyako vingine, kabla ya kukiboresha.
 migration.start.confirm=Nimesoma na kuelewa habari hapo juu
 ## Run
 migration.run.enterPassword=Ingiza neno la siri ya "%s"
@@ -210,8 +224,25 @@ health.check.detail.checkFinished=Ukaguzi umekamilika kwa ufanisi.
 health.check.detail.checkFinishedAndFound=Ukaguzi ulimaliza kukimbia. Tafadhali angalia matokeo.
 health.check.detail.checkFailed=Ukaguzi ulitoka kwa sababu ya kosa.
 health.check.detail.checkCancelled=Ukaguzi ulikatishwa.
+health.check.detail.listFilters.label=Chuja
+health.check.detail.fixAllSpecificBtn=Rekebisha aina zote
 health.check.exportBtn=Hamisha Ripoti
 ## Result view
+health.result.severityFilter.all=Ukali - Yote
+health.result.severityFilter.good=Nzuri
+health.result.severityFilter.info=Taarifa
+health.result.severityFilter.warn=Onyo
+health.result.severityFilter.crit=Muhimu
+health.result.severityTip.good=Ukali: Nzuri\nMuundo wa kuba ya kawaida.
+health.result.severityTip.info=Ukali: Taarifa\nMuundo wa kuba ukiwa mzima, marekebisho yamependekezwa.
+health.result.severityTip.warn=Ukali: Onyo\nMuundo wa kuba umeharibika, rekebisha inashauriwa sana.
+health.result.severityTip.crit=Ukali: Muhimu\nMuundo wa kuba umeharibika, upotezaji wa data umebainishwa.
+health.result.fixStateFilter.all=Rekebisha hali - Yote
+health.result.fixStateFilter.fixable=Inaweza kurekebishwa
+health.result.fixStateFilter.notFixable=Haiwezi kurekebishika
+health.result.fixStateFilter.fixing=Inarekebisha…
+health.result.fixStateFilter.fixed=Imerekebishwa
+health.result.fixStateFilter.fixFailed=Imeshindwa kurekebisha
 ## Fix Application
 health.fix.fixBtn=Kurekebisha
 health.fix.successTip=Rekebisha imefanikiwa
@@ -243,7 +274,15 @@ preferences.interface.showMinimizeButton=Onyesha kitufe cha kupunguza
 preferences.interface.showTrayIcon=Onyesha ikoni ya trei (inahitaji kuanzisha upya)
 ## Volume
 preferences.volume=Kiendeshi pepe
+preferences.volume.type=Aina ya Sauti (inahitaji kuanzishwa upya)
 preferences.volume.type.automatic=Otomatiki
+preferences.volume.docsTooltip=Fungua hati ili kujifunza zaidi kuhusu aina tofauti za sauti.
+preferences.volume.tcp.port=Bandari ya TCP
+preferences.volume.supportedFeatures=Aina ya sauti iliyochaguliwa inasaidia vipengele vifuatavyo:
+preferences.volume.feature.mountAuto=Uchaguzi wa sehemu ya kupachika otomatiki
+preferences.volume.feature.mountToDir=Saraka maalum kama sehemu ya kupachika
+preferences.volume.feature.mountToDriveLetter=Endesha barua kama sehemu ya kupachika
+preferences.volume.feature.mountFlags=Chaguzi maalum za kupachika
 ## Updates
 preferences.updates=Sasishi
 preferences.updates.currentVersion=Toleo la Sasa: %s
@@ -266,26 +305,34 @@ stats.title=Takwimu za %s
 stats.cacheHitRate=Kiwango cha Hit ya Akiba
 ## Read
 stats.read.throughput.idle=Soma: bila kazi
+stats.read.throughput.kibs=Soma: %.2f KiB/s
 stats.read.throughput.mibs=Soma:%.2fMiB/s
 stats.read.total.data.none=Data soma: -
+stats.read.total.data.kib=Data imesomwa: %.1f KiB
 stats.read.total.data.mib=Data soma: %.1f MiB
 stats.read.total.data.gib=Data soma: %.1f GiB
 stats.decr.total.data.none=Data iliyosimbwa kwa njia fiche: -
+stats.decr.total.data.kib=Data imesimbwa: %.1f KiB
 stats.decr.total.data.mib=Data iliyosimbwa kwa njia fiche: %.1fMiB
 stats.decr.total.data.gib=Data iliyosimbwa kwa njia fiche: %.1f GiB
 stats.read.accessCount=Jumla ya kusoma: %d
 ## Write
 stats.write.throughput.idle=Andika: bila kazi
+stats.write.throughput.kibs=Andika: %.2f KiB/s
 stats.write.throughput.mibs=Andika: %.2f MiB/s
 stats.write.total.data.none=Data iliyoandikwa: -
+stats.write.total.data.kib=Data iliyoandikwa: %.1f KiB
 stats.write.total.data.mib=Data iliyoandikwa: %.1f MiB
 stats.write.total.data.gib=Data iliyoandikwa: %.1f GiB
 stats.encr.total.data.none=Data iliyosimbwa kwa njia fiche: -
+stats.encr.total.data.kib=Data imesimbwa kwa njia fiche: %.1f KiB
 stats.encr.total.data.mib=Data iliyosimbwa kwa njia fiche: %.1f MiB
 stats.encr.total.data.gib=Data iliyosimbwa kwa njia fiche: %.1f GiB
 stats.write.accessCount=Jumla ya maandishi anaandika: %d
 
 ## Accesses
+stats.access.current=Ufikiaji: %d
+stats.access.total=Jumla ya ufikiaji: %d
 
 
 # Main Window
@@ -316,12 +363,18 @@ main.vaultDetail.passwordSavedInKeychain=Neno la siri limehifadhiwa
 main.vaultDetail.unlockedStatus=IMEFUNGULIWA
 main.vaultDetail.accessLocation=Yaliyomo kwenye kuba yako yanapatikana hapa:
 main.vaultDetail.revealBtn=Fichua Kiendeshaji
+main.vaultDetail.copyUri=Nakili URI
 main.vaultDetail.lockBtn=Funga
 main.vaultDetail.bytesPerSecondRead=Soma:
 main.vaultDetail.bytesPerSecondWritten=Andika:
 main.vaultDetail.throughput.idle=imezubaa
+main.vaultDetail.throughput.kbps=%.1f KiB/s
 main.vaultDetail.throughput.mbps=%.1f MiB/s
 main.vaultDetail.stats=Takwimu za Kuba
+main.vaultDetail.locateEncryptedFileBtn=Tafuta Faili Iliyosimbwa kwa Njia Fiche
+main.vaultDetail.locateEncryptedFileBtn.tooltip=Chagua faili kutoka kwa chumba chako ili kupata mwenza wake uliosimbwa kwa njia fiche
+main.vaultDetail.encryptedPathsCopied=Njia Zimenakiliwa kwenye Ubao wa kunakili!
+main.vaultDetail.filePickerTitle=Chagua Faili Ndani ya Kuba
 ### Missing
 main.vaultDetail.missing.info=Cryptomator haikuweza kupata kuba katika njia hii.
 main.vaultDetail.missing.recheck=Kagua upya
@@ -360,13 +413,17 @@ vaultOptions.general.startHealthCheckBtn=Anza Ukaguzi wa Afya
 
 ## Mount
 vaultOptions.mount=Kuweka
+vaultOptions.mount.info=Chaguzi hutegemea aina ya sauti iliyochaguliwa.
+vaultOptions.mount.linkToPreferences=Fungua mapendeleo ya hifadhi pepe
 vaultOptions.mount.readonly=Soma-Tu
 vaultOptions.mount.customMountFlags=Vipepea Vya Mlima Maalum
 vaultOptions.mount.winDriveLetterOccupied=ulichukua
 vaultOptions.mount.mountPoint=Pointi ya kuweka
 vaultOptions.mount.mountPoint.auto=Chagua otomatiki mahali panapofaa
 vaultOptions.mount.mountPoint.driveLetter=Tumia barua kiendeshi kilichopangiwa
+vaultOptions.mount.mountPoint.custom=Tumia saraka iliyochaguliwa
 vaultOptions.mount.mountPoint.directoryPickerButton=Chagua…
+vaultOptions.mount.mountPoint.directoryPickerTitle=Chagua saraka
 ## Master Key
 vaultOptions.masterkey=Neno la siri
 vaultOptions.masterkey.changePasswordBtn=Badilisha Neno la siri
@@ -388,6 +445,8 @@ recoveryKey.display.StorageHints=Weka mahali salama sana, kwa mfano:\n • Hifad
 recoveryKey.recover.title=Fufua Neno la siri
 recoveryKey.recover.prompt=Ingiza ufunguo wako wa kurejesha kwa "%s":
 recoveryKey.recover.correctKey=Hii ni ufunguo halali wa kurejesha
+recoveryKey.recover.wrongKey=Ufunguo huu wa urejeshaji ni wa kuba tofauti
+recoveryKey.recover.invalidKey=Ufunguo huu wa kurejesha si sahihi
 recoveryKey.printout.heading=Ufunguo wa Urejeshaji wa Cryptomator\n"%s"\n
 ### Reset Password
 recoveryKey.recover.resetBtn=Weka upya

+ 29 - 0
src/main/resources/i18n/strings_tr.properties

@@ -123,6 +123,10 @@ unlock.success.description="%s" 'nin kilidi başarıyla açıldı! Kasanız şim
 unlock.success.rememberChoice=Seçimi hatırla, bunu bir daha gösterme
 unlock.success.revealBtn=Sürücüyü Göster
 ## Failure
+unlock.error.customPath.message=Kasa özel yola bağlanamıyor
+unlock.error.customPath.description.notSupported=Özel yolu kullanmaya devam etmek istiyorsanız, lütfen tercihlere gidin ve onu destekleyen bir cilt türü seçin. Aksi takdirde kasa seçeneklerine gidin ve desteklenen bir bağlama noktası seçin.
+unlock.error.customPath.description.notExists=Özel bağlama yolu mevcut değil. Ya yerel dosya sisteminizde oluşturun ya da kasa seçeneklerinde değiştirin.
+unlock.error.customPath.description.generic=Bu kasa için özel bir bağlama yolu seçtiniz, ancak bunu kullanmak şu mesajla başarısız oldu: %s
 ## Hub
 hub.noKeychain.message=Cihaz anahtarına erişilemiyor
 hub.noKeychain.description=Hub kasalarının kilidini açmak için, bir anahtarlık kullanılarak güvenliği sağlanan bir cihaz anahtarı gerekir. Devam etmek için "%s"yi etkinleştirin ve tercihlerde bir anahtarlık seçin.
@@ -150,6 +154,8 @@ hub.registerFailed.description=İsimlendirme işleminde bir hata oluştu. Daha f
 hub.unauthorized.message=Erişim engellendi
 hub.unauthorized.description=Cihazınıza henüz bu kasaya erişim yetkisi verilmedi. Kasa sahibinden yetkilendirmesini isteyin.
 ### License Exceeded
+hub.invalidLicense.message=Hub Lisansı geçersiz
+hub.invalidLicense.description=Cryptomator Hub örneğinizde geçersiz bir lisans var. Lisansı yükseltmesi veya yenilemesi için lütfen bir Hub yöneticisini bilgilendirin.
 
 # Lock
 ## Force
@@ -268,7 +274,16 @@ preferences.interface.showMinimizeButton=Küçültme düğmesini göster
 preferences.interface.showTrayIcon=Sistem tepsisi simgesini göster (Yeniden başlatma gerekir)
 ## Volume
 preferences.volume=Sanal Sürücü
+preferences.volume.type=Birim Türü (yeniden başlatma gerektirir)
 preferences.volume.type.automatic=Otomatik
+preferences.volume.docsTooltip=Farklı birim türleri hakkında daha fazla bilgi edinmek için belgeleri açın.
+preferences.volume.tcp.port=TCP Portu
+preferences.volume.supportedFeatures=Seçilen birim türü aşağıdaki özellikleri destekler:
+preferences.volume.feature.mountAuto=Otomatik bağlama noktası seçimi
+preferences.volume.feature.mountToDir=Bağlama noktası olarak özel dizin
+preferences.volume.feature.mountToDriveLetter=Bağlama noktası olarak sürücü harfi
+preferences.volume.feature.mountFlags=Özel bağlama seçenekleri
+preferences.volume.feature.readOnly=Salt okunur bağlama
 ## Updates
 preferences.updates=Güncellemeler
 preferences.updates.currentVersion=Mevcut Sürüm: %s
@@ -291,21 +306,27 @@ stats.title=%s İçin İstatistikler
 stats.cacheHitRate=Önbellek Kullanım Oranı
 ## Read
 stats.read.throughput.idle=Okuma: boşta
+stats.read.throughput.kibs=Okuma: %.2f kB/s
 stats.read.throughput.mibs=Okuma: %.2f MB/s
 stats.read.total.data.none=Okunan veri: -
+stats.read.total.data.kib=Okunan veri: %.1f kB
 stats.read.total.data.mib=Okunan veri: %.1f MB
 stats.read.total.data.gib=Okunan veri: %.1f GB
 stats.decr.total.data.none=Şifresi çözülen veri: -
+stats.decr.total.data.kib=Şifresi çözülen veri: %.1f kB
 stats.decr.total.data.mib=Şifresi çözülen veri: %.1f MB
 stats.decr.total.data.gib=Şifresi çözülen veri: %.1f GB
 stats.read.accessCount=Toplam okuma: %d
 ## Write
 stats.write.throughput.idle=Yazma: boşta
+stats.write.throughput.kibs=Yazma: %.2f kB/s
 stats.write.throughput.mibs=Yazma: %.2f MB/s
 stats.write.total.data.none=Yazılmış veri: -
+stats.write.total.data.kib=Yazılan veri: %.1f kB
 stats.write.total.data.mib=Yazılan veri: %.1f MB
 stats.write.total.data.gib=Yazılan veri: %.1f GB
 stats.encr.total.data.none=Şifrelenen veri: -
+stats.encr.total.data.kib=Şifrelenen veri: %.1f kB
 stats.encr.total.data.mib=Şifrelenen veri: %.1f MB
 stats.encr.total.data.gib=Şifrelenen veri: %.1f GB
 stats.write.accessCount=Toplam yazma: %d
@@ -343,10 +364,12 @@ main.vaultDetail.passwordSavedInKeychain=Şifre kaydedildi
 main.vaultDetail.unlockedStatus=KİLİDİ AÇIK
 main.vaultDetail.accessLocation=Kasa içeriğinize buradan erişilebilir:
 main.vaultDetail.revealBtn=Sürücüyü Göster
+main.vaultDetail.copyUri=Linki kopyala
 main.vaultDetail.lockBtn=Kilitle
 main.vaultDetail.bytesPerSecondRead=Okuma:
 main.vaultDetail.bytesPerSecondWritten=Yazma:
 main.vaultDetail.throughput.idle=boşta
+main.vaultDetail.throughput.kbps=%.1f kB/s
 main.vaultDetail.throughput.mbps=%.1f MiB/s
 main.vaultDetail.stats=Kasa İstatistikleri
 main.vaultDetail.locateEncryptedFileBtn=Şifrelenmiş Dosyayı Bul
@@ -391,13 +414,17 @@ vaultOptions.general.startHealthCheckBtn=Sağlık Kontrolünü Başlat
 
 ## Mount
 vaultOptions.mount=Bağlantı
+vaultOptions.mount.info=Seçenekler, seçilen birim tipine bağlıdır.
+vaultOptions.mount.linkToPreferences=Sanal sürücü tercihlerini aç
 vaultOptions.mount.readonly=Salt-Okunur
 vaultOptions.mount.customMountFlags=Özel Bağlantı Parametreleri
 vaultOptions.mount.winDriveLetterOccupied=meşgul
 vaultOptions.mount.mountPoint=Bağlantı Noktası
 vaultOptions.mount.mountPoint.auto=Otomatik uygun yer bul
 vaultOptions.mount.mountPoint.driveLetter=Bir sürücü harfi kullan
+vaultOptions.mount.mountPoint.custom=Seçilen dizini kullan
 vaultOptions.mount.mountPoint.directoryPickerButton=Seç…
+vaultOptions.mount.mountPoint.directoryPickerTitle=Dizin seçin
 ## Master Key
 vaultOptions.masterkey=Şifre
 vaultOptions.masterkey.changePasswordBtn=Şifreyi Değiştir
@@ -419,6 +446,8 @@ recoveryKey.display.StorageHints=Bunu çok güvenli bir yerde saklayın, örneğ
 recoveryKey.recover.title=Şifreyi Sıfırla
 recoveryKey.recover.prompt="%s" için kurtarma anahtarınızı girin:
 recoveryKey.recover.correctKey=Bu geçerli bir kurtarma anahtarı
+recoveryKey.recover.wrongKey=Bu kurtarma anahtarı farklı bir kasaya ait
+recoveryKey.recover.invalidKey=Bu kurtarma anahtarı geçerli değil
 recoveryKey.printout.heading=Cryptomator Kurtarma Anahtarı\n"%s"\n
 ### Reset Password
 recoveryKey.recover.resetBtn=Sıfırla

+ 3 - 3
src/main/resources/i18n/strings_zh.properties

@@ -306,7 +306,7 @@ stats.title=%s 统计信息
 stats.cacheHitRate=缓存命中率
 ## Read
 stats.read.throughput.idle=读取:空闲
-stats.read.throughput.kibs=读取:%.2f KiB/
+stats.read.throughput.kibs=读取:%.2f KiB/s
 stats.read.throughput.mibs=读取:%.2f MiB/秒
 stats.read.total.data.none=已读取数据:-
 stats.read.total.data.kib=已读取数据:%.1f KiB
@@ -319,7 +319,7 @@ stats.decr.total.data.gib=已解密数据:%.1f GiB
 stats.read.accessCount=读取总数:%d
 ## Write
 stats.write.throughput.idle=写入:空闲
-stats.write.throughput.kibs=写入:%.2f KiB/
+stats.write.throughput.kibs=写入:%.2f KiB/s
 stats.write.throughput.mibs=写入:%.2f MiB/秒
 stats.write.total.data.none=已写入数据: -
 stats.write.total.data.kib=已写入数据:%.1f KiB
@@ -369,7 +369,7 @@ main.vaultDetail.lockBtn=锁定
 main.vaultDetail.bytesPerSecondRead=读取:
 main.vaultDetail.bytesPerSecondWritten=写入:
 main.vaultDetail.throughput.idle=空闲
-main.vaultDetail.throughput.kbps=%.1f KiB/
+main.vaultDetail.throughput.kbps=%.1f KiB/s
 main.vaultDetail.throughput.mbps=%.1f MiB/秒
 main.vaultDetail.stats=保险库统计
 main.vaultDetail.locateEncryptedFileBtn=找出加密后文件

+ 7 - 0
src/main/resources/i18n/strings_zh_HK.properties

@@ -306,21 +306,27 @@ stats.title=%s 的統計數據
 stats.cacheHitRate=快取命中率
 ## Read
 stats.read.throughput.idle=讀取:閒置
+stats.read.throughput.kibs=讀取: %.2f KiB/s
 stats.read.throughput.mibs=讀取: %.2f MiB/s
 stats.read.total.data.none=資料讀取: -
+stats.read.total.data.kib=資料讀取: %.1f KiB
 stats.read.total.data.mib=資料讀取: %.1f MiB
 stats.read.total.data.gib=資料讀取: %.1f GiB
 stats.decr.total.data.none=資料解密: -
+stats.decr.total.data.kib=資料解密: %.1f KiB
 stats.decr.total.data.mib=資料解密: %.1f MiB
 stats.decr.total.data.gib=資料解密: %.1f GiB
 stats.read.accessCount=總讀取: %d
 ## Write
 stats.write.throughput.idle=寫入:閒置
+stats.write.throughput.kibs=寫入:%.2f KiB/s
 stats.write.throughput.mibs=寫入:%.2f MiB/s
 stats.write.total.data.none=資料寫入:-
+stats.write.total.data.kib=資料寫入:%.1f KiB
 stats.write.total.data.mib=資料寫入:%.1f MiB
 stats.write.total.data.gib=資料寫入:%.1f GiB
 stats.encr.total.data.none=資料加密: -
+stats.encr.total.data.kib=資料加密: %.1f KiB
 stats.encr.total.data.mib=資料加密: %.1f MiB
 stats.encr.total.data.gib=資料加密: %.1f GiB
 stats.write.accessCount=總寫入: %d
@@ -363,6 +369,7 @@ main.vaultDetail.lockBtn=鎖定
 main.vaultDetail.bytesPerSecondRead=讀取:
 main.vaultDetail.bytesPerSecondWritten=寫入:
 main.vaultDetail.throughput.idle=閒置
+main.vaultDetail.throughput.kbps=%.1f KiB/s
 main.vaultDetail.throughput.mbps=%.1f MiB/s
 main.vaultDetail.stats=加密庫統計數據
 main.vaultDetail.locateEncryptedFileBtn=顯示加密檔案路徑

+ 7 - 0
src/main/resources/i18n/strings_zh_TW.properties

@@ -306,21 +306,27 @@ stats.title=%s 統計數據
 stats.cacheHitRate=快取命中率
 ## Read
 stats.read.throughput.idle=讀取:閒置
+stats.read.throughput.kibs=讀取: %.2f KiB/s
 stats.read.throughput.mibs=讀取:%.2f MiB/s
 stats.read.total.data.none=資料讀取:無
+stats.read.total.data.kib=資料讀取: %.1f KiB
 stats.read.total.data.mib=資料讀取:%.1f MiB
 stats.read.total.data.gib=資料讀取:%.1f GiB
 stats.decr.total.data.none=資料解密:無
+stats.decr.total.data.kib=資料解密: %.1f KiB
 stats.decr.total.data.mib=資料解密:%.1f MiB
 stats.decr.total.data.gib=資料解密:%.1f GiB
 stats.read.accessCount=總讀取:%d
 ## Write
 stats.write.throughput.idle=寫入:閒置
+stats.write.throughput.kibs=寫入:%.2f KiB/s
 stats.write.throughput.mibs=寫入:%.2f MiB/s
 stats.write.total.data.none=已寫入資料:-
+stats.write.total.data.kib=資料寫入:%.1f KiB
 stats.write.total.data.mib=資料寫入:%.1f MiB
 stats.write.total.data.gib=資料寫入:%.1f GiB
 stats.encr.total.data.none=資料加密:無
+stats.encr.total.data.kib=資料加密: %.1f KiB
 stats.encr.total.data.mib=資料加密:%.1f MiB
 stats.encr.total.data.gib=資料加密:%.1f GiB
 stats.write.accessCount=總寫入:%d
@@ -363,6 +369,7 @@ main.vaultDetail.lockBtn=鎖定
 main.vaultDetail.bytesPerSecondRead=讀取:
 main.vaultDetail.bytesPerSecondWritten=寫入:
 main.vaultDetail.throughput.idle=閒置
+main.vaultDetail.throughput.kbps=%.1f KiB/s
 main.vaultDetail.throughput.mbps=%.1f MiB/s
 main.vaultDetail.stats=加密檔案庫統計
 main.vaultDetail.locateEncryptedFileBtn=顯示加密檔案路徑