Merge branch 'develop' into feature/vault-format-8
This commit is contained in:
commit
38ef3b2f7f
@ -15,7 +15,7 @@ buildscript {
|
|||||||
classpath 'com.fernandocejas.frodo:frodo-plugin:0.8.3'
|
classpath 'com.fernandocejas.frodo:frodo-plugin:0.8.3'
|
||||||
classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.16.0'
|
classpath 'com.vanniktech:gradle-android-junit-jacoco-plugin:0.16.0'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
classpath "de.mannodermaus.gradle.plugins:android-junit5:1.7.0.0"
|
classpath "de.mannodermaus.gradle.plugins:android-junit5:1.7.1.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ allprojects {
|
|||||||
ext {
|
ext {
|
||||||
androidApplicationId = 'org.cryptomator'
|
androidApplicationId = 'org.cryptomator'
|
||||||
androidVersionCode = getVersionCode()
|
androidVersionCode = getVersionCode()
|
||||||
androidVersionName = '1.5.14-SNAPSHOT'
|
androidVersionName = '1.6.0-SNAPSHOT'
|
||||||
}
|
}
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
@ -55,7 +55,7 @@ ext {
|
|||||||
|
|
||||||
googleApiServicesVersion = 'v3-rev197-1.25.0'
|
googleApiServicesVersion = 'v3-rev197-1.25.0'
|
||||||
googlePlayServicesVersion = '19.0.0'
|
googlePlayServicesVersion = '19.0.0'
|
||||||
googleClientVersion = '1.31.3'
|
googleClientVersion = '1.31.4'
|
||||||
|
|
||||||
msgraphVersion = '2.10.0'
|
msgraphVersion = '2.10.0'
|
||||||
msaAuthVersion = '0.10.0'
|
msaAuthVersion = '0.10.0'
|
||||||
@ -70,7 +70,7 @@ ext {
|
|||||||
jUnit4Version = '4.13.1'
|
jUnit4Version = '4.13.1'
|
||||||
assertJVersion = '1.7.1'
|
assertJVersion = '1.7.1'
|
||||||
mockitoVersion = '3.9.0'
|
mockitoVersion = '3.9.0'
|
||||||
mockitoInlineVersion = '3.8.0'
|
mockitoInlineVersion = '3.9.0'
|
||||||
hamcrestVersion = '1.3'
|
hamcrestVersion = '1.3'
|
||||||
dexmakerVersion = '1.0'
|
dexmakerVersion = '1.0'
|
||||||
espressoVersion = '3.3.0'
|
espressoVersion = '3.3.0'
|
||||||
@ -85,7 +85,7 @@ ext {
|
|||||||
androidxViewpagerVersion = '1.0.0'
|
androidxViewpagerVersion = '1.0.0'
|
||||||
androidxSwiperefreshVersion = '1.1.0'
|
androidxSwiperefreshVersion = '1.1.0'
|
||||||
androidxPreferenceVersion = '1.0.0' // 1.1.0 and 1.1.2 does have a bug with the text size
|
androidxPreferenceVersion = '1.0.0' // 1.1.0 and 1.1.2 does have a bug with the text size
|
||||||
androidxRecyclerViewVersion = '1.1.0'
|
androidxRecyclerViewVersion = '1.2.0'
|
||||||
androidxDocumentfileVersion = '1.0.1'
|
androidxDocumentfileVersion = '1.0.1'
|
||||||
androidxBiometricVersion = '1.1.0'
|
androidxBiometricVersion = '1.1.0'
|
||||||
androidxTestCoreVersion = '1.3.0'
|
androidxTestCoreVersion = '1.3.0'
|
||||||
|
@ -20,4 +20,4 @@ S3_SECRET_ACCESS_KEY=
|
|||||||
|
|
||||||
SLACK_URL=
|
SLACK_URL=
|
||||||
|
|
||||||
GITHUB_TOKEN=
|
GITHUB_PERSONAL_ACCESS_TOKEN=
|
||||||
|
@ -32,7 +32,7 @@ platform :android do |options|
|
|||||||
|
|
||||||
slack(
|
slack(
|
||||||
default_payloads: [], # reduce the notification to the minimum
|
default_payloads: [], # reduce the notification to the minimum
|
||||||
message: ":rocket: Successfully deployed #{version} with code #{build} to the Play Store :cryptomator:",
|
message: ":rocket: Successfully deployed #{version} with code #{build} :cryptomator:",
|
||||||
payload: {
|
payload: {
|
||||||
"Changes" => File.read(release_note_path_en)
|
"Changes" => File.read(release_note_path_en)
|
||||||
}
|
}
|
||||||
|
@ -1,2 +1,4 @@
|
|||||||
- Möglichkeit neu erstellte Videos über den automatischen Upload hochzuladen hinzugefügt
|
- Native pCloud-Unterstützung hinzugefügt (großen Dank an Manu für die Implementierung)
|
||||||
- Möglichkeit das Entsperren eines Tresors abzubrechen hinzugefügt
|
- App-Absturz beim Wiederherstellen von Cryptomator aus einem Backup behoben
|
||||||
|
- Verbesserte Anzeige von langen Einstellungen
|
||||||
|
- Verbessertes Löschen des letzten Bildes über die Vorschau. Springt jetzt zurück in die Tresor-Inhaltsliste
|
@ -1,2 +1,4 @@
|
|||||||
- Added possibility to upload newly created videos via automatic upload as well
|
- Added pCloud native support (thanks to Manu for this huge contribution)
|
||||||
- Added possibility to cancel unlocking a vault
|
- Fixed app crash when restoring Cryptomator from a backup
|
||||||
|
- Enhanced display of long settings
|
||||||
|
- Enhanced deletion of the last image via the preview. Now jumps back to the vault contents list
|
4
fastlane/metadata/android/fr-FR/changelogs/.gitignore
vendored
Normal file
4
fastlane/metadata/android/fr-FR/changelogs/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Ignore everything in this directory
|
||||||
|
*
|
||||||
|
# Except this file
|
||||||
|
!.gitignore
|
@ -1,4 +1,6 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li>Added possibility to upload newly created videos via automatic upload as well</li>
|
<li>Added pCloud native support (thanks to Manu for this huge contribution)</li>
|
||||||
<li>Added possibility to cancel unlocking a vault</li>
|
<li>Fixed app crash when restoring Cryptomator from a backup</li>
|
||||||
|
<li>Enhanced display of long settings</li>
|
||||||
|
<li>Enhanced deletion of the last image via the preview. Now jumps back to the vault contents list</li>
|
||||||
</ul>
|
</ul>
|
@ -850,8 +850,7 @@ class BrowseFilesPresenter @Inject constructor( //
|
|||||||
private fun createNewDocumentUri(parentUri: Uri, fileName: String): Uri {
|
private fun createNewDocumentUri(parentUri: Uri, fileName: String): Uri {
|
||||||
val mimeType = mimeTypes.fromFilename(fileName) //
|
val mimeType = mimeTypes.fromFilename(fileName) //
|
||||||
.orElse(MimeType.APPLICATION_OCTET_STREAM)
|
.orElse(MimeType.APPLICATION_OCTET_STREAM)
|
||||||
val newDocumentUri: Uri?
|
return try {
|
||||||
newDocumentUri = try {
|
|
||||||
DocumentsContract.createDocument( //
|
DocumentsContract.createDocument( //
|
||||||
context().contentResolver, //
|
context().contentResolver, //
|
||||||
parentUri, //
|
parentUri, //
|
||||||
@ -859,11 +858,7 @@ class BrowseFilesPresenter @Inject constructor( //
|
|||||||
fileName)
|
fileName)
|
||||||
} catch (e: FileNotFoundException) {
|
} catch (e: FileNotFoundException) {
|
||||||
throw NoSuchCloudFileException(fileName)
|
throw NoSuchCloudFileException(fileName)
|
||||||
}
|
} ?: throw IllegalFileNameException()
|
||||||
if (newDocumentUri == null) {
|
|
||||||
throw IllegalFileNameException()
|
|
||||||
}
|
|
||||||
return newDocumentUri
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Callback
|
@Callback
|
||||||
@ -1093,7 +1088,7 @@ class BrowseFilesPresenter @Inject constructor( //
|
|||||||
|
|
||||||
fun openFileFinished() {
|
fun openFileFinished() {
|
||||||
try {
|
try {
|
||||||
// necessary see https://gitlab.skymatic.de/cryptomator/android/-/issues/569
|
// necessary see https://community.cryptomator.org/t/android-tabelle-nach-upload-unlesbar/6550
|
||||||
Thread.sleep(500)
|
Thread.sleep(500)
|
||||||
} catch (e: InterruptedException) {
|
} catch (e: InterruptedException) {
|
||||||
Timber.tag("BrowseFilesPresenter").e(e, "Failed to sleep after resuming editing, necessary for google office apps")
|
Timber.tag("BrowseFilesPresenter").e(e, "Failed to sleep after resuming editing, necessary for google office apps")
|
||||||
@ -1107,12 +1102,17 @@ class BrowseFilesPresenter @Inject constructor( //
|
|||||||
context().revokeUriPermission(uriToOpenedFile, Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
context().revokeUriPermission(uriToOpenedFile, Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||||
|
|
||||||
uriToOpenedFile?.let {
|
uriToOpenedFile?.let {
|
||||||
val hashAfterEdit = calculateDigestFromUri(it)
|
try {
|
||||||
if (hashAfterEdit.isPresent && openedCloudFileMd5.isPresent //
|
val hashAfterEdit = calculateDigestFromUri(it)
|
||||||
&& Arrays.equals(hashAfterEdit.get(), openedCloudFileMd5.get())) {
|
if (hashAfterEdit.isPresent && openedCloudFileMd5.isPresent //
|
||||||
Timber.tag("BrowseFilesPresenter").i("Opened app finished, file not changed")
|
&& Arrays.equals(hashAfterEdit.get(), openedCloudFileMd5.get())) {
|
||||||
} else {
|
Timber.tag("BrowseFilesPresenter").i("Opened app finished, file not changed")
|
||||||
uploadChangedFile()
|
} else {
|
||||||
|
uploadChangedFile()
|
||||||
|
}
|
||||||
|
} catch (e: FileNotFoundException) {
|
||||||
|
Timber.tag("BrowseFilesPresenter").e(e, "Failed to read back changes, file isn't present anymore")
|
||||||
|
Toast.makeText(context(), R.string.error_file_not_found_after_opening_using_3party, Toast.LENGTH_LONG).show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1159,6 +1159,7 @@ class BrowseFilesPresenter @Inject constructor( //
|
|||||||
openWritableFileNotification.ifPresent { obj: OpenWritableFileNotification -> obj.hide() }
|
openWritableFileNotification.ifPresent { obj: OpenWritableFileNotification -> obj.hide() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Throws(FileNotFoundException::class)
|
||||||
private fun calculateDigestFromUri(uri: Uri): Optional<ByteArray> {
|
private fun calculateDigestFromUri(uri: Uri): Optional<ByteArray> {
|
||||||
val digest = MessageDigest.getInstance("MD5")
|
val digest = MessageDigest.getInstance("MD5")
|
||||||
DigestInputStream(context().contentResolver.openInputStream(uri), digest).use { dis ->
|
DigestInputStream(context().contentResolver.openInputStream(uri), digest).use { dis ->
|
||||||
|
@ -6,6 +6,7 @@ import android.content.ActivityNotFoundException
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.widget.Toast
|
||||||
import org.cryptomator.data.cloud.crypto.CryptoCloud
|
import org.cryptomator.data.cloud.crypto.CryptoCloud
|
||||||
import org.cryptomator.data.util.NetworkConnectionCheck
|
import org.cryptomator.data.util.NetworkConnectionCheck
|
||||||
import org.cryptomator.domain.Cloud
|
import org.cryptomator.domain.Cloud
|
||||||
@ -122,7 +123,13 @@ class VaultListPresenter @Inject constructor( //
|
|||||||
val intent = Intent(context(), LicenseCheckActivity::class.java)
|
val intent = Intent(context(), LicenseCheckActivity::class.java)
|
||||||
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||||||
intent.data = Uri.parse(String.format("app://cryptomator/%s", license))
|
intent.data = Uri.parse(String.format("app://cryptomator/%s", license))
|
||||||
context().startActivity(intent)
|
|
||||||
|
try {
|
||||||
|
context().startActivity(intent)
|
||||||
|
} catch (e: ActivityNotFoundException) {
|
||||||
|
Toast.makeText(context(), "Please contact the support.", Toast.LENGTH_LONG).show()
|
||||||
|
finish()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -102,7 +102,6 @@
|
|||||||
<string name="screen_share_files_section_location">Speicherort</string>
|
<string name="screen_share_files_section_location">Speicherort</string>
|
||||||
<string name="screen_share_files_save_button_text">Speichern</string>
|
<string name="screen_share_files_save_button_text">Speichern</string>
|
||||||
<string name="screen_share_files_msg_success">Dateien verschlüsselt</string>
|
<string name="screen_share_files_msg_success">Dateien verschlüsselt</string>
|
||||||
<string name="screen_share_files_new_text_file">text.txt</string>
|
|
||||||
<!-- ## screen: choose cloud service -->
|
<!-- ## screen: choose cloud service -->
|
||||||
<string name="screen_choose_cloud_service_title">Cloud-Dienst</string>
|
<string name="screen_choose_cloud_service_title">Cloud-Dienst</string>
|
||||||
<string name="screen_choose_cloud_service_subtitle_add_existing_vault">Neuen Tresor anlegen</string>
|
<string name="screen_choose_cloud_service_subtitle_add_existing_vault">Neuen Tresor anlegen</string>
|
||||||
@ -216,7 +215,7 @@
|
|||||||
<string name="dialog_replace_positive_button_single_file_exists">Ersetzen</string>
|
<string name="dialog_replace_positive_button_single_file_exists">Ersetzen</string>
|
||||||
<string name="dialog_replace_msg_single_file_exists">Eine Datei names \'%1$s\' existiert bereits. Soll diese ersetzt werden?</string>
|
<string name="dialog_replace_msg_single_file_exists">Eine Datei names \'%1$s\' existiert bereits. Soll diese ersetzt werden?</string>
|
||||||
<string name="dialog_replace_msg_all_files_exists">Alle Dateien existieren bereits. Sollen diese ersetzt werden?</string>
|
<string name="dialog_replace_msg_all_files_exists">Alle Dateien existieren bereits. Sollen diese ersetzt werden?</string>
|
||||||
<string name="dialog_replace_msg_some_files_exists">%d Dateien existieren bereits. Sollen diese ersetzt werden?</string>
|
<string name="dialog_replace_msg_some_files_exists">%1$d Dateien existieren bereits. Sollen diese ersetzt werden?</string>
|
||||||
<string name="dialog_replace_title_single_file_exists">Datei ersetzen?</string>
|
<string name="dialog_replace_title_single_file_exists">Datei ersetzen?</string>
|
||||||
<string name="dialog_replace_title_multiple_files_exist">Dateien ersetzen?</string>
|
<string name="dialog_replace_title_multiple_files_exist">Dateien ersetzen?</string>
|
||||||
<string name="dialog_unable_to_share_title">Teilen nicht möglich</string>
|
<string name="dialog_unable_to_share_title">Teilen nicht möglich</string>
|
||||||
@ -231,8 +230,7 @@
|
|||||||
<string name="dialog_unsaved_changes_title">Sie haben ungespeicherte Änderungen</string>
|
<string name="dialog_unsaved_changes_title">Sie haben ungespeicherte Änderungen</string>
|
||||||
<string name="dialog_unsaved_changes_message">Möchten Sie wirklich beenden, ohne zu speichern?</string>
|
<string name="dialog_unsaved_changes_message">Möchten Sie wirklich beenden, ohne zu speichern?</string>
|
||||||
<string name="dialog_unsaved_changes_discard">Verwerfen</string>
|
<string name="dialog_unsaved_changes_discard">Verwerfen</string>
|
||||||
<string name="dialog_unsaved_changes_save">@string/dialog_button_cancel</string>
|
<string name="dialog_file_name_placeholder">text.txt</string>
|
||||||
<string name="dialog_file_name_placeholder">@string/screen_share_files_new_text_file</string>
|
|
||||||
<string name="dialog_delete_vault_message">Sind Sie sicher, dass sie den Tresor entfernen wollen?</string>
|
<string name="dialog_delete_vault_message">Sind Sie sicher, dass sie den Tresor entfernen wollen?</string>
|
||||||
<string name="dialog_delete_vault_hint">Dieser Vorgang wird den Tresor nur aus dieser Liste entfernen und nicht tatsächlich löschen.</string>
|
<string name="dialog_delete_vault_hint">Dieser Vorgang wird den Tresor nur aus dieser Liste entfernen und nicht tatsächlich löschen.</string>
|
||||||
<string name="dialog_upload_file_title">Lade hoch…</string>
|
<string name="dialog_upload_file_title">Lade hoch…</string>
|
||||||
|
@ -142,7 +142,7 @@
|
|||||||
<string name="dialog_replace_positive_button_single_file_exists">Reemplazar</string>
|
<string name="dialog_replace_positive_button_single_file_exists">Reemplazar</string>
|
||||||
<string name="dialog_replace_msg_single_file_exists">Ya existe un archivo llamado %1$s. ¿Quieres reemplazarlo?</string>
|
<string name="dialog_replace_msg_single_file_exists">Ya existe un archivo llamado %1$s. ¿Quieres reemplazarlo?</string>
|
||||||
<string name="dialog_replace_msg_all_files_exists">Todos los archivos existen ya. ¿Quieres reemplazarlos?</string>
|
<string name="dialog_replace_msg_all_files_exists">Todos los archivos existen ya. ¿Quieres reemplazarlos?</string>
|
||||||
<string name="dialog_replace_msg_some_files_exists">\"%d archivos existen ya. ¿Quieres reemplazarlos?</string>
|
<string name="dialog_replace_msg_some_files_exists">%1$d archivos existen ya. ¿Quieres reemplazarlos?</string>
|
||||||
<string name="dialog_replace_title_single_file_exists">\"¿Reemplazar archivo?</string>
|
<string name="dialog_replace_title_single_file_exists">\"¿Reemplazar archivo?</string>
|
||||||
<string name="dialog_replace_title_multiple_files_exist">\"¿Reemplazar archivos?</string>
|
<string name="dialog_replace_title_multiple_files_exist">\"¿Reemplazar archivos?</string>
|
||||||
<string name="dialog_unable_to_share_title">No se puede compartir archivos</string>
|
<string name="dialog_unable_to_share_title">No se puede compartir archivos</string>
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
<!-- # error messages -->
|
<!-- # error messages -->
|
||||||
<string name="error_generic">Une erreur est survenue</string>
|
<string name="error_generic">Une erreur est survenue</string>
|
||||||
<string name="error_authentication_failed">Échec de l\'authentification</string>
|
<string name="error_authentication_failed">Échec de l\'authentification</string>
|
||||||
|
<string name="error_authentication_failed_re_authenticate">Échec de l\'authentification, veuillez vous connecter en utilisant %1$s</string>
|
||||||
<string name="error_no_network_connection">Pas de connexion au réseau</string>
|
<string name="error_no_network_connection">Pas de connexion au réseau</string>
|
||||||
<string name="error_invalid_passphrase">Mot de passe erroné</string>
|
<string name="error_invalid_passphrase">Mot de passe erroné</string>
|
||||||
<string name="error_file_or_folder_exists">Un fichier ou un dossier existe déjà.</string>
|
<string name="error_file_or_folder_exists">Un fichier ou un dossier existe déjà.</string>
|
||||||
@ -175,6 +176,7 @@
|
|||||||
<string name="screen_settings_section_version">Version</string>
|
<string name="screen_settings_section_version">Version</string>
|
||||||
<string name="screen_settings_advanced_settings">Paramètres Avancés</string>
|
<string name="screen_settings_advanced_settings">Paramètres Avancés</string>
|
||||||
<string name="screen_settings_background_unlock_preparation_label">Accélérer le déverrouillage</string>
|
<string name="screen_settings_background_unlock_preparation_label">Accélérer le déverrouillage</string>
|
||||||
|
<string name="screen_settings_background_unlock_preparation_label_summary">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</string>
|
||||||
<string name="screen_settings_keep_unlocked_while_editing_files">Maintenir deverouillé</string>
|
<string name="screen_settings_keep_unlocked_while_editing_files">Maintenir deverouillé</string>
|
||||||
<string name="screen_settings_keep_unlocked_while_editing_files_summary">Gardez les coffres forts déverrouillées pendant l\'édition des fichiers</string>
|
<string name="screen_settings_keep_unlocked_while_editing_files_summary">Gardez les coffres forts déverrouillées pendant l\'édition des fichiers</string>
|
||||||
<!-- ## screen: cloud settings -->
|
<!-- ## screen: cloud settings -->
|
||||||
@ -214,7 +216,7 @@
|
|||||||
<string name="dialog_replace_positive_button_single_file_exists">Remplacer</string>
|
<string name="dialog_replace_positive_button_single_file_exists">Remplacer</string>
|
||||||
<string name="dialog_replace_msg_single_file_exists">Un fichier nommé \'%1$s\' existe déjà. Voulez-vous le remplacer?</string>
|
<string name="dialog_replace_msg_single_file_exists">Un fichier nommé \'%1$s\' existe déjà. Voulez-vous le remplacer?</string>
|
||||||
<string name="dialog_replace_msg_all_files_exists">Tous les fichiers existent déjà. Voulez-vous les remplacer?</string>
|
<string name="dialog_replace_msg_all_files_exists">Tous les fichiers existent déjà. Voulez-vous les remplacer?</string>
|
||||||
<string name="dialog_replace_msg_some_files_exists">%d fichiers existent déjà. Voulez-vous les remplacer?</string>
|
<string name="dialog_replace_msg_some_files_exists">%1$d fichiers existent déjà. Voulez-vous les remplacer?</string>
|
||||||
<string name="dialog_replace_title_single_file_exists">Remplacer le fichier?</string>
|
<string name="dialog_replace_title_single_file_exists">Remplacer le fichier?</string>
|
||||||
<string name="dialog_replace_title_multiple_files_exist">Remplacer les fichiers?</string>
|
<string name="dialog_replace_title_multiple_files_exist">Remplacer les fichiers?</string>
|
||||||
<string name="dialog_unable_to_share_title">Impossible de partager des fichiers</string>
|
<string name="dialog_unable_to_share_title">Impossible de partager des fichiers</string>
|
||||||
|
@ -200,7 +200,7 @@
|
|||||||
<string name="dialog_replace_positive_button_single_file_exists">Değiştir</string>
|
<string name="dialog_replace_positive_button_single_file_exists">Değiştir</string>
|
||||||
<string name="dialog_replace_msg_single_file_exists">\'%1$s\' adlı bir dosya zaten var. Değiştirmek istiyor musunuz?</string>
|
<string name="dialog_replace_msg_single_file_exists">\'%1$s\' adlı bir dosya zaten var. Değiştirmek istiyor musunuz?</string>
|
||||||
<string name="dialog_replace_msg_all_files_exists">Tüm dosyalar zaten mevcut. Onları değiştirmek ister misin?</string>
|
<string name="dialog_replace_msg_all_files_exists">Tüm dosyalar zaten mevcut. Onları değiştirmek ister misin?</string>
|
||||||
<string name="dialog_replace_msg_some_files_exists">%d dosya zaten var. Onları değiştirmek ister misin?</string>
|
<string name="dialog_replace_msg_some_files_exists">%1$d dosya zaten var. Onları değiştirmek ister misin?</string>
|
||||||
<string name="dialog_replace_title_single_file_exists">Dosya değiştirilsin mi?</string>
|
<string name="dialog_replace_title_single_file_exists">Dosya değiştirilsin mi?</string>
|
||||||
<string name="dialog_replace_title_multiple_files_exist">Dosyalar değiştirilsin mi?</string>
|
<string name="dialog_replace_title_multiple_files_exist">Dosyalar değiştirilsin mi?</string>
|
||||||
<string name="dialog_unable_to_share_title">Dosyalar paylaşılamıyor</string>
|
<string name="dialog_unable_to_share_title">Dosyalar paylaşılamıyor</string>
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
<string name="error_vault_version_mismatch">Version specified in vault.cryptomator is different to masterkey.cryptomator</string>
|
<string name="error_vault_version_mismatch">Version specified in vault.cryptomator is different to masterkey.cryptomator</string>
|
||||||
<string name="error_vault_key_invalid">vault.cryptomator does not match with this masterkey.cryptomator</string>
|
<string name="error_vault_key_invalid">vault.cryptomator does not match with this masterkey.cryptomator</string>
|
||||||
<string name="error_vault_config_loading">General error while loading the vault config</string>
|
<string name="error_vault_config_loading">General error while loading the vault config</string>
|
||||||
|
<string name="error_file_not_found_after_opening_using_3party">Local file isn\'t present anymore after switching back to Cryptomator. Possible changes cannot be propagated back to the cloud.</string>
|
||||||
|
|
||||||
<!-- # clouds -->
|
<!-- # clouds -->
|
||||||
|
|
||||||
<!-- ## cloud names -->
|
<!-- ## cloud names -->
|
||||||
@ -308,7 +310,7 @@
|
|||||||
<string name="dialog_replace_positive_button_single_file_exists">Replace</string>
|
<string name="dialog_replace_positive_button_single_file_exists">Replace</string>
|
||||||
<string name="dialog_replace_msg_single_file_exists">A file named \'%1$s\' already exists. Do you want to replace it?</string>
|
<string name="dialog_replace_msg_single_file_exists">A file named \'%1$s\' already exists. Do you want to replace it?</string>
|
||||||
<string name="dialog_replace_msg_all_files_exists">All files already exist. Do you want to replace them?</string>
|
<string name="dialog_replace_msg_all_files_exists">All files already exist. Do you want to replace them?</string>
|
||||||
<string name="dialog_replace_msg_some_files_exists">%d files already exist. Do you want to replace them?</string>
|
<string name="dialog_replace_msg_some_files_exists">%1$d files already exist. Do you want to replace them?</string>
|
||||||
<string name="dialog_replace_title_single_file_exists">Replace file?</string>
|
<string name="dialog_replace_title_single_file_exists">Replace file?</string>
|
||||||
<string name="dialog_replace_title_multiple_files_exist">Replace files?</string>
|
<string name="dialog_replace_title_multiple_files_exist">Replace files?</string>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user