diff --git a/auth/assets/custom-icons/_data/custom-icons.json b/auth/assets/custom-icons/_data/custom-icons.json
index 3e8f8ce679..b911183e88 100644
--- a/auth/assets/custom-icons/_data/custom-icons.json
+++ b/auth/assets/custom-icons/_data/custom-icons.json
@@ -302,6 +302,10 @@
"title": "Rockstar Games",
"slug": "rockstar_games"
},
+ {
+ "title": "RuneMate",
+ "hex": "2ECC71"
+ },
{
"title": "Rust Language Forum",
"slug": "rust_language_forum",
@@ -412,6 +416,14 @@
"Яндекс"
],
"slug": "Yandex"
+ },
+ {
+ "title": "YNAB",
+ "altNames": [
+ "You Need A Budget"
+ ],
+ "slug": "ynab",
+ "hex": "3B5EDA"
}
]
}
\ No newline at end of file
diff --git a/auth/assets/custom-icons/icons/runemate.svg b/auth/assets/custom-icons/icons/runemate.svg
new file mode 100644
index 0000000000..1855afb8d2
--- /dev/null
+++ b/auth/assets/custom-icons/icons/runemate.svg
@@ -0,0 +1,8 @@
+
diff --git a/auth/assets/custom-icons/icons/ynab.svg b/auth/assets/custom-icons/icons/ynab.svg
new file mode 100644
index 0000000000..4ddfc9fa07
--- /dev/null
+++ b/auth/assets/custom-icons/icons/ynab.svg
@@ -0,0 +1,20 @@
+
diff --git a/auth/lib/l10n/arb/app_fr.arb b/auth/lib/l10n/arb/app_fr.arb
index 71ddc0b31c..d789fc48c2 100644
--- a/auth/lib/l10n/arb/app_fr.arb
+++ b/auth/lib/l10n/arb/app_fr.arb
@@ -20,6 +20,8 @@
"codeIssuerHint": "Émetteur",
"codeSecretKeyHint": "Clé secrète",
"codeAccountHint": "Compte (vous@exemple.com)",
+ "codeTagHint": "Tag",
+ "accountKeyType": "Type de clé",
"sessionExpired": "Session expirée",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
@@ -77,12 +79,14 @@
"data": "Données",
"importCodes": "Importer les codes",
"importTypePlainText": "Texte brut",
+ "importTypeEnteEncrypted": "Export chiffré Ente",
"passwordForDecryptingExport": "Mot de passe pour déchiffrer l'exportation",
"passwordEmptyError": "Le mot de passe ne peut pas être vide",
"importFromApp": "Importer des codes depuis {appName}",
"importGoogleAuthGuide": "Exportez vos comptes depuis Google Authenticator vers un code QR en utilisant l'option \"Transférer des comptes\". Ensuite, en utilisant un autre appareil, scannez le code QR.\n\nAstuce : Vous pouvez utiliser la webcam de votre ordinateur portable pour prendre une photo du code QR.",
"importSelectJsonFile": "Sélectionnez un fichier JSON",
"importSelectAppExport": "Sélectionnez le fichier d'exportation {appName}",
+ "importEnteEncGuide": "Sélectionnez le fichier chiffré JSON exporté depuis Ente",
"importRaivoGuide": "Utilisez l'option \"Exporter les OTPs vers l'archive Zip\" dans les paramètres de Raivo.\n\nExtrayez le fichier zip et importez le fichier JSON.",
"importBitwardenGuide": "Utilisez l'option « Exporter le coffre » dans les outils Bitwarden et importez le fichier JSON non chiffré.",
"importAegisGuide": "Utilisez l'option \"Exporter le coffre-fort\" dans les paramètres d'Aegis.\n\nSi votre coffre-fort est crypté, vous devrez saisir le mot de passe du coffre-fort pour déchiffrer le coffre-fort.",
@@ -112,18 +116,22 @@
"copied": "Copié",
"pleaseTryAgain": "Veuillez réessayer",
"existingUser": "Utilisateur existant",
+ "newUser": "Nouveau dans Ente",
"delete": "Supprimer",
"enterYourPasswordHint": "Saisir votre mot de passe",
"forgotPassword": "Mot de passe oublié",
"oops": "Oups",
"suggestFeatures": "Suggérer des fonctionnalités",
"faq": "FAQ",
+ "faq_q_1": "Quelle est la sécurité de Auth?",
+ "faq_a_1": "Tous les codes que vous sauvegardez via ente sont chiffrés de bout en bout. Cela signifie que vous seul pouvez accéder à vos codes. Nos applications sont open source et notre cryptographie ont fait l'objet d'un audit externe.",
"faq_q_2": "Puis-je accéder à mes codes sur mon ordinateur ?",
"faq_a_2": "Vous pouvez accéder à vos codes sur le web via auth.ente.io.",
"faq_q_3": "Comment puis-je supprimer des codes ?",
"faq_a_3": "Vous pouvez supprimer un code en glissant vers la gauche.",
"faq_q_4": "Comment puis-je soutenir le projet ?",
"faq_a_4": "Vous pouvez soutenir le développement de ce projet en vous abonnant à notre application Photos, ente.io.",
+ "faq_q_5": "Comment puis-je activer le verrouillage FaceID dans Auth",
"faq_a_5": "Vous pouvez activer le verrouillage FaceID dans Paramètres → Sécurité → Écran de verrouillage.",
"somethingWentWrongMessage": "Quelque chose s'est mal passé, veuillez recommencer",
"leaveFamily": "Quitter le plan familial",
@@ -150,6 +158,7 @@
}
}
},
+ "invalidQRCode": "QR code non valide",
"noRecoveryKeyTitle": "Pas de clé de récupération ?",
"enterEmailHint": "Entrez votre adresse e-mail",
"invalidEmailTitle": "Adresse e-mail invalide",
@@ -343,6 +352,7 @@
"deleteCodeAuthMessage": "Authentification requise pour supprimer le code",
"showQRAuthMessage": "Authentification requise pour afficher le code QR",
"confirmAccountDeleteTitle": "Confirmer la suppression du compte",
+ "confirmAccountDeleteMessage": "Ce compte est lié à d'autres applications ente, si vous en utilisez une.\n\nVos données téléchargées, dans toutes les applications ente, seront planifiées pour suppression, et votre compte sera définitivement supprimé.",
"androidBiometricHint": "Vérifier l’identité",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
@@ -413,5 +423,18 @@
"invalidEndpoint": "Point de terminaison non valide",
"invalidEndpointMessage": "Désolé, le point de terminaison que vous avez entré n'est pas valide. Veuillez en entrer un valide puis réessayez.",
"endpointUpdatedMessage": "Point de terminaison mis à jour avec succès",
- "customEndpoint": "Connecté à {endpoint}"
+ "customEndpoint": "Connecté à {endpoint}",
+ "pinText": "Épingler",
+ "unpinText": "Désépingler",
+ "pinnedCodeMessage": "{code} a été épinglé",
+ "unpinnedCodeMessage": "{code} a été désépinglé",
+ "tags": "Tags",
+ "createNewTag": "Créer un nouveau tag",
+ "tag": "Tag",
+ "create": "Créer",
+ "editTag": "Modifier le tag",
+ "deleteTagTitle": "Supprimer le tag ?",
+ "deleteTagMessage": "Êtes-vous sûr de vouloir supprimer ce tag ? Cette action est irréversible.",
+ "somethingWentWrongParsingCode": "Impossible d'analyser les codes {x}.",
+ "updateNotAvailable": "Mise à jour non disponible"
}
\ No newline at end of file
diff --git a/auth/lib/l10n/arb/app_pt.arb b/auth/lib/l10n/arb/app_pt.arb
index 3f92822d9a..232c1becfe 100644
--- a/auth/lib/l10n/arb/app_pt.arb
+++ b/auth/lib/l10n/arb/app_pt.arb
@@ -31,7 +31,7 @@
"timeBasedKeyType": "Baseado no horário (TOTP)",
"counterBasedKeyType": "Baseado em um contador (HOTP)",
"saveAction": "Salvar",
- "nextTotpTitle": "próximo",
+ "nextTotpTitle": "avançar",
"deleteCodeTitle": "Excluir código?",
"deleteCodeMessage": "Tem certeza de que deseja excluir este código? Esta ação é irreversível.",
"viewLogsAction": "Ver logs",
@@ -105,7 +105,7 @@
"authToChangeYourPassword": "Por favor, autentique-se para alterar sua senha",
"authToViewSecrets": "Por favor, autentique-se para ver as suas chaves secretas",
"authToInitiateSignIn": "Por favor, autentique-se para iniciar o login para um backup.",
- "ok": "Ok",
+ "ok": "OK",
"cancel": "Cancelar",
"yes": "Sim",
"no": "Não",
@@ -120,7 +120,7 @@
"delete": "Excluir",
"enterYourPasswordHint": "Insira sua senha",
"forgotPassword": "Esqueci a senha",
- "oops": "Oops",
+ "oops": "Opa",
"suggestFeatures": "Sugerir funcionalidades",
"faq": "Perguntas frequentes",
"faq_q_1": "Quão seguro é o Auth?",
@@ -239,8 +239,8 @@
"howItWorks": "Como funciona",
"ackPasswordLostWarning": "Eu entendo que se eu perder minha senha, posso perder meus dados, já que meus dados são criptografados de ponta a ponta.",
"loginTerms": "Ao clicar em login, eu concordo com os termos de serviço e a política de privacidade",
- "logInLabel": "Login",
- "logout": "Encerrar sessão",
+ "logInLabel": "Entrar",
+ "logout": "Sair",
"areYouSureYouWantToLogout": "Você tem certeza que deseja encerrar a sessão?",
"yesLogout": "Sim, encerrar sessão",
"exit": "Sair",
@@ -282,7 +282,7 @@
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "Por favor, autentique-se para exportar seus códigos",
- "importSuccessTitle": "Yay!",
+ "importSuccessTitle": "Oba!",
"importSuccessDesc": "Você importou {count} códigos!",
"@importSuccessDesc": {
"placeholders": {
@@ -401,7 +401,7 @@
"@iOSGoToSettingsDescription": {
"description": "Message advising the user to go to the settings and configure Biometrics for their device. It shows in a dialog on iOS side."
},
- "iOSOkButton": "Ok",
+ "iOSOkButton": "OK",
"@iOSOkButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on iOS side. Maximum 30 characters."
},
@@ -425,7 +425,9 @@
"endpointUpdatedMessage": "Endpoint atualizado com sucesso",
"customEndpoint": "Conectado a {endpoint}",
"pinText": "Fixar",
+ "unpinText": "Desafixar",
"pinnedCodeMessage": "{code} foi fixado",
+ "unpinnedCodeMessage": "{code} foi desafixado",
"tags": "Etiquetas",
"createNewTag": "Criar etiqueta",
"tag": "Etiqueta",
diff --git a/auth/lib/l10n/arb/app_ru.arb b/auth/lib/l10n/arb/app_ru.arb
index 42571a166b..9c5dceaaba 100644
--- a/auth/lib/l10n/arb/app_ru.arb
+++ b/auth/lib/l10n/arb/app_ru.arb
@@ -20,6 +20,8 @@
"codeIssuerHint": "Эмитент",
"codeSecretKeyHint": "Секретный ключ",
"codeAccountHint": "Аккаунт (you@domain.com)",
+ "codeTagHint": "Метка",
+ "accountKeyType": "Тип ключа",
"sessionExpired": "Сеанс истек",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
@@ -77,16 +79,19 @@
"data": "Данные",
"importCodes": "Импортировать коды",
"importTypePlainText": "Обычный текст",
+ "importTypeEnteEncrypted": "Ente Зашифрованный экспорт",
"passwordForDecryptingExport": "Пароль для расшифровки экспорта",
"passwordEmptyError": "Пароль не может быть пустым",
"importFromApp": "Импорт кодов из {appName}",
"importGoogleAuthGuide": "Экспортируйте учетные записи из Google Authenticator в QR-код, используя опцию «Перенести учетные записи». Затем с помощью другого устройства отсканируйте QR-код.\n\nСовет: Чтобы сфотографировать QR-код, можно воспользоваться веб-камерой ноутбука.",
"importSelectJsonFile": "Выбрать JSON-файл",
"importSelectAppExport": "Выбрать файл экспорта {appName}",
+ "importEnteEncGuide": "Выберите зашифрованный JSON файл, экспортированный из Ente",
"importRaivoGuide": "Используйте опцию «Export OTPs to Zip archive» в настройках Raivo.\n\nРаспакуйте zip-архив и импортируйте JSON-файл.",
"importBitwardenGuide": "Используйте опцию \"Экспортировать хранилище\" в Bitwarden Tools и импортируйте незашифрованный JSON файл.",
"importAegisGuide": "Используйте опцию «Экспортировать хранилище» в настройках Aegis.\n\nЕсли ваше хранилище зашифровано, то для его расшифровки потребуется ввести пароль хранилища.",
"import2FasGuide": "Используйте опцию \"Settings->Backup -Export\" в 2FAS.\n\nЕсли ваша резервная копия зашифрована, то для расшифровки резервной копии необходимо ввести пароль",
+ "importLastpassGuide": "Используйте опцию \"Перенести аккаунты\" в настройках Lastpass Authenticator и нажмите на \"Экспортировать учетные записи в файл\". Импортируйте загружённый JSON файл.",
"exportCodes": "Экспортировать коды",
"importLabel": "Импорт",
"importInstruction": "Пожалуйста, выберите файл, содержащий список ваших кодов в следующем формате",
@@ -99,6 +104,7 @@
"authToChangeYourEmail": "Пожалуйста, авторизуйтесь, чтобы изменить адрес электронной почты",
"authToChangeYourPassword": "Пожалуйста, авторизуйтесь, чтобы изменить пароль",
"authToViewSecrets": "Пожалуйста, авторизуйтесь для просмотра ваших секретов",
+ "authToInitiateSignIn": "Пожалуйста, авторизуйтесь, чтобы начать вход для резервного копирования.",
"ok": "Ок",
"cancel": "Отменить",
"yes": "Да",
@@ -110,18 +116,22 @@
"copied": "Скопировано",
"pleaseTryAgain": "Пожалуйста, попробуйте ещё раз",
"existingUser": "Существующий пользователь",
+ "newUser": "Впервые здесь, в Ente",
"delete": "Удалить",
"enterYourPasswordHint": "Введите пароль",
"forgotPassword": "Забыл пароль",
"oops": "Ой",
"suggestFeatures": "Предложить идеи",
"faq": "FAQ",
+ "faq_q_1": "Насколько безопасен Auth?",
+ "faq_a_1": "Все коды, которые вы резервируете с помощью Auth, хранятся в зашифрованном виде. Это означает, что только вы можете получить доступ к своим кодам. Наши приложения имеют открытый исходный код, а наша криптография прошла внешний аудит.",
"faq_q_2": "Могу ли я получить доступ к моим кодам на компьютере?",
"faq_a_2": "Вы можете получить доступ к своим кодам на сайте @ auth.ente.io.",
"faq_q_3": "Как я могу удалить коды?",
"faq_a_3": "Вы можете удалить код, проведя пальцем влево по этому элементу.",
"faq_q_4": "Как я могу поддержать этот проект?",
"faq_a_4": "Вы можете поддержать развитие этого проекта, подписавшись на наше приложение Photos @ ente.io.",
+ "faq_q_5": "Как мне включить FaceID в Auth",
"faq_a_5": "Вы можете включить блокировку FaceID в Настройки → Безопасность → Экран блокировки.",
"somethingWentWrongMessage": "Что-то пошло не так. Попробуйте еще раз",
"leaveFamily": "Покинуть семью",
@@ -135,6 +145,8 @@
"enterCodeHint": "Введите 6-значный код из\nвашего приложения-аутентификатора",
"lostDeviceTitle": "Потеряно устройство?",
"twoFactorAuthTitle": "Двухфакторная аутентификация",
+ "passkeyAuthTitle": "Проверка с помощью пароля",
+ "verifyPasskey": "Подтвердить пароль",
"recoverAccount": "Восстановить аккаунт",
"enterRecoveryKeyHint": "Введите свой ключ восстановления",
"recover": "Восстановить",
@@ -146,6 +158,7 @@
}
}
},
+ "invalidQRCode": "Неверный QR-код",
"noRecoveryKeyTitle": "Нет ключа восстановления?",
"enterEmailHint": "Введите свою почту",
"invalidEmailTitle": "Неверный адрес электронной почты",
@@ -190,6 +203,8 @@
"saveKey": "Сохранить ключ",
"save": "Сохранить",
"send": "Отправить",
+ "saveOrSendDescription": "Вы хотите сохранить это в хранилище (папку загрузок по умолчанию) или отправить в другие приложения?",
+ "saveOnlyDescription": "Вы хотите сохранить это в хранилище (по умолчанию папка загрузок)?",
"back": "Вернуться",
"createAccount": "Создать аккаунт",
"passwordStrength": "Мощность пароля: {passwordStrengthValue}",
@@ -337,6 +352,7 @@
"deleteCodeAuthMessage": "Аутентификация для удаления кода",
"showQRAuthMessage": "Аутентификация для отображения QR-кода",
"confirmAccountDeleteTitle": "Подтвердить удаление аккаунта",
+ "confirmAccountDeleteMessage": "Эта учетная запись связана с другими приложениями Ente, если вы ими пользуетесь.\n\nЗагруженные вами данные во всех приложениях ente будут запланированы к удалению, а ваша учетная запись будет удалена без возможности восстановления.",
"androidBiometricHint": "Подтвердите личность",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
@@ -397,12 +413,28 @@
"doNotSignOut": "Не выходить",
"hearUsWhereTitle": "Как вы узнали о Ente? (необязательно)",
"hearUsExplanation": "Будет полезно, если вы укажете, где нашли нас, так как мы не отслеживаем установки приложения",
+ "recoveryKeySaved": "Ключ восстановления сохранён в папке Загрузки!",
+ "waitingForBrowserRequest": "Ожидание запроса браузера...",
"waitingForVerification": "Ожидание подтверждения...",
+ "passkey": "Ключ",
"developerSettingsWarning": "Вы уверены, что хотите изменить настройки разработчика?",
"developerSettings": "Настройки разработчика",
"serverEndpoint": "Конечная точка сервера",
"invalidEndpoint": "Неверная конечная точка",
"invalidEndpointMessage": "Извините, введенная вами конечная точка неверна. Пожалуйста, введите корректную конечную точку и повторите попытку.",
"endpointUpdatedMessage": "Конечная точка успешно обновлена",
- "customEndpoint": "Подключено к {endpoint}"
+ "customEndpoint": "Подключено к {endpoint}",
+ "pinText": "Прикрепить",
+ "unpinText": "Открепить",
+ "pinnedCodeMessage": "{code} прикреплен",
+ "unpinnedCodeMessage": "{code} откреплен",
+ "tags": "Метки",
+ "createNewTag": "Создать новую метку",
+ "tag": "Метка",
+ "create": "Создать",
+ "editTag": "Изменить метку",
+ "deleteTagTitle": "Удалить метку?",
+ "deleteTagMessage": "Вы уверены, что хотите удалить эту метку? Это действие необратимо.",
+ "somethingWentWrongParsingCode": "Мы не смогли разобрать коды {x}.",
+ "updateNotAvailable": "Обновление недоступно"
}
\ No newline at end of file
diff --git a/auth/lib/l10n/arb/app_sv.arb b/auth/lib/l10n/arb/app_sv.arb
index 9761325ce1..41aa2f8a86 100644
--- a/auth/lib/l10n/arb/app_sv.arb
+++ b/auth/lib/l10n/arb/app_sv.arb
@@ -61,6 +61,7 @@
"welcomeBack": "Välkommen tillbaka!",
"changePassword": "Ändra lösenord",
"importCodes": "Importera koder",
+ "exportCodes": "Exportera koder",
"cancel": "Avbryt",
"yes": "Ja",
"no": "Nej",
@@ -76,6 +77,7 @@
"scan": "Skanna",
"twoFactorAuthTitle": "Tvåfaktorsautentisering",
"enterRecoveryKeyHint": "Ange din återställningsnyckel",
+ "invalidQRCode": "Ogiltig QR-kod",
"noRecoveryKeyTitle": "Ingen återställningsnyckel?",
"enterEmailHint": "Ange din e-postadress",
"invalidEmailTitle": "Ogiltig e-postadress",
@@ -143,6 +145,8 @@
},
"pendingSyncs": "Varning",
"activeSessions": "Aktiva sessioner",
+ "incorrectCode": "Felaktig kod",
+ "incorrectRecoveryKey": "Felaktig återställningsnyckel",
"enterPassword": "Ange lösenord",
"export": "Exportera",
"singIn": "Logga in",
diff --git a/auth/lib/l10n/arb/app_tr.arb b/auth/lib/l10n/arb/app_tr.arb
index 322af5f48c..2473067b74 100644
--- a/auth/lib/l10n/arb/app_tr.arb
+++ b/auth/lib/l10n/arb/app_tr.arb
@@ -20,6 +20,8 @@
"codeIssuerHint": "Yayınlayan",
"codeSecretKeyHint": "Gizli Anahtar",
"codeAccountHint": "Hesap (ornek@domain.com)",
+ "codeTagHint": "Etiket",
+ "accountKeyType": "Anahtar türü",
"sessionExpired": "Oturum süresi doldu",
"@sessionExpired": {
"description": "Title of the dialog when the users current session is invalid/expired"
@@ -46,7 +48,7 @@
},
"copyEmailAction": "E-postayı Kopyala",
"exportLogsAction": "Günlüğü dışa aktar",
- "reportABug": "Bir hata bildir",
+ "reportABug": "Hata bildirin",
"crashAndErrorReporting": "Çökme ve hata bildirimi",
"reportBug": "Hata bildir",
"emailUsMessage": "Lütfen bize {email} adresinden ulaşın",
@@ -77,12 +79,14 @@
"data": "Veri",
"importCodes": "Kodu içe aktar",
"importTypePlainText": "Salt metin",
+ "importTypeEnteEncrypted": "Ente Şifreli dışa aktarma",
"passwordForDecryptingExport": "Dışa aktarımın şifresini çözmek için parola",
"passwordEmptyError": "Şifre boş olamaz",
"importFromApp": "Kodları {appName} uygulamasından içe aktarın",
"importGoogleAuthGuide": "\"Hesapları Aktar\" seçeneğini kullanarak hesaplarınızı Google Authenticator'dan bir QR koduna aktarın. Ardından başka bir cihaz kullanarak QR kodunu tarayın.\n\nİpucu: QR kodunun fotoğrafını çekmek için dizüstü bilgisayarınızın kamerasını kullanabilirsiniz.",
"importSelectJsonFile": "JSON dosyasını seçin",
"importSelectAppExport": "{appName} dışarı aktarma dosyasını seçin",
+ "importEnteEncGuide": "Ente'den dışa aktarılan şifrelenmiş JSON dosyasını seçin",
"importRaivoGuide": "Raivo'nun ayarlarında \"OTP'leri Zip arşivine aktar\" seçeneğini kullanın.\n\nZip dosyasını çıkarın ve JSON dosyasını içe aktarın.",
"importBitwardenGuide": "Bitwarden Tools içindeki \"Kasayı dışa aktar\" seçeneğini kullanın ve şifrelenmemiş JSON dosyasını içe aktarın.",
"importAegisGuide": "Aegis'in Ayarlarında \"Kasayı dışa aktar\" seçeneğini kullanın.\n\nKasanız şifrelenmişse, kasanın şifresini çözmek için kasa parolasını girmeniz gerekecektir.",
@@ -112,18 +116,22 @@
"copied": "Kopyalandı",
"pleaseTryAgain": "Lütfen tekrar deneyin",
"existingUser": "Mevcut kullanıcı",
+ "newUser": "Ente'de Yeni",
"delete": "Sil",
"enterYourPasswordHint": "Parolanızı girin",
"forgotPassword": "Şifremi unuttum",
"oops": "Hay aksi",
"suggestFeatures": "Özellik önerin",
"faq": "SSS",
+ "faq_q_1": "Kimlik doğrulayıcı ne kadar güvenli?",
+ "faq_a_1": "Auth aracılığıyla yedeklediğiniz tüm kodlar uçtan uca şifrelenmiş olarak saklanır. Böylece kodlarınıza yalnızca siz erişebilirsiniz. Uygulamalarımız açık kaynaklıdır ve şifrelememiz dış denetimden geçmiştir.",
"faq_q_2": "Kodlarıma masaüstünden erişebilir miyim?",
"faq_a_2": "Kodlarınıza internet üzerinden @ auth.ente.io adresinden erişebilirsiniz.",
"faq_q_3": "Kodları nasıl silebilirim?",
"faq_a_3": "Bir kodu, o öğenin üzerinde sola kaydırarak silebilirsiniz.",
"faq_q_4": "Bu projeye nasıl destek olabilirim?",
"faq_a_4": "Fotoğraflar uygulamamıza @ ente.io abone olarak bu projenin geliştirilmesine destek olabilirsiniz.",
+ "faq_q_5": "Auth'ta FaceID kilidini nasıl etkinleştirebilirim",
"faq_a_5": "FaceID kilidini Ayarlar → Güvenlik → Kilit Ekranı altında etkinleştirebilirsiniz.",
"somethingWentWrongMessage": "Bir şeyler ters gitti, lütfen tekrar deneyin",
"leaveFamily": "Aile planından ayrıl",
@@ -137,6 +145,8 @@
"enterCodeHint": "Kimlik doğrulayıcı uygulamanızdaki 6 haneli doğrulama kodunu girin",
"lostDeviceTitle": "Cihazınızı mı kaybettiniz?",
"twoFactorAuthTitle": "İki faktörlü kimlik doğrulama",
+ "passkeyAuthTitle": "Geçiş anahtarı doğrulaması",
+ "verifyPasskey": "Geçiş anahtarını doğrula",
"recoverAccount": "Hesap kurtarma",
"enterRecoveryKeyHint": "Kurtarma anahtarınızı girin",
"recover": "Kurtar",
@@ -148,6 +158,7 @@
}
}
},
+ "invalidQRCode": "Geçersiz QR kodu",
"noRecoveryKeyTitle": "Kurtarma anahtarınız yok mu?",
"enterEmailHint": "E-posta adresinizi girin",
"invalidEmailTitle": "Geçersiz e-posta adresi",
@@ -190,6 +201,10 @@
"recoveryKeySaveDescription": "Biz bu anahtarı saklamıyoruz, lütfen. bu 24 kelimelik anahtarı güvenli bir yerde saklayın.",
"doThisLater": "Bunu daha sonra yap",
"saveKey": "Anahtarı kaydet",
+ "save": "Kaydet",
+ "send": "Gönder",
+ "saveOrSendDescription": "Bunu belleğinize mi kaydedeceksiniz (İndirilenler klasörü varsayılandır) yoksa diğer uygulamalara mı göndereceksiniz?",
+ "saveOnlyDescription": "Bunu belleğinize kaydetmek ister misiniz? (İndirilenler klasörü varsayılandır)",
"back": "Geri",
"createAccount": "Hesap oluştur",
"passwordStrength": "Şifre gücü: {passwordStrengthValue}",
@@ -337,6 +352,7 @@
"deleteCodeAuthMessage": "Kodu silmek için doğrulama yapın",
"showQRAuthMessage": "QR kodunu göstermek için doğrulama yapın",
"confirmAccountDeleteTitle": "Hesap silme işlemini onayla",
+ "confirmAccountDeleteMessage": "Kullandığınız Ente uygulamaları varsa bu hesap diğer Ente uygulamalarıyla bağlantılıdır.\n\nTüm Ente uygulamalarına yüklediğiniz veriler ve hesabınız kalıcı olarak silinecektir.",
"androidBiometricHint": "Kimliği doğrula",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
@@ -396,5 +412,29 @@
"signOutOtherDevices": "Diğer cihazlardan çıkış yap",
"doNotSignOut": "Çıkış yapma",
"hearUsWhereTitle": "Ente'yi nereden duydunuz? (opsiyonel)",
- "hearUsExplanation": "Biz uygulama kurulumlarını takip etmiyoruz. Bizi nereden duyduğunuzdan bahsetmeniz bize çok yardımcı olacak!"
+ "hearUsExplanation": "Biz uygulama kurulumlarını takip etmiyoruz. Bizi nereden duyduğunuzdan bahsetmeniz bize çok yardımcı olacak!",
+ "recoveryKeySaved": "Kurtarma anahtarı İndirilenler klasörüne kaydedildi!",
+ "waitingForBrowserRequest": "Tarayıcı isteği bekleniyor...",
+ "waitingForVerification": "Doğrulama bekleniyor...",
+ "passkey": "Geçiş anahtarı",
+ "developerSettingsWarning": "Geliştirici ayarlarını değiştirmekten emin misiniz?",
+ "developerSettings": "Geliştirici ayarları",
+ "serverEndpoint": "Sunucu uç noktası",
+ "invalidEndpoint": "Geçersiz uç nokta",
+ "invalidEndpointMessage": "Üzgünüz, girdiğiniz uç nokta geçersiz. Lütfen geçerli bir uç nokta girin ve tekrar deneyin.",
+ "endpointUpdatedMessage": "Uç nokta başarıyla güncellendi",
+ "customEndpoint": "Bağlandı: {endpoint}",
+ "pinText": "Sabitle",
+ "unpinText": "Sabitlemeyi kaldır",
+ "pinnedCodeMessage": "{code} sabitlendi",
+ "unpinnedCodeMessage": "{code} sabitlemesi kaldırıldı",
+ "tags": "Etiketler",
+ "createNewTag": "Yeni etiket oluştur",
+ "tag": "Etiket",
+ "create": "Oluştur",
+ "editTag": "Etiketi düzenle",
+ "deleteTagTitle": "Etiket silinsin mi?",
+ "deleteTagMessage": "Bu etiketi silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.",
+ "somethingWentWrongParsingCode": "{x} kodu ayrıştıramadık.",
+ "updateNotAvailable": "Güncelleme mevcut değil"
}
\ No newline at end of file
diff --git a/desktop/CHANGELOG.md b/desktop/CHANGELOG.md
index 5fbbefaaa8..094145d261 100644
--- a/desktop/CHANGELOG.md
+++ b/desktop/CHANGELOG.md
@@ -1,6 +1,6 @@
# CHANGELOG
-## v1.7.0 (Unreleased)
+## v1.7.0
v1.7 is a major rewrite to improve the security of our app. In particular, the
UI and the native parts of the app now run isolated from each other and
diff --git a/desktop/docs/release.md b/desktop/docs/release.md
index 1cda1c11b1..53d0355c3e 100644
--- a/desktop/docs/release.md
+++ b/desktop/docs/release.md
@@ -39,8 +39,8 @@ artifacts attached to the same draft.
## Workflow - Release
-1. Update source repo to set version `1.x.x` in `package.json` and finialize
- the CHANGELOG.
+1. Update source repo to set version `1.x.x` in `package.json` and finalize the
+ CHANGELOG.
2. Push code to the `desktop/rc` branch in the source repo.
@@ -53,7 +53,7 @@ artifacts attached to the same draft.
4. If the build is successful, tag `desktop/rc` in the source repo.
```sh
- # Assuming we're on desktop/rc that just got build
+ # Assuming we're on desktop/rc that just got built
git tag photosd-v1.x.x
git push origin photosd-v1.x.x
diff --git a/desktop/package.json b/desktop/package.json
index 085d966817..4e493e30c8 100644
--- a/desktop/package.json
+++ b/desktop/package.json
@@ -1,6 +1,6 @@
{
"name": "ente",
- "version": "1.7.0-rc",
+ "version": "1.7.1-rc",
"private": true,
"description": "Desktop client for Ente Photos",
"repository": "github:ente-io/photos-desktop",
diff --git a/desktop/src/main.ts b/desktop/src/main.ts
index 463774dc2b..a5abc26271 100644
--- a/desktop/src/main.ts
+++ b/desktop/src/main.ts
@@ -322,6 +322,13 @@ const setupTrayItem = (mainWindow: BrowserWindow) => {
* once most people have upgraded to newer versions.
*/
const deleteLegacyDiskCacheDirIfExists = async () => {
+ const removeIfExists = async (dirPath: string) => {
+ if (existsSync(dirPath)) {
+ log.info(`Removing legacy disk cache from ${dirPath}`);
+ await fs.rm(dirPath, { recursive: true });
+ }
+ };
+
// [Note: Getting the cache path]
//
// The existing code was passing "cache" as a parameter to getPath.
@@ -338,9 +345,18 @@ const deleteLegacyDiskCacheDirIfExists = async () => {
//
// @ts-expect-error "cache" works but is not part of the public API.
const cacheDir = path.join(app.getPath("cache"), "ente");
- if (existsSync(cacheDir)) {
- log.info(`Removing legacy disk cache from ${cacheDir}`);
- await fs.rm(cacheDir, { recursive: true });
+ if (process.platform == "win32") {
+ // On Windows the cache dir is the same as the app data (!). So deleting
+ // the ente subfolder of the cache dir is equivalent to deleting the
+ // user data dir.
+ //
+ // Obviously, that's not good. So instead of Windows we explicitly
+ // delete the named cache directories.
+ await removeIfExists(path.join(cacheDir, "thumbs"));
+ await removeIfExists(path.join(cacheDir, "files"));
+ await removeIfExists(path.join(cacheDir, "face-crops"));
+ } else {
+ await removeIfExists(cacheDir);
}
};
diff --git a/mobile/fastlane/metadata/playstore/fr/full_description.txt b/mobile/fastlane/metadata/playstore/fr/full_description.txt
index 9a7f5975eb..07ff21f85f 100644
--- a/mobile/fastlane/metadata/playstore/fr/full_description.txt
+++ b/mobile/fastlane/metadata/playstore/fr/full_description.txt
@@ -1,30 +1,30 @@
-Entre est une application simple qui sauvegarde et organisé vos photos et vidéos.
+Entre est une application simple qui sauvegarde et organise vos photos et vidéos.
-Si vous recherchez une alternative respectueuse de la vie privée pour préserver vos souvenirs, vous êtes au bon endroit. Avec Ente, ils sont stockés chiffrés de bout-en-bout (e2ee). Cela signifie que vous-seul pouvez les voir.
+Si vous recherchez une alternative respectueuse de votre vie privée pour préserver vos souvenirs, vous êtes au bon endroit. Avec Ente, ils sont stockés chiffrés de bout-en-bout (e2ee). Cela signifie que vous-seul pouvez les voir.
-Nous avons des applications sur Android, iOS, Web et Ordinateur, et vos photos seront synchronisées de manière transparente entre tous vos appareils chiffrée de bout en bout (e2ee).
+Nous avons des applications pour Android, iOS, Web et Ordinateur, et vos photos seront synchronisées de manière transparente entre tous vos appareils avec une méthode de chiffrement de bout en bout (e2ee).
Ente vous permet également de partager vos albums avec vos proches. Vous pouvez soit les partager directement avec d'autres utilisateurs Ente, chiffrés de bout en bout ou avec des liens visibles publiquement.
-Vos données chiffrées sont stockées à travers de multiples endroits, dont un abri antiatomique à Paris. Nous prenons la postérité au sérieux et facilitons la conservation de vos souvenirs.
+Vos données chiffrées sont stockées dans de multiples endroits, dont un abri antiatomique à Paris. Nous prenons la postérité au sérieux et facilitons la conservation de vos souvenirs.
Nous sommes là pour faire l'application photo la plus sûre de tous les temps, rejoignez-nous !
✨ CARACTÉRISTIQUES
-- Sauvegardes de qualité originales, car chaque pixel est important
+- Sauvegardes en qualité originale, car chaque pixel est important
- Abonnement familiaux, pour que vous puissiez partager l'espace de stockage avec votre famille
- Dossiers partagés, si vous voulez que votre partenaire profite de vos clichés
-- Liens ves les albums qui peuvent être protégés par un mot de passe et être configurés pour expirer
+- Liens vers les albums, qui peuvent être protégés par un mot de passe et être configurés pour expirer
- Possibilité de libérer de l'espace en supprimant les fichiers qui ont été sauvegardés en toute sécurité
- Éditeur d'images, pour ajouter des touches de finition
-- Favoriser, cacher et revivre vos souvenirs, car ils sont précieux
+- Favoris, cacher et revivre vos souvenirs, car ils sont précieux
- Importation en un clic depuis Google, Apple, votre disque dur et plus encore
- Thème sombre, parce que vos photos y sont jolies
- 2FA, 3FA, authentification biométrique
- et beaucoup de choses encore !
💲 PRIX
-Nous ne proposons pas d'abonnement gratuits pour toujours, car il est important pour nous de rester durables et de résister à l'épreuve du temps. Au lieu de cela, nous vous proposons des abonnements abordables que vous pouvez partager librement avec votre famille. Vous pouvez trouver plus d'informations sur ente.io.
+Nous ne proposons pas d'abonnements gratuits à vie, car il est important pour nous de rester pérenne et de résister à l'épreuve du temps. Au lieu de cela, nous vous proposons des abonnements abordables que vous pouvez partager librement avec votre famille. Vous pouvez trouver plus d'informations sur ente.io.
🙋 ASSISTANCE
Nous sommes fiers d'offrir un support humain. Si vous êtes un abonné, vous pouvez contacter team@ente.io et vous recevrez une réponse de notre équipe dans les 24 heures.
\ No newline at end of file
diff --git a/mobile/lib/ui/viewer/people/cluster_page.dart b/mobile/lib/ui/viewer/people/cluster_page.dart
index f6b720f023..ef069887f9 100644
--- a/mobile/lib/ui/viewer/people/cluster_page.dart
+++ b/mobile/lib/ui/viewer/people/cluster_page.dart
@@ -161,43 +161,45 @@ class _ClusterPageState extends State {
),
),
showNamingBanner
- ? Dismissible(
- key: const Key("namingBanner"),
- direction: DismissDirection.horizontal,
- onDismissed: (direction) {
- setState(() {
- userDismissedNamingBanner = true;
- });
- },
- child: PeopleBanner(
- type: PeopleBannerType.addName,
- faceWidget: PersonFaceWidget(
- files.first,
- clusterID: widget.clusterID,
- ),
- actionIcon: Icons.add_outlined,
- text: S.of(context).addAName,
- subText: S.of(context).findPeopleByName,
- onTap: () async {
- if (widget.personID == null) {
- final result = await showAssignPersonAction(
- context,
- clusterID: widget.clusterID,
- );
- if (result != null &&
- result is (PersonEntity, EnteFile)) {
- Navigator.pop(context);
- // ignore: unawaited_futures
- routeToPage(context, PeoplePage(person: result.$1));
- } else if (result != null && result is PersonEntity) {
- Navigator.pop(context);
- // ignore: unawaited_futures
- routeToPage(context, PeoplePage(person: result));
- }
- } else {
- showShortToast(context, "No personID or clusterID");
- }
+ ? SafeArea(
+ child: Dismissible(
+ key: const Key("namingBanner"),
+ direction: DismissDirection.horizontal,
+ onDismissed: (direction) {
+ setState(() {
+ userDismissedNamingBanner = true;
+ });
},
+ child: PeopleBanner(
+ type: PeopleBannerType.addName,
+ faceWidget: PersonFaceWidget(
+ files.first,
+ clusterID: widget.clusterID,
+ ),
+ actionIcon: Icons.add_outlined,
+ text: S.of(context).addAName,
+ subText: S.of(context).findPeopleByName,
+ onTap: () async {
+ if (widget.personID == null) {
+ final result = await showAssignPersonAction(
+ context,
+ clusterID: widget.clusterID,
+ );
+ if (result != null &&
+ result is (PersonEntity, EnteFile)) {
+ Navigator.pop(context);
+ // ignore: unawaited_futures
+ routeToPage(context, PeoplePage(person: result.$1));
+ } else if (result != null && result is PersonEntity) {
+ Navigator.pop(context);
+ // ignore: unawaited_futures
+ routeToPage(context, PeoplePage(person: result));
+ }
+ } else {
+ showShortToast(context, "No personID or clusterID");
+ }
+ },
+ ),
),
)
: const SizedBox.shrink(),
diff --git a/web/packages/next/locales/pt-BR/translation.json b/web/packages/next/locales/pt-BR/translation.json
index ac353e9f9f..006aad0183 100644
--- a/web/packages/next/locales/pt-BR/translation.json
+++ b/web/packages/next/locales/pt-BR/translation.json
@@ -315,7 +315,7 @@
"TRASH": "Lixeira",
"MOVE_TO_TRASH": "Mover para a lixeira",
"TRASH_FILES_MESSAGE": "Os itens selecionados serão excluídos de todos os álbuns e movidos para a lixeira.",
- "TRASH_FILE_MESSAGE": "Os itens selecionados serão excluídos de todos os álbuns e movidos para o lixo.",
+ "TRASH_FILE_MESSAGE": "O item será removido de todos os álbuns e movido para a lixeira.",
"DELETE_PERMANENTLY": "Excluir permanentemente",
"RESTORE": "Restaurar",
"RESTORE_TO_COLLECTION": "Restaurar para álbum",
diff --git a/web/packages/next/locales/sv-SE/translation.json b/web/packages/next/locales/sv-SE/translation.json
index 3c6adfb1ba..758d0ee314 100644
--- a/web/packages/next/locales/sv-SE/translation.json
+++ b/web/packages/next/locales/sv-SE/translation.json
@@ -1,65 +1,65 @@
{
- "HERO_SLIDE_1_TITLE": "",
- "HERO_SLIDE_1": "",
+ "HERO_SLIDE_1_TITLE": "