From d0dae1867f4f67dd23eaeb83cd8156cf4027f068 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Thu, 23 Jan 2025 12:18:52 +0100 Subject: [PATCH 01/13] RIP Twitter --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d68fa6649..c121de218 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Build](https://github.com/cryptomator/ios/actions/workflows/build.yml/badge.svg)](https://github.com/cryptomator/ios/actions/workflows/build.yml) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/efc080db52a5449fac50ffde8d8fd6bc)](https://www.codacy.com/gh/cryptomator/ios/dashboard) -[![Twitter](https://img.shields.io/badge/twitter-@Cryptomator-blue.svg?style=flat)](http://twitter.com/Cryptomator) +[![Mastodon](https://img.shields.io/mastodon/follow/176112?domain=mastodon.online&style=flat)](https://mastodon.online/@cryptomator) [![Crowdin](https://badges.crowdin.net/cryptomator/localized.svg)](https://translate.cryptomator.org/) [![Community](https://img.shields.io/badge/help-Community-orange.svg)](https://community.cryptomator.org) From 3468080e3338157110bddebe4083e1f75d101156 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Fri, 31 Jan 2025 17:23:39 +0100 Subject: [PATCH 02/13] RIP Twitter --- Cryptomator/Resources/about.html | 2 +- fastlane/config/freemium/metadata/de-DE/description.txt | 2 +- fastlane/config/freemium/metadata/en-US/description.txt | 2 +- fastlane/config/premium/metadata/de-DE/description.txt | 2 +- fastlane/config/premium/metadata/en-US/description.txt | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cryptomator/Resources/about.html b/Cryptomator/Resources/about.html index 35b8423a6..c0cbb6032 100644 --- a/Cryptomator/Resources/about.html +++ b/Cryptomator/Resources/about.html @@ -28,7 +28,7 @@

Privacy Policy

Connect

diff --git a/fastlane/config/freemium/metadata/de-DE/description.txt b/fastlane/config/freemium/metadata/de-DE/description.txt index 624281bd7..c07658008 100644 --- a/fastlane/config/freemium/metadata/de-DE/description.txt +++ b/fastlane/config/freemium/metadata/de-DE/description.txt @@ -33,7 +33,7 @@ CRYPTOMATOR COMMUNITY Tritt der Cryptomator Community bei und tausche dich mit Cryptomator-Nutzern aus: https://community.cryptomator.org -• Folge uns auf Twitter @Cryptomator +• Folge uns auf Mastodon @cryptomator@mastodon.online • Like uns auf Facebook /Cryptomator --- diff --git a/fastlane/config/freemium/metadata/en-US/description.txt b/fastlane/config/freemium/metadata/en-US/description.txt index f55867252..dffd0b232 100644 --- a/fastlane/config/freemium/metadata/en-US/description.txt +++ b/fastlane/config/freemium/metadata/en-US/description.txt @@ -33,7 +33,7 @@ CRYPTOMATOR COMMUNITY Join the Cryptomator Community and participate in the conversations with other Cryptomator users: https://community.cryptomator.org -• Follow us on Twitter @Cryptomator +• Follow us on Mastodon @cryptomator@mastodon.online • Like us on Facebook /Cryptomator --- diff --git a/fastlane/config/premium/metadata/de-DE/description.txt b/fastlane/config/premium/metadata/de-DE/description.txt index 055b45c55..1061bfb3b 100644 --- a/fastlane/config/premium/metadata/de-DE/description.txt +++ b/fastlane/config/premium/metadata/de-DE/description.txt @@ -37,5 +37,5 @@ CRYPTOMATOR COMMUNITY Tritt der Cryptomator Community bei und tausche dich mit Cryptomator-Nutzern aus: https://community.cryptomator.org -• Folge uns auf Twitter @Cryptomator +• Folge uns auf Mastodon @cryptomator@mastodon.online • Like uns auf Facebook /Cryptomator \ No newline at end of file diff --git a/fastlane/config/premium/metadata/en-US/description.txt b/fastlane/config/premium/metadata/en-US/description.txt index c7de71cae..ec3e996e8 100644 --- a/fastlane/config/premium/metadata/en-US/description.txt +++ b/fastlane/config/premium/metadata/en-US/description.txt @@ -37,5 +37,5 @@ CRYPTOMATOR COMMUNITY Join the Cryptomator Community and participate in the conversations with other Cryptomator users: https://community.cryptomator.org -• Follow us on Twitter @Cryptomator +• Follow us on Mastodon @cryptomator@mastodon.online • Like us on Facebook /Cryptomator \ No newline at end of file From 851fa5958e61052decb09d6222eea7bdf41a7ec9 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Sat, 1 Feb 2025 11:14:18 +0100 Subject: [PATCH 03/13] Correct Mastodon mentions --- fastlane/config/freemium/metadata/de-DE/description.txt | 2 +- fastlane/config/freemium/metadata/en-US/description.txt | 2 +- fastlane/config/premium/metadata/de-DE/description.txt | 2 +- fastlane/config/premium/metadata/en-US/description.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/fastlane/config/freemium/metadata/de-DE/description.txt b/fastlane/config/freemium/metadata/de-DE/description.txt index c07658008..69493e36e 100644 --- a/fastlane/config/freemium/metadata/de-DE/description.txt +++ b/fastlane/config/freemium/metadata/de-DE/description.txt @@ -33,7 +33,7 @@ CRYPTOMATOR COMMUNITY Tritt der Cryptomator Community bei und tausche dich mit Cryptomator-Nutzern aus: https://community.cryptomator.org -• Folge uns auf Mastodon @cryptomator@mastodon.online +• Folge uns auf Mastodon @cryptomator@mastodon.online • Like uns auf Facebook /Cryptomator --- diff --git a/fastlane/config/freemium/metadata/en-US/description.txt b/fastlane/config/freemium/metadata/en-US/description.txt index dffd0b232..31a24a3b7 100644 --- a/fastlane/config/freemium/metadata/en-US/description.txt +++ b/fastlane/config/freemium/metadata/en-US/description.txt @@ -33,7 +33,7 @@ CRYPTOMATOR COMMUNITY Join the Cryptomator Community and participate in the conversations with other Cryptomator users: https://community.cryptomator.org -• Follow us on Mastodon @cryptomator@mastodon.online +• Follow us on Mastodon @cryptomator@mastodon.online • Like us on Facebook /Cryptomator --- diff --git a/fastlane/config/premium/metadata/de-DE/description.txt b/fastlane/config/premium/metadata/de-DE/description.txt index 1061bfb3b..e4a4f49be 100644 --- a/fastlane/config/premium/metadata/de-DE/description.txt +++ b/fastlane/config/premium/metadata/de-DE/description.txt @@ -37,5 +37,5 @@ CRYPTOMATOR COMMUNITY Tritt der Cryptomator Community bei und tausche dich mit Cryptomator-Nutzern aus: https://community.cryptomator.org -• Folge uns auf Mastodon @cryptomator@mastodon.online +• Folge uns auf Mastodon @cryptomator@mastodon.online • Like uns auf Facebook /Cryptomator \ No newline at end of file diff --git a/fastlane/config/premium/metadata/en-US/description.txt b/fastlane/config/premium/metadata/en-US/description.txt index ec3e996e8..b006b87a0 100644 --- a/fastlane/config/premium/metadata/en-US/description.txt +++ b/fastlane/config/premium/metadata/en-US/description.txt @@ -37,5 +37,5 @@ CRYPTOMATOR COMMUNITY Join the Cryptomator Community and participate in the conversations with other Cryptomator users: https://community.cryptomator.org -• Follow us on Mastodon @cryptomator@mastodon.online +• Follow us on Mastodon @cryptomator@mastodon.online • Like us on Facebook /Cryptomator \ No newline at end of file From 9408af522f0f3dda9b1915263f993538f0f6445e Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Sat, 1 Feb 2025 21:52:13 +0100 Subject: [PATCH 04/13] Updated docs links --- Cryptomator/AddVault/AddVaultSuccessViewController.swift | 2 +- .../LocalVault/LocalFileSystemAuthenticationViewModel.swift | 2 +- Cryptomator/Settings/SettingsCoordinator.swift | 2 +- .../KeepUnlocked/KeepUnlockedSectionFooterViewModel.swift | 2 +- Cryptomator/VaultDetail/VaultDetailInfoFooterViewModel.swift | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cryptomator/AddVault/AddVaultSuccessViewController.swift b/Cryptomator/AddVault/AddVaultSuccessViewController.swift index 72fe3399a..da845e801 100644 --- a/Cryptomator/AddVault/AddVaultSuccessViewController.swift +++ b/Cryptomator/AddVault/AddVaultSuccessViewController.swift @@ -68,7 +68,7 @@ private class VaultSuccessFooterView: UITableViewHeaderFooterView { let text = NSMutableAttributedString(string: LocalizedString.getValue("addVault.success.footer"), attributes: [NSAttributedString.Key.foregroundColor: UIColor.secondaryLabel]) text.append(NSAttributedString(string: " ")) - let learnMoreLink = NSAttributedString(string: LocalizedString.getValue("common.footer.learnMore"), attributes: [NSAttributedString.Key.link: URL(string: "https://docs.cryptomator.org/en/latest/ios/access-vault/#enable-cryptomator-in-files-app")!]) + let learnMoreLink = NSAttributedString(string: LocalizedString.getValue("common.footer.learnMore"), attributes: [NSAttributedString.Key.link: URL(string: "https://docs.cryptomator.org/ios/access-vault/#enable-cryptomator-in-files-app")!]) text.append(learnMoreLink) textView.attributedText = text textView.isUserInteractionEnabled = true diff --git a/Cryptomator/AddVault/LocalVault/LocalFileSystemAuthenticationViewModel.swift b/Cryptomator/AddVault/LocalVault/LocalFileSystemAuthenticationViewModel.swift index 337e09a63..342face08 100644 --- a/Cryptomator/AddVault/LocalVault/LocalFileSystemAuthenticationViewModel.swift +++ b/Cryptomator/AddVault/LocalVault/LocalFileSystemAuthenticationViewModel.swift @@ -132,7 +132,7 @@ class LocalFileSystemAuthenticationInfoFooterViewModel: AttributedTextHeaderFoot let infoText = LocalizedString.getValue("localFileSystemAuthentication.info.footer") let text = NSMutableAttributedString(string: infoText) text.append(NSAttributedString(string: " ")) - let learnMoreLink = NSAttributedString(string: LocalizedString.getValue("common.footer.learnMore"), attributes: [NSAttributedString.Key.link: URL(string: "https://docs.cryptomator.org/en/latest/ios/cloud-management/#other-file-provider")!]) + let learnMoreLink = NSAttributedString(string: LocalizedString.getValue("common.footer.learnMore"), attributes: [NSAttributedString.Key.link: URL(string: "https://docs.cryptomator.org/ios/cloud-management/#other-file-provider")!]) text.append(learnMoreLink) super.init(attributedText: text) } diff --git a/Cryptomator/Settings/SettingsCoordinator.swift b/Cryptomator/Settings/SettingsCoordinator.swift index a2a3c5ba6..77094fb8d 100644 --- a/Cryptomator/Settings/SettingsCoordinator.swift +++ b/Cryptomator/Settings/SettingsCoordinator.swift @@ -70,7 +70,7 @@ class SettingsCoordinator: Coordinator { } func openShortcutsGuide() { - if let shortcutsGuideURL = URL(string: "https://docs.cryptomator.org/en/latest/ios/shortcuts-guide/") { + if let shortcutsGuideURL = URL(string: "https://docs.cryptomator.org/ios/shortcuts-guide/") { UIApplication.shared.open(shortcutsGuideURL) } } diff --git a/Cryptomator/VaultDetail/KeepUnlocked/KeepUnlockedSectionFooterViewModel.swift b/Cryptomator/VaultDetail/KeepUnlocked/KeepUnlockedSectionFooterViewModel.swift index 48ccdfe2e..355521884 100644 --- a/Cryptomator/VaultDetail/KeepUnlocked/KeepUnlockedSectionFooterViewModel.swift +++ b/Cryptomator/VaultDetail/KeepUnlocked/KeepUnlockedSectionFooterViewModel.swift @@ -37,7 +37,7 @@ class KeepUnlockedSectionFooterViewModel: BindableAttributedTextHeaderFooterView } let text = NSMutableAttributedString(string: infoText) text.append(NSAttributedString(string: " ")) - let learnMoreLink = NSAttributedString(string: LocalizedString.getValue("common.footer.learnMore"), attributes: [NSAttributedString.Key.link: URL(string: "https://docs.cryptomator.org/en/latest/ios/vault-management/#unlock-duration")!]) + let learnMoreLink = NSAttributedString(string: LocalizedString.getValue("common.footer.learnMore"), attributes: [NSAttributedString.Key.link: URL(string: "https://docs.cryptomator.org/ios/vault-management/#unlock-duration")!]) text.append(learnMoreLink) return text } diff --git a/Cryptomator/VaultDetail/VaultDetailInfoFooterViewModel.swift b/Cryptomator/VaultDetail/VaultDetailInfoFooterViewModel.swift index b2b8b2fe1..3fb3951eb 100644 --- a/Cryptomator/VaultDetail/VaultDetailInfoFooterViewModel.swift +++ b/Cryptomator/VaultDetail/VaultDetailInfoFooterViewModel.swift @@ -26,7 +26,7 @@ class VaultDetailInfoFooterViewModel: BindableAttributedTextHeaderFooterViewMode let infoText = loggedInText + LocalizedString.getValue("vaultDetail.info.footer.accessVault") let text = NSMutableAttributedString(string: infoText) text.append(NSAttributedString(string: " ")) - let learnMoreLink = NSAttributedString(string: LocalizedString.getValue("common.footer.learnMore"), attributes: [NSAttributedString.Key.link: URL(string: "https://docs.cryptomator.org/en/latest/ios/access-vault/#enable-cryptomator-in-files-app")!]) + let learnMoreLink = NSAttributedString(string: LocalizedString.getValue("common.footer.learnMore"), attributes: [NSAttributedString.Key.link: URL(string: "https://docs.cryptomator.org/ios/access-vault/#enable-cryptomator-in-files-app")!]) text.append(learnMoreLink) return text } From 6b3e79a4ee16836d7092eb9f25dc0459cc300ba2 Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Tue, 4 Feb 2025 14:12:37 +0100 Subject: [PATCH 05/13] Updated localizable string with positional specifiers --- SharedResources/en.lproj/Localizable.strings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SharedResources/en.lproj/Localizable.strings b/SharedResources/en.lproj/Localizable.strings index 6445a8fd8..9113aecab 100644 --- a/SharedResources/en.lproj/Localizable.strings +++ b/SharedResources/en.lproj/Localizable.strings @@ -284,7 +284,7 @@ "vaultDetail.removeVault.footer" = "This will only remove the vault from the vault list and not delete any encrypted files."; "vaultDetail.renameVault.progress" = "Renaming…"; "vaultDetail.unlocked.footer" = "Your vault is currently unlocked in the Files app."; -"vaultDetail.unlockVault.footer" = "Enter password for \"%@\" to store it in the iOS keychain and to enable %@."; +"vaultDetail.unlockVault.footer" = "Enter password for \"%1$@\" to store it in the iOS keychain and to enable %2$@."; "vaultList.header.title" = "Vaults"; "vaultList.emptyList.message" = "Tap here to add a vault"; From 482112a157d678063f3a2ce9b6c4bdaa6da49c10 Mon Sep 17 00:00:00 2001 From: Majid Achhoud Date: Thu, 6 Feb 2025 09:08:26 +0100 Subject: [PATCH 06/13] Improve Hub error handling and updates (#404) Co-authored-by: Tobias Hagemann --- .../UnlockSectionFooterViewModel.swift | 13 +++++++----- .../VaultDetail/VaultDetailViewModel.swift | 4 ++-- .../Hub/CryptomatorHubAuthenticator.swift | 12 +++++++++-- .../Hub/HubAuthenticationView.swift | 4 +++- .../Hub/HubAuthenticationViewModel.swift | 3 +++ .../HubDeviceRegisteredSuccessfullyView.swift | 19 ------------------ .../Hub/HubErrorWithRefreshView.swift | 20 +++++++++++++++++++ SharedResources/en.lproj/Localizable.strings | 5 +++-- 8 files changed, 49 insertions(+), 31 deletions(-) delete mode 100644 CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubDeviceRegisteredSuccessfullyView.swift create mode 100644 CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubErrorWithRefreshView.swift diff --git a/Cryptomator/VaultDetail/UnlockSectionFooterViewModel.swift b/Cryptomator/VaultDetail/UnlockSectionFooterViewModel.swift index db95fee78..891c222f7 100644 --- a/Cryptomator/VaultDetail/UnlockSectionFooterViewModel.swift +++ b/Cryptomator/VaultDetail/UnlockSectionFooterViewModel.swift @@ -6,6 +6,7 @@ // Copyright © 2021 Skymatic GmbH. All rights reserved. // +import CryptomatorCloudAccessCore import CryptomatorCommonCore import Foundation @@ -31,21 +32,23 @@ class UnlockSectionFooterViewModel: HeaderFooterViewModel { } var biometryTypeName: String? + var vaultInfo: VaultInfo - init(vaultUnlocked: Bool, biometricalUnlockEnabled: Bool, biometryTypeName: String?, keepUnlockedDuration: KeepUnlockedDuration) { + init(vaultUnlocked: Bool, biometricalUnlockEnabled: Bool, biometryTypeName: String?, keepUnlockedDuration: KeepUnlockedDuration, vaultInfo: VaultInfo) { self.vaultUnlocked = vaultUnlocked self.biometricalUnlockEnabled = biometricalUnlockEnabled self.biometryTypeName = biometryTypeName - let titleText = UnlockSectionFooterViewModel.getTitleText(vaultUnlocked: vaultUnlocked, biometricalUnlockEnabled: biometricalUnlockEnabled, biometryTypeName: biometryTypeName, keepUnlockedDuration: keepUnlockedDuration) + let titleText = UnlockSectionFooterViewModel.getTitleText(vaultUnlocked: vaultUnlocked, biometricalUnlockEnabled: biometricalUnlockEnabled, biometryTypeName: biometryTypeName, keepUnlockedDuration: keepUnlockedDuration, vaultInfo: vaultInfo) self.title = Bindable(titleText) self.keepUnlockedDuration = keepUnlockedDuration + self.vaultInfo = vaultInfo } private func updateTitle() { - title.value = UnlockSectionFooterViewModel.getTitleText(vaultUnlocked: vaultUnlocked, biometricalUnlockEnabled: biometricalUnlockEnabled, biometryTypeName: biometryTypeName, keepUnlockedDuration: keepUnlockedDuration) + title.value = UnlockSectionFooterViewModel.getTitleText(vaultUnlocked: vaultUnlocked, biometricalUnlockEnabled: biometricalUnlockEnabled, biometryTypeName: biometryTypeName, keepUnlockedDuration: keepUnlockedDuration, vaultInfo: vaultInfo) } - private static func getTitleText(vaultUnlocked: Bool, biometricalUnlockEnabled: Bool, biometryTypeName: String?, keepUnlockedDuration: KeepUnlockedDuration) -> String { + private static func getTitleText(vaultUnlocked: Bool, biometricalUnlockEnabled: Bool, biometryTypeName: String?, keepUnlockedDuration: KeepUnlockedDuration, vaultInfo: VaultInfo) -> String { let unlockedText: String if vaultUnlocked { unlockedText = LocalizedString.getValue("vaultDetail.unlocked.footer") @@ -62,7 +65,7 @@ class UnlockSectionFooterViewModel: HeaderFooterViewModel { keepUnlockedText = String(format: LocalizedString.getValue("vaultDetail.keepUnlocked.footer.limitedDuration"), keepUnlockedDuration.description ?? "") } var footerText = "\(unlockedText)\n\n\(keepUnlockedText)" - if let biometryTypeName = biometryTypeName { + if vaultInfo.vaultConfigType != .hub, let biometryTypeName = biometryTypeName { let biometricalUnlockText: String if biometricalUnlockEnabled { biometricalUnlockText = String(format: LocalizedString.getValue("vaultDetail.enabledBiometricalUnlock.footer"), biometryTypeName) diff --git a/Cryptomator/VaultDetail/VaultDetailViewModel.swift b/Cryptomator/VaultDetail/VaultDetailViewModel.swift index 0bc2872ae..934bed009 100644 --- a/Cryptomator/VaultDetail/VaultDetailViewModel.swift +++ b/Cryptomator/VaultDetail/VaultDetailViewModel.swift @@ -121,7 +121,7 @@ class VaultDetailViewModel: VaultDetailViewModelProtocol { private var lockSectionCells: [BindableTableViewCellViewModel] { var cells: [BindableTableViewCellViewModel] = [lockButton, keepUnlockedCellViewModel] - if let biometryTypeName = context.enrolledBiometricsAuthenticationName() { + if vaultInfo.vaultConfigType != .hub, let biometryTypeName = context.enrolledBiometricsAuthenticationName() { let switchCellViewModel = getSwitchCellViewModel(biometryTypeName: biometryTypeName) cells.append(switchCellViewModel) } @@ -146,7 +146,7 @@ class VaultDetailViewModel: VaultDetailViewModelProtocol { .lockingSection: unlockSectionFooterViewModel, .removeVaultSection: BaseHeaderFooterViewModel(title: LocalizedString.getValue("vaultDetail.removeVault.footer"))] - private lazy var unlockSectionFooterViewModel = UnlockSectionFooterViewModel(vaultUnlocked: vaultInfo.vaultIsUnlocked.value, biometricalUnlockEnabled: biometricalUnlockEnabled, biometryTypeName: context.enrolledBiometricsAuthenticationName(), keepUnlockedDuration: currentKeepUnlockedDuration.value) + private lazy var unlockSectionFooterViewModel = UnlockSectionFooterViewModel(vaultUnlocked: vaultInfo.vaultIsUnlocked.value, biometricalUnlockEnabled: biometricalUnlockEnabled, biometryTypeName: context.enrolledBiometricsAuthenticationName(), keepUnlockedDuration: currentKeepUnlockedDuration.value, vaultInfo: vaultInfo) private lazy var vaultInfoCellViewModel = BindableTableViewCellViewModel(title: vaultInfo.vaultName, detailTitle: vaultInfo.vaultPath.path, detailTitleTextColor: .secondaryLabel, image: UIImage(vaultIconFor: vaultInfo.cloudProviderType, state: .normal), selectionStyle: .none) private lazy var renameVaultCellViewModel = ButtonCellViewModel.createDisclosureButton(action: VaultDetailButtonAction.showRenameVault, title: LocalizedString.getValue("vaultDetail.button.renameVault"), detailTitle: vaultName) diff --git a/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/CryptomatorHubAuthenticator.swift b/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/CryptomatorHubAuthenticator.swift index 7347d8843..766f03ae3 100644 --- a/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/CryptomatorHubAuthenticator.swift +++ b/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/CryptomatorHubAuthenticator.swift @@ -20,6 +20,7 @@ public enum HubAuthenticationFlow { case needsDeviceRegistration case licenseExceeded case requiresAccountInitialization(at: URL) + case vaultArchived } public struct HubAuthenticationFlowSuccess { @@ -48,6 +49,7 @@ public class CryptomatorHubAuthenticator: HubDeviceRegistering, HubKeyReceiving public init() {} + // swiftlint:disable:next cyclomatic_complexity public func receiveKey(authState: OIDAuthState, vaultConfig: UnverifiedVaultConfig) async throws -> HubAuthenticationFlow { guard let hubConfig = vaultConfig.allegedHubConfig, let vaultBaseURL = getVaultBaseURL(from: vaultConfig) else { throw CryptomatorHubAuthenticatorError.invalidVaultConfig @@ -79,6 +81,8 @@ public class CryptomatorHubAuthenticator: HubDeviceRegistering, HubKeyReceiving return .requiresAccountInitialization(at: profileURL) case .legacyHubVersion: throw CryptomatorHubAuthenticatorError.incompatibleHubVersion + case .vaultArchived: + return .vaultArchived } let retrieveUserPrivateKeyResponse = try await getUserKey(apiBaseURL: apiBaseURL, authState: authState) @@ -240,8 +244,10 @@ public class CryptomatorHubAuthenticator: HubDeviceRegistering, HubKeyReceiving return .success(encryptedVaultKey: body, header: httpResponse?.allHeaderFields ?? [:]) case 402: return .licenseExceeded - case 403, 410: + case 403: return .accessNotGranted + case 410: + return .vaultArchived case 404: return .legacyHubVersion case 449: @@ -297,7 +303,7 @@ public class CryptomatorHubAuthenticator: HubDeviceRegistering, HubKeyReceiving private enum RetrieveVaultMasterkeyEncryptedForUserResponse { // 200 case success(encryptedVaultKey: String, header: [AnyHashable: Any]) - // 403, 410 + // 403 case accessNotGranted // 402 case licenseExceeded @@ -305,6 +311,8 @@ public class CryptomatorHubAuthenticator: HubDeviceRegistering, HubKeyReceiving case requiresAccountInitialization(at: URL) // 404 case legacyHubVersion + // 410 + case vaultArchived } private struct DeviceDto: Codable { diff --git a/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubAuthenticationView.swift b/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubAuthenticationView.swift index 77e3c2815..df5b18340 100644 --- a/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubAuthenticationView.swift +++ b/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubAuthenticationView.swift @@ -20,7 +20,9 @@ public struct HubAuthenticationView: View { onRegisterTap: { Task { await viewModel.register() }} ) case .accessNotGranted: - HubAccessNotGrantedView(onRefresh: { Task { await viewModel.refresh() }}) + CryptomatorErrorWithRefreshView(headerTitle: LocalizedString.getValue("hubAuthentication.accessNotGranted"), onRefresh: { Task { await viewModel.refresh() }}) + case .vaultArchived: + CryptomatorErrorWithRefreshView(headerTitle: LocalizedString.getValue("hubAuthentication.vaultArchived"), onRefresh: { Task { await viewModel.refresh() }}) case .licenseExceeded: CryptomatorErrorView(text: LocalizedString.getValue("hubAuthentication.licenseExceeded")) case let .error(description): diff --git a/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubAuthenticationViewModel.swift b/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubAuthenticationViewModel.swift index ee81e7354..98ef71ae6 100644 --- a/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubAuthenticationViewModel.swift +++ b/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubAuthenticationViewModel.swift @@ -32,6 +32,7 @@ public final class HubAuthenticationViewModel: ObservableObject { case licenseExceeded case deviceRegistration(DeviceRegistration) case error(description: String) + case vaultArchived } public enum DeviceRegistration: Equatable { @@ -108,6 +109,8 @@ public final class HubAuthenticationViewModel: ObservableObject { await setState(to: .licenseExceeded) case let .requiresAccountInitialization(profileURL): await delegate?.hubAuthenticationViewModelWantsToShowNeedsAccountInitAlert(profileURL: profileURL) + case .vaultArchived: + await setState(to: .vaultArchived) } } diff --git a/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubDeviceRegisteredSuccessfullyView.swift b/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubDeviceRegisteredSuccessfullyView.swift deleted file mode 100644 index c0328584f..000000000 --- a/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubDeviceRegisteredSuccessfullyView.swift +++ /dev/null @@ -1,19 +0,0 @@ -import SwiftUI - -struct HubAccessNotGrantedView: View { - var onRefresh: () -> Void - - var body: some View { - CryptomatorSimpleButtonView( - buttonTitle: LocalizedString.getValue("common.button.refresh"), - onButtonTap: onRefresh, - headerTitle: LocalizedString.getValue("hubAuthentication.accessNotGranted") - ) - } -} - -struct HubDeviceRegisteredSuccessfullyView_Previews: PreviewProvider { - static var previews: some View { - HubAccessNotGrantedView(onRefresh: {}) - } -} diff --git a/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubErrorWithRefreshView.swift b/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubErrorWithRefreshView.swift new file mode 100644 index 000000000..f8b3bd0a6 --- /dev/null +++ b/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubErrorWithRefreshView.swift @@ -0,0 +1,20 @@ +import SwiftUI + +struct CryptomatorErrorWithRefreshView: View { + var headerTitle: String + var onRefresh: () -> Void + + var body: some View { + CryptomatorSimpleButtonView( + buttonTitle: LocalizedString.getValue("common.button.refresh"), + onButtonTap: onRefresh, + headerTitle: headerTitle + ) + } +} + +struct CryptomatorErrorWithRefreshView_Previews: PreviewProvider { + static var previews: some View { + CryptomatorErrorWithRefreshView(headerTitle: "Example Header Title", onRefresh: {}) + } +} diff --git a/SharedResources/en.lproj/Localizable.strings b/SharedResources/en.lproj/Localizable.strings index 9113aecab..eaee2c62b 100644 --- a/SharedResources/en.lproj/Localizable.strings +++ b/SharedResources/en.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "No vault has been selected."; "hubAuthentication.title" = "Hub Vault"; -"hubAuthentication.accessNotGranted" = "Your device has not yet been authorized to access this vault. Ask the vault owner to authorize it."; +"hubAuthentication.accessNotGranted" = "You do not have permission to access this vault. Ask the vault owner to authorize you."; "hubAuthentication.licenseExceeded" = "Your Cryptomator Hub instance has an invalid license. Please inform a Hub administrator to upgrade or renew the license."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Device Name"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "This seems to be the first Hub access from this device. In order to identify it for access authorization, you need to name this device."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Your Account Key is required to login from new apps or browsers. It can be found in your profile."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Register Device Successful"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "To access the vault, your device needs to be authorized by the vault owner."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "To access the vault, the vault owner needs to grant you permission."; "hubAuthentication.requireAccountInit.alert.title" = "Action Required"; "hubAuthentication.requireAccountInit.alert.message" = "To proceed, please complete the steps required in your Hub user profile."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Go to Profile"; +"hubAuthentication.vaultArchived" = "This vault has been archived. Please ask the vault owner to unarchive it."; "intents.saveFile.missingFile" = "The provided file is not valid."; "intents.saveFile.invalidFolder" = "The provided folder is not valid."; From 217c4f98416ba0bb874a605a01ce726e53edfb70 Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Thu, 6 Feb 2025 09:22:55 +0100 Subject: [PATCH 07/13] Removed December 2024 sale promo --- Cryptomator/MainCoordinator.swift | 11 -- Cryptomator/Purchase/Cells/PurchaseCell.swift | 2 - .../Purchase/PurchaseCoordinator.swift | 2 - Cryptomator/Purchase/PurchaseViewModel.swift | 24 ---- Cryptomator/Purchase/UpgradeViewModel.swift | 2 - .../VaultList/VaultListViewController.swift | 103 ------------------ .../CryptomatorUserDefaults.swift | 10 -- .../Mocks/CryptomatorSettingsMock.swift | 3 - .../Purchase/PurchaseViewModelTests.swift | 3 - .../Purchase/UpgradeViewModelTests.swift | 2 - 10 files changed, 162 deletions(-) diff --git a/Cryptomator/MainCoordinator.swift b/Cryptomator/MainCoordinator.swift index f7f5bf63a..12c9a6db1 100644 --- a/Cryptomator/MainCoordinator.swift +++ b/Cryptomator/MainCoordinator.swift @@ -78,15 +78,6 @@ class MainCoordinator: NSObject, Coordinator, UINavigationControllerDelegate { rootViewController.showDetailViewController(detailNavigationController, sender: nil) } - // Temporarily added for December 2024 Sale - func showPurchase() { - let modalNavigationController = BaseNavigationController() - let child = PurchaseCoordinator(navigationController: modalNavigationController) - childCoordinators.append(child) - navigationController.topViewController?.present(modalNavigationController, animated: true) - child.start() - } - // MARK: - UINavigationControllerDelegate func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) { @@ -124,8 +115,6 @@ extension MainCoordinator: StoreObserverDelegate { switch transaction { case .fullVersion, .yearlySubscription: showFullVersionAlert() - // Temporarily added for December 2024 Sale - NotificationCenter.default.post(name: .purchasedFullVersionNotification, object: nil) case let .freeTrial(expiresOn): showTrialAlert(expirationDate: expiresOn) case .unknown: diff --git a/Cryptomator/Purchase/Cells/PurchaseCell.swift b/Cryptomator/Purchase/Cells/PurchaseCell.swift index 44b85bbb7..0e1548ce3 100644 --- a/Cryptomator/Purchase/Cells/PurchaseCell.swift +++ b/Cryptomator/Purchase/Cells/PurchaseCell.swift @@ -12,7 +12,6 @@ import UIKit struct PurchaseCellViewModel: Hashable { let productName: String - let productDetail: String? let price: String let purchaseDetail: String? let purchaseButtonViewModel = PurchaseButtonViewModel() @@ -37,7 +36,6 @@ class PurchaseCell: IAPCell { func configure(with viewModel: PurchaseCellViewModel) { productTitleLabel.text = viewModel.productName - productDetailLabel.text = viewModel.productDetail accessory.button.setTitle(viewModel.price, for: .normal) accessory.detailLabel.text = viewModel.purchaseDetail accessory.configure(with: viewModel.purchaseButtonViewModel) diff --git a/Cryptomator/Purchase/PurchaseCoordinator.swift b/Cryptomator/Purchase/PurchaseCoordinator.swift index 7982d311b..95a4ba42c 100644 --- a/Cryptomator/Purchase/PurchaseCoordinator.swift +++ b/Cryptomator/Purchase/PurchaseCoordinator.swift @@ -54,8 +54,6 @@ class PurchaseCoordinator: Coordinator { } self.unlockedPro() } - // Temporarily added for December 2024 Sale - NotificationCenter.default.post(name: .purchasedFullVersionNotification, object: nil) } func handleRestoreResult(_ result: RestoreTransactionsResult) { diff --git a/Cryptomator/Purchase/PurchaseViewModel.swift b/Cryptomator/Purchase/PurchaseViewModel.swift index eddacd025..017200381 100644 --- a/Cryptomator/Purchase/PurchaseViewModel.swift +++ b/Cryptomator/Purchase/PurchaseViewModel.swift @@ -33,23 +33,6 @@ class PurchaseViewModel: BaseIAPViewModel, ProductFetching { return LocalizedString.getValue("purchase.title") } - // Temporarily added for December 2024 Sale - override var infoText: NSAttributedString? { - let currentYear = Calendar.current.component(.year, from: Date()) - let currentMonth = Calendar.current.component(.month, from: Date()) - if currentYear == 2024 && currentMonth == 12 { - return NSAttributedString( - string: "*Note: The discount amount may vary by region.", - attributes: [ - .font: UIFont.preferredFont(forTextStyle: .footnote), - .foregroundColor: UIColor.secondaryLabel - ] - ) - } else { - return nil - } - } - private let cryptomatorSettings: CryptomatorSettings init(storeManager: IAPStore = StoreManager.shared, iapManager: IAPManager = StoreObserver.shared, cryptomatorSettings: CryptomatorSettings = CryptomatorUserDefaults.shared, minimumDisplayTime: TimeInterval = 1.0) { @@ -73,7 +56,6 @@ class PurchaseViewModel: BaseIAPViewModel, ProductFetching { cells.append(.trialCell(TrialCellViewModel(expirationDate: trialExpirationDate))) } else { cells.append(.purchaseCell(PurchaseCellViewModel(productName: LocalizedString.getValue("purchase.product.trial"), - productDetail: nil, price: LocalizedString.getValue("purchase.product.pricing.free"), purchaseDetail: LocalizedString.getValue("purchase.product.trial.duration"), productIdentifier: .thirtyDayTrial))) @@ -83,7 +65,6 @@ class PurchaseViewModel: BaseIAPViewModel, ProductFetching { private func addSubscriptionItem() { if let product = products[.yearlySubscription], let localizedPrice = product.localizedPrice { let viewModel = PurchaseCellViewModel(productName: LocalizedString.getValue("purchase.product.yearlySubscription"), - productDetail: nil, price: localizedPrice, purchaseDetail: LocalizedString.getValue("purchase.product.yearlySubscription.duration"), productIdentifier: .yearlySubscription) @@ -93,12 +74,7 @@ class PurchaseViewModel: BaseIAPViewModel, ProductFetching { private func addLifetimeLicenseItem() { if let product = products[.fullVersion], let localizedPrice = product.localizedPrice { - // Temporarily added for December 2024 Sale - let currentYear = Calendar.current.component(.year, from: Date()) - let currentMonth = Calendar.current.component(.month, from: Date()) - let productDetail = currentYear == 2024 && currentMonth == 12 ? "🎁 33%* off in December" : nil let viewModel = PurchaseCellViewModel(productName: LocalizedString.getValue("purchase.product.lifetimeLicense"), - productDetail: productDetail, price: localizedPrice, purchaseDetail: LocalizedString.getValue("purchase.product.lifetimeLicense.duration"), productIdentifier: .fullVersion) diff --git a/Cryptomator/Purchase/UpgradeViewModel.swift b/Cryptomator/Purchase/UpgradeViewModel.swift index 9bb43dc16..f31614017 100644 --- a/Cryptomator/Purchase/UpgradeViewModel.swift +++ b/Cryptomator/Purchase/UpgradeViewModel.swift @@ -34,7 +34,6 @@ class UpgradeViewModel: BaseIAPViewModel, ProductFetching { func addFreeUpgradeItem() { guard products[.freeUpgrade] != nil else { return } let viewModel = PurchaseCellViewModel(productName: LocalizedString.getValue("purchase.product.freeUpgrade"), - productDetail: nil, price: LocalizedString.getValue("purchase.product.pricing.free"), purchaseDetail: nil, productIdentifier: .freeUpgrade) @@ -44,7 +43,6 @@ class UpgradeViewModel: BaseIAPViewModel, ProductFetching { func addPaidUpgradeItem() { if let product = products[.paidUpgrade], let localizedPrice = product.localizedPrice { let viewModel = PurchaseCellViewModel(productName: LocalizedString.getValue("purchase.product.donateAndUpgrade"), - productDetail: nil, price: localizedPrice, purchaseDetail: LocalizedString.getValue("purchase.product.lifetimeLicense.duration"), productIdentifier: .paidUpgrade) diff --git a/Cryptomator/VaultList/VaultListViewController.swift b/Cryptomator/VaultList/VaultListViewController.swift index e3fa0c0a4..c8ae235e9 100644 --- a/Cryptomator/VaultList/VaultListViewController.swift +++ b/Cryptomator/VaultList/VaultListViewController.swift @@ -19,12 +19,6 @@ class VaultListViewController: ListViewController { private let viewModel: VaultListViewModelProtocol private var willEnterForegroundObserver: NSObjectProtocol? @Dependency(\.fullVersionChecker) private var fullVersionChecker - @Dependency(\.cryptomatorSettings) private var cryptomatorSettings - - #if !ALWAYS_PREMIUM - private var bannerView: UIView? - private var fullVersionPurchasedObserver: NSObjectProtocol? - #endif init(with viewModel: VaultListViewModelProtocol) { self.viewModel = viewModel @@ -55,13 +49,6 @@ class VaultListViewController: ListViewController { DDLogError("Refresh vault lock states failed with error: \(error)") } } - - #if !ALWAYS_PREMIUM - fullVersionPurchasedObserver = NotificationCenter.default.addObserver(forName: .purchasedFullVersionNotification, object: nil, queue: .main) { [weak self] _ in - self?.dismissBanner() - } - checkAndShowBanner() - #endif } override func viewWillAppear(_ animated: Bool) { @@ -121,94 +108,4 @@ class VaultListViewController: ListViewController { coordinator?.showVaultDetail(for: vaultCellViewModel.vault) } } - - // MARK: - Discount Banner - - #if !ALWAYS_PREMIUM - private func checkAndShowBanner() { - let currentYear = Calendar.current.component(.year, from: Date()) - let currentMonth = Calendar.current.component(.month, from: Date()) - if currentYear == 2024, currentMonth == 12, !(cryptomatorSettings.fullVersionUnlocked || cryptomatorSettings.hasRunningSubscription), !cryptomatorSettings.december2024BannerDismissed { - showBanner() - } - } - - private func showBanner() { - let banner = UIView() - banner.backgroundColor = UIColor.cryptomatorPrimary - banner.translatesAutoresizingMaskIntoConstraints = false - banner.layer.cornerRadius = 12 - banner.layer.masksToBounds = true - - let emojiLabel = UILabel() - emojiLabel.text = "🎁" - emojiLabel.translatesAutoresizingMaskIntoConstraints = false - emojiLabel.setContentHuggingPriority(.required, for: .horizontal) - emojiLabel.setContentCompressionResistancePriority(.required, for: .horizontal) - - let textLabel = UILabel() - textLabel.text = "Lifetime License is 33%* off in December!" - textLabel.textColor = .white - textLabel.font = UIFont.preferredFont(forTextStyle: .footnote) - textLabel.adjustsFontSizeToFitWidth = true - textLabel.minimumScaleFactor = 0.5 - textLabel.numberOfLines = 2 - textLabel.translatesAutoresizingMaskIntoConstraints = false - - let dismissButton = UIButton(type: .close) - dismissButton.addTarget(self, action: #selector(dismissBanner), for: .touchUpInside) - dismissButton.translatesAutoresizingMaskIntoConstraints = false - dismissButton.setContentHuggingPriority(.required, for: .horizontal) - dismissButton.setContentCompressionResistancePriority(.required, for: .horizontal) - - banner.addSubview(emojiLabel) - banner.addSubview(textLabel) - banner.addSubview(dismissButton) - - NSLayoutConstraint.activate([ - emojiLabel.leadingAnchor.constraint(equalTo: banner.leadingAnchor, constant: 16), - emojiLabel.centerYAnchor.constraint(equalTo: banner.centerYAnchor), - - textLabel.leadingAnchor.constraint(equalTo: emojiLabel.trailingAnchor, constant: 8), - textLabel.centerYAnchor.constraint(equalTo: banner.centerYAnchor), - - dismissButton.leadingAnchor.constraint(equalTo: textLabel.trailingAnchor, constant: 8), - dismissButton.trailingAnchor.constraint(equalTo: banner.trailingAnchor, constant: -16), - dismissButton.centerYAnchor.constraint(equalTo: banner.centerYAnchor) - ]) - - let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(bannerTapped)) - banner.addGestureRecognizer(tapGestureRecognizer) - - view.addSubview(banner) - - NSLayoutConstraint.activate([ - banner.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16), - banner.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16), - banner.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -16), - banner.centerXAnchor.constraint(equalTo: view.centerXAnchor), - banner.heightAnchor.constraint(equalToConstant: 50) - ]) - - bannerView = banner - } - - @objc private func dismissBanner() { - UIView.animate(withDuration: 0.3, animations: { - self.bannerView?.alpha = 0 - }, completion: { _ in - self.bannerView?.removeFromSuperview() - self.bannerView = nil - }) - CryptomatorUserDefaults.shared.december2024BannerDismissed = true - } - - @objc private func bannerTapped() { - coordinator?.showPurchase() - } - #endif -} - -extension Notification.Name { - static let purchasedFullVersionNotification = Notification.Name("PurchasedFullVersionNotification") } diff --git a/CryptomatorCommon/Sources/CryptomatorCommonCore/CryptomatorUserDefaults.swift b/CryptomatorCommon/Sources/CryptomatorCommonCore/CryptomatorUserDefaults.swift index 27729b740..cb8b81081 100644 --- a/CryptomatorCommon/Sources/CryptomatorCommonCore/CryptomatorUserDefaults.swift +++ b/CryptomatorCommon/Sources/CryptomatorCommonCore/CryptomatorUserDefaults.swift @@ -15,9 +15,6 @@ public protocol CryptomatorSettings { var trialExpirationDate: Date? { get set } var fullVersionUnlocked: Bool { get set } var hasRunningSubscription: Bool { get set } - #if !ALWAYS_PREMIUM - var december2024BannerDismissed: Bool { get set } - #endif } private enum CryptomatorSettingsKey: DependencyKey { @@ -111,11 +108,4 @@ extension CryptomatorUserDefaults: CryptomatorSettings { get { read() ?? false } set { write(value: newValue) } } - - #if !ALWAYS_PREMIUM - public var december2024BannerDismissed: Bool { - get { read() ?? false } - set { write(value: newValue) } - } - #endif } diff --git a/CryptomatorCommon/Sources/CryptomatorCommonCore/Mocks/CryptomatorSettingsMock.swift b/CryptomatorCommon/Sources/CryptomatorCommonCore/Mocks/CryptomatorSettingsMock.swift index 46b63600b..4d0d9d049 100644 --- a/CryptomatorCommon/Sources/CryptomatorCommonCore/Mocks/CryptomatorSettingsMock.swift +++ b/CryptomatorCommon/Sources/CryptomatorCommonCore/Mocks/CryptomatorSettingsMock.swift @@ -14,8 +14,5 @@ class CryptomatorSettingsMock: CryptomatorSettings { var debugModeEnabled: Bool = false var fullVersionUnlocked: Bool = false var hasRunningSubscription: Bool = false - #if !ALWAYS_PREMIUM - var december2024BannerDismissed: Bool = false - #endif } #endif diff --git a/CryptomatorTests/Purchase/PurchaseViewModelTests.swift b/CryptomatorTests/Purchase/PurchaseViewModelTests.swift index 20a57547c..7177aa911 100644 --- a/CryptomatorTests/Purchase/PurchaseViewModelTests.swift +++ b/CryptomatorTests/Purchase/PurchaseViewModelTests.swift @@ -153,7 +153,6 @@ class PurchaseViewModelTests: IAPViewModelTestCase { private var purchaseTrialCell: Item { return .purchaseCell(.init(productName: LocalizedString.getValue("purchase.product.trial"), - productDetail: nil, price: LocalizedString.getValue("purchase.product.pricing.free"), purchaseDetail: LocalizedString.getValue("purchase.product.trial.duration"), productIdentifier: .thirtyDayTrial)) @@ -161,7 +160,6 @@ class PurchaseViewModelTests: IAPViewModelTestCase { private var yearlySubscriptionCell: Item { return .purchaseCell(.init(productName: LocalizedString.getValue("purchase.product.yearlySubscription"), - productDetail: nil, price: "$5.99", purchaseDetail: LocalizedString.getValue("purchase.product.yearlySubscription.duration"), productIdentifier: .yearlySubscription)) @@ -169,7 +167,6 @@ class PurchaseViewModelTests: IAPViewModelTestCase { private var lifetimeLicenseCell: Item { return .purchaseCell(.init(productName: LocalizedString.getValue("purchase.product.lifetimeLicense"), - productDetail: nil, price: "$11.99", purchaseDetail: LocalizedString.getValue("purchase.product.lifetimeLicense.duration"), productIdentifier: .fullVersion)) diff --git a/CryptomatorTests/Purchase/UpgradeViewModelTests.swift b/CryptomatorTests/Purchase/UpgradeViewModelTests.swift index 8f6323b18..f791d737a 100644 --- a/CryptomatorTests/Purchase/UpgradeViewModelTests.swift +++ b/CryptomatorTests/Purchase/UpgradeViewModelTests.swift @@ -77,7 +77,6 @@ class UpgradeViewModelTests: IAPViewModelTestCase { private var freeUpgradeCell: Item { return .purchaseCell(.init(productName: LocalizedString.getValue("purchase.product.freeUpgrade"), - productDetail: nil, price: LocalizedString.getValue("purchase.product.pricing.free"), purchaseDetail: nil, productIdentifier: .freeUpgrade)) @@ -85,7 +84,6 @@ class UpgradeViewModelTests: IAPViewModelTestCase { private var paidUpgradeCell: Item { return .purchaseCell(.init(productName: LocalizedString.getValue("purchase.product.donateAndUpgrade"), - productDetail: nil, price: "$1.99", purchaseDetail: LocalizedString.getValue("purchase.product.lifetimeLicense.duration"), productIdentifier: .paidUpgrade)) From 751f7a0fd8121337e58c6aa95b3ead7114be02f6 Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Thu, 6 Feb 2025 14:51:07 +0100 Subject: [PATCH 08/13] Refactored button view layout and updated tint color in RootViewController (for FileProviderExtensionUI) --- .../CryptomatorSimpleButtonView.swift | 20 +++++++++---------- .../RootViewController.swift | 1 + 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/CryptomatorCommon/Sources/CryptomatorCommonCore/CryptomatorSimpleButtonView.swift b/CryptomatorCommon/Sources/CryptomatorCommonCore/CryptomatorSimpleButtonView.swift index 79bee3c53..801345168 100644 --- a/CryptomatorCommon/Sources/CryptomatorCommonCore/CryptomatorSimpleButtonView.swift +++ b/CryptomatorCommon/Sources/CryptomatorCommonCore/CryptomatorSimpleButtonView.swift @@ -12,18 +12,16 @@ struct CryptomatorSimpleButtonView: View { onButtonTap() } } header: { - HStack { - Spacer() - VStack(alignment: .center, spacing: 20) { - Image("bot-vault") - Text(headerTitle) - .textCase(.none) - .foregroundColor(.primary) - .font(.body) - } - .padding(.bottom, 12) - Spacer() + VStack(alignment: .center, spacing: 20) { + Image("bot-vault") + Text(headerTitle) + .textCase(.none) + .foregroundColor(.primary) + .font(.body) + .multilineTextAlignment(.center) } + .frame(maxWidth: .infinity) + .padding(.bottom, 20) } } .setListBackgroundColor(.cryptomatorBackground) diff --git a/FileProviderExtensionUI/RootViewController.swift b/FileProviderExtensionUI/RootViewController.swift index 2df85a802..ccdb4bf79 100644 --- a/FileProviderExtensionUI/RootViewController.swift +++ b/FileProviderExtensionUI/RootViewController.swift @@ -49,6 +49,7 @@ class RootViewController: FPUIActionExtensionViewController { override func viewDidLoad() { super.viewDidLoad() + view.tintColor = .cryptomatorPrimary RootViewController.oneTimeSetup() } From b8ba04f4e2721e6094fd0182d6627c72f8045ec4 Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Thu, 6 Feb 2025 14:51:30 +0100 Subject: [PATCH 09/13] Removed unused HubLoginView --- .../Hub/HubLoginView.swift | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubLoginView.swift diff --git a/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubLoginView.swift b/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubLoginView.swift deleted file mode 100644 index 86dffcd3b..000000000 --- a/CryptomatorCommon/Sources/CryptomatorCommonCore/Hub/HubLoginView.swift +++ /dev/null @@ -1,19 +0,0 @@ -import SwiftUI - -struct HubLoginView: View { - var onLogin: () -> Void - - var body: some View { - CryptomatorSimpleButtonView( - buttonTitle: "Login", - onButtonTap: onLogin, - headerTitle: "Login to unlock your vault" - ) - } -} - -struct HubLoginView_Previews: PreviewProvider { - static var previews: some View { - HubLoginView(onLogin: {}) - } -} From fd256c8b918661729b3334bb4cbeb14c79eb624b Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Tue, 11 Feb 2025 11:11:36 +0100 Subject: [PATCH 10/13] Hide move actions for Hub vaults Fixes #406 --- Cryptomator/VaultDetail/VaultDetailViewModel.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Cryptomator/VaultDetail/VaultDetailViewModel.swift b/Cryptomator/VaultDetail/VaultDetailViewModel.swift index 934bed009..f493c5a1c 100644 --- a/Cryptomator/VaultDetail/VaultDetailViewModel.swift +++ b/Cryptomator/VaultDetail/VaultDetailViewModel.swift @@ -270,7 +270,9 @@ class VaultDetailViewModel: VaultDetailViewModelProtocol { } private func vaultIsEligibleToMove() -> Bool { - if case CloudProviderType.localFileSystem = vaultInfo.cloudProviderType { + if vaultInfo.vaultConfigType == .hub { + return false + } else if case CloudProviderType.localFileSystem = vaultInfo.cloudProviderType { return false } return vaultInfo.vaultPath != CloudPath("/") From 415db5f66b99855de00e380e86c22b417919d935 Mon Sep 17 00:00:00 2001 From: Cryptobot Date: Tue, 11 Feb 2025 11:29:08 +0100 Subject: [PATCH 11/13] New Crowdin updates (#399) [ci skip] --- CryptomatorIntents/fi.lproj/Intents.strings | 2 +- CryptomatorIntents/id.lproj/Intents.strings | 2 +- CryptomatorIntents/ko.lproj/Intents.strings | 14 ++ CryptomatorIntents/lv.lproj/Intents.strings | 6 + SharedResources/ar.lproj/Localizable.strings | 4 +- SharedResources/ba.lproj/Localizable.strings | 3 - SharedResources/be.lproj/Localizable.strings | 2 - SharedResources/bg.lproj/Localizable.strings | 2 - SharedResources/ca.lproj/Localizable.strings | 3 - SharedResources/cs.lproj/Localizable.strings | 3 - SharedResources/da.lproj/Localizable.strings | 4 +- SharedResources/de.lproj/Localizable.strings | 7 +- SharedResources/el.lproj/Localizable.strings | 7 +- SharedResources/es.lproj/Localizable.strings | 7 +- SharedResources/fi.lproj/Localizable.strings | 2 - SharedResources/fil.lproj/Localizable.strings | 3 - SharedResources/fr.lproj/Localizable.strings | 7 +- SharedResources/he.lproj/Localizable.strings | 3 - SharedResources/hi.lproj/Localizable.strings | 1 - SharedResources/hr.lproj/Localizable.strings | 1 - SharedResources/hu.lproj/Localizable.strings | 2 - SharedResources/id.lproj/Localizable.strings | 3 - SharedResources/it.lproj/Localizable.strings | 7 +- SharedResources/ja.lproj/Localizable.strings | 4 +- SharedResources/ko.lproj/Localizable.strings | 165 +++++++++++++++--- SharedResources/lv.lproj/Localizable.strings | 56 +++++- SharedResources/nb.lproj/Localizable.strings | 3 - SharedResources/nl.lproj/Localizable.strings | 7 +- SharedResources/pl.lproj/Localizable.strings | 7 +- .../pt-BR.lproj/Localizable.strings | 7 +- SharedResources/pt.lproj/Localizable.strings | 7 +- SharedResources/ro.lproj/Localizable.strings | 6 +- SharedResources/ru.lproj/Localizable.strings | 7 +- SharedResources/sk.lproj/Localizable.strings | 3 - SharedResources/sl.lproj/Localizable.strings | 3 - SharedResources/sv.lproj/Localizable.strings | 7 +- .../sw-TZ.lproj/Localizable.strings | 3 - SharedResources/th.lproj/Localizable.strings | 2 - SharedResources/tr.lproj/Localizable.strings | 7 +- SharedResources/ug.lproj/Localizable.strings | 1 - SharedResources/uk.lproj/Localizable.strings | 4 +- SharedResources/vi.lproj/Localizable.strings | 2 - .../zh-HK.lproj/Localizable.strings | 3 - .../zh-Hans.lproj/Localizable.strings | 3 - .../zh-Hant.lproj/Localizable.strings | 7 +- 45 files changed, 273 insertions(+), 136 deletions(-) diff --git a/CryptomatorIntents/fi.lproj/Intents.strings b/CryptomatorIntents/fi.lproj/Intents.strings index c369e1822..3cc2195a9 100644 --- a/CryptomatorIntents/fi.lproj/Intents.strings +++ b/CryptomatorIntents/fi.lproj/Intents.strings @@ -1 +1 @@ -"common.vault" = "Vault"; +"common.vault" = "Holvi"; diff --git a/CryptomatorIntents/id.lproj/Intents.strings b/CryptomatorIntents/id.lproj/Intents.strings index ceed77a23..e77039459 100644 --- a/CryptomatorIntents/id.lproj/Intents.strings +++ b/CryptomatorIntents/id.lproj/Intents.strings @@ -2,7 +2,7 @@ "common.false" = "salah"; "common.folder" = "Folder"; "common.true" = "benar"; -"common.vault" = "Vault"; +"common.vault" = "Brangkas"; "getFolderIntent.description" = "Mengembalikan objek folder dari path dan vault yang telah diberikan."; "getFolderIntent.path" = "Path"; diff --git a/CryptomatorIntents/ko.lproj/Intents.strings b/CryptomatorIntents/ko.lproj/Intents.strings index d2cf2bf7c..0a050c95f 100644 --- a/CryptomatorIntents/ko.lproj/Intents.strings +++ b/CryptomatorIntents/ko.lproj/Intents.strings @@ -1,12 +1,26 @@ "common.failureReason" = "실패 사유"; +"common.false" = "거짓"; "common.folder" = "폴더"; +"common.true" = "참"; "common.vault" = "Vault"; + +"getFolderIntent.description" = "주어진 Vault 내부의 주어진 위치에 대한 폴더 객체를 반환합니다."; "getFolderIntent.path" = "경로"; +"getFolderIntent.text" = "${vault} 내부의 ${path}에 위치한 폴더 반환"; "getFolderIntent.title" = "폴더 열기"; +"isUnlockedIntent.description" = "주어진 Vault가 잠금 해제되었는지 아닌지를 반환합니다."; +"isUnlockedIntent.title" = "잠금 해제됨"; + +"isVaultLockedIntent.title" = "Vault 잠금 해제됨"; +"isVaultUnlockedIntent.text" = "${vault} 잠금 해제됨?"; + "lockVaultIntent.description" = "해당 vault를 잠급니다."; "lockVaultIntent.text" = "${vault} 잠금"; "lockVaultIntent.title" = "Vault 잠그기"; + +"openVaultIntent.description" = "파일 앱에서 해당 Vault를 엽니다."; +"openVaultIntent.text" = "파일 앱에서 ${vault} 열기"; "openVaultIntent.title" = "Vault 열기"; "saveFileIntent.description" = "파일을 vault에 저장합니다."; diff --git a/CryptomatorIntents/lv.lproj/Intents.strings b/CryptomatorIntents/lv.lproj/Intents.strings index e0b508c76..47cac5764 100644 --- a/CryptomatorIntents/lv.lproj/Intents.strings +++ b/CryptomatorIntents/lv.lproj/Intents.strings @@ -1 +1,7 @@ +"common.failureReason" = "Neizdošanās Iemesls"; "common.vault" = "Glabātava"; +"getFolderIntent.text" = "Iegūt mapi, kura atrodas ${path} glabātavā ${vault}"; +"saveFileIntent.file" = "Datne"; + +"vaultFolder.displayName" = "Glabātavas mape"; +"vaultFolder.vaultIdentifier" = "Glabātavas identifikators"; diff --git a/SharedResources/ar.lproj/Localizable.strings b/SharedResources/ar.lproj/Localizable.strings index 2a02b9ae9..7682fcf2c 100644 --- a/SharedResources/ar.lproj/Localizable.strings +++ b/SharedResources/ar.lproj/Localizable.strings @@ -101,6 +101,7 @@ "fileProvider.error.biometricalAuthWrongPassword.message" = "كلمة المرور التي تم حفظها لـ %@ خاطئة. الرجاء المحاولة مرة أخرى وإدخال كلمة المرور الخاصة بك لإعادة تمكين %@."; "fileProvider.error.defaultLock.title" = "يلزم فك القفل"; "fileProvider.error.defaultLock.message" = "للوصول إلى محتويات خزانتك وعرضها، يجب فتح قفلها."; +"fileprovider.error.unauthorized.text" = "تم رفض الوصول إلى مخزن \"%@\" الخاص بك. افتح التطبيق الرئيسي للتحقق من اتصالك وإعادة المصادقة إذا لزم الأمر."; "fileProvider.error.unlockButton" = "افتح"; "fileProvider.clearFileFromCache.title" = "مسح الملف من ذاكرة التخزين المؤقت"; "fileProvider.clearFileFromCache.message" = "هذا يزيل الملف المحلي من جهازك فقط ولا يحذف الملف من السحابة."; @@ -115,13 +116,11 @@ "getFolderIntent.error.noVaultSelected" = "لم يتم تحديد أي خزانة."; "hubAuthentication.title" = "خزانة Hub"; -"hubAuthentication.accessNotGranted" = "لم يتم بعد منح الإذن لجهازك بالوصول إلى هذا المخزن. اطلب من مالك المخزن أن يأذن بذلك."; "hubAuthentication.licenseExceeded" = "نموذج المركز Cryptomator الخاص بك لديه ترخيص غير صالح. الرجاء إبلاغ مسؤول مركز لترقية أو تجديد الترخيص."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "اسم الجهاز"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "يبدو أن هذا هو الوصول الأول إلى Hub من هذا الجهاز. لتحديده لأغراض تفويض الوصول، تحتاج إلى تسمية هذا الجهاز."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "مفتاح الحساب الخاص بك مطلوب لتسجيل الدخول من تطبيقات أو متصفحات جديدة. يمكن العثور عليه في ملفك الشخصي."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "تم تسجيل الجهاز بنجاح"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "للدخول إلى الخزينة، يحتاج جهازك إلى إذن من مالك الخزينة."; "hubAuthentication.requireAccountInit.alert.title" = "إجراء مطلوب"; "hubAuthentication.requireAccountInit.alert.message" = "للمتابعة، يرجى إكمال الخطوات المطلوبة في ملف المستخدم الخاص بك في Hub."; "hubAuthentication.requireAccountInit.alert.actionButton" = "اذهب إلى الملف الشخصي"; @@ -283,7 +282,6 @@ "vaultDetail.removeVault.footer" = "سيؤدي هذا فقط إلى إزالة الخزانة من قائمة الخزائن ولن يحذف أي ملفات مشفرة."; "vaultDetail.renameVault.progress" = "إعادة تسمية…"; "vaultDetail.unlocked.footer" = "خزانتك غير مقفلة حاليًا في تطبيق الملفات."; -"vaultDetail.unlockVault.footer" = "أدخل كلمة المرور ل \"%@\" لتخزينها في سلسلة مفاتيح iOS وتمكين %@."; "vaultList.header.title" = "المخازن"; "vaultList.emptyList.message" = "انقر هنا لإضافة مخزن"; diff --git a/SharedResources/ba.lproj/Localizable.strings b/SharedResources/ba.lproj/Localizable.strings index 0e23544b7..d927c587a 100644 --- a/SharedResources/ba.lproj/Localizable.strings +++ b/SharedResources/ba.lproj/Localizable.strings @@ -115,13 +115,11 @@ "getFolderIntent.error.noVaultSelected" = "Һаҡлағыс һайланмаған."; "hubAuthentication.title" = "Һаҡлағыс хабы"; -"hubAuthentication.accessNotGranted" = "Һеҙҙең йыһаз әлегә был һаҡлағысҡа инеү хоҡуғына эйә түгел. Һаҡлағыс хужаһынан рөхсәт һорағыҙ."; "hubAuthentication.licenseExceeded" = "Һеҙҙең Cryptomator хабығыҙ ғәмәлдән тыш рөхсәтнамәгә эйә. Рөхсәтнамәне яңыртыу йәки оҙайтыу өсөн Хаб администраторына хәбәр итегеҙ."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Йыһаз исеме"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Был, күрәһең, был ҡоролманан Хабҡа тәү инеү ваҡыты. Инеүҙе рөхсәт итеү өсөн йыһазды асыҡлаусы исем атарға кәрәк."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Яңы ҡушымталар йәки браузерҙарҙан инеү өсөн Һеҙҙең иҫәп-хисап асҡысы кәрәк. Уны профилегеҙҙә табырға мөмкин."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Йыһазды теркәү уңышлы булды"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Һаҡлағысҡа инеү өсөн һаҡлағыс хужаһы йыһазығыҙға инеү рөхсәте бирергә тейеш."; "hubAuthentication.requireAccountInit.alert.title" = "Кәрәкле эш-хәрәкәт"; "hubAuthentication.requireAccountInit.alert.message" = "Артабан барыр өсөн, Hub ҡулланыусылар профилендә кәрәкле аҙымдарҙы тамамлағыҙ."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Профилгә күс"; @@ -283,7 +281,6 @@ "vaultDetail.removeVault.footer" = "Был һаҡлағысты исемлектән генә алып ташлай һәм шифрланған файлдарҙы юймай."; "vaultDetail.renameVault.progress" = "Исемен үҙгәртеү…"; "vaultDetail.unlocked.footer" = "Әлеге ваҡытта һаҡлағыс Файлдар ҡушымтаһында асылған."; -"vaultDetail.unlockVault.footer" = "\"%@\" серһүҙен iOS асҡыс сылбырында һаҡлау һәм %@ ҡулланыу өсөн серһүҙҙе яҙығыҙ."; "vaultList.header.title" = "Һаҡлағыстар"; "vaultList.emptyList.message" = "Һаҡлағыс өҫтәү өсөн бында баҫығыҙ"; diff --git a/SharedResources/be.lproj/Localizable.strings b/SharedResources/be.lproj/Localizable.strings index 75256fb31..6d0a1be7c 100644 --- a/SharedResources/be.lproj/Localizable.strings +++ b/SharedResources/be.lproj/Localizable.strings @@ -20,10 +20,8 @@ "addVault.createNewVault.chooseCloud.header" = "Дзе мусіць Cryptomator захоўваць зашыфраваныя файлы з тваёй скарбніцы?"; "addVault.openExistingVault.title" = "Адчыніць існуючую скарбніцу"; "fileProvider.error.unlockButton" = "Адамкнуць"; -"hubAuthentication.accessNotGranted" = "Тваёй прыладзе ў дадзены момант не дазволена мець доступ да гэтай скрабніцы. Запытайся ўладальніка скрабніцы за дазволам."; "hubAuthentication.licenseExceeded" = "Твая інстанцыя Cryptomator Hub мае некарэктную ліцэнзію. Калі ласка, паведамі адміністратару Hub пра гэта, каб абнавіць альбо аднавіць ліцэнзію."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Назва прылады"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Каб атрымаць доступ да скарбніцы, твая прылада мусіць быць спраўджанай уладальнікам скарбніцы."; "keepUnlocked.alert.title" = "Ці замкнуць скарбніцу?"; "keepUnlocked.alert.confirm" = "Пацвердзіць і адразу замкнуць"; diff --git a/SharedResources/bg.lproj/Localizable.strings b/SharedResources/bg.lproj/Localizable.strings index 5dce12828..ecff465ed 100644 --- a/SharedResources/bg.lproj/Localizable.strings +++ b/SharedResources/bg.lproj/Localizable.strings @@ -24,13 +24,11 @@ "fileProvider.error.unlockButton" = "Отключване"; "hubAuthentication.title" = "Хранилище на Hub"; -"hubAuthentication.accessNotGranted" = "Устройството не е упълномощено за достъп до това хранилище. Поискайте достъп от собственика."; "hubAuthentication.licenseExceeded" = "Лиценза на екземпляра на Концентратора на Криптоматор който вие използвате е лиценз. Информирайте администратора на Концентратора, за да поднови или надгради лиценза."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Име на устройството"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Изглежда, че това е първи достъп до Hub от това устройство. За да го разпознаете при разрешаване на достъпа, трябва да му дадете име."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Вашият ключ за профила е необходим при вход от нови приложения или мрежови четци. Може да бъде намерен в профила."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Устройството е регистрирано"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "За да получи достъп до хранилището, устройството трябва да бъде упълномощено от собственика на хранилището."; "hubAuthentication.requireAccountInit.alert.title" = "Необходимо е действие"; "hubAuthentication.requireAccountInit.alert.message" = "За да продължите завършете необходимите стъпки в потребителския профил в Hub."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Към профила"; diff --git a/SharedResources/ca.lproj/Localizable.strings b/SharedResources/ca.lproj/Localizable.strings index dfa810429..76b9d22a0 100644 --- a/SharedResources/ca.lproj/Localizable.strings +++ b/SharedResources/ca.lproj/Localizable.strings @@ -115,13 +115,11 @@ "getFolderIntent.error.noVaultSelected" = "No s'ha seleccionat cap caixa forta."; "hubAuthentication.title" = "Caixa forta de Hub"; -"hubAuthentication.accessNotGranted" = "El vostre dispositiu no ha estat encara autoritzat a accedir a aquesta caixa forta. Demaneu autorització al propietari."; "hubAuthentication.licenseExceeded" = "Aquest Cryptomator Hub no té una llicència vàlida. Informa si us plau a l'administrador perquè actualitzi o renovi la llicència."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Nom del dispositiu"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Sembla que és el primer accés al Hub des d'aquest dispositiu. Per identificar-lo i poder autoritzar l'accés heu de posar nom a aquest dispositiu."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Cal la vostra Account Key per a iniciar sessió des d'una aplicació o navegador nous. La trobareu al vostre perfil."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Registre de dispositiu correcte"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Per a accedir a la caixa forta, el vostre dispositiu ha de ser autoritzat pel propietari de la caixa."; "hubAuthentication.requireAccountInit.alert.title" = "Acció necessària"; "hubAuthentication.requireAccountInit.alert.message" = "Per a continuar, si us plau, seguiu els passos necessaris en el vostre perfil d'usuari de Hub."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Vés al perfil"; @@ -283,7 +281,6 @@ "vaultDetail.removeVault.footer" = "Això només eliminarà la caixa forta de la llista de caixes fortes però no esborrarà cap fitxer encriptat."; "vaultDetail.renameVault.progress" = "S'està canviant el nom…"; "vaultDetail.unlocked.footer" = "La vostra caixa forta ara està desblocada en l'app Files."; -"vaultDetail.unlockVault.footer" = "Introduïu la paraula clau per \"%@\" per desar-la en el clauer d'iOS i per habilitar %@."; "vaultList.header.title" = "Caixes fortes"; "vaultList.emptyList.message" = "Feu clic aquí per afegir una caixa forta"; diff --git a/SharedResources/cs.lproj/Localizable.strings b/SharedResources/cs.lproj/Localizable.strings index ce57b41aa..31e81073e 100644 --- a/SharedResources/cs.lproj/Localizable.strings +++ b/SharedResources/cs.lproj/Localizable.strings @@ -115,12 +115,10 @@ "getFolderIntent.error.noVaultSelected" = "Nebyl vybrán žádný trezor."; "hubAuthentication.title" = "Hub trezor"; -"hubAuthentication.accessNotGranted" = "Vaše zařízení dosud nebylo oprávněno k přístupu k tomuto trezoru. Požádejte vlastníka trezoru, aby jej autorizoval."; "hubAuthentication.licenseExceeded" = "Vaše instance Cryptomator Hub má neplatnou licenci. Informujte prosím správce Hubu o aktualizaci nebo obnovení licence."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Název zařízení"; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Váš Account Key je vyžadován k přihlášení z nových aplikací nebo prohlížečů. Naleznete jej ve vašem profilu."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Registrace zařízení úspěšná"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Pro přístup k trezoru musí být vaše zařízení autorizováno majitelem trezoru."; "hubAuthentication.requireAccountInit.alert.title" = "Požadována akce"; "hubAuthentication.requireAccountInit.alert.message" = "Chcete-li pokračovat, dokončete prosím požadované kroky ve vašem uživatelském profilu Hubu."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Jít na profil"; @@ -282,7 +280,6 @@ "vaultDetail.removeVault.footer" = "Tímto odstraníte pouze trezor ze seznamu trezorů a neodstraníte žádné šifrované soubory."; "vaultDetail.renameVault.progress" = "Přejmenování…"; "vaultDetail.unlocked.footer" = "Váš trezor je v současné době odemčen v aplikaci Soubory."; -"vaultDetail.unlockVault.footer" = "Zadejte heslo pro \"%@\" pro uložení do iOS klíčenky a pro povolení %@."; "vaultList.header.title" = "Trezory"; "vaultList.emptyList.message" = "Klikněte zde pro přidání nového trezoru"; diff --git a/SharedResources/da.lproj/Localizable.strings b/SharedResources/da.lproj/Localizable.strings index ebf214eb0..8ff8d6c49 100644 --- a/SharedResources/da.lproj/Localizable.strings +++ b/SharedResources/da.lproj/Localizable.strings @@ -101,6 +101,7 @@ "fileProvider.error.biometricalAuthWrongPassword.message" = "Den adgangskode, der er gemt for %@ er forkert. Prøv venligst igen og indtast din adgangskode for at genaktivere %@."; "fileProvider.error.defaultLock.title" = "Oplåsning kræves"; "fileProvider.error.defaultLock.message" = "For at tilgå, og vise, indholdet af din boks, skal den være låst op."; +"fileprovider.error.unauthorized.text" = "Adgang til din boks \"%@\" blev nægtet. Åben hovedappen for at tjekke din forbindelse, og gen-godkend hvis nødvendigt."; "fileProvider.error.unlockButton" = "Lås op"; "fileProvider.clearFileFromCache.title" = "Ryd fil fra cache"; "fileProvider.clearFileFromCache.message" = "Dette fjerner kun den lokale fil fra din enhed og sletter ikke filen i skyen."; @@ -115,13 +116,11 @@ "getFolderIntent.error.noVaultSelected" = "Ingen boks er valgt."; "hubAuthentication.title" = "Hub Boks"; -"hubAuthentication.accessNotGranted" = "Din enhed er endnu ikke blevet godkendt til at få adgang til denne boks. Spørg boks-ejeren om godkendelse."; "hubAuthentication.licenseExceeded" = "Din Cryptomator Hub har en ugyldig licens. Få venligst en Hub administrator til at opgradere eller forny licensen."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Enheds-navn"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Det ser ud til at dette er første gang denne enhed tilgår Hub. For at kunne identificere den for adgangstilladelse, skal du navngive denne enhed."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Din kontonøgle er påkrævet til at logge ind fra nye apps eller browsere. Den kan findes i din profil."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Registrering af Enhed Lykkedes"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "For at tilgå boksen, skal din enhed godkendes af boks-ejeren."; "hubAuthentication.requireAccountInit.alert.title" = "Handling Påkrævet"; "hubAuthentication.requireAccountInit.alert.message" = "For at fortsætte, skal du fuldføre de nødvendige trin i din Hub brugerprofil."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Gå til Profil"; @@ -283,7 +282,6 @@ "vaultDetail.removeVault.footer" = "Dette vil kun fjerne boksen fra listen, og sletter ikke nogen krypterede filer."; "vaultDetail.renameVault.progress" = "Omdøber…"; "vaultDetail.unlocked.footer" = "Din boks er i øjeblikket låst op, i Filer appen."; -"vaultDetail.unlockVault.footer" = "Indtast adgangskode for \"%@\" for at gemme den i iOS-nøgleringen og for at aktivere %@."; "vaultList.header.title" = "Bokse"; "vaultList.emptyList.message" = "Tryk her for at tilføje en boks"; diff --git a/SharedResources/de.lproj/Localizable.strings b/SharedResources/de.lproj/Localizable.strings index bfb7917cf..62e41c726 100644 --- a/SharedResources/de.lproj/Localizable.strings +++ b/SharedResources/de.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "Es wurde kein Tresor ausgewählt."; "hubAuthentication.title" = "Hubtresor"; -"hubAuthentication.accessNotGranted" = "Dein Gerät wurde noch nicht für den Zugriff auf diesen Tresor autorisiert. Bitte den Tresorbesitzer, dein Gerät zu autorisieren."; +"hubAuthentication.accessNotGranted" = "Du hast keine Berechtigung, auf diesen Tresor zuzugreifen. Bitte den Tresor-Eigentümer, dich zu autorisieren."; "hubAuthentication.licenseExceeded" = "Die Lizenz deiner Cryptomator-Hub-Instanz ist ungültig. Bitte informiere deinen Hub-Administrator, um die Lizenz zu erweitern oder zu erneuern."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Gerätename"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Dies scheint der erste Hub-Zugriff von diesem Gerät zu sein. Um es für die Zugriffsberechtigung zu identifizieren, musst du diesem Gerät einen Namen geben."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Um sich von neuen Apps oder Browsern aus anzumelden, ist dein Account Key erforderlich. Er befindet sich in deinem Profil."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Gerät erfolgreich registriert"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Für Zugriff auf den Tresor muss dein Gerät vom Tresorbesitzer autorisiert werden."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Um auf den Tresor zugreifen zu können, muss der Tresor-Eigentümer die Berechtigung dazu erteilen."; "hubAuthentication.requireAccountInit.alert.title" = "Handlung erforderlich"; "hubAuthentication.requireAccountInit.alert.message" = "Schließe bitte die erforderlichen Schritte in deinem Hub-Benutzerprofil ab, um fortzufahren."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Zum Profil"; +"hubAuthentication.vaultArchived" = "Dieser Tresor wurde archiviert. Bitte frage den Tresor-Eigentümer, um ihn zu dearchivieren."; "intents.saveFile.missingFile" = "Die bereitgestellte Datei ist nicht gültig."; "intents.saveFile.invalidFolder" = "Der angegebene Ordner ist ungültig."; @@ -284,7 +285,7 @@ "vaultDetail.removeVault.footer" = "Dadurch wird nur der Tresor aus der Tresorliste entfernt und keine verschlüsselten Daten gelöscht."; "vaultDetail.renameVault.progress" = "Tresor wird umbenannt …"; "vaultDetail.unlocked.footer" = "Dein Tresor ist in der App „Dateien“ zurzeit entsperrt."; -"vaultDetail.unlockVault.footer" = "Gib das Passwort für „%@“ ein, um es im iOS-Schlüsselbund zu speichern und %@ zu aktivieren."; +"vaultDetail.unlockVault.footer" = "Gib das Passwort für „%1$@“ ein, um es im iOS-Schlüsselbund zu speichern und %2$@ zu aktivieren."; "vaultList.header.title" = "Tresore"; "vaultList.emptyList.message" = "Tipp hier, um einen Tresor hinzuzufügen"; diff --git a/SharedResources/el.lproj/Localizable.strings b/SharedResources/el.lproj/Localizable.strings index 8de53b4d1..972bc4b20 100644 --- a/SharedResources/el.lproj/Localizable.strings +++ b/SharedResources/el.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "Δεν έχει επιλεγεί κρύπτη."; "hubAuthentication.title" = "Κρύπτη Hub"; -"hubAuthentication.accessNotGranted" = "Η συσκευή σας δεν έχει ακόμη εξουσιοδοτηθεί να έχει πρόσβαση σε αυτή την κρύπτη. Ζητήστε από τον κάτοχο της κρύπτης να την εξουσιοδοτήσει."; +"hubAuthentication.accessNotGranted" = "Δεν έχετε άδεια πρόσβασης σε αυτή την κρύπτη. Ζητήστε από τον ιδιοκτήτη της κρύπτης να σας εξουσιοδοτήσει."; "hubAuthentication.licenseExceeded" = "Η συνεδρία σας στο Cryptomator Hub έχει μη έγκυρη άδεια χρήσης. Ενημερώστε έναν διαχειριστή του Hub για να αναβαθμίσει ή να ανανεώσει την άδεια χρήσης."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Όνομα Συσκευής"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Αυτή φαίνεται να είναι η πρώτη πρόσβαση στο Hub από αυτήν τη συσκευή. Για να την αναγνωρίσετε για εξουσιοδότηση πρόσβασης, πρέπει να ονομάσετε αυτήν τη συσκευή."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Το Κλειδί Λογαριασμού σας απαιτείται για να συνδεθείτε από νέες εφαρμογές ή προγράμματα περιήγησης. Μπορείτε να το βρείτε στο προφίλ σας."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Επιτυχής Εγγραφή Συσκευής"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Για να αποκτήσετε πρόσβαση στην κρύπτη, η συσκευή σας πρέπει να είναι εξουσιοδοτημένη από τον κάτοχο της κρύπτης."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Για να αποκτήσετε πρόσβαση στην κρύπτη, ο κάτοχος της κρύπτης πρέπει να σας χορηγήσει άδεια."; "hubAuthentication.requireAccountInit.alert.title" = "Απαιτείται Ενέργεια"; "hubAuthentication.requireAccountInit.alert.message" = "Για να συνεχίσετε, παρακαλούμε συμπληρώστε τα βήματα που απαιτούνται στο προφίλ χρήστη Hub σας."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Πηγαίνετε στο Προφίλ"; +"hubAuthentication.vaultArchived" = "Αυτή η κρύπτη έχει αρχειοθετηθεί. Ζητήστε από τον κάτοχο της κρύπτης να το αποαρχειοθετήσει."; "intents.saveFile.missingFile" = "Το παρεχόμενο αρχείο δεν είναι έγκυρο."; "intents.saveFile.invalidFolder" = "Ο παρεχόμενος φάκελος δεν είναι έγκυρος."; @@ -284,7 +285,7 @@ "vaultDetail.removeVault.footer" = "Αυτό θα αφαιρέσει μόνο την κρύπτη από τη λίστα κρύπτης και δεν θα διαγράψει κρυπτογραφημένα αρχεία."; "vaultDetail.renameVault.progress" = "Μετονομασία…"; "vaultDetail.unlocked.footer" = "Η κρύπτη σας είναι ξεκλειδωμένη αυτή τη στιγμή στην εφαρμογή Αρχείων."; -"vaultDetail.unlockVault.footer" = "Εισάγετε τον κωδικό πρόσβασης για το \"%@\" για να τον αποθηκεύσετε στο iOS keychain και για να ενεργοποιήσετε %@."; +"vaultDetail.unlockVault.footer" = "Εισάγετε τον κωδικό πρόσβασης για \"%1$@\" για να το αποθηκεύσετε στο iOS keychain και για να ενεργοποιήσετε %2$@."; "vaultList.header.title" = "Κρύπτες"; "vaultList.emptyList.message" = "Πατήστε εδώ για να προσθέσετε μια κρύπτη"; diff --git a/SharedResources/es.lproj/Localizable.strings b/SharedResources/es.lproj/Localizable.strings index bc58e72fa..eead6ac6d 100644 --- a/SharedResources/es.lproj/Localizable.strings +++ b/SharedResources/es.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "No se ha seleccionado una bóveda."; "hubAuthentication.title" = "Bóveda de Hub"; -"hubAuthentication.accessNotGranted" = "Su dispositivo aún no ha sido autorizado para acceder a esta bóveda. Pídale al propietario de la bóveda que lo autorice."; +"hubAuthentication.accessNotGranted" = "No tiene autorización para acceder a esta bóveda. Pídale al propietario de la bóveda que lo autorice."; "hubAuthentication.licenseExceeded" = "Su instancia del Hub de Cryptomator tiene una licencia inválida. Informe a un administrador del Hub para actualizar o renovar la licencia."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Nombre del dispositivo"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Este parece ser el primer acceso al Hub desde este dispositivo. Para identificarlo y autorizar el acceso, necesita nombrar este dispositivo."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Se requiere su clave de cuenta para iniciar sesión desde nuevas aplicaciones o navegadores. Puede encontrarse en su perfil."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Registro del dispositivo exitoso"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Para acceder a la bóveda, su dispositivo debe ser autorizado por el propietario de la bóveda."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Para acceder a la bóveda, el propietario de la bóveda necesita concederle permiso."; "hubAuthentication.requireAccountInit.alert.title" = "Acción requerida"; "hubAuthentication.requireAccountInit.alert.message" = "Para continuar, complete los pasos necesarios en su perfil de usuario de Hub."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Ir al Perfil"; +"hubAuthentication.vaultArchived" = "Esta bóveda ha sido archivada. Por favor, pida al propietario de la bóveda que la desarchive."; "intents.saveFile.missingFile" = "El archivo proporcionado es inválido."; "intents.saveFile.invalidFolder" = "La carpeta proporcionada es inválida."; @@ -284,7 +285,7 @@ "vaultDetail.removeVault.footer" = "Esto solo eliminará la bóveda de la lista de bóvedas y no eliminará ningún archivo cifrado."; "vaultDetail.renameVault.progress" = "Renombrando…"; "vaultDetail.unlocked.footer" = "Su bóveda está actualmente desbloqueada en la aplicación Archivos."; -"vaultDetail.unlockVault.footer" = "Ingrese la contraseña para \"%@\" para guardarla en el llavero de iOS y para habilitar %@."; +"vaultDetail.unlockVault.footer" = "Ingrese la contraseña de \"%1$@\" para guardarla en el llavero de iOS y para habilitar %2$@."; "vaultList.header.title" = "Bóvedas"; "vaultList.emptyList.message" = "Pulse aquí para añadir una bóveda"; diff --git a/SharedResources/fi.lproj/Localizable.strings b/SharedResources/fi.lproj/Localizable.strings index 0d35d69aa..00197c350 100644 --- a/SharedResources/fi.lproj/Localizable.strings +++ b/SharedResources/fi.lproj/Localizable.strings @@ -65,10 +65,8 @@ "fileProvider.onboarding.button.openCryptomator" = "Avaa Cryptomator"; "fileProvider.error.biometricalAuthCanceled.title" = "Avaus peruutettu"; "fileProvider.error.unlockButton" = "Avaa"; -"hubAuthentication.accessNotGranted" = "Laitteellasi ei ole pääsyvaltuutusta tähän holviin. Pyydä holvin omistajaa lisäämän valtuutus laitteellesi."; "hubAuthentication.licenseExceeded" = "Cryptomator Hub:illasi ei ole voimassa olevaa lisenssiä. Ole hyvä ja ilmoita Hubin järjestelmänvalvojalle lisenssin päivittämiseksi tai sen uusimiseksi."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Laitteen Nimi"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Käyttääksesi holvia, holvin omistajan on valtuutettava laitteesi."; "unlockVault.button.unlock" = "Avaa"; "unlockVault.password.footer" = "Syötä holvin \"%@\" salasana."; diff --git a/SharedResources/fil.lproj/Localizable.strings b/SharedResources/fil.lproj/Localizable.strings index 768307faf..55c8afa67 100644 --- a/SharedResources/fil.lproj/Localizable.strings +++ b/SharedResources/fil.lproj/Localizable.strings @@ -115,13 +115,11 @@ "getFolderIntent.error.noVaultSelected" = "Walang vault na napili."; "hubAuthentication.title" = "Hub Vault"; -"hubAuthentication.accessNotGranted" = "Hindi pa pinahihintulutan ang iyong device na i-access ang vault na ito. Hilingin sa may-ari ng vault na pahintulutan ito."; "hubAuthentication.licenseExceeded" = "Ang iyong Cryptomator Hub instance ay may di-wastong lisensya. Mangyaring ipagbigay-alam sa administrator ng Hub na mag-upgrade o mag-renew ng lisensya."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Pangalan ng device"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Mukhang ito ang unang access sa Hub mula sa device na ito. Upang matukoy ito para sa awtorisasyon sa pag-access, kailangan mong pangalanan ang device na ito."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Ang iyong Account Key ay kailangan para mag login galing sa bagong apps o browser. Mahahanap mo ito sa iyong profile."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Matagumpay ang pag register ng device"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Para ma-access ang vault, kailangang pahintulutan ng may-ari ng vault ang iyong device."; "hubAuthentication.requireAccountInit.alert.title" = "Kinakailangan ang pagkilos"; "hubAuthentication.requireAccountInit.alert.message" = "Upang magpatuloy, mangyaring kumpletuhin ang mga hakbang na kinakailangan sa iyong Hub user profile."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Pumunta sa Profile"; @@ -283,7 +281,6 @@ "vaultDetail.removeVault.footer" = "Aalisin lang nito ang vault sa listahan ng vault at hindi tatanggalin ang anumang naka-encrypt na file."; "vaultDetail.renameVault.progress" = "Pinapalitan ang pangalan…"; "vaultDetail.unlocked.footer" = "Kasalukuyang naka-unlock ang iyong vault sa Files app."; -"vaultDetail.unlockVault.footer" = "Ilagay ang password para sa \"%@\" para iimbak ito sa iOS keychain at para paganahin ang %@."; "vaultList.header.title" = "Mga Vault"; "vaultList.emptyList.message" = "Mag-tap dito para magdagdag ng vault"; diff --git a/SharedResources/fr.lproj/Localizable.strings b/SharedResources/fr.lproj/Localizable.strings index 28a28c427..759820883 100644 --- a/SharedResources/fr.lproj/Localizable.strings +++ b/SharedResources/fr.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "Aucun coffre n'a été sélectionné."; "hubAuthentication.title" = "Coffre dans Hub"; -"hubAuthentication.accessNotGranted" = "Votre appareil n'a pas encore été autorisé à accéder à ce coffre-fort. Demandez au propriétaire du coffre-fort de l'autoriser."; +"hubAuthentication.accessNotGranted" = "Vous n'avez pas la permission d'accéder à ce coffre. Demandez au propriétaire du coffre de vous y autoriser."; "hubAuthentication.licenseExceeded" = "Votre instance Cryptomator Hub a une licence invalide. Veuillez informer un administrateur Hub pour la mettre à niveau ou la renouveler."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Nom de l'appareil"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Il semble que ce soit le premier accès au Hub à partir de cet appareil. Afin de l'identifier pour l'autorisation d'accès, vous devez nommer cet appareil."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Votre clé de compte est requise pour vous connecter depuis de nouvelles applications ou de nouveaux navigateurs. Elle se trouve dans votre profil."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Enregistrement de l'appareil réussi"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Pour accéder au coffre-fort, votre appareil doit être autorisé par le propriétaire du coffre-fort."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Pour accéder au coffre, le propriétaire du coffre doit vous en accorder la permission."; "hubAuthentication.requireAccountInit.alert.title" = "Action requise"; "hubAuthentication.requireAccountInit.alert.message" = "Pour continuer, veuillez compléter les étapes requises dans votre profil d'utilisateur Hub."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Aller au profil"; +"hubAuthentication.vaultArchived" = "Ce coffre a été archivé. Veuillez demander au propriétaire du coffre de le désarchiver."; "intents.saveFile.missingFile" = "Le fichier fourni n'est pas valide."; "intents.saveFile.invalidFolder" = "Le dossier fourni n'est pas valide."; @@ -284,7 +285,7 @@ "vaultDetail.removeVault.footer" = "Cela ne supprimera que le coffre de la liste des coffres et ne supprimera aucun fichier chiffré."; "vaultDetail.renameVault.progress" = "Renommage…"; "vaultDetail.unlocked.footer" = "Votre coffre est actuellement déverrouillé dans l'application Fichiers."; -"vaultDetail.unlockVault.footer" = "Entrez le mot de passe pour \"%@\" pour le stocker dans le porte-clés iOS et pour activer %@."; +"vaultDetail.unlockVault.footer" = "Entrez le mot de passe de \"%1$@\" pour le stocker dans le Trousseau iOS et activer %2$@."; "vaultList.header.title" = "Coffres"; "vaultList.emptyList.message" = "Appuyez ici pour ajouter un coffre"; diff --git a/SharedResources/he.lproj/Localizable.strings b/SharedResources/he.lproj/Localizable.strings index 2528c08cf..046f7a665 100644 --- a/SharedResources/he.lproj/Localizable.strings +++ b/SharedResources/he.lproj/Localizable.strings @@ -111,10 +111,8 @@ "getFolderIntent.error.missingPath" = "לא סופק נתיב. נא ספק נתיב תקין שממנו יש להחזיר תיקיה."; "getFolderIntent.error.noVaultSelected" = "לא נבחר קובץ vault."; -"hubAuthentication.accessNotGranted" = "המכשיר שלך טרם אושר לגשת לכספת הזאת. יש לבקש אישור גישה מבעל הכספת."; "hubAuthentication.licenseExceeded" = "הרישיון שמותקן במופע ה- Cryptomator האב שלך אינו תקף. אנא ידע את מנהל ההאב שלך לשדרג או לחדש את הרישיון."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "שם מכשיר"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "כדי לגשת לכספת, המכשיר שלך צריך לקבל הרשאה על ידי בעלי הכספת."; "intents.saveFile.missingFile" = "הקובץ שסופק אינו תקין."; "intents.saveFile.invalidFolder" = "התיקייה שנבחרה איננה תקינה."; @@ -273,7 +271,6 @@ "vaultDetail.removeVault.footer" = "זה רק יסיר את הכספת מרשימת הכספות ולא ימחק קבצים מוצפנים."; "vaultDetail.renameVault.progress" = "משנה שם…"; "vaultDetail.unlocked.footer" = "הכספת שלך כרגע לא נעולה בישום Files."; -"vaultDetail.unlockVault.footer" = "הקש סיסמה עבור ״%@״ לשמירתה בצרור המפתחות של iOS ולהפעלת %@."; "vaultList.header.title" = "כספות"; "vaultList.emptyList.message" = "לחץ כאן להוספת כספת"; diff --git a/SharedResources/hi.lproj/Localizable.strings b/SharedResources/hi.lproj/Localizable.strings index 0cb39e650..a939f65e7 100644 --- a/SharedResources/hi.lproj/Localizable.strings +++ b/SharedResources/hi.lproj/Localizable.strings @@ -145,7 +145,6 @@ "vaultDetail.locked.footer" = "आपका कक्ष अभी बंध है।"; "vaultDetail.removeVault.footer" = "यह केवल कक्ष का नाम कक्ष-तालिका से हटा देगा। आपके कूट दस्तावेज नहीं मिटेंगे।"; "vaultDetail.unlocked.footer" = "आपका कक्ष अभी \"फ़ाइल एप\" में खुला है।"; -"vaultDetail.unlockVault.footer" = "\"%@\" के कूट शब्द को iOS कूट शृंखला में संग्रह करने के लिए और %@ संचालित करने के लिए कूट शब्द भरें।"; "vaultList.header.title" = "कक्षों का नाम"; "vaultList.emptyList.message" = "कक्ष जोड़ने के लिए यहाँ दबाएँ"; diff --git a/SharedResources/hr.lproj/Localizable.strings b/SharedResources/hr.lproj/Localizable.strings index ef69f4e98..857e8e549 100644 --- a/SharedResources/hr.lproj/Localizable.strings +++ b/SharedResources/hr.lproj/Localizable.strings @@ -266,7 +266,6 @@ "vaultDetail.removeVault.footer" = "Ovo će samo ukloniti trezor s popisa trezora i neće izbrisati šifrirane datoteke."; "vaultDetail.renameVault.progress" = "Preimenovanje…"; "vaultDetail.unlocked.footer" = "Vaš trezor je trenutno otključan u Files aplikaciji."; -"vaultDetail.unlockVault.footer" = "Unesite lozinku za \"%@\" da biste ju pohraniti u privjesak za ključeve iOS-a i omogućiti %@."; "vaultList.header.title" = "Trezori"; "vaultList.emptyList.message" = "Dodirnite ovdje za dodavanje trezora"; diff --git a/SharedResources/hu.lproj/Localizable.strings b/SharedResources/hu.lproj/Localizable.strings index 8c56d712a..174b97d82 100644 --- a/SharedResources/hu.lproj/Localizable.strings +++ b/SharedResources/hu.lproj/Localizable.strings @@ -114,11 +114,9 @@ "getFolderIntent.error.noVaultSelected" = "Nincs széf kiválasztva."; "hubAuthentication.title" = "Hub széf"; -"hubAuthentication.accessNotGranted" = "Eszköze még nem kapott engedélyt ehhez a széfhez. Kérje a széf tulajdonosát, hogy engedélyezze a hozzáférést."; "hubAuthentication.licenseExceeded" = "Az Ön Cryptomator Hub példánya érvénytelen licenccel rendelkezik. Kérem, értesítsen egy Hub rendszergazdát hogy frissítse vagy újítsa meg a licencet."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Készülék neve"; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Az eszköz regisztrációja sikeres"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "A széf hozzáféréséhez a széf tulajdonosának hitelesítenie kell az eszközét."; "intents.saveFile.missingFile" = "A megadott fájl érvénytelen."; "intents.saveFile.invalidFolder" = "A megadott mappa érvénytelen."; diff --git a/SharedResources/id.lproj/Localizable.strings b/SharedResources/id.lproj/Localizable.strings index e4c92412f..74948e844 100644 --- a/SharedResources/id.lproj/Localizable.strings +++ b/SharedResources/id.lproj/Localizable.strings @@ -116,13 +116,11 @@ "getFolderIntent.error.noVaultSelected" = "Tidak ada vault yang dipilih."; "hubAuthentication.title" = "Hub Vault"; -"hubAuthentication.accessNotGranted" = "Perangkat Anda belum diizinkan mengakses vault ini. Minta pemilik vault untuk mengizinkannya."; "hubAuthentication.licenseExceeded" = "Contoh Cryptomator Hub Anda memiliki lisensi yang tidak valid. Mohon informasikan kepada administrator Hub untuk meningkatkan atau memperbarui lisensi."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Nama Perangkat"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Tampaknya ini adalah akses Hub pertama dari perangkat ini. Untuk mengidentifikasi otorisasi akses ini, Anda perlu memberi nama untuk perangkat ini."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Kunci Akun Anda diperlukan untuk masuk dari aplikasi atau browser baru. Kunci dapat ditemukan di profil Anda."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Berhasil Mendaftarkan Perangkat"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Untuk mengakses vault perangkat Anda harus diotorisasi oleh pemilik vault."; "hubAuthentication.requireAccountInit.alert.title" = "Diperlukan Tindakan"; "hubAuthentication.requireAccountInit.alert.message" = "Untuk melanjutkan, silakan lengkapi langkah-langkah yang diperlukan di profil pengguna Hub Anda."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Buka Profil"; @@ -284,7 +282,6 @@ "vaultDetail.removeVault.footer" = "Hanya menghapus vault dari daftar vault dan tidak menghapus file terenkripsi yang ada."; "vaultDetail.renameVault.progress" = "Mengubah nama…"; "vaultDetail.unlocked.footer" = "Vault Anda saat ini tidak terkunci di aplikasi File."; -"vaultDetail.unlockVault.footer" = "Masukkan kata sandi untuk \"%@\" untuk mengaktifkan dan menyimpannya di iOS keychain %@."; "vaultList.header.title" = "Vault"; "vaultList.emptyList.message" = "Ketuk di sini untuk menambahkan vault"; diff --git a/SharedResources/it.lproj/Localizable.strings b/SharedResources/it.lproj/Localizable.strings index abd840d25..3548ae4da 100644 --- a/SharedResources/it.lproj/Localizable.strings +++ b/SharedResources/it.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "Nessuna cassaforte è stata selezionata."; "hubAuthentication.title" = "Centrale delle Casseforti"; -"hubAuthentication.accessNotGranted" = "Il tuo dispositivo non è ancora stato autorizzato ad accedere a questa cassaforte. Chiedi al proprietario della cassaforte di autorizzarlo."; +"hubAuthentication.accessNotGranted" = "Non hai l'autorizzazione per accedere a questa cassaforte. Chiedi al proprietario di autorizzarti."; "hubAuthentication.licenseExceeded" = "La tua istanza Cryptomator Hub ha una licenza non valida. Si prega di informare un amministratore Hub per aggiornare o rinnovare la licenza."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Nome Del Dispositivo"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Sembra che questo sia il primo accesso alle Centrali delle Casseforti da questo dispositivo. Per poterlo identificare ai fini dell'autorizzazione all'accesso è necessario dare un nome a questo dispositivo."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "La chiave del tuo account è richiesta per accedere da nuove applicazioni o browser. Può essere trovata nel tuo profilo."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Registrazione del dispositivo Riuscita"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Per accedere al vault, il tuo dispositivo deve essere autorizzato dal proprietario del vault."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Per accedere alla cassaforte, il proprietario deve autorizzarti."; "hubAuthentication.requireAccountInit.alert.title" = "Azione richiesta"; "hubAuthentication.requireAccountInit.alert.message" = "Per procedere, completa i passaggi richiesti nel tuo profilo dell'Hub."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Vai al profilo"; +"hubAuthentication.vaultArchived" = "Questa cassaforte è stata archiviata. Si prega di chiedere al proprietario di renderla disponibile."; "intents.saveFile.missingFile" = "Il file fornito non è valido."; "intents.saveFile.invalidFolder" = "La cartella fornita non è valida."; @@ -284,7 +285,7 @@ "vaultDetail.removeVault.footer" = "Questo rimuoverà solo la cassaforte dall'elenco della cassaforte e non eliminerà alcun file crittografato."; "vaultDetail.renameVault.progress" = "Rinominando…"; "vaultDetail.unlocked.footer" = "La tua cassaforte è attualmente sbloccata nell'app File."; -"vaultDetail.unlockVault.footer" = "Inserisci la password per \"%@\" per memorizzarla nel portachiavi iOS e per abilitare %@."; +"vaultDetail.unlockVault.footer" = "Inserisci la password per \"%1$@\" per memorizzarla nel portachiavi iOS e per abilitare %2$@."; "vaultList.header.title" = "Cassaforti"; "vaultList.emptyList.message" = "Tocca qui per aggiungere una cassaforte"; diff --git a/SharedResources/ja.lproj/Localizable.strings b/SharedResources/ja.lproj/Localizable.strings index 67b762d97..34715775b 100644 --- a/SharedResources/ja.lproj/Localizable.strings +++ b/SharedResources/ja.lproj/Localizable.strings @@ -116,13 +116,11 @@ "getFolderIntent.error.noVaultSelected" = "金庫は選択されていません。"; "hubAuthentication.title" = ""; -"hubAuthentication.accessNotGranted" = "お使いのデバイスはまだこの金庫にアクセスする権限がありません。金庫のオーナーに権限を与えてもらってください。"; "hubAuthentication.licenseExceeded" = "Cryptomator Hub インスタンスのライセンスが無効です。ライセンスをアップグレードまたは更新するには、Hub の管理者にご連絡ください。"; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "デバイス名"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = ""; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "アカウントキーは新しいアプリやブラウザからログインするために必要です。プロフィール中に記載されています。"; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = ""; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "金庫にアクセスするためには,金庫のオーナーが端末を認証する必要があります。"; "hubAuthentication.requireAccountInit.alert.title" = "要対応"; "hubAuthentication.requireAccountInit.alert.message" = "続行するにはHubユーザープロフィールで必要な手順を完了してください。"; "hubAuthentication.requireAccountInit.alert.actionButton" = "プロフィールへ移動"; @@ -284,7 +282,7 @@ "vaultDetail.removeVault.footer" = "金庫のリストから金庫が削除されます。暗号化されたファイルは削除されません。"; "vaultDetail.renameVault.progress" = "名前を変更しています…"; "vaultDetail.unlocked.footer" = "金庫はファイル アプリで解錠されています。"; -"vaultDetail.unlockVault.footer" = "iOS keychain に保存し %@ を有効にするには \"%@\" のパスワードを入力してください。"; +"vaultDetail.unlockVault.footer" = "%2$@ を有効にするため「%1$@」のパスワードを入力してください。パスワードは iOS キーチェーンに保存されます。"; "vaultList.header.title" = "金庫"; "vaultList.emptyList.message" = "ここをタップして金庫を追加"; diff --git a/SharedResources/ko.lproj/Localizable.strings b/SharedResources/ko.lproj/Localizable.strings index f97edb356..6a5d04785 100644 --- a/SharedResources/ko.lproj/Localizable.strings +++ b/SharedResources/ko.lproj/Localizable.strings @@ -42,16 +42,16 @@ "addVault.title" = "Vault 추가"; "addVault.createNewVault.title" = "새 Vault 생성"; "addVault.createNewVault.purchase" = "새로운 vault를 만들려면 정식 버전을 구입해야 합니다."; -"addVault.createNewVault.setVaultName.header.title" = "Vault의 이름을 선택해주십시요."; +"addVault.createNewVault.setVaultName.header.title" = "Vault의 이름을 선택해주십시오."; "addVault.createNewVault.setVaultName.cells.name" = "Vault 이름"; "addVault.createNewVault.setVaultName.error.emptyVaultName" = "Vault 이름은 비어있을 수 없습니다."; -"addVault.createNewVault.chooseCloud.header" = "Cryptomator Vault의 암호화 파일을 어디에 저장하시겠습니까?"; -"addVault.createNewVault.chooseFolder.error.vaultNameCollision" = "해당 위치에 \"%@\"가 이미 존재합니다. 다른 vault명을 정하거나 다른 위치를 선택해주세요."; +"addVault.createNewVault.chooseCloud.header" = "Cryptomator Vault의 암호화된 파일을 어디에 저장하시겠습니까?"; +"addVault.createNewVault.chooseFolder.error.vaultNameCollision" = "해당 위치에 \"%@\"이(가) 이미 존재합니다. 다른 Vault 이름을 정하거나 다른 위치를 선택하십시오."; "addVault.createNewVault.detectedMasterkey.text" = "Cryptomator가 이 위치에 있는 Vault를 감지하였습니다.\n 새 Vault를 생성하기 위해, 다른 경로를 선택하시기 바랍니다."; "addVault.createNewVault.password.enterPassword.header" = "새 비밀번호를 입력하세요."; "addVault.createNewVault.password.confirmPassword.header" = "새 비밀번호 확인."; "addVault.createNewVault.password.confirmPassword.alert.title" = "비밀번호를 확인하셨습니까?"; -"addVault.createNewVault.password.confirmPassword.alert.message" = "중요: 만약 비밀번호를 잊어버린 경우, 데이터를 복구 할 방법이 없습니다."; +"addVault.createNewVault.password.confirmPassword.alert.message" = "중요: 만약 비밀번호를 잊어버린 경우, 데이터를 복구할 수 없습니다."; "addVault.createNewVault.password.error.emptyPassword" = "비밀번호를 입력해야 합니다."; "addVault.createNewVault.password.error.nonMatchingPasswords" = "비밀번호가 일치하지 않습니다."; "addVault.createNewVault.password.error.tooShortPassword" = "비밀번호는 최소 8자 이상이어야 합니다."; @@ -61,7 +61,7 @@ "addVault.openExistingVault.detectedMasterkey.text" = "Cryptomator가 \"%@\" Vault를 감지하였습니다.\n 이 Vault를 추가하시길 원하십니까?"; "addVault.openExistingVault.detectedMasterkey.add" = "이 Vault 추가"; "addVault.openExistingVault.downloadVault.progress" = "Vault 다운로드중…"; -"addVault.openExistingVault.password.footer" = "\"%@\"의 비밀번호를 입력하십시요."; +"addVault.openExistingVault.password.footer" = "\"%@\"의 비밀번호를 입력하십시오."; "addVault.openExistingVault.progress" = "Vault 추가 중..."; "addVault.success.info" = "\"%@\" Vault가 성공적으로 추가되었습니다.\n파일 앱을 통해 이 Vault에 접근할 수 있습니다."; "addVault.success.footer" = "아직 Cryptomator를 파일 앱에서 사용가능토록 설정하지 않은 경우, 사용가능하게 설정바랍니다."; @@ -76,51 +76,93 @@ "changePassword.progress" = "비밀번호 변경 중..."; "chooseFolder.emptyFolder.footer" = "폴더가 비었습니다"; -"chooseFolder.createNewFolder.header.title" = "폴더의 이름을 선택해주십시요."; +"chooseFolder.createNewFolder.header.title" = "폴더의 이름을 선택해주십시오."; "chooseFolder.createNewFolder.cells.name" = "폴더명"; "chooseFolder.createNewFolder.error.emptyFolderName" = "폴더 이름이 비어 있어서는 안 됩니다."; "chooseFolder.createNewFolder.progress" = "폴더 생성 중..."; -"cloudProvider.error.itemNotFound" = "\"%@\"를 찾을 수 없습니다."; -"cloudProvider.error.itemAlreadyExists" = "\"%@\"가 이미 존재합니다."; +"cloudProvider.error.itemNotFound" = "\"%@\"을(를) 찾을 수 없습니다."; +"cloudProvider.error.itemAlreadyExists" = "\"%@\"이(가) 이미 존재합니다."; "cloudProvider.error.itemTypeMismatch" = "\"%@\"의 파일 타입이 올바르지 않습니다."; -"cloudProvider.error.parentFolderDoesNotExist" = "상위 폴더 \"%@\"가 존재하지 않습니다."; +"cloudProvider.error.parentFolderDoesNotExist" = "상위 폴더 \"%@\"이(가) 존재하지 않습니다."; +"cloudProvider.error.pageTokenInvalid" = "디렉토리의 내용물을 불러올 수 없습니다."; "cloudProvider.error.quotaInsufficient" = "저장공간이 부족합니다."; +"cloudProvider.error.unauthorized" = "허가되지 않은 작업을 수행할 수 없습니다."; +"cloudProvider.error.noInternetConnection" = "이 작업은 인터넷 연결이 필요합니다."; "cloudProviderType.localFileSystem" = "다른 파일 앱"; "fileProvider.onboarding.title" = "환영합니다"; -"fileProvider.onboarding.info" = "파일을 보호하기 위해 Cryptomator를 선택하여 주셔서 감사합니다. 시작하기 위해 메인으로 이동하신 후 Vault를 추가하십시요."; +"fileProvider.onboarding.info" = "파일을 보호하기 위해 Cryptomator를 선택하여 주셔서 감사합니다. 시작하기 위해 메인으로 이동하신 후 Vault를 추가하십시오."; "fileProvider.onboarding.button.openCryptomator" = "Cryptomator 열기"; "fileProvider.error.biometricalAuthCanceled.title" = "잠금 해제 취소됨"; +"fileProvider.error.biometricalAuthCanceled.message" = "%@을(를) 통한 잠금 해제가 실패했습니다. 다시 시도해 주세요."; "fileProvider.error.biometricalAuthWrongPassword.title" = "잘못된 비밀번호입니다"; +"fileProvider.error.biometricalAuthWrongPassword.message" = "%@의 저장된 비밀번호가 맞지 않습니다. 다시 시도하여 %@을(를) 재활성화 하기 위해 비밀번호를 입력하십시오."; "fileProvider.error.defaultLock.title" = "잠금 해제 필요"; "fileProvider.error.defaultLock.message" = "Vault에 접근하여 내부 데이터를 보기 위해서는 잠금을 해제해야 합니다."; -"fileProvider.error.unlockButton" = "잠금해제"; +"fileprovider.error.unauthorized.text" = "\"%@\"에 대한 접근이 거부되었습니다. 메인 앱을 열어 연결을 확인하고 필요시 재인증하십시오."; +"fileProvider.error.unlockButton" = "잠금 해제"; "fileProvider.clearFileFromCache.title" = "캐시에서 파일 지우기"; "fileProvider.clearFileFromCache.message" = "이는 현재 기기에 있는 로컬 파일들만 지웁니다. 클라우드에 있는 데이터는 유지됩니다."; "fileProvider.fileImporting.error.missingPremium" = "Vault에 쓰기 권한을 얻기 위해 Cryptomator앱에서 정식 버전을 구입하십시오."; "fileProvider.uploadProgress.connecting" = "연결 중..."; "fileProvider.uploadProgress.message" = "현재 진행도: %@\n\n만약 업로드가 멈추었다면, 재시도할 수 있습니다."; +"fileProvider.uploadProgress.missing" = "진행도가 인식되지 않습니다. 백그라운드에서 작동중일 수 있습니다."; "fileProvider.uploadProgress.title" = "업로드 중…"; -"hubAuthentication.accessNotGranted" = "귀하의 기기는 아직 이 저장소에 액세스할 수 있는 권한이 없습니다. Vault 소유자에게 승인을 요청하세요."; +"fileProvider.uploadProgress.missingDomainError" = "도메인을 찾을 수 없습니다."; + +"getFolderIntent.error.missingPath" = "경로가 지정되지 않았습니다. 폴더가 반환되는 유효한 경로를 지정해주세요."; +"getFolderIntent.error.noVaultSelected" = "Vault가 선택되지 않았습니다."; + +"hubAuthentication.title" = "Hub Vault"; +"hubAuthentication.accessNotGranted" = "이 Vault에 접근할 권한이 없습니다. Vault 소유자에게 허가를 요청하십시오."; "hubAuthentication.licenseExceeded" = "Cryptomator Hub 인스턴스에 잘못된 라이선스가 있습니다. 라이센스를 업그레이드하거나 갱신하려면 허브 관리자에게 알리십시오."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "기기 이름"; +"hubAuthentication.deviceRegistration.deviceName.footer.title" = "이 기기로부터 첫번째 Hub 접근입니다. 접근 허가를 위해 인식할 수 있도록 이름을 붙이십시오."; +"hubAuthentication.deviceRegistration.accountKey.footer.title" = "새로운 앱이나 브라우저에서 로그인하기 위해 Account Key가 필요합니다. 프로필에서 찾을 수 있습니다."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "기기 등록 성공"; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Vault에 접근하려면, 소유자가 권한을 허가해야 합니다."; +"hubAuthentication.requireAccountInit.alert.title" = "조치가 필요함"; +"hubAuthentication.requireAccountInit.alert.message" = "진행하려면 Hub 사용자 프로필에서 필요한 조치를 완료하십시오."; +"hubAuthentication.requireAccountInit.alert.actionButton" = "프로필로 가기"; +"hubAuthentication.vaultArchived" = "이 Vault는 아카이브되었습니다. Vault 소유자에게 아카이브를 해제하도록 요청하십시오."; "intents.saveFile.missingFile" = "파일이 올바르지 않습니다."; "intents.saveFile.invalidFolder" = "폴더가 올바르지 않습니다."; -"keepUnlocked.alert.message" = "이 설정을 바꾸기 위해서는 vault를 잠궈야 합니다."; +"intents.saveFile.missingTemporaryFolder" = "임시 폴더를 만들 수 없습니다."; +"intents.saveFile.lockedVault" = "이 단축어를 이용하려면 Vault를 잠금 해제해야 합니다."; +"intents.saveFile.selectedVaultNotFound" = "해당 Vault를 찾을 수 없습니다."; + +"keepUnlocked.alert.title" = "Vault를 잠그시겠습니까?"; +"keepUnlocked.alert.message" = "이 설정을 바꾸기 위해서는 Vault를 잠궈야 합니다."; +"keepUnlocked.alert.confirm" = "확인 & 지금 잠그기"; +"keepUnlocked.header" = "사용하지 않을 때에 얼마나 오래 잠금 해제 할것인지 지정하십시오."; +"keepUnlocked.footer.auto" = "iOS가 지정하게 하는 것은 메모리 확보를 위해 언제든 Cryptomator가 종료되어 자동으로 Vault를 잠그는 것을 의미합니다."; +"keepUnlocked.footer.on" = "이 설정을 활성화함으로써 Vault가 잠금 해제되어있는 동안 암호가 iOS 키체인에 저장됩니다."; "keepUnlockedDuration.auto" = "iOS가 자동으로 잠그게 하기"; "keepUnlockedDuration.auto.shortDisplayName" = "자동"; "keepUnlockedDuration.indefinite" = "자동 잠금 해제"; -"localFileSystemAuthentication.createNewVault.header" = "다음 화면에서, 새 Vault의 저장위치를 선택하여 주십시요."; +"localFileSystemAuthentication.createNewVault.header" = "다음 화면에서, 새 Vault의 저장위치를 선택하여 주십시오."; "localFileSystemAuthentication.createNewVault.button" = "저장 위치 선택"; -"localFileSystemAuthentication.openExistingVault.header" = "다음 화면에서, Vault의 폴더를 선택하여 주십시요."; +"localFileSystemAuthentication.createNewVault.error.detectedExistingVault" = "이 위치에 이미 Vault가 존재합니다. 다른 저장소 위치에서 다시 시도해 주십시오."; +"localFileSystemAuthentication.openExistingVault.header" = "다음 화면에서, Vault의 폴더를 선택하여 주십시오."; "localFileSystemAuthentication.openExistingVault.button" = "Vault 폴더 선택"; +"localFileSystemAuthentication.openExistingVault.error.noVaultFound" = "선택된 폴더는 Vault가 아닙니다. 다른 폴더에서 다시 시도해 주십시오."; +"localFileSystemAuthentication.info.footer" = "회색으로 처리된 파일 앱은 폴더 선택을 지원하지 않습니다. 이는 Cryptomator의 제약사항이 아닙니다."; + +"maintenanceModeError.runningCloudTask" = "이 Vault에 대한 다른 우선 백그라운드 작업으로 인해 작업이 불가능합니다. 잠시 후 다시 시도해 주십시오."; + +"nameValidation.error.endsWithPeriod" = "마침표로 끝나는 이름은 사용할 수 없습니다. 다른 이름을 선택해 주십시오."; +"nameValidation.error.endsWithSpace" = "공백으로 끝나는 이름은 사용할 수 없습니다. 다른 이름을 선택해 주십시오."; +"nameValidation.error.containsIllegalCharacter" = "\"%@\"을(를) 포함하는 이름은 사용할 수 없습니다. 다른 이름을 선택해 주십시오."; "onboarding.title" = "환영합니다"; +"onboarding.info" = "파일을 보호하기 위해 Cryptomator를 선택해 주셔서 감사합니다.\n\nCryptomator에서는 데이터에 대한 열쇠는 사용자가 갖고 있습니다. Cryptomator는 데이터를 쉽고 빠르게 암호화 합니다.\n\n이 앱은 파일 앱과 완전히 연동되어 있습니다. 이후 파일 앱에서 Cryptomator를 활성화하여 Vault에 접근하십시오."; "onboarding.button.continue" = "계속하기"; + +"purchase.beginFreeTrial.alert.title" = "체험판 열림"; "purchase.expiredTrial" = "체험판이 만료되었습니다."; "purchase.footer.privacyPolicy" = "개인정보 보호정책"; "purchase.footer.termsOfUse" = "이용 약관"; @@ -130,61 +172,136 @@ "purchase.product.donateAndUpgrade" = "후원 및 업그레이드"; "purchase.product.freeUpgrade" = "무료 업그레이드"; "purchase.product.lifetimeLicense" = "평생 라이선스"; +"purchase.product.lifetimeLicense.duration" = "일회성"; "purchase.product.pricing.free" = "무료"; "purchase.product.trial" = "30일 체험판"; "purchase.product.trial.expirationDate" = "만료일: %@"; "purchase.product.trial.duration" = "30일간 사용 가능"; -"purchase.restorePurchase.validTrialFound.alert.message" = "제한된 기간 동안 Cryptomator의 정식 버전을 사용할 수 있습니다. 체험판은 %@에 만료됩니다. 그 후, vault는 읽기 전용 모드로 접근할 수 있습니다."; +"purchase.product.yearlySubscription" = "연간 구독"; +"purchase.product.yearlySubscription.duration" = "연간"; +"purchase.readOnlyMode.alert.title" = "읽기 전용 모드"; +"purchase.readOnlyMode.alert.message" = "설정에서 Cryptomator의 정식 버전을 해제할 수 있으며, 지금은 읽기 전용 모드로 사용할 수 있습니다."; +"purchase.restorePurchase.button" = "구매 복원"; +"purchase.restorePurchase.validTrialFound.alert.title" = "체험판 계속됨"; +"purchase.restorePurchase.validTrialFound.alert.message" = "제한된 기간 동안 Cryptomator의 정식 버전을 사용할 수 있습니다. 체험판은 %@에 만료됩니다. 그 후, Vault는 읽기 전용 모드로 접근할 수 있습니다."; "purchase.restorePurchase.fullVersionFound.alert.title" = "복원 완료"; "purchase.restorePurchase.fullVersionNotFound.alert.title" = "정식 버전 없음"; -"purchase.restorePurchase.fullVersionNotFound.alert.message" = "이전에 구입한 복구를 위한 정식 버전을 찾을 수 없습니다. 다른 옵션을 선택하십시오."; -"purchase.retry.button" = "재시도"; +"purchase.restorePurchase.fullVersionNotFound.alert.message" = "이전에 구입한 정식 버전을 찾을 수 없습니다. 다른 옵션을 선택하십시오."; +"purchase.restorePurchase.eligibleForUpgrade.alert.title" = "업그레이드 자격 있음"; +"purchase.restorePurchase.eligibleForUpgrade.alert.message" = "Cryptomator의 구버전에서 업그레이드 하려는 것 같습니다. 만약 그렇다면 대신 \"업그레이드 제안\" 옵션을 선택해주십시오."; +"purchase.retry.button" = "다시 시도"; +"purchase.retry.footer" = "이용가능한 제품을 불러올 수 없습니다."; "purchase.title" = "정식 버전 구입"; "purchase.unlockedFullVersion.message" = "이제 Cryptomator의 정식 버전을 사용할 수 있습니다."; "purchase.unlockedFullVersion.title" = "감사합니다"; +"purchase.error.unknown" = "알 수 없는 이유로 App Store에서의 결제가 실패했습니다. 잠시 후 다시 시도해 주십시오.\n\n만약 이 에러가 지속된다면, 기기를 재시작하거나 iOS 설정에서 Apple ID에 다시 로그인해 보십시오."; "settings.title" = "설정"; "settings.aboutCryptomator" = "Cryptomator에 대해서"; "settings.aboutCryptomator.title" = "버전 %@ (%@)"; +"settings.cacheSize" = "캐시 크기"; "settings.clearCache" = "캐시 지우기"; +"settings.cloudServices" = "클라우드 서비스"; +"settings.contact" = "문의하기"; +"settings.debugMode" = "디버그 모드"; "settings.debugMode.alert.message" = "이 모드에서는 민감한 정보들이 로그 파일로 기기에 기록될 수 있습니다.(파일명, 경로 등). 비밀번호, 쿠키 등의 정보는 예외입니다.\n\n 가능한 디버그 모드를 빨리 비활성화 하세요."; +"settings.manageSubscriptions" = "구독 관리"; "settings.rateApp" = "앱 평가하기"; "settings.sendLogFile" = "로그파일 전송"; "settings.shortcutsGuide" = "단축키 가이드"; "settings.unlockFullVersion" = "정식 버전 잠금 해제"; +"snapshots.fileprovider.file1" = "/Accounting.numbers"; +"snapshots.fileprovider.file2" = "/Final Presentation.key"; +"snapshots.fileprovider.file3" = "/Product Trailer.mov"; +"snapshots.fileprovider.file4" = "/Proposal.docx"; +"snapshots.fileprovider.file5" = "/Report.pdf"; +"snapshots.fileprovider.folder3" = "/Secret Project"; +"snapshots.fileprovider.folder2" = "/Invoices"; +"snapshots.fileprovider.folder1" = "/Certificates"; +"snapshots.main.vault1" = "/Work"; +"snapshots.main.vault2" = "/Family"; +"snapshots.main.vault3" = "/Documents"; +"snapshots.main.vault4" = "/Trip to California"; + "s3Authentication.displayName" = "표시 이름"; "s3Authentication.accessKey" = "액세스 키"; "s3Authentication.secretKey" = "비밀키"; "s3Authentication.existingBucket" = "이미 존재하는 버킷"; "s3Authentication.endpoint" = "엔드포인트"; "s3Authentication.region" = "지역"; +"s3Authentication.error.invalidCredentials" = "로그인 정보가 틀립니다."; +"s3Authentication.error.invalidEndpoint" = "주어진 엔드포인트가 URL의 형식과 일치하지 않습니다."; "trialStatus.active" = "활성화됨"; "trialStatus.expired" = "만료됨"; -"unlockVault.button.unlock" = "잠금해제"; -"unlockVault.password.footer" = "\"%@\"의 비밀번호를 입력하십시요."; +"unlockVault.button.unlock" = "잠금 해제"; +"unlockVault.button.unlockVia" = "%@(으)로 잠금 해제"; +"unlockVault.password.footer" = "\"%@\"의 비밀번호를 입력하십시오."; +"unlockVault.enableBiometricalUnlock.switch" = "%@ 활성화"; +"unlockVault.enableBiometricalUnlock.footer" = "비밀번호로 잠금 해제하는 대신 %@를 통해 잠금 해제 할 수 있습니다."; +"unlockVault.evaluatePolicy.reason" = "Vault 잠금 해제"; +"unlockVault.progress" = "잠금 해제 중..."; "untrustedTLSCertificate.title" = "유효하지 않은 TLS 인증서"; -"untrustedTLSCertificate.message" = "\"%@\" TLD 인증서가 유효하지 않습니다. 아무튼 신뢰하고 계속하시겠습니까?\n\n SHA-256: %@"; +"untrustedTLSCertificate.message" = "\"%@\"의 TLS 인증서가 유효하지 않습니다. 그래도 신뢰하고 계속하시겠습니까?\n\n SHA-256: %@"; "untrustedTLSCertificate.add" = "신뢰하기"; "untrustedTLSCertificate.dismiss" = "신뢰하지 않기"; +"upgrade.title" = "업그레이드 제안"; +"upgrade.notEligible.alert.title" = "업그레이드 실패"; +"upgrade.notEligible.alert.message" = "Cryptomator가 이 기기에 설치된 구버전을 찾을 수 없습니다. 만약 구매하였다면, App Store에서 다시 설치하고 다시 시도해 주십시오."; +"upgrade.info" = "버전 1부터 Cryptomator를 신뢰해주셔서 감사합니다. 충성고객으로서 무료 업그레이드 자격이 있습니다."; + +"urlSession.error.httpError.401" = "사용자명/비밀번호가 잘못되었습니다."; +"urlSession.error.httpError.403" = "요청한 자료에 대한 권한이 부족합니다."; +"urlSession.error.httpError.404" = "요청한 자료를 찾을 수 없습니다."; +"urlSession.error.httpError.405" = "요청 메소드가 대상 자료에 지원되지 않습니다."; +"urlSession.error.httpError.409" = "요청이 대상 자료의 현재 상태에 상충됩니다."; +"urlSession.error.httpError.412" = "대상 자료에 대한 접근이 거부되었습니다."; +"urlSession.error.httpError.default" = "네트워크 연결이 코드 %ld로 실패하였습니다."; +"urlSession.error.unexpectedResponse" = "예상치 못한 네트워크 응답이 발생했습니다."; + +"vaultAccountManager.error.vaultAccountAlreadyExists" = "이미 추가된 Vault입니다."; + "vaultDetail.button.changeVaultPassword" = "비밀번호 변경"; +"vaultDetail.button.lock" = "지금 잠그기"; "vaultDetail.button.moveVault" = "이동"; +"vaultDetail.button.removeVault" = "Vault 목록에서 제거하기"; "vaultDetail.button.renameVault" = "이름 변경"; +"vaultDetail.changePassword.footer" = "Vault에 대해 자신만 아는 강력한 암호를 선택하고, 안전한 장소에 두십시오."; +"vaultDetail.disabledBiometricalUnlock.footer" = "%@을(를) 활성화하면, Vault 암호가 iOS 키체인에 저장될 것입니다."; +"vaultDetail.enabledBiometricalUnlock.footer" = "Vault 암호는 %@ 인증이 실패할 때에만 요구됩니다."; +"vaultDetail.info.footer.accessVault" = "파일 앱으로 이 Vault에 접근하십시오."; +"vaultDetail.info.footer.accountInfo" = "%@(으)로 %@에 로그인 되어 있습니다."; "vaultDetail.keepUnlocked.title" = "잠금 해제 기간"; +"vaultDetail.keepUnlocked.footer.off" = "파일 앱이 Cryptomator를 종료했을 때 잠금 해제가 요구됩니다."; +"vaultDetail.keepUnlocked.footer.limitedDuration" = "Vault가 %@ 동안 유휴 상태일 때 잠금 해제가 요구됩니다."; +"vaultDetail.keepUnlocked.footer.unlimitedDuration" = "수동으로 잠그지 않으면 잠금 해제가 요구되지 않습니다."; +"vaultDetail.locked.footer" = "Vault가 현재 잠겨있습니다."; +"vaultDetail.moveVault.detectedMasterkey.text" = "Cryptomator가 이 위치에 있는 Vault를 감지하였습니다.\n 새 Vault를 생성하기 위해, 다른 경로를 선택하시기 바랍니다."; "vaultDetail.moveVault.progress" = "이동 중…"; -"vaultDetail.renameVault.progress" = "이름변경중…"; +"vaultDetail.removeVault.footer" = "이 동작은 Vault 목록에서 Vault를 지우지만 암호화된 파일은 지우지 않습니다."; +"vaultDetail.renameVault.progress" = "이름 변경 중…"; +"vaultDetail.unlocked.footer" = "파일 앱에서 Vault가 잠금 해제되어 있습니다."; +"vaultDetail.unlockVault.footer" = "비밀번호를 iOS 키체인에 저장하여 %2$@를 활성화 하기 위해 \"%1$@\"의 비밀번호를 입력하십시오."; "vaultList.header.title" = "Vault"; "vaultList.emptyList.message" = "여기를 눌러 Vault 추가"; "vaultList.remove.alert.title" = "Vault 제거?"; "vaultList.remove.alert.message" = "Vault 목록에서만 Vault가 제거될 것입니다. 암호화 된 데이터가 삭제되지 않습니다. 이 Vault를 나중에 다시 추가할 수 있습니다."; -"webDAVAuthentication.httpConnection.alert.title" = "HTTPS를 사용하겠습니가?"; +"vaultProviderFactory.error.unsupportedVaultConfig" = "Vault 구성이 지원되지 않습니다. 최신 버전의 Cryptomator를 사용하고 있는지 확인해 주십시오."; +"vaultProviderFactory.error.unsupportedVaultVersion" = "Valut 버전 %ld는 지원되지 않습니다. 이 Vault는 다른 버전의 Cryptomator에서 만들어졌습니다."; + +"webDAVAuthentication.httpConnection.alert.title" = "HTTPS를 사용하겠습니까?"; "webDAVAuthentication.httpConnection.alert.message" = "HTTP 사용은 안전하지 않습니다. HTTPS 사용을 권장합니다. HTTP 사용으로 야기될 문제를 숙지하고 있다면, HTTP를 사용할 수 있습니다."; "webDAVAuthentication.httpConnection.change" = "HTTPS로 변경"; +"webDAVAuthentication.httpConnection.continue" = "HTTP 유지"; + +"webDAVAuthenticator.error.unsupportedProtocol" = "서버가 WebDAV를 지원하지 않습니다. 올바른 URL을 사용하는지 확인하십시오."; +"webDAVAuthenticator.error.untrustedCertificate" = "이 서버의 인증서를 신뢰할 수 없습니다. 이 WebDAV 연결을 다시 설정해야 할 수 있습니다."; -"Retry Upload" = "업로드 재시도"; +"Retry Upload" = "업로드 다시 하기"; +"Clear from Cache" = "캐시에서 지우기"; diff --git a/SharedResources/lv.lproj/Localizable.strings b/SharedResources/lv.lproj/Localizable.strings index 0b1101d65..7a034fe6e 100644 --- a/SharedResources/lv.lproj/Localizable.strings +++ b/SharedResources/lv.lproj/Localizable.strings @@ -1,18 +1,66 @@ "common.button.cancel" = "Atcelt"; "common.button.change" = "Mainīt"; +"common.button.choose" = "Izvēlēties"; "common.button.close" = "Aizvērt"; "common.button.done" = "Darīts"; +"common.button.edit" = "Labot"; "common.button.next" = "Tālāk"; +"common.button.ok" = "Labi"; +"common.button.refresh" = "Atsvaidzināt"; +"common.button.remove" = "Noņemt"; +"common.button.retry" = "Mēģināt vēlreiz"; "common.cells.password" = "Parole"; -"addVault.title" = "Pievienot glabātuvi"; +"addVault.title" = "Pievienot glabātavu"; "addVault.createNewVault.title" = "Izveidot jaunu glabātuvi"; -"addVault.createNewVault.setVaultName.cells.name" = "Glabātuves nosaukums"; -"addVault.createNewVault.chooseCloud.header" = "Kur Cryptomator vajadzētu glabāt jūsu glabātuves šifrētos failus?"; -"addVault.openExistingVault.title" = "Atvērt esošu glabātuvi"; +"addVault.createNewVault.setVaultName.cells.name" = "Glabātavas nosaukums"; +"addVault.createNewVault.chooseCloud.header" = "Kur Cryptomator vajadzētu saglabāt glabātavs šifrētās datnes?"; +"addVault.createNewVault.detectedMasterkey.text" = "Cryptomator noteica šajā atrašanās vietā esošu glabātavu.\nLai izveidotu jaunu glabātavu, lūgums doties atpakaļ un izvēlēties citu mapi."; +"addVault.createNewVault.password.confirmPassword.alert.message" = "SVARĪGI: ja tiek aizmirsta sava parole, nav iespējams atkopt savus datus."; +"addVault.openExistingVault.title" = "Atvērt esošu glabātavu"; +"addVault.openExistingVault.chooseCloud.header" = "Kur atrodas glabātava?"; +"addVault.openExistingVault.detectedMasterkey.text" = "Cryptomator noteica glabātavu \"%@\".\nVai pievienot šo glabātavu?"; +"addVault.openExistingVault.detectedMasterkey.add" = "Pievienot šo glabātavu"; +"addVault.openExistingVault.downloadVault.progress" = "Lejupielādē glabātavu…"; +"addVault.openExistingVault.password.footer" = "Jāievada \"%@\" parole."; +"addVault.openExistingVault.progress" = "Pievieno glabātavu…"; +"addVault.success.info" = "Glabātava \"%@\" sekmīgi pievienota.\nTai var piekļūt ar datņu lietotni."; +"cloudProvider.error.itemAlreadyExists" = "\"%@\" jau pastāv."; +"fileProvider.onboarding.info" = "Paldies par izvēlēšanos izmantot Cryptomator, lai aizsargātu savas datnes! Lai uzsākktu, jādodas uz galveno lietotni un jāpievieno glabātava."; +"fileProvider.error.biometricalAuthCanceled.message" = "Atslēgšana ar %@ nebija sekmīga. Lūgums mēģināt vēlreiz."; "fileProvider.error.unlockButton" = "Atslēgt"; +"fileProvider.fileImporting.error.missingPremium" = "Jāatslēdz pilnā versija Cryptomator lietotnē, lai savās glabātavās iegūtu rakstīšanas piekļuvi."; +"hubAuthentication.accessNotGranted" = "Nav atļaujas piekļūt šai glabātavai. Jālūdz tās īpašniekam, lai pilnvaro piekļuvi."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Ierīces nosaukums"; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Lai piekļūtu glabātavai, tās īpašniekam ir jānodrošina piekļuve tai."; +"hubAuthentication.vaultArchived" = "Šī glabātava tika arhivēta. Lūgums vaicāt tās īpašniekam atcelt tās arhivēšanu."; +"localFileSystemAuthentication.createNewVault.error.detectedExistingVault" = "Šajā atrašanās vietā jau pastāv glabātava. Lūgums mēģināt vēlreiz ar citu krātuves atrašanās vietu."; +"localFileSystemAuthentication.openExistingVault.header" = "Nākamajā skatā jāizvēlas savas esošās glabātavas mape."; +"localFileSystemAuthentication.openExistingVault.button" = "Atlasīt glabātavas mapi"; +"localFileSystemAuthentication.openExistingVault.error.noVaultFound" = "Atlasītā mape nav glabātava. Lūgums mēģināt vēlreiz ar citu mapi."; +"localFileSystemAuthentication.info.footer" = "Datņu nodrošinātāji, kuri ir pelēki, nenodrošina mapju izvēlēšanos. Tas nav Cryptomator ierobežojums."; +"purchase.header.feature.writeAccess" = "Rakstīšanas piekļuve glabātavām"; +"purchase.retry.button" = "Mēģināt vēlreiz"; +"purchase.unlockedFullVersion.title" = "Paldies!"; +"purchase.error.unknown" = "Šis pirkums nav pieejams lietotņu veikalā nezināma iemesla dēļ. Lūgums vēlāk mēģināt vēlreiz.\n\nJa šī kļūda nepazūd, jāmēģina pārsāknēt sava ierīce vai atteikties un pieteikties savā Apple ID iOS iestatījumos."; + +"settings.title" = "Iestatījumi"; +"settings.aboutCryptomator" = "Par Cryptomator"; +"s3Authentication.accessKey" = "Piekļuves atslēga"; "unlockVault.button.unlock" = "Atslēgt"; +"unlockVault.password.footer" = "Jāievada \"%@\" parole."; +"upgrade.info" = "Paldies par uzticēšanos Cryptomator kopš pirmās versijas! Kā uzticamam lietotājam Tev ir pieejams bezmaksas uzlabojums."; + +"vaultAccountManager.error.vaultAccountAlreadyExists" = "Šī glabātava jau ir pievienota."; "vaultDetail.button.changeVaultPassword" = "Mainīt paroli"; +"vaultDetail.button.moveVault" = "Pārvietot"; +"vaultDetail.button.renameVault" = "Pārdēvēt"; +"vaultDetail.moveVault.detectedMasterkey.text" = "Cryptomator noteica šajā atrašanās vietā esošu glabātavu.\nLai pārvietotu savu glabātavu, lūgums doties atpakaļ un izvēlēties citu mapi."; +"vaultDetail.unlockVault.footer" = "Jāievada \"%1$@\" parole, lai to glabāt iOS atslēgu saišķī un iespējotu %2$@."; + +"vaultProviderFactory.error.unsupportedVaultConfig" = "Glabātavas konfigurācija nav atbalstīta. Lūgums pārliecināties, ka tiek izmantota jaunākā Cryptomator versija."; +"vaultProviderFactory.error.unsupportedVaultVersion" = "Glabātavas versija %ld nav atbalstīta. Šī krātuve tika izveidota vecākā vai jaunākā Cryptomator versijā."; + +"webDAVAuthenticator.error.unsupportedProtocol" = "Izskatās, ka serveris nav saderīgs ar WebDAV. Lūgums pārbaudīt, vai tiek izmantots pareizs URL."; diff --git a/SharedResources/nb.lproj/Localizable.strings b/SharedResources/nb.lproj/Localizable.strings index 98dcb77c1..42aef84d6 100644 --- a/SharedResources/nb.lproj/Localizable.strings +++ b/SharedResources/nb.lproj/Localizable.strings @@ -115,13 +115,11 @@ "getFolderIntent.error.noVaultSelected" = "Ingen hvelv har blitt valgt."; "hubAuthentication.title" = "Hub hvelv"; -"hubAuthentication.accessNotGranted" = "Enheten din har ikke blitt autorisert til å få tilgang til dette hvelvet ennå. Spør hvelveieren om å tillate det."; "hubAuthentication.licenseExceeded" = "Cryptomator Hub instansen din har en ugyldig lisens. Vennligst informer en Hub-administrator om å oppgradere eller fornye lisensen."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Enhetsnavn"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Dette ser ut til å være den første Hub-tilgangen fra denne enheten. For å kunne identifisere den for tilgangsautorisasjon, må du å navngi denne enheten."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Din kontonøkkel kreves for å logge inn fra nye apper eller nettlesere. Den finner du i profilen din."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Enhetsregistrering vellykket"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "For å få tilgang til hvelvet, så må enheten din bli autorisert av hvelvets eier."; "hubAuthentication.requireAccountInit.alert.title" = "Påkrevd handling"; "hubAuthentication.requireAccountInit.alert.message" = "For å fortsette, fullfør trinnene som kreves i din Hub-brukerprofil."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Gå til profil"; @@ -283,7 +281,6 @@ "vaultDetail.removeVault.footer" = "Dette vil bare fjerne hvelvet fra listen over hvelv. Ingen krypterte filer blir slettet."; "vaultDetail.renameVault.progress" = "Endrer navn…"; "vaultDetail.unlocked.footer" = "Hvelvet ditt er for øyeblikket låst opp i Filer-appen."; -"vaultDetail.unlockVault.footer" = "Skriv inn passord for \"%@\" for å lagre det i iOS-nøkkelringen og aktivere %@."; "vaultList.header.title" = "Hvelv"; "vaultList.emptyList.message" = "Trykk her for å legge til et hvelv"; diff --git a/SharedResources/nl.lproj/Localizable.strings b/SharedResources/nl.lproj/Localizable.strings index fbb960740..832bba750 100644 --- a/SharedResources/nl.lproj/Localizable.strings +++ b/SharedResources/nl.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "Er is geen kluis geselecteerd."; "hubAuthentication.title" = "Hub Kluis"; -"hubAuthentication.accessNotGranted" = "Uw toestel is nog niet gemachtigd om toegang te krijgen tot deze kluis. Vraag de eigenaar van de kluis om toestemming te geven."; +"hubAuthentication.accessNotGranted" = "U bent niet gemachtigd om toegang te krijgen tot deze kluis. Vraag de eigenaar van de kluis om u toestemming te geven."; "hubAuthentication.licenseExceeded" = "Uw Cryptomator Hub installatie heeft een ongeldige licentie. Contacteer een Hub administrator om de licentie te upgraden of te verlengen."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Naam van toestel"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Dit lijkt de eerste Hub toegang te zijn vanaf dit toestel. Om dit toestel te autoriseren voor toegang, moet u dit toestel benoemen."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Uw accountsleutel is vereist om in te loggen vanuit nieuwe apps of browsers. Deze kan worden gevonden in uw profiel."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Registratie van toestel gelukt"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Om toegang te krijgen tot de kluis, moet je toestel worden gemachtigd door de eigenaar van de kluis."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Om toegang te krijgen tot de kluis, moet de eigenaar van de kluis je toestemming verlenen."; "hubAuthentication.requireAccountInit.alert.title" = "Actie vereist"; "hubAuthentication.requireAccountInit.alert.message" = "Om verder te gaan, gelieve de stappen te voltooien in uw Hub-gebruikersprofiel."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Ga naar Profiel"; +"hubAuthentication.vaultArchived" = "Deze kluis is gearchiveerd. Vraag de eigenaar van de kluis om de kluis te dearchiveren."; "intents.saveFile.missingFile" = "Het opgegeven bestand is niet geldig."; "intents.saveFile.invalidFolder" = "De opgegeven map is niet geldig."; @@ -284,7 +285,7 @@ "vaultDetail.removeVault.footer" = "Dit verwijdert alleen de kluis uit de lijst en verwijdert geen versleutelde bestanden."; "vaultDetail.renameVault.progress" = "Naam wijzigen…"; "vaultDetail.unlocked.footer" = "Je kluis is momenteel ontgrendeld in de Bestandenapp."; -"vaultDetail.unlockVault.footer" = "Voer wachtwoord voor \"%@\" in om het in de iOS-sleutelhanger op te slaan en %@ in te schakelen."; +"vaultDetail.unlockVault.footer" = "Voer wachtwoord voor \"%1$@\" in om het in de iOS-sleutelhanger op te slaan en %2$@ in te schakelen."; "vaultList.header.title" = "Kluizen"; "vaultList.emptyList.message" = "Klik hier om een kluis toe te voegen"; diff --git a/SharedResources/pl.lproj/Localizable.strings b/SharedResources/pl.lproj/Localizable.strings index 7c8487d77..0acb004b5 100644 --- a/SharedResources/pl.lproj/Localizable.strings +++ b/SharedResources/pl.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "Nie wybrano sejfu."; "hubAuthentication.title" = "Hub sejfów"; -"hubAuthentication.accessNotGranted" = "Twoje urządzenie nie zostało jeszcze upoważnione do dostępu do tego sejfu. Poproś właściciela sejfu o autoryzację."; +"hubAuthentication.accessNotGranted" = "Nie masz uprawnień dostępu do tego sejfu. Poproś właściciela sejfu o autoryzację."; "hubAuthentication.licenseExceeded" = "Twoja instancja Hub ma nieprawidłową licencję. Poproś administratora Hub o uaktualnienie lub odnowienie licencji."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Nazwa urządzenia"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Wygląda że jest to pierwszy dostęp do Huba z tego urządzenia. Aby zidentyfikować go w celu autoryzacji dostępu, musisz nazwać to urządzenie."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Twój Klucz Konta jest wymagany do zalogowania się z nowych aplikacji lub przeglądarek. Można go znaleźć w twoim profilu."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Rejestracja urządzenia powiodła się"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Aby dostać się do sejfu, Twoje urządzenie musi być autoryzowane przez właściciela sejfu."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Aby uzyskać dostęp do sejfu, jego właściciel musi udzielić Ci pozwolenia."; "hubAuthentication.requireAccountInit.alert.title" = "Wymagane działanie"; "hubAuthentication.requireAccountInit.alert.message" = "Aby kontynuować, wykonaj kroki wymagane w profilu użytkownika Hub."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Przejdź do profilu"; +"hubAuthentication.vaultArchived" = "Ten sejf został zarchiwizowany. Poproś właściciela o jego przywrócenie z archiwum."; "intents.saveFile.missingFile" = "Wskazany plik nie jest prawidłowy."; "intents.saveFile.invalidFolder" = "Wskazany folder jest niewłaściwy."; @@ -284,7 +285,7 @@ "vaultDetail.removeVault.footer" = "Spowoduje to wyłącznie usunięcie sejfu z listy, zaszyfrowane pliki nie zostaną skasowane."; "vaultDetail.renameVault.progress" = "Zmiana nazwy…"; "vaultDetail.unlocked.footer" = "Twój sejf jest obecnie odblokowany w aplikacji Pliki."; -"vaultDetail.unlockVault.footer" = "Wprowadź hasło dla \"%@\", aby zapisać je w pęku kluczy iOS i aktywować %@."; +"vaultDetail.unlockVault.footer" = "Wprowadź hasło dla \"%1$@\", aby zapisać je w bazie kluczy iOS i włączyć %2$@."; "vaultList.header.title" = "Sejfy"; "vaultList.emptyList.message" = "Kliknij tutaj, aby dodać sejf"; diff --git a/SharedResources/pt-BR.lproj/Localizable.strings b/SharedResources/pt-BR.lproj/Localizable.strings index 500f34a0c..4bca95727 100644 --- a/SharedResources/pt-BR.lproj/Localizable.strings +++ b/SharedResources/pt-BR.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "Nenhum cofre foi selecionado."; "hubAuthentication.title" = "Cofre do Hub"; -"hubAuthentication.accessNotGranted" = "Seu dispositivo ainda não foi autorizado a acessar este cofre. Peça ao proprietário do cofre para autorizá-lo."; +"hubAuthentication.accessNotGranted" = "Você não tem permissão para acessar este cofre. Peça autorização ao proprietário do cofre."; "hubAuthentication.licenseExceeded" = "Sua instância do Cryptomator Hub possui uma licença inválida. Por favor, informe um administrador do Hub para atualizar ou renovar a licença."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Nome do dispositivo"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Parece ser o primeiro acesso do Hub a partir deste dispositivo. Para identificá-lo para autorização de acesso, você precisa nomear este dispositivo."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Sua Chave de Conta é necessária para acessar a partir de novos aplicativos ou navegadores. Ela pode ser encontrada no seu perfil."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Dispositivo registrado com sucesso"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Para acessar o cofre, seu dispositivo precisa ser autorizado pelo proprietário do cofre."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Para acessar o cofre, o proprietário do cofre precisa lhe conceder permissão."; "hubAuthentication.requireAccountInit.alert.title" = "Ação necessária"; "hubAuthentication.requireAccountInit.alert.message" = "Para prosseguir, por favor preencha as etapas necessárias no seu perfil de usuário do Hub."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Ir para o Perfil"; +"hubAuthentication.vaultArchived" = "Este cofre foi arquivado. Por favor, peça ao proprietário do cofre para desarquivá-lo."; "intents.saveFile.missingFile" = "O arquivo fornecido não é válido."; "intents.saveFile.invalidFolder" = "A pasta fornecida não é válida."; @@ -285,7 +286,7 @@ Para mover o seu cofre, por favor, volte e escolha uma pasta diferente."; "vaultDetail.removeVault.footer" = "Isto só irá remover o cofre da lista de cofres e não excluir nenhum arquivo criptografado."; "vaultDetail.renameVault.progress" = "Renomeando…"; "vaultDetail.unlocked.footer" = "Seu cofre está atualmente desbloqueado no aplicativo Arquivos."; -"vaultDetail.unlockVault.footer" = "Digite a senha para \"%@\" para armazená-lo no keychain do iOS e habilitar %@."; +"vaultDetail.unlockVault.footer" = "Digite a senha para \"%1$@\" para armazená-lo no keychain do iOS e habilitar %2$@."; "vaultList.header.title" = "Cofres"; "vaultList.emptyList.message" = "Clique aqui para adicionar um cofre"; diff --git a/SharedResources/pt.lproj/Localizable.strings b/SharedResources/pt.lproj/Localizable.strings index 35f56530f..1adbb353b 100644 --- a/SharedResources/pt.lproj/Localizable.strings +++ b/SharedResources/pt.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "Nenhum cofre selecionado."; "hubAuthentication.title" = "Cofre do Hub"; -"hubAuthentication.accessNotGranted" = "O seu dispositivo ainda não foi autorizado a aceder a este cofre. Peça ao proprietário do cofre para o autorizar."; +"hubAuthentication.accessNotGranted" = "Não tem permissão para aceder a este cofre. Peça ao proprietário do cofre para o autorizar."; "hubAuthentication.licenseExceeded" = "A entidade do seu Cryptomator Hub tem uma licença inválida. Por favor, informe o administrador do Hub para atualizar ou renovar a licença."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Nome do dispositivo"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Parece ser o primeiro acesso ao Hub a partir deste dispositivo. Para identificá-lo para autorização de acesso, é preciso dar um nome a este dispositivo."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "A sua chave de conta é necessária para iniciar sessão em novos aplicativos ou navegadores. Ela pode ser encontrada no seu perfil."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Dispositivo registado com sucesso"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Para aceder ao cofre, o seu dispositivo precisa de ser autorizado pelo proprietário do cofre."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Para aceder ao cofre, o proprietário do cofre tem de dar-lhe permissão."; "hubAuthentication.requireAccountInit.alert.title" = "Ação necessária"; "hubAuthentication.requireAccountInit.alert.message" = "Para continuar, por favor conclua as etapas exigidas no seu perfil de utilizador no Hub."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Vá para o Perfil"; +"hubAuthentication.vaultArchived" = "Este cofre foi arquivado. Por favor, peça ao proprietário do cofre para o desarquivar."; "intents.saveFile.missingFile" = "O ficheiro especificado não é válido."; "intents.saveFile.invalidFolder" = "A pasta especificada não é válida."; @@ -284,7 +285,7 @@ "vaultDetail.removeVault.footer" = "Isto só irá remover o cofre da lista de cofres e não irá apagar nenhum ficheiro encriptado."; "vaultDetail.renameVault.progress" = "A Renomear…"; "vaultDetail.unlocked.footer" = "O seu cofre está de momento desbloqueado na aplicação Ficheiros."; -"vaultDetail.unlockVault.footer" = "Insira a palavra-passe de \"%@\" para a armazenar no Porta-chaves do iOS e para ativar %@."; +"vaultDetail.unlockVault.footer" = "Introduzir palavra-passe de \"%1$@\" para guardar no porta-chaves do iOS e ativar %2$@."; "vaultList.header.title" = "Cofres"; "vaultList.emptyList.message" = "Clique aqui para adicionar um cofre"; diff --git a/SharedResources/ro.lproj/Localizable.strings b/SharedResources/ro.lproj/Localizable.strings index 2cb8b54fb..f5607d65a 100644 --- a/SharedResources/ro.lproj/Localizable.strings +++ b/SharedResources/ro.lproj/Localizable.strings @@ -115,12 +115,11 @@ "getFolderIntent.error.noVaultSelected" = "Nici un seif nu a fost ales."; "hubAuthentication.title" = "Seif Hub"; -"hubAuthentication.accessNotGranted" = "Dispozitivul dvs. nu a fost autorizat să acceseze acest seif. Solicitați proprietarului seifului să va autorizeze accesul."; "hubAuthentication.licenseExceeded" = "Instanța Hub are o licență invalidă. Vă rugăm să informați un administrator Hub să actualizeze sau să reînnoiască licența."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Numele dispozitivului"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Se pare că este prima data când accesați Hub-ul de pe acest dispozitiv. Trebuie sa denumiți acest dispozitiv pentru autorizarea accesului."; +"hubAuthentication.deviceRegistration.accountKey.footer.title" = "Cheia contului dvs. este necesară pentru a vă conecta din aplicații sau browsere noi. Aceasta poate fi găsită în profilul dvs."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Dispozitiv de înregistrare cu succes"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Pentru a accesa acest seif, dispozitivul dvs. trebuie să fie autorizat de proprietarul seifului."; "hubAuthentication.requireAccountInit.alert.title" = "Operație necesară"; "hubAuthentication.requireAccountInit.alert.message" = "Pentru a continua, vă rugăm să finalizaţi paşii necesari în profilul dumneavoastra din Hub."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Mergi la profil"; @@ -198,7 +197,7 @@ "settings.aboutCryptomator.title" = "Versiunea %@ (%@)"; "settings.cacheSize" = "Dimensiunea cache-ului"; "settings.clearCache" = "Golește memoria cache"; -"settings.cloudServices" = "Servicii Cloud"; +"settings.cloudServices" = "Servicii in nor."; "settings.contact" = "Contact"; "settings.debugMode" = "Mod De Depanare"; "settings.debugMode.alert.message" = "În acest mod, datele sensibile pot fi scrise într-un fișier jurnal de pe dispozitivul dumneavoastră (de exemplu, nume de fișiere și căi de fișiere). Parolele, cookie-urile etc. sunt excluse în mod explicit.\n\nNu uitați să dezactivați modul de depanare cât mai curând posibil."; @@ -282,7 +281,6 @@ "vaultDetail.removeVault.footer" = "Acest lucru va elimina doar seiful din lista de seifuri și nu va șterge niciun fișier criptat."; "vaultDetail.renameVault.progress" = "În proces de redenumire…"; "vaultDetail.unlocked.footer" = "Seiful dvs. este în prezent deblocat în aplicația fișiere."; -"vaultDetail.unlockVault.footer" = "Introduceți parola pentru \"%@\" pentru a o stoca în iOS keychain și pentru a activa %@."; "vaultList.header.title" = "Seifuri"; "vaultList.emptyList.message" = "Atinge aici pentru a adăuga un seif"; diff --git a/SharedResources/ru.lproj/Localizable.strings b/SharedResources/ru.lproj/Localizable.strings index c006e6656..9bfb35764 100644 --- a/SharedResources/ru.lproj/Localizable.strings +++ b/SharedResources/ru.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "Не выбрано хранилище."; "hubAuthentication.title" = "Хаб-хранилище"; -"hubAuthentication.accessNotGranted" = "Ваше устройство ещё не авторизовано для доступа к этому хранилищу. Попросите владельца хранилища предоставить разрешение."; +"hubAuthentication.accessNotGranted" = "У вас нет разрешения на доступ к этому хранилищу. Попросите владельца хранилища авторизовать вас."; "hubAuthentication.licenseExceeded" = "У вашего Cryptomator Hub неверная лицензия. Попросите Hub администратора обновить или продлить лицензию."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Имя устройства"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Похоже, это первый доступ к Hub с данного устройства. Чтобы идентифицировать его для предоставления доступа, нужно дать устройству имя."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Для входа в систему из новых приложений или браузеров требуется ключ вашего аккаунта. Он находится в вашем профиле."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Устройство успешно зарегистрировано"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Для доступа к хранилищу ваше устройство должно быть авторизовано владельцем хранилища."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Для доступа к хранилищу его владелец должен предоставить вам разрешение."; "hubAuthentication.requireAccountInit.alert.title" = "Требуется действие"; "hubAuthentication.requireAccountInit.alert.message" = "Для продолжения выполните необходимые шаги в вашем профиле пользователя Hub."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Перейти в профиль"; +"hubAuthentication.vaultArchived" = "Это хранилище помещено в архив. Попросите владельца хранилища разархивировать его."; "intents.saveFile.missingFile" = "Выбран некорректный файл."; "intents.saveFile.invalidFolder" = "Выбрана некорректная папка."; @@ -284,7 +285,7 @@ "vaultDetail.removeVault.footer" = "Будет удалено только хранилище из списка, но не зашифрованные файлы."; "vaultDetail.renameVault.progress" = "Переименование…"; "vaultDetail.unlocked.footer" = "Сейчас хранилище разблокировано в приложении \"Файлы\"."; -"vaultDetail.unlockVault.footer" = "Введите пароль для \"%@\", чтобы сохранить его в Связке ключей iOS и включить %@."; +"vaultDetail.unlockVault.footer" = "Введите пароль для \"%1$@\", чтобы сохранить его в Связке ключей iOS и включить %2$@."; "vaultList.header.title" = "Хранилища"; "vaultList.emptyList.message" = "Нажмите здесь, чтобы добавить хранилище"; diff --git a/SharedResources/sk.lproj/Localizable.strings b/SharedResources/sk.lproj/Localizable.strings index 7bb0625b5..6627959db 100644 --- a/SharedResources/sk.lproj/Localizable.strings +++ b/SharedResources/sk.lproj/Localizable.strings @@ -116,13 +116,11 @@ "getFolderIntent.error.noVaultSelected" = "Nebol zvolený žiaden trezor."; "hubAuthentication.title" = "Hub trezora"; -"hubAuthentication.accessNotGranted" = "Vaše zaradenie zatiaľ ešte nebolo autorizované pre pristúp tohto trezora. Požiadajte majiteľa trezora o autorizovanie."; "hubAuthentication.licenseExceeded" = "Vaša inštancia Cryptomator Hub-u má neplatnú licenciu. Prosím informujte Hub administrátora pre aktualizáciu alebo obnovenie licencie."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Názov zariadenia"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Zdá sa, že ide o prvý prístup k Hub-u z tohto zariadenia. Z dôvodu identifikácie prístupovej autorizácie, je potrebné pomenovať toto zariadenie."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Váš kľúč účtu je vyžadovaný pre prihlásenie z nových aplikácii alebo prehliadačov. Môžete ho nájsť vo vašom profile."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Registrácia zariadenia úspešná"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Sprístupniť trezor, Vaše zariadenie musí byť autorizované vlastníkom trezora."; "hubAuthentication.requireAccountInit.alert.title" = "Vyžaduje sa akcia"; "hubAuthentication.requireAccountInit.alert.message" = "Pre pokračovanie, prosím splňte kroky požadované vo Vašom užívateľskom Hub profile."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Prejsť na profil"; @@ -284,7 +282,6 @@ "vaultDetail.removeVault.footer" = "Toto iba odstráni trezor zo zoznamu trezorov a nezmaže žiadne zakódované súbory."; "vaultDetail.renameVault.progress" = "Premenovanie…"; "vaultDetail.unlocked.footer" = "Váš trezor je aktuálne odomknutý v súborovej aplikácii."; -"vaultDetail.unlockVault.footer" = "Vložte heslo pre \"%@\" pre jeho uloženie v iOS keychain a pre povolenie %@."; "vaultList.header.title" = "Trezory"; "vaultList.emptyList.message" = "Kliknúť sem pre pridanie trezora"; diff --git a/SharedResources/sl.lproj/Localizable.strings b/SharedResources/sl.lproj/Localizable.strings index c060fa2cc..34884df75 100644 --- a/SharedResources/sl.lproj/Localizable.strings +++ b/SharedResources/sl.lproj/Localizable.strings @@ -115,13 +115,11 @@ "getFolderIntent.error.noVaultSelected" = "Ni bil izbran noben trezor."; "hubAuthentication.title" = "Hub trezor"; -"hubAuthentication.accessNotGranted" = "Vaša naprava še ni bila avtorizirana za dostopanje do tega trezorja. Lastnika trezorja vprašajte za avtorizacijo."; "hubAuthentication.licenseExceeded" = "Vaša Cryptomator Hub instanca ima neveljavno licenco. Prosimo obvestite Hub administratorja, da mora nadgraditi ali obnoviti licenco."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Ime naprave"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Zdi se, da prvič dostopate do Hub-a s te naprave. Napravo morate poimenovati, da jo lahko identificirate za avtorizacijo za dostop."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Vaš Account Key je zahtevan za prijavo z novih aplikacij ali brskalnikov. Najdete ga lahko v svojem profilu."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Registracije naprave uspešna"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Lastnik trezorja mora odobriti vašo napravo za dostopanje do trezorja."; "hubAuthentication.requireAccountInit.alert.title" = "Potrebno dejanje"; "hubAuthentication.requireAccountInit.alert.message" = "Za nadaljevanje, prosimo zaključite zahtevane korake v svojem Hub uporabniškem profilu."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Pojdi v profil"; @@ -226,7 +224,6 @@ "vaultDetail.removeVault.footer" = "To bo samo odstranilo trezor s seznama trezorjev in ne bo izbrisalo nobenih zašifriranih datotek."; "vaultDetail.renameVault.progress" = "Preimenovanje …"; "vaultDetail.unlocked.footer" = "Vaš trezor je trenutno odklenjen v aplikaciji Datoteke."; -"vaultDetail.unlockVault.footer" = "Vnesite geslo za \"%@\", da ga shranite v iOS ključni verigi in omogočite %@."; "vaultList.header.title" = "Trezorji"; "vaultList.emptyList.message" = "Tapnite tu za dodajanje trezorja"; diff --git a/SharedResources/sv.lproj/Localizable.strings b/SharedResources/sv.lproj/Localizable.strings index 5c1329420..c1fbafe0e 100644 --- a/SharedResources/sv.lproj/Localizable.strings +++ b/SharedResources/sv.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "Inget valv har valts."; "hubAuthentication.title" = "Hubb valv"; -"hubAuthentication.accessNotGranted" = "Din enhet har ännu inte behörighet att komma åt detta valv. Be valvägaren att godkänna det."; +"hubAuthentication.accessNotGranted" = "Du har inte behörighet att komma åt detta valv. Be valvägaren att godkänna dig."; "hubAuthentication.licenseExceeded" = "Din Cryptomator Hub-instans har en ogiltig licens. Vänligen informera en Hub administratör för att uppgradera eller förnya licensen."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Enhetsnamn"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Detta verkar vara den första Hub-åtkomsten från den här enheten. För att identifiera den för åtkomstbehörighet, måste du namnge den här enheten."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Din kontonyckel krävs för att logga in från nya appar eller webbläsare. Den finns i din profil."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Enhetsregistrering lyckades"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "För att komma åt valvet måste din enhet godkännas av valvägaren."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "För att komma åt valvet måste valvägaren ge dig behörighet."; "hubAuthentication.requireAccountInit.alert.title" = "Åtgärd krävs"; "hubAuthentication.requireAccountInit.alert.message" = "För att fortsätta, vänligen fyll i de steg som krävs i din Hub-användarprofil."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Gå till profil"; +"hubAuthentication.vaultArchived" = "Detta valv har arkiverats. Be valvägaren att avarkivera det."; "intents.saveFile.missingFile" = "Den angivna filen är inte giltig."; "intents.saveFile.invalidFolder" = "Den angivna mappen är inte giltig."; @@ -284,7 +285,7 @@ "vaultDetail.removeVault.footer" = "Detta kommer bara att ta bort valvet från valvlistan och inte ta bort några krypterade filer."; "vaultDetail.renameVault.progress" = "Döper om…"; "vaultDetail.unlocked.footer" = "Ditt valv är för närvarande upplåst i appen Filer."; -"vaultDetail.unlockVault.footer" = "Ange lösenord för \"%@\" för att lagra det i iOS nyckelring och för att aktivera %@."; +"vaultDetail.unlockVault.footer" = "Ange lösenord för \"%1$@\" för att lagra det i iOS nyckelring och för att aktivera %2$@."; "vaultList.header.title" = "Valv"; "vaultList.emptyList.message" = "Klicka här för att lägga till valv"; diff --git a/SharedResources/sw-TZ.lproj/Localizable.strings b/SharedResources/sw-TZ.lproj/Localizable.strings index c75a0bd30..b44e833c2 100644 --- a/SharedResources/sw-TZ.lproj/Localizable.strings +++ b/SharedResources/sw-TZ.lproj/Localizable.strings @@ -111,10 +111,8 @@ "getFolderIntent.error.missingPath" = "Hakuna njia iliyotolewa. Tafadhali toa njia halali ambayo folda inapaswa kurejeshwa."; "getFolderIntent.error.noVaultSelected" = "Hakuna kuba iliyochaguliwa."; -"hubAuthentication.accessNotGranted" = "Kifaa chako bado hakijaidhinishwa kufikia kuba hii. Uliza mwenye kuba aidhinishe."; "hubAuthentication.licenseExceeded" = "Mfano wako wa Cryptomator Hub una leseni batili. Tafadhali mjulishe msimamizi wa Hub ili kuboresha au kusasisha leseni."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Jina la Kifaa"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Ili kufikia kuba, kifaa chako kinahitaji kuidhinishwa na mmiliki wa kuba."; "intents.saveFile.missingFile" = "Faili iliyotolewa si sahihi."; "intents.saveFile.invalidFolder" = "Faili iliyotolewa si sahihi."; @@ -273,7 +271,6 @@ "vaultDetail.removeVault.footer" = "Hii itaondoa tu kuba kutoka kwenye orodha ya kuba na sio kufuta faili zozote zilizosimbwa kwa njia fiche."; "vaultDetail.renameVault.progress" = "Inaita jina jipya…"; "vaultDetail.unlocked.footer" = "Kuba yako imefunguliwa kwa sasa katika programu ya Mafaili."; -"vaultDetail.unlockVault.footer" = "Ingiza nenosiri la \"%@\" ili kuihifadhi kwenye kitufe cha iOS na kuwezesha %@."; "vaultList.header.title" = "Kuba"; "vaultList.emptyList.message" = "Gonga hapa ili kuongeza kuba"; diff --git a/SharedResources/th.lproj/Localizable.strings b/SharedResources/th.lproj/Localizable.strings index 34e765761..0f8473b54 100644 --- a/SharedResources/th.lproj/Localizable.strings +++ b/SharedResources/th.lproj/Localizable.strings @@ -89,7 +89,6 @@ "fileProvider.uploadProgress.missingDomainError" = "ไม่พบโดเมน"; "hubAuthentication.title" = "Hub Vault"; -"hubAuthentication.accessNotGranted" = "อุปกรณ์ของคุณยังไม่ได้รับการอนุญาตให้เข้าถึง vault นี้ โปรดขอให้เจ้าของ vault อนุญาต"; "hubAuthentication.licenseExceeded" = "ระบบ Cryptomator Hub ของคุณมีสิทธิ์การใช้ไม่ถูกต้อง โปรดแจ้งผู้ดูแล Hub เพื่ออัปเกรดหรือต่ออายุสิทธิ์การใช้"; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "ชื่ออุปกรณ์"; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "ลงทะเบียนอุปกรณ์สำเร็จ"; @@ -193,7 +192,6 @@ "vaultDetail.moveVault.progress" = "กำลังย้าย…"; "vaultDetail.removeVault.footer" = "ขั้นตอนนี้เพียงลบ vault ออกจากรายการทั้งหมด แต่ไม่ลบไฟล์ที่ถูกเข้ารหัสใดๆ"; "vaultDetail.renameVault.progress" = "กำลังเปลี่ยนชื่อ…"; -"vaultDetail.unlockVault.footer" = "กรอกรหัสผ่านสำหรับ \"%@\" เพื่อเก็บไว้ในพวงกุญแจ iOS และเปิดใช้งาน %@"; "vaultList.header.title" = "Vaults"; "vaultList.emptyList.message" = "แตะที่นี่เพื่อเพิ่ม vault"; diff --git a/SharedResources/tr.lproj/Localizable.strings b/SharedResources/tr.lproj/Localizable.strings index e5f9c4ea8..e39586f71 100644 --- a/SharedResources/tr.lproj/Localizable.strings +++ b/SharedResources/tr.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "Herhangi bir kasa seçili değil."; "hubAuthentication.title" = "Hub Kasası"; -"hubAuthentication.accessNotGranted" = "Cihazınız henüz bu kasaya erişim için yetkilendirilmedi. Kasa sahibinden yetkilendirmesini isteyin."; +"hubAuthentication.accessNotGranted" = "Bu kasaya erişme izniniz yok. Kasa sahibinden size yetki vermesini isteyin."; "hubAuthentication.licenseExceeded" = "Cryptomator Hub örneğinizin geçersiz bir lisansı var. Lütfen lisansı yükseltmek veya yenilemek için bir Hub yöneticisini bilgilendirin."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Cihaz Adı"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Bu cihazdan ilk Hub erişimi gibi görünüyor. Erişim yetkilendirmesini tanımlamak için bu cihazı isimlendirmeniz gerekir."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Yeni uygulamalardan veya tarayıcılardan giriş yapmak için Hesap Anahtarınız gereklidir. Profilinizde bulunabilir."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Cihaz Kaydı Başarılı"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Kasaya erişmek için cihazınızın kasa sahibi tarafından yetkilendirilmesi gerekir."; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Kasaya erişmek için kasa sahibinin size izin vermesi gerekir."; "hubAuthentication.requireAccountInit.alert.title" = "Eylem Gerekiyor"; "hubAuthentication.requireAccountInit.alert.message" = "Devam etmek için lütfen Hub kullanıcı profilinizde gerekli adımları tamamlayın."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Profile Git"; +"hubAuthentication.vaultArchived" = "Bu kasa arşivlendi. Lütfen kasa sahibinden onu açmasını isteyin."; "intents.saveFile.missingFile" = "Sağlanan dosya geçersiz."; "intents.saveFile.invalidFolder" = "Sağlanan klasör geçersiz."; @@ -284,7 +285,7 @@ "vaultDetail.removeVault.footer" = "Bu, yalnızca kasayı kasa listesinden kaldırır ve şifrelenmiş dosyaları silmez."; "vaultDetail.renameVault.progress" = "Yeniden adlandırılıyor…"; "vaultDetail.unlocked.footer" = "Kasanızın kilidi şu anda Dosyalar uygulamasında açık."; -"vaultDetail.unlockVault.footer" = "iOS anahtar zincirinde saklamak ve %@'yi etkinleştirmek için \"%@\" parolasını girin."; +"vaultDetail.unlockVault.footer" = "iOS anahtar zincirinde saklamak ve %2$@ öğesini etkinleştirmek için “%1$@” parolasını girin."; "vaultList.header.title" = "Kasalar"; "vaultList.emptyList.message" = "Kasa eklemek için buraya tıklayın"; diff --git a/SharedResources/ug.lproj/Localizable.strings b/SharedResources/ug.lproj/Localizable.strings index 3da84fa43..5dd522cf5 100644 --- a/SharedResources/ug.lproj/Localizable.strings +++ b/SharedResources/ug.lproj/Localizable.strings @@ -9,7 +9,6 @@ "addVault.createNewVault.setVaultName.cells.name" = "ئامبار ئىسمى"; "addVault.createNewVault.chooseCloud.header" = "Cryptomator ئامبىرىڭىزنىڭ شىفىرلانغان ھۆججەتلىرىنى قەيەردە ساقلىشى كېرەك?"; "fileProvider.error.unlockButton" = "قۇلۇپنى ئاچ"; -"hubAuthentication.accessNotGranted" = "ئۈسكۈنىڭىز تېخى بۇ ئامبارغا كىرىشكە ھوقۇقلاندۇرۇلمىغان. ئامبار ئىگىسىدىن ھوقۇقلاندۇرۇشنى تەلەپ قىلىڭ."; "hubAuthentication.licenseExceeded" = "سىزنىڭ Cryptomator Hub نۇسخىڭىزنىڭ ئىناۋەتسىز ئىجازەتنامىسى بار. Hub باشقۇرغۇچىسىغا ئىجازەتنامىنى يۇقىرى دەرىجىگە كۆتۈر."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "ئۈسكۈنە ئىسمى"; diff --git a/SharedResources/uk.lproj/Localizable.strings b/SharedResources/uk.lproj/Localizable.strings index 752a09d22..56531c6ed 100644 --- a/SharedResources/uk.lproj/Localizable.strings +++ b/SharedResources/uk.lproj/Localizable.strings @@ -101,6 +101,7 @@ "fileProvider.error.biometricalAuthWrongPassword.message" = "Збережений для %@ пароль неправильний. Будь ласка, спробуйте ще раз і введіть ваш пароль для повторного увімкнення %@."; "fileProvider.error.defaultLock.title" = "Потрібно розблокувати"; "fileProvider.error.defaultLock.message" = "Щоб отримати доступ і показати вміст вашого сховища, воно має бути розблоковане."; +"fileprovider.error.unauthorized.text" = "У доступі до вашого сховища \"%@\" відмовлено. Відкрийте головний додаток, щоб перевірити підключення та повторно пройти автентифікацію, якщо це необхідно."; "fileProvider.error.unlockButton" = "Розблокувати"; "fileProvider.clearFileFromCache.title" = "Очистити файл з кешу"; "fileProvider.clearFileFromCache.message" = "Це видаляє лише локальний файл з вашого пристрою, але не видаляє файл у хмарі."; @@ -115,13 +116,11 @@ "getFolderIntent.error.noVaultSelected" = "Сховище не вибрано."; "hubAuthentication.title" = "Сховище Hub"; -"hubAuthentication.accessNotGranted" = "Ваш пристрій ще не має прав доступу до цього сховища. Попросіть власника сховища дозволити доступ."; "hubAuthentication.licenseExceeded" = "У вашого Cryptomator Hub недійсна ліцензія. Будь ласка, зв'яжіться з адміністратором Hub, щоб оновити або продовжити дію ліцензії."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Назва пристрою"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "Схоже, це перша спроба доступу до Hub з цього пристрою. Для того, щоб ідентифікувати його для надання доступу, вам потрібно назвати цей пристрій."; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "Ваш ключ облікового запису необхідний для входу в систему з нових програм. Його можна знайти у своєму профілі."; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "Реєстрація пристрою успішна"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Щоб використовувати сховище, його власник має дозволити доступ вашому пристрою."; "hubAuthentication.requireAccountInit.alert.title" = "Необхідна дія"; "hubAuthentication.requireAccountInit.alert.message" = "Щоб продовжити, будь ласка, завершіть обов'язкові кроки у вашому профілі користувача Hub."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Перейти до профілю"; @@ -283,7 +282,6 @@ "vaultDetail.removeVault.footer" = "Це прибере сховище лише зі списку сховищ, але не видалить зашифрованих файлів."; "vaultDetail.renameVault.progress" = "Перейменування…"; "vaultDetail.unlocked.footer" = "Ваше сховище вже розблоковано в додатку \"Файли\"."; -"vaultDetail.unlockVault.footer" = "Введіть пароль для \"%@\" для зберігання його у ланцюжку ключів iOS та активації %@."; "vaultList.header.title" = "Сховища"; "vaultList.emptyList.message" = "Натисніть тут, щоб додати сховище"; diff --git a/SharedResources/vi.lproj/Localizable.strings b/SharedResources/vi.lproj/Localizable.strings index 43f02dfae..95b1e46bc 100644 --- a/SharedResources/vi.lproj/Localizable.strings +++ b/SharedResources/vi.lproj/Localizable.strings @@ -87,10 +87,8 @@ "fileProvider.uploadProgress.connecting" = "Đang kết nối…"; "fileProvider.uploadProgress.title" = "Đang tải lên…"; "fileProvider.uploadProgress.missingDomainError" = "Không thể tìm thấy tên miền."; -"hubAuthentication.accessNotGranted" = "Thiết bị của bạn chưa được phép truy cập vault này. Yêu cầu chủ sở hữu cấp phép."; "hubAuthentication.licenseExceeded" = "Phiên bản Cryptomator Hub của bạn có giấy phép không hợp lệ. Vui lòng thông báo cho quản trị viên Hub để nâng cấp hoặc gia hạn giấy phép."; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "Tên thiết bị"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "Để truy cập vault, thiết bị của bạn cần được chủ sở hữu cho phép."; "hubAuthentication.requireAccountInit.alert.actionButton" = "Xem hồ sơ"; "keepUnlocked.alert.title" = "Khóa Vault?"; diff --git a/SharedResources/zh-HK.lproj/Localizable.strings b/SharedResources/zh-HK.lproj/Localizable.strings index ee2ee3ac8..6706b3181 100644 --- a/SharedResources/zh-HK.lproj/Localizable.strings +++ b/SharedResources/zh-HK.lproj/Localizable.strings @@ -111,10 +111,8 @@ "getFolderIntent.error.missingPath" = "沒有提供路徑。請提供應返回資料夾的有效路徑。"; "getFolderIntent.error.noVaultSelected" = "未選擇任何加密庫。"; -"hubAuthentication.accessNotGranted" = "您的設備權限尚未允許存取加密庫,請聯絡加密庫擁有者"; "hubAuthentication.licenseExceeded" = "此 Cryptomator Hub 實例授權無效,請聯繫管理員升級或續訂授權。"; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "設備名稱"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "想讀取檔加密庫,你的設備需得到檔案庫擁有者的授權。"; "intents.saveFile.missingFile" = "提供的檔案無效。"; "intents.saveFile.invalidFolder" = "提供的資料夾無效。"; @@ -274,7 +272,6 @@ "vaultDetail.removeVault.footer" = "這只會從列表中移除加密庫,而不會刪除任何加密文件。"; "vaultDetail.renameVault.progress" = "重新命名中…"; "vaultDetail.unlocked.footer" = "加密庫目前在「檔䅁」應用程式中解鎖。"; -"vaultDetail.unlockVault.footer" = "輸入「%@」的密碼以將其儲存在 iOS 鑰匙圈中並啟用 %@。"; "vaultList.header.title" = "加密庫"; "vaultList.emptyList.message" = "點擊此處來加入加密庫"; diff --git a/SharedResources/zh-Hans.lproj/Localizable.strings b/SharedResources/zh-Hans.lproj/Localizable.strings index dc88e98f4..bcfff989c 100644 --- a/SharedResources/zh-Hans.lproj/Localizable.strings +++ b/SharedResources/zh-Hans.lproj/Localizable.strings @@ -116,13 +116,11 @@ "getFolderIntent.error.noVaultSelected" = "未选择任何保险库。"; "hubAuthentication.title" = "Hub 保险库"; -"hubAuthentication.accessNotGranted" = "您的设备尚未授权访问此保险库,请联系保险库所有者。"; "hubAuthentication.licenseExceeded" = "此 Cryptomator Hub 实例许可证无效,请联系Hub管理员升级或者续订许可证。"; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "设备名称"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "这似乎是设备的首次 Hub 访问。为了识别它以进行访问授权,您需要命名此设备"; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "从新应用或浏览器登录需要您的账户密钥,您可以在个人中心找到它"; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "注册设备成功"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "要访问保险库,设备需得到保险库所有者的授权。"; "hubAuthentication.requireAccountInit.alert.title" = "需要操作"; "hubAuthentication.requireAccountInit.alert.message" = "要继续,请完成 Hub 用户中心所需的步骤"; "hubAuthentication.requireAccountInit.alert.actionButton" = "前往个人中心"; @@ -284,7 +282,6 @@ "vaultDetail.removeVault.footer" = "这只会从保险库列表中移除,并不会删除任何加密文件。"; "vaultDetail.renameVault.progress" = "正在重命名……"; "vaultDetail.unlocked.footer" = "您的保险库目前已在文件应用中解锁。"; -"vaultDetail.unlockVault.footer" = "请输入 \"%@\" 的密码以将其存储到 iOS 钥匙串并启用 %@。"; "vaultList.header.title" = "保险库"; "vaultList.emptyList.message" = "点击此处添加保险库"; diff --git a/SharedResources/zh-Hant.lproj/Localizable.strings b/SharedResources/zh-Hant.lproj/Localizable.strings index 0a7db6f86..8d56e71a2 100644 --- a/SharedResources/zh-Hant.lproj/Localizable.strings +++ b/SharedResources/zh-Hant.lproj/Localizable.strings @@ -116,16 +116,17 @@ "getFolderIntent.error.noVaultSelected" = "未選擇任何加密檔案庫。"; "hubAuthentication.title" = "Hub 加密檔案庫"; -"hubAuthentication.accessNotGranted" = "您的設備權限尚未允許存取檔案庫,請聯絡檔案庫擁有者"; +"hubAuthentication.accessNotGranted" = "您沒有存取此加密檔案庫的權限。請與向加密檔案庫的所有者獲取授權。"; "hubAuthentication.licenseExceeded" = "此 Cryptomator Hub 實例授權無效,請聯繫管理員升級或續訂授權。"; "hubAuthentication.deviceRegistration.deviceName.cells.name" = "設備名稱"; "hubAuthentication.deviceRegistration.deviceName.footer.title" = "似乎這是第一次 Hub 訪問此設備。為了辨識它以授權訪問,您需要命名此設備。"; "hubAuthentication.deviceRegistration.accountKey.footer.title" = "需要您的帳戶金鑰才能從新應用或瀏覽器登入。 可以在你的個人資料中找到它。"; "hubAuthentication.deviceRegistration.needsAuthorization.alert.title" = "註冊設備成功"; -"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "想讀取檔案庫,你的設備需得到檔案庫擁有者的授權。"; +"hubAuthentication.deviceRegistration.needsAuthorization.alert.message" = "如要存取加密檔案庫,請向加密檔案庫的所有者獲取權限。"; "hubAuthentication.requireAccountInit.alert.title" = "需進一步操作"; "hubAuthentication.requireAccountInit.alert.message" = "請完成您使用者檔案中所需的步驟,以便繼續進行。"; "hubAuthentication.requireAccountInit.alert.actionButton" = "轉到個人資料"; +"hubAuthentication.vaultArchived" = "這個加密檔案庫以被封存。請向加密檔案庫的所有者要求解封。"; "intents.saveFile.missingFile" = "提供的檔案無效。"; "intents.saveFile.invalidFolder" = "提供的資料夾無效。"; @@ -285,7 +286,7 @@ "vaultDetail.removeVault.footer" = "這只會從列表中移除加密檔案庫,而不會刪除任何加密文件。"; "vaultDetail.renameVault.progress" = "正在重命名……"; "vaultDetail.unlocked.footer" = "您的加密檔案庫目前在「檔䅁」應用程式中解鎖。"; -"vaultDetail.unlockVault.footer" = "輸入「%@」的密碼以將其儲存在 iOS 鑰匙圈中並啟用 %@。"; +"vaultDetail.unlockVault.footer" = "輸入「%1$@」的密碼以將其儲存在 iOS 鑰匙圈中並啟用 %2$@。"; "vaultList.header.title" = "加密檔案庫"; "vaultList.emptyList.message" = "點擊此處以添加加密檔案庫"; From cff9da01aa4c512484cf6fea58b0e1c3da81c6db Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Tue, 11 Feb 2025 11:44:38 +0100 Subject: [PATCH 12/13] Preparing 2.6.5 --- Cryptomator.xcodeproj/project.pbxproj | 4 ++-- fastlane/changelog.txt | 4 +++- fastlane/config/freemium/metadata/de-DE/release_notes.txt | 4 +++- fastlane/config/freemium/metadata/en-US/release_notes.txt | 4 +++- fastlane/config/premium/metadata/de-DE/release_notes.txt | 6 +++--- fastlane/config/premium/metadata/en-US/release_notes.txt | 6 +++--- 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/Cryptomator.xcodeproj/project.pbxproj b/Cryptomator.xcodeproj/project.pbxproj index e9cfa0612..1d2f70b2b 100644 --- a/Cryptomator.xcodeproj/project.pbxproj +++ b/Cryptomator.xcodeproj/project.pbxproj @@ -3320,7 +3320,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 14.0; - MARKETING_VERSION = 2.6.4; + MARKETING_VERSION = 2.6.5; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -3382,7 +3382,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 14.0; - MARKETING_VERSION = 2.6.4; + MARKETING_VERSION = 2.6.5; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; OTHER_SWIFT_FLAGS = "-Xfrontend -warn-long-expression-type-checking=200 -Xfrontend -warn-long-function-bodies=200"; diff --git a/fastlane/changelog.txt b/fastlane/changelog.txt index d0e0406b0..90a739f3a 100644 --- a/fastlane/changelog.txt +++ b/fastlane/changelog.txt @@ -1 +1,3 @@ -Small adjustments to provide you with timely and relevant updates. We hope you enjoy the app! \ No newline at end of file +- Improved error messages for Hub vaults (#397, #398, #404). +- Removed unusable Touch ID / Face ID option for Hub vaults (#396, #404). +- Removed rename/move actions for Hub vaults to prevent unintended modifications (#406). \ No newline at end of file diff --git a/fastlane/config/freemium/metadata/de-DE/release_notes.txt b/fastlane/config/freemium/metadata/de-DE/release_notes.txt index fa4fe2bff..216632215 100644 --- a/fastlane/config/freemium/metadata/de-DE/release_notes.txt +++ b/fastlane/config/freemium/metadata/de-DE/release_notes.txt @@ -1 +1,3 @@ -Kleine Anpassungen, um zeitnahe und relevante Updates zu bieten. Wir wünschen viel Spaß mit der App! \ No newline at end of file +- Fehlermeldungen für Hub-Tresore verbessert (#397, #398, #404). +- Unbrauchbare Touch ID / Face ID Option für Hub Tresore entfernt (#396, #404). +- Aktionen für Umbenennen/Verschieben von Hub-Tresoren entfernt, um unbeabsichtigte Änderungen zu verhindern (#406). \ No newline at end of file diff --git a/fastlane/config/freemium/metadata/en-US/release_notes.txt b/fastlane/config/freemium/metadata/en-US/release_notes.txt index d0e0406b0..90a739f3a 100644 --- a/fastlane/config/freemium/metadata/en-US/release_notes.txt +++ b/fastlane/config/freemium/metadata/en-US/release_notes.txt @@ -1 +1,3 @@ -Small adjustments to provide you with timely and relevant updates. We hope you enjoy the app! \ No newline at end of file +- Improved error messages for Hub vaults (#397, #398, #404). +- Removed unusable Touch ID / Face ID option for Hub vaults (#396, #404). +- Removed rename/move actions for Hub vaults to prevent unintended modifications (#406). \ No newline at end of file diff --git a/fastlane/config/premium/metadata/de-DE/release_notes.txt b/fastlane/config/premium/metadata/de-DE/release_notes.txt index da0c1b2d3..216632215 100644 --- a/fastlane/config/premium/metadata/de-DE/release_notes.txt +++ b/fastlane/config/premium/metadata/de-DE/release_notes.txt @@ -1,3 +1,3 @@ -- Varianten von App-Icons für den dunklen und den eingefärbten Modus hinzugefügt (#385). -- Verständlicheren Fehlerdialog eingeführt, wenn der Zugriff auf einen Tresor verweigert wird und eine erneute Authentifizierung erforderlich ist (#18, #384). -- Fehlendes Schloss-Symbol in der Tresorliste behoben (#346, #386). \ No newline at end of file +- Fehlermeldungen für Hub-Tresore verbessert (#397, #398, #404). +- Unbrauchbare Touch ID / Face ID Option für Hub Tresore entfernt (#396, #404). +- Aktionen für Umbenennen/Verschieben von Hub-Tresoren entfernt, um unbeabsichtigte Änderungen zu verhindern (#406). \ No newline at end of file diff --git a/fastlane/config/premium/metadata/en-US/release_notes.txt b/fastlane/config/premium/metadata/en-US/release_notes.txt index e3fdadb74..90a739f3a 100644 --- a/fastlane/config/premium/metadata/en-US/release_notes.txt +++ b/fastlane/config/premium/metadata/en-US/release_notes.txt @@ -1,3 +1,3 @@ -- Added app icon variants for dark mode and tinted mode (#385). -- Introduced a clearer error screen when access to a vault is denied and a re-authentication is required (#18, #384). -- Fixed missing lock icon in the vaults list (#346, #386). \ No newline at end of file +- Improved error messages for Hub vaults (#397, #398, #404). +- Removed unusable Touch ID / Face ID option for Hub vaults (#396, #404). +- Removed rename/move actions for Hub vaults to prevent unintended modifications (#406). \ No newline at end of file From 460d29cc04bdf83436a06af4253a03b5d9e1b18c Mon Sep 17 00:00:00 2001 From: Tobias Hagemann Date: Tue, 11 Feb 2025 13:48:27 +0100 Subject: [PATCH 13/13] Happy new year --- Cryptomator/Resources/about.html | 2 +- fastlane/config/freemium/metadata/copyright.txt | 2 +- fastlane/config/premium/metadata/copyright.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cryptomator/Resources/about.html b/Cryptomator/Resources/about.html index c0cbb6032..8823e6518 100644 --- a/Cryptomator/Resources/about.html +++ b/Cryptomator/Resources/about.html @@ -70,6 +70,6 @@

Disclaimer

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Copyright

-

© 2016 – 2024 Skymatic GmbH. All rights reserved.

+

© 2016 – 2025 Skymatic GmbH. All rights reserved.

diff --git a/fastlane/config/freemium/metadata/copyright.txt b/fastlane/config/freemium/metadata/copyright.txt index 65cbf78b5..c0faec05e 100644 --- a/fastlane/config/freemium/metadata/copyright.txt +++ b/fastlane/config/freemium/metadata/copyright.txt @@ -1 +1 @@ -2024 cryptomator.org \ No newline at end of file +2025 cryptomator.org \ No newline at end of file diff --git a/fastlane/config/premium/metadata/copyright.txt b/fastlane/config/premium/metadata/copyright.txt index 65cbf78b5..c0faec05e 100644 --- a/fastlane/config/premium/metadata/copyright.txt +++ b/fastlane/config/premium/metadata/copyright.txt @@ -1 +1 @@ -2024 cryptomator.org \ No newline at end of file +2025 cryptomator.org \ No newline at end of file