Merge branch 'release/1.7.5'

This commit is contained in:
Julian Raufelder 2022-05-10 12:19:25 +02:00
commit 1102b82094
No known key found for this signature in database
GPG Key ID: 17EE71F6634E381D
40 changed files with 1179 additions and 203 deletions

12
.github/stale.yml vendored
View File

@ -1,10 +1,16 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
daysUntilStale: 365
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
daysUntilClose: 90
# Issues with these labels will never be considered stale
exemptLabels:
- type:security-issue
- type:security-issue # never close automatically
- type:feature-request # never close automatically
- type:enhancement # never close automatically
- type:upstream-bug # never close automatically
- state:awaiting-response # handled by different bot
- state:blocked
- state:confirmed
# Set to true to ignore issues in a milestone (defaults to false)
exemptMilestones: true
# Label to use when marking an issue as stale

View File

@ -10,20 +10,20 @@ GEM
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.571.0)
aws-sdk-core (3.130.0)
aws-partitions (1.587.0)
aws-sdk-core (3.130.2)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.525.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-kms (1.55.0)
aws-sdk-kms (1.56.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.113.0)
aws-sdk-s3 (1.114.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
aws-sigv4 (1.4.0)
aws-sigv4 (1.5.0)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
bcrypt_pbkdf (1.1.0)
@ -40,7 +40,7 @@ GEM
dotenv (2.7.6)
ed25519 (1.3.0)
emoji_regex (3.2.3)
excon (0.92.1)
excon (0.92.3)
faraday (1.10.0)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
@ -70,7 +70,7 @@ GEM
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.2.6)
fastlane (2.205.1)
fastlane (2.205.2)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@ -115,7 +115,7 @@ GEM
mime-types (~> 3.3)
fastlane-plugin-get_version_name (0.2.2)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.17.0)
google-apis-androidpublisher_v3 (0.20.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-core (0.4.2)
addressable (~> 2.5, >= 2.5.1)
@ -130,7 +130,7 @@ GEM
google-apis-core (>= 0.4, < 2.a)
google-apis-playcustomapp_v1 (0.7.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-storage_v1 (0.11.0)
google-apis-storage_v1 (0.13.0)
google-apis-core (>= 0.4, < 2.a)
google-cloud-core (1.6.0)
google-cloud-env (~> 1.0)
@ -138,7 +138,7 @@ GEM
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.2.0)
google-cloud-storage (1.36.1)
google-cloud-storage (1.36.2)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
@ -146,7 +146,7 @@ GEM
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
mini_mime (~> 1.0)
googleauth (1.1.2)
googleauth (1.1.3)
faraday (>= 0.17.3, < 3.a)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
@ -176,7 +176,7 @@ GEM
optparse (0.1.1)
os (1.1.4)
plist (3.6.0)
public_suffix (4.0.6)
public_suffix (4.0.7)
rake (13.0.6)
representable (3.1.1)
declarative (< 0.1.0)

View File

@ -2,7 +2,7 @@ apply from: 'buildsystem/dependencies.gradle'
apply plugin: "com.vanniktech.android.junit.jacoco"
buildscript {
ext.kotlin_version = '1.6.20'
ext.kotlin_version = '1.6.21'
repositories {
mavenCentral()
google()
@ -39,7 +39,7 @@ allprojects {
ext {
androidApplicationId = 'org.cryptomator'
androidVersionCode = getVersionCode()
androidVersionName = '1.7.4'
androidVersionName = '1.7.5'
}
repositories {
mavenCentral()

View File

@ -21,8 +21,8 @@ allprojects {
ext {
androidBuildToolsVersion = "30.0.3"
androidMinSdkVersion = 26
androidTargetSdkVersion = 30
androidCompileSdkVersion = 30
androidTargetSdkVersion = 31
androidCompileSdkVersion = 31
// android and java libs
androidVersion = '4.1.1.4'
@ -42,18 +42,18 @@ ext {
rxAndroidVersion = '2.1.1'
rxBindingVersion = '2.2.0'
daggerVersion = '2.41'
daggerVersion = '2.42'
gsonVersion = '2.9.0'
okHttpVersion = '4.9.3'
okHttpDigestVersion = '2.6'
okHttpDigestVersion = '2.7'
velocityVersion = '2.3'
timberVersion = '5.0.1'
zxcvbnVersion = '1.6.0'
zxcvbnVersion = '1.7.0'
scaleImageViewVersion = '3.10.0'
@ -69,17 +69,17 @@ ext {
googleApiServicesVersion = 'v3-rev20220110-1.32.1'
googlePlayServicesVersion = '19.2.0'
googleClientVersion = '1.33.4' // keep in sync with https://github.com/SailReal/google-http-java-client
googleClientVersion = '1.34.1' // keep in sync with https://github.com/SailReal/google-http-java-client
/*
update using https://github.com/SailReal/google-http-java-client with `mvn clean install`,
copying `google-http-client-*.jar` and `google-http-client-android-*.jar` into the lib folder of this project
*/
trackingFreeGoogleCLientVersion = '1.41.5'
trackingFreeGoogleCLientVersion = '1.41.8'
msgraphVersion = '5.19.0'
msgraphVersion = '5.23.0'
msgraphAuthVersion = '3.0.2'
minIoVersion = '8.3.8'
minIoVersion = '8.4.0'
staxVersion = '1.2.0' // needed for minIO
commonsCodecVersion = '1.15'
@ -90,7 +90,7 @@ ext {
jUnitVersion = '5.8.2'
assertJVersion = '1.7.1'
mockitoVersion = '4.4.0'
mockitoVersion = '4.5.1'
mockitoKotlinVersion = '4.0.0'
hamcrestVersion = '1.3'
dexmakerVersion = '1.0'
@ -111,7 +111,7 @@ ext {
androidxBiometricVersion = '1.1.0'
androidxTestCoreVersion = '1.4.0'
jsonWebTokenApiVersion = '0.11.2'
jsonWebTokenApiVersion = '0.11.5'
dependencies = [
android : "com.google.android:android:${androidVersion}",

View File

@ -85,10 +85,13 @@ abstract class CryptoImplDecorator(
abstract fun write(cryptoFile: CryptoFile, data: DataSource, progressAware: ProgressAware<UploadState>, replace: Boolean, length: Long): CryptoFile
@Throws(BackendException::class, EmptyDirFileException::class)
abstract fun loadDirId(folder: CryptoFolder): String
abstract fun loadDirId(folder: CryptoFolder): String?
@Throws(BackendException::class)
abstract fun createDirIdInfo(folder: CryptoFolder): DirIdInfo
abstract fun getOrCreateDirIdInfo(folder: CryptoFolder): DirIdInfo
@Throws(BackendException::class)
abstract fun getDirIdInfo(folder: CryptoFolder): DirIdInfo?
private fun dirHash(directoryId: String): String {
return cryptor().fileNameCryptor().hashDirectoryId(directoryId)
@ -162,7 +165,7 @@ abstract class CryptoImplDecorator(
@Throws(BackendException::class)
private fun file(cryptoParent: CryptoFolder, cleartextName: String, ciphertextName: String, cleartextSize: Long?): CryptoFile {
val ciphertextSize = cleartextSize?.let { cryptor().fileContentCryptor().ciphertextSize(it) + cryptor().fileHeaderCryptor().headerSize() }
val cloudFile = cloudContentRepository.file(dirIdInfo(cryptoParent).cloudFolder, ciphertextName, ciphertextSize)
val cloudFile = cloudContentRepository.file(getOrCreateCachingAwareDirIdInfo(cryptoParent).cloudFolder, ciphertextName, ciphertextSize)
return file(cryptoParent, cleartextName, cloudFile, cleartextSize)
}
@ -212,7 +215,9 @@ abstract class CryptoImplDecorator(
@Throws(BackendException::class)
private fun exists(folder: CryptoFolder): Boolean {
requireNotNull(folder.dirFile)
return cloudContentRepository.exists(folder.dirFile) && cloudContentRepository.exists(dirIdInfo(folder).cloudFolder)
return cloudContentRepository.exists(folder.dirFile) && getCachingAwareDirIdInfo(folder)?.let {
cloudContentRepository.exists(it.cloudFolder)
} ?: false
}
@Throws(BackendException::class)
@ -352,8 +357,13 @@ abstract class CryptoImplDecorator(
}
@Throws(BackendException::class)
fun dirIdInfo(folder: CryptoFolder): DirIdInfo {
return dirIdCache[folder] ?: return createDirIdInfo(folder)
fun getOrCreateCachingAwareDirIdInfo(folder: CryptoFolder): DirIdInfo {
return dirIdCache[folder] ?: return getOrCreateDirIdInfo(folder)
}
@Throws(BackendException::class)
fun getCachingAwareDirIdInfo(folder: CryptoFolder): DirIdInfo? {
return dirIdCache[folder] ?: return getDirIdInfo(folder)
}
@Throws(BackendException::class)

View File

@ -64,7 +64,7 @@ open class CryptoImplVaultFormat7 : CryptoImplDecorator {
@Throws(BackendException::class)
override fun folder(cryptoParent: CryptoFolder, cleartextName: String): CryptoFolder {
val dirFileName = encryptFolderName(cryptoParent, cleartextName)
val dirFolder = cloudContentRepository.folder(dirIdInfo(cryptoParent).cloudFolder, dirFileName)
val dirFolder = cloudContentRepository.folder(getOrCreateCachingAwareDirIdInfo(cryptoParent).cloudFolder, dirFileName)
val dirFile = cloudContentRepository.file(dirFolder, CLOUD_FOLDER_DIR_FILE_PRE + CLOUD_NODE_EXT)
return folder(cryptoParent, cleartextName, dirFile)
}
@ -73,7 +73,7 @@ open class CryptoImplVaultFormat7 : CryptoImplDecorator {
override fun encryptName(cryptoParent: CryptoFolder, name: String): String {
var ciphertextName: String = cryptor() //
.fileNameCryptor() //
.encryptFilename(BaseEncoding.base64Url(), name, dirIdInfo(cryptoParent).id.toByteArray(StandardCharsets.UTF_8)) + CLOUD_NODE_EXT
.encryptFilename(BaseEncoding.base64Url(), name, getOrCreateCachingAwareDirIdInfo(cryptoParent).id.toByteArray(StandardCharsets.UTF_8)) + CLOUD_NODE_EXT
if (ciphertextName.length > shorteningThreshold) {
ciphertextName = deflate(cryptoParent, ciphertextName)
}
@ -85,7 +85,7 @@ open class CryptoImplVaultFormat7 : CryptoImplDecorator {
val longFilenameBytes = longFileName.toByteArray(StandardCharsets.UTF_8)
val hash = MessageDigestSupplier.SHA1.get().digest(longFilenameBytes)
val shortFileName = BaseEncoding.base64Url().encode(hash) + LONG_NODE_FILE_EXT
var dirFolder = cloudContentRepository.folder(dirIdInfo(cryptoParent).cloudFolder, shortFileName)
var dirFolder = cloudContentRepository.folder(getOrCreateCachingAwareDirIdInfo(cryptoParent).cloudFolder, shortFileName)
// if folder already exists in case of renaming
if (!cloudContentRepository.exists(dirFolder)) {
@ -98,6 +98,14 @@ open class CryptoImplVaultFormat7 : CryptoImplDecorator {
return shortFileName
}
@Throws(BackendException::class)
private fun inflate(cloudNode: CloudNode): String {
val metadataFile = metadataFile(cloudNode)
val out = ByteArrayOutputStream()
cloudContentRepository.read(metadataFile, null, out, ProgressAware.NO_OP_PROGRESS_AWARE_DOWNLOAD)
return String(out.toByteArray(), StandardCharsets.UTF_8)
}
@Throws(BackendException::class)
private fun metadataFile(cloudNode: CloudNode): CloudFile {
val cloudFolder = when (cloudNode) {
@ -114,14 +122,6 @@ open class CryptoImplVaultFormat7 : CryptoImplDecorator {
return cloudContentRepository.file(cloudFolder, LONG_NODE_FILE_CONTENT_NAME + LONG_NODE_FILE_EXT)
}
@Throws(BackendException::class)
private fun inflate(cloudNode: CloudNode): String {
val metadataFile = metadataFile(cloudNode)
val out = ByteArrayOutputStream()
cloudContentRepository.read(metadataFile, null, out, ProgressAware.NO_OP_PROGRESS_AWARE_DOWNLOAD)
return String(out.toByteArray(), StandardCharsets.UTF_8)
}
override fun decryptName(dirId: String, encryptedName: String): String? {
return extractEncryptedName(encryptedName)?.let {
return cryptor().fileNameCryptor().decryptFilename(BaseEncoding.base64Url(), it, dirId.toByteArray(StandardCharsets.UTF_8))
@ -132,34 +132,41 @@ open class CryptoImplVaultFormat7 : CryptoImplDecorator {
override fun list(cryptoFolder: CryptoFolder): List<CryptoNode> {
dirIdCache.evictSubFoldersOf(cryptoFolder)
val dirIdInfo = dirIdInfo(cryptoFolder)
val dirId = dirIdInfo(cryptoFolder).id
val dirIdInfo = getCachingAwareDirIdInfo(cryptoFolder)
?: when (cryptoFolder.dirFile) {
null -> {
Timber.tag("CryptoFs").e(String.format("Dir-file of folder is null %s", cryptoFolder.path))
throw FatalBackendException(String.format("Dir-file of folder is null %s", cryptoFolder.path))
}
else -> {
Timber.tag("CryptoFs").e("No dir file exists in %s", cryptoFolder.dirFile.path)
throw NoDirFileException(cryptoFolder.name, cryptoFolder.dirFile.path)
}
}
val dirId = dirIdInfo.id
val lvl2Dir = dirIdInfo.cloudFolder
val ciphertextNodes: List<CloudNode> = try {
return try {
cloudContentRepository.list(lvl2Dir)
} catch (e: NoSuchCloudFileException) {
if (cryptoFolder is RootCryptoFolder) {
Timber.tag("CryptoFs").e("No lvl2Dir exists for root folder in %s", lvl2Dir.path)
throw FatalBackendException(String.format("No lvl2Dir exists for root folder in %s", lvl2Dir.path), e)
} else if (cryptoFolder.dirFile == null) {
Timber.tag("CryptoFs").e(String.format("Dir-file of folder is null %s", lvl2Dir.path))
throw FatalBackendException(String.format("Dir-file of folder is null %s", lvl2Dir.path))
} else if (cloudContentRepository.exists(cloudContentRepository.file(cryptoFolder.dirFile.parent, CLOUD_NODE_SYMLINK_PRE + CLOUD_NODE_EXT))) {
throw SymLinkException()
} else if (!cloudContentRepository.exists(cryptoFolder.dirFile)) {
Timber.tag("CryptoFs").e("No dir file exists in %s", cryptoFolder.dirFile.path)
throw NoDirFileException(cryptoFolder.name, cryptoFolder.dirFile.path)
when {
cryptoFolder is RootCryptoFolder -> {
Timber.tag("CryptoFs").e("No lvl2Dir exists for root folder in %s", lvl2Dir.path)
throw FatalBackendException(String.format("No lvl2Dir exists for root folder in %s", lvl2Dir.path), e)
}
cryptoFolder.dirFile == null -> {
Timber.tag("CryptoFs").e(String.format("Dir-file of folder is null %s", lvl2Dir.path))
throw FatalBackendException(String.format("Dir-file of folder is null %s", lvl2Dir.path))
}
cloudContentRepository.exists(cloudContentRepository.file(cryptoFolder.dirFile.parent, CLOUD_NODE_SYMLINK_PRE + CLOUD_NODE_EXT)) -> {
throw SymLinkException()
}
else -> return emptyList()
}
return emptyList()
}
return ciphertextNodes
.map { node ->
ciphertextToCleartextNode(cryptoFolder, dirId, node)
}
.toList()
.filterNotNull()
}.map { node ->
ciphertextToCleartextNode(cryptoFolder, dirId, node)
}.toList().filterNotNull()
}
@Throws(BackendException::class)
@ -247,11 +254,17 @@ open class CryptoImplVaultFormat7 : CryptoImplDecorator {
}
@Throws(BackendException::class)
override fun createDirIdInfo(folder: CryptoFolder): DirIdInfo {
val dirId = loadDirId(folder)
override fun getOrCreateDirIdInfo(folder: CryptoFolder): DirIdInfo {
val dirId = loadDirId(folder) ?: newDirId()
return dirIdCache.put(folder, createDirIdInfoFor(dirId))
}
override fun getDirIdInfo(folder: CryptoFolder): DirIdInfo? {
return loadDirId(folder)?.let {
dirIdCache.put(folder, createDirIdInfoFor(it))
}
}
@Throws(BackendException::class)
override fun encryptFolderName(cryptoFolder: CryptoFolder, name: String): String {
return encryptName(cryptoFolder, name)
@ -263,17 +276,13 @@ open class CryptoImplVaultFormat7 : CryptoImplDecorator {
}
@Throws(BackendException::class, EmptyDirFileException::class)
override fun loadDirId(folder: CryptoFolder): String {
var dirFile: CloudFile? = null
if (folder.dirFile != null) {
dirFile = folder.dirFile
}
override fun loadDirId(folder: CryptoFolder): String? {
return if (RootCryptoFolder.isRoot(folder)) {
CryptoConstants.ROOT_DIR_ID
} else if (dirFile != null && cloudContentRepository.exists(dirFile)) {
String(loadContentsOfDirFile(dirFile), StandardCharsets.UTF_8)
} else if (folder.dirFile != null && cloudContentRepository.exists(folder.dirFile)) {
String(loadContentsOfDirFile(folder.dirFile), StandardCharsets.UTF_8)
} else {
newDirId()
null
}
}
@ -302,7 +311,7 @@ open class CryptoImplVaultFormat7 : CryptoImplDecorator {
assertCryptoFolderAlreadyExists(folder)
shortName = true
}
val dirIdInfo = dirIdInfo(folder)
val dirIdInfo = getOrCreateCachingAwareDirIdInfo(folder)
val createdCloudFolder = cloudContentRepository.create(dirIdInfo.cloudFolder)
var dirFolder = folder.dirFile.parent
var dirFile = folder.dirFile
@ -407,17 +416,13 @@ open class CryptoImplVaultFormat7 : CryptoImplDecorator {
requireNotNull(node.dirFile)
val cryptoSubfolders = deepCollectSubfolders(node)
for (cryptoSubfolder in cryptoSubfolders) {
try {
cloudContentRepository.delete(dirIdInfo(cryptoSubfolder).cloudFolder)
} catch (e: NoSuchCloudFileException) {
// Ignoring because nothing can be done if the dir-file doesn't exists in the cloud
}
}
try {
cloudContentRepository.delete(dirIdInfo(node).cloudFolder)
} catch (e: NoSuchCloudFileException) {
// Ignoring because nothing can be done if the dir-file doesn't exists in the cloud
getCachingAwareDirIdInfo(cryptoSubfolder)?.let {
cloudContentRepository.delete(it.cloudFolder)
} ?: Timber.tag("CryptoFs").w("Dir file doesn't exists of a sub folder while deleting the parent, continue anyway")
}
getCachingAwareDirIdInfo(node)?.let {
cloudContentRepository.delete(it.cloudFolder)
} ?: Timber.tag("CryptoFs").w("Dir file doesn't exists while deleting the folder, continue anyway")
cloudContentRepository.delete(node.dirFile.parent)
evictFromCache(node)
} else if (node is CryptoFile) {

View File

@ -16,6 +16,7 @@ import org.cryptomator.domain.CloudNode
import org.cryptomator.domain.exception.AlreadyExistException
import org.cryptomator.domain.exception.BackendException
import org.cryptomator.domain.exception.EmptyDirFileException
import org.cryptomator.domain.exception.NoDirFileException
import org.cryptomator.domain.exception.NoSuchCloudFileException
import org.cryptomator.domain.exception.ParentFolderIsNullException
import org.cryptomator.domain.repository.CloudContentRepository
@ -27,7 +28,6 @@ import java.io.ByteArrayOutputStream
import java.nio.charset.StandardCharsets
import java.util.function.Supplier
import java.util.regex.Pattern
import kotlin.streams.toList
import timber.log.Timber
internal class CryptoImplVaultFormatPre7(
@ -44,7 +44,7 @@ internal class CryptoImplVaultFormatPre7(
@Throws(BackendException::class)
override fun folder(cryptoParent: CryptoFolder, cleartextName: String): CryptoFolder {
val dirFileName = encryptFolderName(cryptoParent, cleartextName)
val dirFile = cloudContentRepository.file(dirIdInfo(cryptoParent).cloudFolder, dirFileName)
val dirFile = cloudContentRepository.file(getOrCreateCachingAwareDirIdInfo(cryptoParent).cloudFolder, dirFileName)
return folder(cryptoParent, cleartextName, dirFile)
}
@ -52,7 +52,7 @@ internal class CryptoImplVaultFormatPre7(
override fun create(folder: CryptoFolder): CryptoFolder {
requireNotNull(folder.dirFile)
assertCryptoFolderAlreadyExists(folder)
val dirIdInfo = dirIdInfo(folder)
val dirIdInfo = getOrCreateCachingAwareDirIdInfo(folder)
val createdCloudFolder = cloudContentRepository.create(dirIdInfo.cloudFolder)
val dirId = dirIdInfo.id.toByteArray(StandardCharsets.UTF_8)
val createdDirFile = cloudContentRepository.write(folder.dirFile, from(dirId), ProgressAware.NO_OP_PROGRESS_AWARE_UPLOAD, false, dirId.size.toLong())
@ -68,7 +68,7 @@ internal class CryptoImplVaultFormatPre7(
@Throws(BackendException::class)
private fun encryptName(cryptoParent: CryptoFolder, name: String, prefix: String): String {
var ciphertextName = prefix + cryptor().fileNameCryptor().encryptFilename(BaseEncoding.base32(), name, dirIdInfo(cryptoParent).id.toByteArray(StandardCharsets.UTF_8))
var ciphertextName = prefix + cryptor().fileNameCryptor().encryptFilename(BaseEncoding.base32(), name, getOrCreateCachingAwareDirIdInfo(cryptoParent).id.toByteArray(StandardCharsets.UTF_8))
if (ciphertextName.length > shorteningThreshold) {
ciphertextName = deflate(ciphertextName)
}
@ -120,8 +120,8 @@ internal class CryptoImplVaultFormatPre7(
@Throws(BackendException::class)
override fun list(cryptoFolder: CryptoFolder): List<CryptoNode> {
val dirIdInfo = dirIdInfo(cryptoFolder)
val dirId = dirIdInfo(cryptoFolder).id
val dirIdInfo = getDirIdInfo(cryptoFolder) ?: throw NoDirFileException(cryptoFolder.name, cryptoFolder.dirFile?.path)
val dirId = dirIdInfo.id
val lvl2Dir = dirIdInfo.cloudFolder
return cloudContentRepository
.list(lvl2Dir)
@ -198,7 +198,7 @@ internal class CryptoImplVaultFormatPre7(
@Throws(BackendException::class)
override fun symlink(cryptoParent: CryptoFolder, cleartextName: String, target: String): CryptoSymlink {
val ciphertextName = encryptSymlinkName(cryptoParent, cleartextName)
val cloudFile = cloudContentRepository.file(dirIdInfo(cryptoParent).cloudFolder, ciphertextName)
val cloudFile = cloudContentRepository.file(getOrCreateCachingAwareDirIdInfo(cryptoParent).cloudFolder, ciphertextName)
return CryptoSymlink(cryptoParent, cleartextName, path(cryptoParent, cleartextName), target, cloudFile)
}
@ -237,9 +237,13 @@ internal class CryptoImplVaultFormatPre7(
requireNotNull(node.dirFile)
val cryptoSubfolders = deepCollectSubfolders(node)
for (cryptoSubfolder in cryptoSubfolders) {
cloudContentRepository.delete(dirIdInfo(cryptoSubfolder).cloudFolder)
getCachingAwareDirIdInfo(cryptoSubfolder)?.let {
cloudContentRepository.delete(it.cloudFolder)
} ?: Timber.tag("CryptoFs").w("Dir file doesn't exists of a sub folder while deleting the parent, continue anyway")
}
cloudContentRepository.delete(dirIdInfo(node).cloudFolder)
getCachingAwareDirIdInfo(node)?.let {
cloudContentRepository.delete(it.cloudFolder)
} ?: Timber.tag("CryptoFs").w("Dir file doesn't exists while deleting the folder, continue anyway")
cloudContentRepository.delete(node.dirFile)
evictFromCache(node)
} else if (node is CryptoFile) {
@ -248,22 +252,28 @@ internal class CryptoImplVaultFormatPre7(
}
@Throws(BackendException::class, EmptyDirFileException::class)
override fun loadDirId(folder: CryptoFolder): String {
override fun loadDirId(folder: CryptoFolder): String? {
return if (isRoot(folder)) {
CryptoConstants.ROOT_DIR_ID
} else if (folder.dirFile != null && cloudContentRepository.exists(folder.dirFile)) {
String(loadContentsOfDirFile(folder), StandardCharsets.UTF_8)
} else {
newDirId()
null
}
}
@Throws(BackendException::class)
override fun createDirIdInfo(folder: CryptoFolder): DirIdInfo {
val dirId = loadDirId(folder)
override fun getOrCreateDirIdInfo(folder: CryptoFolder): DirIdInfo {
val dirId = loadDirId(folder) ?: newDirId()
return dirIdCache.put(folder, createDirIdInfoFor(dirId))
}
override fun getDirIdInfo(folder: CryptoFolder): DirIdInfo? {
return loadDirId(folder)?.let {
dirIdCache.put(folder, createDirIdInfoFor(it))
}
}
@Throws(BackendException::class)
override fun write(cryptoFile: CryptoFile, data: DataSource, progressAware: ProgressAware<UploadState>, replace: Boolean, length: Long): CryptoFile {
return writeShortNameFile(cryptoFile, data, progressAware, replace, length)

View File

@ -42,7 +42,6 @@ import java.io.InputStreamReader
import java.io.OutputStream
import java.nio.ByteBuffer
import java.nio.charset.StandardCharsets
import java.util.ArrayList
import kotlin.io.path.createTempDirectory
import kotlin.io.path.deleteExisting
@ -730,6 +729,7 @@ class CryptoImplVaultFormat7Test {
whenever(cloudContentRepository.folder(aaFolder, shortenedFileName)).thenReturn(testDir3)
whenever(cloudContentRepository.exists(testDir3)).thenReturn(false)
whenever(dirIdCache.put(eq(cryptoFolder3), any())).thenReturn(DirIdInfo("dir3-id", ddFolder))
whenever(dirIdCache[cryptoFolder3]).thenReturn(DirIdInfo("dir3-id", ddFolder))
whenever(cloudContentRepository.file(testDir3, "dir.c9r")).thenReturn(testDir3DirFile)
whenever(cloudContentRepository.file(testDir3, "name.c9s", 257L)).thenReturn(testDir3NameFile)
whenever<List<*>>(cloudContentRepository.list(ddFolder)).thenReturn(ArrayList<CloudNode>())

View File

@ -33,6 +33,7 @@ import org.mockito.AdditionalMatchers
import org.mockito.Mockito
import org.mockito.invocation.InvocationOnMock
import org.mockito.kotlin.any
import org.mockito.kotlin.anyOrNull
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever
@ -43,7 +44,6 @@ import java.io.InputStreamReader
import java.io.OutputStream
import java.nio.ByteBuffer
import java.nio.charset.StandardCharsets
import java.util.ArrayList
import java.util.function.Supplier
import kotlin.io.path.createTempDirectory
import kotlin.io.path.deleteExisting
@ -138,11 +138,11 @@ internal class CryptoImplVaultFormatPre7Test {
whenever(cloudContentRepository.folder(lvl2Dir, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")).thenReturn(aaFolder)
whenever(cloudContentRepository.file(aaFolder, "0dir1")).thenReturn(testDir1)
whenever(cloudContentRepository.exists(testDir1)).thenReturn(true)
Mockito.doAnswer { invocation: InvocationOnMock ->
val out = invocation.getArgument<OutputStream>(2)
whenever(cloudContentRepository.read(eq(cryptoFolder1.dirFile!!), any(), any(), any())).thenAnswer { invocationOnMock: InvocationOnMock ->
val out = invocationOnMock.getArgument<OutputStream>(2)
copyStreamToStream(ByteArrayInputStream(dirId1.toByteArray()), out)
null
}.`when`(cloudContentRepository).read(eq(cryptoFolder1.dirFile!!), any(), any(), any())
}
whenever<List<*>>(cloudContentRepository.list(aaFolder)).thenReturn(rootItems)
whenever(dirIdCache.put(eq(root), any())).thenReturn(DirIdInfo("", aaFolder))
}
@ -193,11 +193,11 @@ internal class CryptoImplVaultFormatPre7Test {
val cryptoFolder3 = CryptoFolder(cryptoFolder1, dir3Name, "/Directory 1/$dir3Name", testDir3DirFile)
Mockito.doAnswer { invocation: InvocationOnMock ->
val out = invocation.getArgument<OutputStream>(2)
whenever(cloudContentRepository.read(eq(cryptoFolder3.dirFile!!), anyOrNull(), any(), any())).thenAnswer { invocationOnMock: InvocationOnMock ->
val out = invocationOnMock.getArgument<OutputStream>(2)
copyStreamToStream(ByteArrayInputStream("dir3-id".toByteArray()), out)
null
}.`when`(cloudContentRepository).read(eq(cryptoFolder3.dirFile!!), any(), any(), any())
}
/*
* Directory 3x250
@ -217,11 +217,11 @@ internal class CryptoImplVaultFormatPre7Test {
whenever(cloudContentRepository.file(directory4x250, "name.c9s")).thenReturn(testDir4NameFile)
whenever(fileNameCryptor.encryptFilename(BaseEncoding.base32(), dir4Name, "dir3-id".toByteArray())).thenReturn(dir4Cipher)
whenever(fileNameCryptor.decryptFilename(BaseEncoding.base32(), dir4Cipher, "dir3-id".toByteArray())).thenReturn(dir4Name)
Mockito.doAnswer { invocation: InvocationOnMock ->
val out = invocation.getArgument<OutputStream>(2)
whenever(cloudContentRepository.read(eq(testDir4NameFile), any(), any(), any())).thenAnswer { invocationOnMock: InvocationOnMock ->
val out = invocationOnMock.getArgument<OutputStream>(2)
copyStreamToStream(ByteArrayInputStream(dir4Cipher.toByteArray(charset("UTF-8"))), out)
null
}.`when`(cloudContentRepository).read(eq(testDir4NameFile), any(), any(), any())
}
val dir4Files: ArrayList<CloudNode> = object : ArrayList<CloudNode>() {
init {
@ -242,11 +242,12 @@ internal class CryptoImplVaultFormatPre7Test {
whenever(cloudContentRepository.file(directory5x250, "name.c9s")).thenReturn(testFile5NameFile)
whenever(fileNameCryptor.encryptFilename(BaseEncoding.base32(), file5Name, "dir3-id".toByteArray())).thenReturn(file5Cipher)
whenever(fileNameCryptor.decryptFilename(BaseEncoding.base32(), file5Cipher, "dir3-id".toByteArray())).thenReturn(file5Name)
Mockito.doAnswer { invocation: InvocationOnMock ->
val out = invocation.getArgument<OutputStream>(2)
whenever(cloudContentRepository.read(eq(testFile5NameFile), any(), any(), any())).thenAnswer { invocationOnMock: InvocationOnMock ->
val out = invocationOnMock.getArgument<OutputStream>(2)
copyStreamToStream(ByteArrayInputStream(file5Cipher.toByteArray(charset("UTF-8"))), out)
null
}.`when`(cloudContentRepository).read(eq(testFile5NameFile), any(), any(), any())
}
val dir5Files: ArrayList<CloudNode> = object : ArrayList<CloudNode>() {
init {
add(testFile5ContentFile)
@ -286,11 +287,11 @@ internal class CryptoImplVaultFormatPre7Test {
whenever(fileHeaderCryptor.decryptHeader(StandardCharsets.UTF_8.encode("hhhhh"))).thenReturn(header)
whenever(fileContentCryptor.decryptChunk(eq(StandardCharsets.UTF_8.encode("TOPSECRET!")), any(), eq(header), any()))
.then { invocation: InvocationOnMock? -> StandardCharsets.UTF_8.encode("geheim!!") }
Mockito.doAnswer { invocation: InvocationOnMock ->
val out = invocation.getArgument<OutputStream>(2)
whenever(cloudContentRepository.read(eq(cryptoFile1.cloudFile), any(), any(), any())).thenAnswer { invocationOnMock: InvocationOnMock ->
val out = invocationOnMock.getArgument<OutputStream>(2)
copyStreamToStream(ByteArrayInputStream(file1Content), out)
null
}.`when`(cloudContentRepository).read(eq(cryptoFile1.cloudFile), any(), any(), any())
}
val outputStream = ByteArrayOutputStream(1000)
inTest.read(cryptoFile1, outputStream, ProgressAware.NO_OP_PROGRESS_AWARE_DOWNLOAD)
@ -318,11 +319,11 @@ internal class CryptoImplVaultFormatPre7Test {
whenever(fileContentCryptor.decryptChunk(eq(StandardCharsets.UTF_8.encode("TOPSECRET!")), any(), eq(header), any()))
.then { invocation: InvocationOnMock? -> StandardCharsets.UTF_8.encode("geheim!!") }
val cryptoFile15 = CryptoFile(root, file3Name, "/$file3Name", null, testFile3ContentFile)
Mockito.doAnswer { invocation: InvocationOnMock ->
val out = invocation.getArgument<OutputStream>(2)
whenever(cloudContentRepository.read(eq(cryptoFile15.cloudFile), any(), any(), any())).thenAnswer { invocationOnMock: InvocationOnMock ->
val out = invocationOnMock.getArgument<OutputStream>(2)
copyStreamToStream(ByteArrayInputStream(file1Content), out)
null
}.`when`(cloudContentRepository).read(eq(cryptoFile15.cloudFile), any(), any(), any())
}
val outputStream = ByteArrayOutputStream(1000)
inTest.read(cryptoFile15, outputStream, ProgressAware.NO_OP_PROGRESS_AWARE_DOWNLOAD)
@ -593,11 +594,11 @@ internal class CryptoImplVaultFormatPre7Test {
val testDir2DirFile = TestFile(bbFolder, "0dir2", "/d/11/BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB/0dir2", null, null)
val cryptoFolder2 = CryptoFolder(cryptoFolder1, "Directory 2", "/Directory 1/Directory 2", testDir2DirFile)
Mockito.doAnswer { invocation: InvocationOnMock ->
val out = invocation.getArgument<OutputStream>(2)
whenever(cloudContentRepository.read(eq(cryptoFolder2.dirFile!!), anyOrNull(), any(), any())).thenAnswer { invocationOnMock: InvocationOnMock ->
val out = invocationOnMock.getArgument<OutputStream>(2)
copyStreamToStream(ByteArrayInputStream(dirId2.toByteArray()), out)
null
}.`when`(cloudContentRepository).read(eq(cryptoFolder2.dirFile!!), any(), any(), any())
}
val dir1Items: ArrayList<CloudNode> = object : ArrayList<CloudNode>() {
init {
@ -657,6 +658,7 @@ internal class CryptoImplVaultFormatPre7Test {
whenever(cloudContentRepository.folder(d, "33")).thenReturn(ddLvl2Dir)
whenever(cloudContentRepository.folder(lvl2Dir, "DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD")).thenReturn(ddFolder)
whenever(dirIdCache.put(eq(cryptoFolder3), any())).thenReturn(DirIdInfo("dir3-id", ddFolder))
whenever(dirIdCache[cryptoFolder3]).thenReturn(DirIdInfo("dir3-id", ddFolder))
whenever(cloudContentRepository.file(aaFolder, shortenedFileName)).thenReturn(testDir3DirFile)
whenever(cloudContentRepository.file(testDir3NameFile.parent!!, shortenedFileName, 257L)).thenReturn(testDir3NameFile)
whenever<List<*>>(cloudContentRepository.list(ddFolder)).thenReturn(ArrayList<CloudNode>())
@ -767,7 +769,7 @@ internal class CryptoImplVaultFormatPre7Test {
val cryptoMovedFile4 = CryptoFile(cryptoFolder1, file4Name, "/Directory 1/$file4Name", null, testFile4ContentFile)
whenever(cloudContentRepository.move(testFile4ContentFileOld, testFile4ContentFile)).thenReturn(testFile4ContentFile)
whenever(cloudContentRepository.create(testFile4NameFile.parent!!)).thenReturn(testFile4NameFile.parent)
whenever(cloudContentRepository.create(testFile4NameFile.parent)).thenReturn(testFile4NameFile.parent)
whenever(cloudContentRepository.write(eq(testFile4NameFile), any(), any(), eq(true), any())).thenAnswer { invocationOnMock: InvocationOnMock ->
val inputStream = invocationOnMock.getArgument<DataSource>(1)
val dirContent = BufferedReader(InputStreamReader(inputStream.open(context)!!, StandardCharsets.UTF_8)).readLine()

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1,3 @@
- Fehler beim Zugriff auf Dateien wenn eine Verbindung neu hinzugefügt wurde behoben
- Update auf die neueste Android-Zielplatform-Version
- Löschen von Ordnern ohne Verzeichnisdatei im lokalen Cloud-Speicher behoben
- Dateiexport wenn keine App den ausgewählten Dateityp verarbeiten kann behoben

View File

@ -1 +1,3 @@
- Fixed wrong access to files when a connection has been re-added
- Updated to the latest Android target version
- Fixed deletion of folders without a dir-file in local storage cloud
- Fixed file export when no app can process the selected file type

View File

@ -1,3 +1,5 @@
<ul>
<li>Fixed wrong access to files when a connection has been re-added</li>
<li>Updated to the latest Android target version</li>
<li>Fixed deletion of folders without a dir-file in local storage cloud</li>
<li>Fixed file export when no app can process the selected file type</li>
</ul>

Binary file not shown.

Binary file not shown.

View File

@ -37,6 +37,7 @@
<activity
android:name=".ui.activity.SplashActivity"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@style/SplashTheme">
<intent-filter>
@ -47,25 +48,31 @@
</activity>
<activity
android:name=".ui.activity.VaultListActivity"
android:exported="false"
android:windowSoftInputMode="adjustPan" />
<activity android:name=".ui.activity.ChooseCloudServiceActivity" />
<activity
android:name=".ui.activity.CreateVaultActivity"
android:exported="false"
android:windowSoftInputMode="stateVisible" />
<activity
android:name=".ui.activity.BrowseFilesActivity"
android:exported="false"
android:windowSoftInputMode="adjustPan" />
<activity
android:name=".ui.activity.SetPasswordActivity"
android:exported="false"
android:windowSoftInputMode="stateVisible" />
<activity
android:name=".ui.activity.TextEditorActivity"
android:exported="false"
android:windowSoftInputMode="stateVisible" />
<activity
android:name=".ui.activity.SharedFilesActivity"
android:excludeFromRecents="true"
android:exported="true"
android:taskAffinity=".share"
android:windowSoftInputMode="stateHidden|adjustPan">
<intent-filter android:label="@string/share_with_label">
@ -80,12 +87,14 @@
<activity
android:name=".ui.activity.UnlockVaultActivity"
android:exported="false"
android:theme="@style/TransparentPopUp" />
<!-- Cloud Services -->
<activity
android:name="com.dropbox.core.android.AuthActivity"
android:configChanges="orientation|keyboard"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<data android:scheme="db-${DROPBOX_API_KEY}" />
@ -98,22 +107,40 @@
</activity>
<!-- Settings -->
<activity android:name=".ui.activity.AutoUploadChooseVaultActivity" />
<activity android:name=".ui.activity.BiometricAuthSettingsActivity" />
<activity android:name=".ui.activity.CloudConnectionListActivity" />
<activity android:name=".ui.activity.CloudSettingsActivity" />
<activity android:name=".ui.activity.LicensesActivity" />
<activity android:name=".ui.activity.SettingsActivity" />
<activity android:name=".ui.activity.WebDavAddOrChangeActivity" />
<activity android:name=".ui.activity.S3AddOrChangeActivity" />
<activity
android:name=".ui.activity.AutoUploadChooseVaultActivity"
android:exported="false" />
<activity
android:name=".ui.activity.BiometricAuthSettingsActivity"
android:exported="false" />
<activity
android:name=".ui.activity.CloudConnectionListActivity"
android:exported="false" />
<activity
android:name=".ui.activity.CloudSettingsActivity"
android:exported="false" />
<activity
android:name=".ui.activity.LicensesActivity"
android:exported="true" />
<activity
android:name=".ui.activity.SettingsActivity"
android:exported="false" />
<activity
android:name=".ui.activity.WebDavAddOrChangeActivity"
android:exported="false" />
<activity
android:name=".ui.activity.S3AddOrChangeActivity"
android:exported="false" />
<activity
android:name=".ui.activity.AuthenticateCloudActivity"
android:exported="false"
android:theme="@style/Theme.Transparent" />
<activity
android:name=".ui.activity.AuthenticatePCloudActivity"
android:configChanges="orientation|keyboard"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
@ -131,10 +158,12 @@
<activity
android:name=".ui.activity.ImagePreviewActivity"
android:exported="false"
android:theme="@style/FullscreenTheme" />
<activity
android:name=".ui.activity.LicenseCheckActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter android:label="@string/dialog_enter_license_title">
<action android:name="android.intent.action.VIEW" />
@ -159,11 +188,15 @@
</intent-filter>
</activity>
<activity android:name="com.microsoft.identity.client.BrowserTabActivity">
<activity
android:name="com.microsoft.identity.client.BrowserTabActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="org.cryptomator"
android:path="/${ONEDRIVE_API_KEY_DECODED}"
@ -200,6 +233,7 @@
<receiver
android:name=".AutoPhotoUploadReceiver"
android:exported="true"
android:label="AutoPhotoUploadReceiver">
<intent-filter>
<action android:name="android.hardware.action.NEW_PICTURE" />
@ -209,7 +243,9 @@
</intent-filter>
</receiver>
<receiver android:name=".BootAwareReceiver">
<receiver
android:name=".BootAwareReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.ACTION_SHUTDOWN" />

View File

@ -214,13 +214,13 @@ class BrowseFilesPresenter @Inject constructor( //
return
}
e is EmptyDirFileException -> {
view?.showNoDirFileDialog(e.dirName, e.filePath)
view?.showNoDirFileOrEmptyDialog(e.dirName, e.filePath)
}
e is SymLinkException -> {
view?.showSymLinkDialog()
}
e is NoDirFileException -> {
view?.showNoDirFileDialog(e.cryptoFolderName, e.cloudFolderPath)
view?.showNoDirFileOrEmptyDialog(e.cryptoFolderName, e.cloudFolderPath)
}
else -> {
super.onError(e)
@ -233,7 +233,7 @@ class BrowseFilesPresenter @Inject constructor( //
@Callback(dispatchResultOkOnly = false)
fun getCloudListAfterAuthentication(result: ActivityResult, cloudFolderModel: CloudFolderModel) {
if(result.isResultOk) {
val cloudModel = result.getSingleResult(CloudModel::class.java) // FIXME update other vaults using this cloud as well
val cloudModel = result.getSingleResult(CloudModel::class.java)
val cloudNode = cloudFolderModel.toCloudNode()
if (cloudNode is CryptoFolder) {
updatedDecryptedCloudFor(Vault.aCopyOf(cloudFolderModel.vault()!!.toVault()).withCloud(cloudModel.toCloud()).build(), cloudFolderModel)
@ -284,16 +284,18 @@ class BrowseFilesPresenter @Inject constructor( //
private fun copyFile(downloadFiles: List<DownloadFile>) {
downloadFiles.forEach { downloadFile ->
try {
FileInputStream(fileUtil.fileFor(cloudFileModelMapper.toModel(downloadFile.downloadFile))).use {
copyDataUseCase //
.withSource(it) //
.andTarget(downloadFile.dataSink) //
.run(object : DefaultResultHandler<Void>() {
override fun onFinished() {
view?.showMessage(R.string.screen_file_browser_msg_file_exported)
}
})
}
val source = FileInputStream(fileUtil.fileFor(cloudFileModelMapper.toModel(downloadFile.downloadFile)))
copyDataUseCase //
.withSource(source) //
.andTarget(downloadFile.dataSink) //
.run(object : DefaultResultHandler<Void>() {
override fun onSuccess(t: Void?) {
view?.showMessage(R.string.screen_file_browser_msg_file_exported)
}
override fun onFinished() {
source.close()
}
})
} catch (e: FileNotFoundException) {
showError(e)
}

View File

@ -48,7 +48,7 @@ class AutoUploadNotification(private val context: Context, private val amountOfP
private fun cancelNowAction(): NotificationCompat.Action {
val intentAction = cancelAutoUploadIntent(context)
val cancelIntent = PendingIntent.getService(context, 0, intentAction, FLAG_CANCEL_CURRENT)
val cancelIntent = PendingIntent.getService(context, 0, intentAction, FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE)
return NotificationCompat.Action.Builder( //
R.drawable.ic_lock, //
getString(R.string.notification_cancel_auto_upload), //
@ -60,7 +60,7 @@ class AutoUploadNotification(private val context: Context, private val amountOfP
val startTheActivity = Intent(context, VaultListActivity::class.java)
startTheActivity.action = ACTION_MAIN
startTheActivity.flags = FLAG_ACTIVITY_CLEAR_TASK or FLAG_ACTIVITY_NEW_TASK
return PendingIntent.getActivity(context, 0, startTheActivity, FLAG_CANCEL_CURRENT)
return PendingIntent.getActivity(context, 0, startTheActivity, FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE)
}
fun update(progress: Int) {

View File

@ -4,7 +4,6 @@ import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.NotificationManager.IMPORTANCE_LOW
import android.app.PendingIntent
import android.app.PendingIntent.FLAG_CANCEL_CURRENT
import android.content.Context
import android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION
import android.content.Intent.FLAG_GRANT_WRITE_URI_PERMISSION
@ -54,7 +53,7 @@ class OpenWritableFileNotification(private val context: Context, private val uri
private fun cancelNowIntent(): PendingIntent {
context.revokeUriPermission(uriToOpenendFile, FLAG_GRANT_WRITE_URI_PERMISSION or FLAG_GRANT_READ_URI_PERMISSION)
val startTheActivity = vaultListIntent().withStopEditFileNotification(true).build(context as ContextHolder)
return PendingIntent.getActivity(context, 0, startTheActivity, FLAG_CANCEL_CURRENT)
return PendingIntent.getActivity(context, 0, startTheActivity, PendingIntent.FLAG_CANCEL_CURRENT or PendingIntent.FLAG_IMMUTABLE)
}
fun show() {

View File

@ -16,7 +16,6 @@ import org.cryptomator.presentation.util.ResourceHelper;
import timber.log.Timber;
import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.PendingIntent.FLAG_CANCEL_CURRENT;
import static android.content.Intent.ACTION_MAIN;
import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
@ -73,15 +72,15 @@ class UnlockedNotification {
return PendingIntent.getService( //
service.getApplicationContext(), //
0, //
CryptorsService.lockAllIntent(service.getApplicationContext()), //
FLAG_CANCEL_CURRENT);
CryptorsService.lockAllIntent(service.getApplicationContext()),
PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
}
private PendingIntent startTheActivity() {
Intent startTheActivity = new Intent(service, VaultListActivity.class);
startTheActivity.setAction(ACTION_MAIN);
startTheActivity.setFlags(FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK);
return PendingIntent.getActivity(service, 0, startTheActivity, 0);
return PendingIntent.getActivity(service, 0, startTheActivity, PendingIntent.FLAG_IMMUTABLE);
}
public void setUnlockedCount(int unlocked) {

View File

@ -33,8 +33,16 @@ class AutoUploadChooseVaultActivity : BaseActivity(), //
}
}
override fun createFragment(): Fragment = AutoUploadChooseVaultFragment()
override fun onMenuItemSelected(itemId: Int): Boolean = when (itemId) {
android.R.id.home -> {
// finish this activity and does not call the onCreate method of the parent activity
finish()
true
}
else -> super.onMenuItemSelected(itemId)
}
override fun createFragment(): Fragment = AutoUploadChooseVaultFragment()
override fun displayVaults(vaults: List<VaultModel>) {
autoUploadChooseVaultFragment().displayVaults(vaults)

View File

@ -45,7 +45,7 @@ import org.cryptomator.presentation.ui.dialog.CreateFolderDialog
import org.cryptomator.presentation.ui.dialog.ExportCloudFilesDialog
import org.cryptomator.presentation.ui.dialog.FileNameDialog
import org.cryptomator.presentation.ui.dialog.FileTypeNotSupportedDialog
import org.cryptomator.presentation.ui.dialog.NoDirFileDialog
import org.cryptomator.presentation.ui.dialog.NoDirFileOrEmptyDialog
import org.cryptomator.presentation.ui.dialog.ReplaceDialog
import org.cryptomator.presentation.ui.dialog.SymLinkDialog
import org.cryptomator.presentation.ui.dialog.UploadCloudFileDialog
@ -64,7 +64,7 @@ class BrowseFilesActivity : BaseActivity(), //
UploadCloudFileDialog.Callback,
ExportCloudFilesDialog.Callback,
SymLinkDialog.CallBack,
NoDirFileDialog.CallBack,
NoDirFileOrEmptyDialog.CallBack,
SearchView.OnQueryTextListener,
SearchView.OnCloseListener {
@ -606,8 +606,8 @@ class BrowseFilesActivity : BaseActivity(), //
showDialog(SymLinkDialog.newInstance())
}
override fun showNoDirFileDialog(cryptoFolderName: String, cloudFolderPath: String) {
showDialog(NoDirFileDialog.newInstance(cryptoFolderName, cloudFolderPath))
override fun showNoDirFileOrEmptyDialog(cryptoFolderName: String, cloudFolderPath: String) {
showDialog(NoDirFileOrEmptyDialog.newInstance(cryptoFolderName, cloudFolderPath))
}
override fun updateActiveFolderDueToAuthenticationProblem(folder: CloudFolderModel) {

View File

@ -34,7 +34,7 @@ interface BrowseFilesView : View {
fun updateSelectionTitle(numberSelected: Int)
fun disableSelectionMode()
fun showSymLinkDialog()
fun showNoDirFileDialog(cryptoFolderName: String, cloudFolderPath: String)
fun showNoDirFileOrEmptyDialog(cryptoFolderName: String, cloudFolderPath: String)
fun updateActiveFolderDueToAuthenticationProblem(folder: CloudFolderModel)
}

View File

@ -6,10 +6,10 @@ import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.DialogFragment
import org.cryptomator.generator.Dialog
import org.cryptomator.presentation.R
import kotlinx.android.synthetic.main.dialog_no_dir_file.tv_no_dir_file_info
import kotlinx.android.synthetic.main.dialog_no_dir_file_or_empty.tv_no_dir_file_or_empty_info
@Dialog(R.layout.dialog_no_dir_file)
class NoDirFileDialog : BaseDialog<NoDirFileDialog.CallBack>() {
@Dialog(R.layout.dialog_no_dir_file_or_empty)
class NoDirFileOrEmptyDialog : BaseDialog<NoDirFileOrEmptyDialog.CallBack>() {
interface CallBack {
@ -33,7 +33,7 @@ class NoDirFileDialog : BaseDialog<NoDirFileDialog.CallBack>() {
public override fun setupView() {
val cryptoFolderName = requireArguments().getSerializable(ARG_CRYPTO_FOLDER_NAME) as String
val cloudFolderPath = requireArguments().getSerializable(ARG_CLOUD_FOLDER_PATH) as String
tv_no_dir_file_info.text = String.format(getString(R.string.dialog_no_dir_file_message), cryptoFolderName, cloudFolderPath)
tv_no_dir_file_or_empty_info.text = String.format(getString(R.string.dialog_no_dir_file_message), cryptoFolderName, cloudFolderPath)
}
companion object {
@ -41,12 +41,12 @@ class NoDirFileDialog : BaseDialog<NoDirFileDialog.CallBack>() {
private const val ARG_CRYPTO_FOLDER_NAME = "argCryptoFolderName"
private const val ARG_CLOUD_FOLDER_PATH = "argCloudFolderPath"
fun newInstance(cryptoFolderName: String, cloudFolderPath: String): DialogFragment {
val noDirFileDialog = NoDirFileDialog()
val noDirFileOrEmptyDialog = NoDirFileOrEmptyDialog()
val args = Bundle()
args.putSerializable(ARG_CRYPTO_FOLDER_NAME, cryptoFolderName)
args.putSerializable(ARG_CLOUD_FOLDER_PATH, cloudFolderPath)
noDirFileDialog.arguments = args
return noDirFileDialog
noDirFileOrEmptyDialog.arguments = args
return noDirFileOrEmptyDialog
}
}
}

View File

@ -9,7 +9,7 @@
android:padding="@dimen/activity_vertical_margin">
<TextView
android:id="@+id/tv_no_dir_file_info"
android:id="@+id/tv_no_dir_file_or_empty_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

View File

@ -14,6 +14,7 @@
<string name="error_vault_already_exists">ভোল্টটি ইতিমধ্যে রয়েছে।</string>
<string name="error_no_such_file">ফাইলটি নেই।</string>
<string name="error_vault_has_been_locked">ভোল্টটি লক করা হয়েছে।</string>
<string name="error_cloud_already_exists">ক্লাউড ইতিমধ্যে বিদ্যমান.</string>
<string name="error_activity_not_found">ফাইলটি খুলতে পারে এমন একটি আ্যপ ডাউনলোড করুন।</string>
<string name="error_server_not_found">সার্ভার খুজে পাওয়া যায়নি।</string>
<string name="error_device_policy_manager_not_found">অনুগ্রহ করে ডিভাইস সেটিংস খুলে নিজে স্ক্রিন লক লাগিয়ে নিন। </string>
@ -39,6 +40,7 @@
<!-- ## permission messages -->
<string name="permission_message_export_file">ক্রিপ্টোমেটরের ফাইল এক্সপোর্ট করতে স্টোরেজ অনুমতি প্রয়োজন</string>
<string name="permission_message_upload_file">ক্রিপ্টোমেটরের ফাইল আপলোড করতে স্টোরেজ অনুমতি প্রয়োজন</string>
<string name="permission_message_share_file">ক্রিপ্টোমেটরের ফাইল শেয়ার করতে স্টোরেজ এক্সেস প্রয়োজন</string>
<string name="snack_bar_action_title_settings">সেটিংস</string>
<string name="snack_bar_action_title_search">খুঁজুন</string>
<string name="snack_bar_action_title_search_previous">পিছনে</string>
@ -213,7 +215,28 @@
<string name="dialog_replace_positive_button_single_file_exists">প্রতিস্থাপন করুন</string>
<string name="dialog_replace_msg_single_file_exists">%1$s নামে একটি ফাইল ইতিমধ্যে রয়েছে। আপনি কি এটা প্রতিস্থাপন করতে চান?</string>
<string name="dialog_replace_msg_all_files_exists">সব ফাইলগুলি ইতিমধ্যে রয়েছে। আপনি কি তাদের প্রতিস্থাপন করতে চান?</string>
<string name="dialog_unable_to_share_title">ফাইলগুলো শেয়ার করা যায় নি</string>
<string name="dialog_unable_to_share_message">আপনি কোনো ভোল্ট যুক্ত করেননি. অনুগ্রহ করে ক্রিপ্টোমেটর আ্যপ দিয়ে একটি নতুন ভোল্ট তৈরি করুন.</string>
<string name="dialog_unable_to_share_positive_button">আচ্ছা</string>
<string name="dialog_unable_to_share_negative_button">ভোল্ট তৈরি করুন</string>
<string name="dialog_filetype_not_supported_title">%1$s খোলা যাচ্ছে না</string>
<string name="dialog_filetype_not_supported_message">অনুগ্রহ করে এমন একটি অ্যাপ ডাউনলোড করুন যেটি ফাইলটি খুলতে পারবে অথবা আপনি কি আপনার ডিভাইসে সংরক্ষণ করতে চান?</string>
<string name="dialog_rename_vault_title">ভোল্ট নামকরণ করুন</string>
<string name="dialog_rename_node_folder_title">ফোল্ডার পুনঃনামকরন</string>
<string name="dialog_rename_node_file_title">ফাইল পুনঃনামকরন</string>
<string name="dialog_unsaved_changes_title">আপনার পরিবর্তনগুলো সংরক্ষণ করা হয়নি</string>
<string name="dialog_unsaved_changes_message">আপনি সংরক্ষণ না করেই বের হয়ে যাবেন?</string>
<string name="dialog_unsaved_changes_discard">অগ্রাহ্য</string>
<string name="dialog_file_name_placeholder">text.txt</string>
<string name="dialog_delete_vault_message">আপনি কি নিশ্চিতভাবে এই ভোল্ট অপসারণ করতে চান?</string>
<string name="dialog_delete_vault_hint">এই প্রক্রিয়ায় ভোল্টটি শুধুমাত্র এই তালিকা থেকে বাতিল হবে এবং মূল জায়গা থেকে মুছবে না.</string>
<string name="dialog_upload_file_title">আপলোড হচ্ছে&#8230;</string>
<string name="dialog_upload_file_remaining">ফাইল %1$d এর %2$d টি</string>
<string name="dialog_export_file_title">এক্সপোর্ট হচ্ছে (%1$d/%2$d)</string>
<string name="dialog_progress_please_wait">অনুগ্রহ করে অপেক্ষা করুন&#8230;</string>
<string name="dialog_progress_creating_folder">ফোল্ডার তৈরি হচ্ছে&#8230;</string>
<string name="dialog_progress_creating_text_file">টেক্সট ফাইল তৈরি হচ্ছে&#8230;</string>
<string name="dialog_progress_upload_file">আপলোড হচ্ছে&#8230;</string>
<string name="dialog_lock_vault">লক করুন</string>
<string name="dialog_app_is_obscured_info_neutral_button">বন্ধ করুন</string>
<string name="dialog_sym_link_back_button">পিছনে</string>

View File

@ -373,14 +373,14 @@
<string name="notification_auto_upload_failed_title">Fehler beim automatischen Photo-Hochladen</string>
<string name="notification_auto_upload_failed_general_error">Generaller Fehler während dem Hochladen.</string>
<string name="notification_auto_upload_failed_due_to_folder_not_exists">Ausgewählter Ordner für das Photo-Hochladen existiert nicht mehr. In der Einstellungen neuen auswählen</string>
<string name="notification_auto_upload_failed_due_to_vault_locked">Tresor gesperrt während dem hochladen, zum weiteren Hochladen entsperren</string>
<string name="notification_auto_upload_failed_due_to_vault_locked">Tresor wurde während dem Hochladen gesperrt, bitte Tresor erneut öffnen, um fortzufahren</string>
<string name="notification_auto_upload_failed_due_to_vault_not_found">Der Tresor für den automatischen Upload existiert nicht mehr.</string>
<string name="notification_open_writable_file_title">Datei mit Schreibrechten geöffnet</string>
<string name="notification_open_writable_file_message">Tresor bleibt entsperrt, bis die Bearbeitung abgeschlossen wurde</string>
<string name="notification_update_check_finished_latest">Neueste Version installiert</string>
<string name="notification_authenticating">Melde an&#8230;</string>
<string name="screen_settings_lru_cache">Zwischenspeicher</string>
<string name="screen_settings_lru_cache_toggle_summary">Speichere kürzlich geöffnete Dateien lokal und verschlüsselt auf dem Gerät für eine spätere Wiederverwendung beim erneuten öffnen</string>
<string name="screen_settings_lru_cache_toggle_summary">Kürzlich geöffnete Dateien für eine spätere Wiederverwendung beim erneuten Öffnen lokal und verschlüsselt auf dem Gerät zwischenspeichern</string>
<string name="screen_settings_lru_cache_size">Zwischenspeichergröße gesamt</string>
<string name="screen_settings_clear_lru_cache_size">Zwischenspeicher leeren</string>
<string name="screen_settings_lru_cache_changed__restart_toast">Änderungen werden nach einem Neustart der App aktiv</string>

View File

@ -9,13 +9,13 @@
<string name="error_no_network_connection">Nema mrežne veze</string>
<string name="error_invalid_passphrase">Pogrešna lozinka</string>
<string name="error_file_or_folder_exists">Datoteka ili mapa već postoje.</string>
<string name="error_vault_version_not_supported">Verzija trezora %1$s nije podržana. Ovaj trezor je stvoren sa starijom ili novijom verzijom Cryptomator-a.</string>
<string name="error_vault_version_not_supported">Verzija trezora %1$s nije podržana. Ovaj trezor je izrađen sa starijom ili novijom verzijom Cryptomator-a.</string>
<string name="error_vault_config_file_missing_due_to_format_999">%1$s datoteka nedostaje u mapi Vašeg trezora. Budite sigurni da ova datoteka postoji u mapi Vašeg trezora u oblaku.</string>
<string name="error_vault_already_exists">Trezor već postoji.</string>
<string name="error_no_such_file">Datoteka ne postoji.</string>
<string name="error_vault_has_been_locked">Trezor je zaključan.</string>
<string name="error_cloud_already_exists">Oblak već postoji.</string>
<string name="error_activity_not_found">Molimo preuzmite aplikaciju koja može otvoriti ovu datoteku.</string>
<string name="error_activity_not_found">Molimo preuzmite program koji može otvoriti ovu datoteku.</string>
<string name="error_server_not_found">Poslužitelj nije pronađen.</string>
<string name="error_device_policy_manager_not_found">Molimo otvorite postavke svog uređaja i ručno postavite zaključavanje zaslona</string>
<string name="error_export_illegal_file_name">Izvoz neuspješan. Uklonite posebne znakove iz imena datoteka i izvezite ponovno.</string>
@ -33,7 +33,7 @@
<string name="error_vault_config_loading">Opća greška kod učitavanja postavki trezora</string>
<string name="error_file_not_found_after_opening_using_3party">Lokalna datoteka više ne postoji nakon povratka u Cryptomator. Moguće promjene ne mogu se propagirati nazad u oblak.</string>
<string name="error_no_such_bucket">Nepostojeća kanta</string>
<string name="error_masterkey_location_not_supported">Prilagođeno mjesto glavnog ključa još nije podržano</string>
<string name="error_masterkey_location_not_supported">Prilagođena lokacija glavnog ključa još nije podržano</string>
<!-- # clouds -->
<!-- ## cloud names -->
<string name="cloud_names_local_storage">Lokalna pohrana</string>
@ -57,16 +57,21 @@
<!-- # screens -->
<!-- # screen: vault list -->
<string name="screen_vault_list_actions_title">Dodaj u Cryptomator</string>
<string name="screen_vault_list_action_create_new_vault">Napravi novi trezor</string>
<string name="screen_vault_list_action_create_new_vault">Izradi novi trezor</string>
<string name="screen_vault_list_action_add_existing_vault">Dodaj postojeći trezor</string>
<string name="screen_vault_list_vault_action_delete">Ukloni</string>
<string name="screen_vault_list_vault_creation_hint">Pritisnite ovdje za stvaranje novog trezora</string>
<string name="screen_vault_list_vault_creation_hint">Pritisnite ovdje za izradu novog trezora</string>
<string name="screen_vault_list_change_password_successful">Lozinka je uspješno promijenjena</string>
<!-- # screen: file browser -->
<string name="screen_file_browser_default_title">Trezor</string>
<string name="screen_file_browser_add_existing_vault_extra_text">Odaberi datoteku glavnog ključa</string>
<string name="screen_file_browser_create_new_vault_button_text">Postavi ovdje</string>
<string name="screen_file_browser_create_new_vault_extra_text">Ime trezora: %1$s</string>
<plurals name="screen_file_browser_subtitle_move">
<item quantity="one">Premjesti %1$s u</item>
<item quantity="few">Premjesti %2$d stavke u</item>
<item quantity="other">Premjesti %2$d stavki u</item>
</plurals>
<string name="screen_file_browser_move_button_text">Premjesti</string>
<string name="screen_file_browser_msg_empty_folder">Prazna mapa</string>
<string name="screen_file_browser_file_info_label_date">izmijenjeno prije %1$s</string>
@ -138,14 +143,14 @@
<!-- ## screen: enter vault name -->
<string name="screen_enter_vault_name_msg_name_empty">Ime trezora ne može biti prazno.</string>
<string name="screen_enter_vault_name_vault_label">Ime trezora</string>
<string name="screen_enter_vault_name_button_text">Stvori</string>
<string name="screen_enter_vault_name_button_text">Izradi</string>
<!-- ## screen: set password -->
<string name="screen_set_password_title">Postavi lozinku</string>
<string name="screen_set_password_msg_password_mismatch">Lozinka ne odgovara ponovno upisanoj lozinci.</string>
<string name="screen_set_password_button_text">Gotovo</string>
<string name="screen_set_password_hint">VAŽNO: Ako zaboravite svoju lozinku, nema načina za povrat Vaših podataka.</string>
<string name="screen_set_password_retype_password_label">Ponovno upišite lozinku</string>
<string name="screen_set_password_strength_indicator_0">Preslaba za kreiranje trezora</string>
<string name="screen_set_password_strength_indicator_0">Preslaba za izradu trezora</string>
<string name="screen_set_password_strength_indicator_1">Slaba</string>
<string name="screen_set_password_strength_indicator_2">Prosječna</string>
<string name="screen_set_password_strength_indicator_3">Jaka</string>
@ -156,10 +161,10 @@
<string name="screen_settings_biometric_auth">Biometrijska autentikacija</string>
<string name="screen_settings_activate_biometric_auth">Aktiviraj biometrijsku autentikaciju</string>
<string name="screen_settings_confirm_face_unlock">Potvrdi otključavanje licem (ako je dostupno)</string>
<string name="screen_settings_block_app_when_obscured">Blokiraj program kada je zaklonjen</string>
<string name="screen_settings_block_app_when_obscured">Blokiraj aplikaciju kada je zaklonjena</string>
<string name="screen_settings_block_app_when_obscured_summary">Blokiraj presretanje unosa i prikaz lažnog korisničkog sučelja</string>
<string name="screen_settings_secure_screen">Blokiraj snimke zaslona</string>
<string name="screen_settings_secure_screen_summary">Blokiraj snimke zaslona u listi nedavnih i unutar programa</string>
<string name="screen_settings_secure_screen_summary">Blokiraj snimke zaslona u listi nedavnih i unutar aplikacije</string>
<string name="screen_settings_section_search">Traži</string>
<string name="screen_settings_live_search">Pretraživanje uživo</string>
<string name="screen_settings_live_search_summary">Ažuriraj rezultate pretraživanja pri unosu upita</string>
@ -192,44 +197,221 @@
<string name="screen_settings_section_version">Verzija</string>
<string name="screen_settings_advanced_settings">Napredne postavke</string>
<string name="screen_settings_background_unlock_preparation_label">Ubrzaj otključavanje</string>
<string name="screen_settings_background_unlock_preparation_label_summary">Preuzmite postavke trezora u pozadini dok se od vas traži da unesete lozinku ili biometrijska autentikacija</string>
<string name="screen_settings_keep_unlocked_while_editing_files">Drži otključano</string>
<string name="screen_settings_keep_unlocked_while_editing_files_summary">Neka trezori budu otključani dok se datoteke uređuju</string>
<!-- ## screen: cloud settings -->
<string name="screen_cloud_settings_onedrive_connections">OneDrive veze</string>
<string name="screen_cloud_settings_webdav_connections">WebDAV veze</string>
<string name="screen_cloud_settings_pcloud_connections">pCloud veze</string>
<string name="screen_cloud_settings_s3_connections">S3 veze</string>
<string name="screen_cloud_settings_local_storage_locations">Lokacije lokalne pohrane</string>
<string name="screen_cloud_settings_log_in_to">Prijavi se na</string>
<string name="screen_cloud_settings_sign_out_from_cloud">Odjavi se iz</string>
<!-- ## screen: licenses -->
<!-- ## screen: authenticate cloud -->
<string name="screen_authenticate_auth_authentication_failed">%1$s se ne može autenticirati.</string>
<string name="screen_update_pcloud_connections_title">Ažuriraj pCloud vjerodajnice</string>
<!-- ## screen: insecure android version info -->
<!-- # dialogs -->
<string name="dialog_button_cancel">Odustani</string>
<string name="dialog_enter_password_positive_button">Otključaj</string>
<string name="dialog_change_password_old_password_label">Stara lozinka</string>
<string name="dialog_change_password_new_password_label">Nova lozinka</string>
<string name="dialog_change_password">Promijeni lozinku</string>
<string name="dialog_change_password_msg_old_password_empty">Stara lozinka ne može biti prazna.</string>
<string name="dialog_change_password_msg_new_password_empty">Nova lozinka ne može biti prazna.</string>
<string name="dialog_change_password_msg_password_mismatch">Nova lozinka ne odgovara ponovno upisanoj lozinci.</string>
<!-- Vault not found -->
<string name="dialog_vault_not_found_title">Trezor %1$s nije pronađen</string>
<string name="dialog_vault_not_found_message">Trezor je preimenovan, pomaknut ili obrisan. Uklonite trezor s liste i dodajte ga ponovno za nastavak. Ukloniti sada?</string>
<string name="dialog_vault_not_found_positive_button_text">Ukloni</string>
<string name="dialog_existing_file_title">Datoteka već postoji</string>
<string name="dialog_existing_file_positive_button">Zamijeni</string>
<string name="dialog_existing_file_message">Datoteka s imenom \'%1$s\' već postoji.</string>
<string name="dialog_replace_negative_button_at_least_two_but_not_all_files_exist">Preskoči postojeće</string>
<string name="dialog_replace_positive_button_all_files_exist">Zamijeni sve</string>
<string name="dialog_replace_positive_button_some_files_exist">Zamijeni postojeće</string>
<string name="dialog_replace_positive_button_single_file_exists">Zamijeni</string>
<string name="dialog_replace_msg_single_file_exists">Datoteka naziva \'%1$s\' već postoji. Želite li ju zamijeniti?</string>
<string name="dialog_replace_msg_all_files_exists">Sve datoteke već postoje. Želite li ih zamijeniti?</string>
<string name="dialog_replace_msg_some_files_exists">%1$d datoteka već postoji. Želite li ih zamijeniti?</string>
<string name="dialog_replace_title_single_file_exists">Zamijeniti datoteku?</string>
<string name="dialog_replace_title_multiple_files_exist">Zamjeniti datoteke?</string>
<string name="dialog_unable_to_share_title">Nije moguće dijeliti datoteke</string>
<string name="dialog_unable_to_share_message">Niste postavili niti jedan trezor. Izradite novi trezor s Cryptomator-om.</string>
<string name="dialog_unable_to_share_positive_button">U redu</string>
<string name="dialog_unable_to_share_negative_button">Izradi trezor</string>
<string name="dialog_filetype_not_supported_title">Ne mogu otvoriti %1$s</string>
<string name="dialog_filetype_not_supported_message">Preuzmite aplikaciju koja može otvoriti ovu datoteku ili ju želite pohraniti na Vaš uređaj?</string>
<string name="dialog_rename_vault_title">Preimenuj trezor</string>
<string name="dialog_rename_node_folder_title">Preimenuj mapu</string>
<string name="dialog_rename_node_file_title">Preimenuj datoteku</string>
<string name="dialog_unsaved_changes_title">Imate nepohranjene promjene</string>
<string name="dialog_unsaved_changes_message">Želite li izaći bez spremanja?</string>
<string name="dialog_unsaved_changes_discard">Odbaci</string>
<string name="dialog_file_name_placeholder">tekst.txt</string>
<string name="dialog_delete_vault_message">Sigurno želite ukloniti ovaj trezor?</string>
<string name="dialog_delete_vault_hint">Ova radnja će samo ukloniti trezor s liste, ali ne i fizički ga obrisati.</string>
<string name="dialog_upload_file_title">Prenosi se&#8230;</string>
<string name="dialog_upload_file_remaining">Datoteka %1$d od %2$d</string>
<string name="dialog_export_file_title">Izvoz (%1$d/%2$d)</string>
<string name="dialog_progress_please_wait">Molimo pričekajte&#8230;</string>
<string name="dialog_progress_creating_folder">Izrada mape&#8230;</string>
<string name="dialog_progress_creating_text_file">Izrada tekstualne datoteke&#8230;</string>
<string name="action_progress_authentication">Autentikacija&#8230;</string>
<string name="action_progress_renaming">Preimenovanje&#8230;</string>
<string name="action_progress_deleting">Brisanje&#8230;</string>
<string name="dialog_progress_unlocking_vault">Otključavanje trezora&#8230;</string>
<string name="dialog_progress_change_password">Promijeni lozinku&#8230;</string>
<string name="dialog_progress_creating_vault">Izrada trezora&#8230;</string>
<string name="dialog_progress_upload_file">Prenosi se&#8230;</string>
<string name="dialog_progress_download_file">Preuzima se&#8230;</string>
<string name="dialog_progress_encryption">Šifrira se&#8230;</string>
<string name="dialog_progress_decryption">Dešifriranje&#8230;</string>
<string name="action_progress_moving">Premještanje&#8230;</string>
<string name="dialog_lock_vault">Zaključaj</string>
<string name="dialog_accept_ssl_certificate_title">Nevažeći SSL certifikat</string>
<string name="dialog_accept_ssl_certificate_hint">SSL certificate je nevažeći. Želite li mu ipak vjerovati?</string>
<string name="dialog_accept_ssl_certificate_details">Detalji</string>
<string name="dialog_accept_ssl_certificate_security_checkbox">Ovo bi mogao biti sigurnosni rizik. Znam što činim.</string>
<string name="dialog_ask_ignore_battery_optimizations_title">Onemogući optimizacije baterije</string>
<string name="dialog_ask_ignore_battery_optimizations_hint">Za dohvat novih slika i videa bez rada u pozadini, moramo onemogućiti optimizacije baterije. Ali ne brinite, %1$s ne troši puno energije.\n\nDa biste ga primijenili, promijenite \"Nije optimizirano\" u \"Sve aplikacije\", odaberite %1$s i odaberite \"Nemoj optimizirati\" nakon što pritisnete \'%2$s\' u ovom dijaloškom okviru.</string>
<string name="dialog_ask_ignore_battery_optimizations_checkbox">Ne pitati ponovno?</string>
<string name="dialog_http_security_hint">Korištenje HTTP-a je nesigurno. Preporučamo korištenje HTTPS-a umjesto toga. Ako znate rizike, možemo nastaviti s HTTP-om.</string>
<string name="dialog_http_security_checkbox">Promijeni u HTTPS</string>
<string name="dialog_http_security_title">Koristiti HTTPS?</string>
<string name="dialog_no_screen_lock_hint">Zaključavanje zaslona nije postavljeno. Da biste svoje vjerodajnice pohranili na siguran način, postavite s OK uzorak ili lozinku.</string>
<string name="dialog_no_screen_lock_title">Postaviti zaključavanje zaslona?</string>
<string name="dialog_no_screen_lock_checkbox">Postaviti zaključavanje zaslona</string>
<string name="dialog_no_biometric_auth_set_up_title">U sustavu nije postavljena osnovna provjera autentikacije</string>
<string name="dialog_no_biometric_auth_set_up_message">Prijavite barem jedan prst/lice za korištenje ove usluge.</string>
<string name="dialog_debug_mode_disclaimer_hint">U ovom načinu, osjetljivi podaci mogu biti zapisani u log datoteku na Vašem uređaju (npr. datoteke i putanje). Lozinke, kolačići itd. su izričito isključeni.\n\nZapamtite da isključite način za otklanjanje pogrešaka čim prije je to moguće.</string>
<string name="dialog_debug_mode_disclaimer_title">Pažnja</string>
<string name="dialog_debug_mode_positive_button">Omogući</string>
<string name="dialog_disable_app_obscured_disclaimer_hint">Ova je postavka sigurnosna značajka i spriječava druge aplikacije da prevare korisnike da rade stvari koje ne žele raditi.\n\nOnemogućavanjem potvrđujete da ste <a href="https://docs.cryptomator.org /en/1.5/android/settings/#block-app-when-obscured">svjesni rizika</a>.</string>
<string name="dialog_disable_app_obscured_disclaimer_title">Pažnja</string>
<string name="dialog_disable_app_obscured_positive_button">Onemogući</string>
<string name="dialog_app_is_obscured_info_title">Aplikacija je zaklonjena</string>
<string name="dialog_app_is_obscured_info_hint">Druga aplikacija prikazuje nešto na vrhu Cryptomator-a (e.g., a blue light filter or night mode app). Iz sigurnosnih razloga, Cryptomator je onemogućen.\n\n<a href="https://docs.cryptomator.org/en/1.5/android/settings/#block-app-when-obscured">Kako omogućiti Cryptomator</a></string>
<string name="dialog_app_is_obscured_info_neutral_button">Zatvori</string>
<string name="dialog_vaults_removed_during_migration_title">Ponovno dodajte trezore za %1s oblak</string>
<string name="dialog_vaults_removed_during_migration_hint">Tijekom migracije na ovu verziju aplikacije moramo ukloniti sljedeće trezore iz njega:\n%2s \n\nTi trezori se ne uklanjaju iz oblaka, već samo iz ove aplikacije. Ispričavamo se zbog neugodnosti i molimo da ponovno dodate ove trezore kako biste nastavili raditi s njima.</string>
<string name="dialog_vault_is_root_folder_of_cloud_title">Trezor je korijenska mapa veze u oblaku</string>
<string name="dialog_vault_is_root_folder_of_cloud_hint">Izradite novu vezu prema oblaku pri čemu odaberite barem nadređenu mapu ovog trezora kao korijensku mapu za njegovo dodavanje.</string>
<string name="dialog_disable_secure_screen_disclaimer_hint">Ova je postavka sigurnosna značajka i sprječava druge aplikacije da prevare korisnike da rade stvari koje ne žele raditi.\n\nOnemogućavanjem potvrđujete da ste <a href="https://docs.cryptomator.org/en/1.5/android/settings/#screen-security">svjesni rizika</a>.</string>
<string name="dialog_delete_cloud_connection_with_vaults_message">Sigurni ste da želite ukloniti ovu vezu prema oblaku?</string>
<string name="dialog_delete_cloud_connection_with_vaults_hint">Ova radnje će ukloniti vezu prema oblaku i sve trezore u njemu.</string>
<string name="dialog_confirm_delete_multiple_title">Izbrisati %1$d stavke?</string>
<string name="dialog_confirm_delete_multiple_message">Sigurno želite obrisati ove stavke?</string>
<string name="dialog_confirm_delete_file_message">Sigurno želite obrisati ove datoteke?</string>
<string name="dialog_confirm_delete_folder_message">Ovo će obrisati sav sadržaj mape. Sigurni ste da želite obrisati ovu mapu?</string>
<string name="dialog_biometric_auth_key_invalidated_title">Biometrijska autentikacija deaktivirana</string>
<string name="dialog_biometric_auth_key_invalidated_message">Budući da je ključ poništen, biometrijska autentikacija je deaktivirana. Da biste ju ponovno omogućili, otvorite postavke Cryptomator-a.</string>
<string name="dialog_enter_license_title">Pružite važeću licencu</string>
<string name="dialog_enter_license_content">Otkrili smo da ste instalirali Cryptomator bez upotrebe trgovine Google Play. Navedite važeću licencu koja se može kupiti na <a href="https://cryptomator.org/android/">https://cryptomator.org/android/</a></string>
<string name="dialog_enter_license_not_valid_content">Navedena licenca nije važeća. Provjerite jeste li ju ispravno unijeli.</string>
<string name="dialog_enter_license_not_valid_content_desktop_supporter_certificate">Navedeni ključ je certifikat tzv. stolnog podržavatelja. Molimo unesite važeću licencu.</string>
<string name="dialog_enter_license_no_content">Licenca nije pružena. Molimo unesite važeću licencu.</string>
<string name="dialog_enter_license_decline_button">Izlaz</string>
<string name="dialog_license_confirmation_title">Potvrda licence</string>
<string name="dialog_license_confirmation_message">Hvala %1$s za pružanje valjane licence.</string>
<string name="dialog_update_available_title">Ažuriranje dostupno</string>
<string name="dialog_update_available_message">Ažurirajte Cryptomator na najnoviju verziju. Pritiskom na OK aplikaciju ćemo preuzeti u pozadini i zatražiti od Vas da ju instalirate.</string>
<string name="dialog_update_available_update">Ažuriraj sada</string>
<string name="dialog_update_available_download_site">Idi na stranicu za preuzimanja</string>
<string name="dialog_update_available_cancel">Kasnije</string>
<string name="dialog_download_update_title">Preuzimanje u tijeku</string>
<string name="dialog_download_update_message">Preuzimanje zadnje verzije Cryptomator-a</string>
<string name="dialog_sym_link_title">Mapa je simbolička veza</string>
<string name="dialog_sym_link_message">Ne možete pratiti ovu simboličku vezu</string>
<string name="dialog_sym_link_back_button">Nazad</string>
<string name="dialog_no_dir_file_title">Nije moguće učitati sadržaj mape</string>
<string name="dialog_no_dir_file_message">Mapa u oblaku \'%1$s\' nema valjanu datoteku mape. Može biti da je mapa izrađena na drugom uređaju i nije još u potpunosti sinkronizirana s oblakom. Molimo provjerite u oblaku da slijedeća datoteka postoji i da nije prazna:\n%2$s</string>
<string name="dialog_no_more_images_to_display">Nema više slika za prikaz&#8230;</string>
<string name="dialog_pcloud_credentials_updated_title">Vjerodajnice od \'%1$s\' ažurirane</string>
<string name="dialog_pcloud_credentials_updated">Ako ste namjeravali dodati novi pCloud račun, pritisnite url <a href="https://www.pcloud.com">www.pcloud.com</a>, odjavite se iz postojećeg računa i pritisnite na \'+\' u ovoj aplikaciji za izradu nove veze prema oblaku.</string>
<string name="permission_snackbar_auth_local_vault">Cryptomator treba pristup pohrani da koristi lokalne trezore</string>
<string name="permission_snackbar_auth_auto_upload">Cryptomator treba pristup pohrani da koristi automatski prijenos slika</string>
<!-- # error reports -->
<!-- # misc -->
<!-- ## file size helper -->
<string name="file_size_zero">Nula kB</string>
<string name="file_size_unit_bytes">bajtova</string>
<string name="file_size_unit_kilo_bytes">kB</string>
<string name="file_size_unit_mega_bytes">MB</string>
<string name="file_size_unit_giga_bytes">GB</string>
<string name="file_size_unit_tera_bytes">TB</string>
<!-- ## date helper -->
<string name="time_unit_seconds_sg">sekunda</string>
<string name="time_unit_seconds_pl">sekunde</string>
<string name="time_unit_minutes_sg">minuta</string>
<string name="time_unit_minutes_pl">minute</string>
<string name="time_unit_hours_sg">sat</string>
<string name="time_unit_hours_pl">sati</string>
<string name="time_unit_days_sg">dan</string>
<string name="time_unit_days_pl">dani</string>
<string name="time_unit_weeks_sg">tjedan</string>
<string name="time_unit_weeks_pl">tjedni</string>
<string name="time_unit_months_sg">mjesec</string>
<string name="time_unit_months_pl">mjeseci</string>
<string name="time_unit_years_sg">godina</string>
<string name="time_unit_years_pl">godine</string>
<!-- ## biometric authentication -->
<string name="dialog_biometric_auth_title">Biometrijska prijava</string>
<string name="dialog_biometric_auth_message">Prijavite se koristeći svoje biometrijske vjerodajnice</string>
<string name="dialog_biometric_auth_use_password">Koristi lozinku trezora</string>
<string name="dialog_unable_to_auto_upload_files_title">Nije moguć automatski prijenos datoteka</string>
<!-- notification -->
<string name="notification_unlocked">Otključanih trezora: %1$d</string>
<string name="notification_timeout">Automatsko zaključavanje za %1$s</string>
<string name="notification_lock_all">Zaključaj sve</string>
<string name="notification_cancel_auto_upload">Odustani od prijenosa</string>
<string name="notification_auto_upload_title">Aumatski prijenos slika u tijeku</string>
<string name="notification_auto_upload_message">Prenosim %1d/%2d</string>
<string name="notification_auto_upload_finished_title">Automatski prijenos slika završen</string>
<string name="notification_auto_upload_finished_message">%1$d slika preneseno u trezor</string>
<string name="notification_auto_upload_failed_title">Automatski prijenos slika neuspješan</string>
<string name="notification_auto_upload_failed_general_error">Došlo je do greške tijekom prijenosa.</string>
<string name="notification_auto_upload_failed_due_to_folder_not_exists">Odabrana mapa za prijenos više nije dostupna. Idite na postavke i odaberite novu</string>
<string name="notification_auto_upload_failed_due_to_vault_locked">Trezor je zaključan tijekom prijenosa, ponovno ga otvorite za nastavak</string>
<string name="notification_auto_upload_failed_due_to_vault_not_found">Trezor određen za automatski prijenos više ne postoji.</string>
<string name="notification_open_writable_file_title">Datoteka otvorena za pisanje</string>
<string name="notification_open_writable_file_message">Trezor ostaje otvoren dok se ne završi izmjena</string>
<string name="notification_update_check_finished_latest">Najnovija verzija je instalirana</string>
<string name="notification_authenticating">Autentikacija&#8230;</string>
<string name="screen_settings_lru_cache">Predmemorija</string>
<string name="screen_settings_lru_cache_toggle_summary">Predmemorija je nedavno pristupila datotekama šifriranima lokalno na uređaju za kasniju ponovnu upotrebu</string>
<string name="screen_settings_lru_cache_size">Ukupna veličina predmemorije</string>
<string name="screen_settings_clear_lru_cache_size">Očisti predmemoriju</string>
<string name="screen_settings_lru_cache_changed__restart_toast">Promjene će se primijeniti kod slijedećeg pokretanja aplikacije</string>
<string name="screen_settings_license">Registrirano za</string>
<string name="screen_settings_license_mail">%1$s</string>
<string name="dialog_settings_update_check_interval_title">Razmak ažuriranja</string>
<string name="screen_settings_check_updates">Potraži ažuriranja</string>
<string name="screen_settings_last_check_updates">Posljednji put pokrenuto %1$s</string>
<string name="dialog_cache_size_title">Veličina predmemorije po oblaku</string>
<!-- lock timeout names -->
<string name="lock_timeout_instant">Odmah</string>
<string name="lock_timeout_1m">1 minuta</string>
<string name="lock_timeout_2m">2 minute</string>
<string name="lock_timeout_5m">5 minuta</string>
<string name="lock_timeout_10m">10 minuta</string>
<string name="lock_timeout_never">Nikad</string>
<!-- cache size names -->
<string name="cache_size_50m">50 MB</string>
<string name="cache_size_100m">100 MB</string>
<string name="cache_size_250m">250 MB</string>
<string name="cache_size_500m">500 MB</string>
<string name="cache_size_1000m">1 GB</string>
<string name="cache_size_5000m">5 GB</string>
<!-- screen scheme mode names -->
<string name="screen_settings_style_mode">Stil</string>
<string name="follow_system">Automatski (slijedi sustav)</string>
<string name="light">Svijetlo</string>
<string name="dark">Tamno</string>
<!-- update interval names -->
<string name="update_interval_1d">Jednom dnevno</string>
<string name="update_interval_1w">Jednom tjedno</string>
<string name="update_interval_1m">Jednom mjesečno</string>
</resources>

View File

@ -197,6 +197,7 @@
<string name="screen_settings_keep_unlocked_while_editing_files">Feloldvatartás</string>
<string name="screen_settings_keep_unlocked_while_editing_files_summary">Fájlok szerkesztése közben tartsa feloldva a trezorokat</string>
<!-- ## screen: cloud settings -->
<string name="screen_cloud_settings_onedrive_connections">OneDrive kapcsolat</string>
<string name="screen_cloud_settings_webdav_connections">WebDAV fiókok</string>
<string name="screen_cloud_settings_pcloud_connections">pCloud fiókok</string>
<string name="screen_cloud_settings_s3_connections">S3 fiókok</string>
@ -270,6 +271,21 @@
<string name="dialog_accept_ssl_certificate_hint">Az SSL tanúsítvány érvénytelen. El szeretné fogadni ennek ellenére?</string>
<string name="dialog_accept_ssl_certificate_details">Részletek</string>
<string name="dialog_accept_ssl_certificate_security_checkbox">Ez biztonsági kockázatot jelent. Tudom, mit csinálok.</string>
<string name="dialog_ask_ignore_battery_optimizations_title">Akkumulátor-optimalizálás kikapcsolása</string>
<string name="dialog_ask_ignore_battery_optimizations_checkbox">Ne kérdezze újra</string>
<string name="dialog_http_security_hint">A HTTP használata nem biztonságos, helyette a HTTPS használata ajánlott. Ha ismeri a kockázatot, folytathatja HTTP-vel is.</string>
<string name="dialog_http_security_checkbox">Váltson HTTPS-re</string>
<string name="dialog_http_security_title">HTTPS használata</string>
<string name="dialog_no_screen_lock_hint">Nincs beállítva kijelzőzár. A hitelesítő adatok biztonságos tárolásához az OK-ra kattintva állítson be mintát vagy jelszót.</string>
<string name="dialog_no_screen_lock_title">Képernyőzár beállítása?</string>
<string name="dialog_no_screen_lock_checkbox">Képernyőzár beállítása</string>
<string name="dialog_no_biometric_auth_set_up_title">Nincs beállítva hitelesítés a rendszerben</string>
<string name="dialog_no_biometric_auth_set_up_message">A funkció használatához tároljon legalább egy biometrikus adatot.</string>
<string name="dialog_debug_mode_disclaimer_hint">Ebben a módban érzékeny adatok kerülhetnek az eszközön lévő naplófájlba (pl. fájlnevek és -útvonalak). Ez jelszavakra és sütikre nem vonatkozik.\n\n Ne felejtse el minél hamarabb kikapcsolni a fejlesztői módot.</string>
<string name="dialog_debug_mode_disclaimer_title">Figyelem</string>
<string name="dialog_debug_mode_positive_button">Engedélyezés</string>
<string name="dialog_disable_app_obscured_disclaimer_title">Figyelem</string>
<string name="dialog_disable_app_obscured_positive_button">Letiltás</string>
<string name="dialog_app_is_obscured_info_neutral_button">Bezár</string>
<string name="dialog_confirm_delete_multiple_message">Biztosan törölni akarja ezeket az elemeket?</string>
<string name="dialog_confirm_delete_file_message">Biztosan törli ezt a fájlt?</string>
@ -328,6 +344,7 @@
<string name="notification_open_writable_file_title">Írható fájl megnyitása</string>
<string name="notification_open_writable_file_message">A trezor a szerkesztés idejéig feloldva marad</string>
<string name="notification_update_check_finished_latest">A legfrissebb verzió van telepítve</string>
<string name="notification_authenticating">Hitelesítés&#8230;</string>
<string name="screen_settings_lru_cache">Gyorsítótár</string>
<string name="screen_settings_lru_cache_toggle_summary">Helyileg titkosított fájlok gyorsítótárazása az eszközön, később újrafelhasználásra</string>
<string name="screen_settings_lru_cache_size">Gyorsítótár mérete</string>
@ -336,10 +353,28 @@
<string name="screen_settings_license">Regisztrált:</string>
<string name="screen_settings_license_mail">%1$s</string>
<string name="dialog_settings_update_check_interval_title">Frissítések keresésése</string>
<string name="screen_settings_check_updates">Frissítések keresése</string>
<!-- lock timeout names -->
<string name="lock_timeout_instant">Azonnal</string>
<string name="lock_timeout_1m">1 perc</string>
<string name="lock_timeout_2m">2 perc</string>
<string name="lock_timeout_5m">5 perc</string>
<string name="lock_timeout_10m">10 perc</string>
<string name="lock_timeout_never">Soha</string>
<!-- cache size names -->
<string name="cache_size_50m">50 MB</string>
<string name="cache_size_100m">100 MB</string>
<string name="cache_size_250m">250 MB</string>
<string name="cache_size_500m">500 MB</string>
<string name="cache_size_1000m">1 GB</string>
<string name="cache_size_5000m">5 GB</string>
<!-- screen scheme mode names -->
<string name="screen_settings_style_mode">Stílus</string>
<string name="follow_system">Automatikus (A rendszeren alapuló)</string>
<string name="light">Világos</string>
<string name="dark">Sötét</string>
<!-- update interval names -->
<string name="update_interval_1d">Naponta egyszer</string>
<string name="update_interval_1w">Hetente egyszer</string>
<string name="update_interval_1m">Havonta egyszer</string>
</resources>

View File

@ -9,6 +9,8 @@
<string name="error_no_network_connection">Tidak ada koneksi jaringan</string>
<string name="error_invalid_passphrase">Kata sandi salah</string>
<string name="error_file_or_folder_exists">Berkas atau folder sudah ada.</string>
<string name="error_vault_version_not_supported">Vault versi %1$s tidak didukung. Vault ini dibuat menggunakan Cryptomator versi lama ataupun lebih baru.</string>
<string name="error_vault_config_file_missing_due_to_format_999">File %1$s tidak ditemukan di folder vault Anda. Pastikan file tersebut ada di folder cloud Anda.</string>
<string name="error_vault_already_exists">Vault sudah ada.</string>
<string name="error_no_such_file">Berkas tidak ada.</string>
<string name="error_vault_has_been_locked">Vault telah dikunci.</string>
@ -271,6 +273,9 @@
<string name="dialog_accept_ssl_certificate_hint">Sertifikat SSL tidak valid. Apakah Anda ingin mempercayainya?</string>
<string name="dialog_accept_ssl_certificate_details">Rincian</string>
<string name="dialog_accept_ssl_certificate_security_checkbox">Ini bisa menjadi risiko keamanan. Saya tahu apa yang saya lakukan.</string>
<string name="dialog_ask_ignore_battery_optimizations_title">Nonaktifkan optimalisasi baterai</string>
<string name="dialog_ask_ignore_battery_optimizations_hint">Untuk mengambil gambar dan video baru tanpa berjalan di latar belakang, kami perlu keluar dari pengoptimalan baterai. Tidak perlu khawatir, %1$s tidak mengonsumsi banyak daya.\n\nUntuk menerapkannya, ubah \'Tidak dioptimalkan\' menjadi \'Semua aplikasi\', pilih %1$s dan pilih \'Jangan optimalkan\' setelah mengeklik \'%2$s\' dalam dialog ini.</string>
<string name="dialog_ask_ignore_battery_optimizations_checkbox">Jangan tanya lagi?</string>
<string name="dialog_http_security_hint">Penggunaan HTTP tidak aman. Kami menyarankan untuk menggunakan HTTPS sebagai gantinya. Jika Anda mengetahui risikonya, Anda dapat melanjutkan dengan HTTP.</string>
<string name="dialog_http_security_checkbox">Ubah ke HTTPS</string>
<string name="dialog_http_security_title">Gunakan HTTPS?</string>

View File

@ -9,6 +9,8 @@
<string name="error_no_network_connection">ネットワーク接続がありません</string>
<string name="error_invalid_passphrase">パスワードが正しくありません</string>
<string name="error_file_or_folder_exists">ファイルかフォルダーが既に存在します。</string>
<string name="error_vault_version_not_supported">金庫のバージョン %1$s はサポートされていません。この金庫は、現在のものより古いか新しいバージョンの Cryptomator で作成されています。</string>
<string name="error_vault_config_file_missing_due_to_format_999">%1$s ファイルが金庫のフォルダーに見つかりませんでした。クラウドの金庫フォルダーにこのファイルが存在することをご確認ください。</string>
<string name="error_vault_already_exists">金庫が既に存在します。</string>
<string name="error_no_such_file">ファイルが存在しません。</string>
<string name="error_vault_has_been_locked">金庫が施錠されました。</string>
@ -272,6 +274,7 @@
<string name="dialog_accept_ssl_certificate_details">詳細</string>
<string name="dialog_accept_ssl_certificate_security_checkbox">これはセキュリティリスクになる可能性があります。リスクについて理解していますか</string>
<string name="dialog_ask_ignore_battery_optimizations_title">バッテリーの最適化を無効にする</string>
<string name="dialog_ask_ignore_battery_optimizations_hint">バックグラウンド中に新しい画像やビデオを取得するには、バッテリーの最適化オプションからオプトアウトする必要があります。%1$s が多くのエネルギーを消費することはありません。\n\n 「最適化されていない状態」から「すべてのアプリ」に変更するには、このダイアログで \'%2$s\' をクリックした後に、%1$s を選び「最適化しない」を指定してください。</string>
<string name="dialog_ask_ignore_battery_optimizations_checkbox">今後確認しない</string>
<string name="dialog_http_security_hint">HTTP は安全ではありません。代わりに HTTPS を使用することを推奨します。リスクを承知の上であれば HTTP をご使用ください。</string>
<string name="dialog_http_security_checkbox">HTTPS を使用</string>

View File

@ -9,6 +9,8 @@
<string name="error_no_network_connection">Ingen nettverkstilkobling</string>
<string name="error_invalid_passphrase">Feil passord</string>
<string name="error_file_or_folder_exists">En fil eller mappe finnes allerede.</string>
<string name="error_vault_version_not_supported">Versjon %1$s av hvelvet støttes ikke. Dette hvelvet har blitt opprettet med en eldre eller nyere versjon av Cryptomator.</string>
<string name="error_vault_config_file_missing_due_to_format_999">%1$s filen mangler i mappen til hvelvet ditt. Sørg for at filen eksisterer i hvelvet ditt i skyen.</string>
<string name="error_vault_already_exists">Hvelvet finnes allerede.</string>
<string name="error_no_such_file">Filen finnes ikke.</string>
<string name="error_vault_has_been_locked">Hvelvet har blitt låst.</string>
@ -22,8 +24,16 @@
<string name="error_vault_name_contains_invalid_characters">Navn på hvelvet kan ikke inneholde spesialtegn.</string>
<string name="error_general_update">Oppdateringskontrollen mislyktes. Det oppstod en generell feil.</string>
<string name="error_hash_mismatch_update">Oppdateringskontrollen mislyktes. Den beregnede hash-koden stemmer ikke med den opplastede filen</string>
<string name="error_update_no_internet">Oppdateringssjekken mislyktes. Ingen internettforbindelse.</string>
<string name="error_failed_to_decrypt_webdav_password">Klarte ikke å dekryptere WebDAV-passord, vennligst legg inn nytt i innstillingene</string>
<string name="error_play_services_not_available">Google Play Services er ikke installert</string>
<string name="error_biometric_auth_aborted">Biometrisk autentisering avbrutt</string>
<string name="error_masterkey_location_not_supported">Egendefinert posisjon for Masterkey er foreløpig ikke støttet</string>
<string name="error_vault_version_mismatch">Versjon spesifisert i %1$s er forskjellig fra %2$s</string>
<string name="error_vault_key_invalid">%1$s samsvarer ikke med denne %2$s</string>
<string name="error_vault_config_loading">Generell feil under lasting av hvelvkonfigurasjon</string>
<string name="error_file_not_found_after_opening_using_3party">Lokal fil finnes ikke lenger etter å ha byttet tilbake til Cryptomator. Mulige endringer kan ikke sendes tilbake til skyen.</string>
<string name="error_no_such_bucket">Ingen slik bøtte</string>
<string name="error_masterkey_location_not_supported">Egendefinert lokasjon for Hovednøkkel er foreløpig ikke støttet</string>
<!-- # clouds -->
<!-- ## cloud names -->
<string name="cloud_names_local_storage">Lokal lagring</string>
@ -37,7 +47,7 @@
<string name="snack_bar_action_title_search">Søk</string>
<string name="snack_bar_action_title_search_previous">Forrige</string>
<string name="snack_bar_action_title_search_next">Neste</string>
<string name="snack_bar_action_title_sort">Sorter</string>
<string name="snack_bar_action_title_sort">Sortere</string>
<string name="snack_bar_action_title_sort_az">A - Å</string>
<string name="snack_bar_action_title_sort_za">Å - A</string>
<string name="snack_bar_action_title_sort_newest">Nyeste først</string>
@ -51,17 +61,26 @@
<string name="screen_vault_list_action_add_existing_vault">Legg til et eksisterende hvelv</string>
<string name="screen_vault_list_vault_action_delete">Fjern</string>
<string name="screen_vault_list_vault_creation_hint">Klikk her for å lage et nytt hvelv</string>
<string name="screen_vault_list_change_password_successful">Passordet er endret</string>
<!-- # screen: file browser -->
<string name="screen_file_browser_default_title">Hvelv</string>
<string name="screen_file_browser_add_existing_vault_extra_text">Velg hovednøkkelfil</string>
<string name="screen_file_browser_create_new_vault_button_text">Plasser her</string>
<string name="screen_file_browser_create_new_vault_extra_text">Hvelvnavn: %1$s</string>
<string name="screen_file_browser_create_new_vault_extra_text">Navn på hvelvet: %1$s</string>
<plurals name="screen_file_browser_subtitle_move">
<item quantity="one">Flytt %1$s til</item>
<item quantity="other">Flytt %2$d elementer til</item>
</plurals>
<string name="screen_file_browser_move_button_text">Flytt</string>
<string name="screen_file_browser_msg_empty_folder">Tom mappe</string>
<string name="screen_file_browser_file_info_label_date">endret for %1$s siden</string>
<string name="screen_file_browser_share_intent_chooser_title">Del med</string>
<string name="screen_file_browser_share_destination_title">Velg en lokasjon</string>
<string name="screen_file_browser_share_button_text">Velg</string>
<string name="screen_file_browser_nothing_to_share">Ingenting å dele</string>
<string name="screen_file_browser_actions_title">Legg til %1$s</string>
<string name="screen_file_browser_action_create_folder">Opprett mappe</string>
<string name="screen_file_browser_action_create_new_text_file">Lag en tekstfil</string>
<string name="screen_file_browser_action_create_new_text_file">Opprett tekstfil</string>
<string name="screen_file_browser_action_upload_files">Last opp filer</string>
<string name="screen_file_browser_upload_files_chooser_title">Filer</string>
<string name="screen_file_browser_msg_file_exported">Fil eksportert</string>
@ -95,19 +114,31 @@
<!-- ## screen: choose cloud service -->
<string name="screen_choose_cloud_service_title">Skylagringstjeneste</string>
<!-- ## screen: cloud connections -->
<string name="screen_cloud_connections_title">Velg en plassering</string>
<string name="screen_cloud_connections_no_connections">Klikk her for å legge til lokasjoner</string>
<string name="screen_cloud_error_webdav_not_supported">Serveren ser ikke ut til å være WebDAV-kompatibel</string>
<string name="screen_cloud_local_error_no_content_provider">Ingen filbehandler funnet som støtter å åpne mapper</string>
<!-- ## screen: webdav settings -->
<string name="screen_webdav_settings_url_port_label">URL</string>
<string name="screen_webdav_settings_username_label">Brukernavn</string>
<string name="screen_webdav_settings_password_label">Passord</string>
<string name="screen_webdav_settings_done_button_text">Koble til</string>
<string name="screen_webdav_settings_msg_url_must_not_be_empty">URL-adressen kan ikke være tomt.</string>
<string name="screen_webdav_settings_msg_url_is_invalid">URL-en er ugyldig.</string>
<string name="screen_webdav_settings_msg_username_must_not_be_empty">Brukernavnet kan ikke være tomt.</string>
<string name="screen_webdav_settings_msg_password_must_not_be_empty">Passordet kan ikke være tomt.</string>
<!-- ## screen: s3 settings -->
<string name="screen_s3_settings_display_name_label">Visningsnavn</string>
<string name="screen_s3_settings_access_key_label">Tilgangsnøkkel</string>
<string name="screen_s3_settings_secret_key_label">Hemmelig nøkkel</string>
<string name="screen_s3_settings_bucket_label">Eksisterende bøtte</string>
<string name="screen_s3_settings_endpoint_label">Endepunkt</string>
<string name="screen_s3_settings_region_label">Region</string>
<string name="screen_s3_settings_msg_display_name_not_empty">Visningsnavn kan ikke være tomt</string>
<string name="screen_s3_settings_msg_access_key_not_empty">Tilgangsnøkkel kan ikke være tom</string>
<string name="screen_s3_settings_msg_secret_key_not_empty">Hemmelig nøkkel kan ikke være tom</string>
<string name="screen_s3_settings_msg_bucket_not_empty">Bøtte kan ikke være tom</string>
<string name="screen_s3_settings_msg_endpoint_and_region_not_empty">Endepunkt eller region kan ikke være tomt</string>
<!-- ## screen: enter vault name -->
<string name="screen_enter_vault_name_msg_name_empty">Navnet på hvelvet kan ikke være tomt.</string>
<string name="screen_enter_vault_name_vault_label">Hvelvnavn</string>
@ -116,7 +147,9 @@
<string name="screen_set_password_title">Angi passord</string>
<string name="screen_set_password_msg_password_mismatch">Passordene stemmer ikke overens.</string>
<string name="screen_set_password_button_text">Ferdig</string>
<string name="screen_set_password_hint">VIKTIG: Hvis du glemmer passordet ditt, er det ikke mulig å gjenopprette dataene dine.</string>
<string name="screen_set_password_retype_password_label">Gjenta passordet</string>
<string name="screen_set_password_strength_indicator_0">For svakt for å lage et hvelv</string>
<string name="screen_set_password_strength_indicator_1">Svakt</string>
<string name="screen_set_password_strength_indicator_2">Ok</string>
<string name="screen_set_password_strength_indicator_3">Sterkt</string>
@ -127,30 +160,57 @@
<string name="screen_settings_biometric_auth">Biometrisk autentisering</string>
<string name="screen_settings_activate_biometric_auth">Aktiver biometrisk autentisering</string>
<string name="screen_settings_confirm_face_unlock">Bekreft ansiktsopplåsing (hvis tilgjengelig)</string>
<string name="screen_settings_block_app_when_obscured">Blokker app når tilslørt</string>
<string name="screen_settings_block_app_when_obscured_summary">Blokker å fange opp inndata samt visning av falsk brukergrensesnitt</string>
<string name="screen_settings_secure_screen">Blokker skjermbilder</string>
<string name="screen_settings_secure_screen_summary">Blokker skjermbilder i sist brukte-listen og i programmet</string>
<string name="screen_settings_section_search">Søk</string>
<string name="screen_settings_live_search">Live søk</string>
<string name="screen_settings_live_search_summary">Oppdater søkeresultater mens du angir spørringen</string>
<string name="screen_settings_glob_search">Søk med glob mønster</string>
<string name="screen_settings_glob_search_summary">Bruk glob mønster tilsvarende som alice.*.jpg</string>
<string name="screen_settings_section_auto_lock">Automatisk låsing</string>
<string name="screen_settings_auto_lock_timeout">Lås etter</string>
<string name="screen_settings_auto_lock_on_screen_lock">Når skjermen er deaktivert</string>
<string name="screen_settings_section_auto_photo_upload">Automatisk bildeopplasting</string>
<string name="screen_settings_section_auto_photo_upload_vault">Velg hvelv for opplasting</string>
<string name="screen_settings_section_auto_photo_upload_toggle">Aktiver</string>
<string name="screen_settings_section_auto_photo_upload_toggle_summary">Fang bilder i bakgrunnen og når det valgte hvelvet er ulåst, start opplasting</string>
<string name="screen_settings_section_auto_photo_upload_toggle_instant_upload">Last opp øyeblikkelig</string>
<string name="screen_settings_section_auto_photo_upload_toggle_instant_upload_summary">Last opp direkte hvis hvelvet er låst opp</string>
<string name="screen_settings_section_auto_photo_upload_only_wifi_toggle">Last opp kun ved hjelp av WIFI</string>
<string name="screen_settings_section_auto_photo_upload_including_videos">Last opp videoer</string>
<string name="screen_settings_auto_photo_upload_title">Lagre de automatisk opplastede filene til &#8230;</string>
<string name="screen_settings_website_label">Cryptomators nettside</string>
<string name="screen_settings_twitter_label">Følg oss på Twitter</string>
<string name="screen_settings_facebook_label">Lik oss på Facebook</string>
<string name="screen_settings_section_legal">Juridisk</string>
<string name="screen_settings_licenses_label">Lisenser</string>
<string name="screen_settings_license_terms_label">Lisensvilkår</string>
<string name="screen_settings_section_support">Brukerstøtte</string>
<string name="screen_settings_contact_label">Be om hjelp</string>
<string name="screen_settings_debug_mode_label">Feilsøkingsmodus</string>
<string name="screen_settings_error_report_label">Send loggfil</string>
<string name="screen_settings_error_report_failed">Sending feilet</string>
<string name="screen_settings_security_label">Sikkerhetstips</string>
<string name="screen_settings_section_version">Versjon</string>
<string name="screen_settings_advanced_settings">Avanserte innstillinger</string>
<string name="screen_settings_background_unlock_preparation_label">Akselerer opplåsing</string>
<string name="screen_settings_background_unlock_preparation_label_summary">Last ned hvelvkonfigurasjonen i bakgrunnen mens du blir bedt om å skrive inn passord eller biometrisk autentisering</string>
<string name="screen_settings_keep_unlocked_while_editing_files">Behold ulåst</string>
<string name="screen_settings_keep_unlocked_while_editing_files_summary">Beholdt hvelvet opplåst mens du redigerer filer</string>
<!-- ## screen: cloud settings -->
<string name="screen_cloud_settings_onedrive_connections">OneDrive tilkoblinger</string>
<string name="screen_cloud_settings_webdav_connections">WebDAV-tilkoblinger</string>
<string name="screen_cloud_settings_pcloud_connections">pCloud-tilkoblinger</string>
<string name="screen_cloud_settings_s3_connections">S3 tilkoblinger</string>
<string name="screen_cloud_settings_local_storage_locations">Lokal lagringsplass</string>
<string name="screen_cloud_settings_log_in_to">Logg inn i</string>
<string name="screen_cloud_settings_sign_out_from_cloud">Logg ut fra</string>
<!-- ## screen: licenses -->
<!-- ## screen: authenticate cloud -->
<string name="screen_authenticate_auth_authentication_failed">%1$s kunne ikke autentiseres.</string>
<string name="screen_update_pcloud_connections_title">Oppdater pCloud legitimasjoner</string>
<!-- ## screen: insecure android version info -->
<!-- # dialogs -->
<string name="dialog_button_cancel">Avbryt</string>
@ -160,19 +220,29 @@
<string name="dialog_change_password">Bytt passord</string>
<string name="dialog_change_password_msg_old_password_empty">Feltet for gjeldende passord kan ikke være tomt.</string>
<string name="dialog_change_password_msg_new_password_empty">Feltet for nytt passordet kan ikke være tomt.</string>
<string name="dialog_change_password_msg_password_mismatch">Det nye passordet stemmer ikke overens med det har skrevet på nytt.</string>
<!-- Vault not found -->
<string name="dialog_vault_not_found_title">Hvelvet %1$s ble ikke funnet</string>
<string name="dialog_vault_not_found_message">Hvelvet har fått nytt navn, blitt endret eller slettet. Fjern hvelvet fra listen og legg det til igjen for å fortsette. Fjern nå?</string>
<string name="dialog_vault_not_found_positive_button_text">Fjern</string>
<string name="dialog_existing_file_title">Filen finnes allerede</string>
<string name="dialog_existing_file_positive_button">Erstatt</string>
<string name="dialog_existing_file_message">En fil med navnet \'%1$s\' finnes allerede.</string>
<string name="dialog_replace_negative_button_at_least_two_but_not_all_files_exist">Hopp over eksisterende</string>
<string name="dialog_replace_positive_button_all_files_exist">Erstatt alle</string>
<string name="dialog_replace_positive_button_some_files_exist">Erstatt eksisterende</string>
<string name="dialog_replace_positive_button_single_file_exists">Erstatt</string>
<string name="dialog_replace_msg_single_file_exists">En fil med navnet \'%1$s\' finnes allerede. Vil du erstatte den?</string>
<string name="dialog_replace_msg_all_files_exists">Alle filene finnes allerede. Vil du erstatte dem?</string>
<string name="dialog_replace_msg_some_files_exists">%1$d filer finnes allerede. Vil du erstatte dem?</string>
<string name="dialog_replace_title_single_file_exists">Erstatt fil?</string>
<string name="dialog_replace_title_multiple_files_exist">Erstatt filene?</string>
<string name="dialog_unable_to_share_title">Kunne ikke dele filene</string>
<string name="dialog_unable_to_share_message">Du har ikke konfigurert noen hvelv. Vennligst lag et nytt hvelv med Cryptomator appen først.</string>
<string name="dialog_unable_to_share_positive_button">Ok</string>
<string name="dialog_unable_to_share_negative_button">Opprett hvelv</string>
<string name="dialog_filetype_not_supported_title">Kan ikke åpne %1$s</string>
<string name="dialog_filetype_not_supported_message">Last ned en app som kan åpne denne filen, eller vil du lagre filen på enheten?</string>
<string name="dialog_rename_vault_title">Endre navn på hvelvet</string>
<string name="dialog_rename_node_folder_title">Endre mappenavn</string>
<string name="dialog_rename_node_file_title">Endre filnavn</string>
@ -188,27 +258,145 @@
<string name="dialog_progress_please_wait">Vent litt&#8230;</string>
<string name="dialog_progress_creating_folder">Oppretter mappe&#8230;</string>
<string name="dialog_progress_creating_text_file">Oppretter tekstfil&#8230;</string>
<string name="action_progress_authentication">Autentisering&#8230;</string>
<string name="action_progress_renaming">Gir nytt navn&#8230;</string>
<string name="action_progress_deleting">Sletter&#8230;</string>
<string name="dialog_progress_unlocking_vault">Låser opp hvelv&#8230;</string>
<string name="dialog_progress_change_password">Endrer passord&#8230;</string>
<string name="dialog_progress_creating_vault">Oppretter hvelv&#8230;</string>
<string name="dialog_progress_upload_file">Laster opp&#8230;</string>
<string name="dialog_progress_download_file">Laster ned&#8230;</string>
<string name="dialog_progress_encryption">Krypterer&#8230;</string>
<string name="dialog_progress_decryption">Dekrypterer&#8230;</string>
<string name="action_progress_moving">Flytter&#8230;</string>
<string name="dialog_lock_vault">Lås</string>
<string name="dialog_accept_ssl_certificate_title">Ugyldig SSL sertifikat</string>
<string name="dialog_accept_ssl_certificate_hint">SSL-sertifikatet er ugyldig. Vil du stole på det likevel?</string>
<string name="dialog_accept_ssl_certificate_details">Detaljer</string>
<string name="dialog_accept_ssl_certificate_security_checkbox">Dette kan være en sikkerhetsrisiko. Jeg vet hva jeg gjør.</string>
<string name="dialog_ask_ignore_battery_optimizations_title">Deaktiver batterioptimaliseringer</string>
<string name="dialog_ask_ignore_battery_optimizations_hint">For å hente nye bilder og videoer uten å kjøre i bakgrunnen, må vi velge bort batterioptimaliseringer. Men ikke bekymre deg, %1$s konsumerer ikke mye energi.\n\nFor å bruke den, endre \'Ikke optimalisert\' til \'Alle apper\', velg %1$s og velg \'Ikke optimaliser\' etter å ha klikket \'%2$s\' i denne dialogboksen.</string>
<string name="dialog_ask_ignore_battery_optimizations_checkbox">Ikke spør igjen?</string>
<string name="dialog_http_security_hint">Bruk av HTTP er usikker. Vi anbefaler å bruke HTTPS i stedet. Hvis du er klar over risikoen, kan du fortsette med HTTP.</string>
<string name="dialog_http_security_checkbox">Endre til HTTPS</string>
<string name="dialog_http_security_title">Bruk HTTPS?</string>
<string name="dialog_no_screen_lock_hint">Ingen skjermlås er satt. For å lagre dine innloggingsopplysninger på en sikker måte, sett med OK et mønster eller passord.</string>
<string name="dialog_no_screen_lock_title">Sett skjermlås?</string>
<string name="dialog_no_screen_lock_checkbox">Sett skjermlås</string>
<string name="dialog_no_biometric_auth_set_up_title">Ingen grunnleggende autentisering er satt opp i systemet</string>
<string name="dialog_no_biometric_auth_set_up_message">Registrer minst én finger/ansikt for å bruke denne tjenesten.</string>
<string name="dialog_debug_mode_disclaimer_hint">I denne modusen kan sensitive data skrives til en loggfil på enheten (f.eks. filnavn og stier). Passord, cookies, etc. er eksplisitt ekskludert.\n\nHusk å deaktivere feilsøkingsmodus så snart som mulig.</string>
<string name="dialog_debug_mode_disclaimer_title">Merk følgende</string>
<string name="dialog_debug_mode_positive_button">Aktiver</string>
<string name="dialog_disable_app_obscured_disclaimer_hint">Denne innstillingen er en sikkerhetsfunksjon og forhindrer andre apper fra å lure brukere til å gjøre ting de ikke ønsker å gjøre.\n\nved å deaktivere, bekrefter du at du er <a href="https://docs.cryptomator.org/en/1.5/android/settings/#block-app-when-obscured">oppmerksom på risikoen</a>.</string>
<string name="dialog_disable_app_obscured_disclaimer_title">Merk følgende</string>
<string name="dialog_disable_app_obscured_positive_button">Deaktiver</string>
<string name="dialog_app_is_obscured_info_title">Appen er tilslørt</string>
<string name="dialog_app_is_obscured_info_hint">En annen app viser noe på toppen av Cryptomator (f.eks. en blått lysfilter eller nattmodusapp). Av sikkerhetsgrunner er Cryptomator deaktivert.\n\n<a href="https://docs.cryptomator.org/en/1.5/android/settings/#block-app-when-obscured">Hvordan aktivere Cryptomator</a></string>
<string name="dialog_app_is_obscured_info_neutral_button">Lukk</string>
<string name="dialog_vaults_removed_during_migration_title">Vennligst legg til hvelv på nytt for %1s sky</string>
<string name="dialog_vaults_removed_during_migration_hint">Mens vi migrerer til denne appversjonen må vi fjerne følgende hvelv fra appen:\n%2s \n\nDisse hvelvene er ikke fjernet fra skyen, men bare fra denne appen. Beklager ulempen. Legg disse hvelvene til på nytt for å fortsette å jobbe med dem.</string>
<string name="dialog_vault_is_root_folder_of_cloud_title">Hvelvet er rotmappen på skytilkoblingen</string>
<string name="dialog_vault_is_root_folder_of_cloud_hint">Opprett en ny sky-tilkobling der du velger minst den overordnede mappen av dette hvelvet sin mappe som rotkatalog for å legge til dette hvelvet.</string>
<string name="dialog_disable_secure_screen_disclaimer_hint">Denne innstillingen er en sikkerhetsfunksjon og forhindrer andre apper fra å lure brukere til å gjøre ting de ikke ønsker å gjøre.\n\nVed å deaktivere bekrefter du at du er <a href="https://docs.cryptomator.org/en/1.5/android/settings/#screen-security">oppmerksom på risikoen</a>.</string>
<string name="dialog_delete_cloud_connection_with_vaults_message">Er du sikker på at du vil fjerne denne skylagringstilkoblingen?</string>
<string name="dialog_delete_cloud_connection_with_vaults_hint">Denne handlingen vil fjerne skylagringsforbindelsen og alle hvelv i denne skyen.</string>
<string name="dialog_confirm_delete_multiple_title">Slette %1$d elementer?</string>
<string name="dialog_confirm_delete_multiple_message">Er du sikker på at du vil slette disse elementene?</string>
<string name="dialog_confirm_delete_file_message">Er du sikker på at du vil slette denne filen?</string>
<string name="dialog_confirm_delete_folder_message">Dette vil slette hele mappens innhold. Er du sikker på at du vil slette mappen?</string>
<string name="dialog_biometric_auth_key_invalidated_title">Biometrisk autentisering deaktivert</string>
<string name="dialog_biometric_auth_key_invalidated_message">Fordi nøkkelen er ugyldig, er biometrisk autentisering deaktivert. For å re-aktivere, åpne innstillingene for Cryptomator.</string>
<string name="dialog_enter_license_title">Oppgi en gyldig lisens</string>
<string name="dialog_enter_license_content">Vi oppdaget at du installerte Cryptomator uten å bruke Google Play Store. Oppgi en gyldig lisens, som kan kjøpes på <a href="https://cryptomator.org/android/">https://cryptomator.org/android/</a></string>
<string name="dialog_enter_license_not_valid_content">Den oppgitte lisensen er ikke gyldig. Kontroller at du har skrevet den inn riktig.</string>
<string name="dialog_enter_license_not_valid_content_desktop_supporter_certificate">Denne nøkkelen er et skrivebord supporter sertifikat. Vennligst angi en gyldig lisens.</string>
<string name="dialog_enter_license_no_content">Ingen lisens oppgitt. Vennligst skriv inn en gyldig lisens.</string>
<string name="dialog_enter_license_decline_button">Avslutt</string>
<string name="dialog_license_confirmation_title">Lisensbekreftelse</string>
<string name="dialog_license_confirmation_message">Takk %1$s for at du oppgir en gyldig lisens.</string>
<string name="dialog_update_available_title">Oppdatering tilgjengelig</string>
<string name="dialog_update_available_message">Oppdater Cryptomator til den nyeste versjonen. Ved å trykke OK laster vi ned appen i bakgrunnen og ber deg om å installere den.</string>
<string name="dialog_update_available_update">Oppdater nå</string>
<string name="dialog_update_available_download_site">Gå til nedlastingsside</string>
<string name="dialog_update_available_cancel">Senere</string>
<string name="dialog_download_update_title">Laster ned</string>
<string name="dialog_download_update_message">Laster ned siste versjon av Cryptomator</string>
<string name="dialog_sym_link_title">Mappen er en symbolsk kobling</string>
<string name="dialog_sym_link_message">Du kan ikke navigere i denne symbolske lenken</string>
<string name="dialog_sym_link_back_button">Tilbake</string>
<string name="dialog_no_dir_file_title">Kunne ikke laste innholdet i katalogen</string>
<string name="dialog_no_dir_file_message">Skymappen \'%1$s\' har ikke en gyldig mappefil. Det kan være at mappen ble opprettet på en annen enhet og er ennå ikke fullt synkronisert til skyen. Sjekk i skyen om følgende fil eksisterer og ikke er tom:\n%2$s</string>
<string name="dialog_no_more_images_to_display">Ingen flere bilder å vise&#8230;</string>
<string name="dialog_pcloud_credentials_updated_title">Legitimasjonen til \'%1$s\' er oppdatert</string>
<string name="dialog_pcloud_credentials_updated">Hvis du planlegger å legge til en ny pCloud konto, klikk på denne nettadressen <a href="https://www.pcloud.com">www.pcloud. om</a>, logg ut fra gjeldende konto og klikk igjen på \'+\' i denne appen for å opprette en ny skyforbindelse.</string>
<string name="permission_snackbar_auth_local_vault">Cryptomator trenger lagringstilgang for å bruke lokale hvelv</string>
<string name="permission_snackbar_auth_auto_upload">Cryptomator trenger lagringstilgang for å bruke automatisk bildeopplasting</string>
<!-- # error reports -->
<!-- # misc -->
<!-- ## file size helper -->
<string name="file_size_zero">Null kB</string>
<string name="file_size_unit_bytes">byte</string>
<string name="file_size_unit_kilo_bytes">kB</string>
<string name="file_size_unit_mega_bytes">MB</string>
<string name="file_size_unit_giga_bytes">GB</string>
<string name="file_size_unit_tera_bytes">TB</string>
<!-- ## date helper -->
<string name="time_unit_seconds_sg">sekund</string>
<string name="time_unit_seconds_pl">sekunder</string>
<string name="time_unit_minutes_sg">minutt</string>
<string name="time_unit_minutes_pl">minutter</string>
<string name="time_unit_hours_sg">time</string>
<string name="time_unit_hours_pl">timer</string>
<string name="time_unit_days_sg">dag</string>
<string name="time_unit_days_pl">dager</string>
<string name="time_unit_weeks_sg">uke</string>
<string name="time_unit_weeks_pl">uker</string>
<string name="time_unit_months_sg">måned</string>
<string name="time_unit_months_pl">måneder</string>
<string name="time_unit_years_sg">år</string>
<string name="time_unit_years_pl">år</string>
<!-- ## biometric authentication -->
<string name="dialog_biometric_auth_title">Biometrisk innlogging</string>
<string name="dialog_biometric_auth_message">Logg inn med biometriske legitimasjon</string>
<string name="dialog_biometric_auth_use_password">Bruk hvelv passord</string>
<string name="dialog_unable_to_auto_upload_files_title">Kan ikke laste opp filer automatisk</string>
<!-- notification -->
<string name="notification_unlocked">Hvelv opplåst: %1$d</string>
<string name="notification_timeout">Autolås om %1$s</string>
<string name="notification_lock_all">Lås alle</string>
<string name="notification_cancel_auto_upload">Avbryt opplasting</string>
<string name="notification_auto_upload_title">Automatisk bildeopplasting kjører</string>
<string name="notification_auto_upload_message">Laster opp %1d/%2d</string>
<string name="notification_auto_upload_finished_title">Automatisk bildeopplasting fullført</string>
<string name="notification_auto_upload_finished_message">%1$d bilder lastet opp til hvelvet</string>
<string name="notification_auto_upload_failed_title">Automatisk bildeopplasting mislyktes</string>
<string name="notification_auto_upload_failed_general_error">Generell feil oppstod under opplasting.</string>
<string name="notification_auto_upload_failed_due_to_folder_not_exists">Valgte mappe for opplasting er ikke tilgjengelig lenger. Gå til innstillinger og velg en ny</string>
<string name="notification_auto_upload_failed_due_to_vault_locked">Hvelvet ble låst under opplasting, åpne hvelvet på nytt for å fortsette</string>
<string name="notification_auto_upload_failed_due_to_vault_not_found">Det angitte hvelvet for automatisk opplasting eksisterer ikke lenger.</string>
<string name="notification_open_writable_file_title">Åpne skrivbar fil</string>
<string name="notification_open_writable_file_message">Hvelvet forblir opplåst til redigeringen er ferdig</string>
<string name="notification_update_check_finished_latest">Siste versjon er installert</string>
<string name="notification_authenticating">Autentiserer&#8230;</string>
<string name="screen_settings_lru_cache">Hurtigminne</string>
<string name="screen_settings_lru_cache_toggle_summary">Hurtigminnet åpnet nylig filer som er kryptert lokalt på enheten, for senere gjenbruk når de åpnes igjen</string>
<string name="screen_settings_lru_cache_size">Total hurtigminnestørrelse</string>
<string name="screen_settings_clear_lru_cache_size">Tøm hurtigminnet</string>
<string name="screen_settings_lru_cache_changed__restart_toast">Endringer vil bli tatt i bruk ved neste omstart av appen</string>
<string name="screen_settings_license">Registrert for</string>
<string name="screen_settings_license_mail">%1$s</string>
<string name="dialog_settings_update_check_interval_title">Intervall for å se etter oppdateringer</string>
<string name="screen_settings_check_updates">Se etter oppdateringer</string>
<string name="screen_settings_last_check_updates">Sist kjørt %1$s</string>
<string name="dialog_cache_size_title">Hurtigminnestørrelse per skytjeneste</string>
<!-- lock timeout names -->
<string name="lock_timeout_instant">Med en gang</string>
<string name="lock_timeout_1m">1 minutt</string>
<string name="lock_timeout_2m">2 minutter</string>
<string name="lock_timeout_5m">5 minutter</string>
<string name="lock_timeout_10m">10 minutter</string>
<string name="lock_timeout_never">Aldri</string>
<!-- cache size names -->
<string name="cache_size_50m">50 MB</string>
<string name="cache_size_100m">100 MB</string>
@ -217,7 +405,12 @@
<string name="cache_size_1000m">1 GB</string>
<string name="cache_size_5000m">5 GB</string>
<!-- screen scheme mode names -->
<string name="screen_settings_style_mode">Stil</string>
<string name="follow_system">Automatisk (følg systemet)</string>
<string name="light">Lys</string>
<string name="dark">Mørk</string>
<!-- update interval names -->
<string name="update_interval_1d">Daglig</string>
<string name="update_interval_1w">Ukentlig</string>
<string name="update_interval_1m">Månedlig</string>
</resources>

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- # app -->
<string name="share_with_label">Encriptar</string>
<string name="share_with_label">Criptografar</string>
<!-- # error messages -->
<string name="error_generic">Ocorreu um erro</string>
<string name="error_generic">Um erro ocorreu</string>
<string name="error_authentication_failed">Falha de autenticação</string>
<string name="error_authentication_failed_re_authenticate">Falha na autenticação, por favor faça o login usando %1$s</string>
<string name="error_no_network_connection">Sem conexão com a internet</string>
@ -48,11 +48,11 @@
<string name="snack_bar_action_title_search_previous">Anterior</string>
<string name="snack_bar_action_title_search_next">Próximo</string>
<string name="snack_bar_action_title_sort">Ordenar</string>
<string name="snack_bar_action_title_sort_az">A - Z</string>
<string name="snack_bar_action_title_sort_za">Z - A</string>
<string name="snack_bar_action_title_sort_az">A Z</string>
<string name="snack_bar_action_title_sort_za">Z A</string>
<string name="snack_bar_action_title_sort_newest">Mais recentes primeiro</string>
<string name="snack_bar_action_title_sort_oldest">Mais antigos primeiro</string>
<string name="snack_bar_action_title_sort_biggest">Maior primeiro</string>
<string name="snack_bar_action_title_sort_oldest">Antigos primeiro</string>
<string name="snack_bar_action_title_sort_biggest">Maiores primeiro</string>
<string name="snack_bar_action_title_sort_smallest">Menores primeiro</string>
<!-- # screens -->
<!-- # screen: vault list -->

View File

@ -0,0 +1,411 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- # app -->
<string name="share_with_label">Shiriki_na_maandiko</string>
<!-- # error messages -->
<string name="error_generic">Hitilafu imetokea</string>
<string name="error_authentication_failed">Uthibitisho umeshindikana</string>
<string name="error_authentication_failed_re_authenticate">Uthibitisho umeshindikana, tafadhali ingia kwa kutumia %1$s</string>
<string name="error_no_network_connection">Hakuna muunganisho wa mtandao</string>
<string name="error_invalid_passphrase">Neno la siri si sahihi</string>
<string name="error_file_or_folder_exists">Faili au folda tayari imekuwepo.</string>
<string name="error_vault_version_not_supported">Toleo la kuba %1$s haikubaliki. Kuba hii imeundwa na toleo la zamani au jipya zaidi Cryptomator.</string>
<string name="error_vault_config_file_missing_due_to_format_999">%1$s faili halipo kwenye folda yako ya kuba. Hakikisha kuwa faili hili lipo kwenye folda yako kwenye wingu.</string>
<string name="error_vault_already_exists">Kuba tayari ipo.</string>
<string name="error_no_such_file">Faili haipo.</string>
<string name="error_vault_has_been_locked">Kuba imefungwa.</string>
<string name="error_cloud_already_exists">Wingu tayari lipo.</string>
<string name="error_activity_not_found">Tafadhali pakua programu amabyo inaweza kufungua faili hii.</string>
<string name="error_server_not_found">Server haijapatikana.</string>
<string name="error_device_policy_manager_not_found">Tafadhali fungua mpangilio wa kifaa chako na useti loku ya skrini kwa mkono</string>
<string name="error_export_illegal_file_name">Uhamishaji umeshindikana. Jaribu kuondoa vibambo maalum kutoka kwa majina ya faili na kuhamisha tena.</string>
<string name="error_name_contains_invalid_characters">Haiwezi kuwa na vibambo maalum.</string>
<string name="error_names_contains_invalid_characters">Jina na la faili haliwezi kuwa na vibambo maalum.</string>
<string name="error_vault_name_contains_invalid_characters">Jina la kuba haliwezi kuwa na vibambo maalum.</string>
<string name="error_general_update">Kagua sasishi imeshindikana. Kosa la jumla limetokea.</string>
<string name="error_hash_mismatch_update">Kagua sasishi imeshindikana. Hash iliyohesabiwa haioani na faili iliyopakiwa</string>
<string name="error_update_no_internet">Kagua sasishi imeshindikana. Hakuna muunganisho wa tovuti.</string>
<string name="error_failed_to_decrypt_webdav_password">Imeshindwa kusimbua neno la siri ya WebDAV, tafadhali ongeza tena katika mpangilio</string>
<string name="error_play_services_not_available">Huduma ya Google Play haijasanikishwa</string>
<string name="error_biometric_auth_aborted">Uhalalishaji wan biometriska umefutwa</string>
<string name="error_vault_version_mismatch">Toleo lililobainishwa katika %1$s ni tofati na %2$s</string>
<string name="error_vault_key_invalid">%1$s hailingani na hii %2$s</string>
<string name="error_vault_config_loading">Kosa la jumla wakati wa kupakia conf ya kuba</string>
<string name="error_file_not_found_after_opening_using_3party">Faili ya ndani haipo tena baada ya kurudi kwenye Cryptomator. Mabadiliko yanayowezekana hayawezi kuenezwa tena kwenye wingu.</string>
<string name="error_no_such_bucket">Hakuna ndoo ya utafutaji</string>
<string name="error_masterkey_location_not_supported">Mahali maalumu pa Masterkey bado haijategemezwa bado</string>
<!-- # clouds -->
<!-- ## cloud names -->
<string name="cloud_names_local_storage">Hifadhi ya ndani</string>
<!-- # permission -->
<!-- ## permission messages -->
<string name="permission_message_export_file">Cryptomator inahitaji ufikiaji wa kuhifadhi ili kuhamisha mafaili</string>
<string name="permission_message_upload_file">Cryptomator inahitaji ufikiaji wa kuhifadhi ili kupakia mafaili</string>
<string name="permission_message_share_file">Cryptomator inahitaji ufikiaji wa kuhifadhi ili kusiriki mafaili</string>
<string name="permission_revoked_re_request_permission">Cryptomator imepoteza ruhusa ya kufikia mahali hapa. Tafadhali teua kabrasha hili tena ili kurejesha kibali.</string>
<string name="snack_bar_action_title_settings">Kipimo</string>
<string name="snack_bar_action_title_search">Tafuta</string>
<string name="snack_bar_action_title_search_previous">Iliyotangulia</string>
<string name="snack_bar_action_title_search_next">Ijayo</string>
<string name="snack_bar_action_title_sort">Panga</string>
<string name="snack_bar_action_title_sort_az">A-Z</string>
<string name="snack_bar_action_title_sort_za">Z-A</string>
<string name="snack_bar_action_title_sort_newest">Mpya zaidi ya kwanza</string>
<string name="snack_bar_action_title_sort_oldest">Zamani zaidi ya kwanza</string>
<string name="snack_bar_action_title_sort_biggest">Kubwa ya kwanza</string>
<string name="snack_bar_action_title_sort_smallest">Ndogo ya kwanza</string>
<!-- # screens -->
<!-- # screen: vault list -->
<string name="screen_vault_list_actions_title">Ongeza kwenye Cryptomator</string>
<string name="screen_vault_list_action_create_new_vault">Unda kuba mpya</string>
<string name="screen_vault_list_action_add_existing_vault">Ongeza kuba iliyopo</string>
<string name="screen_vault_list_vault_action_delete">Ondoa</string>
<string name="screen_vault_list_vault_creation_hint">Bofya hapa ili kuunda kuba mpya</string>
<string name="screen_vault_list_change_password_successful">Neno la siri limebadilishwa kwa ufanisi</string>
<!-- # screen: file browser -->
<string name="screen_file_browser_default_title">Kuba</string>
<string name="screen_file_browser_add_existing_vault_extra_text">Teua faili ya masterkey</string>
<string name="screen_file_browser_create_new_vault_button_text">Weka hapa</string>
<string name="screen_file_browser_create_new_vault_extra_text">Jina la kuba: %1$s</string>
<string name="screen_file_browser_move_button_text">Hamisha</string>
<string name="screen_file_browser_msg_empty_folder">Kabrasha tupu</string>
<string name="screen_file_browser_file_info_label_date">imerekebishwa %1$s iliyopita</string>
<string name="screen_file_browser_share_intent_chooser_title">Shiriki na</string>
<string name="screen_file_browser_share_destination_title">Chagua fikio</string>
<string name="screen_file_browser_share_button_text">Chagua</string>
<string name="screen_file_browser_nothing_to_share">Hakuna kitu cha kushiriki</string>
<string name="screen_file_browser_actions_title">Ongeza kwenye %1$s</string>
<string name="screen_file_browser_action_create_folder">Unda kabrasha</string>
<string name="screen_file_browser_action_create_new_text_file">Unda faili matini</string>
<string name="screen_file_browser_action_upload_files">Pakia mafaili</string>
<string name="screen_file_browser_upload_files_chooser_title">Mafaili</string>
<string name="screen_file_browser_msg_file_exported">Faili imehamishwa</string>
<string name="screen_file_browser_msg_files_exported">Faili zilizohamishwa</string>
<string name="screen_file_browser_nothing_to_export">Hakuna kitu cha kuuza nje</string>
<string name="screen_file_browser_msg_creating_download_dir_failed">Kuunda mpangilio orodha wa upakuaji umeshindikana</string>
<string name="screen_file_browser_node_action_share">Kushiriki</string>
<string name="screen_file_browser_node_action_rename">Ita jina jipya</string>
<string name="screen_file_browser_node_action_edit_text">Hariri</string>
<string name="screen_file_browser_node_action_export">Hamisha</string>
<string name="screen_file_browser_node_action_delete">Futa</string>
<string name="screen_file_browser_node_action_open_with_text">Funga na&#8230;</string>
<string name="screen_file_browser_selection_mode_title_zero_elements">Teua vipengee</string>
<string name="screen_file_browser_selection_mode_title_one_or_more_elements">%1$d teuliwa</string>
<string name="screen_file_browser_select_items">Teua</string>
<string name="screen_file_browser_select_all_items">Teua zote</string>
<string name="screen_file_browser_refresh_items">Onesha upya</string>
<string name="screen_file_browser_no_connection_message">Hakuna muunganisho</string>
<string name="screen_file_browser_no_connection_button_text">Jaribu tena</string>
<!-- ## screen: text editor -->
<string name="screen_text_editor_save_success">Imehifadhiwa kwa ufanisi</string>
<!-- ## screen: share files -->
<string name="screen_share_files_title">Hifadhi %1$s kwa &#8230;</string>
<string name="screen_share_files_content_text">ujumbe</string>
<string name="screen_share_files_content_file">faili</string>
<string name="screen_share_files_content_files">mafaili</string>
<string name="screen_share_files_msg_filenames_must_be_unique">Majina ya faili yanapaswa kuwa ya kipekee, tafadhali badilisha jina la nakala.</string>
<string name="screen_share_files_section_location">Hifadhi mahali</string>
<string name="screen_share_files_save_button_text">Hifadhi</string>
<string name="screen_share_files_msg_success">Usimbaji fiche umekamilika</string>
<!-- ## screen: choose cloud service -->
<string name="screen_choose_cloud_service_title">Huduma ya wingu</string>
<!-- ## screen: cloud connections -->
<string name="screen_cloud_connections_title">Chagua mahali</string>
<string name="screen_cloud_connections_no_connections">Bofya hapa ili kuongeza mahali</string>
<string name="screen_cloud_error_webdav_not_supported">Seva haionekani kuwa sambamba na WebDAV</string>
<string name="screen_cloud_local_error_no_content_provider">Hakuna faili maneja lililopatikana inasaidia kufungua saraka</string>
<!-- ## screen: webdav settings -->
<string name="screen_webdav_settings_url_port_label">URL</string>
<string name="screen_webdav_settings_username_label">Jina la mtumiaji</string>
<string name="screen_webdav_settings_password_label">Neno la siri</string>
<string name="screen_webdav_settings_done_button_text">Kuunganisha</string>
<string name="screen_webdav_settings_msg_url_must_not_be_empty">URL haiwezi kuwa tupu.</string>
<string name="screen_webdav_settings_msg_url_is_invalid">URL ni batili.</string>
<string name="screen_webdav_settings_msg_username_must_not_be_empty">Jina la mtumiaji haliwezi kuwa tupu.</string>
<string name="screen_webdav_settings_msg_password_must_not_be_empty">Neno la siri haliwezi kuwa tupu.</string>
<!-- ## screen: s3 settings -->
<string name="screen_s3_settings_display_name_label">Onyesha Jina</string>
<string name="screen_s3_settings_access_key_label">Ufunguo wa Ufikivu</string>
<string name="screen_s3_settings_secret_key_label">Ufunguo wa Siri</string>
<string name="screen_s3_settings_bucket_label">Ndoo Iliyopo</string>
<string name="screen_s3_settings_endpoint_label">Mwisho pointi</string>
<string name="screen_s3_settings_region_label">Mkoa</string>
<string name="screen_s3_settings_msg_display_name_not_empty">Onyesha Jina haliwezi kuwa tupu</string>
<string name="screen_s3_settings_msg_access_key_not_empty">Ufunguo wa Ufikivu hauwezi kuwa tupu</string>
<string name="screen_s3_settings_msg_secret_key_not_empty">Ufunguo wa Siri hauwezi kuwa tupu</string>
<string name="screen_s3_settings_msg_bucket_not_empty">Ndoo haiwezi kuwa tupu</string>
<string name="screen_s3_settings_msg_endpoint_and_region_not_empty">Mwisho au Mkoa haliwezi kuwa tupu</string>
<!-- ## screen: enter vault name -->
<string name="screen_enter_vault_name_msg_name_empty">Jina la kuba haliwezi kuwa tupu.</string>
<string name="screen_enter_vault_name_vault_label">Jina la kuba</string>
<string name="screen_enter_vault_name_button_text">Unda</string>
<!-- ## screen: set password -->
<string name="screen_set_password_title">Seti neno la siri</string>
<string name="screen_set_password_msg_password_mismatch">Nywila haioani na nywila iliyochapwa upya.</string>
<string name="screen_set_password_button_text">Tayari</string>
<string name="screen_set_password_hint">MUHIMU: Ikiwa unasahau neno la siri lako, hakuna njia ya kurejesha data yako.</string>
<string name="screen_set_password_retype_password_label">Chapa upya neno la siri</string>
<string name="screen_set_password_strength_indicator_0">Dhaifu sana kuunda kuba</string>
<string name="screen_set_password_strength_indicator_1">Dhaifu</string>
<string name="screen_set_password_strength_indicator_2">Haki</string>
<string name="screen_set_password_strength_indicator_3">Imara</string>
<string name="screen_set_password_strength_indicator_4">Imara sana</string>
<!-- ## screen: settings -->
<string name="screen_settings_section_general">Jumla</string>
<string name="screen_settings_cloud_settings_label">Huduma za wingu</string>
<string name="screen_settings_biometric_auth">Uhalalishaji wa Biometriska</string>
<string name="screen_settings_activate_biometric_auth">Amilisha uhalalishaji wa biometriska</string>
<string name="screen_settings_confirm_face_unlock">Thibitisha kufungua uso (ikiwa inapatikana)</string>
<string name="screen_settings_block_app_when_obscured">Zuia programu wakati imefichwa</string>
<string name="screen_settings_block_app_when_obscured_summary">Zuia kuzuia ingizo na kuonyesha kiolesura cha uongo cha mtumiaji</string>
<string name="screen_settings_secure_screen">Zuia viwambo</string>
<string name="screen_settings_secure_screen_summary">Zuia viwambo katika orodha ya hivi karibuni na ndani ya programu</string>
<string name="screen_settings_section_search">Tafuta</string>
<string name="screen_settings_live_search">Utafutaji wa moja kwa moja</string>
<string name="screen_settings_live_search_summary">Sasisha matokeo ya utafutaji wakati wa kuingiza ulizo</string>
<string name="screen_settings_glob_search">Tafuta kwa kutumia muundo wa glob</string>
<string name="screen_settings_glob_search_summary">Tumia muundo wa glob unaolingana kama alice.*.jpg</string>
<string name="screen_settings_section_auto_lock">Ufungashaji Otomatiki</string>
<string name="screen_settings_auto_lock_timeout">Funga baada ya</string>
<string name="screen_settings_auto_lock_on_screen_lock">Wakati skrini imelemazwa</string>
<string name="screen_settings_section_auto_photo_upload">Upakiaji wa picha Otomatiki</string>
<string name="screen_settings_section_auto_photo_upload_vault">Chagua kuba kwa ajili ya kupakia</string>
<string name="screen_settings_section_auto_photo_upload_toggle">Kuamilisha</string>
<string name="screen_settings_section_auto_photo_upload_toggle_summary">Kukamata picha kwa nyuma na mara tu kuba iliyochaguliwa inapofunguliwa, anza kupakia</string>
<string name="screen_settings_section_auto_photo_upload_toggle_instant_upload">Pakia papo hapo</string>
<string name="screen_settings_section_auto_photo_upload_toggle_instant_upload_summary">Pakia moja kwa moja ikiwa kuba imefunguliwa</string>
<string name="screen_settings_section_auto_photo_upload_only_wifi_toggle">Pakia tu kwa kutumia WIFI</string>
<string name="screen_settings_section_auto_photo_upload_including_videos">Pakia video</string>
<string name="screen_settings_auto_photo_upload_title">Hifadhi faili za kupakia kiotomatiki kwenye &#8230;</string>
<string name="screen_settings_website_label">Tovuti ya Cryptomator</string>
<string name="screen_settings_twitter_label">Tufuate kwenye Twitter</string>
<string name="screen_settings_section_legal">Kisheria</string>
<string name="screen_settings_licenses_label">Leseni</string>
<string name="screen_settings_license_terms_label">Masharti ya leseni</string>
<string name="screen_settings_section_support">Msaada</string>
<string name="screen_settings_contact_label">Omba msaada</string>
<string name="screen_settings_debug_mode_label">Rekebisha hali</string>
<string name="screen_settings_error_report_label">Tuma faili logi</string>
<string name="screen_settings_error_report_failed">Kutuma kumeshindikana</string>
<string name="screen_settings_security_label">Vidokezo vya usalama</string>
<string name="screen_settings_section_version">Toleo</string>
<string name="screen_settings_advanced_settings">Mipangilio Pevu</string>
<string name="screen_settings_background_unlock_preparation_label">Kuharakisha kufungua</string>
<string name="screen_settings_background_unlock_preparation_label_summary">Pakua usanidi wa kuba mandharinyuma unapoombwa kuingiza nenosiri au auth ya biometriska</string>
<string name="screen_settings_keep_unlocked_while_editing_files">Endelea kufungua</string>
<string name="screen_settings_keep_unlocked_while_editing_files_summary">Weka kuba wazi wakati wa kuhariri faili</string>
<!-- ## screen: cloud settings -->
<string name="screen_cloud_settings_onedrive_connections">Miunganisho ya OneDrive</string>
<string name="screen_cloud_settings_webdav_connections">Miunganisho ya WebDAV</string>
<string name="screen_cloud_settings_pcloud_connections">miunganisho ya pCloud</string>
<string name="screen_cloud_settings_s3_connections">Miunganisho ya S3</string>
<string name="screen_cloud_settings_local_storage_locations">Maeneo ya hifadhi ya ndani</string>
<string name="screen_cloud_settings_log_in_to">Ingia kwenye</string>
<string name="screen_cloud_settings_sign_out_from_cloud">Ondoka kutoka</string>
<!-- ## screen: licenses -->
<!-- ## screen: authenticate cloud -->
<string name="screen_authenticate_auth_authentication_failed">%1$s haikuweza kuthibitishwa.</string>
<string name="screen_update_pcloud_connections_title">Sasisha hati za utambulisho za pCloud</string>
<!-- ## screen: insecure android version info -->
<!-- # dialogs -->
<string name="dialog_button_cancel">Katisha</string>
<string name="dialog_enter_password_positive_button">Fungua</string>
<string name="dialog_change_password_old_password_label">Neno la siri la zamani</string>
<string name="dialog_change_password_new_password_label">Neno la siri jipya</string>
<string name="dialog_change_password">Badilisha neno la siri</string>
<string name="dialog_change_password_msg_old_password_empty">Neno la siri la zamani haliwezi kuwa tupu.</string>
<string name="dialog_change_password_msg_new_password_empty">Neno la siri jipya haliwezi kuwa tupu.</string>
<string name="dialog_change_password_msg_password_mismatch">Nneno la siri jipya haioani na neno la siri lililochapwa upya.</string>
<!-- Vault not found -->
<string name="dialog_vault_not_found_title">Kuba%1$s haijapatikana</string>
<string name="dialog_vault_not_found_message">Kuba imepewa jina jipya, kuhamishwa au kufutwa. Ondoa kuba hii kutoka kwenye orodha na uiongeze tena ili kuendelea. Ondoa sasa?</string>
<string name="dialog_vault_not_found_positive_button_text">Ondoa</string>
<string name="dialog_existing_file_title">Faili tayari ipo</string>
<string name="dialog_existing_file_positive_button">Badilisha</string>
<string name="dialog_existing_file_message">Faili inayoitwa \'%1$s\' tayari ipo.</string>
<string name="dialog_replace_negative_button_at_least_two_but_not_all_files_exist">Ruka iliyopo</string>
<string name="dialog_replace_positive_button_all_files_exist">Badilisha yote</string>
<string name="dialog_replace_positive_button_some_files_exist">Badilisha iliyopo</string>
<string name="dialog_replace_positive_button_single_file_exists">Badilisha</string>
<string name="dialog_replace_msg_single_file_exists">Faili inayoitwa \'%1$s\' tayari ipo. Unataka kuibadilisha?</string>
<string name="dialog_replace_msg_all_files_exists">Faili zote tayari zipo. Unataka kubadilisha yao?</string>
<string name="dialog_replace_msg_some_files_exists">%1$d faili tayari zipo. Unataka kubadilisha yao?</string>
<string name="dialog_replace_title_single_file_exists">Badilisha faili?</string>
<string name="dialog_replace_title_multiple_files_exist">Badilisha faili?</string>
<string name="dialog_unable_to_share_title">Haiwezi kugawiza mafaili</string>
<string name="dialog_unable_to_share_message">Hujasanidi kuba yoyote. Tafadhali unda kuba mpya na programu ya Cryptomator kwanza.</string>
<string name="dialog_unable_to_share_positive_button">Sawa</string>
<string name="dialog_unable_to_share_negative_button">Unda kuba</string>
<string name="dialog_filetype_not_supported_title">Haiwezi fungua%1$s</string>
<string name="dialog_filetype_not_supported_message">Tafadhali pakua programu ambayo inaweza kufungua faili hii au unapenda kuhifadhi kwenye kifaa chako?</string>
<string name="dialog_rename_vault_title">Ita jina jipya kuba</string>
<string name="dialog_rename_node_folder_title">Ita jina jipya kabrasha</string>
<string name="dialog_rename_node_file_title">Ita jina jipya la faili</string>
<string name="dialog_unsaved_changes_title">Una mabadiliko ambayo hayajahifadhiwa</string>
<string name="dialog_unsaved_changes_message">Je, kweli unataka kuacha bila kuhifadhi?</string>
<string name="dialog_unsaved_changes_discard">Tupa</string>
<string name="dialog_file_name_placeholder">ujumbe.txt</string>
<string name="dialog_delete_vault_message">Una uhakika unataka kuondoa kuba hii?</string>
<string name="dialog_delete_vault_hint">Kitendo hiki kitaondoa tu kuba kutoka kwenye orodha hii na sio kuifuta kimwili.</string>
<string name="dialog_upload_file_title">Inapakia&#8230;</string>
<string name="dialog_upload_file_remaining">Faili %1$d ya %2$d</string>
<string name="dialog_export_file_title">Kusafirisha (%1$d/%2$d)</string>
<string name="dialog_progress_please_wait">Tafadhali subiri&#8230;</string>
<string name="dialog_progress_creating_folder">Kuunda kabrasha&#8230;</string>
<string name="dialog_progress_creating_text_file">Unda faili matini&#8230;</string>
<string name="action_progress_authentication">Uhalalishaji&#8230;</string>
<string name="action_progress_renaming">Inaita jina jipya&#8230;</string>
<string name="action_progress_deleting">Kufuta&#8230;</string>
<string name="dialog_progress_unlocking_vault">Inafungua kuba&#8230;</string>
<string name="dialog_progress_change_password">Kubadilisha neno la siri&#8230;</string>
<string name="dialog_progress_creating_vault">Kutengeneza kuba&#8230;</string>
<string name="dialog_progress_upload_file">Inapakia&#8230;</string>
<string name="dialog_progress_download_file">Inapakua&#8230;</string>
<string name="dialog_progress_encryption">Inasimba&#8230;</string>
<string name="dialog_progress_decryption">Kusimbua =&#8230;</string>
<string name="action_progress_moving">Kusonga&#8230;</string>
<string name="dialog_lock_vault">Funga</string>
<string name="dialog_accept_ssl_certificate_title">Cheti batili cha SSL</string>
<string name="dialog_accept_ssl_certificate_hint">Heti cha SSL ni batili. Je, unataka kuamini hilo hata hivyo?</string>
<string name="dialog_accept_ssl_certificate_details">Maelezo</string>
<string name="dialog_accept_ssl_certificate_security_checkbox">Hii inaweza kuwa hatari kwa usalama. Najua kile ninachofanya.</string>
<string name="dialog_ask_ignore_battery_optimizations_title">Lemaza uboreshaji wa betri</string>
<string name="dialog_ask_ignore_battery_optimizations_hint">Ili kupata picha na video mpya bila kukimbia kwa mandharinyuma, tunahitaji kuchagua kutoka kwa uboreshaji wa betri. Lakini usijali, %1$s haitumii nishati nyingi.\n\nKuitumia, badilisha \'Haijaboreshwa\' kuwa \'Programu zote\', chagua %1$s na uchague \'Usiboreshe\' baada ya kubofya \'%2$s\' katika mazungumzo haya.</string>
<string name="dialog_ask_ignore_battery_optimizations_checkbox">Je, si kuuliza tena?</string>
<string name="dialog_http_security_hint">Matumizi ya HTTP ni salama. Tunapendekeza kutumia HTTPS badala yake. Ikiwa unajua hatari, unaweza kuendelea na HTTP.</string>
<string name="dialog_http_security_checkbox">Badilisha hadi HTTPS</string>
<string name="dialog_http_security_title">Tumia HTTPS?</string>
<string name="dialog_no_screen_lock_hint">Hakuna kufuli ya skrini iliyowekwa. Ili kuhifadhi hati zako za utambulisho kwa njia salama, weka na Sawa muundo au neno la siri.</string>
<string name="dialog_no_screen_lock_title">Weka kufuli skrini?</string>
<string name="dialog_no_screen_lock_checkbox">Weka kufuli skrini</string>
<string name="dialog_no_biometric_auth_set_up_title">Hakuna uhalalishaji wa msingi uliosanidiwa katika mfumo</string>
<string name="dialog_no_biometric_auth_set_up_message">Jiandikishe angalau kidole kimoja / uso ili kutumia huduma hii.</string>
<string name="dialog_debug_mode_disclaimer_hint">Katika hali hii, data nyeti inaweza kuandikwa kwa faili ya kumbukumbu kwenye kifaa chako (kwa mfano, majina ya faili na njia). Nywila, vidakuzi, n.k. zimetengwa wazi.\n\nKukumbuka ili kuzima hali ya utatuzi haraka iwezekanavyo.</string>
<string name="dialog_debug_mode_disclaimer_title">Makini</string>
<string name="dialog_debug_mode_positive_button">Wezesha</string>
<string name="dialog_disable_app_obscured_disclaimer_hint">Mpangilio huu ni kipengele cha usalama na huzuia programu zingine kuwadanganya watumiaji kufanya mambo ambayo hawastahili kufanya.\n\nKuzima, unathibitisha kuwa wewe ni <a href="https://docs.cryptomator.org/en/1.5/android/settings/#block-app-when-obscured">kujishwa na hatari</a>.</string>
<string name="dialog_disable_app_obscured_disclaimer_title">Makini</string>
<string name="dialog_disable_app_obscured_positive_button">Lemaza</string>
<string name="dialog_app_is_obscured_info_title">Programu imefichwa</string>
<string name="dialog_app_is_obscured_info_hint">Programu nyingine inaonyesha kitu juu ya Cryptomator (kwa mfano, kichujio cha mwanga wa bluu au programu ya hali ya usiku). Kwa sababu za usalama, Cryptomator imezimwa..\n\n<a href="https://docs.cryptomator.org/en/1.5/android/settings/#block-app-when-obscured">How to enable Cryptomator</a></string>
<string name="dialog_app_is_obscured_info_neutral_button">Funga</string>
<string name="dialog_vaults_removed_during_migration_title">Tafadhali ongeza tena kuba kwa %1s wingu</string>
<string name="dialog_vaults_removed_during_migration_hint">Wakati wa kuhamia kwenye toleo hili la programu tunahitaji kuondoa vaults zifuatazo kutoka kwa programu:\n%2s \n\nKuboreshaji hazijaondolewa kwenye wingu lakini tu kutoka kwa programu hii. Samahani kwa usumbufu na tafadhali ongeza tena vaults hizi ili kuendelea kufanya kazi nao.</string>
<string name="dialog_vault_is_root_folder_of_cloud_title">Kuba ni folda ya mizizi ya muunganisho wa wingu</string>
<string name="dialog_vault_is_root_folder_of_cloud_hint">Unda muunganisho mpya wa wingu ambapo unachagua angalau folda kuu ya folda hii ya kuba kama saraka ya mizizi ili kuongeza kuba hii.</string>
<string name="dialog_disable_secure_screen_disclaimer_hint">Mpangilio huu ni kipengele cha usalama na huzuia programu zingine kuwadanganya watumiaji kufanya mambo ambayo hawastahili kufanya.\n\nKuzima, unathibitisha kuwa wewe ni <a href="https://docs.cryptomator.org/en/1.5/android/settings/#screen-security">aware of the risks</a>.</string>
<string name="dialog_delete_cloud_connection_with_vaults_message">Una hakika unataka kuondoa muunganisho huu wa wingu?</string>
<string name="dialog_delete_cloud_connection_with_vaults_hint">Hatua hii itaondoa unganisho la wingu na kuba zote za wingu hili.</string>
<string name="dialog_confirm_delete_multiple_title">Futa %1$d vipengee?</string>
<string name="dialog_confirm_delete_multiple_message">Una hakika unataka kufuta vipengee hivi?</string>
<string name="dialog_confirm_delete_file_message">Una hakika unataka kufuta faili hili?</string>
<string name="dialog_confirm_delete_folder_message">Hii itafuta yaliyomo kwenye folda yote. Una hakika unataka kufuta kabrasha hili?</string>
<string name="dialog_biometric_auth_key_invalidated_title">Kipengele cha uthibitishaji wa Biometriska kimezimwa</string>
<string name="dialog_biometric_auth_key_invalidated_message">Kwa sababu ufunguo umebatilishwa, kipengele cha uthibitishaji wa biometriska kimezimwa. Ili kuwezesha tena, fungua mipangilio ya Cryptomator.</string>
<string name="dialog_enter_license_title">Toa leseni halali</string>
<string name="dialog_enter_license_content">Tuligundua kuwa ulisakinisha Cryptomator bila kutumia Duka la Google Play. Toa leseni halali, ambayo inaweza kununuliwa kwenye <a href="https://cryptomator.org/android/">https://cryptomator.org/android/</a></string>
<string name="dialog_enter_license_not_valid_content">Leseni iliyotolewa sio halali. Hakikisha umeiingiza kwa usahihi.</string>
<string name="dialog_enter_license_not_valid_content_desktop_supporter_certificate">Ufunguo uliotolewa ni cheti cha msaidizi wa eneo-kazi. Tafadhali ingiza leseni halali.</string>
<string name="dialog_enter_license_no_content">Hakuna leseni iliyotolewa. Tafadhali ingiza leseni halali.</string>
<string name="dialog_enter_license_decline_button">Toka</string>
<string name="dialog_license_confirmation_title">Uthibitisho wa leseni</string>
<string name="dialog_license_confirmation_message">Asante %1$s kwa kutoa leseni yako halali.</string>
<string name="dialog_update_available_title">Sasisha inapatikana</string>
<string name="dialog_update_available_message">Sasisha Cryptomator hadi toleo la hivi karibuni. Kwa kubonyeza Sawa tutapakua programu chinichini na tutakuuliza uikinishe.</string>
<string name="dialog_update_available_update">Sasisha sasa</string>
<string name="dialog_update_available_download_site">Nenda kwenye tovuti ya kupakua</string>
<string name="dialog_update_available_cancel">Baadae</string>
<string name="dialog_download_update_title">Upakuaji unaendesha</string>
<string name="dialog_download_update_message">Inapakua toleo la hivi karibuni la Cryptomator</string>
<string name="dialog_sym_link_title">Kabrasha ni kiungo cha mfano</string>
<string name="dialog_sym_link_message">Huwezi kuingia kwenye kiungo hiki cha mfano</string>
<string name="dialog_sym_link_back_button">Rudi</string>
<string name="dialog_no_dir_file_title">Haiwezi kupakia yaliyomo kwenye mpangilio orodha</string>
<string name="dialog_no_dir_file_message">Folda ya wingu \'%1$s\' haina faili halali ya saraka. Inaweza kuwa kwamba folda iliundwa kwenye kifaa kingine na bado haijalandanishwa kikamilifu kwenye wingu. Tafadhali angalia katika wingu lako ikiwa faili ifuatayo ipo na sio tupu:\n%2$s</string>
<string name="dialog_no_more_images_to_display">Hakuna picha zaidi za kuonyesha&#8230;</string>
<string name="dialog_pcloud_credentials_updated_title">Hati za utambulisho za \'%1$s\' zimesasishwa</string>
<string name="dialog_pcloud_credentials_updated">Ikiwa ulikusudia kuongeza akaunti mpya ya pWingu, bofya url hii <a href="https://www.pcloud.com">www.pcloud.com</a>, log kutoka kwa akaunti ya sasa na ubofye tena kwenye \' \' katika programu hii ili kuunda muunganisho mpya wa wingu.</string>
<string name="permission_snackbar_auth_local_vault">Cryptomator inahitaji ufikiaji wa kuhifadhi ili kutumia kuba za ndani</string>
<string name="permission_snackbar_auth_auto_upload">Cryptomator inahitaji ufikiaji wa kuhifadhi ili kutumia upakiaji wa picha kiotomatiki</string>
<!-- # error reports -->
<!-- # misc -->
<!-- ## file size helper -->
<string name="file_size_zero">Sifuri kB</string>
<string name="file_size_unit_bytes">baiti</string>
<string name="file_size_unit_kilo_bytes">kB</string>
<string name="file_size_unit_mega_bytes">MB</string>
<string name="file_size_unit_giga_bytes">GB</string>
<string name="file_size_unit_tera_bytes">TB</string>
<!-- ## date helper -->
<string name="time_unit_seconds_sg">sekunde</string>
<string name="time_unit_seconds_pl">sekunde</string>
<string name="time_unit_minutes_sg">dakika</string>
<string name="time_unit_minutes_pl">dakika</string>
<string name="time_unit_hours_sg">saa</string>
<string name="time_unit_hours_pl">masaa</string>
<string name="time_unit_days_sg">siku</string>
<string name="time_unit_days_pl">siku</string>
<string name="time_unit_weeks_sg">wiki</string>
<string name="time_unit_weeks_pl">wiki</string>
<string name="time_unit_months_sg">mwezi</string>
<string name="time_unit_months_pl">miezi</string>
<string name="time_unit_years_sg">mwaka</string>
<string name="time_unit_years_pl">miaka</string>
<!-- ## biometric authentication -->
<string name="dialog_biometric_auth_title">Kuingia kwa Biometriska</string>
<string name="dialog_biometric_auth_message">Ingia kwa kutumia hati yako ya utambulisho ya biometriska</string>
<string name="dialog_biometric_auth_use_password">Tumia neno la siri ya kuba</string>
<string name="dialog_unable_to_auto_upload_files_title">Haiwezi kupakia faili otomatiki</string>
<!-- notification -->
<string name="notification_unlocked">Kuba imefunguliwa:%1$d</string>
<string name="notification_timeout">Otomatiki loku ndani ya %1$s</string>
<string name="notification_lock_all">Funga zote</string>
<string name="notification_cancel_auto_upload">Katisha upakiaji</string>
<string name="notification_auto_upload_title">Upakiaji wa picha kiotomatiki unaendelea</string>
<string name="notification_auto_upload_message">Inapakia %1d/%2d</string>
<string name="notification_auto_upload_finished_title">Upakiaji wa picha otomatiki umekamilika</string>
<string name="notification_auto_upload_finished_message">%1$d picha zilizopakiwa kwenye kuba</string>
<string name="notification_auto_upload_failed_title">Upakiaji wa picha otomatiki umeshindikana</string>
<string name="notification_auto_upload_failed_general_error">Kosa la jumla limetokea wakati wa kupakia.</string>
<string name="notification_auto_upload_failed_due_to_folder_not_exists">Kabrasha lililoteuliwa la kupakia halipatikani tena. Nenda kwenye mipangilio na uchague mpya</string>
<string name="notification_auto_upload_failed_due_to_vault_locked">Kuba imefungwa wakati wa kupakia, tafadhali fungua tena kuba ili kuendelea</string>
<string name="notification_auto_upload_failed_due_to_vault_not_found">Kuba iliyobainishwa kwa upakiaji wa kiotomatiki haipo tena.</string>
<string name="notification_open_writable_file_title">Fungua faili linalo andikika</string>
<string name="notification_open_writable_file_message">Kuba inakaa wazi hadi uhariri uliomalizika</string>
<string name="notification_update_check_finished_latest">Toleo la hivi karibuni lililosakinishwa</string>
<string name="notification_authenticating">Kuthibitisha&#8230;</string>
<string name="screen_settings_lru_cache">Kache</string>
<string name="screen_settings_lru_cache_toggle_summary">Akiba faili zilizofikiwa hivi karibuni zimesimbwa kwa njia fiche ndani ya kifaa kwa matumizi ya baadaye inapofunguliwa tena</string>
<string name="screen_settings_lru_cache_size">Ukubwa wa jumla wa kache</string>
<string name="screen_settings_clear_lru_cache_size">Ondoa Kache</string>
<string name="screen_settings_lru_cache_changed__restart_toast">Mabadiliko yatatekelezwa kwenye uanzishaji upya wa programu inayofuata</string>
<string name="screen_settings_license">Imesajiliwa kwa ajili ya</string>
<string name="screen_settings_license_mail">%1$s</string>
<string name="dialog_settings_update_check_interval_title">Sasisha muda wa ukaguzi</string>
<string name="screen_settings_check_updates">Kagua sasishi</string>
<string name="screen_settings_last_check_updates">Endesha mwisho%1$s</string>
<string name="dialog_cache_size_title">Ukubwa wa kache kwa kila Wingu</string>
<!-- lock timeout names -->
<string name="lock_timeout_instant">Papohapo</string>
<string name="lock_timeout_1m">1 dakika</string>
<string name="lock_timeout_2m">2 dakika</string>
<string name="lock_timeout_5m">5 dakika</string>
<string name="lock_timeout_10m">10 dakika</string>
<string name="lock_timeout_never">Kamwe</string>
<!-- cache size names -->
<string name="cache_size_50m">50 MB</string>
<string name="cache_size_100m">100 MB</string>
<string name="cache_size_250m">250 MB</string>
<string name="cache_size_500m">500 MB</string>
<string name="cache_size_1000m">1 GB</string>
<string name="cache_size_5000m">5 GB</string>
<!-- screen scheme mode names -->
<string name="screen_settings_style_mode">Mtindo</string>
<string name="follow_system">Moja kwa moja (kufuata mfumo)</string>
<string name="light">Mwanga</string>
<string name="dark">Giza</string>
<!-- update interval names -->
<string name="update_interval_1d">Mara moja kwa siku</string>
<string name="update_interval_1w">Mara moja kwa wiki</string>
<string name="update_interval_1m">Mara moja kwa mwezi</string>
</resources>

View File

@ -160,20 +160,20 @@
<string name="screen_settings_activate_biometric_auth">启用生物识别认证</string>
<string name="screen_settings_confirm_face_unlock">确认人脸解锁 (如果有)</string>
<string name="screen_settings_block_app_when_obscured">被遮罩 (比如某些护眼应用) 时停用 Cryptomator</string>
<string name="screen_settings_block_app_when_obscured_summary">阻止 \"输入拦截以及显示错误/诱导性的用户界面\"</string>
<string name="screen_settings_block_app_when_obscured_summary">阻止 \"输入拦截以及显示错误诱导性的用户界面\"</string>
<string name="screen_settings_secure_screen">防截屏</string>
<string name="screen_settings_secure_screen_summary">在最近任务和应用内阻止截图</string>
<string name="screen_settings_section_search">搜索</string>
<string name="screen_settings_live_search">实时搜索</string>
<string name="screen_settings_live_search_summary">边输入边更新搜索结果</string>
<string name="screen_settings_live_search_summary">随输入实时更新搜索结果</string>
<string name="screen_settings_glob_search">使用 glob 模式搜索</string>
<string name="screen_settings_glob_search_summary">使用诸如 alice.*.jpg 的 glob 模式匹配</string>
<string name="screen_settings_section_auto_lock">自动锁定</string>
<string name="screen_settings_auto_lock_timeout">超时锁定</string>
<string name="screen_settings_auto_lock_on_screen_lock">屏后</string>
<string name="screen_settings_auto_lock_on_screen_lock">幕锁定</string>
<string name="screen_settings_section_auto_photo_upload">自动上传图片</string>
<string name="screen_settings_section_auto_photo_upload_vault">选择目标保险库</string>
<string name="screen_settings_section_auto_photo_upload_toggle">激活</string>
<string name="screen_settings_section_auto_photo_upload_toggle">启用</string>
<string name="screen_settings_section_auto_photo_upload_toggle_summary">后台感知图片,一旦目标保险库解锁即开始上传</string>
<string name="screen_settings_section_auto_photo_upload_toggle_instant_upload">实时上传</string>
<string name="screen_settings_section_auto_photo_upload_toggle_instant_upload_summary">解锁保险库后直接上传</string>
@ -284,7 +284,7 @@
<string name="dialog_no_screen_lock_checkbox">设置屏幕锁</string>
<string name="dialog_no_biometric_auth_set_up_title">系统中未设置基本身份验证</string>
<string name="dialog_no_biometric_auth_set_up_message">注册至少一个指纹/面部以使用此服务</string>
<string name="dialog_debug_mode_disclaimer_hint">在此模式下,敏感数据可能会写入您设备上的日志文件 (例如文件名和路径)。密码、cookies等除外\n\n请记住尽快关闭调试模式</string>
<string name="dialog_debug_mode_disclaimer_hint">在此模式下,敏感数据可能会写入您设备上的日志文件 (例如文件名和路径)。密码、cookies等除外\n\n请记住尽快关闭调试模式</string>
<string name="dialog_debug_mode_disclaimer_title">请注意</string>
<string name="dialog_debug_mode_positive_button">启用</string>
<string name="dialog_disable_app_obscured_disclaimer_hint">此为一项安全功能,可防止其他应用诱使用户做出错误操作\n\n如果禁用即表示您了解<a href="https://docs.cryptomator.org/en/1.5/android/settings/#block-app-when-obscured">其中风险</a></string>

View File

@ -159,18 +159,27 @@
<string name="screen_settings_biometric_auth">生物識別驗證</string>
<string name="screen_settings_activate_biometric_auth">開啓生物識別驗證</string>
<string name="screen_settings_confirm_face_unlock">確認面容解鎖(如果可用)</string>
<string name="screen_settings_block_app_when_obscured">被遮擋時阻止應用程序</string>
<string name="screen_settings_block_app_when_obscured_summary">阻止攔截輸入並顯示錯誤的用戶界面</string>
<string name="screen_settings_secure_screen">禁用截圖</string>
<string name="screen_settings_secure_screen_summary">在對話清單或應用程式內停用畫面擷取功能</string>
<string name="screen_settings_section_search">搜尋</string>
<string name="screen_settings_live_search">即時搜尋</string>
<string name="screen_settings_live_search_summary">輸入查詢時更新搜索結果</string>
<string name="screen_settings_glob_search">使用 glob pattern 模式搜索</string>
<string name="screen_settings_glob_search_summary">使用像 alice.*.jpg 这样的 glob pattern 模式搜索</string>
<string name="screen_settings_section_auto_lock">自動鎖定</string>
<string name="screen_settings_auto_lock_timeout">在多久後鎖定</string>
<string name="screen_settings_auto_lock_on_screen_lock">當螢幕被鎖定</string>
<string name="screen_settings_section_auto_photo_upload">自動上傳像片</string>
<string name="screen_settings_section_auto_photo_upload_vault">選擇要上傳的加密檔案庫</string>
<string name="screen_settings_section_auto_photo_upload_toggle">啟動</string>
<string name="screen_settings_section_auto_photo_upload_toggle_summary">在後台捕獲圖像,一旦選定的加密檔案庫被解鎖,開始上解鎖</string>
<string name="screen_settings_section_auto_photo_upload_toggle_instant_upload">即時上傳</string>
<string name="screen_settings_section_auto_photo_upload_toggle_instant_upload_summary">如果加密檔案庫已解鎖,則直接上傳</string>
<string name="screen_settings_section_auto_photo_upload_only_wifi_toggle">僅使用 Wi-Fi 上傳</string>
<string name="screen_settings_section_auto_photo_upload_including_videos">上傳影片</string>
<string name="screen_settings_auto_photo_upload_title">將自動上傳文件保存到 &#8230;</string>
<string name="screen_settings_website_label">Cryptomator 網站</string>
<string name="screen_settings_twitter_label">在 Twitter 上追蹤我們</string>
<string name="screen_settings_facebook_label">在臉書上給我們點讚</string>
@ -186,7 +195,9 @@
<string name="screen_settings_section_version">版本</string>
<string name="screen_settings_advanced_settings">進階設定</string>
<string name="screen_settings_background_unlock_preparation_label">加速解鎖</string>
<string name="screen_settings_background_unlock_preparation_label_summary">在提示輸入密碼或生物識別身份驗證時在後台下載保險庫配置</string>
<string name="screen_settings_keep_unlocked_while_editing_files">保持解鎖</string>
<string name="screen_settings_keep_unlocked_while_editing_files_summary">編輯文件時保持加密檔案庫解鎖</string>
<!-- ## screen: cloud settings -->
<string name="screen_cloud_settings_onedrive_connections">OneDrive 連結</string>
<string name="screen_cloud_settings_webdav_connections">WebDAV 連線</string>
@ -226,9 +237,11 @@
<string name="dialog_replace_title_single_file_exists">替換檔案?</string>
<string name="dialog_replace_title_multiple_files_exist">要取代檔案嗎?</string>
<string name="dialog_unable_to_share_title">無法分享檔案</string>
<string name="dialog_unable_to_share_message">您尚未設置任何加密檔案庫。 請先使用 Cryptomator 應用程序創建一個新的保管庫。</string>
<string name="dialog_unable_to_share_positive_button">確認</string>
<string name="dialog_unable_to_share_negative_button">新建加密檔案庫</string>
<string name="dialog_filetype_not_supported_title">無法打開%1$s</string>
<string name="dialog_filetype_not_supported_message">請下載一個可以打開此文件的應用程序,或者您想保存到您的設備嗎?</string>
<string name="dialog_rename_vault_title">重命名加密檔案庫</string>
<string name="dialog_rename_node_folder_title">重命名檔案夾</string>
<string name="dialog_rename_node_file_title">重新命名檔案</string>
@ -237,11 +250,14 @@
<string name="dialog_unsaved_changes_discard">放棄</string>
<string name="dialog_file_name_placeholder">文本.txt</string>
<string name="dialog_delete_vault_message">您確定要刪除這個加密檔案庫嗎?</string>
<string name="dialog_delete_vault_hint">此操作只會從該列表中刪除加密檔案庫,而不是物理刪除它。</string>
<string name="dialog_upload_file_title">正在上傳中……</string>
<string name="dialog_upload_file_remaining">第%1$d个共%2$d个</string>
<string name="dialog_export_file_title">正在導出中(%1$d/%2$d</string>
<string name="dialog_progress_please_wait">請稍候……</string>
<string name="dialog_progress_creating_folder">正在創建資料夾……</string>
<string name="dialog_progress_creating_text_file">正在創建文本檔案……</string>
<string name="action_progress_authentication">正在驗證 &#8230;</string>
<string name="action_progress_renaming">正在重命名……</string>
<string name="action_progress_deleting">正在删除&#8230;</string>
<string name="dialog_progress_unlocking_vault">正在解鎖加密檔案庫……</string>
@ -257,39 +273,63 @@
<string name="dialog_accept_ssl_certificate_hint">這個 SSL 認證無效,您仍要信任它嗎?</string>
<string name="dialog_accept_ssl_certificate_details">詳情</string>
<string name="dialog_accept_ssl_certificate_security_checkbox">這可能會是個安全風險。我清楚我在做什麼。</string>
<string name="dialog_ask_ignore_battery_optimizations_title">停用電池效能最佳化設定</string>
<string name="dialog_ask_ignore_battery_optimizations_hint">要在不在後台運行的情況下檢索新圖片和視頻,我們需要選擇退出電池優化。 不過不用擔心,%1$s 不會消耗太多能量。\n\n要應用它請將“未優化”更改為“所有應用”選擇 %1$s 並在點擊後選擇“不優化” 此對話框中的“ %2$s ”。</string>
<string name="dialog_ask_ignore_battery_optimizations_checkbox">不要再詢問?</string>
<string name="dialog_http_security_hint">使用 HTTP 是不安全的。我們推薦使用 HTTPS 來取代。如果您瞭解風險,您可以使用 HTTP 繼續。</string>
<string name="dialog_http_security_checkbox">更換為 HTTPS</string>
<string name="dialog_http_security_title">是否使用 HTTPS</string>
<string name="dialog_no_screen_lock_hint">未設置屏幕鎖定。 要以安全的方式存儲您的憑據,請使用 OK 設置模式或密碼。</string>
<string name="dialog_no_screen_lock_title">設定螢幕鎖定?</string>
<string name="dialog_no_screen_lock_checkbox">設定螢幕鎖定</string>
<string name="dialog_no_biometric_auth_set_up_title">系統中未設置基本身份驗證</string>
<string name="dialog_no_biometric_auth_set_up_message">註冊至少一個手指、面部以使用此服務。</string>
<string name="dialog_debug_mode_disclaimer_hint">在此模式下,敏感數據可能會寫入您設備上的日誌文件(例如文件名和路徑)。 密碼、cookies 等被明確排除在外。\n\n請記住盡快禁用調試模式。</string>
<string name="dialog_debug_mode_disclaimer_title">注意</string>
<string name="dialog_debug_mode_positive_button">啟用</string>
<string name="dialog_disable_app_obscured_disclaimer_hint">此設置是一項安全功能,可防止其他應用程序欺騙用戶做他們不想做的事情\n\n如果禁用這項功能請確定你已經<a href="https://docs.cryptomator.org/en/1.5/android/settings/#block-app-when-obscured">了解風險</a></string>
<string name="dialog_disable_app_obscured_disclaimer_title">注意</string>
<string name="dialog_disable_app_obscured_positive_button">禁用</string>
<string name="dialog_app_is_obscured_info_title">應用程序被遮擋</string>
<string name="dialog_app_is_obscured_info_hint">另一個應用程序在 Cryptomator 上顯示一些東西(例如,藍光過濾器或夜間模式應用程序)。出於安全考慮Cryptomator 已經被禁用。\n\n<a href="https://docs.cryptomator.org/en/1.5/android/settings/#block-app-when-obscured">怎樣啟用Cryptomator</a></string>
<string name="dialog_app_is_obscured_info_neutral_button">關閉</string>
<string name="dialog_vaults_removed_during_migration_title">請為 %1s 雲重新添加加密檔案庫</string>
<string name="dialog_vaults_removed_during_migration_hint">在遷移到此應用程序版本時,我們需要從應用程序中刪除以下保管庫\n%2s\n\n這些加密檔案庫不會從雲中刪除而只是從這個應用程序中刪除。 很抱歉給您帶來不便,請重新添加這些加密檔案庫以繼續使用它們。</string>
<string name="dialog_vault_is_root_folder_of_cloud_title">加密檔案庫是雲連接的根文件夾</string>
<string name="dialog_vault_is_root_folder_of_cloud_hint">創建一個新的雲連接,您至少選擇此加密檔案庫文件夾的父文件夾作為根目錄以添加此加密檔案庫。</string>
<string name="dialog_disable_secure_screen_disclaimer_hint">此設置是一項安全功能,可防止其他應用程序欺騙用戶做他們不想做的事情\n\n如果禁用這項功能請確定你已經<a href="https://docs.cryptomator.org/en/1.5/android/settings/#screen-security">了解風險</a></string>
<string name="dialog_delete_cloud_connection_with_vaults_message">您確定要刪除此雲端連結嗎?</string>
<string name="dialog_delete_cloud_connection_with_vaults_hint">此操作將刪除雲連接和該雲的所有加密檔案庫。</string>
<string name="dialog_confirm_delete_multiple_title">是否刪除%1$d個項目</string>
<string name="dialog_confirm_delete_multiple_message">您確定要刪除這些項目嗎?</string>
<string name="dialog_confirm_delete_file_message">您確定要刪除這個檔案嗎?</string>
<string name="dialog_confirm_delete_folder_message">這將會刪除檔案夾中的全部內容。您確定要刪除這個檔案夾嗎?</string>
<string name="dialog_biometric_auth_key_invalidated_title">生物識別認證功能已關閉</string>
<string name="dialog_biometric_auth_key_invalidated_message">由於密鑰已失效,生物特徵認證功能已停用。 要重新啟用,請打開 Cryptomator 設置</string>
<string name="dialog_enter_license_title">提供一個有效的許可證書</string>
<string name="dialog_enter_license_content">我們檢測到你沒有使用 Google Play 商店安裝 Cryptomator。提供一個有效的許可證書證書可以從<a href="https://cryptomator.org/android/">https://cryptomator.org/android/</a>購買</string>
<string name="dialog_enter_license_not_valid_content">提供的許可證書無效。請確認您輸入無誤。</string>
<string name="dialog_enter_license_not_valid_content_desktop_supporter_certificate">提供的密鑰是桌面支持者證書。請輸入有效的許可證。</string>
<string name="dialog_enter_license_no_content">未提供許可證書。請輸入一個有效的許可證書。</string>
<string name="dialog_enter_license_decline_button">退出</string>
<string name="dialog_license_confirmation_title">許可證書確認</string>
<string name="dialog_license_confirmation_message">感謝 %1$s 輸入你的密鑰</string>
<string name="dialog_update_available_title">有可用更新</string>
<string name="dialog_update_available_message">將 Cryptomator 更新到最新版本。 按 OK我們將在後台下載該應用程序並要求您安裝它。</string>
<string name="dialog_update_available_update">現在更新</string>
<string name="dialog_update_available_download_site">前往下載網址</string>
<string name="dialog_update_available_cancel">以後再說</string>
<string name="dialog_download_update_title">正在下載</string>
<string name="dialog_download_update_message">下載最新版本的 Cryptomator</string>
<string name="dialog_sym_link_title">文件夾是符號鏈接</string>
<string name="dialog_sym_link_message">您無法導航到此符號鏈接</string>
<string name="dialog_sym_link_back_button">上一頁</string>
<string name="dialog_no_dir_file_title">無法讀取資料夾內的檔案資訊</string>
<string name="dialog_no_dir_file_message">雲文件夾“%1$s”沒有有效的目錄文件。 可能是該文件夾是在另一台設備上創建的,並且尚未完全同步到雲端。 如果以下文件存在且不為空,請檢查您的雲:\n%2$s</string>
<string name="dialog_no_more_images_to_display">已無更多圖片可供顯示 &#8230;</string>
<string name="dialog_pcloud_credentials_updated_title">%1$s 的帳戶資訊已更新</string>
<string name="dialog_pcloud_credentials_updated">如果您想要新增一個 pCloud 帳戶,請在點擊此連結 <a href="https://www.pcloud.com">www.pcloud.com</a> 後登出目前的帳號,並重新點擊本程式中的「+」來建立一個新的雲端連結。</string>
<string name="permission_snackbar_auth_local_vault">Cryptomator 需要存儲訪問權限用以使用本地加密檔案庫</string>
<string name="permission_snackbar_auth_auto_upload">Cryptomator 需要存儲權限以便開啟自動圖片上傳</string>
<!-- # error reports -->
<!-- # misc -->
@ -339,6 +379,7 @@
<string name="notification_update_check_finished_latest">已安裝最新版本</string>
<string name="notification_authenticating">正在驗證 &#8230;</string>
<string name="screen_settings_lru_cache">緩存</string>
<string name="screen_settings_lru_cache_toggle_summary">緩存設備上本地加密的最近訪問的文件,以便以後重新打開時重複使用</string>
<string name="screen_settings_lru_cache_size">緩存總大小</string>
<string name="screen_settings_clear_lru_cache_size">清除緩存</string>
<string name="screen_settings_lru_cache_changed__restart_toast">變更將會在應用程式下次重啓後啓用。</string>