From e4986d8eb12cf14ec3013e0fb37039042662b011 Mon Sep 17 00:00:00 2001 From: taglioIsCoding Date: Tue, 2 Apr 2024 12:14:52 +0200 Subject: [PATCH 01/22] Preserve last modified on Dropbox --- .idea/deploymentTargetDropDown.xml | 10 +++++ .idea/kotlinc.xml | 3 ++ .idea/migrations.xml | 10 +++++ .idea/misc.xml | 3 +- .../cloud/dropbox/DropboxCloudNodeFactory.kt | 2 +- .../data/cloud/dropbox/DropboxImpl.kt | 2 + .../data/cloud/crypto/CryptoImplDecorator.kt | 1 + .../cloud/crypto/CryptoImplVaultFormat7.kt | 1 + .../usecases/cloud/ByteArrayDataSource.kt | 6 +++ .../usecases/cloud/CancelAwareDataSource.kt | 9 +++++ .../domain/usecases/cloud/DataSource.kt | 4 ++ .../usecases/cloud/FileBasedDataSource.kt | 6 +++ .../domain/usecases/cloud/UploadFiles.java | 1 + .../presenter/UriBasedDataSource.kt | 6 +++ .../presentation/util/ContentResolverUtil.kt | 39 +++++++++++++++++++ 15 files changed, 100 insertions(+), 3 deletions(-) create mode 100644 .idea/deploymentTargetDropDown.xml mode change 100755 => 100644 .idea/kotlinc.xml create mode 100644 .idea/migrations.xml mode change 100755 => 100644 .idea/misc.xml diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml new file mode 100644 index 000000000..fda0382b0 --- /dev/null +++ b/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml old mode 100755 new mode 100644 index 085a74d04..be3cb480c --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -3,4 +3,7 @@ + + \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml new file mode 100644 index 000000000..f8051a6f9 --- /dev/null +++ b/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml old mode 100755 new mode 100644 index 1d3e3ba73..3097af773 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - - + diff --git a/data/src/apiKey/java/org/cryptomator/data/cloud/dropbox/DropboxCloudNodeFactory.kt b/data/src/apiKey/java/org/cryptomator/data/cloud/dropbox/DropboxCloudNodeFactory.kt index e7414081b..05c97e749 100644 --- a/data/src/apiKey/java/org/cryptomator/data/cloud/dropbox/DropboxCloudNodeFactory.kt +++ b/data/src/apiKey/java/org/cryptomator/data/cloud/dropbox/DropboxCloudNodeFactory.kt @@ -7,7 +7,7 @@ import com.dropbox.core.v2.files.Metadata internal object DropboxCloudNodeFactory { fun from(parent: DropboxFolder, metadata: FileMetadata): DropboxFile { - return DropboxFile(parent, metadata.name, metadata.pathDisplay, metadata.size, metadata.serverModified) + return DropboxFile(parent, metadata.name, metadata.pathDisplay, metadata.size, metadata.clientModified) } @JvmStatic diff --git a/data/src/apiKey/java/org/cryptomator/data/cloud/dropbox/DropboxImpl.kt b/data/src/apiKey/java/org/cryptomator/data/cloud/dropbox/DropboxImpl.kt index 412b3b56e..42f6331ee 100644 --- a/data/src/apiKey/java/org/cryptomator/data/cloud/dropbox/DropboxImpl.kt +++ b/data/src/apiKey/java/org/cryptomator/data/cloud/dropbox/DropboxImpl.kt @@ -39,6 +39,7 @@ import org.cryptomator.util.file.LruFileCacheUtil.Companion.retrieveFromLruCache import java.io.File import java.io.IOException import java.io.OutputStream +import java.util.Date import timber.log.Timber internal class DropboxImpl(cloud: DropboxCloud, context: Context) { @@ -167,6 +168,7 @@ internal class DropboxImpl(cloud: DropboxCloud, context: Context) { client() // .files() // .uploadBuilder(file.path) // + .withClientModified(data.modifiedDate(context).orElse(Date())) // .withMode(writeMode) // .uploadAndFinish(it) } diff --git a/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplDecorator.kt b/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplDecorator.kt index f32cd3e32..79b656d07 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplDecorator.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplDecorator.kt @@ -450,6 +450,7 @@ abstract class CryptoImplDecorator( } encryptingWritableByteChannel.close() progressAware.onProgress(Progress.completed(UploadState.encryption(cryptoFile))) + data.modifiedDate(context).ifPresent { encryptedTmpFile.setLastModified(it.time) } return writeFromTmpFile(data, cryptoFile, encryptedTmpFile, progressAware, replace) } } diff --git a/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplVaultFormat7.kt b/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplVaultFormat7.kt index f50d78645..4128ccc7a 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplVaultFormat7.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplVaultFormat7.kt @@ -486,6 +486,7 @@ open class CryptoImplVaultFormat7 : CryptoImplDecorator { progressAware.onProgress(Progress.progress(UploadState.encryption(cloudFile)).between(0).and(ciphertextSize).withValue(encrypted)) } encryptingWritableByteChannel.close() + data.modifiedDate(context).ifPresent { encryptedTmpFile.setLastModified(it.time) } progressAware.onProgress(Progress.completed(UploadState.encryption(cloudFile))) val targetFile = targetFile(cryptoFile, cloudFile, replace) return file( diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/ByteArrayDataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/ByteArrayDataSource.kt index 7fb94639b..b3cd1b1d0 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/ByteArrayDataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/ByteArrayDataSource.kt @@ -1,9 +1,11 @@ package org.cryptomator.domain.usecases.cloud import android.content.Context +import org.cryptomator.util.Optional import java.io.ByteArrayInputStream import java.io.IOException import java.io.InputStream +import java.util.Date class ByteArrayDataSource private constructor(private val bytes: ByteArray) : DataSource { @@ -25,6 +27,10 @@ class ByteArrayDataSource private constructor(private val bytes: ByteArray) : Da // do nothing because ByteArrayInputStream need no close } + override fun modifiedDate(context: Context): Optional { + return Optional.empty() + } + companion object { @JvmStatic diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/CancelAwareDataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/CancelAwareDataSource.kt index 5c1a82e25..c031b8c41 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/CancelAwareDataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/CancelAwareDataSource.kt @@ -2,8 +2,10 @@ package org.cryptomator.domain.usecases.cloud import android.content.Context import org.cryptomator.domain.exception.CancellationException +import org.cryptomator.util.Optional import java.io.IOException import java.io.InputStream +import java.util.Date class CancelAwareDataSource private constructor(private val delegate: DataSource, private val cancelled: Flag) : DataSource { @@ -31,6 +33,13 @@ class CancelAwareDataSource private constructor(private val delegate: DataSource delegate.close() } + override fun modifiedDate(context: Context): Optional { + if (cancelled.get()) { + throw CancellationException() + } + return delegate.modifiedDate(context) + } + companion object { @JvmStatic diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt index 9f965d2d9..ddc0e13b8 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt @@ -1,10 +1,12 @@ package org.cryptomator.domain.usecases.cloud import android.content.Context +import org.cryptomator.util.Optional import java.io.Closeable import java.io.IOException import java.io.InputStream import java.io.Serializable +import java.util.Date interface DataSource : Serializable, Closeable { @@ -15,4 +17,6 @@ interface DataSource : Serializable, Closeable { fun decorate(delegate: DataSource): DataSource + fun modifiedDate(context: Context): Optional + } diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt index 499645682..1d373e1c8 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt @@ -1,10 +1,12 @@ package org.cryptomator.domain.usecases.cloud import android.content.Context +import org.cryptomator.util.Optional import java.io.File import java.io.FileInputStream import java.io.IOException import java.io.InputStream +import java.util.Date class FileBasedDataSource private constructor(private val file: File) : DataSource { @@ -26,6 +28,10 @@ class FileBasedDataSource private constructor(private val file: File) : DataSour // Do nothing } + override fun modifiedDate(context: Context): Optional { + return Optional.of(Date(file.lastModified())) + } + companion object { @JvmStatic diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/UploadFiles.java b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/UploadFiles.java index 284e2a88f..375d34393 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/UploadFiles.java +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/UploadFiles.java @@ -105,6 +105,7 @@ private File copyDataToFile(DataSource dataSource) { InputStream in = CancelAwareDataSource.wrap(dataSource, cancelledFlag).open(context); OutputStream out = new FileOutputStream(target); copy(in, out); + dataSource.modifiedDate(context).ifPresent(value -> target.setLastModified(value.getTime())); return target; } catch (IOException e) { throw new FatalBackendException(e); diff --git a/presentation/src/main/java/org/cryptomator/presentation/presenter/UriBasedDataSource.kt b/presentation/src/main/java/org/cryptomator/presentation/presenter/UriBasedDataSource.kt index 39280129e..79c6defaf 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/presenter/UriBasedDataSource.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/presenter/UriBasedDataSource.kt @@ -4,8 +4,10 @@ import android.content.Context import android.net.Uri import org.cryptomator.domain.usecases.cloud.DataSource import org.cryptomator.presentation.util.ContentResolverUtil +import org.cryptomator.util.Optional import java.io.IOException import java.io.InputStream +import java.util.Date class UriBasedDataSource private constructor(private val uri: Uri) : DataSource { @@ -27,6 +29,10 @@ class UriBasedDataSource private constructor(private val uri: Uri) : DataSource // do nothing } + override fun modifiedDate(context: Context): Optional { + return Optional.ofNullable(ContentResolverUtil(context).fileModifiedDate(uri)) + } + companion object { @JvmStatic diff --git a/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt b/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt index 6b91a42ad..1e45c7728 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt @@ -3,11 +3,13 @@ package org.cryptomator.presentation.util import android.content.ContentResolver import android.content.Context import android.net.Uri +import android.provider.DocumentsContract import android.provider.OpenableColumns import java.io.File import java.io.FileNotFoundException import java.io.InputStream import java.io.OutputStream +import java.util.Date import javax.inject.Inject class ContentResolverUtil @Inject constructor(context: Context) { @@ -127,6 +129,43 @@ class ContentResolverUtil @Inject constructor(context: Context) { return fileUris } + fun fileModifiedDate(uri: Uri): Date? { + return when { + isContentUri(uri) -> { + fileModifiedDateForContentUri(uri) + } + isFileUri(uri) -> { + fileModifiedDateForFileUri(uri) + } + else -> null + } + } + + private fun fileModifiedDateForContentUri(uri: Uri): Date? { + contentResolver.query(uri, null, null, null, null).use { cursor -> + if (cursor != null && cursor.moveToFirst()) { + val dateModifiedColumnIndex = cursor.getColumnIndex(DocumentsContract.Document.COLUMN_LAST_MODIFIED) + if (!cursor.isNull(dateModifiedColumnIndex)) { + val date = cursor.getLong(dateModifiedColumnIndex) + return Date(date); + } + } + // maybe the date of today + return null + } + } + + private fun fileModifiedDateForFileUri(uri: Uri): Date? { + return uri.path?.let { + val file = File(it) + if (file.exists()) { + Date(file.lastModified()) + } else { + null + } + } + } + companion object { private const val CONTENT_SCHEME = "content" From 141a000ede924e8d02b31d25c7dcd77046843f82 Mon Sep 17 00:00:00 2001 From: Luca Fantini Date: Wed, 3 Apr 2024 12:20:28 +0200 Subject: [PATCH 02/22] Added modifiedDate in DataSource The UriBasedDataSource via the ContentResolverUtil can obtain the original last modification date of the source. This info can pass through all architecture to the data layer and used by the various APIs. --- .../usecases/cloud/ByteArrayDataSource.kt | 5 +++ .../usecases/cloud/CancelAwareDataSource.kt | 8 ++++ .../domain/usecases/cloud/DataSource.kt | 3 ++ .../usecases/cloud/FileBasedDataSource.kt | 5 ++- .../presenter/UriBasedDataSource.kt | 5 +++ .../presentation/util/ContentResolverUtil.kt | 37 +++++++++++++++++++ 6 files changed, 62 insertions(+), 1 deletion(-) diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/ByteArrayDataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/ByteArrayDataSource.kt index 7fb94639b..7ef1591e3 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/ByteArrayDataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/ByteArrayDataSource.kt @@ -4,6 +4,7 @@ import android.content.Context import java.io.ByteArrayInputStream import java.io.IOException import java.io.InputStream +import java.util.Date class ByteArrayDataSource private constructor(private val bytes: ByteArray) : DataSource { @@ -11,6 +12,10 @@ class ByteArrayDataSource private constructor(private val bytes: ByteArray) : Da return bytes.size.toLong() } + override fun modifiedDate(context: Context): Date? { + return null + } + @Throws(IOException::class) override fun open(context: Context): InputStream { return ByteArrayInputStream(bytes) diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/CancelAwareDataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/CancelAwareDataSource.kt index 5c1a82e25..b8ca00b61 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/CancelAwareDataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/CancelAwareDataSource.kt @@ -4,9 +4,17 @@ import android.content.Context import org.cryptomator.domain.exception.CancellationException import java.io.IOException import java.io.InputStream +import java.util.Date class CancelAwareDataSource private constructor(private val delegate: DataSource, private val cancelled: Flag) : DataSource { + override fun modifiedDate(context: Context): Date? { + if (cancelled.get()) { + throw CancellationException() + } + return delegate.modifiedDate(context) + } + override fun size(context: Context): Long? { if (cancelled.get()) { throw CancellationException() diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt index 9f965d2d9..3390e044e 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt @@ -5,11 +5,14 @@ import java.io.Closeable import java.io.IOException import java.io.InputStream import java.io.Serializable +import java.util.Date; interface DataSource : Serializable, Closeable { fun size(context: Context): Long? + fun modifiedDate(context: Context): Date? + @Throws(IOException::class) fun open(context: Context): InputStream? diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt index 499645682..e170b55c8 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt @@ -5,13 +5,16 @@ import java.io.File import java.io.FileInputStream import java.io.IOException import java.io.InputStream +import java.util.Date class FileBasedDataSource private constructor(private val file: File) : DataSource { override fun size(context: Context): Long { return file.length() } - + override fun modifiedDate(context: Context): Date? { + return Date(file.lastModified()) + } @Throws(IOException::class) override fun open(context: Context): InputStream { return FileInputStream(file) diff --git a/presentation/src/main/java/org/cryptomator/presentation/presenter/UriBasedDataSource.kt b/presentation/src/main/java/org/cryptomator/presentation/presenter/UriBasedDataSource.kt index 39280129e..f9ea65cf6 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/presenter/UriBasedDataSource.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/presenter/UriBasedDataSource.kt @@ -6,9 +6,14 @@ import org.cryptomator.domain.usecases.cloud.DataSource import org.cryptomator.presentation.util.ContentResolverUtil import java.io.IOException import java.io.InputStream +import java.util.Date class UriBasedDataSource private constructor(private val uri: Uri) : DataSource { + override fun modifiedDate(context: Context): Date? { + return ContentResolverUtil(context).fileModifiedDate(uri) + } + override fun size(context: Context): Long? { return ContentResolverUtil(context).fileSize(uri) } diff --git a/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt b/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt index 6b91a42ad..25f679263 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt @@ -3,17 +3,54 @@ package org.cryptomator.presentation.util import android.content.ContentResolver import android.content.Context import android.net.Uri +import android.provider.DocumentsContract import android.provider.OpenableColumns import java.io.File import java.io.FileNotFoundException import java.io.InputStream import java.io.OutputStream +import java.util.Date import javax.inject.Inject class ContentResolverUtil @Inject constructor(context: Context) { private val contentResolver: ContentResolver = context.contentResolver + fun fileModifiedDate(uri: Uri): Date? { + return when { + isContentUri(uri) -> { + fileModifiedDateForContentUri(uri) + } + isFileUri(uri) -> { + fileModifiedDateForFileUri(uri) + } + else -> null + } + } + private fun fileModifiedDateForContentUri(uri: Uri): Date? { + contentResolver.query(uri, null, null, null, null).use { cursor -> + if (cursor != null && cursor.moveToFirst()) { + val dateModifiedColumnIndex = cursor.getColumnIndex(DocumentsContract.Document.COLUMN_LAST_MODIFIED) + if (!cursor.isNull(dateModifiedColumnIndex)) { + val date = cursor.getLong(dateModifiedColumnIndex) + return Date(date); + } + } + return null + } + } + + private fun fileModifiedDateForFileUri(uri: Uri): Date? { + return uri.path?.let { + val file = File(it) + if (file.exists()) { + Date(file.lastModified()) + } else { + null + } + } + } + @Throws(FileNotFoundException::class) fun openInputStream(uri: Uri): InputStream? { return contentResolver.openInputStream(uri) From f0a7e5fffea30792f407d2123a8b04d3d3d8970a Mon Sep 17 00:00:00 2001 From: taglioIsCoding Date: Thu, 4 Apr 2024 13:50:21 +0200 Subject: [PATCH 03/22] Add modified date into gdrive metadata No need of modified list because the last modified date was already fetched (not tested) --- .../org/cryptomator/data/cloud/googledrive/GoogleDriveImpl.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/data/src/apkStorePlaystore/java/org/cryptomator/data/cloud/googledrive/GoogleDriveImpl.kt b/data/src/apkStorePlaystore/java/org/cryptomator/data/cloud/googledrive/GoogleDriveImpl.kt index 75c06090d..65a4a60d9 100644 --- a/data/src/apkStorePlaystore/java/org/cryptomator/data/cloud/googledrive/GoogleDriveImpl.kt +++ b/data/src/apkStorePlaystore/java/org/cryptomator/data/cloud/googledrive/GoogleDriveImpl.kt @@ -3,6 +3,7 @@ package org.cryptomator.data.cloud.googledrive import android.content.Context import com.google.api.client.googleapis.json.GoogleJsonResponseException import com.google.api.client.http.HttpResponseException +import com.google.api.client.util.DateTime import com.google.api.services.drive.Drive import com.google.api.services.drive.model.File import com.google.api.services.drive.model.Revision @@ -25,6 +26,7 @@ import org.cryptomator.util.file.LruFileCacheUtil import org.cryptomator.util.file.LruFileCacheUtil.Companion.retrieveFromLruCache import java.io.IOException import java.io.OutputStream +import java.util.Date import timber.log.Timber internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCloud, idCache: GoogleDriveIdCache) { @@ -203,6 +205,7 @@ internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCl val metadata = File() metadata.name = file.name progressAware.onProgress(Progress.started(UploadState.upload(file))) + metadata.setModifiedTime(DateTime(data.modifiedDate(context) ?: Date())) val uploadedFile = if (file.driveId != null && replace) { updateFile(file, data, progressAware, size, metadata) } else { From ccdb4724c43baf6c8bed06a04828ee87f8d2db76 Mon Sep 17 00:00:00 2001 From: WheelyMcBones Date: Thu, 4 Apr 2024 11:10:12 +0200 Subject: [PATCH 04/22] last modified date for WebDAV and NextCloud --- .../data/cloud/crypto/CryptoImplDecorator.kt | 1 + .../cloud/crypto/CryptoImplVaultFormat7.kt | 2 +- .../data/cloud/webdav/WebDavImpl.kt | 5 +++- .../network/ConnectionHandlerHandlerImpl.kt | 5 ++++ .../data/cloud/webdav/network/WebDavClient.kt | 25 ++++++++++++++++++- 5 files changed, 35 insertions(+), 3 deletions(-) diff --git a/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplDecorator.kt b/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplDecorator.kt index 79b656d07..29297b6f6 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplDecorator.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplDecorator.kt @@ -449,6 +449,7 @@ abstract class CryptoImplDecorator( progressAware.onProgress(Progress.progress(UploadState.encryption(cryptoFile)).between(0).and(ciphertextSize).withValue(encrypted)) } encryptingWritableByteChannel.close() + data.modifiedDate(context)?.let { encryptedTmpFile.setLastModified(it.time) } progressAware.onProgress(Progress.completed(UploadState.encryption(cryptoFile))) data.modifiedDate(context).ifPresent { encryptedTmpFile.setLastModified(it.time) } return writeFromTmpFile(data, cryptoFile, encryptedTmpFile, progressAware, replace) diff --git a/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplVaultFormat7.kt b/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplVaultFormat7.kt index 4128ccc7a..d155b75a9 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplVaultFormat7.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplVaultFormat7.kt @@ -486,7 +486,7 @@ open class CryptoImplVaultFormat7 : CryptoImplDecorator { progressAware.onProgress(Progress.progress(UploadState.encryption(cloudFile)).between(0).and(ciphertextSize).withValue(encrypted)) } encryptingWritableByteChannel.close() - data.modifiedDate(context).ifPresent { encryptedTmpFile.setLastModified(it.time) } + data.modifiedDate(context)?.let { encryptedTmpFile.setLastModified(it.time) } progressAware.onProgress(Progress.completed(UploadState.encryption(cloudFile))) val targetFile = targetFile(cryptoFile, cloudFile, replace) return file( diff --git a/data/src/main/java/org/cryptomator/data/cloud/webdav/WebDavImpl.kt b/data/src/main/java/org/cryptomator/data/cloud/webdav/WebDavImpl.kt index fd28fcdc6..d3082bc08 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/webdav/WebDavImpl.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/webdav/WebDavImpl.kt @@ -133,7 +133,10 @@ internal class WebDavImpl(private val cloud: WebDavCloud, private val connection ) } }.use { - connectionHandler.writeFile(absoluteUriFrom(uploadFile.path), it) + if (data.modifiedDate(context) != null){ + connectionHandler.writeFile(absoluteUriFrom(uploadFile.path), it, data.modifiedDate(context)!!) + } + else connectionHandler.writeFile(absoluteUriFrom(uploadFile.path), it) } } ?: throw FatalBackendException("InputStream shouldn't bee null") diff --git a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/ConnectionHandlerHandlerImpl.kt b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/ConnectionHandlerHandlerImpl.kt index 49bd6309a..583cd2fc5 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/ConnectionHandlerHandlerImpl.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/ConnectionHandlerHandlerImpl.kt @@ -5,6 +5,7 @@ import org.cryptomator.data.cloud.webdav.WebDavNode import org.cryptomator.domain.CloudFolder import org.cryptomator.domain.exception.BackendException import java.io.InputStream +import java.util.Date import javax.inject.Inject class ConnectionHandlerHandlerImpl @Inject internal constructor(httpClient: WebDavCompatibleHttpClient) { @@ -31,6 +32,10 @@ class ConnectionHandlerHandlerImpl @Inject internal constructor(httpClient: WebD webDavClient.writeFile(url, inputStream) } + fun writeFile(url: String, inputStream: InputStream, modifiedDate: Date?) { + webDavClient.writeFile(url, inputStream, modifiedDate) + } + @Throws(BackendException::class) fun delete(url: String) { webDavClient.delete(url) diff --git a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt index 620412335..aec04ea8a 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt @@ -18,6 +18,7 @@ import java.io.IOException import java.io.InputStream import java.net.HttpURLConnection import java.util.Collections +import java.util.Date import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.Request import okhttp3.RequestBody.Companion.toRequestBody @@ -151,7 +152,7 @@ internal class WebDavClient(private val httpClient: WebDavCompatibleHttpClient) @Throws(BackendException::class) fun writeFile(url: String, inputStream: InputStream) { - val builder = Request.Builder() // + val builder = Request.Builder() .put(InputStreamSourceBasedRequestBody.from(inputStream)) // .url(url) try { @@ -171,6 +172,28 @@ internal class WebDavClient(private val httpClient: WebDavCompatibleHttpClient) } } + fun writeFile(url: String, inputStream: InputStream, modifiedDate: Date?) { + val builder = Request.Builder() + .addHeader("X-OC-Mtime", modifiedDate!!.toInstant().toEpochMilli().div(1000).toString()) + .put(InputStreamSourceBasedRequestBody.from(inputStream)) + .url(url) + try { + httpClient.execute(builder).use { response -> + if (!response.isSuccessful) { + when (response.code) { + HttpURLConnection.HTTP_UNAUTHORIZED -> throw UnauthorizedException() + HttpURLConnection.HTTP_FORBIDDEN -> throw ForbiddenException() + HttpURLConnection.HTTP_BAD_METHOD -> throw TypeMismatchException() + HttpURLConnection.HTTP_CONFLICT, HttpURLConnection.HTTP_NOT_FOUND -> throw ParentFolderDoesNotExistException() + else -> throw FatalBackendException("Response code isn't between 200 and 300: " + response.code) + } + } + } + } catch (e: IOException) { + throw FatalBackendException(e) + } + } + @Throws(BackendException::class) fun createFolder(path: String, folder: WebDavFolder): WebDavFolder { val builder = Request.Builder() // From bfeb6867863e53430ee9797077127b95976a8dd2 Mon Sep 17 00:00:00 2001 From: taglioIsCoding Date: Mon, 8 Apr 2024 10:11:33 +0200 Subject: [PATCH 05/22] Edited .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 333a4c41d..18849b336 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ .idea/encodings.xml .idea/compiler.xml .idea/jarRepositories.xml +.idea/deploymentTargetDropDown.xml ###Android### From a1edf87f3c64031a7ba83dd2cfd19b42bce22410 Mon Sep 17 00:00:00 2001 From: WheelyMcBones Date: Mon, 8 Apr 2024 22:00:37 +0200 Subject: [PATCH 06/22] modified date with Optional for GDrive, DropBox, WebDav (not tested) --- .../data/cloud/googledrive/GoogleDriveImpl.kt | 2 +- .../data/cloud/crypto/CryptoImplDecorator.kt | 3 +- .../cloud/crypto/CryptoImplVaultFormat7.kt | 2 +- .../data/cloud/webdav/WebDavImpl.kt | 6 ++-- .../network/ConnectionHandlerHandlerImpl.kt | 3 +- .../data/cloud/webdav/network/WebDavClient.kt | 5 +-- .../usecases/cloud/ByteArrayDataSource.kt | 4 --- .../usecases/cloud/CancelAwareDataSource.kt | 7 ---- .../domain/usecases/cloud/DataSource.kt | 2 -- .../usecases/cloud/FileBasedDataSource.kt | 3 -- .../presenter/UriBasedDataSource.kt | 4 --- .../presentation/util/ContentResolverUtil.kt | 36 ------------------- 12 files changed, 10 insertions(+), 67 deletions(-) diff --git a/data/src/apkStorePlaystore/java/org/cryptomator/data/cloud/googledrive/GoogleDriveImpl.kt b/data/src/apkStorePlaystore/java/org/cryptomator/data/cloud/googledrive/GoogleDriveImpl.kt index 65a4a60d9..32766b449 100644 --- a/data/src/apkStorePlaystore/java/org/cryptomator/data/cloud/googledrive/GoogleDriveImpl.kt +++ b/data/src/apkStorePlaystore/java/org/cryptomator/data/cloud/googledrive/GoogleDriveImpl.kt @@ -205,7 +205,7 @@ internal class GoogleDriveImpl(context: Context, googleDriveCloud: GoogleDriveCl val metadata = File() metadata.name = file.name progressAware.onProgress(Progress.started(UploadState.upload(file))) - metadata.setModifiedTime(DateTime(data.modifiedDate(context) ?: Date())) + metadata.setModifiedTime(DateTime(data.modifiedDate(context).orElse(Date()))) val uploadedFile = if (file.driveId != null && replace) { updateFile(file, data, progressAware, size, metadata) } else { diff --git a/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplDecorator.kt b/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplDecorator.kt index 29297b6f6..6e5c0ad83 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplDecorator.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplDecorator.kt @@ -449,9 +449,8 @@ abstract class CryptoImplDecorator( progressAware.onProgress(Progress.progress(UploadState.encryption(cryptoFile)).between(0).and(ciphertextSize).withValue(encrypted)) } encryptingWritableByteChannel.close() - data.modifiedDate(context)?.let { encryptedTmpFile.setLastModified(it.time) } - progressAware.onProgress(Progress.completed(UploadState.encryption(cryptoFile))) data.modifiedDate(context).ifPresent { encryptedTmpFile.setLastModified(it.time) } + progressAware.onProgress(Progress.completed(UploadState.encryption(cryptoFile))) return writeFromTmpFile(data, cryptoFile, encryptedTmpFile, progressAware, replace) } } diff --git a/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplVaultFormat7.kt b/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplVaultFormat7.kt index d155b75a9..4128ccc7a 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplVaultFormat7.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/crypto/CryptoImplVaultFormat7.kt @@ -486,7 +486,7 @@ open class CryptoImplVaultFormat7 : CryptoImplDecorator { progressAware.onProgress(Progress.progress(UploadState.encryption(cloudFile)).between(0).and(ciphertextSize).withValue(encrypted)) } encryptingWritableByteChannel.close() - data.modifiedDate(context)?.let { encryptedTmpFile.setLastModified(it.time) } + data.modifiedDate(context).ifPresent { encryptedTmpFile.setLastModified(it.time) } progressAware.onProgress(Progress.completed(UploadState.encryption(cloudFile))) val targetFile = targetFile(cryptoFile, cloudFile, replace) return file( diff --git a/data/src/main/java/org/cryptomator/data/cloud/webdav/WebDavImpl.kt b/data/src/main/java/org/cryptomator/data/cloud/webdav/WebDavImpl.kt index d3082bc08..c8b415092 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/webdav/WebDavImpl.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/webdav/WebDavImpl.kt @@ -23,6 +23,7 @@ import org.cryptomator.domain.usecases.cloud.Progress import org.cryptomator.domain.usecases.cloud.UploadState import java.io.IOException import java.io.OutputStream +import java.util.Date import okhttp3.HttpUrl.Companion.toHttpUrlOrNull internal class WebDavImpl(private val cloud: WebDavCloud, private val connectionHandler: ConnectionHandlerHandlerImpl, private val context: Context) { @@ -133,10 +134,7 @@ internal class WebDavImpl(private val cloud: WebDavCloud, private val connection ) } }.use { - if (data.modifiedDate(context) != null){ - connectionHandler.writeFile(absoluteUriFrom(uploadFile.path), it, data.modifiedDate(context)!!) - } - else connectionHandler.writeFile(absoluteUriFrom(uploadFile.path), it) + connectionHandler.writeFile(absoluteUriFrom(uploadFile.path), it, data.modifiedDate(context).orElse(Date())) } } ?: throw FatalBackendException("InputStream shouldn't bee null") diff --git a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/ConnectionHandlerHandlerImpl.kt b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/ConnectionHandlerHandlerImpl.kt index 583cd2fc5..7332f204d 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/ConnectionHandlerHandlerImpl.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/ConnectionHandlerHandlerImpl.kt @@ -4,6 +4,7 @@ import org.cryptomator.data.cloud.webdav.WebDavFolder import org.cryptomator.data.cloud.webdav.WebDavNode import org.cryptomator.domain.CloudFolder import org.cryptomator.domain.exception.BackendException +import org.cryptomator.util.Optional import java.io.InputStream import java.util.Date import javax.inject.Inject @@ -32,7 +33,7 @@ class ConnectionHandlerHandlerImpl @Inject internal constructor(httpClient: WebD webDavClient.writeFile(url, inputStream) } - fun writeFile(url: String, inputStream: InputStream, modifiedDate: Date?) { + fun writeFile(url: String, inputStream: InputStream, modifiedDate: Date) { webDavClient.writeFile(url, inputStream, modifiedDate) } diff --git a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt index aec04ea8a..7f0ff6a7d 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt @@ -12,6 +12,7 @@ import org.cryptomator.domain.exception.NotFoundException import org.cryptomator.domain.exception.ParentFolderDoesNotExistException import org.cryptomator.domain.exception.TypeMismatchException import org.cryptomator.domain.exception.UnauthorizedException +import org.cryptomator.util.Optional import org.xmlpull.v1.XmlPullParserException import java.io.ByteArrayInputStream import java.io.IOException @@ -172,9 +173,9 @@ internal class WebDavClient(private val httpClient: WebDavCompatibleHttpClient) } } - fun writeFile(url: String, inputStream: InputStream, modifiedDate: Date?) { + fun writeFile(url: String, inputStream: InputStream, modifiedDate: Date) { val builder = Request.Builder() - .addHeader("X-OC-Mtime", modifiedDate!!.toInstant().toEpochMilli().div(1000).toString()) + .addHeader("X-OC-Mtime", modifiedDate .toInstant().toEpochMilli().div(1000).toString()) .put(InputStreamSourceBasedRequestBody.from(inputStream)) .url(url) try { diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/ByteArrayDataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/ByteArrayDataSource.kt index 4cbbc861a..b3cd1b1d0 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/ByteArrayDataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/ByteArrayDataSource.kt @@ -13,10 +13,6 @@ class ByteArrayDataSource private constructor(private val bytes: ByteArray) : Da return bytes.size.toLong() } - override fun modifiedDate(context: Context): Date? { - return null - } - @Throws(IOException::class) override fun open(context: Context): InputStream { return ByteArrayInputStream(bytes) diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/CancelAwareDataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/CancelAwareDataSource.kt index bd4455e40..c031b8c41 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/CancelAwareDataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/CancelAwareDataSource.kt @@ -9,13 +9,6 @@ import java.util.Date class CancelAwareDataSource private constructor(private val delegate: DataSource, private val cancelled: Flag) : DataSource { - override fun modifiedDate(context: Context): Date? { - if (cancelled.get()) { - throw CancellationException() - } - return delegate.modifiedDate(context) - } - override fun size(context: Context): Long? { if (cancelled.get()) { throw CancellationException() diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt index 3d84b3ab7..2bdc3e9ec 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt @@ -13,8 +13,6 @@ interface DataSource : Serializable, Closeable { fun size(context: Context): Long? - fun modifiedDate(context: Context): Date? - @Throws(IOException::class) fun open(context: Context): InputStream? diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt index 3b8157711..f97708e5b 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt @@ -13,9 +13,6 @@ class FileBasedDataSource private constructor(private val file: File) : DataSour override fun size(context: Context): Long { return file.length() } - override fun modifiedDate(context: Context): Date? { - return Date(file.lastModified()) - } @Throws(IOException::class) override fun open(context: Context): InputStream { return FileInputStream(file) diff --git a/presentation/src/main/java/org/cryptomator/presentation/presenter/UriBasedDataSource.kt b/presentation/src/main/java/org/cryptomator/presentation/presenter/UriBasedDataSource.kt index ef9711dcb..79c6defaf 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/presenter/UriBasedDataSource.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/presenter/UriBasedDataSource.kt @@ -11,10 +11,6 @@ import java.util.Date class UriBasedDataSource private constructor(private val uri: Uri) : DataSource { - override fun modifiedDate(context: Context): Date? { - return ContentResolverUtil(context).fileModifiedDate(uri) - } - override fun size(context: Context): Long? { return ContentResolverUtil(context).fileSize(uri) } diff --git a/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt b/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt index 80901bbc1..3e313f95b 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt @@ -164,42 +164,6 @@ class ContentResolverUtil @Inject constructor(context: Context) { return fileUris } - fun fileModifiedDate(uri: Uri): Date? { - return when { - isContentUri(uri) -> { - fileModifiedDateForContentUri(uri) - } - isFileUri(uri) -> { - fileModifiedDateForFileUri(uri) - } - else -> null - } - } - - private fun fileModifiedDateForContentUri(uri: Uri): Date? { - contentResolver.query(uri, null, null, null, null).use { cursor -> - if (cursor != null && cursor.moveToFirst()) { - val dateModifiedColumnIndex = cursor.getColumnIndex(DocumentsContract.Document.COLUMN_LAST_MODIFIED) - if (!cursor.isNull(dateModifiedColumnIndex)) { - val date = cursor.getLong(dateModifiedColumnIndex) - return Date(date); - } - } - // maybe the date of today - return null - } - } - - private fun fileModifiedDateForFileUri(uri: Uri): Date? { - return uri.path?.let { - val file = File(it) - if (file.exists()) { - Date(file.lastModified()) - } else { - null - } - } - } companion object { From 00d8199c5007a296e319099e1a8c04601d0eb323 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Tue, 9 Apr 2024 12:36:22 +0200 Subject: [PATCH 07/22] Remove mention of Git sumbodules Cryptmator for Android no longer uses sumodules --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 381afc26d..2e6b30a96 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,6 @@ Cryptomator for Android is currently available in the following distribution ch ### Run Git and Gradle ``` -git submodule init && git submodule update // (not necessary if cloned using --recurse-submodules) ./gradlew assembleApkstoreDebug ``` @@ -42,7 +41,7 @@ Before connecting to Google Drive you have to create a new project in [Google Cl Use the Docker image to verify the build of the 'lite' flavor: -1. Clone this repository (don't forget `--recurse-submodules`) +1. Clone this repository 2. Checkout the tag you want to build, e.g. 1.8.0 3. Build the image using `docker build -t cryptomator-android .` in the `buildsystem/` directory 4. Build Cryptomator using `docker run --rm -u $(id -u):$(id -g) -v $(pwd):/project -w /project cryptomator-android ./gradlew clean assembleLiteRelease` in the root of this folder From 633fbe4d1523185571bc121ce77d8c210c9ccfd1 Mon Sep 17 00:00:00 2001 From: Luca Fantini Date: Sun, 7 Apr 2024 23:21:02 +0200 Subject: [PATCH 08/22] preserve last modified date on pCloud (not tested!) --- .../apiKey/java/org/cryptomator/data/cloud/pcloud/PCloudImpl.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/src/apiKey/java/org/cryptomator/data/cloud/pcloud/PCloudImpl.kt b/data/src/apiKey/java/org/cryptomator/data/cloud/pcloud/PCloudImpl.kt index fba87a304..8a8daac41 100644 --- a/data/src/apiKey/java/org/cryptomator/data/cloud/pcloud/PCloudImpl.kt +++ b/data/src/apiKey/java/org/cryptomator/data/cloud/pcloud/PCloudImpl.kt @@ -208,7 +208,7 @@ internal class PCloudImpl(private val cloud: PCloud, private val client: ApiClie } return try { client // - .createFile(file.parent.path, file.name, pCloudDataSource, Date(), listener, uploadOptions) // + .createFile(file.parent.path, file.name, pCloudDataSource, data.modifiedDate(context) ?: Date(), listener, uploadOptions) // .execute() } catch (ex: ApiError) { handleApiError(ex, file.name) From 2bf641c0702f38ee7d933182a1ab4960cd0fc918 Mon Sep 17 00:00:00 2001 From: taglioIsCoding Date: Tue, 9 Apr 2024 13:34:41 +0200 Subject: [PATCH 09/22] Modified date with Optional in pCloud --- .../apiKey/java/org/cryptomator/data/cloud/pcloud/PCloudImpl.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/src/apiKey/java/org/cryptomator/data/cloud/pcloud/PCloudImpl.kt b/data/src/apiKey/java/org/cryptomator/data/cloud/pcloud/PCloudImpl.kt index 8a8daac41..e8a262c42 100644 --- a/data/src/apiKey/java/org/cryptomator/data/cloud/pcloud/PCloudImpl.kt +++ b/data/src/apiKey/java/org/cryptomator/data/cloud/pcloud/PCloudImpl.kt @@ -208,7 +208,7 @@ internal class PCloudImpl(private val cloud: PCloud, private val client: ApiClie } return try { client // - .createFile(file.parent.path, file.name, pCloudDataSource, data.modifiedDate(context) ?: Date(), listener, uploadOptions) // + .createFile(file.parent.path, file.name, pCloudDataSource, data.modifiedDate(context).orElse(Date()), listener, uploadOptions) // .execute() } catch (ex: ApiError) { handleApiError(ex, file.name) From c3715ad7c72974f76f6de87fe6199769675f8921 Mon Sep 17 00:00:00 2001 From: Luca Fantini Date: Wed, 3 Apr 2024 12:25:10 +0200 Subject: [PATCH 10/22] Preserve Last Modified Date on Onedrive Onedrive provide a "fileSystemInfo resource type" [1] that contains properties that are reported by the device's local file system for the local version of an item. To fetch the original last modified date we have to pass an additional argument which will be stored server side and retrieved in a second moment. In the uploadFile() method a new PATCH request have been added to update those info. In the chunkedUploadFile() is sufficient add a property to the request. When a CloudNode is created by the OnedriveCloudNodeFactory the fileSystemInfo are used. [1] https://learn.microsoft.com/en-us/graph/api/resources/filesysteminfo?view=graph-rest-1.0#notes --- .../onedrive/OnedriveCloudNodeFactory.kt | 4 +-- .../data/cloud/onedrive/OnedriveImpl.kt | 34 +++++++++++++++---- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveCloudNodeFactory.kt b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveCloudNodeFactory.kt index 3d0036ee9..f4e80810c 100644 --- a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveCloudNodeFactory.kt +++ b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveCloudNodeFactory.kt @@ -74,8 +74,6 @@ internal object OnedriveCloudNodeFactory { } private fun lastModified(item: DriveItem): Date? { - return item.lastModifiedDateTime?.let { - return Date.from(it.toInstant()) - } + return Date.from(item.fileSystemInfo!!.lastModifiedDateTime!!.toInstant()) } } diff --git a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt index b9f747d93..d66f352ad 100644 --- a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt +++ b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt @@ -5,6 +5,7 @@ import com.microsoft.graph.http.GraphServiceException import com.microsoft.graph.models.DriveItem import com.microsoft.graph.models.DriveItemCreateUploadSessionParameterSet import com.microsoft.graph.models.DriveItemUploadableProperties +import com.microsoft.graph.models.FileSystemInfo import com.microsoft.graph.models.Folder import com.microsoft.graph.models.ItemReference import com.microsoft.graph.options.Option @@ -39,6 +40,7 @@ import org.cryptomator.util.file.LruFileCacheUtil.Companion.retrieveFromLruCache import java.io.File import java.io.IOException import java.io.OutputStream +import java.time.OffsetDateTime import java.util.Date import java.util.concurrent.CompletableFuture import java.util.concurrent.ExecutionException @@ -202,7 +204,8 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client } progressAware.onProgress(Progress.completed(UploadState.upload(file))) return try { - OnedriveCloudNodeFactory.file(file.parent, result.get(), Date()) + val d = Date.from(result.get().fileSystemInfo!!.lastModifiedDateTime!!.toInstant()) + OnedriveCloudNodeFactory.file(file.parent, result.get(), d) } catch (e: ExecutionException) { throw FatalBackendException(e) } catch (e: InterruptedException) { @@ -228,13 +231,25 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client .putAsync(CopyStream.toByteArray(it)) // .whenComplete { driveItem, error -> run { - if (error == null) { - progressAware.onProgress(Progress.completed(UploadState.upload(file))) - result.complete(driveItem) - cacheNodeInfo(file, driveItem) - } else { + if (error != null) { result.completeExceptionally(error) } + + // update the fileSystemInfo.lastModifiedDateTime to the data source date + driveItem.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.from(data.modifiedDate(context)!!.toInstant()) + drive(parentNodeInfo.driveId) // + .items(parentNodeInfo.id) // + .itemWithPath(file.name) // + .buildRequest(conflictBehaviorOption) + .patchAsync(driveItem) + .whenComplete{ driveItem, error -> + if(error != null) { + result.completeExceptionally(error) + } + progressAware.onProgress(Progress.completed(UploadState.upload(file))) + result.complete(driveItem) + cacheNodeInfo(file, driveItem) + } } } } catch (e: IOException) { @@ -247,10 +262,15 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client @Throws(IOException::class, NoSuchCloudFileException::class) private fun chunkedUploadFile(file: OnedriveFile, data: DataSource, progressAware: ProgressAware, result: CompletableFuture, conflictBehaviorOption: Option, size: Long) { val parentNodeInfo = requireNodeInfo(file.parent) + + val props = DriveItemUploadableProperties(); + props.fileSystemInfo = FileSystemInfo(); + props.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.from(data.modifiedDate(context)!!.toInstant()) + drive(parentNodeInfo.driveId) // .items(parentNodeInfo.id) // .itemWithPath(file.name) // - .createUploadSession(DriveItemCreateUploadSessionParameterSet.newBuilder().withItem(DriveItemUploadableProperties()).build()) // + .createUploadSession(DriveItemCreateUploadSessionParameterSet.newBuilder().withItem(props).build()) // .buildRequest() // .post()?.let { uploadSession -> data.open(context)?.use { inputStream -> From c045f7c2f81c5fed344f502ad2fec3f21e7131bd Mon Sep 17 00:00:00 2001 From: WheelyMcBones Date: Sun, 7 Apr 2024 17:07:54 +0200 Subject: [PATCH 11/22] last modified date for OneDrive --- .../data/cloud/onedrive/OnedriveImpl.kt | 41 +++++++++++-------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt index d66f352ad..3231ce6cd 100644 --- a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt +++ b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt @@ -41,6 +41,8 @@ import java.io.File import java.io.IOException import java.io.OutputStream import java.time.OffsetDateTime +import java.time.ZoneId +import java.time.format.DateTimeFormatter import java.util.Date import java.util.concurrent.CompletableFuture import java.util.concurrent.ExecutionException @@ -223,6 +225,7 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client }.use { val parentNodeInfo = requireNodeInfo(file.parent) try { + drive(parentNodeInfo.driveId) // .items(parentNodeInfo.id) // .itemWithPath(file.name) // @@ -231,25 +234,31 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client .putAsync(CopyStream.toByteArray(it)) // .whenComplete { driveItem, error -> run { - if (error != null) { + if (error == null) { + + val diffItem = DriveItem() + diffItem.fileSystemInfo = FileSystemInfo() + diffItem.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(data.modifiedDate(context)!!.toInstant(), ZoneId.systemDefault()) + + drive(parentNodeInfo.driveId) + .items(driveItem.id!!) + .buildRequest(conflictBehaviorOption) + .patchAsync(diffItem) + .whenComplete{ driveItem, error -> + if(error == null) { + progressAware.onProgress(Progress.completed(UploadState.upload(file))) + result.complete(driveItem) + cacheNodeInfo(file, driveItem) + } + else{ + result.completeExceptionally(error) + } + } + } + else{ result.completeExceptionally(error) } - // update the fileSystemInfo.lastModifiedDateTime to the data source date - driveItem.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.from(data.modifiedDate(context)!!.toInstant()) - drive(parentNodeInfo.driveId) // - .items(parentNodeInfo.id) // - .itemWithPath(file.name) // - .buildRequest(conflictBehaviorOption) - .patchAsync(driveItem) - .whenComplete{ driveItem, error -> - if(error != null) { - result.completeExceptionally(error) - } - progressAware.onProgress(Progress.completed(UploadState.upload(file))) - result.complete(driveItem) - cacheNodeInfo(file, driveItem) - } } } } catch (e: IOException) { From 1d7116021763202b0c390ede191f54a6c3fb130f Mon Sep 17 00:00:00 2001 From: WheelyMcBones Date: Mon, 8 Apr 2024 22:03:45 +0200 Subject: [PATCH 12/22] modified chunkedUploadFile with modified date --- .../java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt index 3231ce6cd..aa209742a 100644 --- a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt +++ b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt @@ -274,7 +274,7 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client val props = DriveItemUploadableProperties(); props.fileSystemInfo = FileSystemInfo(); - props.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.from(data.modifiedDate(context)!!.toInstant()) + props.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(data.modifiedDate(context)!!.toInstant(), ZoneId.systemDefault()) drive(parentNodeInfo.driveId) // .items(parentNodeInfo.id) // From 32c5ef76197e2a2a78e9d599401b4dcde5b9635a Mon Sep 17 00:00:00 2001 From: WheelyMcBones Date: Mon, 8 Apr 2024 22:36:07 +0200 Subject: [PATCH 13/22] modified date with Optional for OneDrive --- .../data/cloud/onedrive/OnedriveImpl.kt | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt index aa209742a..c2bfed2eb 100644 --- a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt +++ b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt @@ -238,7 +238,13 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client val diffItem = DriveItem() diffItem.fileSystemInfo = FileSystemInfo() - diffItem.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(data.modifiedDate(context)!!.toInstant(), ZoneId.systemDefault()) + if(data.modifiedDate(context).isPresent){ + diffItem.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(data.modifiedDate(context).get().toInstant(), ZoneId.systemDefault()) + } + else{ + diffItem.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(Date().toInstant(), ZoneId.systemDefault()) + } + drive(parentNodeInfo.driveId) .items(driveItem.id!!) @@ -274,8 +280,12 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client val props = DriveItemUploadableProperties(); props.fileSystemInfo = FileSystemInfo(); - props.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(data.modifiedDate(context)!!.toInstant(), ZoneId.systemDefault()) - + if(data.modifiedDate(context).isPresent){ + props.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(data.modifiedDate(context).get().toInstant(), ZoneId.systemDefault()) + } + else{ + props.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(Date().toInstant(), ZoneId.systemDefault()) + } drive(parentNodeInfo.driveId) // .items(parentNodeInfo.id) // .itemWithPath(file.name) // From 7e281a24a1d54693178b58981dbf526dfea80a5c Mon Sep 17 00:00:00 2001 From: Luca Fantini Date: Wed, 10 Apr 2024 14:52:14 +0200 Subject: [PATCH 14/22] Added modifiedDate() in UploadFileTest --- .../org/cryptomator/domain/usecases/cloud/UploadFileTest.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/domain/src/test/java/org/cryptomator/domain/usecases/cloud/UploadFileTest.kt b/domain/src/test/java/org/cryptomator/domain/usecases/cloud/UploadFileTest.kt index 3f4177fc3..6db6f4948 100644 --- a/domain/src/test/java/org/cryptomator/domain/usecases/cloud/UploadFileTest.kt +++ b/domain/src/test/java/org/cryptomator/domain/usecases/cloud/UploadFileTest.kt @@ -8,6 +8,7 @@ import org.cryptomator.domain.CloudNode import org.cryptomator.domain.exception.BackendException import org.cryptomator.domain.repository.CloudContentRepository import org.cryptomator.domain.usecases.ProgressAware +import org.cryptomator.util.Optional import org.hamcrest.CoreMatchers import org.hamcrest.MatcherAssert import org.junit.jupiter.params.ParameterizedTest @@ -21,6 +22,7 @@ import java.io.ByteArrayInputStream import java.io.IOException import java.io.InputStream import java.util.Arrays +import java.util.Date class UploadFileTest { @@ -105,6 +107,10 @@ class UploadFileTest { return delegate } + override fun modifiedDate(context: Context): Optional { + return Optional.of(Date()) + } + @Throws(IOException::class) override fun close() { // do nothing From ab9f8900c22c23e4e79480738147b91b075b686d Mon Sep 17 00:00:00 2001 From: WheelyMcBones Date: Wed, 10 Apr 2024 17:44:27 +0200 Subject: [PATCH 15/22] PR requested changes (not tested) --- .../onedrive/OnedriveCloudNodeFactory.kt | 4 +- .../data/cloud/onedrive/OnedriveImpl.kt | 61 +++++++++---------- .../network/ConnectionHandlerHandlerImpl.kt | 5 -- .../data/cloud/webdav/network/WebDavClient.kt | 27 +------- .../domain/usecases/cloud/DataSource.kt | 1 - .../usecases/cloud/FileBasedDataSource.kt | 1 + .../presentation/util/ContentResolverUtil.kt | 2 +- 7 files changed, 38 insertions(+), 63 deletions(-) diff --git a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveCloudNodeFactory.kt b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveCloudNodeFactory.kt index f4e80810c..434613e76 100644 --- a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveCloudNodeFactory.kt +++ b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveCloudNodeFactory.kt @@ -74,6 +74,8 @@ internal object OnedriveCloudNodeFactory { } private fun lastModified(item: DriveItem): Date? { - return Date.from(item.fileSystemInfo!!.lastModifiedDateTime!!.toInstant()) + return item.fileSystemInfo?.let { + return Date.from(it.lastModifiedDateTime?.toInstant()) + } } } diff --git a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt index c2bfed2eb..3bb41afb1 100644 --- a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt +++ b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt @@ -34,6 +34,7 @@ import org.cryptomator.domain.usecases.cloud.DataSource import org.cryptomator.domain.usecases.cloud.DownloadState import org.cryptomator.domain.usecases.cloud.Progress import org.cryptomator.domain.usecases.cloud.UploadState +import org.cryptomator.util.Optional import org.cryptomator.util.SharedPreferencesHandler import org.cryptomator.util.file.LruFileCacheUtil import org.cryptomator.util.file.LruFileCacheUtil.Companion.retrieveFromLruCache @@ -42,7 +43,6 @@ import java.io.IOException import java.io.OutputStream import java.time.OffsetDateTime import java.time.ZoneId -import java.time.format.DateTimeFormatter import java.util.Date import java.util.concurrent.CompletableFuture import java.util.concurrent.ExecutionException @@ -206,8 +206,8 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client } progressAware.onProgress(Progress.completed(UploadState.upload(file))) return try { - val d = Date.from(result.get().fileSystemInfo!!.lastModifiedDateTime!!.toInstant()) - OnedriveCloudNodeFactory.file(file.parent, result.get(), d) + val lastModifiedDate = getLastModifiedDateTime(result.get().fileSystemInfo) + OnedriveCloudNodeFactory.file(file.parent, result.get(), lastModifiedDate) } catch (e: ExecutionException) { throw FatalBackendException(e) } catch (e: InterruptedException) { @@ -215,6 +215,12 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client } } + private fun getLastModifiedDateTime(fileSystemInfo: FileSystemInfo?): Date { + return fileSystemInfo?.lastModifiedDateTime.let { date -> + Date.from(date?.toInstant()) + }?: Date.from(Date().toInstant()) + } + @Throws(NoSuchCloudFileException::class) private fun uploadFile(file: OnedriveFile, data: DataSource, progressAware: ProgressAware, result: CompletableFuture, conflictBehaviorOption: Option, size: Long) { data.open(context)?.use { inputStream -> @@ -225,7 +231,6 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client }.use { val parentNodeInfo = requireNodeInfo(file.parent) try { - drive(parentNodeInfo.driveId) // .items(parentNodeInfo.id) // .itemWithPath(file.name) // @@ -235,33 +240,23 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client .whenComplete { driveItem, error -> run { if (error == null) { - val diffItem = DriveItem() diffItem.fileSystemInfo = FileSystemInfo() - if(data.modifiedDate(context).isPresent){ - diffItem.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(data.modifiedDate(context).get().toInstant(), ZoneId.systemDefault()) - } - else{ - diffItem.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(Date().toInstant(), ZoneId.systemDefault()) - } - - - drive(parentNodeInfo.driveId) - .items(driveItem.id!!) - .buildRequest(conflictBehaviorOption) - .patchAsync(diffItem) - .whenComplete{ driveItem, error -> - if(error == null) { + setLastModifiedDateTime(diffItem.fileSystemInfo, data.modifiedDate(context)) + drive(parentNodeInfo.driveId) // + .items(driveItem.id!!) // + .buildRequest(conflictBehaviorOption) // + .patchAsync(diffItem) // + .whenComplete { driveItem, error -> + if (error == null) { progressAware.onProgress(Progress.completed(UploadState.upload(file))) result.complete(driveItem) cacheNodeInfo(file, driveItem) - } - else{ + } else { result.completeExceptionally(error) } } - } - else{ + } else { result.completeExceptionally(error) } @@ -278,14 +273,10 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client private fun chunkedUploadFile(file: OnedriveFile, data: DataSource, progressAware: ProgressAware, result: CompletableFuture, conflictBehaviorOption: Option, size: Long) { val parentNodeInfo = requireNodeInfo(file.parent) - val props = DriveItemUploadableProperties(); - props.fileSystemInfo = FileSystemInfo(); - if(data.modifiedDate(context).isPresent){ - props.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(data.modifiedDate(context).get().toInstant(), ZoneId.systemDefault()) - } - else{ - props.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(Date().toInstant(), ZoneId.systemDefault()) - } + val props = DriveItemUploadableProperties() + props.fileSystemInfo = FileSystemInfo() + setLastModifiedDateTime(props.fileSystemInfo, data.modifiedDate(context)) + drive(parentNodeInfo.driveId) // .items(parentNodeInfo.id) // .itemWithPath(file.name) // @@ -313,6 +304,14 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client } ?: throw FatalBackendException("Failed to create upload session, response is null") } + private fun setLastModifiedDateTime(fileSystemInfo: FileSystemInfo?, modifiedDate: Optional) { + fileSystemInfo?.lastModifiedDateTime = modifiedDate.map { date -> + OffsetDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()) + }.orElseGet { + OffsetDateTime.ofInstant(Date().toInstant(), ZoneId.systemDefault()) + } + } + @Throws(BackendException::class, IOException::class) fun read(file: OnedriveFile, encryptedTmpFile: File?, data: OutputStream, progressAware: ProgressAware) { progressAware.onProgress(Progress.started(DownloadState.download(file))) diff --git a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/ConnectionHandlerHandlerImpl.kt b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/ConnectionHandlerHandlerImpl.kt index 7332f204d..6063efb54 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/ConnectionHandlerHandlerImpl.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/ConnectionHandlerHandlerImpl.kt @@ -4,7 +4,6 @@ import org.cryptomator.data.cloud.webdav.WebDavFolder import org.cryptomator.data.cloud.webdav.WebDavNode import org.cryptomator.domain.CloudFolder import org.cryptomator.domain.exception.BackendException -import org.cryptomator.util.Optional import java.io.InputStream import java.util.Date import javax.inject.Inject @@ -29,10 +28,6 @@ class ConnectionHandlerHandlerImpl @Inject internal constructor(httpClient: WebD } @Throws(BackendException::class) - fun writeFile(url: String, inputStream: InputStream) { - webDavClient.writeFile(url, inputStream) - } - fun writeFile(url: String, inputStream: InputStream, modifiedDate: Date) { webDavClient.writeFile(url, inputStream, modifiedDate) } diff --git a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt index 7f0ff6a7d..3da565a6b 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt @@ -152,31 +152,10 @@ internal class WebDavClient(private val httpClient: WebDavCompatibleHttpClient) } @Throws(BackendException::class) - fun writeFile(url: String, inputStream: InputStream) { - val builder = Request.Builder() - .put(InputStreamSourceBasedRequestBody.from(inputStream)) // - .url(url) - try { - httpClient.execute(builder).use { response -> - if (!response.isSuccessful) { - when (response.code) { - HttpURLConnection.HTTP_UNAUTHORIZED -> throw UnauthorizedException() - HttpURLConnection.HTTP_FORBIDDEN -> throw ForbiddenException() - HttpURLConnection.HTTP_BAD_METHOD -> throw TypeMismatchException() - HttpURLConnection.HTTP_CONFLICT, HttpURLConnection.HTTP_NOT_FOUND -> throw ParentFolderDoesNotExistException() - else -> throw FatalBackendException("Response code isn't between 200 and 300: " + response.code) - } - } - } - } catch (e: IOException) { - throw FatalBackendException(e) - } - } - fun writeFile(url: String, inputStream: InputStream, modifiedDate: Date) { - val builder = Request.Builder() - .addHeader("X-OC-Mtime", modifiedDate .toInstant().toEpochMilli().div(1000).toString()) - .put(InputStreamSourceBasedRequestBody.from(inputStream)) + val builder = Request.Builder() // + .addHeader("X-OC-Mtime", modifiedDate.toInstant().toEpochMilli().div(1000).toString()) // + .put(InputStreamSourceBasedRequestBody.from(inputStream)) // .url(url) try { httpClient.execute(builder).use { response -> diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt index 2bdc3e9ec..ddc0e13b8 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/DataSource.kt @@ -8,7 +8,6 @@ import java.io.InputStream import java.io.Serializable import java.util.Date - interface DataSource : Serializable, Closeable { fun size(context: Context): Long? diff --git a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt index f97708e5b..1d373e1c8 100644 --- a/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt +++ b/domain/src/main/java/org/cryptomator/domain/usecases/cloud/FileBasedDataSource.kt @@ -13,6 +13,7 @@ class FileBasedDataSource private constructor(private val file: File) : DataSour override fun size(context: Context): Long { return file.length() } + @Throws(IOException::class) override fun open(context: Context): InputStream { return FileInputStream(file) diff --git a/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt b/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt index 3e313f95b..f834a18eb 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/util/ContentResolverUtil.kt @@ -27,6 +27,7 @@ class ContentResolverUtil @Inject constructor(context: Context) { else -> null } } + private fun fileModifiedDateForContentUri(uri: Uri): Date? { contentResolver.query(uri, null, null, null, null).use { cursor -> if (cursor != null && cursor.moveToFirst()) { @@ -164,7 +165,6 @@ class ContentResolverUtil @Inject constructor(context: Context) { return fileUris } - companion object { private const val CONTENT_SCHEME = "content" From 38b4633bb9d45df619ac50690a7fad02d942e81b Mon Sep 17 00:00:00 2001 From: Luca Fantini Date: Thu, 18 Apr 2024 12:43:10 +0200 Subject: [PATCH 16/22] Revert changes to the .idea/_ files and the .gitignore --- .gitignore | 1 - .idea/deploymentTargetDropDown.xml | 10 ---------- .idea/kotlinc.xml | 3 --- .idea/migrations.xml | 10 ---------- .idea/misc.xml | 3 ++- 5 files changed, 2 insertions(+), 25 deletions(-) delete mode 100644 .idea/deploymentTargetDropDown.xml mode change 100644 => 100755 .idea/kotlinc.xml delete mode 100644 .idea/migrations.xml mode change 100644 => 100755 .idea/misc.xml diff --git a/.gitignore b/.gitignore index 18849b336..333a4c41d 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,6 @@ .idea/encodings.xml .idea/compiler.xml .idea/jarRepositories.xml -.idea/deploymentTargetDropDown.xml ###Android### diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index fda0382b0..000000000 --- a/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml old mode 100644 new mode 100755 index be3cb480c..085a74d04 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -3,7 +3,4 @@ - - \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml deleted file mode 100644 index f8051a6f9..000000000 --- a/.idea/migrations.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml old mode 100644 new mode 100755 index 3097af773..1d3e3ba73 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,3 +1,4 @@ + - + From 8cca5892e5109cdfd500a43b69dd40653ff1667e Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Thu, 18 Apr 2024 14:02:10 +0200 Subject: [PATCH 17/22] Fix upload of files >2GB to WebDAV Fixes #531 --- .../network/InputStreamSourceBasedRequestBody.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/InputStreamSourceBasedRequestBody.kt b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/InputStreamSourceBasedRequestBody.kt index 51db86cff..202615641 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/InputStreamSourceBasedRequestBody.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/InputStreamSourceBasedRequestBody.kt @@ -13,7 +13,17 @@ internal class InputStreamSourceBasedRequestBody private constructor(private val @Throws(IOException::class) override fun contentLength(): Long { - return inputStream.available().toLong() + val availableBytes = inputStream.available() + /** + * inputStream.available() is an int and if the file to upload is > int.max it will overflow to 0. + * In this case we set contentLength to -1, which is fine, it just means the length is unknown. + * If inputStream.available() is actually 0, it does no harm either because we are not uploading a byte. + */ + return if (availableBytes != 0) { + availableBytes.toLong() + } else { + -1 + } } override fun contentType(): MediaType? { From cd22b4b5d32e0acfbd4444f09b87682ed8b43d1d Mon Sep 17 00:00:00 2001 From: Luca Fantini Date: Thu, 18 Apr 2024 18:06:46 +0200 Subject: [PATCH 18/22] Removed patchAsync request when not useful for Onedrive --- .../data/cloud/onedrive/OnedriveImpl.kt | 61 ++++++++++--------- .../data/cloud/webdav/network/WebDavClient.kt | 1 - 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt index 3bb41afb1..a6ce6b09c 100644 --- a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt +++ b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveImpl.kt @@ -34,7 +34,6 @@ import org.cryptomator.domain.usecases.cloud.DataSource import org.cryptomator.domain.usecases.cloud.DownloadState import org.cryptomator.domain.usecases.cloud.Progress import org.cryptomator.domain.usecases.cloud.UploadState -import org.cryptomator.util.Optional import org.cryptomator.util.SharedPreferencesHandler import org.cryptomator.util.file.LruFileCacheUtil import org.cryptomator.util.file.LruFileCacheUtil.Companion.retrieveFromLruCache @@ -206,8 +205,9 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client } progressAware.onProgress(Progress.completed(UploadState.upload(file))) return try { - val lastModifiedDate = getLastModifiedDateTime(result.get().fileSystemInfo) - OnedriveCloudNodeFactory.file(file.parent, result.get(), lastModifiedDate) + val driveItem: DriveItem = result.get() + val lastModifiedDate = getLastModifiedDateTime(driveItem) ?: Date() + OnedriveCloudNodeFactory.file(file.parent, driveItem, lastModifiedDate) } catch (e: ExecutionException) { throw FatalBackendException(e) } catch (e: InterruptedException) { @@ -215,10 +215,9 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client } } - private fun getLastModifiedDateTime(fileSystemInfo: FileSystemInfo?): Date { - return fileSystemInfo?.lastModifiedDateTime.let { date -> - Date.from(date?.toInstant()) - }?: Date.from(Date().toInstant()) + private fun getLastModifiedDateTime(driveItem: DriveItem): Date? { + return driveItem.fileSystemInfo?.lastModifiedDateTime?.let { clientDate -> Date.from(clientDate.toInstant()) } + ?: driveItem.lastModifiedDateTime?.let { serverDate -> Date.from(serverDate.toInstant()) } } @Throws(NoSuchCloudFileException::class) @@ -239,14 +238,13 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client .putAsync(CopyStream.toByteArray(it)) // .whenComplete { driveItem, error -> run { - if (error == null) { - val diffItem = DriveItem() - diffItem.fileSystemInfo = FileSystemInfo() - setLastModifiedDateTime(diffItem.fileSystemInfo, data.modifiedDate(context)) - drive(parentNodeInfo.driveId) // - .items(driveItem.id!!) // - .buildRequest(conflictBehaviorOption) // - .patchAsync(diffItem) // + val modifiedDate = data.modifiedDate(context) + if (error != null) { + result.completeExceptionally(error) + return@whenComplete + } + if (modifiedDate.isPresent) { + patchAsyncLastModifiedDate(parentNodeInfo, driveItem, modifiedDate.get()) .whenComplete { driveItem, error -> if (error == null) { progressAware.onProgress(Progress.completed(UploadState.upload(file))) @@ -256,10 +254,11 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client result.completeExceptionally(error) } } - } else { - result.completeExceptionally(error) + } else { // current date is the default, no need to patch() + progressAware.onProgress(Progress.completed(UploadState.upload(file))) + result.complete(driveItem) + cacheNodeInfo(file, driveItem) } - } } } catch (e: IOException) { @@ -269,13 +268,27 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client } ?: throw FatalBackendException("InputStream shouldn't bee null") } + private fun patchAsyncLastModifiedDate(parentNodeInfo: OnedriveIdCache.NodeInfo, driveItem: DriveItem, modifiedDate: Date): CompletableFuture { + val diffItem = DriveItem() + diffItem.fileSystemInfo = FileSystemInfo() + diffItem.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(modifiedDate.toInstant(), ZoneId.systemDefault()) + return drive(parentNodeInfo.driveId) // + .items(driveItem.id!!) // + .buildRequest() // + .patchAsync(diffItem) // + } + @Throws(IOException::class, NoSuchCloudFileException::class) private fun chunkedUploadFile(file: OnedriveFile, data: DataSource, progressAware: ProgressAware, result: CompletableFuture, conflictBehaviorOption: Option, size: Long) { val parentNodeInfo = requireNodeInfo(file.parent) val props = DriveItemUploadableProperties() - props.fileSystemInfo = FileSystemInfo() - setLastModifiedDateTime(props.fileSystemInfo, data.modifiedDate(context)) + val modifiedDate = data.modifiedDate(context) + + if (modifiedDate.isPresent) { + props.fileSystemInfo = FileSystemInfo() + props.fileSystemInfo!!.lastModifiedDateTime = OffsetDateTime.ofInstant(modifiedDate.get().toInstant(), ZoneId.systemDefault()) + } drive(parentNodeInfo.driveId) // .items(parentNodeInfo.id) // @@ -304,14 +317,6 @@ internal class OnedriveImpl(private val cloud: OnedriveCloud, private val client } ?: throw FatalBackendException("Failed to create upload session, response is null") } - private fun setLastModifiedDateTime(fileSystemInfo: FileSystemInfo?, modifiedDate: Optional) { - fileSystemInfo?.lastModifiedDateTime = modifiedDate.map { date -> - OffsetDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()) - }.orElseGet { - OffsetDateTime.ofInstant(Date().toInstant(), ZoneId.systemDefault()) - } - } - @Throws(BackendException::class, IOException::class) fun read(file: OnedriveFile, encryptedTmpFile: File?, data: OutputStream, progressAware: ProgressAware) { progressAware.onProgress(Progress.started(DownloadState.download(file))) diff --git a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt index 3da565a6b..1bdf3249e 100644 --- a/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt +++ b/data/src/main/java/org/cryptomator/data/cloud/webdav/network/WebDavClient.kt @@ -12,7 +12,6 @@ import org.cryptomator.domain.exception.NotFoundException import org.cryptomator.domain.exception.ParentFolderDoesNotExistException import org.cryptomator.domain.exception.TypeMismatchException import org.cryptomator.domain.exception.UnauthorizedException -import org.cryptomator.util.Optional import org.xmlpull.v1.XmlPullParserException import java.io.ByteArrayInputStream import java.io.IOException From 91478b86aba58c28b7dae36d207866d817566a5f Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Thu, 18 Apr 2024 22:28:22 +0200 Subject: [PATCH 19/22] Fix file overwrite when fast return to Cryptomator Fixes #530 --- .../presentation/presenter/BrowseFilesPresenter.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/presentation/src/main/java/org/cryptomator/presentation/presenter/BrowseFilesPresenter.kt b/presentation/src/main/java/org/cryptomator/presentation/presenter/BrowseFilesPresenter.kt index 29a8f2f31..fa9e235f6 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/presenter/BrowseFilesPresenter.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/presenter/BrowseFilesPresenter.kt @@ -538,8 +538,9 @@ class BrowseFilesPresenter @Inject constructor( // Uri.fromFile(fileUtil.getLegacyFileForMicrosoftWorkaround(cloudFile)) } else { fileUtil.contentUriFor(cloudFile) - }.also { - openedCloudFile = cloudFile + } + openedCloudFile = cloudFile + uriToOpenedFile?.let { openedCloudFileMd5 = calculateDigestFromUri(it) viewFileIntent.setDataAndType(it, mimeTypes.fromFilename(cloudFile.name)?.toString()) viewFileIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION) From 4dbcdb8b0ea9bf252bbf94dcb9be79b65fcce1a5 Mon Sep 17 00:00:00 2001 From: taglioIsCoding Date: Fri, 19 Apr 2024 15:05:04 +0200 Subject: [PATCH 20/22] Fixed nullable last modified date for OneDrive --- .../data/cloud/onedrive/OnedriveCloudNodeFactory.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveCloudNodeFactory.kt b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveCloudNodeFactory.kt index 434613e76..714a21984 100644 --- a/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveCloudNodeFactory.kt +++ b/data/src/apiKey/java/org/cryptomator/data/cloud/onedrive/OnedriveCloudNodeFactory.kt @@ -74,8 +74,7 @@ internal object OnedriveCloudNodeFactory { } private fun lastModified(item: DriveItem): Date? { - return item.fileSystemInfo?.let { - return Date.from(it.lastModifiedDateTime?.toInstant()) - } + return item.fileSystemInfo?.lastModifiedDateTime?.let { clientDate -> Date.from(clientDate.toInstant()) } + ?: item.lastModifiedDateTime?.let { serverDate -> Date.from(serverDate.toInstant()) } } } From c768b88cef29dafaa78af2eb0493e5a70c49fe4f Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Mon, 22 Apr 2024 19:37:46 +0200 Subject: [PATCH 21/22] Remove unused exception and fix log message --- .../SSLHandshakePreAndroid5UpdateCheckException.java | 11 ----------- .../presentation/exception/ExceptionHandlers.kt | 2 -- .../presentation/presenter/VaultListPresenter.kt | 9 ++------- 3 files changed, 2 insertions(+), 20 deletions(-) delete mode 100644 domain/src/main/java/org/cryptomator/domain/exception/update/SSLHandshakePreAndroid5UpdateCheckException.java diff --git a/domain/src/main/java/org/cryptomator/domain/exception/update/SSLHandshakePreAndroid5UpdateCheckException.java b/domain/src/main/java/org/cryptomator/domain/exception/update/SSLHandshakePreAndroid5UpdateCheckException.java deleted file mode 100644 index 9cbd64da4..000000000 --- a/domain/src/main/java/org/cryptomator/domain/exception/update/SSLHandshakePreAndroid5UpdateCheckException.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.cryptomator.domain.exception.update; - -import org.cryptomator.domain.exception.BackendException; - -public class SSLHandshakePreAndroid5UpdateCheckException extends BackendException { - - public SSLHandshakePreAndroid5UpdateCheckException(final String message, javax.net.ssl.SSLHandshakeException e) { - super(message, e); - } - -} diff --git a/presentation/src/main/java/org/cryptomator/presentation/exception/ExceptionHandlers.kt b/presentation/src/main/java/org/cryptomator/presentation/exception/ExceptionHandlers.kt index 0062fcf52..a6d26333f 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/exception/ExceptionHandlers.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/exception/ExceptionHandlers.kt @@ -17,7 +17,6 @@ import org.cryptomator.domain.exception.license.LicenseNotValidException import org.cryptomator.domain.exception.license.NoLicenseAvailableException import org.cryptomator.domain.exception.update.GeneralUpdateErrorException import org.cryptomator.domain.exception.update.HashMismatchUpdateCheckException -import org.cryptomator.domain.exception.update.SSLHandshakePreAndroid5UpdateCheckException import org.cryptomator.domain.exception.vaultconfig.MissingVaultConfigFileException import org.cryptomator.domain.exception.vaultconfig.UnsupportedMasterkeyLocationException import org.cryptomator.domain.exception.vaultconfig.VaultConfigLoadException @@ -52,7 +51,6 @@ class ExceptionHandlers @Inject constructor(private val context: Context, defaul staticHandler(NoLicenseAvailableException::class.java, R.string.dialog_enter_license_no_content) staticHandler(HashMismatchUpdateCheckException::class.java, R.string.error_hash_mismatch_update) staticHandler(GeneralUpdateErrorException::class.java, R.string.error_general_update) - staticHandler(SSLHandshakePreAndroid5UpdateCheckException::class.java, R.string.error_general_update) staticHandler( MissingVaultConfigFileException::class.java, String.format( ResourceHelper.getString(R.string.error_vault_config_file_missing_due_to_format_999), diff --git a/presentation/src/main/java/org/cryptomator/presentation/presenter/VaultListPresenter.kt b/presentation/src/main/java/org/cryptomator/presentation/presenter/VaultListPresenter.kt index ec397f7fc..ddab5bd29 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/presenter/VaultListPresenter.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/presenter/VaultListPresenter.kt @@ -18,7 +18,6 @@ import org.cryptomator.domain.CloudType import org.cryptomator.domain.Vault import org.cryptomator.domain.di.PerView import org.cryptomator.domain.exception.license.LicenseNotValidException -import org.cryptomator.domain.exception.update.SSLHandshakePreAndroid5UpdateCheckException import org.cryptomator.domain.usecases.DoLicenseCheckUseCase import org.cryptomator.domain.usecases.DoUpdateCheckUseCase import org.cryptomator.domain.usecases.DoUpdateUseCase @@ -168,15 +167,11 @@ class VaultListPresenter @Inject constructor( // } override fun onError(e: Throwable) { - if (e is SSLHandshakePreAndroid5UpdateCheckException) { - Timber.tag("SettingsPresenter").e(e, "Update check failed due to Android pre 5 and SSL Handshake not accepted") - } else { - showError(e) - } + showError(e) } }) } else { - Timber.tag("VaultListPresenter").i("Update check not started due to no internal connection") + Timber.tag("VaultListPresenter").i("Update check not started due to no internet connection") } } From 45f7d0e890ccbb892f7aeda0e6e9d3cc1b32d203 Mon Sep 17 00:00:00 2001 From: Cryptobot Date: Mon, 29 Apr 2024 14:19:07 +0200 Subject: [PATCH 22/22] New Crowdin updates (#496) New translations --- .../src/main/res/values-ar-rSA/strings.xml | 9 +- .../src/main/res/values-ba-rRU/strings.xml | 434 ++++++++++++++++++ .../src/main/res/values-be-rBY/strings.xml | 22 + .../src/main/res/values-bg-rBG/strings.xml | 206 +++++++++ .../src/main/res/values-ca-rES/strings.xml | 5 + .../src/main/res/values-cs-rCZ/strings.xml | 16 + .../src/main/res/values-da-rDK/strings.xml | 32 +- .../src/main/res/values-de-rDE/strings.xml | 14 +- .../src/main/res/values-fa-rIR/strings.xml | 40 ++ .../src/main/res/values-fil-rPH/strings.xml | 144 ++++++ .../src/main/res/values-fr-rFR/strings.xml | 6 +- .../src/main/res/values-hi-rIN/strings.xml | 119 +++++ .../src/main/res/values-hu-rHU/strings.xml | 29 ++ .../src/main/res/values-in-rID/strings.xml | 27 +- .../src/main/res/values-it-rIT/strings.xml | 12 +- .../src/main/res/values-ja-rJP/strings.xml | 24 +- .../src/main/res/values-ko-rKR/strings.xml | 60 ++- .../src/main/res/values-mk-rMK/strings.xml | 8 + .../src/main/res/values-mr-rIN/strings.xml | 37 ++ .../src/main/res/values-nb-rNO/strings.xml | 6 +- .../src/main/res/values-nl-rNL/strings.xml | 2 +- .../src/main/res/values-pl-rPL/strings.xml | 4 + .../src/main/res/values-pt-rBR/strings.xml | 50 +- .../src/main/res/values-pt-rPT/strings.xml | 234 ++++++++++ .../src/main/res/values-ro-rRO/strings.xml | 7 +- .../src/main/res/values-ru-rRU/strings.xml | 14 +- .../src/main/res/values-sk-rSK/strings.xml | 4 + .../src/main/res/values-sl-rSI/strings.xml | 9 + .../src/main/res/values-sv-rSE/strings.xml | 4 + .../src/main/res/values-ta-rIN/strings.xml | 15 + .../src/main/res/values-tr-rTR/strings.xml | 24 +- .../src/main/res/values-uk-rUA/strings.xml | 152 +++--- .../src/main/res/values-vi-rVN/strings.xml | 190 +++++++- .../src/main/res/values-zh-rCN/strings.xml | 2 +- .../src/main/res/values-zh-rHK/strings.xml | 4 + .../src/main/res/values-zh-rTW/strings.xml | 4 + 36 files changed, 1797 insertions(+), 172 deletions(-) create mode 100644 presentation/src/main/res/values-ba-rRU/strings.xml create mode 100644 presentation/src/main/res/values-mr-rIN/strings.xml diff --git a/presentation/src/main/res/values-ar-rSA/strings.xml b/presentation/src/main/res/values-ar-rSA/strings.xml index f5120c8ed..2cf153996 100644 --- a/presentation/src/main/res/values-ar-rSA/strings.xml +++ b/presentation/src/main/res/values-ar-rSA/strings.xml @@ -66,7 +66,7 @@ أنقر هنا لإنشاء خزينة جديدة تم تغيير كلمة المرور بنجاح - مخزن + الخزينة اختر مِلَفَ المفتاحِ الرئيسِ ضع هنا اسم المخزن: %1$s @@ -202,6 +202,8 @@ تلميحات الأمان الإصدارة إعدادات متقدمة + العمل على فتح ملفات مايكروسوفت + فتح الملفات في تطبيقات مايكروسوفت مع السماح بالتعديل تسريع فتح القفل تنزيل إعدادات المخزن في الخلفية أثناء مطالبته بإدخال كلمة المرور أو البصمة أبقه فاتح @@ -232,7 +234,7 @@ تحتوي برامج ملكية خاصة. التبديل من أو إلى مستودع تطبيقات F-Droid الرئيسي يستلزم إعداد نسخة جديد من التطبيق. - الغاء + إلغاء افتح كلمة المرور القديمة كلمة المرور الجديدة @@ -309,6 +311,7 @@ في هذا الوضع، يمكن كتابة البيانات الحساسة إلى ملف تسجيل على جهازك (على سبيل المثال أسماء الملفات والمسارات). كلمة المرور، ملفات تعريف الارتباط، إلخ. مستبعدة صراحة.\n\nتذكر تعطيل وضع التصحيح في أقرب وقت ممكن. انتباه تفعيل + بسبب خطأ في تطبيقات مايكروسوفت، يجب مشاركة الملف المراد تعديله مع هذه التطبيقات في مجلد وسائط عام على جهازك. بعد استئناف Cryptomator ، يتم حذف هذا الملف مرة أخرى، ولكن Cryptomator لا يمكنه التأثير على ما حدث لهذا الملف في هذه الأثناء. تأكد من أنك على علم بهذا السلوك عند تفعيل هذا الخيار. سيتم تطبيق هذا فقط على ملفات مايكروسوفت.\n\nسيتم إعادة تشغيل Cryptomator بعد التفعيل. هذا الإعداد هو ميزة أمنية ويمنع التطبيقات الأخرى من استدراج المستخدمين لفعل أشياء لا يريدون القيام بها.\n\nبتعطيليها, أنت تؤكد أنك على علم بالمخاطر. انتباه تعطيل @@ -353,6 +356,7 @@ إذا كنت ترغب في إضافة حساب pCloud جديد، انقر على هذا الرابط www.pcloud. om، ثم قم بتسجيل الخروج من الحساب الحالي و بعدها انقر مرة أخرى على \'+\' في هذا التطبيق لإنشاء اتصال سحابي جديد. Cryptomator يحتاج صلاحية الوصول إلي التخزين ليستطيع استعمال الخزائن المحلية Cryptomator يحتاج صلاحية الوصول إلي التخزين ليستطيع تحميل الصور تلقائيا + Cryptomator يحتاج إلى صَلاحِيَة إظهار الإشعارات لعرض حالة المخزن على سبيل المثال @@ -396,6 +400,7 @@ المجلد المحدد للرفع لم يعد متوفرًا. اذهب إلى الإعدادات واختيار واحد جديد تم قفل المخزن اثناء الرفع، الرجاء قم بفتحه لمتابعة الرفع المخزن المحدد للتحميل التلقائي لم يعد موجودا. + انقر لتحديث المصادقة. فتح ملف قابل للكتابة تظل الخزنة مفتوحة حتى الانتهاء من التعديل تم تثبيت آخر إصدارة diff --git a/presentation/src/main/res/values-ba-rRU/strings.xml b/presentation/src/main/res/values-ba-rRU/strings.xml new file mode 100644 index 000000000..091efd01b --- /dev/null +++ b/presentation/src/main/res/values-ba-rRU/strings.xml @@ -0,0 +1,434 @@ + + + + Шифрла + + Хата килеп сыҡты + Аутентиклау хатаһы + Аутентиклау хатаһы, %1$s менән инегеҙ + Селтәр бәйләнеше юҡ + Серһүҙ дөрөҫ түгел + Файл йәки папка бар инде. + Һаҡлағыстың терәкһеҙ версияһы: %1$s. Был һаҡлағыс Cryptomator-ҙың башҡа версияһы менән яһалған. + %1$s файлы һаҡлағыс папкаһында юҡ. Файлдың болоттағы һаҡлағыс папкаһында булыуын тикшерегеҙ. + Һаҡлаығыс бар инде. + Файл юҡ. + Һаҡлағыс бикләнгән. + Болот бар инде. + Был файлды аса алған ҡушымтаны күсереп алығыҙ. + Сервер табылманы. + Йыһаз көйләүҙәрен асығыҙ һәм экран биген ҡул менән көйләгеҙ + Экспортлау уңышһыҙ булды. Файл исемдәренән махсус билдәләрҙе алып ташлағыҙ һәм яңынан экспортлап ҡарағыҙ. + Махсус билдәләр булырға тейеш түгел. + Файл исемдәрендә махсус билдәләр була алмай. + Һаҡлағыс исемендә махсус билдәләр була алмай. + Яңыртыу тикшереүе уңышһыҙ булды. Дөйөм хата килеп сыҡты. + Яңыртыу тикшереүе уңышһыҙ булды. Иҫәпләнгән хеш тейәлгән файл менән тап килмәй + Яңыртыу тикшереүе уңышһыҙ булды. Интернет бәйләнеше юҡ. + WebDAV серһүҙ шифрын асып булманы. Зинһар, көйләүҙәрҙә ҡабаттан өҫтәгеҙ + Google Play сервистары ҡуйылмаған + Биометрик аутентиклау өҙөлдө + Тәғәйенләнгән %1$s версияһы %2$s версияһынан айырала + %1$s менән %2$s тап килмәй + Һаҡлағыс конфигурацияһын йөкләгәндә дөйөм хата + Cryptomator программаһына кире күскәндән һуң урындағы файл юҡ инде. Буласаҡ үҙгәрештәр кире болотҡа күсерелә алмай. + Бындай bucket юҡ + Ирекле Masterkey урыны терәкләнмәй + F-Droid ҡушымтаһы менән бәйләнешкә инеп булманы. Ҡуйылмағанмы? + + + Урындағы һаҡлағыс + + + Файлдарҙы экспортлау өсөн Cryptomator-ға һаҡлағысҡа инеү рәхсәте кәрәк + Файлдарҙы тейәү өсөн Cryptomator-ға һаҡлағысҡа инеү рәхсәте кәрәк + Файлдарҙы уртаҡлашыу өсөн Cryptomator-ға һаҡлағысҡа инеү рәхсәте кәрәк + Cryptomator был урынға инеү рөхсәтен юғалтҡан. Рөхсәтте тергеҙеү өсөн был папканы ҡабаттан һайлағыҙ. + Көйләүҙәр + Эҙлә + Алдағы + Киләһе + Теҙеү + А - Я + Я - А + Яңылар тәүҙә + Иҫкеләр тәүҙә + Ҙурҙар тәүҙә + Бәләкәйҙәр тәүҙә + Артабан уҡыу + Болот исемлектә юҡмы? + + + Cryptomator-ға өҫтә + Яңы һаҡлағыс яһау + Булған һаҡлағыс өҫтәү + Алып ташлау + Яңы һаҡлағыс яһау өсөн бында баҫығыҙ + Серһүҙ уңышлы үҙгәртелде + + Һаҡлағыс + Masterkey файлын һайлағыҙ + Бында ҡуйығыҙ + Һаҡлағыс исеме: %1$s + + %2$d күсереләсәк урын + + Күсер + Буш папка + %1$s элек үҙгәртелгән + Уртаҡлашыу + Тәғәйен урын һайлау + Һайла + Уртаҡлашырлыҡ бер нәмә лә юҡ + %1$s каталогына өҫтәү + Папка өҫтәү + Текст файлы өҫтәү + Файл тейәү + Файлдар + Файл экспортланды + Файлдар экспортланды + Экспортланасаҡ бер нәмә лә юҡ + Күсереп алыу каталогын яһау булманы + Уртаҡлаш + Исемен үҙгәрт + Төҙәт + Экспортла + Юй + Асыу өсөн… + Элементтар һайлағыҙ + %1$d һайланды + Һайла + Барыһын да һайла + Яңырт + Бәйләнеш юҡ + Ҡабатла + + Уңышлы һаҡланды + + %1$s һаҡланасаҡ урын… + текст + файл + файлдар + Файл исемдәре ҡабатланмаҫҡа тейеш, дубликаттарҙың исемдәрен үҙгәртегеҙ. + Һаҡлау урыны + Һаҡла + Шифрлау тамамланды + + Болот хеҙмәте + + Урын һайлағыҙ + Урын өҫтәү өсөн бында баҫығыҙ + Сервер WebDAV менән яраҡлы түгел + Каталогтарҙы асыу терәге булған файл менеджеры табылманы + + URL + Ҡулланыусы исеме + Серһүҙ + Бәйләнеш + URL буш була алмай. + URL дөрөҫ түгел. + Ҡулланыусы исеме буш була алмай. + Серһүҙ буш була алмай. + + Күренәсәк исем + Инеү асҡысы (Access Key) + Серле асҡыс (Secret Key) + Булған кәрзин (Bucket) + Ос нөктә (Endpoint) + Регион + Күренәсәк исем юлы буш була алмай + Инеү асҡысы юлы буш була алмай + Серле асҡыс юлы буш була алмай + Кәрзин юлы буш була алмай + Ос нөктә йәки регион юлы буш була алмай + + Һаҡлағыс исеме юлы буш була алмай. + Һаҡлағыс исеме + Яһа + + Серһүҙ ҡуйыу + Серһүҙ ҡабатлап яҙылған серһүҙ менән тап килмәй. + Башҡарылды + МӨҺИМ: әгәр серһүҙҙе онотһағыҙ, уны тергеҙеү ысулы юҡ. + Серһүҙҙе ҡабатлап яҙығыҙ + Һаҡлағыс булдырыу өсөн бик көсһөҙ + Көсһөҙ + Уртаса + Көслө + Бик көслө + + Дөйөм + Болот хеҙмәттәре + Биометрик аутентиклау + Биометрик аутентиклау ғәмәлдә + Йөҙ менән асыу (булған осраҡта) + Ҡушымта ябылған саҡта бикләү + Яҙылғандарҙы тотоп алыуҙы һәм ялған арайөҙ күрһәтеүҙе тыйыу + Скриншоттарҙы тыйыу + Ҡушымта эсендә һәм яңыраҡ ҡулланылғандар исемлегендә скриншоттарҙы тыйыу + Эҙлә + Тере эҙләү + Һорау яҙғанда эҙләү һөҙөмтәләрен яңыртып барыу + Glob ҡалыбы менән эҙләү + Alice.*.jpg кеүек glob ҡалыбын ҡулланыу + Автоматик бикләү + Бикләү ваҡыты + Экран һүндерелгәндә + Автоматик фото тейәү + Тейәү өсөн һаҡлағыс һайлау + Ғәмәлдә + Һүрәттәрҙе артҡы планда тотоп барырға һәм һаҡлағыс асылған ваҡытта тейәүҙе башларға + Тиҙ тейәү + Һаҡлағыс асыҡ саҡта тура тейәргә + WIFI аша ғына тейәү + Видео тейәү + Автоматик тейәлгән файлдар урыны… + Cryptomator сайты + Twitter селтәрендә + Facebook селтәрендә + Хоҡуҡи мәғлүмәт + Рөхсәтнамәләр + Рөхсәтнамә шарттары + Ярҙам + Ярҙам һорау + Төҙөкләндереү режимы + Журнал файлын ебәр + Ебәреү уңышһыҙ булды + Хәүефһеҙлек кәңәштәре + Версия + Өҫтәмә көйләүҙәр + Microsoft файлдарын асыуҙың урау юлдары + Microsoft ҡушымталарында файлдарҙы яҙыу рөхсәте менән асыу + Бикте асыуҙы тиҙләтеү + Серһүҙ йәки биометрик таныу һоралған ваҡытта һаҡлағыс конфигурацияһын артҡы планда күсереп алырға + Биге асыҡ килеш тот + Файл төҙәткәндә һаҡлағысты асыҡ килеш тоторға + + OneDrive бәйләнештәре + WebDAV бәйләнештәре + pCloud бәйләнештәре + S3 бәйләнештәре + Урындағы һаҡлау урындары + Инеү + Сығыу + + + %1$s аутентикланманы. + pCloud иҫәп яҙыуы мәғлүмәттәрен яңыртыу + + Cryptomator варианттары + Төп F-Droid репозиторийы + API асҡыстары кәрәк булғанлыҡтан төшөрөп ҡалдырылды. + Ҡор + Cryptomator F-Droid репозиторийы + Проприетар бәйлелек булғанлыҡтан төшөрөп ҡалдырылды. + F-Droid ҡушымтаһына Cryptomator репозиторийы өҫтәү. + Өҫтәү + F-Droid аша Cryptomator ҡуйыу.\n\"Табылманы\" хатаһы күренгән ваҡытта F-Droid синхронлашыуының тамамланғанын көтөгөҙ. + Сайт + Эсендә проприетар бәйлелектәр бар. + Төп F-Droid репозиторийы вариантындан йәки вариантына күсер өсөн ҡушымтаны яңынан ҡуйыу кәрәк. + + Кире ал + Биген ас + Иҫке серһүҙ + Яңы серһүҙ + Серһүҙҙе үҙгәрт + Иҫке серһүҙ буш була алмай. + Яңы серһүҙ буш була алмай. + Яңы серһүҙ ҡабатлап яҙылған серһүҙ менән тап килмәй. + + %1$s һаҡлағысы табылманы + Һаҡлағыстың исеме үҙгәртелгән, күсерелгән йәки юйылған. Дауам итер өсөн уны исемлектән алып ташлағыҙ һәм яңынан өҫтәгеҙ. Хәҙер алып ташларғамы? + Алып ташлау + Файл бар инде + Алмаштыр + \'%1$s\' исемле файл бар инде. + Булғандарҙы үт + Барыһын да алмаштыр + Булғандарҙы алмаштыр + Алмаштыр + \'%1$s\' исемле файл бар инде. Алмаштырырға теләйһегеҙме? + Бөтә файлдар ҙа бар инде. Уларҙы алмаштырырға теләйһегеҙме? + %1$d файлдары бар инде. Уларҙы алмаштырырға теләйһегеҙме? + Файлды алмаштырырғамы? + Файлдарҙы алмаштырырғамы? + Файлдарҙы уртаҡлашып булмай + Ҡоролған һаҡлағысығыҙ юҡ. Тәүҙә Cryptomator ҡушымтаһы менән яңы һаҡлағыс яһағыҙ. + Ярай + Яңы һаҡлағыс яһа + %1$s файлын асып булмай + Был файлды аса торған ҡушымта күсереп алығыҙ. Әллә йыһазығыҙға һаҡларға теләйһегеҙме? + Һаҡлағыс исемен үҙгәртеү + Папка исемен үҙгәртеү + Файл исемен үҙгәртеү + Һаҡланмаған үҙгәртеүҙәрегеҙ бар + Үҙгәртеүҙәрҙе һаҡламайынса сығырға теләйһегеҙме? + Һаҡламаҫҡа + Файл исеме + text.txt + Был һаҡлағысты ысындан алып ташларға теләйһегеҙме? + Был ғәмәл һаҡлағысты исемлектән генә алып ташлай, уны физик рәүештә юймай. + Тейәү… + %2$d файлдан %1$d файл + Экспортлау (%1$d/%2$d) + Көтөгөҙ зинһар… + Папка яһау бара… + Текст файлы яһау бара… + Аутентиклау бара… + Исемен үҙгәртеү бара… + Юйыу бара… + Һаҡлағыстың биген сисеү бара… + Серһүҙҙе үҙгәртеү бара… + Һаҡлағыс яһау бара… + Тейәү бара… + Күсереп алыу бара… + Шифрлау бара… + Шифрын асыу бара… + Күсереү бара… + Биклә + Ғәмәлдә булмаған SSL сертификаты + SSL сертификаты ғәмәлдә түгел. Уға һәр хәлдә ышанырға теләйһегеҙме? + Тулыраҡ мәғлүмәт + Хәүефһеҙлек рискы тыуҙырыуы ихтимал. Ни эшләгәнемде беләм. + Батарея оптималләштереүҙе һүндереү + Артҡы планда эшләмәйенсә яңы һүрәттәр һәм видеолар алыу өсөн батарея оптималләштереүҙе һүндереү кәрәк. Ләкин борсолмағыҙ, %1$s күп энергия ҡулланмай.\n\nУны ҡулланыу өсөн, \'Оптималләштерелмәгән\' тигәнде \'Бөтә ҡушымталар\' тип үҙгәртегеҙ, %1$s тигәнде һайлағыҙ һәм ошо диалогта \'%2$s\' тигәнде ҡуйып, \'Оптималләштермәҫкә\' тигәнде һайлағыҙ. + Башҡаса һорамаҫҡамы? + HTTP ҡулланыу хәүефһеҙ түгел. Уның урынына HTTPS ҡулланырға кәңәш итәбеҙ. Хәүефтәрҙе белһәгеҙ, HTTP менән дауам итә алаһығыҙ. + HTTPS ҡулланыу + HTTPS ҡулланырғамы? + Экран биге ҡуйылмаған. Иҫәп яҙмаһы мәғлүмәттәрен ышаныслы һаҡлар өсөн ҡалып йәки серһүҙ ҡуйығыҙ. + Экран биге ҡуйырғамы? + Экран биге ҡуйыу + Системала нигеҙ аутентиклау ҡоролмаған + Был хеҙмәттән файҙаланыу өсөн, кәм тигәндә, бер бармаҡ эҙен йәки йөҙҙө теркәгеҙ. + Был режимда нескә мәғлүмәттәрҙең (мәҫәлән, файл исемдәре, юлдар) йыһаздың журнал файлына яҙылыуы ихтимал. Серһүҙҙәр, cookie-файлдар һ.б. тура алып ташлана.\n\nЯйлау (debug) режимын тиҙ арала ябырға онотмағыҙ. + Иғтибар + Ғәмәлгә индер + Microsoft ҡушымталарындағы хата арҡаһында, төҙәтеләсәк файл йыһазығыҙҙағы дөйөм медиа папкала был ҡушымталар араһында уртаҡлашылырға тейеш. Cryptomator кире асылғандан һуң, уртаҡ файл яңынан юйыла, әммә Cryptomator был файл менән ни булыуына йоғонто яһай алмай. Был параметрҙы активлаштырғанда был хәл тураһында белеүегеҙҙе тикшерегеҙ. Был Microsoft файл төрҙәренә генә ҡағыла.\n\nАктивлаштырғандан һуң Cryptomator яңынан асыла. + Был көйләү хәүефһеҙлек үҙенсәлеге булып тора һәм ҡулланыусыларҙы башҡа ҡушымталарҙан алдап, улар теләмәгән эштәрҙе эшләтеүҙән һаҡлай.\n\nҺүндергән ваҡытта хәүеф-янауҙар тураһында белеүегеҙҙе раҫлайһығыҙ. + Иғтибар + Һүндер + Ҡушымта йәшерелгән + Икенсе ҡушымта Cryptomator өҫтөндә нимәлер күрһәтә (мәҫәлән, зәңгәр яҡтылыҡ фильтры йәки төнгө режим ҡушымтаһы). Хәүефһеҙлек сәбәптәре буйынса Cryptomator һүндерелгән.\n\n Cryptomator нисек асыла + Яп + %1s болото өсөн һаҡлағыстарҙы яңынан өҫтәү + Был ҡушымта версияһына күскәндә ҡушымтанан түбәндәге һаҡлағыстарҙы алып ташларға кәрәк:\n%2s \n\nБыл һаҡлағыстар болоттан түгел, ә тик ошо ҡушымтанан ғына алына. Уңайһыҙлыҡтар өсөн ғәфү итегеҙ һәм улар менән эшләүҙе дауам итер өсөн һаҡлағыстарҙы яңынан өҫтәгеҙ. + Һаҡлағыс болот бәйләнешенең тамыр папкаһы + Яңы болот бәйләнеше булдырығыҙ, унда һаҡлағысҡа тамыр папка итеп өҫтәр өсөн был папканың кәмендә өҫ папкаһын һайлағыҙ. + Был көйләү хәүефһеҙлек үҙенсәлеге булып тора һәм ҡулланыусыларҙы башҡа ҡушымталарҙан алдап, улар теләмәгән эштәрҙе эшләтеүҙән һаҡлай.\n\nҺүндергән ваҡытта хәүеф-янауҙар тураһында белеүегеҙҙе раҫлайһығыҙ. + Был болот бәйләнешен ысындан алып ташларға теләйһегеҙме? + Был ғәмәл болот бәйләнешен һәм был болоттың бөтә һаҡлағыстарын алып ташлай. + %1$d элементты юйырғамы? + Был элементтарҙы ысындан да юйырға теләйһегеҙме? + Был файлды ысындан да юйырға теләйһегеҙме? + Был папканың бөтә эстәлеген юясаҡ. Был папканы ысындан да юйырға теләйһегеҙме? + Биометрик аутентиклау үҙенсәлеге ябылған + Асҡыс ғәмәлдән сығарылғанға күрә, биометрик аутентиклау һүндерелгән. Яңынан активлаштырыу өсөн Cryptomator көйләүҙәрен асығыҙ. + Ғәмәлдә булған рөхсәтнамә яҙығыҙ + Google Play Store ҡулланмайынса Cryptomator ҡуйыуығыҙҙы асыҡланыҡ. https://cryptomator.org/android/ сайтында һатып алып булған һәм ғәмәлдәге рөхсәтнамә яҙығыҙ. + Бирелгән рөхсәтнамә ғәмәлдә түгел. Уны дөрөҫ яҙғанығыҙҙы тикшерегеҙ. + Бирелгән асҡыс — ярҙамсы сертификаты. Ғәмәлдә булған рөхсәтнамә яҙығыҙ. + Рөхсәтнамә яҙылмаған. Ғәмәлдә булған рөхсәтнамә яҙығыҙ. + Сыҡ + Рөхсәтнамә раҫлау + Ғәмәлдәге рөхсәтнамә биргәнегеҙ өсөн рәхмәт %1$s. + Яңыртыу бар + Cryptomator-ҙы һуңғы версияға яңыртыу. ОК төймәһенә баҫҡандан һәм ҡушымта артҡы планда күсереп алынғандан һуң уны ҡуйыуығыҙҙы һораясаҡбыҙ. + Хәҙер яңырт + Күсереп алыу битен ас + Аҙаҡтан + Күсереп алыу бара + Cryptomator-ҙың һуңғы версияһын күсереп алыу бара + Был папка символик һылтанма + Был символик һылтанма аша күсә алмайһығыҙ + Артҡа + Папканың эстәлеген күсереп алып булмай + \'%1$s\' болот папкаһының ғәмәлдәге каталог файлы юҡ. Бәлки, папка икенсе йыһызда эшләнгән һәм әлегә тулыһынса болотҡа синхронлашмағандыр. Түбәндәге файл бармы-юҡмы икәнлеген болотығыҙҙа тикшерегеҙ: \n%2$s + Күрһәтерлек һүрәттәр юҡ… + \'%1$s\' иҫәп яҙыуы мәғлүмәттәре яңыртылды + Әгәр ҙә һеҙ яңы pCloud иҫәп яҙмаһы өҫтәргә ниәтләһәгеҙ, ошо url www.pcloud.com аша күсегеҙ, ағымдағы иҫәп яҙмаһынан сығығыҙ һәм яңы болот бәйләнеше булдырыу өсөн был ҡушымталағы \'+\' төймәһенә баҫығыҙ. + Урындағы һаҡлағыстарҙы ҡулланыу өсөн Cryptomator-ға һаҡлағысҡа инеү рәхсәте кәрәк + Автоматик фото тейәү өсөн Cryptomator-ға һаҡлағысҡа инеү рәхсәте кәрәк + Cryptomator-ға белдереү ебәреү хоҡуҡтары кәрәк. Мәҫәлән, һаҡлағыс торошо тураһында. + + + + 0 кБ + байт + кБ + МБ + ГБ + ТБ + + секунд + секунд + минут + минут + сәғәт + сәғәт + көн + көн + аҙна + аҙна + ай + ай + йыл + йыл + + Биометрик инеү + Биометрик иҫәп яҙмаһын ҡулланып ин + Һаҡлағыс серһүҙен ҡуллан + Файлдарҙы автоматик рәүештә тейәп булмай + + Биге асыҡ һаҡлағыс: %1$d + %1$s эсендә автоматик бикләү + Барыһын да биклә + Тейәүҙе туҡтат + Автоматик фото тейәү бара + %1d/%2d тейәлә + Автоматик фото тейәү тамамланды + Һаҡлағысҡа %1$d һүрәт тейәлде + Автомат фото тейәү уңышһыҙ булды + Тейәү ваҡытында дөйөм хата килеп сыҡты. + Тейәү өсөн һайланған папка хәҙер юҡ. Көйләүҙәргә барығыҙ һәм яңыһын һайлағыҙ + Тейәү ваҡытында һаҡлағыс бикләнгән, дауам итеү өсөн һаҡлағысты яңынан асығыҙ + Автоматик тейәү өсөн һайланған папка хәҙер юҡ. + Аутентиклауҙы яңыртыу өсөн баҫығыҙ. + Яҙып булған файл асыу + Төҙәтеү тамамланғансы һаҡлаҡыс бикләнмәй ҡала + Һуңғы версия ҡуйылған + Аутентиклау… + Кэш + Йыһазда шифрланған, һуңғы ваҡытта ҡулланылған файлдарҙы аҙаҡтан кире асҡанда ҡулланыр өсөн кэшларға + Дөйөм кэш күләме + Кэшты таҙартыу + Үҙгәрештәр ҡушымтаны ҡайтанан эшләтеп ебәргәндә ҡулланыласаҡ + Теркәлеүсе + %1$s + Яңыртыу тикшереү интервалы + Яңыртыуҙарҙы тикшереү + Һуңғы тикшереү %1$s + Болот башына кэш күләме + + Шунда уҡ + 1 минут + 2 минут + 5 минут + 10 минут + Бер ҡасан да + + 50 МБ + 100 МБ + 250 МБ + 500 МБ + 1 ГБ + 5 ГБ + + Күренеш + Автоматик (систамалағы һымаҡ) + Яҡты + Ҡараңғы + + Көндә бер тапҡыр + diff --git a/presentation/src/main/res/values-be-rBY/strings.xml b/presentation/src/main/res/values-be-rBY/strings.xml index 6d5bcf37c..0f6a51758 100644 --- a/presentation/src/main/res/values-be-rBY/strings.xml +++ b/presentation/src/main/res/values-be-rBY/strings.xml @@ -17,8 +17,13 @@ Сэрвер ня знойдзены. + Мясцовае сховішча + Cryptomator патрэбны доступ да сховішча, каб экспартаваць файлы + Cryptomator патрэбны доступ да сховішча, каб запампаваць файлы + Cryptomator патрэбны доступ да сховішча, каб абагуліць файлы + Cryptomator ня мае дазволу на доступ да гэтай мясцовасьці. Калі ласка, абяры гэту тэчку яшчэ раз, каб аднавіць дазвол. Налады Шукаць Папярэдні @@ -31,8 +36,10 @@ Найбуйнейшыя спачатку Найменшыя спачатку Чытаць далей + Воблаку ня мае ў сьпісе? + Дадаць да Cryptomator Стварыць новую скарбніцу Дадаць існуючую скрабніцу Выдаліць @@ -45,22 +52,37 @@ Імя скрабніцы: %1$s Перамясціць Пустая тэчка + зьменена %1$s таму Абагуліць з Абяры месцазнаходжанне Абраць Няма што абагуліць + Дадаць да %1$s + Стварыць тэчку + Стварыць тэкставы файл + Запампаваць файлы + Файлы + Файл экспартаваны + Файлы экспартаваныя + Няма чаго экспартаваць + Не атрымалася стварыць тэчку для спамповак Абагуліць Пераназваць Рэдагаваць Экспартаваць Выдаліць + Адчыніць праз… Вылучыць элементы %1$d вылучана Вылучыць Вылучыць усё + Абнавiць + Няма злучэння + Паспрабаваць ізноў Паспяхова захавана + Захаваць %1$s у… тэкст файл файлы diff --git a/presentation/src/main/res/values-bg-rBG/strings.xml b/presentation/src/main/res/values-bg-rBG/strings.xml index 8e9075e87..4d9d552e9 100644 --- a/presentation/src/main/res/values-bg-rBG/strings.xml +++ b/presentation/src/main/res/values-bg-rBG/strings.xml @@ -1,43 +1,249 @@ + Шифроване + Възникна грешка + Неуспешно удостоверяване + Удостоверяването е неуспешно, влезте чрез %1$s + Няма връзка с мрежата + Грешна парола + Файлът или папката вече съществува. + Хранилище версия %1$s не се поддържа. Това хранилище е създадено с различна версия на Cryptomator. + Файлът %1$s липсва в папката на хранилището. Уверете се, че файлът се намира в папката на хранилището в облака. + Хранилището вече съществува. + Файлът не съществува. + Хранилището е заключено. + Облакът вече съществува. + Изтеглете приложение, което може да отвори този файл. + Сървърът не е намерен. + Отворете настройките на устройството и ръчно задайте заключване на екрана + Експортирането е неуспешно. Премахнете специалните знаци от имената на файловете и опитайте отново. + Не са позволени специални знаци. + Имената на файловете не трябва да съдържат специални знаци. + Имената на хранилищата не трябва да съдържат специални знаци. + Неуспешна проверка за обновяване. Обща грешка. + Неуспешна проверка за обновяване. Изчисленият хеш не съвпада с качения файл + Неуспешна проверка за обновяване. Няма връзка с интернет. + Неуспешно декриптиране на паролата за WebDAV, добавете я отново от настройките + Услугите на Google Play не са инсталирани + Биометричното удостоверяване е прекъснато + Посочената версия в %1$s е различна от тази в %2$s + %1$s не съвпада с %2$s + Обща грешка при зареждане на настройките на хранилището + При връщане в Криптоматор местният файл вече не съществува. Евентуалните промени не могат да бъдат синхронизирани с облака. + Не съществува такъв bucket + Все още не се поддържа потребителско местоположение на главния ключ + Грешка при комуникацията с F-Droid. Приложението инсталирано ли е? + Местно хранилище + За да експортира файлове Криптоматор иска достъп до местното хранилище + За да качва файлове Криптоматор иска достъп до местното хранилище + За да споделя файлове Криптоматор иска достъп до местното хранилище + Криптоматор е загубил достъпа до тук. За да го възстановите изберете папката отново. + Настройки + Търсене + Назад Напред + Подредба + A - Я + Я - А + Първо новите + Първо старите + Първо големите + Първо малките + Повече + Облакът не е в списъка? + Добавяне в Криптоматор + Ново хранилище + Добавяне на съществуващо хранилище + Премахване + Докоснете за създаване на хранилище + Паролата е сменена Хранилище + Изберете файл на главен ключ + Постави тук + Име на хранилище: %1$s + + Преместване на %1$s в + Преместване на %2$d елемента в + + Преместване + Празна папка + променено преди %1$s + Споделяне чрез + Избор на дестинация + Избор + Няма нищо за споделяне + Добавяне към %1$s + Нова папка + Нов текстов файл + Качване на файлове + Файлове + Файлът е експортиран + Файловете са експортирани + Няма нищо за експортиране + Грешка при създаване на папка за изтегляне + Споделяне + Преименуване + Редактиране + Експортиране + Изтриване + Отваряне чрез… + Избор на елементи + %1$d избрани + Избиране + Избиране всички + Презареждане + Няма връзка + Повторен опит + Успешно запазено + Запазване на %1$s в… + текст + файл + файлове + Имената трябва да са уникални, преименувайте повтарящите се. + Местоположение за запазване + Запазване + Шифроването е завършено + Облачна услуга + Избор на местоположение + Докоснете за добавяне на местоположения + Изглежда сървърът е несъвместим с WebDAV + Не е намерено приложение за управлрние на файлове, което да отваря папки + URL + Потребител + Парола + Свързване + Адресът не трябва да е празен. + Адресът е неприемлив. + Потребителят не трябва да е празен. + Паролата не трябва да е празна. + Показвано име + Ключ за достъп + Таен ключ + Bucket + Крайна точка + Регион + Показваното име не трябва да е празно + Ключът за достъп не трябва да е празен + Тайният ключ не трябва да е празен + Полето „Bucket“ не трябва да е празно + Крайната точка или регионът не трябва да са празни + Името на хранилището не трябва да е празно. + Име на хранилището + Създаване + Задаване на парола + Паролата и повторената парола не съвпадат. Готово + ВАЖНО: Ако забравите паролата няма начин да възстановите достъпа до данните. + Въведете паролата отново + Твърде слаба за да предпазва хранилище + Слаба + Задоволителна + Добра + Много добра + Общи + Облачни услуги + Биометрично удостоверяване + Биометрично удостоверяване + Потвърждаване отключ. с лице (ако има) + Възпрепятстване на припокриване + Възпрепятства прехващането на въвежданото, показва лъжлив потребителски интерфейс + Възпрепятстване на екранни снимки + Възпрепятства екранните снимки в списка с често използвани и в самото приложение + Търсене + Търсене на живо + Резултатите се обновяват докато въвеждате + Търсене чрез заместващи последователности + Използва заместващи последователности като alice.*.jpg + Автоматично заключване + Заключване след + При изключен екран + Автоматично качване на снимки + Избиране на хранилище + Включване + Прехваща изображения във фонов режим и при отключеане на хранилището започва да ги изпраща + Качване незабавно + Ако хранилището е отключено, качва незабавно + Качване само през безжична мрежа + Качване на видео + Запазване на качваните файлове в… + Страница на Криптоматор + Следвайте ни в X + Харесайте ни във Фейсбук + Правни въпроси + Лицензи + Лицензни условия + Поддръжка + Получаване на помощ + Режим за отстраняване на грешки + Изпращане на дневника + Изпращането е неуспешно + Съвети за сигурността + Издание + Разширени настройки + Заобиколен начин за отваряне на файлове на Microsoft + Отваряне на файлове в приложения на Microsoft с права за писане + Ускоряване на отключването + Файла с настройката на хранилището се изтегля във фонов режим още на екрана за парола или биометрично удостоверяване + Оставяне отключено + Оставя хранилищата отключени докато има отворени файлове + Връзки с OneDrive + Връзки с WebDAV + Връзки с pCloud + Връзки с S3 + Местоположения на местното хранилище + Влизане + Изход от + %1$s не може да бъде удостоветен. + Обновяване на даните за вход в pCloud + Варианти на Криптоматор + Основно хранилище на F-Droid + Инсталиране + Хранилище на Криптоматор за F-Droid + Добавете хранилището на Криптоматор към F-Droid. + Добавяне + Страница в интернет + Съдържа собственически зависимости. Отказ Отключване + Старата парола не трябва да е празна. + Новата парола не трябва да е празна. + Премахване Заключване + Поради дефект в приложенията на Microsoft, файлът, който трябва да бъде редактиран, трябва да бъде споделен с тези приложения в публична папка на вашето устройство. След възобновяване на работата на Cryptomator, публично достъпният файл се изтрива отново, но Cryptomator не може да повлияе на случващото се с файла междувременно. Преди да включите тук се уверете, че сте наясно с това поведение. Това ще се прилага само за файлове на Microsoft.\n\nСлед включване Cryptomator ще се рестартира. Затваряне Назад + минути + Докоснете, за да презаредите удостоверяването. diff --git a/presentation/src/main/res/values-ca-rES/strings.xml b/presentation/src/main/res/values-ca-rES/strings.xml index 6eba8e0fb..25ae00989 100644 --- a/presentation/src/main/res/values-ca-rES/strings.xml +++ b/presentation/src/main/res/values-ca-rES/strings.xml @@ -198,6 +198,8 @@ Consells de seguretat Versió Configuració avançada + Solució alternativa per obrir fitxers de Microsoft + Obrir fitxers a Microsoft apps amb permís d\'escriptura Desbloqueja més ràpid Descarrega la configuració de la caixa forta de fons mentre es demana introduir la contrasenya o l\'autenticació biomètrica Manté desblocat @@ -304,6 +306,7 @@ En aquest mode, informació sensible pot ser escrita en un arxiu de registre al teu dispositiu (per exemple, noms d\'arxius i rutes). Contrasenyes, galetes, etc. són explícitament excloses.\n\nRecorda desactivar el mode de depuració tan aviat com sigui possible. Atenció Activa + A causa d\'un error en les aplicacions de Microsoft, el fitxer que s\'editarà s\'ha de compartir amb aquestes aplicacions en una carpeta de mitjans públics al dispositiu. Quan es reprengui Cryptomator, el fitxer d\'accés públic s\'elimina novament, però Cryptomator no pot influir en el que va passar amb aquest fitxer mentrestant. Assegureu-vos de conèixer aquest comportament en activar aquesta opció. Això només s\'aplicarà als tipus de fitxers de Microsoft.\n\nCryptomator es reiniciarà després de l\'activació. Aquesta configuració és una funció de seguretat i evita que altres aplicacions enganyin els usuaris perquè facin coses que no volen fer.\n\nEn desactivar-la, confirmeu que sou <a href="https://docs.cryptomator.org". /en/1.6/android/settings/#block-app-when-obscured">conscient dels riscos</a>. Atenció Desactiva @@ -348,6 +351,7 @@ Si teníeu la intenció d\'afegir un compte de pCloud nou, toqueu aquest URL www.pcloud.com, tanqueu la sessió del compte actual i torneu a tocar el \"+\" d\'aquesta aplicació per crear una nova connexió al núvol. Cryptomator necessita accés a l\'emmagatzematge per a fer servir caixes fortes locals Cryptomator necessita accés a l\'emmagatzematge per a la pujada de fotos automàtica + Cryptomator necessita permís de notificacions per poder informar del seu estat, per exemple @@ -391,6 +395,7 @@ La carpeta seleccionada per a la pujada ja no està disponible. Ves a la configuració i selecciona una nova La caixa forta s\'ha bloquejat durant la pujada, si us plau desbloqueja-la per a continuar La caixa forta especificada per a la pujada automàtica ja no existeix. + Toqui per refrescar l\'autenticació. Obre fitxer editable La caixa forta seguirà desbloquejada fins que acabi l\'edició La versió més recent s\'ha instal·lat diff --git a/presentation/src/main/res/values-cs-rCZ/strings.xml b/presentation/src/main/res/values-cs-rCZ/strings.xml index 4e362ffcd..8af221d31 100644 --- a/presentation/src/main/res/values-cs-rCZ/strings.xml +++ b/presentation/src/main/res/values-cs-rCZ/strings.xml @@ -34,6 +34,7 @@ Místní soubor již není přítomen po přepnutí zpět na Cryptomator. Možné změny nelze promítnout zpět do cloudu. Bucket neexistuje Vlastní umístění hlavního klíče ještě není podporováno + Nepodařilo se komunikovat s aplikací F-Droid. Možná není nainstalována? Místní úložiště @@ -199,6 +200,8 @@ Bezpečnostní rady Verze Rozšířená nastavení + Řešení otevírání souborů Microsoft + Otevřít soubory v aplikaci Microsoft s oprávněním k zápisu Urychlit odemknutí Stáhnout konfiguraci trezoru na pozadí při vyzvání k zadání hesla nebo biometrického ověření Ponechat odemčené @@ -217,10 +220,17 @@ Aktualizovat přihlašovací údaje k pCloudu Varianty Cryptomatoru + Hlavní F-Droid repozitář + Vyloučeny, protože jsou vyžadovány API klíče. Instalovat + Cryptomator F-Droid repozitář + Vyloučeno, protože obsahuje proprietární závislosti. + Přidat Cryptomator repozitář do aplikace F-Droid. Přidat + Nainstalujte Cryptomator pomocí F-Droid.\nPokud není nalezena chyba, počkejte, až bude synchronizace F-Droid dokončena. Webová stránka Obsahuje vlastní závislosti. + Přechod z nebo do hlavní varianty repozitáře F-Droid vyžaduje nové nastavení aplikace. Zrušit Odemknout @@ -258,6 +268,7 @@ Máte neuložené změny Opravdu chcete skončit bez uložení? Zahodit + Název souboru text.txt Jste si jisti, že chcete odstranit tento trezor? Tato akce odstraní trezor pouze z tohoto seznamu a neodstraní jej fyzicky. @@ -284,6 +295,7 @@ Podrobnosti Toto by mohlo být bezpečnostní riziko. Vím, co dělám. Zakázat optimalizace výdrže baterie + Abychom mohli načítat nové obrázky a videa, aniž by běžely na pozadí, musíme vypnout optimalizace baterie. Ale nebojte se, %1$s nespotřebovává mnoho energie.\n\nChcete-li ji použít, změňte možnost \"Neoptimalizovat\" na \"Všechny aplikace\", vyberte %1$s a po klepnutí na \"%2$s\" v tomto dialogovém okně vyberte možnost \"Neoptimalizovat\". Příště se neptat? Použití HTTP je nezabezpečené. Doporučujeme použít HTTPS. Pokud znáte rizika, můžete pokračovat s HTTP. Změnit na HTTPS @@ -296,6 +308,7 @@ V tomto režimu mohou být citlivé údaje zapsány do souboru protokolu na vašem zařízení (např. názvy souborů a cesty). Hesla, soubory cookie atd. jsou výslovně vyloučeny.\n\nNezapomeňte co nejdříve vypnout režim ladění. Upozornění Povolit + Kvůli chybě v aplikacích společnosti Microsoft musí být upravovaný soubor sdílen s těmito aplikacemi ve veřejné složce médií v zařízení. Po obnovení činnosti aplikace Cryptomator se veřejně přístupný soubor opět odstraní, ale aplikace Cryptomator nemůže ovlivnit, co se s tímto souborem mezitím stalo. Při aktivaci této možnosti se ujistěte, že jste si tohoto chování vědomi. Toto se týká pouze typů souborů společnosti Microsoft.\n\nCryptomator se po aktivaci znovu spustí. Toto nastavení je bezpečnostní funkce a brání ostatním aplikacím v tom, aby oklamaly uživatele dělat věci, se kterými nesouhlasí.\n\nZakázáním potvrzujete, že jste si vědomi rizik. Upozornění Zakázat @@ -337,8 +350,10 @@ Složka v cloudu \'%1$s\' nemá adresářový soubor. Mohlo dojít k tomu, že složka byla vytvořena na jiném zařízení a ještě nebyla plně synchronizována s cloudem. Prosím zkontrolujte v cloudu, zda existuje následující soubor a není prázdný: \n%2$s Žádné další obrázky k zobrazení… Údaje o \'%1$s\' byly aktualizovány + Pokud máte v úmyslu přidat nový účet na pCloud, klepněte na tuto url www.pcloud. om, odhlas jste se z aktuálního účtu a znovu klepněte na \'+\' v této aplikaci pro vytvoření nového cloudového připojení. Cryptomator potřebuje přístup k úložišti, aby mohl používat místní trezory Cryptomator potřebuje přístup k úložišti pro automatické nahrávání fotek + Cryptomator potřebuje oprávnění k oznámení. Například: zobrazení stavu trezoru @@ -382,6 +397,7 @@ Vybraná složka pro nahrání již není k dispozici. Přejděte do nastavení a vyberte novou složku Během nahrávání došlo k uzamčení trezoru, pro pokračování trezor prosím znovu odemkněte Trezor určený pro automatické nahrávání již neexistuje. + Klepnutím obnovíte autentifikaci. Otevřít zapisovatelný soubor Trezor zůstane odemknutý dokud nejsou dokončené úpravy Nainstalována aktuální verze diff --git a/presentation/src/main/res/values-da-rDK/strings.xml b/presentation/src/main/res/values-da-rDK/strings.xml index ccc22b7f3..3a93cd166 100644 --- a/presentation/src/main/res/values-da-rDK/strings.xml +++ b/presentation/src/main/res/values-da-rDK/strings.xml @@ -31,7 +31,7 @@ Versionen angivet i %1$s er forskellig fra %2$s %1$s matcher ikke med denne %2$s Generel fejl under indlæsning af boksens konfiguration - Den lokale fil findes ikke længere, efter vi skiftede tilbage til Cryptomator. Ændringer kan ikke propageres tilbage til skyen. + Den lokale fil findes ikke længere, efter vi skiftede tilbage til Cryptomator. Ændringer kan ikke tilbageføres til skyen. Bucket findes ikke Brugerdefineret hovednøgle-placering understøttes ikke endnu Kunne ikke kommunikere med F-Droid appen. Er den ikke installeret? @@ -76,7 +76,7 @@ Flyt Tom mappe - ændret %1$s siden + ændret for %1$s siden Del med Vælg destination Vælg @@ -100,7 +100,7 @@ %1$d valgt Vælg Vælg alle - Opdatér + Genopfrisk Ingen forbindelse Prøv igen @@ -115,7 +115,7 @@ Gem Kryptering færdig - Cloud-tjeneste + Tjenester i skyen Vælg en placering Tryk her for at tilføje placeringer @@ -175,7 +175,7 @@ Automatisk låsning Lås efter Når skærmen er slukket - Automatisk foto upload + Automatisk foto-upload Vælg boks til upload Aktivér Håndtér billeder i baggrunden og upload dem når den valgte boks er låst op @@ -183,7 +183,7 @@ Upload direkte hvis boksen er låst op Upload kun ved hjælp af WIFI Upload videoer - Gem automatisk upload af filer i… + Gem automatisk uploadede filer i… Cryptomators hjemmeside Følg os på Twitter Synes godt om os på Facebook @@ -198,6 +198,8 @@ Sikkerhedstips Version Avancerede indstillinger + Alternativ løsning til at åbne Microsoft-filer + Åbn filer i Microsoft-apps med skrivetilladelse Accelerér oplåsning Download boksens konfiguration i baggrunden, mens du indtaster adgangskoden eller angivet biometrisk information Hold oplåst @@ -223,7 +225,7 @@ Udelukket, fordi det indeholder proprietære afhængigheder. Tilføj Cryptomator-depotet til F-Droid appen. Tilføj - Installér Cryptomator ved hjælp af F-Droid.\nHvis fejlen \"ikke fundet\" vises, da vent indtil F-Droid-synkroniseringen er færdig. + Installér Cryptomator ved hjælp af F-Droid.\nHvis fejlen \"ikke fundet\" vises, vent da indtil F-Droid-synkroniseringen er færdig. Hjemmeside Indeholder proprietære afhængigheder. At skifte fra eller til det primære F-Droid depot, kræver en frisk opsætning af appen. @@ -304,6 +306,7 @@ I denne tilstand kan følsomme data blive skrevet til en logfil på din enhed (f.eks. filnavne og stier). Adgangskoder, cookies osv. er udtrykkeligt udelukket.\n\nHusk at deaktivere fejlfindingstilstand så hurtigt som muligt. Vigtigt Aktivér + På grund af en fejl i Microsoft-apps skal den fil, der skal redigeres, deles med disse apps i en offentlig mediemappe på din enhed. Når Cryptomator genoptages, slettes den offentligt tilgængelige fil igen, men Cryptomator kan ikke påvirke, hvad der er sket med denne fil i mellemtiden. Sørg for, at du er opmærksom på denne adfærd, når du aktiverer denne indstilling. Dette gælder kun for Microsofts filtyper.\n\nCryptomator genstarter efter aktivering. Denne indstilling er en sikkerhedsfunktion og forhindrer andre apps i at narre brugere til at gøre ting, de ikke ønsker at gøre.\n\nVed at deaktivere, bekræfter du, at du er bekendt med de involverede ricisi. Vigtigt Deaktivér @@ -312,8 +315,8 @@ Luk Tilføj venligst boksene til %1s skyen igen Mens vi migrerer til denne app-version, skal vi fjerne følgende bokse fra appen:\n%2s \n\nDisse bokse fjernes ikke fra skyen, men kun fra denne app. Beklager ulejligheden! Tilføj venligst disse bokse igen for at fortsætte med at arbejde med dem. - Boksen er rodmappen for cloudforbindelsen - For at tilføje denne boks, lav en ny forbindelse til skyen hvor du mindst vælger den overordnede mappe som din rod-mappe. + Boksen er rodmappen for denne forbindelse til skyen + For at tilføje denne boks, skal du lave en ny forbindelse til skyen hvor du som minimum vælger mappen over boksens mappe som din rod-mappe. Denne indstilling er en sikkerhedsfunktion og forhindrer andre apps i at narre brugere til at gøre ting, de ikke ønsker at gøre.\n\nVed at deaktivere, bekræfter du, at du er bekendt med de involverede ricisi. Er du sikke på, at du vil fjerne denne forbindelse? Denne handling vil fjerne forbindelsen og alle bokse i denne sky. @@ -379,7 +382,7 @@ Brug kodeord til boksen Kan ikke uploade filer automatisk - Boks låst op: %1$d + Bokse låst op: %1$d Låser automatisk om %1$s Lås alle Annullér upload @@ -388,22 +391,23 @@ Automatisk upload af fotos færdig %1$d billeder uploadet til boksen Automatisk upload af fotos fejlede - Der skete en fejl under uploaden. + Der opstod en generel fejl under upload. Den valgte upload-mappe er ikke længere tilgængelig. Gå til indstillinger og vælg en ny - Boks låst under upload, genåbn venligst boks for at fortsætte + Boks låst under upload, genåbn venligst boksen for at fortsætte Boks angivet til auto-upload findes ikke længere. + Tryk for at opdatere godkendelse. Åben fil med skriveadgang Boks forbliver låst op indtil du er færdig med redigeringen Nyeste version er installeret Godkender… Cache - Gem nyligt tilgåede filer lokalt, i krypteret form, så de hurtigt kan åbnes igen senere + Gem nyligt tilgåede filer i cachen, i krypteret form, så de hurtigt kan åbnes igen senere Total cachestørrelse Tøm cache Ændringerne bliver anvendt næste gang du genstarter appen Registreret til %1$s - Tjek for nye opdateringer + Interval for tjek af nye opdateringer Søg efter opdateringer Seneste tjek %1$s Cache størrelse pr. sky-tjeneste diff --git a/presentation/src/main/res/values-de-rDE/strings.xml b/presentation/src/main/res/values-de-rDE/strings.xml index a53e2a328..4d27b9d5b 100644 --- a/presentation/src/main/res/values-de-rDE/strings.xml +++ b/presentation/src/main/res/values-de-rDE/strings.xml @@ -198,14 +198,14 @@ Sicherheitshinweise Version Erweiterte Eigenschaften - Workaround, um Microsoft Dateien zu öffnen - Dateien in Microsoft Apps mit Schreibberechtigung öffnen + Workaround zum Öffnen von Microsoft-Dateien + In Microsoft-Apps Dateien mit Schreibberechtigung öffnen Entsperren beschleunigen Während der Passwort-Eingabe oder biometrische Authentifizierung, Tresor-Konfiguration im Hintergrund herunterladen Entsperrt bleiben Halte Tresore geöffnet während dem Editieren einer Datei - OneDrive Verbindungen + OneDrive-Verbindungen WebDAV-Verbindungen pCloud-Verbindungen S3-Verbindungen @@ -306,7 +306,7 @@ In diesem Modus könnten sensible Daten in eine Log-Datei auf diesem Gerät geschrieben werden (z.B. Dateinamen und Pfade). Ausgeschlossen davon sind u.a. Passwörter und Cookies.\n\nDenke daran, den Debug-Modus so schnell wie möglich wieder zu deaktivieren. Achtung Aktivieren - Wenn du eine Datei mit den Microsoft-Apps bearbeiten möchtest, muss diese Datei diesen Apps über einen öffentlichen Ordner auf deinem Gerät zur Verfügung gestellt werden. Dies liegt an einem Fehler in den Microsoft-Apps. Sobald Cryptomator fortgesetzt wird, wird die entsprechende öffentliche Datei wieder gelöscht. Cryptomator kann jedoch nicht beeinflussen, was in der Zwischenzeit mit dieser Datei passiert. Sei dir diesem Verhalten bewusst, wenn du diese Option aktivierst. Dies gilt nur für Microsoft Dateitypen.\n\nCryptomator wird nach der Aktivierung neu gestartet. + Aufgrund eines Fehlers in Microsoft-Apps muss die zu bearbeitende Datei in einem öffentlichen Medienordner deines Gerät für diese Apps bereitgestellt werden. Nach dem Fortsetzen von Cryptomator wird die öffentlich zugängliche Datei wieder gelöscht; allerdings kann Cryptomator nicht beeinflussen, was in der Zwischenzeit mit dieser Datei geschehen ist. Achte beim Aktivieren dieser Option darauf, dass du dir dieses Verhaltens bewusst bist. Dies gilt nur für Microsoft-Dateitypen.\n\nCryptomator wird nach der Aktivierung neu gestartet. Dies ist eine Sicherheitsfunktion und verhindert, dass andere Apps Nutzer dazu bringen, Dinge zu tun, die sie nicht tun wollen.\n\nDurch die Deaktivierung bestätigst du, dass du dich der Risiken bewusst bist. Achtung Deaktivieren @@ -315,8 +315,8 @@ Schließen Bitte Tresore für die %1s-Cloud erneut hinzufügen Während der Migration auf diese App-Version müssen wir folgende Tresore aus der App entfernen:\n%2s \n\nDiese Tresore werden nicht aus der Cloud entfernt, sondern nur aus dieser App. Entschuldigung für die Unannehmlichkeiten. Füge diese Tresore bitte erneut hinzu, um weiter mit ihnen zu arbeiten. - Tresor ist das Wurzelverzeichnis der Cloud-Verbindung - Erstelle eine neue Cloud-Verbindung, wo du mindestens den übergeordneten Ordner dieses Tresors als Wurzelverzeichnis auswählst, um diesen Tresor hinzuzufügen. + Tresor ist Wurzelverzeichnis der Cloud-Verbindung + Erstelle eine neue Cloud-Verbindung, bei der du mindestens den übergeordneten Ordner dieses Tresor-Ordners als Stammverzeichnis auswählst, um diesen Tresor hinzuzufügen. Dies ist eine Sicherheitsfunktion, die andere Anwendungen daran hindert, Nutzer zu ungewollten Aktionen zu verleiten.\n\nDurch Deaktivieren bestätigst du, dass du dir der Risiken bewusst bist. Bist du dir sicher, dass du die Cloud-Verbindung entfernen möchtest? Dieser Vorgang wird die Cloud-Verbindung und alle zugehörigen Tresore löschen. @@ -395,7 +395,7 @@ Der ausgewählte Ordner für den Upload ist nicht mehr verfügbar. Gehe zu den Einstellungen und wähle einen neuen Ordner aus Tresor wurde während dem Hochladen gesperrt, bitte Tresor erneut öffnen, um fortzufahren Der Tresor für den automatischen Upload existiert nicht mehr. - Tippen, um die Authentifizierung zu aktualisieren. + Antippen, um die Authentifizierung zu aktualisieren. Datei mit Schreibrechten geöffnet Tresor bleibt entsperrt, bis die Bearbeitung abgeschlossen wurde Neueste Version installiert diff --git a/presentation/src/main/res/values-fa-rIR/strings.xml b/presentation/src/main/res/values-fa-rIR/strings.xml index 18e6eb11e..860c8227b 100644 --- a/presentation/src/main/res/values-fa-rIR/strings.xml +++ b/presentation/src/main/res/values-fa-rIR/strings.xml @@ -131,13 +131,23 @@ نام کاربری نمی‌تواند خالی باشد. رمزعبور نمی‌تواند خالی باشد. + نام کلید دسترسی کلید مخفی + صندوقچه فعلی + نقطه انتهایی منطقه + نام نمی تواند خالی باشد + کلید دسترسی نمی تواند خالی باشد + مقدار کلید نمی تواند خالی باشد + مقدار صندوقچه نمی تواند خالی باشد + نام صندوقچه نمیتواند خالی باشد. نام مخزن ایجاد + تنظیم رمز عبور + رمز عبور با تکرار آن مطابقت ندارد. انجام شده مهم: اگر پسروردتان را از یاد ببرید، هیچ راهی برای بازگردانی اطلاعاتتان نیست. تکرار گذرواژه @@ -146,8 +156,12 @@ بسیار قوی عمومی + سرویس های ابری احراز هویت بیومتریک + فعال سازی احراز هویت بیومتریک + مسدود سازی عکس برداری از صفحه جستجو + جستجوی زنده قفل کردن خودکار قفل کردن پس از وقتی صفحه خاموش است @@ -156,15 +170,41 @@ وب‌سایت کریپتوماتور ما را در توییتر دنبال کنید ما را در فیس بوک بپسندید + قوانین + مجوزها + پشتیبانی + درخواست کمک + حالت عیب‌ یابی + ارسال فایل گزارش + ارسال با خطا مواجه شد + نسخه + تنظیمات پیشرفته + وب سایت انصراف بازکردن قفل + رمز عبور قدیمی + رمز عبور جدید + تغییر رمز عبور + رمز عبور فعلی نمی‌تواند خالی باشد. + رمز عبور جدید نمی‌تواند خالی باشد. + رمز عبور جدید با تکرار آن مطابقت ندارد. + خزانه %1$s پیدا نشد + نام خزانه تغییر پیدا کرده، منتقل شده یا حذف شده است. برای ادامه این خزانه را از لیست حذف کرده و دوباره اضافه کنید. اکنون حذف شود؟ حذف + فایل هم اکنون وجود دارد + جایگزین کردن + فایل با نام \'%1$s\' در حال حاضر وجود دارد. + جایگزین کردن همه + جایگزین کردن + فایل جایگزین شود؟ + صرف‌نظر کردن + نام فایل قفل ببند بازگشت diff --git a/presentation/src/main/res/values-fil-rPH/strings.xml b/presentation/src/main/res/values-fil-rPH/strings.xml index d4fd1f183..d4c50596a 100644 --- a/presentation/src/main/res/values-fil-rPH/strings.xml +++ b/presentation/src/main/res/values-fil-rPH/strings.xml @@ -34,11 +34,16 @@ Ang lokal na file ay hindi na matagpuan pagkatapos lumipat sa Cryptomator. Maaaring hindi na ma-i upload pabalik sa cloud. Hindi matagpuan ang bucket na ito Hindi pa suportado ang custom Masterkey location + Nabigong makipag-ugnayan sa F-Droid app. Hindi naka-install? Local storage + Kailangan ng Cryptomator ng access sa storage para mag-export ng mga file + Kailangan ng Cryptomator ng access sa storage para mag-upload ng mga file + Kailangan ng Cryptomator ng access sa storage para makapagbahagi ng mga file + Nawalan ng pahintulot ang Cryptomator na i-access ang lokasyong ito. Mangyaring piliin muli ang folder na ito upang maibalik ang pahintulot. Settings Hanapin Nakaraan @@ -51,20 +56,27 @@ Pinakamalaki muna Pinakamaliit muna Magbasa pa + Wala si Cloud sa listahan? Idagdag sa Cryptomator Gumawa ng bagong vault Magdagdag ng umiiral na vault Tanggalin + Mag-tap dito para gumawa ng bagong vault Matagumpay na napalitan ang password Vault Piliin ang masterkey file Ilagay dito Pangalan ng vault: %1$s + + Ilipat ang %1$s sa + Ilipat ang %2$d item sa + Ilipat Walang laman na folder + binago %1$s ang nakalipas Ibahagi kay Pumili ng destinasyon Pumili @@ -76,6 +88,8 @@ Files Na-export na ang file Na-export na ang mga files + Walang mai-export + Nabigo ang paggawa ng direktoryo sa pag-download Ibahagi Baguhin ang pangalan I-edit @@ -104,7 +118,9 @@ Cloud service Piliin ang location + Mag-tap dito para magdagdag ng mga lokasyon Ang server na ito ay mukhang hindi tugma sa WebDAV + Walang nakitang file manager na sumusuporta sa pagbubukas ng mga direktoryo URL Username @@ -115,8 +131,15 @@ Hindi maaaring walang laman ang username. Hindi maaaring walang laman ang password. + Display Name Access Key + Lihim na Susi + Umiiral na Balde + Endpoint Rehiyon + Hindi maaaring walang laman ang Display Name + Hindi maaaring walang laman ang Access Key + Hindi maaaring walang laman ang Secret Key Hindi maaaring walang laman ang bucket Hindi maaaring walang laman ang endpoint o ang rehiyon @@ -138,30 +161,74 @@ Pangkalahatan Cloud services Biometric authentication + I-activate ang biometric authentication + Kumpirmahin ang face unlock (kung available) + I-block ang app kapag nakakubli + I-block ang pagharang sa input at pagpapakita ng maling user interface + I-block ang mga screenshot + I-block ang mga screenshot sa listahan ng mga kamakailan at sa loob ng app Hanapin + Live na paghahanap + I-update ang mga resulta ng paghahanap habang ipinapasok ang query + Maghanap gamit ang glob pattern + Gumamit ng glob pattern matching gaya ni alice.*.jpg + Awtomatikong pag-lock I-lock pagkatapos ng Kapag ang screen ay disabled + Awtomatikong pag-upload ng larawan Pumili ng vault pang upload I-activate + Kumuha ng mga larawan sa background at kapag na-unlock na ang napiling vault, simulan ang pag-upload + Mag-upload kaagad + Direktang mag-upload kung naka-unlock ang vault + Mag-upload lang gamit ang WIFI + Mag-upload ng mga video + I-save ang awtomatikong pag-upload ng mga file sa… Website ng Cryptomator Sundan kami sa Twitter I-like kami sa Facebook Ligal Mga Lisensya + Mga tuntunin sa lisensya Suporta Humingi ng tulong Debug mode Ipadala ang log file + Hindi naipadala Mga pahiwatig ng seguridad Bersyon Mga advanced na setting + Workaround sa pagbubukas ng mga file ng Microsoft Ibukas ang mga files sa Microsoft apps kasamang write permission Pabilisin ang pag-unlock + I-download ang vault config sa background habang sinenyasan na ilagay ang password o biometric auth + Panatilihing naka-unlock + Panatilihing naka-unlock ang mga vault habang nag-e-edit ng mga file + Mga koneksyon sa OneDrive + Mga koneksyon sa WebDAV + Mga koneksyon sa pCloud + Mga koneksyon sa S3 + Mga lokasyon ng lokal na imbakan + Mag-log in sa + Mag-sign out mula sa + Hindi ma-authenticate ang %1$s. + I-update ang mga kredensyal ng pCloud + Mga variant ng Cryptomator + Pangunahing F-Droid Repository + Hindi kasama dahil nangangailangan sila ng mga API key. + I-install + Cryptomator F-Droid Repository + Hindi kasama dahil naglalaman ito ng mga pinagmamay-ariang dependency. + Magdagdag ng Cryptomator repository sa F-Droid app. + Idagdag + I-install ang Cryptomator gamit ang F-Droid.\nKung may ipinapakitang not found error, maghintay hanggang matapos ang F-Droid synchronization. Website + Naglalaman ng pagmamay-ari na dependencies. + Ang paglipat mula sa o sa pangunahing variant ng repository ng F-Droid ay nangangailangan ng bagong setup ng app. Kanselahin I-unlock @@ -172,6 +239,8 @@ Hindi maaaring walang laman ang bagong password field. Hindi nagtugma ang bagong password sa ni-retype na password. + Hindi nahanap ang Vault %1$s + Ang vault ay pinalitan ng pangalan, inilipat o tinanggal. Alisin ang vault na ito sa listahan at idagdag itong muli upang magpatuloy. Alisin ngayon? Tanggalin Mayroon na ng file na ito Palitan @@ -182,37 +251,76 @@ Palitan Umiiral na ang file na may pangalang \'%1$s\'. Nais mo bang palitan ito? Ang lahat ng files ay umiiral na. Nais mo bang palitan ang mga ito? + Umiiral na ang %1$d file. Gusto mo bang palitan sila? Palitan ang file? Palitan ang mga file? Hindi kayang i-share ang mga files + Hindi ka pa nagse-set up ng anumang mga vault. Mangyaring lumikha muna ng bagong vault gamit ang Cryptomator app. OK Gumawa ng bagong vault + Hindi mabuksan ang %1$s Mag-download ng app na kayang buksan ang file na ito o nais mo bang i-save sa iyong device? Palitan ang pangalan ng vault Palitan ang pangalan ng folder Palitan ang pangalan ng file Mayroon kang hindi na i-save na pagbabago + Gusto mo ba talagang umalis nang hindi nag-iipon? Ibaliwala Pangalan ng File + text.txt Sigurado ka ba na nais mong alisin ang vault? Ang aksyon na ito ay aalisin lamang ang vault sa listahan at hindi ito buburahin. + Nag-a-upload ng… + File %1$d ng %2$d + Ini-export (%1$d/%2$d) Pakihintay… + Lumilikha ng folder… + Paglikha ng text file… + Authentication… + Pagpapalit ng pangalan… + Tinatanggal ang… + Ina-unlock ang vault… + Pagpapalit ng password… + Paglikha ng vault… + Nag-a-upload ng… + Nagda-download ng… Ineencrypt… Dinedecrypt… + Gumagalaw… I-lock Hindi wasto ang SSL certificate Hindi wasto ang SSL certificate. Nais mo paring pagkatiwalaan? Mga detalye Maaaring panganib ito sa seguridad. Alam ko ang ginagawa ko. + Huwag paganahin ang mga pag-optimize ng baterya + Upang makakuha ng mga bagong larawan at video nang hindi tumatakbo sa background, kailangan naming mag-opt-out mula sa mga pag-optimize ng baterya. Ngunit huwag mag-alala, hindi kumukonsumo ng maraming enerhiya ang %1$s.\n\nPara ilapat ito, palitan ang \'Hindi na-optimize\' sa \'Lahat ng app\', piliin ang %1$s at piliin ang \'Huwag mag-optimize\' pagkatapos mag-tap \'%2$s\' sa dialog na ito. Huwag magtanong ulit? Ang pag-gamit ng HTTP ay hindi ligtas. Kung alam mo ang mga panganib, maaari kang tumuloy gamit ang HTTP. Gawing HTTPS Gamiting ang HTTPS? + Walang nakatakdang lock ng screen. Upang iimbak ang iyong mga kredensyal sa isang secure na paraan, magtakda ng isang pattern o password gamit ang OK. + Itakda ang lock ng screen? + Itakda ang lock ng screen + Walang naka-set up na basic authentication sa system + Mag-enroll ng kahit isang daliri/mukha para gamitin ang serbisyong ito. + Sa mode na ito, maaaring isulat ang sensitibong data sa isang log file sa iyong device (hal., mga filename at path). Ang mga password, cookies, atbp. ay tahasang hindi kasama.\n\nTandaang i-disable ang debug mode sa lalong madaling panahon. Atensyon I-enable + Dahil sa isang bug sa mga Microsoft app, ang file na ie-edit ay dapat na ibahagi sa mga app na ito sa isang pampublikong media folder sa iyong device. Pagkatapos maipagpatuloy ang Cryptomator, ang file na naa-access ng publiko ay tatanggalin muli, ngunit hindi maimpluwensyahan ng Cryptomator kung ano ang nangyari sa file na ito pansamantala. Tiyaking alam mo ang gawi na ito kapag ina-activate ang opsyong ito. Malalapat lang ito sa mga uri ng file ng Microsoft.\n\nMagre-restart ang Cryptomator pagkatapos ma-activate. + Ang setting na ito ay isang feature na panseguridad at pinipigilan ang iba pang app na linlangin ang mga user sa paggawa ng mga bagay na hindi nila gustong gawin.\n\nSa pamamagitan ng hindi pagpapagana, kinukumpirma mo na ikaw ay alam sa mga panganib. Atensyon + Huwag paganahin + Nakakubli ang app + Ang isa pang app ay nagpapakita ng isang bagay sa ibabaw ng Cryptomator (hal., isang asul na light filter o night mode app). Para sa mga kadahilanang pangseguridad, hindi pinagana ang Cryptomator.\n\n<a href="https://docs.cryptomator.org/en/1.6/android/settings/#block-app-when-obscured">Paano i-enable ang Cryptomator< /a> Isara + Mangyaring muling magdagdag ng mga vault para sa %1s cloud + Habang lumilipat sa bersyon ng app na ito kailangan naming alisin ang mga sumusunod na vault sa app:\n%2s \n\nAng mga vault na iyon ay hindi inaalis sa cloud ngunit sa app na ito lang. Paumanhin para sa abala at mangyaring muling idagdag ang mga vault na ito upang magpatuloy sa pagtatrabaho sa kanila. + Ang Vault ay root folder ng koneksyon sa cloud + Gumawa ng bagong koneksyon sa cloud kung saan pipiliin mo ang hindi bababa sa parent folder ng vault folder na ito bilang root directory para idagdag ang vault na ito. + Ang setting na ito ay isang feature na panseguridad at pinipigilan ang iba pang app na linlangin ang mga user sa paggawa ng mga bagay na hindi nila gustong gawin.\n\nSa pamamagitan ng hindi pagpapagana, kinukumpirma mo na ikaw ay alam sa mga panganib. Sigurado ka bang gusto mong tanggalin itong cloud connection? + Aalisin ng pagkilos na ito ang koneksyon sa cloud at lahat ng vault ng cloud na ito. + Tanggalin ang %1$d item? Sigurado ka bang gusto mong burahin ang mga ito? Sigurado ka bang gusto mong burahin ang file na ito? Buburahin nito ang lahat ng laman ng folder. Sigurado ka ba na gusto mong burahin ang folder na ito? @@ -221,14 +329,29 @@ Magbigay ng wastong lisensya Natuklasan namin na ang nakainstall mong Cryptomator ay hind nanggaling sa Google Play Store. Maaari lamang na magbigay ng wastong lisensya na mabibili sa https://cryptomator.org/android/ Ang lisensyang binigay ay hindi wasto. Siguraduhing tama ang iyong pagkakalagay. + Ang ibinigay na key ay isang desktop supporter certificate. Mangyaring magpasok ng wastong lisensya. + Walang ibinigay na lisensya. Mangyaring magpasok ng wastong lisensya. I-sara + Pagkumpirma ng lisensya Salamat %1$s sa pagbigay ng wastong lisensya. + Available ang update + I-update ang Cryptomator sa pinakabagong bersyon. Sa pamamagitan ng pagpindot sa OK, ida-download namin ang app sa background at hihilingin sa iyo na i-install ito. I-update ngayon Pumunta sa download site Mamaya + Tumatakbo ang pag-download + Nagda-download ng pinakabagong bersyon ng Cryptomator Ang folder na ito ay isang symbolic link Hindi maaaring puntahan ang symbolic link na ito Bumalik + Hindi ma-load ang mga nilalaman ng direktoryo + Walang wastong directory file ang cloud folder na \'%1$s\'. Maaaring ang folder ay ginawa sa ibang device at hindi pa ganap na naka-synchronize sa cloud. Pakisuri sa iyong cloud kung ang sumusunod na file ay umiiral at walang laman:\n%2$s + Wala nang mga imaheng ipapakita… + Na-update ang mga kredensyal ng \'%1$s\' + Kung balak mong magdagdag ng bagong pCloud account, i-tap ang url na ito www.pcloud.com, mag-log out sa kasalukuyang account at mag-tap muli sa ang \'+\' sa app na ito upang lumikha ng bagong koneksyon sa ulap. + Kailangan ng Cryptomator ng access sa storage para magamit ang mga lokal na vault + Kailangan ng Cryptomator ng access sa storage upang magamit ang awtomatikong pag-upload ng larawan + Ang Cryptomator ay nangangailangan ng mga pahintulot sa abiso upang ipakita ang status ng vault halimbawa @@ -257,18 +380,39 @@ Biometric login Mag-log in gamit ang iyong biometric credential Gamitin ang vault password + Hindi makapag-auto upload ng mga file Vaults na na-unlock: %1$d Autolock in %1$s I-lock lahat Ikansela ang pag-upload + Tumatakbo ang awtomatikong pag-upload ng larawan Uploading %1d/%2d + Tumatakbo ang awtomatikong pag-upload ng larawan + %1$d larawan ang na-upload sa vault + Nabigo ang awtomatikong pag-upload ng larawan + Naganap ang pangkalahatang error habang nag-a-upload. + Hindi na available ang napiling folder para sa pag-upload. Pumunta sa mga setting at pumili ng bago + Naka-lock ang Vault habang nag-a-upload, mangyaring buksan muli ang vault upang magpatuloy + Ang Vault na tinukoy para sa awtomatikong pag-upload ay wala na. + I-tap para i-refresh ang pagpapatotoo. + Buksan ang nasusulat na file + Nananatiling naka-unlock ang Vault hanggang matapos ang pag-edit Naka-install ang pinakabagong bersyon + Pagpapatunay ng… Cache + Na-access kamakailan ng cache ang mga file na naka-encrypt nang lokal sa device para magamit muli sa ibang pagkakataon kapag muling binuksan Kabuuang laki ng cache Linisin ang Cache Ang mga pagbabago ay makikita pagkatapos ng pag-restart ng app + Nakarehistro para sa + %1$s + I-update ang agwat ng pagsusuri + Tingnan ang mga update + Huling pagtakbo %1$s + Laki ng cache sa bawat Cloud + Instant 1 minuto 2 minuto 5 minuto diff --git a/presentation/src/main/res/values-fr-rFR/strings.xml b/presentation/src/main/res/values-fr-rFR/strings.xml index a159f067c..c5b0ea83a 100644 --- a/presentation/src/main/res/values-fr-rFR/strings.xml +++ b/presentation/src/main/res/values-fr-rFR/strings.xml @@ -198,8 +198,8 @@ Conseils de sécurité Version Paramètres Avancés - Solution d\'ouverture des fichiers Microsoft - Ouvrir les fichiers dans les applications Microsoft avec permission d\'écriture + Méthode alternative d\'ouverture des fichiers Microsoft + Ouvrir les fichiers dans les appli Microsoft avec permission d\'écriture Accélérer le déverrouillage Téléchargez la configuration du coffre-fort en arrière-plan lorsque vous êtes invité à entrer le mot de passe ou l\'authentification biométrique Maintenir deverouillé @@ -306,7 +306,7 @@ Dans ce mode, les données sensibles peuvent être écrites dans un fichier journal sur votre appareil (par exemple, les noms de fichiers et les chemins d\'accès). Les mots de passe, cookies, etc. sont explicitement exclus.\n\nN\'oubliez pas de désactiver le mode de débogage dès que possible. Avertissement Activer - En raison d\'un bug dans les applications Microsoft, le fichier à modifier doit être partagé avec ces applications dans un dossier média public sur votre appareil. Après le rechargement de Cryptomator, le fichier accessible au public est à nouveau supprimé, mais Cryptomator ne peut pas contrôler ce qui est arrivé à ce fichier entre-temps. Assurez-vous d\'être au courant de ce comportement lors de l\'activation de cette option. Cela ne s\'appliquera qu\'aux types de fichiers Microsoft.\n\nCryptomator redémarrera après l\'activation. + En raison d\'un bug dans les appli Microsoft, le fichier à modifier doit être partagé avec ces appli dans un dossier média public sur votre appareil. Après le rechargement de Cryptomator, le fichier accessible au public est à nouveau supprimé, mais Cryptomator ne peut pas contrôler ce qui est arrivé à ce fichier entre-temps. Assurez-vous d\'être au courant de ce comportement lors de l\'activation de cette option. Cela ne s\'appliquera qu\'aux types de fichiers Microsoft.\n\nCryptomator redémarrera après l\'activation. Ce paramètre est une fonction de sécurité qui empêche d\'autres applications de tromper les utilisateurs en leur faisant faire des choses qu\'ils ne veulent pas faire.\n\nEn le désactivant, vous confirmez que vous êtes conscients des risques. Avertissement Désactiver diff --git a/presentation/src/main/res/values-hi-rIN/strings.xml b/presentation/src/main/res/values-hi-rIN/strings.xml index 43b7ba7fb..ab8376dc1 100644 --- a/presentation/src/main/res/values-hi-rIN/strings.xml +++ b/presentation/src/main/res/values-hi-rIN/strings.xml @@ -28,9 +28,12 @@ WebDAV पासवर्ड को डिक्रिप्ट करने में विफल, कृपया सेटिंग्स में फिर से जोड़ें Google Play सेवाएं स्थापित नहीं हैं बायोमेट्रिक प्रमाणीकरण निरस्त + %1$s में निर्दिष्ट किया हुआ अनुवाद संख्या %2$s से भिन्न है | + %1$s इस %2$s से मेल नहीं खाता | वॉल्ट कॉन्फ़िगरेशन लोड करते समय सामान्य त्रुटि Cryptomator पर वापस जाने के बाद स्थानीय फ़ाइल अब मौजूद नहीं है। संभावित परिवर्तनों को वापस क्लाउड पर प्रचारित नहीं किया जा सकता है। ऐसी कोई बकेट नहीं है। + व्यक्तिगत मास्टरकी स्थान का सपोर्ट अभीतक उपलब्ध नहीं हैं | F-Droid एप्लिकेशन के साथ संचार करने में विफल। स्थापित नहीं है? @@ -53,21 +56,25 @@ सबसे बड़ा पहले सबसे छोटा पहले अधिक जानकारी के लिए पढ़ें । + क्लॉउड सूची में नहीं हैं | क्रिप्टोमेटर में जोड़ें नयी वॉल्ट बनाए मौजूदा वॉल्ट ऐड करें हटाएँ + नया तिजोरी बनाने के लिए यहां टैप करें। पासवर्ड सफलतापूर्वक बदला गया। गुप्त तिजोरी + मास्टरकी फ़ाइल का चयन करें | यहाँ रखें वॉल्ट का नाम: %1$s मूव करें खाली फ़ोल्डर %1$s पहले बदला गया शेयर करे + स्थान का चुनाव करें | चुनें शेयर करने के लिए कुछ नहीं है %1$s में डालें @@ -78,6 +85,7 @@ दस्तावेज निर्यात हुआ दस्तावेज निर्यात हुए निर्यात करने के लिए कुछ भी नहीं + डाउनलोड डिरेक्टररी बनाना विफल हुआ | साझा करें नाम बदलें संपादित करें @@ -105,11 +113,16 @@ क्लाउड सेवा + स्थान चुनें | + खाता खोलने के लिए यहाँ दबाएँ | + सर्वर वेबडेव (WebDAV) के साथ अनुरूप नहीं है | + ऐसा कोई फ़ाइल प्रबंधक नहीं मिला जो निर्देशिका खोलने का समर्थन करता हो URL उपयोगकर्ता नाम पासवर्ड जुड़ें + यूआरएल (URL) खाली नहीं हो सकता यूआरएल अमान्य है। यूजरनेम खाली नहीं रह सकता पासवर्ड खाली नहीं छोड़ा जा सकता @@ -121,6 +134,9 @@ एंडपॉइन्ट क्षेत्र प्रदर्शित नाम खाली नहीं रह सकता + एक्सेस कुंजी खाली नहीं हो सकती + गुप्त कुंजी खाली नहीं हो सकती + बाल्टी के गुण खाली नहीं हो सकती एंडपॉइन्ट या क्षेत्र खाली नहीं रह सकते वॉल्ट का नाम खाली नहीं रह सकता। @@ -130,37 +146,140 @@ पासवर्ड सेट करें पासवर्ड दोबारा टाइप किये गए पासवर्ड से मेल नहीं खाता। हो गया + महत्वपूर्ण: यदि आप अपना पासवर्ड भूल जाते हैं, तो डेटा को पुनर्प्राप्त करने का कोई तरीका नहीं है + पासवर्ड फिर से लिखें वॉल्ट बनाने के लिए बहुत कमज़ोर कमजोर बढ़िया मजबूत + बहुत मजबूत सामान्य क्लाउड सेवाएं बायोमेट्रिक प्रमाणीकरण + बायोमेट्रिक प्रमाणीकरण सक्रिय करें + फेस अनलॉक की पुष्टि करें (यदि उपलब्ध हो) + अस्पष्ट होने पर आप्स को ब्लॉक करें + इनपुट को इंटरसेप्ट करने और ग़लत यूज़र इंटरफ़ेस प्रदर्शित करने से रोकें + ब्लॉक स्क्रीनशॉट + हाल ही की सूची में और आप्स के अंदर स्क्रीनशॉट ब्लॉक करें खोज करें + सीधा प्रसारित खोज + प्रश्न दर्ज करते समय खोज परिणाम अद्यतन (अपडेट) करें + ग्लोब (glob) पैटर्न का उपयोग करके खोजें + ऐलिस.*.जेपिजे (alice.*.jpg) की तरह मेल खाने वाले ग्लोब पैटर्न का उपयोग करें + ऑटोमाटिक लॉक करें + बादमें लॉक करें + जब स्क्रीन अक्षम हो + ऑटोमाटिक फोटो अपलोड + अपलोड के लिए तिजोरी चुनें + सक्रिय + पृष्ठभूमि के प्रतिमा अधिकृत करें और तिजोरी को खोलने के बाद, अपलोड प्रारंभ करें + तुरंत अपलोड करें + यदि तिजोरी खुली है तो सीधे अपलोड करें + केवल वाईफ़ाई (WIFI) का उपयोग करके अपलोड करें + वीडियो अपलोड करें + अपने आप अपलोड हुए फ़ाइलें को … में जमा करे + क्रिप्टोमेटर वेबसाइट हमें Twitter पर फॉलो करें हमें फ़ेसबुक पर लाइक करें + कानूनी + लाइसेंस लाइसेंस की शर्तें सहायता सहायता माँगे डीबग मोड लॉग फ़ाइल भेजें + भेजने में विफल हुआ हैं | + सुरक्षा के संकेत | संस्करण एडवांस्ड सेटिंग्स + माइक्रोसॉफ्ट फ़ाइल खुलनेका वैकल्पिक हल | + फ़ाइलें को माइक्रोसॉ आप्स में लिखने के अनुमती के साथ खोले | + अनलॉक में तेजी लाएं | + पासवर्ड या बायोमेट्रिक प्रमाण दर्ज करने के लिए संकेत देते समय पृष्ठभूमि में तिजोरी के कॉन्फ़िगरेशन को डाउनलोड करें अनलॉक्ड रखें फाइल्स एडिट करते वक़्त वॉल्ट अनलॉक्ड रखें + वनड्राइव (OneDrive) कनेक्शन + वेबडीएवी (WebDAV) कनेक्शन + पीक्लाउड (pCloud) कनेक्शन + S3 कनेक्शन + स्थानीय जमा करने का स्थान + में प्रवेश करें + से बाहर पढ़े + %1$s को प्रमाणित नहीं किया जा सका | + pCloud क्रेडेंशियल अपडेट करें + क्रिप्टोमेटर के प्रकार + मुख्य F-Droid संग्रह + एपीआई की (API key) की आवश्यकता के कारण छोड़ा गया है | + इंस्टॉल करें + क्रिप्टोमेटर एफ-ड्रॉयड (F-Droid) संग्रह + मालिकाना निर्भरता के वजेसे छोड़ा गया हैं | + क्रिप्टोमेटर संग्रह F-Droid ऐप में जोड़ें | + जोड़िये + F-Droid का उपयोग करके क्रिप्टोमेटर स्थापित करें।\nयदि कोई त्रुटि नहीं मिली, तो F-Droid सिंक्रनाइज़ेशन समाप्त होने तक प्रतीक्षा करें। + वेबसाइट + मालिकाना निर्भरताएँ शामिल हैं। रद्द करें अनलॉक करें + पुराना पासवर्ड + नया पासवर्ड + पासवर्ड बदलें + पुराना पासवर्ड खाली नहीं हो सकता | + नया पासवर्ड खाली नहीं हो सकता | + नया पासवर्ड दोबारा टाइप किये गए पासवर्ड से मेल नहीं खाता। + तिजोरी %1$s नहीं मिली | + तिजोरी का नाम बदल दिया गया है, स्थानांतरित कर दिया गया है या हटा दिया गया है। इस वॉल्ट को सूची से हटाएं और आगे बढ़ने के लिए इसे फिर से जोड़ें। अभी हटाएं? हटाएँ + फ़ाइल पहले से ही मौजूद है + फ़ाइलो को बदलें + \'%1$s\' नाम की फ़ाइल पहले से मौजूद है। + मौजूदा फ़ाइलो को छोड़ें + सभी फ़ाइलो को बदलें + मौजूदा फ़ाइलें बदलें + फ़ाइलो को बदलें + फ़ाइल बदलें? + फ़ाइलो को बदलें? + फ़ाइलो को साझा (share) करने में असमर्थ + आपने तिजोरी स्थापित नहीं की है | कृपया पहले क्रिप्टोमेटर आप्स से नयी तिजोरी बनाएं। + ठीक है वॉल्ट बनाएं + %1$s फ़ाइल प्रकार खुल नहीं सका + तिजोरी का नाम बदले + फ़ोल्डर का नाम बदलें + फ़ाइल का नाम बदलें + आपके पास नहीं सहेजे गए बदलाव हैं + क्या आप सच में बिना सहेजे जाने ऐप्स बदं करना चाहते हे? + ख़ारिज करें + फ़ाइल का नाम + text.txt + क्या आप वाकई इस तिजोरी को हटाना चाहते हैं? + यह कार्रवाई केवल तिजोरी को इस सूची से हटाएगी, उसे भौतिक रूप से नहीं हटाएगी। + अपलोड हो रहा है… + %2$d का %1$d फाइल + ऐप्स बाहर भेजने के लिए फाइल का नाम (%1$d/%2$d) + कृपया प्रतीक्षा करे… + फ़ोल्डर बनाये… + टेक्स्ट फ़ाइल बनाये… + प्रमाणीत करे… + नाम बदल रहा हैं… + हटाया जा रहा है… + तिजोरी खुल रही है… + पासवर्ड बदल रहा है… + तिजोरी संस्थापित हो रही है… + अपलोड हो रहा है… + डाउनलोड हो रहा है… + कूट लेखन (एन्क्रिप्ट) हो रहा है… + विकोड लेखन (डिक्रिप्ट) हो रहा है… लॉक करें + HTTPS में बदलें + HTTPS का उपयोग करें? बंद करें बाद में डाउनलोड चल रहा है। diff --git a/presentation/src/main/res/values-hu-rHU/strings.xml b/presentation/src/main/res/values-hu-rHU/strings.xml index 0c6369eff..59aeb55cf 100644 --- a/presentation/src/main/res/values-hu-rHU/strings.xml +++ b/presentation/src/main/res/values-hu-rHU/strings.xml @@ -198,6 +198,8 @@ Biztonsági tippek Verzió Speciális beállítások + Megkerülés Microsoft-fájlok megnyitásával + Fájlok megnyitása Microsoft-alkalmazásokban írási engedéllyel A feloldás felgyorsítása Trezor konfigurációjának letöltése a háttérben a jelszó/biometrikus hitelesítés megadása közben Feloldvatartás @@ -220,6 +222,13 @@ Nincsenek benne, mert API kulcsokra van szükségük. Telepítés Cryptomator F-Droid tároló + Kizárva, mert saját függőségeket tartalmaz. + A Cryptomator tároló hozzáadása az F-Droid apphoz. + Hozzáadás + Cryptomator telepítése F-Droid segítségével.\nHa egy nem talált hiba jelenik meg, várjon amíg az F-Droid szinkronizáció befejeződik. + Weboldal + Zárt forráskódú függőségeket tartalmaz. + Az alkalmazás fő F-Droid tároló verziójára vagy verziójáról váltáshoz szükséges az alkalmazás teljes újratelepítése. Mégse Feloldás @@ -257,6 +266,7 @@ Nem mentett módosításai vannak Biztos, hogy mentés nélkül szeretne kilépni? Elvetés + Fájlnév text.txt Biztosan törli ezt a trezort? Ez a művelet eltávolítja a tárolót a listáról, de fizikailag nem törli azt. @@ -283,6 +293,7 @@ Részletek Ez biztonsági kockázatot jelent. Tudom, mit csinálok. Akkumulátor-optimalizálás kikapcsolása + Az új képek és videók lekérdezéséhez anélkül, hogy a háttérben futna, ki kell kapcsolnunk az akkumulátor optimalizálását. De ne aggódj, a %1$s nem fogyaszt sok energiát.\n\nAz alkalmazáshoz állítsd át a \"Nem optimalizált\" opciót \"Minden alkalmazás\"-ra, válaszd ki a %1$s-t, és a \"%2$s\" megérintése után válaszd ki a \"Nem optimalizál\" opciót ebben a párbeszédpanelben. Ne kérdezze újra A HTTP használata nem biztonságos, helyette a HTTPS használata ajánlott. Ha ismeri a kockázatot, folytathatja HTTP-vel is. Váltson HTTPS-re @@ -295,18 +306,33 @@ 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. Figyelem Engedélyezés + A Microsoft-alkalmazások egy hibája miatt a szerkesztendő fájlt meg kell osztani ezekkel az alkalmazásokkal az eszközön lévő nyilvános médiamappában. Miután a Cryptomator végzett, a nyilvánosan elérhető fájl ismét törlődik, de a Cryptomatornak nincs befolyása arra, hogy mi történik időközben ezzel a fájlal. Győződj meg róla, hogy tisztában vagy ezzel a viselkedéssel, amikor bekapcsolod ezt az opciót. Ez csak a Microsoft fájltípusokra vonatkozik.\n\nAz bekapcsolás után a Cryptomator újraindul. Figyelem Letiltás + Az app el van takarva + Egy másik app megjelenít valamit a Cryptomator felett (pl. egy kékfény szűrő vagy éjszakai mód app). Biztonsági okokból a Cryptomator le van tiltva.\n\nHogyan engedélyezze a Cryptomatort Bezár + Töröl %1$d elemet? Biztosan törölni akarja ezeket az elemeket? Biztosan törli ezt a fájlt? + Ezzel a mappa teljes tartalma törlődik. Biztos, hogy törölni szeretné ezt a mappát? + Adjon meg egy érvényes licencet + Úgy érzékeltük, hogy a Cryptomatort a Google Play áruházon kívül telepítette. Adjon meg egy érvényes licencet, amit meg tud vásárolni itt: https://cryptomator.org/android/ + A megadott licenc nem érvényes. Győződjön meg arról, hogy jól írta be. + A megadott kulcs egy asztali támogatói igazolás. Kérem, adjon meg egy érvényes licencet. + Nincs licenc megadva. Kérem, adjon meg egy érvényes licencet. Kilépés + Licenc megerősítése + Köszönöm %1$s, hogy megadta érvényes licencét. Frissítés elérhető Frissítés most Ugrás a Letöltési oldalra Később Letöltés folyamatban + A mappa egy szimbolikus link Vissza + Nem lehet betölteni a könyvtár tartalmát + Ha új pCloud fiókot szeretne hozzáadni, koppintson erre az url-re: www.pcloud.com, jelentkezzen ki a jelenlegi fiókból és koppintson újra a \'+\' gombra az appban, hogy új felhő kapcsolatot létesítsen. A Cryptomatornak tárhely-hozzáférésre van szüksége a trezorok használatához A Cryptomatornak tárhely-hozzáférésre van szüksége az automatikus fotófeltöltés használatához @@ -352,6 +378,7 @@ A feltöltésre kiválasztott mappa már nem elérhető. Menjen a beállításokhoz, és válasszon egy újat A trezor zárolva lett a feltöltés során. A folytatáshoz nyissa meg újra Az automatikus feltöltéshez megadott tároló már nem létezik. + Koppintson a hitelesítés frissítéséhez. Írható fájl megnyitása A trezor a szerkesztés idejéig feloldva marad A legfrissebb verzió van telepítve @@ -365,6 +392,8 @@ %1$s Frissítések keresésése Frissítések keresése + Utolsó keresés %1$s + Felhőnkénti gyorsítótár mérete Azonnal 1 perc diff --git a/presentation/src/main/res/values-in-rID/strings.xml b/presentation/src/main/res/values-in-rID/strings.xml index ec0f5d21e..c87f6472b 100644 --- a/presentation/src/main/res/values-in-rID/strings.xml +++ b/presentation/src/main/res/values-in-rID/strings.xml @@ -20,7 +20,7 @@ Silakan buka pengaturan perangkat Anda dan atur kunci layar dengan tangan Ekspor gagal. Coba hapus karakter khusus dari nama file dan ekspor lagi. Tidak boleh mengandung karakter khusus. - Nama file tidak boleh mengandung karakter khusus. + Nama berkas tidak boleh mengandung karakter khusus. Nama vault tidak boleh mengandung karakter khusus. Pemeriksaan pembaruan gagal. Terjadi kesalahan. Pemeriksaan pembaruan gagal. Hash yang dihitung tidak cocok dengan file yang diunggah @@ -34,6 +34,7 @@ File lokal sudah tidak tersedia setelah beralih kembali ke Cryptomator. Perubahan yang ada tidak dapat disimpan kembali ke cloud. Bucket tidak ada Lokasi Masterkey khusus belum didukung + Gagal berkomunikasi dengan aplikasi F-Droid. Belum dipasang? Penyimpanan lokal @@ -54,12 +55,15 @@ Terlama dulu Terbesar dulu Terkecil dulu + Baca lebih lanjut + Cloud tidak ada di dalam daftar? Tambah ke Cryptomator Buat vault baru Tambahkan vault yang sudah ada Hapus + Ketuk disini untuk membuat vault baru Kasa Sandi berhasil diubah Vault @@ -113,6 +117,7 @@ Layanan Cloud Pilih lokasi + Ketuk disini untuk menambahkan lokasi Server tampaknya tidak kompatibel dengan WebDAV Tidak ditemukan file manager yang dapat membuka direktori ini @@ -192,6 +197,8 @@ Petunjuk keamanan Versi Pengaturan Lanjutan + Solusi membuka berkas Microsoft + Buka file di aplikasi Microsoft dengan izin menulis Percepat buka kunci Unduh konfigurasi vault di latar belakang saat diminta memasukkan kata sandi atau otentikasi biometrik Biarkan tidak terkunci @@ -209,6 +216,18 @@ %1$s tidak dapat diautentikasi. Perbarui kredensial pCloud + Varian Cryptomator + Repositori Utama F-Droid + Dikecualikan karena mereka memerlukan kunci API. + Pasang + Repositori Cryptomator F-Droid + Dikecualikan karena mengandung dependensi hak milik. + Tambahkan repositori Cryptomator ke aplikasi F-Droid. + Tambah + Pasang Cryptomator menggunakan F-Droid.\nJika muncul error tidak ditemukan, tunggu hingga sinkronisasi F-Droid selesai. + Situs Web + Berisi dependensi hak milik. + Beralih dari atau ke varian repositori utama F-Droid memerlukan pengaturan aplikasi yang baru. Batalkan Buka Kunci @@ -246,6 +265,7 @@ Anda memiliki perubahan yang belum disimpan Apakah Anda yakin ingin keluar tanpa menyimpan? Buang + Nama berkas text.txt Apakah Anda yakin ingin menghapus vault ini? Tindakan ini hanya akan menghapus vault dari daftar ini dan tidak menghapusnya secara fisik. @@ -272,6 +292,7 @@ Rincian Ini bisa menjadi risiko keamanan. Saya tahu apa yang saya lakukan. Nonaktifkan optimalisasi baterai + Untuk mengambil gambar dan video baru tanpa berjalan di latar belakang, kita perlu memilih untuk tidak ikut serta dalam pengoptimalan baterai. Namun jangan khawatir, %1$s tidak menghabiskan banyak energi.\n\nUntuk menerapkannya, ubah \'Tidak dioptimalkan\' menjadi \'Semua aplikasi\', pilih %1$s dan pilih \'Jangan optimalkan\' setelah mengetuk \'%2$s\' dalam dialog ini. Jangan tanya lagi? Penggunaan HTTP tidak aman. Kami menyarankan untuk menggunakan HTTPS sebagai gantinya. Jika Anda mengetahui risikonya, Anda dapat melanjutkan dengan HTTP. Ubah ke HTTPS @@ -284,6 +305,7 @@ Dalam mode ini, data sensitif dapat ditulis ke file log di perangkat Anda (misalnya, nama dan lokasi file). Kata sandi, cookie, dll secara eksplisit dikecualikan.\n\nJangan lupa untuk menonaktifkan mode debug sesegera mungkin. Perhatian Aktifkan + Karena adanya bug pada aplikasi Microsoft, berkas yang akan diedit harus dibagikan dengan aplikasi ini di folder media publik di perangkat Anda. Setelah Cryptomator dilanjutkan, berkas yang dapat diakses publik akan dihapus lagi, namun Cryptomator tidak dapat memengaruhi apa yang terjadi pada berkas ini untuk sementara. Pastikan Anda mengetahui perilaku ini saat mengaktifkan opsi ini. Ini hanya berlaku untuk jenis berkas Microsoft.\n\nCryptomator akan dimulai ulang setelah aktivasi. Pengaturan ini adalah fitur keamanan untuk mencegah aplikasi lain mengelabui pengguna melakukan hal-hal yang tidak ingin mereka lakukan.\n\nDengan menonaktifkan, Anda mengonfirmasi bahwa telah menyadari akan bahaya tersebut. Perhatian Matikan @@ -325,8 +347,10 @@ Folder cloud \'%1$s\' tidak memiliki file direktori yang valid. Bisa jadi folder tersebut dibuat di perangkat lain dan belum sepenuhnya tersinkronisasi ke cloud. Harap periksa di cloud Anda jika file berikut ada dan tidak kosong:\n%2$s Tidak ada lagi gambar untuk ditampilkan… Kredensial \'%1$s\' diperbarui + Jika Anda ingin menambahkan akun pCloud baru, ketuk url berikut www.pcloud.com, keluar dari akun saat ini kemudian ketuk tombol \'+\' lagi di aplikasi ini untuk membuat koneksi cloud baru. Cryptomator membutuhkan akses penyimpanan untuk menggunakan vault lokal Cryptomator membutuhkan akses penyimpanan untuk menggunakan unggahan foto otomatis + Cryptomator perlu izin pemberitahuan untuk menampilkan status brankas, misalnya @@ -370,6 +394,7 @@ Folder yang dipilih untuk mengunggah tudak lagi tersedia. Buka pengaturan dan pilih yang baru Vault terkunci selama unggahan, silakan buka kembali vault untuk melanjutkan Vault yang ditentukan untuk unggah otomatis tidak ada lagi. + Ketuk untuk menyegarkan otentikasi. Buka file yang dapat ditulis Vault tetap tidak terkunci sampai selesai mengedit Versi terbaru sudah terpasang diff --git a/presentation/src/main/res/values-it-rIT/strings.xml b/presentation/src/main/res/values-it-rIT/strings.xml index 729d29fe8..80bd23dc9 100644 --- a/presentation/src/main/res/values-it-rIT/strings.xml +++ b/presentation/src/main/res/values-it-rIT/strings.xml @@ -1,7 +1,7 @@ - Crittografa + Cripta Si è verificato un errore Autenticazione non riuscita @@ -32,9 +32,9 @@ %1$s non corrisponde a questo %2$s Errore generale durante il caricamento della configurazione della cassaforte Il file locale non è più presente dopo essere tornato a Cryptomator. Le eventuali modifiche non possono essere riprodotte nel cloud. - Nessun secchio simile - Posizione della Chiave Principale Personalizzata non ancora supportata - Non sei riuscito a comunicare con l\'app F-Droid. Non installata? + Nessun bucket di questo tipo + Posizione personalizzata della Chiave Principale non ancora supportata + Impossibile comunicare con l\'app F-Droid. Forse non è installata? Archivio locale @@ -198,6 +198,8 @@ Suggerimenti di sicurezza Versione Impostazioni Avanzate + Soluzione per aprire i file Microsoft + Apri file nelle app Microsoft con i permessi di scrittura Accelera sblocco Scarica la configurazione della cassaforte in background quando è stato richiesto di inserire la password o l\'autenticazione biometrica Mantieni sbloccato @@ -304,6 +306,7 @@ In questa modalità, i dati sensibili possono essere scritti in un file di registro sul dispositivo (ad es. nomi di file e percorsi). Password, cookie, ecc. sono esplicitamente esclusi.\n\nRicorda di disabilitare la modalità di debug il prima possibile. Attenzione Abilita + A causa di un bug nelle applicazioni Microsoft, il file da modificare deve essere condiviso con queste applicazioni in una cartella pubblica sul tuo dispositivo. Dopo aver riavviato Cryptomator, il file accessibile pubblicamente viene nuovamente eliminato, ma Cryptomator non può controllare cosa sia successo a questo file nel frattempo. Assicurati di essere a conoscenza di questo comportamento quando attivi questa opzione. Questo si applica solo ai formati di file Microsoft.\n\nCryptomator si riavvia dopo l\'attivazione. Questa impostazione è una funzione di sicurezza e impedisce ad altre applicazioni di ingannare gli utenti a fare cose che non sono in grado di fare.\n\nDisabilitando confermi di essere a conoscenza dei rischi. Attenzione Disabilita @@ -392,6 +395,7 @@ La cartella selezionata per il caricamento non è più disponibile. Vai alle impostazioni e sceglierne una nuova Cassaforte bloccata durante il caricamento, riapri la cassaforte per continuare La cassaforte specificata per il caricamento automatico non esiste più. + Tocca per aggiornare l\'autenticazione. Apri file scrivibile La cassaforte rimane sbloccata fino alla modifica completata Ultima versione installata diff --git a/presentation/src/main/res/values-ja-rJP/strings.xml b/presentation/src/main/res/values-ja-rJP/strings.xml index 615684d2e..ee47e937c 100644 --- a/presentation/src/main/res/values-ja-rJP/strings.xml +++ b/presentation/src/main/res/values-ja-rJP/strings.xml @@ -9,8 +9,8 @@ ネットワーク接続がありません パスワードが正しくありません ファイルかフォルダーが既に存在します。 - 金庫のバージョン %1$s はサポートされていません。この金庫は、現在のものより古いか新しいバージョンの Cryptomator で作成されています。 - %1$s ファイルが金庫のフォルダーに見つかりませんでした。クラウドの金庫フォルダーにこのファイルが存在することをご確認ください。 + バージョン %1$s の金庫には対応していません。この金庫は、現在のものより古いか新しいバージョンの Cryptomator で作成されています。 + %1$s ファイルが金庫のフォルダーに見つかりませんでした。クラウドの金庫フォルダーにこのファイルが存在することを確認してください。 金庫が既に存在します。 ファイルが存在しません。 金庫が施錠されました。 @@ -71,11 +71,11 @@ ここにおく 金庫の名前: %1$s - %2$d アイテムを移動する + %2$d 件のアイテムを移動 移動 空のフォルダー - %1$s 前に編集 + %1$s前に編集 次で共有 保存先を選択 選択 @@ -125,7 +125,7 @@ ユーザー名 パスワード 接続 - URLは空にできません。 + URL は空にできません。 URL が無効です。 ユーザー名は空にできません。 パスワードは空にできません。 @@ -178,7 +178,7 @@ アップロードする金庫を選択 有効 バックグラウンドで画像を取得し、選択された金庫が解錠されるとアップロードを開始します - インスタントをアップロード + 即時アップロード 金庫が解錠されているときに直接アップロード WIFI を使用しているときのみアップロード 動画をアップロード @@ -197,6 +197,8 @@ セキュリティの心得 バージョン 高度な設定 + Microsoft のファイルを開くための回避策 + ファイルを Microsoft アプリから書き込み可能で開く 高速な解錠 パスワードまたは生体による認証中に、バックグラウンドで金庫の設定をダウンロードします 解錠したままにする @@ -303,6 +305,7 @@ このモードでは、デバイスのログファイルに機密情報が書き込まれることがあります(例: ファイル名やパス)。パスワードや cookie 等は除外されます。\n\n できるだけ早くデバッグ モードを無効化をすることを忘れないでください。 注意 有効にする + このオプションを有効にする場合には以下の挙動を必ずご確認ください。Microsoft アプリのバグを回避するため、編集するファイルはデバイス上の公開メディアフォルダを通してアプリに共有する必要があります。編集を終えて Cryptomator に戻った際に公開メディアフォルダ上のファイルは削除されますが、その間ファイルは他アプリからもアクセス可能なままとなります。本回避策は Microsoft のファイルタイプのみに適用されます。\n\nオプションを有効化した後に Cryptomator は再起動します。 この設定は安全のための機能です。他のアプリがユーザーを騙してしまうことを防ぎます。\n\n無効にすることで、 リスクを認識していること に留意する必要があります。 注意 無効 @@ -362,8 +365,8 @@ - - + 時間 + 時間 @@ -382,7 +385,7 @@ %1$s で自動ロック すべて施錠 アップロードをキャンセル - 写真を自動的にアップロードしています + 写真の自動アップロード中 アップロード中 %1d/%2d 写真の自動アップロードが完了しました %1$d 個の画像を金庫にアップロードしました @@ -391,9 +394,10 @@ アップロード用として選択されたフォルダーを利用できません。設定に移動して新しいフォルダーを選択してください。 アップロード中は金庫が施錠されます。続けるには金庫を再度開いてください。 自動アップロードに設定された金庫が存在しません。 + タップして認証を更新します。 書き込み可能なファイルを開く 編集が完了するまで金庫は施錠されます - 最新バージョンがインストールされました + 最新版がインストールされています 認証中… キャッシュ 最近アクセスしたファイルを暗号化して端末のローカルにキャッシュし、後で再び開いたときに再利用することができます。 diff --git a/presentation/src/main/res/values-ko-rKR/strings.xml b/presentation/src/main/res/values-ko-rKR/strings.xml index 9f6dae088..2400549d3 100644 --- a/presentation/src/main/res/values-ko-rKR/strings.xml +++ b/presentation/src/main/res/values-ko-rKR/strings.xml @@ -17,19 +17,23 @@ 클라우드가 이미 존재합니다. 이 파일을 열 수 있는 애플리케이션을 다운로드해주세요. 서버를 찾을 수 없습니다 + 장치 설정을 열어 화면 잠금을 직접 설정하세요 내보내기 실패. 파일명에서 특수문자를 없앤 뒤 다시 내보내기를 해보세요. 특수문자는 포함할 수 없습니다. 파일명에 특수 문자는 포함할 수 없습니다. Vault 이름은 특수문자를 포함할 수 없습니다. - 업데이트 확인 실패. 에러가 발생했습니다. + 업데이트 확인 실패. 오류가 발생했습니다. 업데이트 확인 실패. 업로드된 파일과 해쉬값이 일치하지 않습니다. 업데이트 확인 실패. 인터넷에 연결되지 않았습니다. WebDAV 비밀번호를 복호화하는데 실패했습니다. 다시 설정해주세요. Google Play 서비스가 설치되지 않았습니다 생체 인증 취소됨 %1$s에 기록된 버전이 %2$s에 기록된 버전과 다릅니다 + %1$s 및 이 %2$s 동일하지 않습니다 Vault 설정을 불러오는 중 에러 발생 + 로컬 파일은 Cryptomator로 돌아온 후 더 이상 존재하지 않습니다. 추가적인 수정 사항이 클라우드에 적용되지 않습니다. 해당 버킷을 찾을 수 없습니다. + 사용자 지정이 가능한 마스터키 경로는 아직 지원하지 않습니다 F-Droid 앱을 찾을 수 없습니다. 앱을 설치했는지 확인해주세요. @@ -66,6 +70,9 @@ 마스터키 파일 선택 여기에 만들기 Vault 이름: %1$s + + %2$d 이동 위치 + 이동 빈 폴더 %1$s 전 변경됨 @@ -102,6 +109,7 @@ 텍스트 파일 파일 + 파일 이름은 유일해야 합니다, 중복된 이름을 변경하세요. 저장 위치 저장 암호화 완료 @@ -109,7 +117,9 @@ 클라우드 서비스 위치 선택 + 여기를 탭하여 경로 위치 추가 WebDAV가 지원되지 않는 서버입니다 + 디렉토리를 열 수 있는 파일 관리자를 찾을 수 없습니다 URL 사용자명 @@ -123,11 +133,13 @@ 표시 이름 액세스 키 비밀키 + 이미 존재하는 버킷 엔드포인트 지역 표시 이름은 비워둘 수 없습니다 액세스 키를 입력해주세요 비밀 키를 입력해주세요 + 버킷은 비어있을 수 없습니다 엔드포인트 또는 지역은 비워둘 수 없습니다 Vault 이름을 입력해주세요. @@ -151,6 +163,7 @@ 생체 인증 활성화 얼굴인식 잠금해제 적용 (가능한 경우) 타 앱이 화면을 가릴 경우 Cryptomator 비활성화 + 입력을 가로채는 것을 막고 가장된 유저 인터페이스를 표시합니다 스크린샷 차단 최근 사용 목록과 앱 내부에서 스크린샷 차단 검색 @@ -164,10 +177,12 @@ 사진 자동 업로드 업로드 할 Vault 선택 활성화 + 백그라운드에서 사진을 감지하고, 선택된 Vault가 잠금 해제될 시 업로드를 시작합니다 바로 업로드하기 Vault가 잠금 해제되어 있을 때 바로 업로드하기 Wi-Fi 상태에서만 업로드 동영상 업로드 + 자동 업로드 대상 파일 저장 위치… Cryptomator 웹사이트 Twitter에서 팔로우하기 Facebook에서 좋아요 누르기 @@ -182,8 +197,12 @@ 보안 힌트 버전 고급 설정 + Microsoft 파일 열람을 시도하기 + 파일을 쓰기 권한과 함께 Microsoft 앱에서 열람합니다 잠금해제 가속 + 비밀번호 입력 혹은 생체 인증을 진행하는 동안 백그라운드에서 Vault 설정을 다운로드합니다 잠금해제유지 + 파일을 편집하는 동안 Vault들을 잠금 해제 상태로 유지 OneDrive 연결 WebDAV 연결 @@ -194,14 +213,21 @@ 로그아웃 + %1$s 인증할 수 없습니다. pCloud 자격증명 업데이트 + Cryptomator 종류 주 F-Droid 리포지토리 API키가 필요하므로 제외되었습니다. 설치 Cryptomator F-Droid 리포지토리 + 독점 의존성을 가지고 있어 제외되었습니다. + F-Droid 앱에 Cryptomator 레포지토리를 추가합니다. 추가 + F-Droid로 Cryptomator를 설치합니다.\n만약 찾을 수 없음 오류가 표시된다면, F-Droid 동기화가 완료될 시점까지 기다리세요. 웹사이트 + 독점 의존성을 포함합니다. + F-Droid 레포지토리 판과 상호 전환하려면 앱의 완전한 재설정이 필요합니다. 취소 잠금해제 @@ -222,6 +248,9 @@ 모두 바꾸기 중복 파일 덮어쓰기 교체 + \'%1$s\' 이름을 가진 파일이 이미 존재합니다. 덮어쓸까요? + 기존의 파일들이 이미 모두 존재합니다. 덮어쓸까요? + %1$d 파일들이 이미 존재합니다. 덮어쓸까요? 파일을 덮어쓰겠습니까? 파일을 덮어쓰겠습니까? 파일을 공유할 수 없습니다 @@ -239,12 +268,15 @@ 파일명 text.txt 이 Vault를 정말로 제거하시겠습니까? + 이 동작은 Vault를 이 리스트에서만 제거하며, 실제로 삭제하지는 않습니다. … 업로드 중 + 파일 %2$d 중 %1$d 내보내는중 (%1$d/%2$d) 잠시 기다려주세요… 폴더 만드는 중… 텍스트 파일 만드는 중… 인증 중… + 이름 변경 중… 삭제 중… Vault 잠금해제 중… 비밀번호 변경 중… @@ -259,36 +291,60 @@ SSL 인증서가 유효하지 않습니다. 인증서를 신뢰하고 계속 진행하겠습니까? 세부정보 이는 보안 문제를 야기할 수 있습니다. 나는 지금 나의 행동을 이해합니다. + 배터리 사용량 최적화 비활성화 + 백그라운드에서 실행하지 않고 새로운 사진과 영상을 가져오려면, 배터리 사용량 최적화에서 제외해야 합니다. 하지만 걱정하지 마세요, %1$s 많은 에너지를 소모하지 않습니다.\n\n적용하려면, 이 다이얼로그에서 \'%2$s\' 누른 후에 \'최적화되지 않음\'을 \'모든 앱\'으로 변경하고, %1$s 선택하여 \'최적화되지 않음\'을 고르세요. + 다시 묻지 않기 HTTP 사용은 안전하지 않습니다. HTTPS 사용을 권장합니다. HTTP 사용으로 야기될 문제를 숙지하고 있다면, HTTP를 사용할 수 있습니다. HTTPS로 변경 HTTPS를 사용하겠습니가? 화면 잠금 설정이 되어있지 않습니다. 자격증명을 안전하게 보호하기 위해 패턴이나 비밀번호를 설정하세요. 화면 잠금 설정을 하시겠습니까? 화면 잠금 설정 + 시스템에 기본 인증이 설정되지 않았습니다 + 이 서비스를 사용하려면 최소한 하나의 지문/얼굴을 등록하세요. 이 모드에서는 민감한 정보들이 로그 파일로 기기에 기록될 수 있습니다.(파일명, 경로 등). 비밀번호, 쿠키 등의 정보는 예외입니다.\n\n 가능한 디버그 모드를 빨리 비활성화 하세요. 주의 활성화 + Microsoft 앱의 버그로 인해, 편집할 파일이 장치의 공개 미디어 폴더에서 공유되어야 합니다. Cryptomator의 실행이 재개되면 이 공개 접근이 가능한 파일은 다시 삭제되나, Cryptomator는 해당 파일에 어떠한 일이 일어났는지 알 수 없습니다. 이 항목을 활성화할 경우 이러한 동작이 일어남을 숙지하세요. 이것은 Microsoft 파일 형식에만 적용됩니다. \n\n활성화 후 Cryptomator를 다시 시작합니다. + 이 설정은 보안 기능이며 다른 앱들이 사용자가 원하지 않는 행동을 하도록 속이는 것을 방지합니다.\n\n비활성화한다면, 위험성에 대해 동의하는 것입니다. 주의 비활성화 + 앱이 가려짐 + 다른 앱이 Cryptomator 위에 무언가를 표시하고 있습니다 (예: 블루 라이트 필터 혹은 야간 모드 앱 등). 보안을 위해, Cryptomator가 비활성화 되었습니다.\n\nCryptomator를 활성화하는 방법 닫기 + Vault들을 %1s 클라우드를 사용하기 위해 다시 추가해야 함 + 이 버전의 앱으로 전환하기 위해 다음의 Vault들을 앱에서 제거해야 합니다:\n%2s \n\n이 Vault 들은 클라우드가 아닌 이 앱에서만 제거됩니다. 계속 사용하기 위해 이 Vault들을 다시 추가하세요. + Vault가 클라우드의 최상위 폴더임 + 이 Vault를 추가하려면, 최소한 이 Vault의 최상위 디렉토리 폴더의 상위 폴더에 새로운 클라우드 연결을 생성해야 합니다. + 이 설정은 보안 기능이며 다른 앱들이 사용자가 원하지 않는 행동을 하도록 속이는 것을 방지합니다.\n\n비활성화한다면, 위험성에 대해 동의하는 것입니다. 정말 이 클라우드 연결을 삭제하시겠습니까? 클라우드 연결과 이 클라우드의 Vault들이 삭제될 것입니다. %1$d개의 파일을 삭제하시겠습니까? 정말 이 파일들을 삭제하시겠습니까? 정말 이 파일을 삭제하시겠습니까? + 폴더의 모든 하위 항목들을 삭제합니다. 그래도 이 폴더를 삭제할까요? + 생체 인증 기능이 비활성화됨 + 키가 유효하지 않게 되어, 생체 인증 기능이 비활성화 되었습니다. 다시 활성화하려면 Cryptomator 설정을 여세요. 유효한 라이선스를 입력하세요 Google Play 스토어를 이용하지 않고 Cryptomator가 설치되었음을 감지했습니다. 유효한 라이선스를 입력해주세요. 라이선스는 https://cryptomator.org/android/에서 구매가능합니다. 입력된 라이선스는 유효하지 않습니다. 다시한번 확인해주세요. + 제공된 키는 데스크톱 판의 서포터 인증서입니다. 유효한 라이선스를 입력하세요. 라이선스가 입력되지 않았습니다. 유효한 라이선스를 입력해주세요. 종료 라이선스 확인 + %1$s님, 유효한 라이선스를 사용해 주셔서 감사합니다. 업데이트가 출시되었습니다 + Cryptomator을 최신 버전으로 업데이트합니다. OK를 누르면 백그라운드에서 앱을 다운로드하고 설치를 요청합니다. 지금 업데이트 하기 다운로드 페이지로 가기 다음에 하기 다운로드중 최신 버전의 Cryptomator 다운로드중 + 폴더가 심볼릭 링크임 + 이 심볼릭 링크를 탐색할 수 없습니다 이전 + 디렉토리의 내용을 불러올 수 없음 + 클라우드 폴더 \'%1$s\'에 유효한 디렉토리 파일이 없습니다. 이 폴더가 다른 장치에서 생성되었으며 클라우드에 아직 완전히 동기화가 되지 않았을 가능성이 있습니다. 다음 파일이 클라우드에 존재하고 비어있지 않은지 확인하세요:\n%2$s 더 띄울 사진들이 없습니다. \'%1$s\' 자격증명 업데이트됨 새 pCloud 계정을 추가하려면 이 링크 www.pcloud.com를 누르고, 현재 계정에서 로그아웃한 뒤 여기에서 \'+\'를 다시 눌러서 추가해주세요. @@ -338,6 +394,7 @@ 선택한 폴더로 더이상 업로드할 수 없습니다. 설정에서 새로 선택해주세요. 업로드중에 vault가 잠겼습니다. 해당 vault를 다시 열어주세요. 자동 업로드를 할 vault가 더이상 존재하지 않습니다. + 탭하여 인증을 다시 시도하세요. 쓰기 가능한 파일 열림 파일 수정이 완료될 때까지 Vault가 계속 잠금해제됩니다 최신 버전 설치됨 @@ -354,6 +411,7 @@ 마지막 확인 %1$s 클라우드당 캐시 크기 + 즉시 1분 2분 5분 diff --git a/presentation/src/main/res/values-mk-rMK/strings.xml b/presentation/src/main/res/values-mk-rMK/strings.xml index 02ca5ecd2..28b174773 100644 --- a/presentation/src/main/res/values-mk-rMK/strings.xml +++ b/presentation/src/main/res/values-mk-rMK/strings.xml @@ -6,9 +6,11 @@ + Продолжи + Сеф @@ -17,13 +19,19 @@ + Прифати + Откажи + Отклучи + Заклучи + Затвори + Назад diff --git a/presentation/src/main/res/values-mr-rIN/strings.xml b/presentation/src/main/res/values-mr-rIN/strings.xml new file mode 100644 index 000000000..02ca5ecd2 --- /dev/null +++ b/presentation/src/main/res/values-mr-rIN/strings.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/presentation/src/main/res/values-nb-rNO/strings.xml b/presentation/src/main/res/values-nb-rNO/strings.xml index 593df4296..1f54449d8 100644 --- a/presentation/src/main/res/values-nb-rNO/strings.xml +++ b/presentation/src/main/res/values-nb-rNO/strings.xml @@ -198,12 +198,14 @@ Sikkerhetstips Versjon Avanserte innstillinger + En mulig løsning for å åpne Microsoft-filer + Åpne filer i Microsoft-apper med skrivetilgang Akselerer opplåsing Last ned hvelvkonfigurasjonen i bakgrunnen mens du blir bedt om å skrive inn passord eller biometrisk autentisering Behold ulåst Beholdt hvelvet opplåst mens du redigerer filer - OneDrive tilkoblinger + OneDrive-tilkoblinger WebDAV-tilkoblinger pCloud-tilkoblinger S3 tilkoblinger @@ -304,6 +306,7 @@ 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. Merk følgende Aktiver + På grunn av en feil i Microsoft apper, filen som skal redigeres, må deles med disse appene i en offentlig mediemappe på enheten din. Når Cryptomator er gjenopptatt, slettes den offentlig tilgjengelige filen igjen, men Cryptomator kan ikke påvirke hva som har skjedd i mellomtiden. Pass på at du er klar over denne adferden når du aktiverer dette alternativet. Dette gjelder bare for Microsoft-filtyper.\n\nCryptomator starter på nytt etter aktivering. Denne innstillingen er en sikkerhetsfunksjonalitet som hindrer andre app\'er fra å lure brukerne til å gjøre ting de ikke vil.\n\nVed å skru dette av, bekrefter du at du er klar over risikoen. Merk følgende Deaktiver @@ -392,6 +395,7 @@ Valgte mappe for opplasting er ikke tilgjengelig lenger. Gå til innstillinger og velg en ny Hvelvet ble låst under opplasting, åpne hvelvet på nytt for å fortsette Det angitte hvelvet for automatisk opplasting eksisterer ikke lenger. + Trykk for å oppdatere autentiseringen. Åpne skrivbar fil Hvelvet forblir opplåst til redigeringen er ferdig Siste versjon er installert diff --git a/presentation/src/main/res/values-nl-rNL/strings.xml b/presentation/src/main/res/values-nl-rNL/strings.xml index 6700c7c8e..3e7886e88 100644 --- a/presentation/src/main/res/values-nl-rNL/strings.xml +++ b/presentation/src/main/res/values-nl-rNL/strings.xml @@ -395,7 +395,7 @@ Geselecteerde map voor uploaden is niet meer beschikbaar. Ga naar instellingen en kies een nieuwe Kluis vergrendeld tijdens het uploaden, heropen de kluis om door te gaan De gekozen kluis voor automatische upload bestaat niet meer. - Tik om de authenticatie te vernieuwen. + Aantikken om de authenticatie te vernieuwen. Open schrijfbaar bestand Kluis blijft ontgrendeld tot het bewerken voltooid is Laatste versie geïnstalleerd diff --git a/presentation/src/main/res/values-pl-rPL/strings.xml b/presentation/src/main/res/values-pl-rPL/strings.xml index d557ddfba..6b3e13bc3 100644 --- a/presentation/src/main/res/values-pl-rPL/strings.xml +++ b/presentation/src/main/res/values-pl-rPL/strings.xml @@ -200,6 +200,8 @@ Wskazówki bezpieczeństwa Wersja Ustawienia zaawansowane + Otwieranie plików Microsoft + Otwórz pliki w aplikacjach firmy Microsoft z uprawnieniami do zapisu Przyspiesz odblokowanie Pobierz konfigurację sejfu w tle, gdy zostaniesz poproszony o wprowadzenie hasła lub autoryzację biometryczną Zachowaj odblokowany @@ -306,6 +308,7 @@ W tym trybie poufne dane mogą być zapisywane do pliku dziennika na urządzeniu (np. nazwy plików i ścieżki). Hasła, ciasteczka itp. są wykluczone.\n\nPamiętaj, aby wyłączyć tryb debugowania tak szybko, jak to możliwe. Uwaga Włącz + Z powodu błędu w aplikacjach firmy Microsoft, plik do edycji musi być udostępniony tym aplikacjom w folderze mediów publicznych na Twoim urządzeniu. Po wznowieniu działania Cryptomator ponownie usuwa publicznie dostępny plik, ale Cryptomator nie może wpływać na to, co w międzyczasie stało się z tym plikiem. Upewnij się, że jesteś świadomy tego zachowania podczas aktywowania tej opcji. To będzie dotyczyć tylko typów plików firmy Microsoft.\n\nCryptomator uruchomi się ponownie po aktywacji. To ustawienie jest funkcją bezpieczeństwa i uniemożliwia innym aplikacjom oszukiwanie użytkowników.\n\nWyłączając je potwierdzasz, że jesteś świadomy ryzyka. Uwaga Wyłącz @@ -394,6 +397,7 @@ Wybrany folder do przesłania nie jest już dostępny. Przejdź do ustawień i wybierz nowy Sejf został zablokowany podczas przesyłania, otwórz go ponownie aby kontynuować Sejf wybrany do automatycznego wysyłania już nie istnieje. + Dotknij, aby odświeżyć uwierzytelnianie. Otwórz plik zapisywalny Sejf pozostaje odblokowany do czasu zakończenia edycji Zainstalowano najnowszą wersję diff --git a/presentation/src/main/res/values-pt-rBR/strings.xml b/presentation/src/main/res/values-pt-rBR/strings.xml index 59c6f7556..258352634 100644 --- a/presentation/src/main/res/values-pt-rBR/strings.xml +++ b/presentation/src/main/res/values-pt-rBR/strings.xml @@ -32,7 +32,7 @@ %1$s não coincide com este %2$s Erro geral ao carregar a configuração do cofre O arquivo local não está mais presente depois de voltar ao Cryptomator. Possíveis alterações não podem ser propagadas de volta para o provedor de nuvem. - Não existe tal bucket no nome de domínio + Bucket não encontrado Localização de Masterkey personalizada ainda não é suportada Falha na comunicação com o aplicativo F-Droid. Ele está instalado? @@ -132,16 +132,16 @@ A senha não pode estar vazia. Nome de Exibição - Chave de acesso + Chave de Acesso Chave Secreta - Bucket do nome de domínio na URL existente + Bucket existente Endpoint Região - O nome de exibição não pode estar em branco - Chave de acesso não pode estar em branco - A chave secreta não pode estar em branco - Bucket do nome de domínio da URL não pode estar em branco - Endpoint ou Região não pode estar em branco + Nome de Exibição não pode estar vazio + Chave de Acesso não pode estar vazia + Chave Secreta não pode estar vazia + Bucket não pode estar vazio + Endpoint e Região não podem estar vazios O nome do cofre não pode estar em branco. Nome do cofre @@ -149,7 +149,7 @@ Definir senha A senha não coincide com a senha digitada. - Pronto + Concluído IMPORTANTE: Se você esquecer sua senha, não há como recuperar seus dados. Redigite a senha Senha muito fraca para criar um cofre @@ -180,7 +180,7 @@ Ativar Capture imagens em segundo plano e assim que o cofre selecionado for desbloqueado, inicie o upload Upload instantâneo - Envie diretamente se o cofre estiver desbloqueado + Enviar imediatamente se o cofre estiver desbloqueado Fazer upload apenas usando o WIFI Upload de vídeos Salvar upload automático de arquivos em… @@ -291,11 +291,11 @@ Certificado SSL inválido O certificado SSL é inválido. Deseja confiar nele mesmo assim? Detalhes - Isto pode ser um risco para a segurança. Eu sei o que estou fazendo. + Isto pode ser um risco de segurança. Eu sei o que estou fazendo. Desativar otimizações de bateria Para recuperar novas fotos e vídeos sem executar em segundo plano, precisamos desativar as otimizações de bateria. Mas não se preocupe, %1$s não consome muita energia.\n\nPara aplicar, altere \'Não otimizado\' para \'Todos os aplicativos\', selecione %1$s e escolha \'Não otimizar\' depois de tocar \'%2$s\' nesta caixa de diálogo. - Não pergunte novamente - O uso de HTTP é inseguro. Recomendamos a utilização de HTTPS. Se você souber os riscos, você pode continuar com o HTTP. + Não perguntar novamente? + O uso de HTTP é inseguro. Recomendamos utilizar HTTPS. Se você conhecer os riscos, pode continuar com HTTP. Mudar para HTTPS Usar HTTPS? Nenhum bloqueio de tela foi configurado. Para armazenar suas credenciais de forma segura, configure com OK um padrão ou senha. @@ -310,10 +310,10 @@ Esta configuração é um recurso de segurança e impede que outros aplicativos induzam os usuários a fazer coisas que não devem fazer.\n\nAo desativar, você confirma que está ciente dos riscos. Atenção Desabilitar - O aplicativo está escuro - Outro aplicativo está exibindo algo no topo do Cryptomator (por exemplo, um filtro de luz azul ou aplicativo de modo noturno). Por razões de segurança, o Cryptomator está desativado.\n\nComo ativar o Cryptomator + O aplicativo está obscurecido + Outro aplicativo está exibindo algo sobre o Cryptomator (por exemplo, um filtro de luz azul ou aplicativo de modo noturno). Por motivo de segurança, o Cryptomator está desativado.\n\nComo ativar o Cryptomator Fechar - Por favor, readicione cofres para %1s nuvem + Por favor, readicione cofres para a nuvem %1s Durante a migração para esta versão do aplicativo, precisamos remover os seguintes cofres do aplicativo:\n%2s \n\nEsses cofres não são removidos da nuvem, mas apenas deste aplicativo. Desculpe o incômodo e por favor adicione novamente estes cofres para continuar a trabalhar com eles. O cofre é a pasta raiz da conexão com a nuvem Crie uma nova conexão com a nuvem onde você seleciona pelo menos a pasta principal desta pasta de cofre como o diretório raiz para adicionar este cofre. @@ -326,7 +326,7 @@ Isto irá apagar todo o conteúdo da pasta. Tem certeza que deseja excluir esta pasta? Recurso de autenticação biométrica desativado Como a chave foi invalidada, o recurso de autenticação biométrica foi desativado. Para reativar, abra as configurações do Cryptomator. - Fornecer uma licença válida + Forneça uma licença válida Nós detectamos que você instalou o Cryptomator sem usar a Google Play Store. Forneça uma licença válida, que pode ser comprada em https://cryptomator.org/android/ A licença fornecida não é válida. Verifique se você digitou corretamente. A chave fornecida é um certificado de suporte da área de trabalho. Por favor, insira uma licença válida. @@ -371,14 +371,14 @@ dia dias semana - Semanas + semanas mês meses ano anos Acesso biométrico - Faça login usando suas credenciais biométricas + Desbloqueie usando credencial biométrica Usar senha do cofre Não foi possível carregar arquivos automaticamente @@ -387,21 +387,21 @@ Bloquear todos Cancelar upload Upload automático de fotos em execução - Uploading %1d/%2d + Enviando %1d/%2d Upload automático de fotos concluído %1$d imagens enviadas para o cofre O upload automático de foto falhou Ocorreu um erro geral durante o upload. - A pasta selecionada para envio não está mais disponível. Vá para configurações e escolha uma nova pasta - Cofre trancado durante o upload, por favor reabra o cofre para continuar + A pasta escolhida para envio não está mais disponível. Vá até configurações e escolha uma nova pasta + O cofre foi bloqueado durante o upload, por favor desbloqueie o cofre para continuar O cofre especificado para upload automático não existe mais. Toque para atualizar a autenticação. Abrir arquivo gravável - Cofre permanece desbloqueado até terminar de editar + O cofre permanece desbloqueado até terminar de editar Versão mais recente instalada Autenticando… Cache - Cache de arquivos acessados recentemente criptografados localmente no dispositivo para reutilização posterior quando reaberto + Cache para arquivos acessados recentemente para reutilização posterior quando reabertos Tamanho total do cache Limpar Cache As alterações serão aplicadas na próxima reinicialização do aplicativo @@ -412,7 +412,7 @@ Última execução %1$s Tamanho do cache por provedor de nuvem - Instantâneo + Instante 1 minuto 2 minutos 5 minutos diff --git a/presentation/src/main/res/values-pt-rPT/strings.xml b/presentation/src/main/res/values-pt-rPT/strings.xml index e4f248f9c..bfcf40a83 100644 --- a/presentation/src/main/res/values-pt-rPT/strings.xml +++ b/presentation/src/main/res/values-pt-rPT/strings.xml @@ -70,6 +70,10 @@ Selecionar ficheiro MasterKey Colocar aqui Nome do cofre: %1$s + + Mover %1$s para + Mover %2$d para + Mover Pasta vazia modificado %1$s atrás @@ -131,10 +135,13 @@ Chave de acesso Chave Secreta Compartimento existente + URL Região O Nome não pode ser vazio Chave de acesso não pode estar vazia A chave secreta não pode estar vazia + Não pode estar vazio + URL ou região não podem estar vazios O nome do cofre não pode estar vazio. Nome do cofre @@ -149,9 +156,37 @@ Fraca Razoável Forte + Muito forte Geral + Serviços na nuvem + Autenticação biométrica + Ativar autenticação biométrica + Confirmar desbloqueio facial (se disponível) + Bloquear aplicação quando ocultado + Bloquear a interceção da entrada e apresentar uma interface de utilizador falsa + Bloquear capturas de ecrã + Bloquear capturas de ecrã na lista de recentes e dentro da aplicação Buscar + Pesquisa em tempo real + Atualizar resultados de pesquisa ao inserir o texto + Pesquisar com padrão \"glob\" + Usar padrão \"glob\" correspondente, como alice.*.jpg + Bloqueio automático + Bloquear após + Quando o ecrã estiver desativado + Upload de foto automático + Escolha o cofre para upload + Ativar + Capturar imagens em segundo plano e assim que o cofre selecionado for desbloqueado, iniciar o envio + Envio instantâneo + Enviar diretamente se o cofre está desbloqueado + Enviar apenas usando WIFI + Enviar vídeos + Guardar arquivos enviados automaticamente em… + Site do Cryptomator + Siga-nos no Twitter + Siga-nos no Facebook Informação Legal Licenças Termos de aceitação @@ -163,39 +198,238 @@ Dicas de segurança Versão Definições Avançadas + Solução para a abertura de arquivos Microsoft + Abrir ficheiros em apps da Microsoft com permissão de gravação Desbloqueio acelerado + Descarregar a configuração do cofre em segundo plano enquanto é solicitado para inserir a palavra-passe ou o reconhecimento biométrico Manter desbloqueado Mantenha cofres desbloqueados durante a edição de ficheiros Conexões do OneDrive Ligações WebDAV ligações pCloud + Ligações S3 Local de armazenamento + Iniciar sessão em + Terminar sessão em + %1$s não pôde ser autenticado. + Atualizar credenciais do pCloud + Variantes do Cryptomator + Repositório principal no F-Droid + Excluídos porque requerem chaves API. + Instalar + Repositório do Cryptomator no F-Droid + Excluído porque contém dependências proprietárias. + Adicione repositório de Cryptomator ao aplicativo F-Droid. + Adicionar + Instalar o Cryptomator utilizando F-Droid.\nSe um erro de não encontrado for exibido, aguarde até que a sincronização do F-Droid termine. + Página web + Contém dependências proprietárias. + Mudar de ou para a variante principal do repositório F-Droid requer uma nova configuração do aplicativo. Cancelar Desbloquear + Palavra-passe antiga + Nova palavra-passe + Alterar palavra-passe + Palavra-passe antiga não pode estar vazia. + Nova palavra-passe não pode estar vazia. + A nova palavra-passe não corresponde à digitada no outro campo. + Cofre %1$s não encontrado + O cofre foi renomeado, movido ou apagado. Remova este cofre da lista e adicione-o novamente para prosseguir. Remover agora? Remover + O ficheiro já existe + Substituir + Um ficheiro com o nome \'%1$s\' já existe. + Saltar existente + Substituir todos + Substituir existente + Substituir + Um ficheiro chamado \'%1$s\' já existe. Deseja substituí-lo? + Todos os ficheiros já existem. Quer substituí-los? + Já existem %1$d ficheiros. Quer substituí-los? + Substituir ficheiro? + Substituir ficheiros? + Não foi possível partilhar os ficheiros + Você não configurou nenhum cofre. Por favor, crie primeiro um novo cofre com o aplicativo Cryptomator. + OK + Criar cofre + Não é possível abrir %1$s + Por favor, descarregar um aplicativo que pode abrir este arquivo ou você gostaria de salvar no seu dispositivo? + Renomear cofre + Renomear pasta + Renomear ficheiro + Tem alterações não guardadas + Deseja realmente sair sem guardar? + Descartar + Nome do ficheiro texto.txt + Tem a certeza que deseja remover este cofre? + Esta ação só vai remover o cofre desta lista e não excluí-lo fisicamente. + Enviando… + Ficheiro %1$d de %2$d + Exportando (%1$d/%2$d) + Por favor, aguarde… + Criando pasta… + Criando ficheiro de texto… + Autenticação… + Renomeando… + Apagando… + Desbloqueando cofre… + Alterando palavra-passe… + Criando cofre… + Enviando… + Descarregando… + Encriptando… + Desencriptando… + Movendo… Bloquear + Certificado SSL inválido + O certificado SSL é inválido. Deseja confiar nele mesmo assim? + Detalhes + Isto pode ser um risco para a segurança. Sei o que estou a fazer. Desativar otimizações de bateria + Para recuperar novas fotos e vídeos sem correr em segundo plano, precisamos desativar as optimizações de bateria. Não se preocupe, %1$s não consome muita energia.\n\n Para aplicá-lo, altere \'Não optimizado\' para \'Todos os aplicativos\', selecione %1$s e escolha \'Não optimizar\' após clicar em \'%2$s\' nesta caixa de diálogo. Não perguntar novamente? + O uso de HTTP é inseguro. Recomendamos a utilização de HTTPS. Se você souber os riscos, você pode continuar com HTTP. + Alterar para HTTPS + Usar HTTPS? + Não está configurado nenhum bloqueio de ecrã. Para armazenar as suas credenciais de uma forma segura, defina com OK um padrão ou senha. + Configurar bloqueio de ecrã? + Definir bloqueio de ecrã + Nenhuma configuração de autenticação básica configurada no sistema + Registar pelo menos um dedo/rosto para usar este serviço. + Neste modo, dados confidenciais podem ser gravados num arquivo de registo alojado no seu dispositivo (por exemplo, nomes de arquivos e caminhos). Palavras-passe, cookies, etc. são explicitamente excluídos.\n\nLembre-se de desativar o modo de depuração o mais rápido possível. + Atenção + Ativar + Devido a um erro nas apps da Microsoft, o arquivo a ser editado deve ser partilhado com esses aplicativos numa pasta de média pública no seu dispositivo. Depois que o Cryptomator é retomado, o arquivo acessível ao público é apagado novamente, mas o Cryptomator não pode influenciar o que acontece a este arquivo, enquanto isso decore. Esteja ciente desse comportamento ao ativar esta opção. Isso só se aplicará aos tipos de arquivos da Microsoft.\n\nCryptomator reiniciará após a ativação. + Esta configuração é uma opção de segurança que previne outras apps de iludir os utilizadores a fazer coisas que não querem fazer.\n\nAo desativar, você confirma que está ciente de todos os riscos. + Atenção + Desativar + O aplicativo está obscurecido + Outro aplicativo está exibindo algo em cima do Cryptomator (por exemplo, um filtro de luz azul ou aplicativo de modo noturno). Por razões de segurança, o Cryptomator está desativado.\n\nComo ativar o Cryptomator Fechar + Por favor, adicionar novamente os cofres para a nuvem %1s + Durante a migração para esta versão do aplicativo, precisamos remover os seguintes cofres do aplicativo:\n%2s \n\nEsses cofres não são removidos da nuvem, somente deste aplicativo. Desculpe o inconveniente e por favor adicione novamente esses cofres para continuar a trabalhar com eles. + O cofre é a pasta raiz da ligação com a nuvem + Criar uma nova ligação com a nuvem onde deve selecionar pelo menos a pasta principal, desta pasta de cofre, como o diretório raiz para adicionar este cofre. + Esta configuração é uma opção de segurança que previne outras apps de iludir os utilizadores a fazer coisas que não querem fazer.\n\nAo desativar, você confirma que está ciente de todos os riscos. + Tem certeza de que deseja remover esta ligação com a nuvem? + Esta ação removerá a ligação com a nuvem e todos os cofres desta nuvem. + Apagar %1$d ficheiros? + Tem a certeza que deseja eliminar estes ficheiros? + Temba certeza que deseja apagar este ficheiro? + Isto irá apagar todo o conteúdo da pasta. Tem certeza que deseja apagar esta pasta? + Autenticação biométrica desativada + Como a chave foi invalidada, o recurso de autenticação biométrica foi desativado. Para reativar, abra as configurações do Cryptomator. + Fornecer uma licença válida + Detectamos que instalou o Cryptomator sem usar a Google Play Store. Forneça uma licença válida que pode ser comprada em https://cryptomator.org/android/ + A licença fornecida não é válida. Verifique se a digitou corretamente. A chave fornecida é um certificado de apoiante para computador/portátil. Por favor, insira uma licença válida. + Nenhuma licença fornecida. Por favor insira uma licença válida. + Sair + Confirmação de licença + Obrigado %1$s por fornecer a sua licença válida. + Atualização disponível + Atualize o Cryptomator para a versão mais recente. Pressionando OK, vamos descarregar o aplicativo em segundo plano e pediremos que você o instale. + Atualizar agora + Ir para a página de transferências + Mais tarde + Descarga em execução + Descarregando a versão mais recente do Cryptomator + A pasta é um link simbólico + Não é possível ir para este link simbólico Anterior + Não foi possível carregar o conteúdo do diretório + A pasta na nuvem \'%1$s\' não tem um arquivo de diretório válido. A pasta pode ter sido criada em outro dispositivo e ainda não foi totalmente sincronizada com a nuvem. Por favor, verifique na sua nuvem se o seguinte arquivo existe e não está vazio:\n%2$s + Sem mais imagens para exibir… + Credenciais de \'%1$s\' atualizadas + Se você pretendia adicionar uma nova conta pCloud, toque nesta ligação www.pcloud. om, saia da conta atual e toque novamente em \'+\' deste aplicativo para criar uma nova ligação com a nuvem. + Cryptomator precisa de acesso ao armazenamento para usar cofres locais + Cryptomator precisa de acesso ao armazenamento para usar o envio automático de fotos + O Cryptomator precisa de permissões de notificação para exibir, como exemplo, o estado do cofre + Zero kB + bytes + kB + MB + GB + TB + segundo + segundos + minuto minutos + hora + horas + dia + dias + semana + semanas + mês + meses + ano + anos + Acesso biométrico + Iniciar sessão utilizando as suas credenciais biométricas + Usar palavra-passe do cofre + Não foi possível carregar arquivos automaticamente + Cofres desbloqueados: %1$d + Bloqueio automático em %1$s + Bloquear todos + Cancelar envio + Envio de fotos automático em execução + Enviando %1d/%2d + Envio de foto automático concluído + %1$d imagens enviadas para o cofre + Falha no envio automático de foto + Ocorreu um erro geral durante o envio. + A pasta selecionada para envio não está mais disponível. Vá para as configurações e escolha uma nova + Cofre bloqueado durante o envio, por favor reabra o cofre para continuar + Cofre especificado para envio automático não existe mais. + Toque para atualizar a autenticação. + Abrir arquivo gravável + Cofre permanece desbloqueado até terminar de editar + Última versão instalada Autenticação… + Cache + Cache de arquivos acedidos recentemente, encriptados localmente no dispositivo para reutilização posterior quando reaberto + Tamanho total do cache + Limpar cache + As alterações serão aplicadas na próxima inicialização do aplicativo + Registado para + %1$s + Intervalo de verificação de actualizações + Procurar actualizações + Última execução %1$s + Tamanho do cache por nuvem + Instantâneo + 1 minuto + 2 minutos + 5 minutos + 10 minutos + Nunca + 50 MB + 100 MB + 250 MB + 500 MB + 1 GB + 5 GB + Estilo + Automático (seguir sistema) + Claro + Escuro + Uma vez por dia diff --git a/presentation/src/main/res/values-ro-rRO/strings.xml b/presentation/src/main/res/values-ro-rRO/strings.xml index d45ac024a..1a690a810 100644 --- a/presentation/src/main/res/values-ro-rRO/strings.xml +++ b/presentation/src/main/res/values-ro-rRO/strings.xml @@ -26,7 +26,7 @@ Verificarea actualizării a eșuat. Hash-ul calculat nu se potrivește cu fișierul încărcat Verificarea actualizării a eșuat. Nu există conexiune la internet. Nu s-a reușit decriptarea parolei WebDAV, vă rugăm să o introduceți din nou în setări - Google Play Services nu este instalat + Serviciile Google Play nu sunt instalate Autentificare biometrică anulată Versiunea specificată în %1$s este diferită de %2$s %1$s nu se potrivește cu %2$s @@ -199,6 +199,8 @@ Indicații de securitate Versiune Setări avansate + Soluție pentru deschiderea fișierelor Microsoft + Deschide fișiere în aplicații Microsoft cu permisiune de scriere Accelerează deblocarea Descărcați configurarea seifului în fundal în timp ce vi se solicită introducerea parolei sau a autentificării biometrice Păstrați deblocat @@ -305,6 +307,7 @@ În acest mod, datele sensibile pot fi scrise într-un fișier jurnal de pe dispozitivul dumneavoastră (de exemplu, nume de fișiere și căi de fișiere). Parolele, cookie-urile etc. sunt excluse în mod explicit.\n\nNu uitați să dezactivați modul de depanare cât mai curând posibil. Atenție Activează + Din cauza unei erori în aplicațiile Microsoft, fișierul care urmează să fie editat trebuie să fie partajat cu aceste aplicații într-un folder media public de pe dispozitivul dvs. După ce Cryptomator este repornit, fişierul accesibil publicului este şters din nou, dar Cryptomator nu poate influenţa ceea ce s-a întâmplat cu acest fişier între timp. Asigurați-vă că sunteți conștient de acest comportament atunci când activați această opțiune. Acest comportament se aplica doar tipurilor de fișiere Microsoft.\n\nCryptomator va reporni după activare. Această setare este o caracteristică de securitate și previne alte aplicații să păcălească utilizatorii să facă lucruri pe care nu ar trebui să le facă.\n\nPrin dezactivare, confirmați că sunteți conștient de aceste riscuri. Atenție Dezactivează @@ -349,6 +352,7 @@ Dacă doriți să adăugaţi un cont nou de tip pCloud, faceţi clic pe acest link www.pcloud. om, deconectați-vă de la contul curent, și faceți clic din nou pe \'+\' din această aplicație pentru a crea o nouă conexiune cloud. Cryptomator are nevoie de acces la stocare pentru a utiliza seifuri locale Cryptomator are nevoie de acces la stocare pentru a folosi încărcarea automată a fotografiilor + Cryptomator are nevoie de permisiuni de notificare pentru a afișa starea seifului de exemplu @@ -392,6 +396,7 @@ Dosarul selectat pentru încărcare nu mai este disponibil. Mergeți la setări și alegeți unul nou Seif blocat în timpul încărcării, vă rugăm să redeschideți seiful pentru a continua Seiful ales pentru încărcare automată nu mai există. + Atingeți pentru a reîmprospăta autentificarea. Deschide fișier inscriptibil Seiful rămâne deblocat până la editarea finalizată Ultima versiune instalată diff --git a/presentation/src/main/res/values-ru-rRU/strings.xml b/presentation/src/main/res/values-ru-rRU/strings.xml index 5dc59559f..be07f00e8 100644 --- a/presentation/src/main/res/values-ru-rRU/strings.xml +++ b/presentation/src/main/res/values-ru-rRU/strings.xml @@ -9,7 +9,7 @@ Нет подключения к сети Неверный пароль Файл или папка уже существует. - Версия хранилища %1$s не поддерживается. Это хранилище было создано либо в устаревшей, либо в более новой версии Cryptomator. + Версия хранилища %1$s не поддерживается. Это хранилище было создано в устаревшей, или более новой версии Cryptomator. Файл %1$s отсутствует в папке хранилища. Убедитесь, что этот файл существует в папке хранилища в облаке. Хранилище уже существует. Файл не существует. @@ -20,12 +20,12 @@ Откройте настройки устройства и установите блокировку экрана вручную Ошибка экспорта. Попробуйте удалить спецсимволы из имён файлов и экспортировать снова. Не может содержать спецсимволы. - В имени файла не может быть спецсимволов. - В имени хранилища не может быть спецсимволов. - Не удалось проверить наличие обновления. Общая ошибка. - Не удалось проверить обновление. Вычисленный хеш не соответствует отправленному файлу. + Имена файлов не могут содержать специальные символы. + Имя хранилища не может содержать специальные символы. + Ошибка проверки обновления. Общая ошибка. + Ошибка проверки обновления. Вычисленный хэш не соответствует загруженному файлу Ошибка проверки обновления. Нет подключения к Интернету. - Не удалось расшифровать пароль WebDAV, добавьте его заново в настройках + Не удалось расшифровать пароль WebDAV, пожалуйста, добавьте его заново в настройках Не установлены сервисы Google Play Биометрическая аутентификация прервана Версия, указанная в %1$s, отличается от %2$s @@ -120,7 +120,7 @@ Облачный сервис Выберите место - Нажмите, чтобы добавить местоположения + Нажмите здесь, чтобы добавить местоположения Похоже, сервер не совместим с WebDAV Не найден файловый менеджер, поддерживающий открытие папок diff --git a/presentation/src/main/res/values-sk-rSK/strings.xml b/presentation/src/main/res/values-sk-rSK/strings.xml index ff734ea3b..ce615b4d8 100644 --- a/presentation/src/main/res/values-sk-rSK/strings.xml +++ b/presentation/src/main/res/values-sk-rSK/strings.xml @@ -200,6 +200,8 @@ Bezpečnostné tipy Verzia Pokročilé nastavenia + Obídenie otvorenia súborov Microsoftu + Otvoriť súbory v Microsoft aplikáciách s právom zápisu Urýchliť odomknutie Stiahnuť konfiguráciu trezora na pozadí počas vyzvania na zadanie hesla alebo biometrickej autentikácie Držať odomknuté @@ -306,6 +308,7 @@ V tomto móde, môžu byť zapisované citlivé dáta do logovacieho súboru na Vašom zariadení (ako napr. mená súborov a cesty). Heslá, cookies, a pod. sú explicitne vynechané.\n\nPamätajte na vypnutie debug módu ako najskôr to pôjde. Upozornenie Povoliť + Kvôli chybe v aplikáciách spoločnosti Microsoft musí byť upravovaný súbor zdieľaný s týmito aplikáciami vo verejnom priečinku médií vo vašom zariadení. Po obnovení programu Cryptomator sa verejne prístupný súbor opäť odstráni, ale program Cryptomator nemôže ovplyvniť, čo sa s týmto súborom medzitým stalo. Pri aktivácii tejto možnosti sa uistite, že ste si vedomí tohto správania. Toto sa vzťahuje len na typy súborov spoločnosti Microsoft.\n\nCryptomator sa po aktivácii znovu spustí. Toto nastavenie je bezpečnostná vlastnosť a chráni ostatné aplikácie pred klamaním užívateľov robiť veci, ktoré nechcú obiť.\n\nVypnutím súhlasíte, že <a href="https://docs.cryptomator.org/en/1.6/android/settings/#block-app-when-obscured">ste si vedomí rizika. Upozornenie Zakázať @@ -350,6 +353,7 @@ Ak zamýšľate pridať nový pCloud účet, kliknite na tento link www.pcloud.com, odhláste sa zo súčasného účtu a opätovne kliknite na \'+\' v tejto aplikácii pre vytvorenie nového cloudového pripojenia. Cryptomator potrebuje prístup k úložisku pre prácu s lokálnymi trezormy Cryptomator potrebuje prístup k úložisku pre automatické nahrávanie fotografii + Cryptomator potrebuje povolenie notifikácií, napríklad na zobrazenie stavu trezoru diff --git a/presentation/src/main/res/values-sl-rSI/strings.xml b/presentation/src/main/res/values-sl-rSI/strings.xml index 487d3659e..8fa5e57b8 100644 --- a/presentation/src/main/res/values-sl-rSI/strings.xml +++ b/presentation/src/main/res/values-sl-rSI/strings.xml @@ -283,7 +283,16 @@ Podrobnosti To bi bilo lahko nevarno. Vem kaj delam. Onemogoči optimizacije baterije + Uporabi HTTPS? + Pozor + Omogoči + Pozor Zapri + Izhod + Potrditev licence + Posodobitev je na voljo + Posodobi zdaj + Pozneje Nazaj diff --git a/presentation/src/main/res/values-sv-rSE/strings.xml b/presentation/src/main/res/values-sv-rSE/strings.xml index 8701c2630..a366ce3fd 100644 --- a/presentation/src/main/res/values-sv-rSE/strings.xml +++ b/presentation/src/main/res/values-sv-rSE/strings.xml @@ -198,6 +198,8 @@ Säkerhetstips Version Avancerade inställningar + Alternativt sätt att öppna Microsoft-filer + Öppna filer i Microsoft-appar med skrivrättigheter Accelerera upplåsning Ladda ner valvkonfiguration i bakgrunden medan du uppmanas att låsa upp Behåll olåst @@ -304,6 +306,7 @@ I detta läge kan känsliga data skrivas till en loggfil på din enhet (t.ex. filnamn och sökvägar). Lösenord, cookies etc. är uttryckligen uteslutna.\n\nKom ihåg att inaktivera felsökningsläge så snart som möjligt. Observera Aktivera + På grund av ett fel i Microsoft-appar, måste filen som ska redigeras delas med dessa appar i en offentlig mediemapp på din enhet. Efter att Cryptomator återupptas raderas den allmänt tillgängliga filen igen, men Cryptomator kan inte påverka vad som har hänt med filen under tiden. Det är viktigt att du är medveten om detta beteende när du aktiverar detta alternativ. Detta kommer endast att gälla för Microsoft filtyper.\n\nCryptomator startar om efter aktivering. Den här inställningen är en säkerhetsfunktion som hindrar andra appar från att lura användare att göra saker de inte vill.\n\nGenom att stänga av säkerhetsfunktionen bekräftar du att du är medveten om riskerna. Observera Inaktivera @@ -392,6 +395,7 @@ Vald mapp för uppladdning finns inte längre. Gå till inställningar och välj en ny Valv låstes under uppladdningen, vänligen öppna valvet för att fortsätta Valvet som angets för automatisk uppladdning finns inte längre. + Tryck för att förnya inloggningen. Öppna skrivbar fil Valvet är upplåst till färdig redigering Senaste versionen installerad diff --git a/presentation/src/main/res/values-ta-rIN/strings.xml b/presentation/src/main/res/values-ta-rIN/strings.xml index 4cc00ea3c..7be6154a0 100644 --- a/presentation/src/main/res/values-ta-rIN/strings.xml +++ b/presentation/src/main/res/values-ta-rIN/strings.xml @@ -5,14 +5,29 @@ ஒரு பிழை ஏற்பட்டுள்ளது அங்கீகரிப்பு தோல்வியுற்றது + அங்கீகாரம் தோல்வியுற்றது, தயவுசெய்து %1$s பயன்படுத்தி உள்நுழையவும் நெட்வொர்க் இணைப்பு இல்லை தவறான கடவுச்சொல் + ஏற்கனவே \'\' என்ற பெயரில் வெறெரு அரம் அல்லது கோப்புறை உள்ளது. + %1$s என்ற பதிப்புரு கொண்ட பெட்டகம் ஆதரவற்றது. இப்பெட்டகம் பழைய அல்லது புதிய பதிப்புரு கொண்ட Cryptomator-ஆல் உருவாக்கபட்டது. + %1$s என்ற பெயர் கொண்ட கோப்பு உமது vault folder-இல் காணவில்லை. இந்தக் கோப்பு மேகக்கணியில் இருப்பதை உறுதி செய்து கொள்ளவும். பெட்டகம் ஏற்கனவே உள்ளது. கோப்பு இருப்பில் இல்லை. பெட்டகம் பூட்டப்பட்டுள்ளது. மேகக்கணி ஏற்கனவே உள்ளது. இந்தக் கோப்பைத் திறக்கக்கூடிய செயலியைப் பதிவிறக்கவும். சேவையகம் காணப்படவில்லை. + உங்கள் சாதன அமைப்புகளைத் திறந்து, திரைப் பூட்டைக் அமைக்கவும் + ஏற்றுமதி தோல்வியடைந்தது. கோப்பு பெயர்களிலிருந்து சிறப்பு எழுத்துக்களை அகற்றி மீண்டும் ஏற்றுமதி செய்ய முயற்சிக்கவும். + சிறப்பு எழுத்துகள் இருக்க கூடாது. + கோப்புகளின் பெயரில் சிறப்பு எழுத்துக்கள் இருக்க கூடாது. + பெட்டகத்தின் பெயரில் சிறப்பு எழுத்துக்கள் இருக்க கூடாது. + புதுப்பிப்பு சரிபார்ப்பு தோல்வியடைந்தது. பொதுவான பிழை ஏற்பட்டது. + புதுப்பிப்பு சரிபார்ப்பு தோல்வியடைந்தது. இணைய இணைப்பு இல்லை. + உயிரியளவுகள் உறுதிசெய்தல் கைவிடப்பட்டது + பெட்டகத்தின் உள்ளமைவை ஏற்றும்போது பொதுவான பிழை ஏற்பட்டது + மீண்டும் Cryptomator-இற்கு மாறியபிறகு, உள்ளூர் கோப்பு இல்லை. சாத்தியமான மாற்றங்களை மீண்டும் மேகக்கணிக்கு பரப்ப முடியாது. + இப்பெயருள்ள bucket இல்லை அகச் சேமிப்பகம் diff --git a/presentation/src/main/res/values-tr-rTR/strings.xml b/presentation/src/main/res/values-tr-rTR/strings.xml index feef68b01..b54907a3b 100644 --- a/presentation/src/main/res/values-tr-rTR/strings.xml +++ b/presentation/src/main/res/values-tr-rTR/strings.xml @@ -4,7 +4,7 @@ Şifrele Bir hata oluştu - Kimlik doğrulaması başarısız oldu + Kimlik doğrulama başarısız Kimlik doğrulama başarısız, lütfen %1$s kullanarak giriş yapınız Ağ bağlantısı yok Şifre hatalı @@ -12,13 +12,13 @@ %1$s kasa sürümü desteklenmiyor. Bu kasa, Cryptomator\'ın daha eski veya daha yeni bir sürümüyle oluşturuldu. Kasa klasörünüzde %1$s dosyası eksik. Bu dosyanın buluttaki kasa klasörünüzde bulunduğundan emin olun. Kasa zaten var. - Dosya bulunmuyor. + Dosya mevcut değil. Kasa kilitlendi. Bulut zaten var. Lütfen bu dosyayı açabilen bir uygulama edinin. Sunucu bulunamadı. Lütfen cihaz ayarlarınızı açın ve ekran kilidini elle ayarlayın - Dışa aktarma başarısız oldu. Özel karakterleri dosya adlarından kaldırmayı ve tekrar dışa aktarmayı deneyin. + Dışa aktarma başarısız oldu. Dosya adlarından özel karakterleri kaldırın ve dışa aktarmayı tekrar deneyin. Özel karakterler içeremez. Dosya adları özel karakterler içeremez. Kasa adı özel karakterler içeremez. @@ -33,7 +33,7 @@ Cüzdan ayarlarını yüklerken genel hata Cryptomator geri döndükten sonra, lokal dosya artık mevcut olmaz. Muhtemel değişiklikler bulutta tekrar oluşturulamaz. Böyle bir kova yok - Özel ana anahtar lokasyonu desteklenmiyor + Özel ana anahtar konumu henüz desteklenmiyor F-Droid uygulamasıyla iletişim kurulamadı. Yüklü değil mi? @@ -51,10 +51,10 @@ Sırala A - Z Z - A - Önce en yenisi - Önce en eskisi - Önce en büyüğü - Önce en küçüğü + Yeniden eskiye + Eskiden yeniye + Büyükten küçüğe + Küçükten büyüğe Daha fazlasını oku Bulut listede yok mu? @@ -63,7 +63,7 @@ Yeni kasa oluştur Mevcut kasayı ekle Kaldır - Kasa oluşturmak/eklemek için buraya dokunun + Yeni bir kasa oluşturmak için buraya dokunun Şifre başarıyla değiştirildi Kasa @@ -110,7 +110,7 @@ Metin Dosya Dosyalar - Dosya adları benzersiz olmalıdır, lütfen kopyaları yeniden adlandırın. + Dosya adları benzersiz olmalıdır, lütfen mükerrer olanları yeniden adlandırın. Konumu kaydet Kaydet Şifreleme tamamlandı @@ -255,7 +255,7 @@ Dosya değiştirilsin mi? Dosyalar değiştirilsin mi? Dosyalar paylaşılamıyor - Daha önce herhangi bir kasa oluşturmadınız! Önce Cryptomator uygulamasıyla yeni bir kasa oluşturun lütfen. + Daha önce herhangi bir kasa oluşturmadınız! Lütfen önce Cryptomator uygulamasıyla yeni bir kasa oluşturun. Tamam Kasa oluştur %1$s açılamıyor @@ -393,7 +393,7 @@ Otomatik fotoğraf yükleme başarısız oldu Yükleme sırasında genel hata oluştu. Yükleme için seçilen klasör artık mevcut değil! Ayarlara gidin ve yeni bir tane seçin - Kasa yükleme sırasında kilitlendi, devam etmek için kasayı yeniden açın lütfen + Kasa yükleme sırasında kilitlendi, devam etmek için lütfen kasayı yeniden açın Otomatik yükleme için belirtilen kasa artık mevcut değil. Kimlik doğrulama işlemini yenilemek için dokun. Yazılabilir dosyayı aç diff --git a/presentation/src/main/res/values-uk-rUA/strings.xml b/presentation/src/main/res/values-uk-rUA/strings.xml index c43dbbc5e..125a37e0f 100644 --- a/presentation/src/main/res/values-uk-rUA/strings.xml +++ b/presentation/src/main/res/values-uk-rUA/strings.xml @@ -3,38 +3,38 @@ Зашифрувати - Виникла помилка - Помилка автентифікації + Сталася помилка + Не вдалося пройти автентифікацію Помилка автентифікації, будь ласка, увійдіть за допомогою %1$s Відсутнє з\'єднання з мережею Невірний пароль - Файл чи директорія вже існує. - Версія сховища %1$s не підтримується. Це сховище було створено старішою або новішою версією Cryptomator. - %1$s Файл відсутній у вашому сховищі. Переконайтеся, що цей файл існує у теці вашого сховища у хмарі. + Файл чи папка вже існує. + Сховище %1$s-ї версії не підтримується. Це сховище було створено старішою або новішою версією Cryptomator. + Файл %1$s відсутній у вашому сховищі. Переконайтеся, що цей файл існує у папці вашого сховища у хмарі. Сховище вже існує. Файлу не існує. Сховище було заблоковано. Ця хмара вже використовується. Будь ласка, завантажте додаток, що може відкрити цей файл. Сервер не знайдено. - Відкрийте налаштування пристрою та встановіть блокування екрану вручну + Відкрийте налаштування пристрою та вимкніть автоматичне блокування екрану Не вдалося виконати експорт. Спробуйте видалити спеціальні символи з імен файлів та експортувати знову. Не може містити спеціальні символи. Назва файлу не може містити спеціальні символи. Назва сховища не може містити спеціальні символи. - Помилка перевірки оновлення. Загальна помилка. - Помилка перевірки оновлення. Хеш не збігається з завантаженим файлом + Не вдалось перевірити наявність оновлення. + Помилка оновлення. Розрахований хеш не відповідає вивантаженому файлу Не вдалося перевірити оновлення. Немає з\'єднання з мережею. Не вдалося розшифрувати пароль WebDAV, будь ласка, повторно додайте його в налаштування - Google Play Services не встановлені - Біометрична автентифікація скасована - Версія вказана в %1$s відрізняється від %2$s - %1$s не відповідає %2$s - Загальна помилка при завантаженні конфігурації сховища - Локальний файл більше не присутній посля повернення до Cryptomator. Можливі зміни не будуть застосовані до хмари. - Відсутній бакет - Користувацьке розташування Masterkey ще не підтримується - Не вдалося зв\'язатися із застосунком F-Droid. Не встановлено? + Сервіси Google Play не встановлено + Біометрична автентифікація перервана + Версія вказана у %1$s відрізняється від %2$s + %1$s та %2$s не відповідають одне одному + Помилка при завантаженні конфігурації сховища + Локальний файл більше не існує після перепідключення до Cryptomator. Можливі зміни не можуть бути збережені у хмарі. + Немає такого кошика (сховища) + Користувацьке розташування універсального ключа ще не підтримується + Не вдалося зв\'язатися із застосунком F-Droid. Його встановлено? Локальне сховище @@ -42,8 +42,8 @@ Cryptomator потребує доступу до сховища для експорту файлів Cryptomator потребує доступу до сховища для завантаження файлів - Cryptomator потребує доступу до сховища щоб ділитися файлами - Криптоматор втратив дозвіл на доступ до цього розташування. Будь ласка, оберіть цю папку ще раз, щоб відновити дозвіл. + Cryptomator потребує доступу до сховища, щоб ділитися файлами + Cryptomator втратив дозвіл на доступ до цього розташування. Будь ласка, оберіть цю папку ще раз, щоб відновити дозвіл. Налаштування Пошук Попередній @@ -51,9 +51,9 @@ Сортування А - Я Я - А - Спочатку новіші - Спочатку старіші - Спочатку найбільші + Спершу новіші + Спершу старіші + Спершу найбільші Спершу найменші Детальніше Немає у списку? @@ -200,6 +200,8 @@ Поради з безпеки Версія Розширені налаштування + Альтернативний спосіб відкриття файлів Microsoft + Відкривати файли в додатках Microsoft з дозволом на запис Прискорити розблокування Завантажити конфігурацію сховища у фоновому режимі під час вводу пароля або біометричної автентифікації Залишати розблокованим @@ -232,16 +234,16 @@ Скасувати Розблокувати - Старий пароль + Чинний пароль Новий пароль Змінити пароль - Старий пароль не може бути порожнім. + Чинний пароль не може бути порожнім. Новий пароль не може бути порожнім. Новий пароль не збігається з повторно введеним паролем. Сховище %1$s не знайдено - Сховище було перейменовано, переміщено або видалено. Видаліть це сховище зі списку та додайте його знову, щоб продовжити. Видалити зараз? - Прибрати + Сховище перейменоване, переміщене або видалене. Вилучіть це сховище зі списку та додайте його знову, щоб продовжити. Вилучити зараз? + Вилучити Файл вже існує Замінити Файл з іменем \'%1$s\' вже існує. @@ -254,7 +256,7 @@ %1$d файли вже існують. Бажаєте замінити їх? Замінити файл? Замінити файли? - Неможливо поширити файли + Неможливо поділитись файлами Ви не налаштували жодного сховища. Спочатку створіть нове сховище за допомогою програми Cryptomator. Гаразд Створити сховище @@ -267,10 +269,10 @@ Ви справді хочете вийти без збереження? Відхилити Назва файлу - text.txt + текст.txt Ви впевнені, що бажаєте видалити це сховище? Ця дія тільки прибере сховище з цього списку, але не видалить його. - Завантаження… + Вивантаження… Файл %1$d з %2$d Експорт (%1$d/%2$d) Будь ласка, зачекайте… @@ -282,44 +284,45 @@ Розблокування сховища… Зміна пароля… Створення сховища… - Завантаження… + Вивантаження… Завантаження… Шифрування… Розшифрування… Переміщення… - Заблокувати + Блокування Неправильний SSL сертифікат Сертифікат SSL недійсний. Довіряти йому у будь-якому випадку? Докладно Це може спричинити ризики безпеки. Я знаю, що роблю. - Вимкнути оптимізацію використання батареї - Щоб отримувати нові зображення та відео без роботи у фоновому режимі, необхідно відключити оптимізацію заряду аккумулятора. Проте не хвилюйтесь, %1$s не споживає багато енергії.\n\nЩоб це зробити, змініть \"Додатки без оптимізації\" на \"Усі додатки\", оберіть %1$s і в цьому вікні оберіть \"Не оптимізувати\" після натискання \'%2$s\'. + Вимкніть оптимізацію використання батареї + Щоб оновлювати зображення та відео без роботи у фоновому режимі, необхідно відключити оптимізацію споживання заряду аккумулятора для цього додатку. Проте не хвилюйтесь, %1$s не споживає багато енергії.\n\nЩоб це зробити, змініть \"Додатки без оптимізації\" на \"Усі додатки\", оберіть %1$s і встановіть \"Не оптимізувати\" після натискання \'%2$s\' в цьому вікні. Не запитувати знову? Використання HTTP небезпечне. Рекомендуємо замість цього використовувати HTTPS. Якщо ви усвідомлюєте ризики, ви можете продовжити з HTTP. Змінити на HTTPS Використовувати HTTPS? - Не встановлено блокування екрану. Щоб надійно зберегти свої облікові дані, встановіть ключ чи пароль після натискання ОК. + Не встановлено блокування екрану. Щоб надійно зберегти свої облікові дані, встановіть пароль чи графічний ключ після натискання ОК. Встановити блокування екрану? Встановлення блокування екрану В системі не налаштовано базову автентифікацію - Встановіть як мінімум один відбиток/одне обличчя для використання цього сервісу. - У цьому режимі чутливі дані можуть бути записані в файл журналу на вашому пристрої (наприклад, імена файлів і шляхи). Паролі, файли cookie тощо не включаються.\n\nНе забудьте вимкнути режим налагодження за першої нагоди. + Додайте щонайменше один відбиток пальця чи знімок обличчя для використання цього сервісу. + У цьому режимі чутливі дані можуть бути записані в файл журналу на вашому пристрої (наприклад, імена файлів і шляхи). Але це не стосується паролів, файлів cookie тощо.\n\nНе забудьте вимкнути режим налагодження якнайшвидше. Увага Увімкнути - Це налаштування пов\'язано із безпекою, і не дозволяє іншим додаткам вводити користувачів в оману та змушувати їх робити не те, чого вони хочуть.\n\nВідключаючи його, ви підтверджуєте, що усвідомлюєте ризики. + Через помилку в додатках Microsoft, для редагування файлу, доступ до нього має бути надано таким додаткам у публічній папці на вашому пристрої. Після того, як Cryptomator припинить роботу - публічно доступний файл буде видалено, але водночас Cryptomator не впливає на те, що відбувалось з цим файлом, поки він є публічно доступним. Активовуючи цю опцію, ви маєте усвідомлювати наслідки таких дій з файлами. Її буде застосовано лише до типів файлів Microsoft.\n\nCryptomator буде перезавантажений після активації. + Це налаштування пов\'язане з безпекою, і не дозволяє іншим додаткам вводити користувачів в оману та змушувати їх робити те, чого вони не хочуть.\n\nВідключаючи його, ви підтверджуєте, що усвідомлюєте ризики. Увага Вимкнути - Програму перекрито + Інтерфейс додатка перекрито Інший додаток відображає щось поверх Cryptomator (наприклад, фільтр синього світла або додаток нічного режиму). Cryptomator вимкнено з міркувань безпеки.\n\nЯк увімкнути Cryptomator Закрити - Будь ласка, знову додайте vaults для %1s хмари - Переходячи на цю версію додатка потрібно прибрати наступні сховища з додатка:\n%2s\n\nЦі сховища не видаляються з хмарного сховища, а лише прибираються з цього додатка. Перепрошуємо за незручності. Будь ласка, додайте ці сховища повторно, щоб продовжити роботу з ними. + Будь ласка, знову додайте сховища з хмари для %1s + Переходячи на цю версію додатка ми були змушені прибрати такі сховища з додатка:\n%2s\n\nЦі сховища не видаляються з хмари, а лише прибрано з цього додатка. Перепрошуємо за незручності. Будь ласка, додайте ці сховища повторно, щоб продовжити роботу з ними. Сховище є кореневим каталогом хмарного підключення - Для додавання цього сховища створіть нове хмарне підключення, в якому оберіть (принаймні) батьківський каталог цього сховища як кореневий каталог. - Це налаштування пов\'язано із безпекою, і не дозволяє іншим додаткам вводити користувачів в оману та змушувати їх робити не те, чого вони хочуть.\n\nВідключаючи його, ви підтверджуєте, що усвідомлюєте ризики. + Для додавання цього сховища - створіть нове хмарне підключення, в якому оберіть в якості батьківського каталога цього сховища кореневий каталог або будь-яку іншу папку у хмарі. + Це налаштування пов\'язано із безпекою, і не дозволяє іншим додаткам вводити користувачів в оману та змушувати їх робити те, чого вони не хочуть.\n\nВідключаючи його, ви підтверджуєте, що усвідомлюєте ризики. Ви дійсно хочете видалити це хмарне підключення? Ця дія видалить підключення до хмари та всі сховища з цієї хмари. - Видалити %1$d об\'єкти? + Видалити %1$d об\'єкт(-и, -ів)? Ви впевнені, що бажаєте видалити ці об\'єкти? Ви впевнені, що бажаєте видалити цей файл? Це призведе до видалення усього вмісту директорії. Ви дійсно хочете видалити цю директорію? @@ -327,12 +330,12 @@ Оскільки ключ було анульовано, біометрична аутентифікація була деактивована. Для повторного увімкнення відкрийте налаштування Cryptomator. Вкажіть дійсну ліцензію Ми виявили, що ви встановили Cryptomator без використання Google Play Store. Надайте дійсну ліцензію, яку можна придбати на https://cryptomator.org/android/ - Надана ліцензія недійсна. Переконайтеся, що ви ввели її правильно. - Наданий ключ - це сертифікат спонсора. Введіть дійсну ліцензію. - Немає ліцензії. Будь ласка, введіть дійсну ліцензію. + Вказана ліцензія недійсна. Переконайтеся, що введено правильні дані. + Вказаний ключ призначений лише для комп\'ютерної версії (сертифікат спонсора). Будь ласка, вкажіть правильний ключ. + Відсутня ліцензія. Будь ласка, вкажіть ключ чинної ліцензії. Вийти - Підтвердження ліцензії - Дякую %1$s за надання дійсної ліцензії. + Ліцензію підтверджено + Дякуємо %1$s за надання Вашої чинної ліцензії. Доступне оновлення Оновіть Cryptomator до останньої версії. Натисніть ОК, щоб завантажити додаток у фоновому режимі, після чого з\'явиться запит на встановлення. Оновити зараз @@ -340,14 +343,14 @@ Пізніше Завантаження в процесі Завантаження останньої версії Cryptomator - Директорія - це символічне посилання + Папка є символічним посиланням Ви не можете перейти за цим символічним посиланням Назад - Не вдається завантажити вміст директорії - У хмарній директорії \'%1$s\' немає коректного файлу директорії. Можливо, директорія була створена на іншому пристрої та ще не повністю синхронізована із хмарним сховищем. Перевірте, чи існує у вашому хмарному сховищі цей файл та чи він не пустий:\n%2$s + Не вдається завантажити вміст папки + У хмарній папці \'%1$s\' немає коректного файлу директорії. Можливо, папка була створена на іншому пристрої та ще не повністю синхронізована із хмарним сховищем. Перевірте, чи існує у вашому хмарному сховищі цей файл та чи він не пустий:\n%2$s Зображень для показу більше немає… - Дані облікового запису \'%1$s\' оновлено - Якщо ви хочете додати новий обліковий запис pCloud, натисніть на цю адресу www.pcloud. om, вийдіть з поточного облікового запису та натисніть ще раз на \'+\' у цьому додатку, щоб створити нове хмарне підключення. + Дані \'%1$s\' оновлено + Якщо ви хочете додати новий обліковий запис pCloud, натисніть на цю адресу www.pcloud.com, вийдіть з поточного облікового запису та натисніть ще раз на \'+\' у цьому додатку, щоб створити нове хмарне підключення. Для використання локальних сховищ необхідно надати Cryptomator доступ до місця зберігання Для автоматичного завантаження фото необхідно надати Cryptomator доступ до місця зберігання Для відображення статусу сховища необхідно надати Cryptomator дозвіл на сповіщення @@ -355,17 +358,17 @@ 0 КБ - байти - кБ + байт + КБ МБ ГБ ТБ секунда секунд - хвилину + хвилина хвилин - годин + година годин день днів @@ -379,7 +382,7 @@ Біометричний вхід Увійдіть, використовуючи ваші біометричні дані Використовувати пароль сховища - Не вдалося автоматично завантажити файли + Не вдалося автоматично вивантажити файли Розблоковано сховищ: %1$d Автоблокування через %1$s @@ -387,31 +390,32 @@ Скасувати вивантаження Автоматичне вивантаження фотографій в процесі Вивантаження %1d/%2d - Автозавантаження фото завершено - %1$d зображення вивантажено до vault + Автоматичне вивантаження фотографій завершено + Зображення %1$d вивантажено до сховища Помилка при вивантаженні фотографій Виникла помилка під час вивантаження. Вибрана тека для вивантаження більше недоступна. Перейдіть у налаштування для вибору іншої - Vault заблоковано під час вивантаження, будь ласка, відкрийте vault знову, щоб продовжити - Vault, визначений для автоматичного вивантаження, більше не існує. - Відкрити доступний для запису файл - Сховище розблоковано до завершення редагування + Сховище заблоковано під час вивантаження, будь ласка, відкрийте його знову, щоб продовжити + Сховище, визначене для автоматичного вивантаження, більше не існує. + Натисніть, щоб повторно авторизуватись. + Відкрито файл + Сховище залишатиметься розблокованим до завершення редагування Встановлено найновішу версію - Аутентифікація… + Авторизація… Кеш - Кешувати зашифровані на пристрої нещодавні файли для подальшого використання при повторному відкритті + Кешувати нещодавні файли в зашифрованому стані на пристрої для подальшого використання при повторному відкритті Загальний розмір кешу - Очистити кеш + Почистити кеш Зміни наберуть чинності після перезапуску додатку - Зареєстровано за + Зареєстровано на %1$s - Інтервал перевірки оновлень + Періодичність перевірки оновлень Перевiрити наявнiсть оновлень - Останній запуск %1$s - Розмір кешу на кожне хмарне сховище + Востаннє перевірено %1$s + Розмір кешу на хмарне сховище - Миттєво - 1 хвилини + Негайно + 1 хвилина 2 хвилини 5 хвилин 10 хвилин @@ -425,7 +429,7 @@ 5 ГБ Стиль - Автоматичний (на основі системного) + Автоматично (системні налаштування) Світлий Темний diff --git a/presentation/src/main/res/values-vi-rVN/strings.xml b/presentation/src/main/res/values-vi-rVN/strings.xml index f491ad157..6c9413d04 100644 --- a/presentation/src/main/res/values-vi-rVN/strings.xml +++ b/presentation/src/main/res/values-vi-rVN/strings.xml @@ -10,36 +10,45 @@ Sai mật khẩu Tệp tin hoặc thư mục đã tồn tại. Phiên bản Vault %1$s không được hỗ trợ. Vault này đã được tạo bằng phiên bản Cryptomator cũ hơn hoặc mới hơn. + Tệp %1$s bị thiếu trong thư mục vault của bạn. Đảm bảo rằng tệp này tồn tại trong thư mục vault của bạn trong đám mây. Vault đã tồn tại. Tệp tin không tồn tại. Vault đã khóa. + Đám mây đã tồn tại. Hãy tải ứng dụng có thể mở được tệp tin này. Không tìm thấy máy chủ. Vui lòng mở cài đặt thiết bị của bạn và đặt khóa màn hình bằng tay Không xuất được. Cố gắng xóa các ký tự đặc biệt khỏi tên tệp và xuất lại. Không được chứa kí tự đặc biệt. Tên tệp tin không thể chứa ký tự đặc biệt. + Tên vault không được chứa các ký tự đặc biệt. Kiểm tra cập nhật không thành công. Đã xảy ra lỗi chung. + Kiểm tra cập nhật không thành công. Hàm băm được tính toán không khớp với tệp đã tải lên Kiểm tra cập nhật không thành công. Không có kết nối mạng. Giải mã mật khẩu WebDAV thất bại, vui lòng thêm lại vào cài đặt Dịch vụ Google Play chưa được cài đặt + Xác thực sinh trắc học bị huỷ bỏ Phiên bản được chỉ định trong %1$s khác với %2$s %1$s không khớp với %2$s + Lỗi không rõ khi tải cấu hình vault + Tệp cục bộ không còn xuất hiện nữa sau khi chuyển về Cryptomator. Những thay đổi có thể xảy ra không thể được truyền trở lại đám mây. Không có vùng lưu trữ như vậy + Vị trí tùy chọn của Khoá Chính chưa được hỗ trợ + Không giao tiếp được với ứng dụng F-Droid. Chưa cài đặt? Bộ nhớ cục bộ - Cryptomator cần quyền truy cập bộ nhớ để xuất tệp - Cryptomator cần quyền truy cập bộ nhớ tải tệp lên + Cryptomator cần truy cập nơi lưu trữ để xuất tệp + Cryptomator cần quyền truy cập nơi lưu trữ để tải tệp lên Cryptomator cần quyền truy cập bộ nhớ chia sẻ tệp Cryptomator đã mất quyền truy cập vào vị trí này. Vui lòng chọn lại thư mục này để khôi phục quyền. - Cài đặt + Các cài đặt Tìm kiếm - Quay lại - Tiếp - Phân loại + Liền trước + Tiếp sau + Sắp xếp A - Z Z - A Mới nhất trước @@ -47,16 +56,28 @@ Lớn nhất trước Nhỏ nhất trước Xem thêm + Đám mây không có trong danh sách? + Thêm vào Cryptomator + Tạo vault mới + Thêm vault hiện có Xóa - Nhấn vào đây để tạo một cái mới + Nhấn vào đây để tạo một vault mới Thay đổi mật khẩu thành công Vault + Chọn tệp khoá chính + Đặt ở đây + Tên vault: %1$s + + Di chuyển %2$d mục tới + Di chuyển Thư mục trống + đã sửa đổi %1$s trước Chia sẻ với + Chọn điểm đến Chọn Không có gì để chia sẻ Thêm vào %1$s @@ -73,6 +94,9 @@ Chỉnh sửa Xuất Xóa + Mở bằng… + Chọn các mục + Đã chọn %1$d Chọn Chọn tất cả Làm mới @@ -93,6 +117,9 @@ Dịch vụ đám mây Chọn vị trí + Nhấn vào đây để thêm vị trí + Máy chủ dường như không tương thích với WebDAV + Không tìm thấy trình quản lý tệp nào hỗ trợ mở thư mục URL Tên đăng nhập @@ -104,8 +131,16 @@ Mật khẩu không được để trống. Tên hiển thị + Khoá Truy cập + Khoá Bí mật + Bucket Hiện có + Điểm cuối Khu vực Tên hiển thị không được để trống + Khoá Truy cập không được để trống + Khoá Bí mật không được để trống + Bucket không được để trống + Điểm cuối hoặc Khu vực không được để trống Tên ault không thể để trống. Tên Vault @@ -113,7 +148,7 @@ Đặt mật khẩu Mật khẩu không khớp với mật khẩu đã nhập lại. - Xong + Hoàn thành QUAN TRỌNG: Nếu bạn quên mật khẩu, không có cách nào để khôi phục dữ liệu của bạn. Nhập lại mật khẩu Quá yếu để tạo vault @@ -127,88 +162,200 @@ Xác thực sinh trắc học Kích hoạt xác thực sinh trắc học Xác nhận mở khóa bằng khuôn mặt (nếu có) + Chặn ứng dụng khi bị che khuất + Ngăn chặn chặn đầu vào và hiển thị giao diện người dùng giả Chặn chụp màn hình Chặn không cho chụp màn hình trong danh sách gần đây và bên trong ứng dụng Tìm kiếm Tìm kiếm trực tiếp Cập nhật kết quả tìm kiếm trong khi nhập truy vấn + Tìm kiếm bằng mẫu glob + Sử dụng khớp mẫu glob như anh.*.jpg Tự động khóa Khóa sau + Khi màn hình bị tắt Tự động tải ảnh lên + Chọn vault để tải lên Kích hoạt + Chụp ảnh ở chế độ nền và sau khi vault đã chọn được mở khoá, hãy bắt đầu tải lên + Tải lên ngay lập tức + Tải lên trực tiếp nếu vault được mở khóa Tải lên chỉ khi dùng W Tải lên video + Lưu tệp tải lên tự động vào… Cryptomator website Theo dõi trên Twitter Hãy like chúng tôi trên Facebook Pháp lý Giấy phép + Điều khoản cấp phép Hỗ Trợ Yêu cầu trợ giúp Chế độ gỡ lỗi + Gửi tệp nhật ký Gửi thất bại + Gợi ý bảo mật Phiên bản Cài đặt nâng cao + Giải pháp mở tệp Microsoft + Mở tệp trong ứng dụng Microsoft với quyền ghi + Tăng tốc mở khoá + Tải xuống cấu hình vault trong nền khi được nhắc nhập mật khẩu hoặc xác thực sinh trắc học + Giữ mở khóa + Giữ cho vault được mở khoá trong khi chỉnh sửa tệp Kết nối OneDrive Kết nối WebDAV Kết nối pCloud Kết nối S3 + Vị trí lưu trữ cục bộ Đăng nhập vào Đăng xuất từ + %1$s không thể được xác thực. + Cập nhật thông tin đăng nhập pCloud + Các biến thể của Cryptomator + Kho F-Droid Chính + Bị loại trừ vì chúng yêu cầu khoá API. Cài đặt + Kho F-Droid Cryptomator + Bị loại trừ vì nó chứa các phụ thuộc độc quyền. + Thêm kho Cryptomator vào ứng dụng F-Droid. Thêm + Cài đặt Cryptomator bằng F-Droid.\nNếu lỗi không tìm thấy hiển thị, hãy đợi cho đến khi quá trình đồng bộ hoá F-Droid kết thúc. Website + Chứa các phụ thuộc độc quyền. + Chuyển đổi từ hoặc đến biến thể trên kho F-Droid chính yêu cầu thiết lập lại ứng dụng. Hủy Mở khoá Mật khẩu cũ Mật khẩu mới Đổi mật khẩu + Mật khẩu cũ không được để trống. + Mật khẩu mới không được để trống. + Mật khẩu mới không khớp với mật khẩu đã nhập lại. + Không tìm thấy vault %1$s + Vault đã bị đổi tên, di chuyển hoặc xoá. Xoá vault này khỏi danh sách và thêm lại để tiếp tục. Xoá ngay bây giờ? Xóa Tệp tin đã tồn tại Thay thế + Tệp có tên \'%1$s\' đã tồn tại. + Bỏ qua đã tồn tại Thay thế tất cả Thay thế hiện có Thay thế + Tệp có tên \'%1$s\' đã tồn tại. Bạn có muốn thay thế nó? + Tất cả các tệp đã tồn tại. Bạn có muốn thay thế chúng không? + %1$d tệp đã tồn tại. Bạn có muốn thay thế chúng không? Thay thế tệp tin? + Thay thế tập tin? + Không thể chia sẻ tệp + Bạn chưa thiết lập bất kỳ vault nào. Trước tiên, hãy tạo một vault mới bằng ứng dụng Cryptomator. OK Tạo vault Không thể mở %1$s + Vui lòng tải xuống một ứng dụng có thể mở tệp này hoặc bạn muốn lưu vào thiết bị của mình? Đổi tên vault + Đổi tên thư mục Đổi tên file Bạn chưa lưu thay đổi Bạn có thực sự muốn thoát mà không lưu? + Bỏ qua Tên tệp text.txt + Bạn có chắc chắn muốn xoá vault này không? + Hành động này sẽ chỉ xoá vault khỏi danh sách này chứ không thực sự xoá nó. + Đang tải lên… + Tệp %1$d trên %2$d + Đang xuất (%1$d/%2$d) + Vui lòng chờ… + Đang tạo thư mục… + Đang tạo tệp văn bản… + Xác thực… + Đang đổi tên… Đang xóa… + Đang mở khoá vault… + Đang đổi mật khẩu… + Đang tạo vault… + Đang tải lên… + Đang tải xuống… + Đang mã hoá… + Đang giải mã… + Đang di chuyển… Khoá + Chứng chỉ SSL không hợp lệ + Chứng chỉ SSL không hợp lệ. Bạn có muốn tin tưởng nó không? Chi tiết + Đây có thể là một rủi ro bảo mật. Tôi biết tôi đang làm gì. Tắt tối ưu pin + Để truy xuất ảnh và video mới mà không chạy trong nền, chúng ta cần chọn không tham gia tối ưu hoá pin. Nhưng đừng lo, %1$s không tiêu tốn nhiều năng lượng.\n\nĐể áp dụng tính năng này, hãy thay đổi \'Không được tối ưu hoá \' thành \'Tất cả ứng dụng\', chọn %1$s và chọn \'Không tối ưu hoá\' sau khi nhấn vào \'%2$s\' trong hộp thoại này. Không hỏi lại? + Việc sử dụng HTTP không an toàn. Chúng tôi khuyên bạn nên sử dụng HTTPS để thay thế. Nếu bạn biết những rủi ro, bạn có thể tiếp tục với HTTP. Chuyển sang HTTPS Dùng HTTPS? + Không có khoá màn hình nào được đặt. Để lưu trữ thông tin đăng nhập của bạn theo cách an toàn, hãy đặt một mẫu hình hoặc mật mã sau khi chọn OK. + Đặt khoá màn hình? + Đặt khoá màn hình + Không có thiết lập xác thực cơ bản trong hệ thống + Đăng ký ít nhất một vân tay/khuôn mặt để sử dụng dịch vụ này. + Ở chế độ này, dữ liệu nhạy cảm có thể được ghi vào tệp nhật ký trên thiết bị của bạn (ví dụ: tên tệp và đường dẫn). Mật khẩu, cookie, v.v. được loại trừ rõ ràng.\n\nHãy nhớ tắt chế độ gỡ lỗi càng sớm càng tốt. Chú ý Bật + Do lỗi trong các ứng dụng của Microsoft, tệp cần chỉnh sửa phải được chia sẻ với các ứng dụng này trong thư mục phương tiện công cộng trên thiết bị của bạn. Sau khi Cryptomator được tiếp tục, tệp có thể truy cập công khai sẽ bị xoá một lần nữa, nhưng Cryptomator không thể tác động đến những gì đã xảy ra với tệp này trong lúc ấy. Đảm bảo rằng bạn biết hành vi này khi kích hoạt tuỳ chọn này. Điều này sẽ chỉ áp dụng cho các loại tệp của Microsoft.\n\nCryptomator sẽ khởi động lại sau khi kích hoạt. + Cài đặt này là một tính năng bảo mật và ngăn các ứng dụng khác lừa người dùng làm những việc mà họ không muốn làm.\n\nBằng việc tắt, bạn xác nhận rằng bạn biết các rủi ro. Chú ý Tắt + Ứng dụng bị che khuất + Một ứng dụng khác đang hiển thị thứ gì đó phía trên Cryptomator (ví dụ: bộ lọc ánh sáng xanh hoặc ứng dụng chế độ ban đêm). Vì lý do bảo mật, Cryptomator bị tắt.\n\nCách bật Cryptomator Đóng + Vui lòng thêm lại vault cho đám mây %1s + Trong khi nâng cấp sang phiên bản ứng dụng này, chúng tôi cần xoá các vault sau khỏi ứng dụng:\n%2s \n\nCác vault đó không bị xoá khỏi đám mây mà chỉ khỏi ứng dụng này. Xin lỗi vì sự bất tiện này và vui lòng thêm lại các vault này để tiếp tục làm việc với chúng. + Vault nằm ở thư mục gốc của kết nối đám mây + Tạo kết nối đám mây mới, nơi bạn tối thiểu chọn thư mục mẹ của thư mục vault này làm thư mục gốc, để thêm vault này. + Cài đặt này là một tính năng bảo mật và ngăn các ứng dụng khác lừa người dùng làm những việc mà họ không muốn làm.\n\nBằng việc tắt, bạn xác nhận rằng bạn biết các rủi ro. + Bạn có chắc chắn muốn xoá kết nối đám mây này không? + Hành động này sẽ xoá kết nối đám mây và tất cả các vault của đám mây này. + Xoá %1$d mục? + Bạn có chắc chắn muốn xoá các mục này không? Bạn có chắc chắn muốn xóa file này? + Thao tác này sẽ xoá tất cả nội dung của thư mục. Bạn có chắc chắn muốn xoá thư mục này? + Đã tắt tính năng xác thực sinh trắc học + Vì khoá đã bị vô hiệu nên tính năng xác thực sinh trắc học đã bị tắt. Để bật lại, hãy mở cài đặt Cryptomator. + Cung cấp giấy phép hợp lệ + Chúng tôi phát hiện ra rằng bạn đã cài đặt Cryptomator mà không sử dụng Cửa hàng Google Play. Cung cấp giấy phép hợp lệ, mà bạn có thể mua trên https://cryptomator.org/android/ + Giấy phép được cung cấp không hợp lệ. Hãy chắc chắn rằng bạn đã nhập nó một cách chính xác. + Khoá được cung cấp là chứng chỉ người hỗ trợ dành cho máy tính để bàn. Vui lòng nhập giấy phép hợp lệ. + Không có giấy phép được cung cấp. Vui lòng nhập giấy phép hợp lệ. Thoát + Xác nhận giấy phép + Cảm ơn %1$s đã cung cấp giấy phép hợp lệ của bạn. Đã có bản cập nhật + Cập nhật Cryptomator lên phiên bản mới nhất. Bằng cách nhấn OK, chúng tôi sẽ tải xuống ứng dụng ở chế độ nền và sẽ yêu cầu bạn cài đặt ứng dụng đó. Cập nhật ngay Đến trang tải xuống Để sau Đang tải Đang tải phiên bản mới nhất của Cryptomator + Thư mục là một liên kết tượng trưng + Bạn không thể điều hướng vào liên kết tượng trưng này Quay lại + Không thể tải nội dung của thư mục + Thư mục đám mây \'%1$s\' không có tệp thư mục hợp lệ. Có thể thư mục đã được tạo trên một thiết bị khác và chưa được đồng bộ hoá hoàn toàn với đám mây. Vui lòng kiểm tra trong đám mây của bạn rằng tệp sau tồn tại và không trống:\n%2$s + Không còn hình ảnh để hiển thị… + Đã cập nhật thông tin xác thực của \'%1$s\' + Nếu bạn định thêm tài khoản pCloud mới, hãy nhấn vào url này www.pcloud.com, đăng xuất khỏi tài khoản hiện tại và nhấn lại vào \'+\' trong ứng dụng này để tạo kết nối đám mây mới. + Cryptomator cần quyền truy cập bộ nhớ để sử dụng vault cục bộ + Cryptomator cần quyền truy cập bộ nhớ để sử dụng tính năng tự động tải ảnh lên + Cryptomator cần quyền thông báo để hiển thị trạng thái vault chẳng hạn + 0 kB + byte kB MB GB @@ -230,12 +377,39 @@ năm Đăng nhập sinh trắc học + Đăng nhập bằng thông tin sinh trắc học của bạn + Sử dụng mật khẩu vault + Không thể tự động tải tệp lên + Vault đã được mở khoá: %1$d + Tự động khoá trong %1$s Khóa tất cả Hủy tải lên + Tải ảnh tự động đang chạy + Đang tải lên %1d/%2d + Đã hoàn tất tải ảnh tự động lên + %1$d hình ảnh được tải lên vault + Tự động tải ảnh lên không thành công + Đã xảy ra lỗi không rõ trong quá trình tải lên. + Thư mục đã chọn để tải lên không còn nữa. Chuyển đến cài đặt và chọn một cái mới + Vault bị khoá trong khi tải lên, vui lòng mở lại vault để tiếp tục + Vault được chỉ định để tự động tải lên không còn tồn tại. + Nhấn để làm mới xác thực. + Mở tệp có thể ghi + Vault vẫn mở khoá cho đến khi chỉnh sửa xong + Phiên bản mới nhất được cài đặt + Đang xác thực… Bộ nhớ cache + Lưu đệm các tệp được truy cập gần đây trong khi mã hoá cục bộ trên thiết bị để sử dụng lại sau này khi mở lại + Tổng kích thước bộ đệm Xóa bộ nhớ Cache + Các thay đổi sẽ được áp dụng vào lần tiếp theo ứng dụng khởi động lại + Đăng ký cho + %1$s + Khoảng thời gian kiểm tra cập nhật Kiểm tra cập nhật + Lần chạy cuối %1$s + Kích thước bộ đệm trên mỗi đám mây 1 phút 2 phút diff --git a/presentation/src/main/res/values-zh-rCN/strings.xml b/presentation/src/main/res/values-zh-rCN/strings.xml index d61c7a808..cadda576d 100644 --- a/presentation/src/main/res/values-zh-rCN/strings.xml +++ b/presentation/src/main/res/values-zh-rCN/strings.xml @@ -394,7 +394,7 @@ 所选文件夹无法再上传,请转到设置并选择一个新的文件夹 上传期间保险库锁定了,请重新打开保险库以继续 用于自动上传的指定保险库已不存在。 - 轻触刷新身份验证 + 轻触刷新身份验证。 打开可写文件 编辑期间保险库保持解锁 已安装最新版本 diff --git a/presentation/src/main/res/values-zh-rHK/strings.xml b/presentation/src/main/res/values-zh-rHK/strings.xml index 49ece676a..8ef5b828e 100644 --- a/presentation/src/main/res/values-zh-rHK/strings.xml +++ b/presentation/src/main/res/values-zh-rHK/strings.xml @@ -197,6 +197,8 @@ 安全提示 版本 進階設定 + 打開 Microsoft 檔案的解決方法 + 使用寫入權限在 Microsoft 應用程式中開啟檔案 加速解鎖 在提示輸入密碼或進行生物識別驗證時,在背景下載加密庫設定 保持解鎖 @@ -303,6 +305,7 @@ 在此模式下,敏感數據可能會寫入您設備上的日誌文件(例如文件名和路徑)。密碼、 cookies 等被明確排除在外。\n\n請記住盡快停用除錯模式。 注意 啟用 + 由於 Microsoft 應用程式中的錯誤,必須將檔案分享到公用資料夾才能進行編輯。一旦 Cryptomator 繼續運作,可以公開存取的相應檔案將再次被刪除,但 Cryptomator 無法影響在此期間該檔案所發生的情況。請確保在啟用此選項時了解此行為。此問題僅適用於 Microsoft 文件類型。\n\n啟用該選項後,Cryptomator 將重新啟動。 此設定是一項安全功能,可防止其他應用程式誤導用戶錯誤地操作。\n\n如果停用這項功能,請確定你已經了解風險 注意 停用 @@ -391,6 +394,7 @@ 已選擇的資料夾無法使用,請在設定重新選擇。 加密庫在上載期間鎖定,請解鎖加密庫以繼續上載。 指定自動上傳的加密庫已不存在。 + 輕觸更新身份驗證。 開啟讀取的文件 加密庫將在編輯期間保持解鎖狀態 已安裝最新版本 diff --git a/presentation/src/main/res/values-zh-rTW/strings.xml b/presentation/src/main/res/values-zh-rTW/strings.xml index 1b91cd93a..c59b814f4 100644 --- a/presentation/src/main/res/values-zh-rTW/strings.xml +++ b/presentation/src/main/res/values-zh-rTW/strings.xml @@ -197,6 +197,8 @@ 安全提示 版本 進階設定 + 開啟 Microsoft 檔案的替代方案 + 使用寫入權限於 Microsoft 應用程式中開啟檔案 加速解鎖 在提示輸入密碼或生物識別身份驗證時在後台下載保險庫配置 保持解鎖 @@ -303,6 +305,7 @@ 在此模式下,敏感數據可能會寫入您設備上的日誌文件(例如文件名和路徑)。 密碼、cookies 等被明確排除在外。\n\n請記住盡快禁用調試模式。 注意 啟用 + 由於 Microsoft 應用程式中的錯誤,必須將檔案分享到公用資料夾才能進行編輯。一旦 Cryptomator 繼續運作,可以公開存取的相應檔案將再次被刪除,但 Cryptomator 無法影響在此期間該檔案所發生的情況。請確保在啟用此選項時了解此行為。此問題僅適用於 Microsoft 文件類型。\n\n啟用該選項後,Cryptomator 將重新啟動。 此設定是一項安全功能,可防止其他應用程式欺騙用戶做他們不想做的事情。\n\n如果停用這項功能,請確定你已經了解風險 注意 停用 @@ -391,6 +394,7 @@ 您選擇的資料夾無法使用,請至設定重新選擇。 加密檔案庫在上傳期間鎖定,請重新打開加密檔案庫後繼續 使用於自動上傳的加密檔案庫已不存在。 + 輕觸以更新身份驗證。 開啟可讀寫檔案 加密檔案庫將在編輯期間保持解鎖狀態 已安裝最新版本