diff --git a/mobile/apps/auth/lib/l10n/arb/app_cs.arb b/mobile/apps/auth/lib/l10n/arb/app_cs.arb
index 75041c5f07..db58e3aa90 100644
--- a/mobile/apps/auth/lib/l10n/arb/app_cs.arb
+++ b/mobile/apps/auth/lib/l10n/arb/app_cs.arb
@@ -111,6 +111,7 @@
"importAegisGuide": "Použijte možnost \"Export the vault\" v nastavení aplikace Aegis.",
"import2FasGuide": "Použijte možnost \"Settings->Backup -Export\" v 2FA.\n\nPokud je Vaše záloha šifrovaná, budete muset zadat heslo pro její odemčení",
"importLastpassGuide": "V nastavení aplikace Lastpass Authenticator vyberte možnost \"Transfer accounts\" a poté \"Export accounts to file\". Vygenerovaný soubor JSON následně nahrajte sem.",
+ "importProtonAuthGuide": "K exportu kódů použijte možnost „Exportovat“ v nastavení aplikace Proton Authenticator.",
"exportCodes": "Exportovat kódy",
"importLabel": "Importovat",
"importInstruction": "Vyberte, prosím, soubor obsahující seznam Vašich kódů v následujícím formátu",
@@ -124,6 +125,7 @@
"authToChangeYourEmail": "Pro změnu svého e-mailu se, prosím, ověřte",
"authToChangeYourPassword": "Pro změnu svého hesla se, prosím, ověřte",
"authToViewSecrets": "Pro zobrazení svých tajných údajů se musíte ověřit",
+ "authToInitiateSignIn": "Proveďte ověření a přihlaste se k zálohování.",
"ok": "Ok",
"cancel": "Zrušit",
"yes": "Ano",
@@ -171,6 +173,7 @@
"invalidQRCode": "Neplatný QR kód",
"noRecoveryKeyTitle": "Nemáte obnovovací klíč?",
"enterEmailHint": "Zadejte svou e-mailovou adresu",
+ "enterNewEmailHint": "Zadejte svou novou e-mailovou adresu",
"invalidEmailTitle": "Neplatná e-mailová adresa",
"invalidEmailMessage": "Prosím, zadejte platnou e-mailovou adresu.",
"deleteAccount": "Odstranit účet",
@@ -509,6 +512,19 @@
"supportEnte": "Podpořte ente",
"giveUsAStarOnGithub": "Dejte nám hvězdu na Githubu",
"free5GB": "5GB zdarma na ente Fotky",
+ "loginWithAuthAccount": "Přihlaste se pomocí svého účtu Auth",
"freeStorageOffer": "10% sleva na ente fotky",
- "freeStorageOfferDescription": "Použijte kód \"AUTH\" pro získání 10% slevy na první rok"
+ "freeStorageOfferDescription": "Použijte kód \"AUTH\" pro získání 10% slevy na první rok",
+ "advanced": "Pokročilé",
+ "algorithm": "Algoritmus",
+ "type": "Typ",
+ "period": "Období",
+ "digits": "Digitální",
+ "importFromGallery": "Importovat z galerie",
+ "errorCouldNotReadImage": "Nelze přečíst vybraný obrazový soubor.",
+ "errorInvalidQRCode": "Neplatný QR kód",
+ "errorInvalidQRCodeBody": "Naskenovaný QR kód není platným účtem 2FA.",
+ "errorNoQRCode": "Nenalezen žádný QR kód",
+ "errorGenericTitle": "Došlo k chybě",
+ "errorGenericBody": "Při importu došlo k neočekávané chybě."
}
\ No newline at end of file
diff --git a/mobile/apps/auth/lib/l10n/arb/app_de.arb b/mobile/apps/auth/lib/l10n/arb/app_de.arb
index 5e6ff47f98..d66b985bf5 100644
--- a/mobile/apps/auth/lib/l10n/arb/app_de.arb
+++ b/mobile/apps/auth/lib/l10n/arb/app_de.arb
@@ -111,6 +111,7 @@
"importAegisGuide": "Verwenden Sie die Option \"Tresor exportieren\" in den Einstellungen von Aegis.\n\nFalls Ihr Tresor verschlüsselt ist, müssen Sie das Passwort für den Tresor eingeben, um ihn zu entschlüsseln.",
"import2FasGuide": "Verwenden Sie unter \"Einstellungen → Backup\" die Option \"Exportieren\" in 2FAS.\n\nFalls Ihr Backup verschlüsselt ist, müssen Sie das Passwort eingeben, um das Backup zu entschlüsseln.",
"importLastpassGuide": "Verwenden Sie die Option \"Konten übertragen → Konten in Datei exportieren\" in den Lastpass Authenticator Einstellungen. \nImportieren Sie anschließend die heruntergeladene JSON-Datei.",
+ "importProtonAuthGuide": "Verwenden Sie die Option \"Exportieren\" in den Proton Authenticator Settings um Ihre Codes zu exportieren.",
"exportCodes": "Codes exportieren",
"importLabel": "Importieren",
"importInstruction": "Bitte wählen Sie eine Datei die Codes in folgendem Format beinhaltet",
@@ -519,5 +520,12 @@
"algorithm": "Algorithmus",
"type": "Typ",
"period": "Periode",
- "digits": "Ziffern"
+ "digits": "Ziffern",
+ "importFromGallery": "Aus Galerie importieren",
+ "errorCouldNotReadImage": "Die ausgewählte Bild-Datei konnte nicht verarbeitet werden.",
+ "errorInvalidQRCode": "Ungültiger QR-Code",
+ "errorInvalidQRCodeBody": "Der gescannte QR-Code ist kein gültiges 2FA-Konto.",
+ "errorNoQRCode": "Kein QR-Code gefunden",
+ "errorGenericTitle": "Ein Fehler ist aufgetreten",
+ "errorGenericBody": "Beim Importieren ist ein unerwarteter Fehler aufgetreten."
}
\ No newline at end of file
diff --git a/mobile/apps/auth/lib/l10n/arb/app_fr.arb b/mobile/apps/auth/lib/l10n/arb/app_fr.arb
index d402d56f9e..f975385a13 100644
--- a/mobile/apps/auth/lib/l10n/arb/app_fr.arb
+++ b/mobile/apps/auth/lib/l10n/arb/app_fr.arb
@@ -111,6 +111,7 @@
"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.",
"import2FasGuide": "Utilisez l'option \"Paramètres->Sauvegarde -Export\" dans 2FAS.\n\nSi votre sauvegarde est chiffrée, vous devrez entrer le mot de passe pour déchiffrer la sauvegarde",
"importLastpassGuide": "Utilisez l'option \"Transférer des comptes\" dans les paramètres de l'authentificateur Lastpass et appuyez sur \"Exporter des comptes vers un fichier\". Importez le JSON téléchargé.",
+ "importProtonAuthGuide": "Utilisez l'option \"Export\" dans les paramètres de Proton Authenticator pour exporter vos codes.",
"exportCodes": "Exporter les codes",
"importLabel": "Importer",
"importInstruction": "Veuillez sélectionner un fichier qui contient une liste de vos codes dans le format suivant",
@@ -519,5 +520,12 @@
"algorithm": "Algorithme",
"type": "Type",
"period": "Période",
- "digits": "Chiffres"
+ "digits": "Chiffres",
+ "importFromGallery": "Importer depuis la galerie",
+ "errorCouldNotReadImage": "Impossible de lire le fichier sélectionné.",
+ "errorInvalidQRCode": "QR Code invalide",
+ "errorInvalidQRCodeBody": "Le code QR scanné n'est pas un compte 2FA valide.",
+ "errorNoQRCode": "Aucun code QR trouvé",
+ "errorGenericTitle": "Une erreur s'est produite",
+ "errorGenericBody": "Une erreur inattendue est survenue lors de l'importation."
}
\ No newline at end of file
diff --git a/mobile/apps/auth/lib/l10n/arb/app_lt.arb b/mobile/apps/auth/lib/l10n/arb/app_lt.arb
index 3b3c0523e4..f5bd83368e 100644
--- a/mobile/apps/auth/lib/l10n/arb/app_lt.arb
+++ b/mobile/apps/auth/lib/l10n/arb/app_lt.arb
@@ -111,6 +111,7 @@
"importAegisGuide": "Naudokite „Aegis“ nustatymuose esančią parinktį Eksportuoti slėptuvę.\n\nJei jūsų saugykla užšifruota, turėsite įvesti saugyklos slaptažodį, kad iššifruotumėte saugyklą.",
"import2FasGuide": "Naudokite programoje 2FAS esančią parinktį „Settings->2FAS Backup->Export to file“.\n\nJei atsarginė kopija užšifruota, turėsite įvesti slaptažodį, kad iššifruotumėte atsarginę kopiją.",
"importLastpassGuide": "Naudokite „Lastpass Authenticator“ nustatymuose esančią parinktį „Transfer accounts“ (perkelti paskyras) ir paspauskite „Export accounts to file“ (eksportuoti paskyras į failą). Importuokite atsisiųstą JSON failą.",
+ "importProtonAuthGuide": "Naudokite „Proton Authenticator“ nustatymuose esančią parinktį „Export“ (eksportuoti), kad eksportuotumėte savo kodus.",
"exportCodes": "Eksportuoti kodus",
"importLabel": "Importuoti",
"importInstruction": "Pasirinkite failą, kuriame yra tokio formato jūsų kodų sąrašas",
@@ -519,5 +520,12 @@
"algorithm": "Algoritmas",
"type": "Tipas",
"period": "Laikotarpis",
- "digits": "Skaitmenys"
+ "digits": "Skaitmenys",
+ "importFromGallery": "Importuoti iš galerijos",
+ "errorCouldNotReadImage": "Nepavyko perskaityti pasirinkto vaizdo failo.",
+ "errorInvalidQRCode": "Netinkamas QR kodas",
+ "errorInvalidQRCodeBody": "Nuskenuotas QR kodas nėra tinkama 2FA paskyra.",
+ "errorNoQRCode": "QR kodas nerastas.",
+ "errorGenericTitle": "Įvyko klaida",
+ "errorGenericBody": "Importuojant įvyko netikėta klaida."
}
\ No newline at end of file
diff --git a/mobile/apps/auth/lib/l10n/arb/app_pl.arb b/mobile/apps/auth/lib/l10n/arb/app_pl.arb
index a4177c8133..ed6eda526c 100644
--- a/mobile/apps/auth/lib/l10n/arb/app_pl.arb
+++ b/mobile/apps/auth/lib/l10n/arb/app_pl.arb
@@ -111,6 +111,7 @@
"importAegisGuide": "Użyj opcji \"Eksportuj sejf\" w ustawieniach Aegis.\n\nJeśli twój sejf jest zaszyfrowany, musisz wprowadzić hasło sejfu, aby odszyfrować sejf.",
"import2FasGuide": "Użyj opcji \"Ustawienia->Kopia Zapasowa-Eksport\" w 2FAS.\n\nJeśli twoja kopia zapasowa jest zaszyfrowana, musisz wprowadzić hasło, aby odszyfrować kopię zapasową",
"importLastpassGuide": "Użyj opcji \"Przenieś konta\" w Ustawieniach Lastpass Authenticator i naciśnij \"Eksportuj konta do pliku\". Zaimportuj pobrany plik JSON.",
+ "importProtonAuthGuide": "Użyj opcji „Eksportuj” w ustawieniach Proton Authenticator, aby wyeksportować kody.",
"exportCodes": "Eksportuj kody",
"importLabel": "Importuj",
"importInstruction": "Wybierz plik, który zawiera listę twoich kodów w następującym formacie",
@@ -519,5 +520,12 @@
"algorithm": "Algorytm",
"type": "Rodzaj",
"period": "Okres",
- "digits": "Cyfry"
+ "digits": "Cyfry",
+ "importFromGallery": "Importuj z galerii",
+ "errorCouldNotReadImage": "Nie można odczytać wybranego pliku obrazu.",
+ "errorInvalidQRCode": "Nieprawidłowy kod QR",
+ "errorInvalidQRCodeBody": "Zeskanowany kod QR nie wskazuje na prawidłowe konto 2FA.",
+ "errorNoQRCode": "Nie znaleziono kodu QR",
+ "errorGenericTitle": "Wystąpił błąd",
+ "errorGenericBody": "Podczas importowania wystąpił nieoczekiwany błąd."
}
\ No newline at end of file
diff --git a/mobile/apps/auth/lib/l10n/arb/app_sv.arb b/mobile/apps/auth/lib/l10n/arb/app_sv.arb
index 890e97ce0b..a34f1c3922 100644
--- a/mobile/apps/auth/lib/l10n/arb/app_sv.arb
+++ b/mobile/apps/auth/lib/l10n/arb/app_sv.arb
@@ -18,7 +18,7 @@
"incorrectDetails": "Felaktiga uppgifter",
"pleaseVerifyDetails": "Kontrollera dina detaljer och försök igen",
"codeIssuerHint": "Utfärdare",
- "codeSecretKeyHint": "Secret Key",
+ "codeSecretKeyHint": "Hemlig nyckel",
"secret": "Säkerhetsnyckel",
"all": "Alla",
"notes": "Anteckningar",
@@ -33,7 +33,7 @@
}
}
},
- "codeAccountHint": "Konto (du@domän.com)",
+ "codeAccountHint": "Konto (du@domain.com)",
"codeTagHint": "Tagg",
"accountKeyType": "Typ av nyckel",
"sessionExpired": "Sessionen har gått ut",
@@ -68,7 +68,7 @@
"reportABug": "Rapportera en bugg",
"crashAndErrorReporting": "Krasch och felrapportering",
"reportBug": "Rapportera bugg",
- "emailUsMessage": "Skicka e-mail till {email}",
+ "emailUsMessage": "Skicka e-post till {email}",
"@emailUsMessage": {
"placeholders": {
"email": {
@@ -79,7 +79,7 @@
"contactSupport": "Kontakta support",
"rateUsOnStore": "Betygsätt på {storeName}",
"blog": "Blogg",
- "merchandise": "Merchandise",
+ "merchandise": "Produkter",
"verifyPassword": "Bekräfta lösenord",
"pleaseWait": "Vänligen vänta...",
"generatingEncryptionKeysTitle": "Skapar krypteringsnycklar...",
@@ -104,13 +104,14 @@
"importFromApp": "Importera koder från {appName}",
"importGoogleAuthGuide": "Exportera dina konton från Google Authenticator till en QR-kod med alternativet \"Överföra konton\". Använd sedan en annan enhet och skanna QR-koden.\n\nTips: Du kan använda din bärbara dators webbkamera för att ta en bild av QR-koden.",
"importSelectJsonFile": "Välj JSON-fil",
- "importSelectAppExport": "Välj {appName} exportfil",
+ "importSelectAppExport": "Välj {appName} exporteringsfil",
"importEnteEncGuide": "Välj den krypterade JSON-filen som exporteras från Ente",
"importRaivoGuide": "Använd alternativet \"Exportera OTPs till zip-arkiv\" i Raivos inställningar.\n\nExtrahera zip-filen och importera JSON-filen.",
"importBitwardenGuide": "Använd alternativet \"Exportera valv\" inom Bitwarden Tools och importera den okrypterade JSON-filen.",
"importAegisGuide": "Använd alternativet \"Exportera valvet\" i Aegis inställningar.\n\nOm ditt valv är krypterat måste du ange valvlösenordet för att dekryptera valvet.",
"import2FasGuide": "Använd alternativet \"Inställningar->Säkerhetskopiera -Exportera\" i 2FAS.\n\nOm din säkerhetskopia är krypterad måste du ange lösenordet för att dekryptera säkerhetskopian.",
"importLastpassGuide": "Använd alternativet \"Överför konton\" i LastPass Authenticators inställningar och tryck på \"Exportera konton till fil\". Importera JSON-filen som laddas ner.",
+ "importProtonAuthGuide": "Använd alternativet \"Exportera\" i Proton Authenticator-inställningarna för att exportera koder.",
"exportCodes": "Exportera koder",
"importLabel": "Importera",
"importInstruction": "Vänligen välj en fil som innehåller en lista över dina koder i följande format",
@@ -119,11 +120,11 @@
"emailVerificationToggle": "E-postverifiering",
"emailVerificationEnableWarning": "För att undvika att bli låst från ditt konto, se till att spara en kopia av din e-post 2FA utanför Ente Auth innan du aktiverar e-postverifiering.",
"authToChangeEmailVerificationSetting": "Autentisera för att ändra din e-postadress",
- "authenticateGeneric": "Var god autentisera",
+ "authenticateGeneric": "Vänligen autentisera",
"authToViewYourRecoveryKey": "Autentisera för att visa din återställningsnyckel",
"authToChangeYourEmail": "Autentisera för att ändra din e-postadress",
"authToChangeYourPassword": "Autentisera för att ändra ditt lösenord",
- "authToViewSecrets": "Autentisera för att visa din återställningsnyckel",
+ "authToViewSecrets": "Vänligen autentisera för att visa din återställningsnyckel",
"authToInitiateSignIn": "Vänligen autentisera för att initiera inloggning för säkerhetskopiering.",
"ok": "OK",
"cancel": "Avbryt",
@@ -147,7 +148,7 @@
"leaveFamily": "Lämna familjen",
"leaveFamilyMessage": "Är du säker på att du vill lämna familjeplanen?",
"inFamilyPlanMessage": "Du är på en familjeplan!",
- "hintForMobile": "Håll i på en kod för att redigera eller ta bort.",
+ "hintForMobile": "Tryck länge på en kod för att redigera eller ta bort.",
"hintForDesktop": "Högerklicka på en kod för att redigera eller ta bort.",
"scan": "Skanna",
"scanACode": "Skanna kod",
@@ -191,7 +192,7 @@
"oopsSomethingWentWrong": "Hoppsan! Något gick fel.",
"selectLanguage": "Välj språk",
"language": "Språk",
- "social": "Social",
+ "social": "Socialt",
"security": "Säkerhet",
"lockscreen": "Låsskärm",
"authToChangeLockscreenSetting": "Vänligen autentisera för att ändra låsskärms inställningar",
@@ -200,7 +201,7 @@
"authToViewYourActiveSessions": "Autentisera för att visa dina aktiva sessioner",
"searchHint": "Sök...",
"search": "Sök",
- "sorryUnableToGenCode": "Tyvärr, det gick inte att generera en kod för {issuerName}",
+ "sorryUnableToGenCode": "Tyvärr, kunde inte generera en kod för {issuerName}",
"noResult": "Inga resultat",
"addCode": "Lägg till kod",
"scanAQrCode": "Skanna en QR-kod",
@@ -215,7 +216,7 @@
"error": "Fel",
"recoveryKeyCopiedToClipboard": "Återställningsnyckel kopierad till urklipp",
"recoveryKeyOnForgotPassword": "Om du glömmer ditt lösenord är det enda sättet du kan återställa dina data med denna nyckel.",
- "recoveryKeySaveDescription": "Vi lagrar inte och har därför inte åtkomst till denna nyckel, vänligen spara denna 24 ords nyckel på en säker plats.",
+ "recoveryKeySaveDescription": "Vi lagrar inte och har därför inte åtkomst till denna nyckel, vänligen spara denna 24 ordsnyckeln på en säker plats.",
"doThisLater": "Gör detta senare",
"saveKey": "Spara nyckel",
"save": "Spara",
@@ -254,7 +255,7 @@
"insecureDevice": "Osäker enhet",
"sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Tyvärr, kunde vi inte generera säkra nycklar på den här enheten.\n\nvänligen registrera dig från en annan enhet.",
"howItWorks": "Så här fungerar det",
- "ackPasswordLostWarning": "Jag förstår att om jag förlorar mitt lösenord kan jag förlora mina data eftersom min data är end-to-end-krypterad.",
+ "ackPasswordLostWarning": "Jag förstår att om jag förlorar mitt lösenord kan jag förlora mina data eftersom min data är totalsträckskrypterad.",
"loginTerms": "Jag samtycker till användarvillkoren och integritetspolicyn",
"logInLabel": "Logga in",
"logout": "Logga ut",
@@ -278,7 +279,7 @@
"recoveryKeyVerifyReason": "Din återställningsnyckel är det enda sättet att återställa dina foton om du glömmer ditt lösenord. Du hittar din återställningsnyckel i Inställningar > Säkerhet.\n\nAnge din återställningsnyckel här för att verifiera att du har sparat den ordentligt.",
"confirmYourRecoveryKey": "Bekräfta din återställningsnyckel",
"confirm": "Bekräfta",
- "emailYourLogs": "Maila dina loggar",
+ "emailYourLogs": "E-posta dina loggar",
"pleaseSendTheLogsTo": "Vänligen skicka loggarna till \n{toEmail}",
"copyEmailAddress": "Kopiera e-postadress",
"exportLogs": "Exportera loggar",
@@ -297,7 +298,7 @@
"criticalUpdateAvailable": "Kritisk uppdatering tillgänglig",
"updateAvailable": "Uppdatering tillgänglig",
"update": "Uppdatera",
- "checking": "Kontrollerar ...",
+ "checking": "Kontrollerar...",
"youAreOnTheLatestVersion": "Du är på den senaste versionen",
"warning": "Varning",
"exportWarningDesc": "Den exporterade filen innehåller känslig information. Förvara den på ett säkert sätt.",
@@ -306,7 +307,7 @@
"description": "Text for the button to confirm the user understands the warning"
},
"authToExportCodes": "Autentisera för att exportera dina koder",
- "importSuccessTitle": "Jippi!",
+ "importSuccessTitle": "Hurra!",
"importSuccessDesc": "Du har importerat {count} koder!",
"@importSuccessDesc": {
"placeholders": {
@@ -324,7 +325,7 @@
"checkInboxAndSpamFolder": "Vänligen kontrollera din inkorg (och skräppost) för att slutföra verifieringen",
"tapToEnterCode": "Tryck för att ange kod",
"resendEmail": "Skicka e-post igen",
- "weHaveSendEmailTo": "Vi har skickat ett mail till {email}",
+ "weHaveSendEmailTo": "Vi har skickat ett e-postmeddelande till {email}",
"@weHaveSendEmailTo": {
"description": "Text to indicate that we have sent a mail to the user",
"placeholders": {
@@ -362,7 +363,7 @@
"selectExportFormat": "Välj exportformat",
"exportDialogDesc": "Krypterad export skyddas av ett lösenord som du väljer.",
"encrypted": "Krypterad",
- "plainText": "Enkel text",
+ "plainText": "Oformaterad text",
"passwordToEncryptExport": "Lösenord för att kryptera export",
"export": "Exportera",
"useOffline": "Använd utan säkerhetskopior",
@@ -374,14 +375,14 @@
"compactMode": "Kompakt läge",
"shouldHideCode": "Dölj koder",
"doubleTapToViewHiddenCode": "Du kan dubbeltrycka på en post för att visa koden",
- "focusOnSearchBar": "Fokusera på sök vid appstart",
+ "focusOnSearchBar": "Fokusera på sök vid uppstart av app",
"confirmUpdatingkey": "Är du säker på att du vill uppdatera den hemliga nyckeln?",
"minimizeAppOnCopy": "Minimera appen vid kopiering",
"editCodeAuthMessage": "Autentisera för att redigera kod",
"deleteCodeAuthMessage": "Autentisera för att radera kod",
"showQRAuthMessage": "Autentisera för att visa QR-kod",
"confirmAccountDeleteTitle": "Bekräfta radering av kontot",
- "confirmAccountDeleteMessage": "Detta konto är kopplat till andra Ente apps, om du använder någon.\n\nDina uppladdade data, över alla Ente appar, kommer att schemaläggas för radering och ditt konto kommer att raderas permanent.",
+ "confirmAccountDeleteMessage": "Detta konto är kopplat till andra Ente applikationer, om du använder någon.\n\nDina uppladdade data, över alla Ente applikationer, kommer att schemaläggas för radering och ditt konto kommer att raderas permanent.",
"androidBiometricHint": "Verifiera identitet",
"@androidBiometricHint": {
"description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
@@ -390,7 +391,7 @@
"@androidBiometricNotRecognized": {
"description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
},
- "androidBiometricSuccess": "Slutförd",
+ "androidBiometricSuccess": "Lyckades",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
@@ -441,7 +442,7 @@
"signOutOtherDevices": "Logga ut andra enheter",
"doNotSignOut": "Logga inte ut",
"hearUsWhereTitle": "Hur hörde du talas om Ente? (valfritt)",
- "hearUsExplanation": "Vi spårar inte appinstallationer, Det skulle hjälpa oss om du berättade var du hittade oss!",
+ "hearUsExplanation": "Vi spårar inte installationer. Det skulle hjälpa oss om du berättade hur du hittade oss!",
"recoveryKeySaved": "Återställningsnyckel sparad i nedladdningsmappen!",
"waitingForBrowserRequest": "Väntar på webbläsarbegäran...",
"waitingForVerification": "Väntar på verifiering...",
@@ -488,6 +489,8 @@
"hideContent": "Dölj innehåll",
"hideContentDescriptionAndroid": "Döljer appinnehåll i app-växlaren och inaktiverar skärmdumpar",
"hideContentDescriptioniOS": "Döljer appinnehåll i app-växlaren",
+ "autoLockFeatureDescription": "Tid efter vilken appen låses efter att ha satts i bakgrunden",
+ "appLockDescription": "Välj mellan enhetens förvalda låsskärm och en anpassad låsskärm med en PIN-kod eller lösenord.",
"pinLock": "Pinkodslås",
"enterPin": "Ange PIN-kod",
"setNewPin": "Ställ in ny PIN-kod",
@@ -498,9 +501,31 @@
"appLockOfflineModeWarning": "Du har valt att fortsätta utan säkerhetskopior. Om du glömmer ditt applås, kommer du att bli utelåst från att komma åt dina data.",
"duplicateCodes": "Dubblettkoder",
"noDuplicates": "✨ Inga dubbletter",
+ "youveNoDuplicateCodesThatCanBeCleared": "Du har inga dubbla koder som kan rensas",
"deduplicateCodes": "Deduplicera koder",
"deselectAll": "Avmarkera alla",
"selectAll": "Markera alla",
"deleteDuplicates": "Radera dubbletter",
- "plainHTML": "Ren HTML"
+ "plainHTML": "Ren HTML",
+ "tellUsWhatYouThink": "Berätta vad du tycker",
+ "dropReviewiOS": "Skriv en recension på App Store",
+ "dropReviewAndroid": "Skriv en recension på Play Store",
+ "supportEnte": "Stöd ente",
+ "giveUsAStarOnGithub": "Ge oss en stjärna på Github",
+ "free5GB": "5 GB gratis på ente Foton",
+ "loginWithAuthAccount": "Logga in med ditt Auth-konto",
+ "freeStorageOffer": "10% rabatt på ente foton",
+ "freeStorageOfferDescription": "Använd koden \"AUTH\" för att få 10% rabatt första året",
+ "advanced": "Avancerad",
+ "algorithm": "Algoritm",
+ "type": "Typ",
+ "period": "Tidsperiod",
+ "digits": "Siffror",
+ "importFromGallery": "Importera från galleri",
+ "errorCouldNotReadImage": "Kunde inte läsa den valda bildfilen.",
+ "errorInvalidQRCode": "Ogiltig QR-kod",
+ "errorInvalidQRCodeBody": "Den skannade QR-koden är inte ett giltigt 2FA konto.",
+ "errorNoQRCode": "Ingen QR-kod hittades",
+ "errorGenericTitle": "Ett fel inträffade",
+ "errorGenericBody": "Ett oväntat fel inträffade vid import."
}
\ No newline at end of file
diff --git a/mobile/apps/auth/lib/l10n/arb/app_zh_CN.arb b/mobile/apps/auth/lib/l10n/arb/app_zh_CN.arb
index 6301ceaf81..2614173b88 100644
--- a/mobile/apps/auth/lib/l10n/arb/app_zh_CN.arb
+++ b/mobile/apps/auth/lib/l10n/arb/app_zh_CN.arb
@@ -6,7 +6,7 @@
"@counterAppBarTitle": {
"description": "Text shown in the AppBar of the Counter Page"
},
- "onBoardingBody": "妥善保管您的两步验证码",
+ "onBoardingBody": "妥善保管您的双重认证代码",
"onBoardingGetStarted": "开始",
"setupFirstAccount": "设置您的第一个账户",
"importScanQrCode": "扫描二维码",
@@ -111,13 +111,14 @@
"importAegisGuide": "使用 Aegis 设置中的“导出密码库”选项。\n\n如果您的密码库已加密,则需要输入密码库密码才能解密密码库。",
"import2FasGuide": "使用 2FAS 中的“设置 -> 备份 -> 导出”选项。\n\n如果您的备份已加密,则需要输入密码来解密备份",
"importLastpassGuide": "使用 Lastpass Authenticator 设置中的“转移账户”选项,然后按“将账户导出到文件”。导入下载的 JSON。",
+ "importProtonAuthGuide": "使用 Proton Authenticator 设置中的“导出”选项导出您的代码。",
"exportCodes": "导出代码",
"importLabel": "导入",
"importInstruction": "请选择一个包含以下格式的代码列表的文件",
"importCodeDelimiterInfo": "代码可以用逗号或换行符分隔",
"selectFile": "选择文件",
"emailVerificationToggle": "电子邮件验证",
- "emailVerificationEnableWarning": "为避免被锁在您的账户之外,请在启用电子邮件验证之前确保在 Ente Auth 之外存储电子邮件两步验证的副本。",
+ "emailVerificationEnableWarning": "为避免被锁在您的账户之外,请在启用电子邮件验证之前确保在 Ente Auth 之外存储电子邮件双重认证的副本。",
"authToChangeEmailVerificationSetting": "请进行身份验证以更改电子邮件验证",
"authenticateGeneric": "请验证",
"authToViewYourRecoveryKey": "请验证以查看您的恢复密钥",
@@ -155,7 +156,7 @@
"verifyEmail": "验证电子邮件",
"enterCodeHint": "从你的身份验证器应用中\n输入6位数字代码",
"lostDeviceTitle": "丢失了设备吗?",
- "twoFactorAuthTitle": "两步验证",
+ "twoFactorAuthTitle": "双重认证",
"passkeyAuthTitle": "通行密钥验证",
"verifyPasskey": "验证通行密钥",
"loginWithTOTP": "使用 TOTP 登录",
@@ -519,5 +520,12 @@
"algorithm": "算法",
"type": "类型",
"period": "周期",
- "digits": "数字"
+ "digits": "数字",
+ "importFromGallery": "从图库导入",
+ "errorCouldNotReadImage": "无法读取所选图片文件。",
+ "errorInvalidQRCode": "二维码无效",
+ "errorInvalidQRCodeBody": "扫描的二维码不是有效的双重认证账户。",
+ "errorNoQRCode": "未找到二维码",
+ "errorGenericTitle": "出错了",
+ "errorGenericBody": "导入时发生意外错误。"
}
\ No newline at end of file
diff --git a/mobile/apps/photos/fastlane/metadata/android/cs/full_description.txt b/mobile/apps/photos/fastlane/metadata/android/cs/full_description.txt
index c6300bd1a3..d518f124e7 100644
--- a/mobile/apps/photos/fastlane/metadata/android/cs/full_description.txt
+++ b/mobile/apps/photos/fastlane/metadata/android/cs/full_description.txt
@@ -1,36 +1,36 @@
-ente is a simple app to backup and share your photos and videos.
+ente je jednoduchá aplikace pro automatické zálohování a organizaci vašich fotek a videí.
-If you've been looking for a privacy-friendly alternative to Google Photos, you've come to the right place. With ente, they are stored end-to-end encrypted (e2ee). This means that only you can view them.
+Pokud hledáte alternativu ke službě Google Photos, která respektuje vaše soukromí, jste na správném místě. S Ente jsou uloženy s koncovým "end-to-end" šifrováním (e2ee). To znamená, že je můžete vidět pouze vy.
-We have open-source apps across Android, iOS, web and desktop, and your photos will seamlessly sync between all of them in an end-to-end encrypted (e2ee) manner.
+Máme aplikace napříč všemi platformami a vaše fotky se budou bezproblémově synchronizovat mezi všemi vašimi zařízeními tak, aby byly koncově šifrovány mezi jednotlivými zařízeními (e2ee).
-ente also makes it simple to share your albums with your loved ones, even if they aren't on ente. You can share publicly viewable links, where they can view your album and collaborate by adding photos to it, even without an account or app.
+ente také usnadňuje sdílení vašich alb s vašimi blízkými, i když nejsou na ente. Můžete sdílet veřejně přístupné odkazy, kde si mohou prohlížet vaše album a spolupracovat přidáváním fotografií, a to i bez účtu nebo aplikace.
-Your encrypted data is replicated to 3 different locations, including a fall-out shelter in Paris. We take posterity seriously and make it easy to ensure that your memories outlive you.
+Vaše šifrovaná data jsou uložena na 3 místech, včetně protiatomového krytu v Paříži. Bereme budoucnost vážně a usnadňujeme vám zajistit, aby vaše vzpomínky přežily vás samotné.
-We are here to make the safest photos app ever, come join our journey!
+Jsme tu, abychom vytvořili nejbezpečnější aplikaci pro fotografie, jaká kdy byla. Přidejte se k nám!
-FEATURES
-- Original quality backups, because every pixel is important
-- Family plans, so you can share storage with your family
-- Collaborative albums, so you can pool together photos after a trip
-- Shared folders, in case you want your partner to enjoy your "Camera" clicks
-- Album links, that can be protected with a password
-- Ability to free up space, by removing files that have been safely backed up
-- Human support, because you're worth it
-- Descriptions, so you can caption your memories and find them easily
-- Image editor, to add finishing touches
-- Favorite, hide and relive your memories, for they are precious
-- One-click import from Google, Apple, your hard drive and more
-- Dark theme, because your photos look good in it
-- 2FA, 3FA, biometric auth
-- and a LOT more!
+VLASTNOSTI
+- Zálohování v původní kvalitě, protože každý pixel je důležitý
+- Rodinné plány, takže můžete sdílet úložiště s rodinou
+- Společná alba, do kterých můžete po cestě shromažďovat fotografie
+- Sdílené složky, aby i váš partner mohl obdivovat vaše fotografie
+- Odkazy na alba, které lze chránit heslem a nastavit jejich platnost
+- Možnost uvolnit místo odstraněním souborů, které byly bezpečně zálohovány
+- Lidská podpora, protože si to zasloužíte
+- Popisy, abyste mohli své vzpomínky opatřit popisky a snadno je najít
+- Editor obrázků pro doladění detailů
+- Označte si své oblíbené fotografie, skryjte je a nebo je prožijte znovu pomocí vzpomínek
+- Import jedním kliknutím z Google, Apple, pevného disku a dalších zdrojů
+- Tmavý motiv, protože vaše fotografie v něm vypadají dobře
+- 2FA, 3FA, biometrické ověření
+- a ještě MNOHEM víc!
OPRÁVNĚNÍ
-ente requests for certain permissions to serve the purpose of a photo storage provider, which can be reviewed here: https://github.com/ente-io/ente/blob/f-droid/mobile/android/permissions.md
+ente žádá o určitá oprávnění, aby mohla plnit funkci poskytovatele úložiště fotografií. Tyto oprávnění si můžete prohlédnout zde: https://github.com/ente-io/ente/blob/f-droid/mobile/android/permissions.md
-PRICING
-We don't offer forever free plans, because it is important to us that we remain sustainable and withstand the test of time. Instead we offer affordable plans that you can freely share with your family. You can find more information at ente.io.
+CENY
+Nenabízíme doživotní tarify, protože je pro nás důležité zůstat udržitelnými a obstát ve zkoušce času. Místo toho nabízíme cenově dostupné plány, které můžete svobodně sdílet se svou rodinou. Více informací najdete na ente.io.
PODPORA
-We take pride in offering human support. If you are our paid customer, you can reach out to team@ente.io and expect a response from our team within 24 hours.
+Jsme hrdí na to, že poskytujeme lidskou podporu. Pokud máte placený tarif, můžete se obrátit na team@ente.io a do 24 hodin od našeho týmu očekávat odpověď.
diff --git a/mobile/apps/photos/fastlane/metadata/android/cs/short_description.txt b/mobile/apps/photos/fastlane/metadata/android/cs/short_description.txt
index 7a5fe973db..9ca18f0b3a 100644
--- a/mobile/apps/photos/fastlane/metadata/android/cs/short_description.txt
+++ b/mobile/apps/photos/fastlane/metadata/android/cs/short_description.txt
@@ -1 +1 @@
-ente is an end-to-end encrypted photo storage app
\ No newline at end of file
+ente je aplikace pro ukládání fotografií a videí s koncovým šifrováním
\ No newline at end of file
diff --git a/mobile/apps/photos/fastlane/metadata/android/cs/title.txt b/mobile/apps/photos/fastlane/metadata/android/cs/title.txt
index 3a4fed48fe..9ab892d60a 100644
--- a/mobile/apps/photos/fastlane/metadata/android/cs/title.txt
+++ b/mobile/apps/photos/fastlane/metadata/android/cs/title.txt
@@ -1 +1 @@
-ente - encrypted photo storage
\ No newline at end of file
+ente – šifrované úložiště fotografií
\ No newline at end of file
diff --git a/mobile/apps/photos/fastlane/metadata/ios/cs/description.txt b/mobile/apps/photos/fastlane/metadata/ios/cs/description.txt
index a98a74300a..ce3815ce11 100644
--- a/mobile/apps/photos/fastlane/metadata/ios/cs/description.txt
+++ b/mobile/apps/photos/fastlane/metadata/ios/cs/description.txt
@@ -1,33 +1,33 @@
-Ente is a simple app to automatically backup and organize your photos and videos.
+Ente je jednoduchá aplikace pro automatické zálohování a organizaci vašich fotek a videí.
-If you've been looking for a privacy-friendly alternative to preserve your memories, you've come to the right place. With Ente, they are stored end-to-end encrypted (e2ee). This means that only you can view them.
+Pokud hledáte alternativu, která respektuje vaše soukromí a umožní vám uchovat vaše vzpomínky, jste na správném místě. S Ente jsou uloženy s koncovým "end-to-end" šifrováním (e2ee). To znamená, že je můžete vidět pouze vy.
-We have apps across all platforms, and your photos will seamlessly sync between all your devices in an end-to-end encrypted (e2ee) manner.
+Máme aplikace napříč všemi platformami a vaše fotky se budou bezproblémově synchronizovat mezi všemi vašimi zařízeními tak, aby byly koncově šifrovány mezi jednotlivými zařízeními (e2ee).
-Ente also makes it simple to share your albums with your loved ones. You can either share them directly with other Ente users, end-to-end encrypted; or with publicly viewable links.
+Ente také zjednodušuje sdílení alb s vašimi blízkými. Můžete je buď sdílet přímo s ostatními uživateli Ente, koncově šifrované; nebo s pomocí veřejně přístupných odkazů.
-Your encrypted data is stored across multiple locations, including a fall-out shelter in Paris. We take posterity seriously and make it easy to ensure that your memories outlive you.
+Vaše šifrovaná data jsou uložena na několika místech, včetně protiatomového krytu v Paříži. Bereme budoucnost vážně a usnadňujeme vám zajistit, aby vaše vzpomínky přežily vás samotné.
-We are here to make the safest photos app ever, come join our journey!
+Jsme tu, abychom vytvořili nejbezpečnější aplikaci pro fotografie, jaká kdy byla. Přidejte se k nám!
-FEATURES
-- Original quality backups, because every pixel is important
-- Family plans, so you can share storage with your family
-- Shared folders, in case you want your partner to enjoy your "Camera" clicks
-- Album links, that can be protected with a password and set to expire
-- Ability to free up space, by removing files that have been safely backed up
-- Image editor, to add finishing touches
-- Favorite, hide and relive your memories, for they are precious
-- One-click import from all major storage providers
-- Dark theme, because your photos look good in it
-- 2FA, 3FA, biometric auth
-- and a LOT more!
+VLASTNOSTI
+- Zálohování v původní kvalitě, protože každý pixel je důležitý
+- Rodinné plány, takže můžete sdílet úložiště s rodinou
+- Sdílené složky, aby i váš partner mohl obdivovat vaše fotografie
+- Odkazy na alba, které lze chránit heslem a nastavit jejich platnost
+- Možnost uvolnit místo odstraněním souborů, které byly bezpečně zálohovány
+- Editor obrázků, pro finální doladění detailů
+- Označte si své oblíbené fotografie, skryjte je a nebo je prožijte znovu pomocí vzpomínek
+- Import jedním kliknutím ze všech velkých poskytovatelů úložišť
+- Tmavý motiv, protože vaše fotografie v něm vypadají dobře
+- 2FA, 3FA, biometrické ověření
+- a ještě MNOHEM víc!
-PRICING
-We don't offer forever free plans, because it is important to us that we remain sustainable and withstand the test of time. Instead we offer affordable plans that you can freely share with your family. You can find more information at ente.io.
+CENY
+Nenabízíme doživotní tarify, protože je pro nás důležité zůstat udržitelnými a obstát ve zkoušce času. Místo toho nabízíme cenově dostupné plány, které můžete svobodně sdílet se svou rodinou. Více informací najdete na ente.io.
-SUPPORT
-We take pride in offering human support. If you are our paid customer, you can reach out to team@ente.io and expect a response from our team within 24 hours.
+PODPORA
+Jsme hrdí na to, že poskytujeme lidskou podporu. Pokud máte placený tarif, můžete se obrátit na team@ente.io a do 24 hodin od našeho týmu očekávat odpověď.
-TERMS
+PODMÍNKY
https://ente.io/terms
diff --git a/mobile/apps/photos/fastlane/metadata/ios/cs/keywords.txt b/mobile/apps/photos/fastlane/metadata/ios/cs/keywords.txt
index e1462baf51..13e4cd8629 100644
--- a/mobile/apps/photos/fastlane/metadata/ios/cs/keywords.txt
+++ b/mobile/apps/photos/fastlane/metadata/ios/cs/keywords.txt
@@ -1 +1 @@
-photos,photography,family,privacy,cloud,backup,videos,photo,encryption,storage,album,alternative
+fotky,fotografie,rodina,soukromí,cloud,zálohování,videa,fotka,šifrování,úložiště,album,alternativa
diff --git a/mobile/apps/photos/fastlane/metadata/ios/cs/name.txt b/mobile/apps/photos/fastlane/metadata/ios/cs/name.txt
index 3a991c4abc..27af6aefd6 100644
--- a/mobile/apps/photos/fastlane/metadata/ios/cs/name.txt
+++ b/mobile/apps/photos/fastlane/metadata/ios/cs/name.txt
@@ -1 +1 @@
-Ente Photos
+Ente Fotky
diff --git a/mobile/apps/photos/fastlane/metadata/ios/cs/subtitle.txt b/mobile/apps/photos/fastlane/metadata/ios/cs/subtitle.txt
index 958a35f1c9..d49b2f3cb3 100644
--- a/mobile/apps/photos/fastlane/metadata/ios/cs/subtitle.txt
+++ b/mobile/apps/photos/fastlane/metadata/ios/cs/subtitle.txt
@@ -1 +1 @@
-Encrypted photo storage
+Šifrované úložiště fotografií
diff --git a/mobile/apps/photos/fastlane/metadata/playstore/cs/full_description.txt b/mobile/apps/photos/fastlane/metadata/playstore/cs/full_description.txt
index ec999a783c..b522b32115 100644
--- a/mobile/apps/photos/fastlane/metadata/playstore/cs/full_description.txt
+++ b/mobile/apps/photos/fastlane/metadata/playstore/cs/full_description.txt
@@ -1,30 +1,30 @@
-Ente is a simple app to automatically backup and organize your photos and videos.
+Ente je jednoduchá aplikace pro automatické zálohování a organizaci vašich fotek a videí.
-If you've been looking for a privacy-friendly alternative to preserve your memories, you've come to the right place. With Ente, they are stored end-to-end encrypted (e2ee). This means that only you can view them.
+Pokud hledáte alternativu, která respektuje vaše soukromí a umožní vám uchovat vaše vzpomínky, jste na správném místě. S Ente jsou uloženy s koncovým "end-to-end" šifrováním (e2ee). To znamená, že je můžete vidět pouze vy.
-We have apps across Android, iOS, web and Desktop, and your photos will seamlessly sync between all your devices in an end-to-end encrypted (e2ee) manner.
+Máme aplikace napříč všemi platformami a vaše fotky se budou bezproblémově synchronizovat mezi všemi vašimi zařízeními tak, aby byly koncově šifrovány mezi jednotlivými zařízeními (e2ee).
-Ente also makes it simple to share your albums with your loved ones. You can either share them directly with other Ente users, end-to-end encrypted; or with publicly viewable links.
+Ente také zjednodušuje sdílení alb s vašimi blízkými. Můžete je buď sdílet přímo s ostatními uživateli Ente, koncově šifrované; nebo s pomocí veřejně přístupných odkazů.
-Your encrypted data is stored across multiple locations, including a fall-out shelter in Paris. We take posterity seriously and make it easy to ensure that your memories outlive you.
+Vaše šifrovaná data jsou uložena na několika místech, včetně protiatomového krytu v Paříži. Bereme budoucnost vážně a usnadňujeme vám zajistit, aby vaše vzpomínky přežily vás samotné.
-We are here to make the safest photos app ever, come join our journey!
+Jsme tu, abychom vytvořili nejbezpečnější aplikaci pro fotografie, jaká kdy byla. Přidejte se k nám!
-✨ FEATURES
-- Original quality backups, because every pixel is important
-- Family plans, so you can share storage with your family
-- Shared folders, in case you want your partner to enjoy your "Camera" clicks
-- Album links, that can be protected with a password and set to expire
-- Ability to free up space, by removing files that have been safely backed up
-- Image editor, to add finishing touches
-- Favorite, hide and relive your memories, for they are precious
-- One-click import from Google, Apple, your hard drive and more
-- Dark theme, because your photos look good in it
-- 2FA, 3FA, biometric auth
-- and a LOT more!
+✨ VLASTNOSTI
+- Zálohování v původní kvalitě, protože každý pixel je důležitý
+- Rodinné plány, takže můžete sdílet úložiště s rodinou
+- Sdílené složky, aby i váš partner mohl obdivovat vaše fotografie
+- Odkazy na alba, které lze chránit heslem a nastavit jejich platnost
+- Možnost uvolnit místo odstraněním souborů, které byly bezpečně zálohovány
+- Editor obrázků, pro finální doladění detailů
+- Označte si své oblíbené fotografie, skryjte je a nebo je prožijte znovu pomocí vzpomínek
+- Import jedním kliknutím ze všech velkých poskytovatelů úložišť
+- Tmavý motiv, protože vaše fotografie v něm vypadají dobře
+- 2FA, 3FA, biometrické ověření
+- a ještě MNOHEM víc!
-💲 PRICING
-We don't offer forever free plans, because it is important to us that we remain sustainable and withstand the test of time. Instead we offer affordable plans that you can freely share with your family. You can find more information at ente.io.
+💲 CENY
+Nenabízíme doživotní tarify, protože je pro nás důležité zůstat udržitelnými a obstát ve zkoušce času. Místo toho nabízíme cenově dostupné plány, které můžete svobodně sdílet se svou rodinou. Více informací najdete na ente.io.
-🙋 SUPPORT
-We take pride in offering human support. If you are our paid customer, you can reach out to team@ente.io and expect a response from our team within 24 hours.
\ No newline at end of file
+🙋 PODPORA
+Jsme hrdí na to, že poskytujeme lidskou podporu. Pokud máte placený tarif, můžete se obrátit na team@ente.io a do 24 hodin od našeho týmu očekávat odpověď.
\ No newline at end of file
diff --git a/mobile/apps/photos/fastlane/metadata/playstore/cs/short_description.txt b/mobile/apps/photos/fastlane/metadata/playstore/cs/short_description.txt
index 6c00229894..ca499c0181 100644
--- a/mobile/apps/photos/fastlane/metadata/playstore/cs/short_description.txt
+++ b/mobile/apps/photos/fastlane/metadata/playstore/cs/short_description.txt
@@ -1 +1 @@
-Encrypted photo storage - backup, organize and share your photos and videos
\ No newline at end of file
+Šifrované úložiště fotografií – zálohujte, organizujte a sdílejte své fotografie a videa
\ No newline at end of file
diff --git a/mobile/apps/photos/fastlane/metadata/playstore/cs/title.txt b/mobile/apps/photos/fastlane/metadata/playstore/cs/title.txt
index 97fdef3be7..4923840900 100644
--- a/mobile/apps/photos/fastlane/metadata/playstore/cs/title.txt
+++ b/mobile/apps/photos/fastlane/metadata/playstore/cs/title.txt
@@ -1 +1 @@
-Ente Photos
\ No newline at end of file
+Ente Fotky
\ No newline at end of file
diff --git a/mobile/apps/photos/lib/db/ml/clip_vector_db.dart b/mobile/apps/photos/lib/db/ml/clip_vector_db.dart
index 348cd40b6d..2d6f4c86f3 100644
--- a/mobile/apps/photos/lib/db/ml/clip_vector_db.dart
+++ b/mobile/apps/photos/lib/db/ml/clip_vector_db.dart
@@ -1,4 +1,3 @@
-import "dart:io" show File;
import "dart:typed_data" show Float32List;
import "package:flutter_rust_bridge/flutter_rust_bridge.dart" show Uint64List;
@@ -8,11 +7,13 @@ import "package:path_provider/path_provider.dart";
import "package:photos/models/ml/vector.dart";
import "package:photos/services/machine_learning/semantic_search/query_result.dart";
import "package:photos/src/rust/api/usearch_api.dart";
+import "package:shared_preferences/shared_preferences.dart";
class ClipVectorDB {
static final Logger _logger = Logger("ClipVectorDB");
static const _databaseName = "ente.ml.vectordb.clip";
+ static const _kMigrationKey = "clip_vector_migration";
static final BigInt _embeddingDimension = BigInt.from(512);
@@ -51,10 +52,9 @@ class ClipVectorDB {
Future checkIfMigrationDone() async {
if (_migrationDone != null) return _migrationDone!;
_logger.info("Checking if ClipVectorDB migration has run");
- final documentsDirectory = await getApplicationDocumentsDirectory();
- final migrationFlagFile =
- File(join(documentsDirectory.path, 'clip_vector_migration_done'));
- if (await migrationFlagFile.exists()) {
+ final prefs = await SharedPreferences.getInstance();
+ final migrationDone = prefs.getBool(_kMigrationKey) ?? false;
+ if (migrationDone) {
_logger.info("ClipVectorDB migration already done");
_migrationDone = true;
return _migrationDone!;
@@ -67,10 +67,8 @@ class ClipVectorDB {
Future setMigrationDone() async {
_logger.info("Setting ClipVectorDB migration done");
- final documentsDirectory = await getApplicationDocumentsDirectory();
- final migrationFlagFile =
- File(join(documentsDirectory.path, 'clip_vector_migration_done'));
- await migrationFlagFile.create(recursive: true);
+ final prefs = await SharedPreferences.getInstance();
+ await prefs.setBool(_kMigrationKey, true);
_migrationDone = true;
}
diff --git a/mobile/apps/photos/lib/l10n/intl_cs.arb b/mobile/apps/photos/lib/l10n/intl_cs.arb
index 31707eba94..6c5a2f2cb1 100644
--- a/mobile/apps/photos/lib/l10n/intl_cs.arb
+++ b/mobile/apps/photos/lib/l10n/intl_cs.arb
@@ -32,7 +32,7 @@
"createAccount": "Vytvořit účet",
"createNewAccount": "Vytvořit nový účet",
"password": "Heslo",
- "confirmPassword": "Potvrdte heslo",
+ "confirmPassword": "Potvrďte heslo",
"activeSessions": "Aktivní relace",
"oops": "Jejda",
"somethingWentWrongPleaseTryAgain": "Něco se pokazilo. Zkuste to, prosím, znovu",
@@ -45,14 +45,14 @@
"recoverySuccessful": "Úspěšně obnoveno!",
"decrypting": "Dešifrování...",
"incorrectRecoveryKeyTitle": "Nesprávný obnovovací klíč",
- "incorrectRecoveryKeyBody": "",
+ "incorrectRecoveryKeyBody": "Vámi zadaný obnovovací klíč je nesprávný",
"forgotPassword": "Zapomenuté heslo",
"enterYourRecoveryKey": "Zadejte svůj obnovovací klíč",
"noRecoveryKey": "Nemáte obnovovací klíč?",
"sorry": "Omlouváme se",
"noRecoveryKeyNoDecryption": "Vzhledem k povaze našeho protokolu koncového šifrování nemohou být vaše data dešifrována bez vašeho hesla nebo obnovovacího klíče",
"verifyEmail": "Ověřit e-mail",
- "toResetVerifyEmail": "Pro reset vašeho hesla nejprve vyplňte vaší e-mailovou adresu prosím.",
+ "toResetVerifyEmail": "Chcete-li resetovat heslo, nejprve ověřte svou e-mailovou adresu.",
"checkInboxAndSpamFolder": "Zkontrolujte prosím svou doručenou poštu (a spam) pro dokončení ověření",
"tapToEnterCode": "Klepněte pro zadání kódu",
"resendEmail": "Znovu odeslat e-mail",
@@ -111,7 +111,7 @@
"pleaseTryAgain": "Zkuste to prosím znovu",
"recreatePasswordTitle": "Znovu vytvořit heslo",
"useRecoveryKey": "Použít obnovovací klíč",
- "recreatePasswordBody": "Aktuální zařízení není dostatečně silné k ověření vašeho hesla, ale můžeme ho regenerovat způsobem, které funguje na všech zařízeních.\n\nProsím, přihlašte se pomocí vašeho obnovovacího klíče a regenerujte své heslo (můžete klidně znovu použít své aktuální heslo).",
+ "recreatePasswordBody": "Aktuální zařízení není dostatečně výkonné, aby ověřilo vaše heslo, ale můžeme ho znovu vygenerovat tak, aby fungovalo na všech zařízeních.\n\nPřihlaste se pomocí svého obnovovacího klíče a znovu vygenerujte heslo (pokud chcete, můžete použít stejné heslo).",
"verifyPassword": "Ověřit heslo",
"recoveryKey": "Obnovovací klíč",
"recoveryKeyOnForgotPassword": "Tento klíč je jedinou cestou pro obnovení Vašich dat, pokud zapomenete heslo.",
@@ -121,7 +121,7 @@
"recoveryKeyCopiedToClipboard": "Obnovovací klíč zkopírován do schránky",
"recoverAccount": "Obnovit účet",
"recover": "Obnovit",
- "dropSupportEmail": "Prosíme, napiště e-mail na {supportEmail} ze schránky, kterou jste použili k registraci",
+ "dropSupportEmail": "Prosíme, napište e-mail na {supportEmail} ze schránky, kterou jste použili k registraci",
"@dropSupportEmail": {
"placeholders": {
"supportEmail": {
@@ -131,16 +131,36 @@
}
}
},
- "twofactorSetup": "Nastavení dvoufaktorového ověřování",
+ "twofactorSetup": "Nastavení dvoufázového ověřování",
"enterCode": "Zadat kód",
"scanCode": "Skenovat kód",
"codeCopiedToClipboard": "Kód zkopírován do schránky",
+ "copypasteThisCodentoYourAuthenticatorApp": "Zkopírujte tento kód\ndo vaší ověřovací aplikace",
+ "tapToCopy": "klepnutím zkopírovat",
+ "scanThisBarcodeWithnyourAuthenticatorApp": "Naskenujte tento QR kód \ns vaší ověřovací aplikací",
+ "enterThe6digitCodeFromnyourAuthenticatorApp": "Zadejte 6-místný kód\nz vaší ověřovací aplikace",
"confirm": "Potvrdit",
+ "setupComplete": "Nastavení dokončeno",
+ "saveYourRecoveryKeyIfYouHaventAlready": "Uložte si svůj obnovovací klíč, pokud jste tak ještě neučinili",
+ "thisCanBeUsedToRecoverYourAccountIfYou": "Toto lze použít k obnovení účtu, pokud ztratíte svůj přístup k ověřovací aplikaci",
+ "twofactorAuthenticationPageTitle": "Dvoufázové ověření",
"lostDevice": "Ztratili jste zařízení?",
"verifyingRecoveryKey": "Ověřování obnovovacího klíče...",
"recoveryKeyVerified": "Obnovovací klíč byl ověřen",
+ "recoveryKeySuccessBody": "Skvělé! Váš obnovovací klíč je platný. Děkujeme vám za ověření.\n\nNezapomeňte mít váš obnovovací klíč bezpečně zálohován.",
+ "invalidRecoveryKey": "Zadaný obnovovací klíč není platný. Ujistěte se, že obsahuje 24 slov, a zkontrolujte pravopis každého z nich.\n\nPokud jste zadali starší obnovovací kód, ujistěte se, že má 64 znaků, a zkontrolujte každý z nich.",
"invalidKey": "Neplatný klíč",
"tryAgain": "Zkusit znovu",
+ "viewRecoveryKey": "Zobrazit obnovovací klíč",
+ "confirmRecoveryKey": "Potvrdit obnovovací klíč",
+ "recoveryKeyVerifyReason": "Váš obnovovací klíč je jediný způsob, jak obnovit vaše fotografie, pokud zapomenete heslo. Obnovovací klíč najdete v Nastavení > Účet.\n\nZadejte zde svůj obnovovací klíč, abyste ověřili, že jste jej správně uložili.",
+ "confirmYourRecoveryKey": "Potvrďte svůj obnovovací klíč",
+ "addViewer": "Přidat prohlížejícího",
+ "addCollaborator": "Přidat spolupracovníka",
+ "addANewEmail": "Přidejte nový email",
+ "orPickAnExistingOne": "Nebo vyberte existující",
+ "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": "Spolupracovníci mohou do sdíleného alba přidávat fotky a videa.",
+ "enterEmail": "Zadejte email",
"albumOwner": "Vlastník",
"@albumOwner": {
"description": "Role of the album owner"
@@ -158,43 +178,193 @@
"description": "menuSectionTitle for removing a participant"
},
"manage": "Spravovat",
+ "addedAs": "Přidán jako",
+ "changePermissions": "Změnit oprávnění?",
+ "yesConvertToViewer": "Ano, převést na prohlížejícího",
+ "cannotAddMorePhotosAfterBecomingViewer": "{user} nebude moci přidat další fotky do tohoto alba\n\nBudou stále moci odebrat existující fotky, které přidali",
+ "allowAddingPhotos": "Povolit přidávání fotek",
+ "@allowAddingPhotos": {
+ "description": "Switch button to enable uploading photos to a public link"
+ },
+ "allowAddPhotosDescription": "Umožnit lidem s odkazem přidávat fotky do sdíleného alba.",
+ "passwordLock": "Zámek heslem",
+ "canNotOpenTitle": "Nelze otevřít toto album",
+ "canNotOpenBody": "Omlouváme se, ale toto album nelze otevřít v aplikaci.",
+ "disableDownloadWarningTitle": "Upozornění",
+ "disableDownloadWarningBody": "Prohlížející mohou stále pořizovat snímky obrazovky nebo ukládat kopii vašich fotografií pomocí externích nástrojů",
+ "allowDownloads": "Povolit stahování",
+ "linkDeviceLimit": "Limit zařízení",
+ "noDeviceLimit": "Žádné",
+ "@noDeviceLimit": {
+ "description": "Text to indicate that there is limit on number of devices"
+ },
+ "linkExpiry": "Platnost odkazu",
+ "linkExpired": "Vypršel",
+ "linkEnabled": "Povoleno",
"linkNeverExpires": "Nikdy",
+ "expiredLinkInfo": "Platnost odkazu vypršela. Zvolte prosím nový čas vypršení platnosti, nebo zakažte platnost odkazu.",
"setAPassword": "Nastavit heslo",
"lockButtonLabel": "Uzamknout",
"enterPassword": "Zadejte heslo",
"removeLink": "Odstranit odkaz",
+ "manageLink": "Spravovat odkaz",
"linkExpiresOn": "Platnost odkazu vyprší {expiryTime}",
"albumUpdated": "Album bylo aktualizováno",
"never": "Nikdy",
+ "custom": "Vlastní",
+ "@custom": {
+ "description": "Label for setting custom value for link expiry"
+ },
"after1Hour": "Po 1 hodině",
"after1Day": "Po 1 dni",
"after1Week": "Po 1 týdnu",
"after1Month": "Po 1 měsíci",
"after1Year": "Po 1 roce",
"manageParticipants": "Spravovat",
+ "albumParticipantsCount": "{count, plural, =0 {Žádní účastníci} =1 {1 Účastník} other {{count} Účastníků}}",
+ "@albumParticipantsCount": {
+ "placeholders": {
+ "count": {
+ "type": "int",
+ "example": "5"
+ }
+ },
+ "description": "Number of participants in an album, including the album owner."
+ },
+ "collabLinkSectionDescription": "Vytvořte odkaz, který umožní ostatním přidávat a prohlížet fotografie ve vašem sdíleném albu, aniž by potřebovali aplikaci Ente nebo účet. Skvělé pro shromažďování fotografií z akcí.",
+ "collectPhotos": "Shromáždit fotografie",
+ "collaborativeLink": "Odkaz na spolupráci",
+ "shareWithNonenteUsers": "Sdílet s jinými uživateli",
+ "createPublicLink": "Vytvořit veřejný odkaz",
"sendLink": "Odeslat odkaz",
+ "copyLink": "Kopírovat odkaz",
"linkHasExpired": "Platnost odkazu vypršela",
+ "publicLinkEnabled": "Veřejný odkaz povolen",
+ "shareALink": "Sdílet odkaz",
+ "sharedAlbumSectionDescription": "Vytvářejte sdílená a společná alba s ostatními uživateli Ente, včetně uživatelů s bezplatnými tarify.",
+ "shareWithPeopleSectionTitle": "{numberOfPeople, plural, =0 {Sdílet s konkrétními osobami} =1 {Sdíleno s 1 osobou} other {Sdíleno s {numberOfPeople} osobami}}",
+ "@shareWithPeopleSectionTitle": {
+ "placeholders": {
+ "numberOfPeople": {
+ "type": "int",
+ "example": "2"
+ }
+ }
+ },
+ "thisIsYourVerificationId": "Toto je vaše ověřovací ID",
+ "someoneSharingAlbumsWithYouShouldSeeTheSameId": "Osoba, která s vámi sdílí alba, by měla na svém zařízení vidět stejné ID.",
+ "howToViewShareeVerificationID": "Požádejte je, aby dlouze stiskli svou emailovou adresu na obrazovce nastavení a ověřili, zda se ID na obou zařízeních shodují.",
+ "thisIsPersonVerificationId": "Toto je ověřovací ID pro {email}",
+ "@thisIsPersonVerificationId": {
+ "placeholders": {
+ "email": {
+ "type": "String",
+ "example": "someone@ente.io"
+ }
+ }
+ },
+ "verificationId": "Ověřovací ID",
"verifyEmailID": "Ověřit {email}",
+ "emailNoEnteAccount": "{email} nemá účet Ente.\n\nPošlete jim pozvánku ke sdílení fotek.",
+ "shareMyVerificationID": "Zde je moje ověřovací ID: {verificationID} pro ente.io.",
+ "shareTextConfirmOthersVerificationID": "Ahoj, můžeš potvrdit, že toto je tvé ověřovací ID ente.io: {verificationID}",
+ "somethingWentWrong": "Něco se pokazilo",
"sendInvite": "Odeslat pozvánku",
+ "shareTextRecommendUsingEnte": "Stáhněte si aplikaci Ente, abyste mohli snadno sdílet fotografie a videa v původní kvalitě\n\nhttps://ente.io",
"done": "Hotovo",
+ "applyCodeTitle": "Uplatnit kód",
+ "enterCodeDescription": "Zadejte kód, který vám poskytl váš přítel, a získejte bezplatné úložiště pro vás oba",
"apply": "Použít",
+ "failedToApplyCode": "Nepodařilo se použít kód",
+ "enterReferralCode": "Vložte referenční kód",
"codeAppliedPageTitle": "Kód byl použit",
+ "changeYourReferralCode": "Změňte svůj referenční kód",
+ "change": "Změnit",
+ "unavailableReferralCode": "Omlouváme se, tento kód je nedostupný.",
+ "codeChangeLimitReached": "Omlouváme se, dosáhli jste limitu změn kódu.",
+ "onlyFamilyAdminCanChangeCode": "Pro změnu kódu prosím kontaktujte {familyAdminEmail}.",
+ "storageInGB": "{storageAmountInGB} GB",
+ "claimed": "Získáno",
+ "@claimed": {
+ "description": "Used to indicate storage claimed, like 10GB Claimed"
+ },
+ "details": "Detaily",
+ "claimMore": "Získat více!",
+ "theyAlsoGetXGb": "Získají také {storageAmountInGB} GB",
+ "freeStorageOnReferralSuccess": "{storageAmountInGB} GB pokaždé, když se někdo zaregistruje do placeného tarifu a použije váš kód",
+ "shareTextReferralCode": "Referenční kód Ente: {referralCode} \n\nPoužijte jej v Nastavení → Obecné → Doporučení a získejte {referralStorageInGB} GB zdarma po registraci k placenému tarifu.\n\nhttps://ente.io",
+ "claimFreeStorage": "Získat úložiště zdarma",
+ "inviteYourFriends": "Pozvěte své přátele",
+ "failedToFetchReferralDetails": "Nelze načíst podrobnosti o doporučení. Zkuste to prosím znovu později.",
+ "referralStep1": "1. Dejte tento kód svým přátelům",
+ "referralStep2": "2. Zaregistrují se k placenému tarifu",
+ "referralStep3": "3. Oba získáte {storageInGB} GB* zdarma",
+ "referralsAreCurrentlyPaused": "Doporučení jsou momentálně pozastavena",
+ "youCanAtMaxDoubleYourStorage": "* Můžete maximálně zdvojnásobit své úložiště",
+ "claimedStorageSoFar": "{isFamilyMember, select, true {Vaše rodina dosud získala {storageAmountInGb} GB} false {Dosud jste získali {storageAmountInGb} GB} other {Dosud jste získali {storageAmountInGb} GB!}}",
+ "@claimedStorageSoFar": {
+ "placeholders": {
+ "isFamilyMember": {
+ "type": "String",
+ "example": "true"
+ },
+ "storageAmountInGb": {
+ "type": "int",
+ "example": "10"
+ }
+ }
+ },
"faq": "Často kladené dotazy",
+ "help": "Nápověda",
"oopsSomethingWentWrong": "Jejda, něco se pokazilo",
+ "peopleUsingYourCode": "Lidé, kteří používají váš kód",
+ "eligible": "způsobilí",
+ "total": "celkem",
+ "codeUsedByYou": "Kód použitý vámi",
+ "freeStorageClaimed": "Získané úložiště zdarma",
+ "freeStorageUsable": "Bezplatné použitelné úložiště",
+ "usableReferralStorageInfo": "Použitelná úložná kapacita je omezena vaším aktuálním tarifem. Překročená úložná kapacita se automaticky stane použitelnou, jakmile si tarif vylepšíte.",
"removeFromAlbumTitle": "Odstranit z alba?",
"removeFromAlbum": "Odstranit z alba",
+ "itemsWillBeRemovedFromAlbum": "Vybrané položky budou odstraněny z tohoto alba",
+ "removeShareItemsWarning": "Některé položky, které odstraňujete, byly přidány jinými lidmi a ztratíte k nim přístup",
+ "addingToFavorites": "Přidávání k oblíbeným...",
+ "removingFromFavorites": "Odstraňování z oblíbených...",
+ "sorryCouldNotAddToFavorites": "Omlouváme se, nelze přidat k oblíbeným!",
+ "sorryCouldNotRemoveFromFavorites": "Omlouváme se, nelze odebrat z oblíbených!",
+ "subscribeToEnableSharing": "K povolení sdílení potřebujete aktivní placené předplatné.",
"subscribe": "Odebírat",
- "deleteSharedAlbum": "Opustit sdílené album?",
+ "canOnlyRemoveFilesOwnedByYou": "Můžete odstranit pouze vámi vlastněné soubory",
+ "deleteSharedAlbum": "Smazat sdílené album?",
"deleteAlbum": "Odstranit album",
+ "deleteAlbumDialog": "Smazat také fotografie (a videa) obsažené v tomto albu ze všech ostatních alb, jejichž součástí jsou?",
+ "deleteSharedAlbumDialogBody": "Album bude smazáno pro všechny\n\nZtratíte přístup ke sdíleným fotkám v tomto albu, které vlastní jiní uživatelé",
"yesRemove": "Ano, odstranit",
+ "creatingLink": "Vytváření odkazu...",
"removeWithQuestionMark": "Odstranit?",
+ "removeParticipantBody": "{userEmail} bude odebrán z tohoto sdíleného alba\n\nVšechny jimi přidané fotky budou také z alba odebrány",
+ "keepPhotos": "Ponechat fotky",
+ "deletePhotos": "Smazat fotografie",
"inviteToEnte": "Pozvat do Ente",
"removePublicLink": "Odstranit veřejný odkaz",
+ "disableLinkMessage": "Toto odstraní veřejný odkaz pro přístup k \"{albumName}\".",
"sharing": "Sdílení...",
- "importing": "Importování…",
+ "youCannotShareWithYourself": "Nemůžete sdílet se sebou",
+ "archive": "Archiv",
+ "createAlbumActionHint": "Dlouhým stisknutím vyberte fotografie a kliknutím na + vytvořte album",
+ "importing": "Importování....",
"failedToLoadAlbums": "Nepodařilo se načíst alba",
"hidden": "Skryté",
+ "authToViewYourHiddenFiles": "Pro zobrazení skrytých souborů se prosím ověřte",
+ "authToViewTrashedFiles": "Pro zobrazení smazaných souborů se prosím ověřte",
"trash": "Koš",
+ "uncategorized": "Nezařazené",
+ "videoSmallCase": "Video",
+ "photoSmallCase": "Fotka",
+ "singleFileDeleteHighlight": "Bude odstraněn ze všech alb.",
+ "singleFileInBothLocalAndRemote": "{fileType} se nachází jak v Ente, tak ve vašem zařízení.",
+ "singleFileInRemoteOnly": "Tento soubor bude vymazán z Ente.",
+ "singleFileDeleteFromDevice": "Tento soubor bude vymazán z vašeho zařízení.",
"deleteFromEnte": "Odstranit z Ente",
"yesDelete": "Ano, smazat",
"movedToTrash": "Přesunuto do koše",
@@ -202,37 +372,143 @@
"deleteFromBoth": "Odstranit z obou",
"newAlbum": "Nové album",
"albums": "Alba",
+ "memoryCount": "{count, plural, =0{žádné vzpomínky} one{{formattedCount} vzpomínka} few{{formattedCount} vzpomínky} other{{formattedCount} vzpomínek}}",
+ "@memoryCount": {
+ "description": "The text to display the number of memories",
+ "type": "text",
+ "placeholders": {
+ "count": {
+ "example": "1",
+ "type": "int"
+ },
+ "formattedCount": {
+ "type": "String",
+ "example": "11.513, 11,511"
+ }
+ }
+ },
+ "selectedPhotos": "Vybráno: {count}",
+ "@selectedPhotos": {
+ "description": "Display the number of selected photos",
+ "type": "text",
+ "placeholders": {
+ "count": {
+ "example": "5",
+ "type": "int"
+ }
+ }
+ },
+ "selectedPhotosWithYours": "Vybráno: {count} ({yourCount} tvých)",
+ "@selectedPhotosWithYours": {
+ "description": "Display the number of selected photos, including the number of selected photos owned by the user",
+ "type": "text",
+ "placeholders": {
+ "count": {
+ "example": "12",
+ "type": "int"
+ },
+ "yourCount": {
+ "example": "2",
+ "type": "int"
+ }
+ }
+ },
"advancedSettings": "Pokročilé",
"@advancedSettings": {
"description": "The text to display in the advanced settings section"
},
+ "photoGridSize": "Velikost mřížky fotografií",
+ "manageDeviceStorage": "Spravovat mezipaměť zařízení",
+ "manageDeviceStorageDesc": "Zkontrolovat a vymazat místní úložiště mezipaměti.",
+ "machineLearning": "Strojové učení",
+ "mlConsent": "Povolit strojové učení",
+ "mlConsentTitle": "Povolit strojové učení?",
+ "mlConsentDescription": "Pokud povolíte strojové učení, Ente bude extrahovat informace, jako je geometrie obličeje, ze souborů, včetně těch, které s vámi byly sdíleny.\n\nTo se bude dít na vašem zařízení a veškeré generované biometrické informace budou koncově šifrovány.",
+ "mlConsentPrivacy": "Klikněte zde pro více informací o této funkci v našich zásadách ochrany osobních údajů",
+ "mlConsentConfirmation": "Chápu a chci umožnit strojové učení",
+ "magicSearch": "Magické vyhledávání",
+ "discover": "Objevit",
+ "@discover": {
+ "description": "The text to display for the discover section under which we show receipts, screenshots, sunsets, greenery, etc."
+ },
+ "discover_identity": "Identita",
"discover_screenshots": "Snímky obrazovky",
+ "discover_receipts": "Účtenky",
+ "discover_notes": "Poznámky",
+ "discover_memes": "Memy",
+ "discover_visiting_cards": "Vizitky",
+ "discover_babies": "Děti",
"discover_pets": "Domácí mazlíčci",
"discover_selfies": "Selfie",
"discover_wallpapers": "Pozadí",
"discover_food": "Jídlo",
+ "discover_celebrations": "Oslavy",
+ "discover_sunset": "Západ slunce",
+ "discover_hills": "Kopce",
+ "discover_greenery": "Zeleň",
+ "mlIndexingDescription": "Vezměte prosím na vědomí, že strojové učení bude mít za následek vyšší využití sítě a baterie, dokud nebudou všechny položky zaindexovány. Pro rychlejší indexování zvažte použití desktopové aplikace, všechny výsledky budou synchronizovány automaticky.",
+ "loadingModel": "Stahování modelů...",
+ "waitingForWifi": "Čekání na WiFi...",
+ "status": "Stav",
+ "indexedItems": "Indexovaných položek",
+ "pendingItems": "Čekající položky",
"clearIndexes": "Smazat indexy",
"selectFoldersForBackup": "Vyberte složky pro zálohování",
+ "selectedFoldersWillBeEncryptedAndBackedUp": "Vybrané složky budou šifrovány a zálohovány",
"unselectAll": "Zrušit výběr",
"selectAll": "Vybrat vše",
"skip": "Přeskočit",
+ "updatingFolderSelection": "Aktualizuji výběr složek...",
+ "itemCount": "{count, plural, one{{count} položka} few{{count} položky} other{{count} položek}}",
+ "deleteItemCount": "{count, plural, =1 {Smazat {count} položku} few{Smazat {count} položky} other {Smazat {count} položek}}",
+ "duplicateItemsGroup": "{count} souborů, {formattedSize} každý",
+ "@duplicateItemsGroup": {
+ "description": "Display the number of duplicate files and their size",
+ "type": "text",
+ "placeholders": {
+ "count": {
+ "example": "12",
+ "type": "int"
+ },
+ "formattedSize": {
+ "example": "2.3 MB",
+ "type": "String"
+ }
+ }
+ },
+ "showMemories": "Zobrazit vzpomínky",
+ "yearsAgo": "{count, plural, one{Před {count} rokem} other{Před {count} lety}}",
+ "backupSettings": "Nastavení zálohování",
"backupStatus": "Stav zálohování",
+ "backupStatusDescription": "Položky, které byly zálohovány, se zobrazí zde",
+ "backupOverMobileData": "Zálohovat přes mobilní data",
+ "backupVideos": "Zálohovat videa",
+ "disableAutoLock": "Zakázat zámek obrazovky",
+ "deviceLockExplanation": "Deaktivujte zámek obrazovky zařízení, když je Ente v popředí a probíhá zálohování. To obvykle není nutné, ale může to pomoci urychlit velké nahrávání a počáteční import velkých knihoven.",
+ "about": "O aplikaci",
"weAreOpenSource": "Jsme open source!",
"privacy": "Soukromí",
"terms": "Podmínky",
"checkForUpdates": "Zkontrolovat aktualizace",
"checkStatus": "Zkontrolovat stav",
"checking": "Probíhá kontrola...",
+ "youAreOnTheLatestVersion": "Máte nejnovější verzi",
"account": "Účet",
"manageSubscription": "Spravovat předplatné",
+ "authToChangeYourEmail": "Pro změnu e-mailové adresy se prosím ověřte",
"changePassword": "Změnit heslo",
+ "authToChangeYourPassword": "Pro změnu hesla se prosím ověřte",
+ "emailVerificationToggle": "Ověření emailem",
+ "authToChangeEmailVerificationSetting": "Pro změnu ověření pomocí emailu se musíte ověřit",
"exportYourData": "Exportujte svá data",
"logout": "Odhlásit se",
+ "authToInitiateAccountDeletion": "Pro zahájení smazání účtu se prosím ověřte",
"areYouSureYouWantToLogout": "Opravdu se chcete odhlásit?",
"yesLogout": "Ano, odhlásit se",
"aNewVersionOfEnteIsAvailable": "Je dostupná nová verze Ente.",
"update": "Aktualizovat",
"installManually": "Instalovat manuálně",
+ "criticalUpdateAvailable": "K dispozici je důležitá aktualizace",
"updateAvailable": "Je k dispozici aktualizace",
"ignoreUpdate": "Ignorovat",
"downloading": "Stahuji...",
@@ -241,14 +517,67 @@
"retry": "Opakovat",
"backedUpFolders": "Zálohované složky",
"backup": "Zálohovat",
+ "freeUpDeviceSpace": "Uvolnit místo na zařízení",
+ "freeUpDeviceSpaceDesc": "Uvolněte místo ve svém zařízení vymazáním souborů, které již byly zálohovány.",
+ "allClear": "✨ Vše v pořádku",
+ "noDeviceThatCanBeDeleted": "Na tomto zařízení nemáte žádné soubory, které by mohly být odstraněny",
"removeDuplicates": "Odstranit duplicity",
+ "removeDuplicatesDesc": "Zkontrolujte a odstraňte soubory, které jsou přesnými duplikáty.",
+ "viewLargeFiles": "Velké soubory",
+ "viewLargeFilesDesc": "Zobrazit soubory, které zabírají nejvíce místa v úložišti.",
"noDuplicates": "✨ Žádné duplicity",
+ "youveNoDuplicateFilesThatCanBeCleared": "Nemáte žádné duplicitní soubory, které by mohly být odstraněny",
+ "success": "Úspěch",
"rateUs": "Ohodnoť nás",
+ "remindToEmptyDeviceTrash": "Vyprázdněte také složku \"Nedávno smazané\" v části \"Nastavení\" -> \"Úložiště\", abyste uvolnili místo",
+ "youHaveSuccessfullyFreedUp": "Úspěšně jste uvolnili {storageSaved}!",
+ "@youHaveSuccessfullyFreedUp": {
+ "description": "The text to display when the user has successfully freed up storage",
+ "type": "text",
+ "placeholders": {
+ "storageSaved": {
+ "example": "1.2 GB",
+ "type": "String"
+ }
+ }
+ },
+ "remindToEmptyEnteTrash": "Vyprázdněte také \"Koš\", abyste získali uvolněné místo",
+ "sparkleSuccess": "✨ Úspěch",
+ "duplicateFileCountWithStorageSaved": "Vyčistili jste {count, plural, one{{count} duplicitní soubor} few{{count} duplicitní soubory} other{{count} duplicitních souborů}}, a ušetřili jste {storageSaved}!",
+ "@duplicateFileCountWithStorageSaved": {
+ "description": "The text to display when the user has successfully cleaned up duplicate files",
+ "type": "text",
+ "placeholders": {
+ "count": {
+ "example": "1",
+ "type": "int"
+ },
+ "storageSaved": {
+ "example": "1.2 GB",
+ "type": "String"
+ }
+ }
+ },
+ "familyPlans": "Rodinné tarify",
+ "referrals": "Doporučení",
"notifications": "Notifikace",
+ "sharedPhotoNotifications": "Nové sdílené fotky",
+ "sharedPhotoNotificationsExplanation": "Dostávejte oznámení, když někdo přidá fotografii do sdíleného alba, jehož jste členem",
+ "advanced": "Pokročilé",
"general": "Obecné",
"security": "Zabezpečení",
+ "authToViewYourRecoveryKey": "Pro zobrazení vašeho obnovovacího klíče se prosím ověřte",
+ "twofactor": "Dvoufázové",
+ "authToConfigureTwofactorAuthentication": "Pro konfiguraci dvoufázového ověřování se prosím ověřte",
+ "lockscreen": "Zámek obrazovky",
+ "authToChangeLockscreenSetting": "Pro změnu nastavení uzamčení obrazovky se prosím ověřte",
+ "viewActiveSessions": "Zobrazit aktivní relace",
+ "authToViewYourActiveSessions": "Pro zobrazení aktivních relací se prosím ověřte",
+ "disableTwofactor": "Vypnout dvoufázové ověřování",
+ "confirm2FADisable": "Opravdu chcete deaktivovat dvoufázové ověřování?",
"no": "Ne",
"yes": "Ano",
+ "social": "Sociální sítě",
"rateUsOnStore": "Ohodnoťte nás na {storeName}",
"blog": "Blog",
"merchandise": "E-shop",
@@ -257,6 +586,7 @@
"matrix": "Matrix",
"discord": "Discord",
"reddit": "Reddit",
+ "yourStorageDetailsCouldNotBeFetched": "Vaše údaje o úložišti nelze načíst",
"reportABug": "Nahlásit chybu",
"reportBug": "Nahlásit chybu",
"suggestFeatures": "Navrhnout funkce",
@@ -264,14 +594,39 @@
"theme": "Motiv",
"lightTheme": "Světlý",
"darkTheme": "Tmavý",
- "systemTheme": "Systém",
- "selectYourPlan": "Vyberte svůj plán",
+ "systemTheme": "Podle systému",
+ "freeTrial": "Bezplatná zkušební verze",
+ "selectYourPlan": "Vyberte svůj tarif",
+ "enteSubscriptionPitch": "Ente uchovává vaše vzpomínky, takže jsou vám vždy k dispozici, i když ztratíte své zařízení.",
+ "enteSubscriptionShareWithFamily": "Do vašeho tarifu lze přidat i vaši rodinu.",
+ "currentUsageIs": "Aktuálně využíváte ",
+ "@currentUsageIs": {
+ "description": "This text is followed by storage usage",
+ "examples": {
+ "0": "Current usage is 1.2 GB"
+ },
+ "type": "text"
+ },
"faqs": "Často kladené dotazy",
"renewsOn": "Předplatné se obnoví {endDate}",
+ "freeTrialValidTill": "Bezplatná zkušební verze platná do {endDate}",
+ "validTill": "Platné do {endDate}",
+ "addOnValidTill": "Váš doplněk {storageAmount} je platný do {endDate}",
+ "playStoreFreeTrialValidTill": "Bezplatná zkušební verze platná do {endDate}.\nPoté si můžete vybrat placený tarif.",
+ "subWillBeCancelledOn": "Vaše předplatné bude zrušeno dne {endDate}",
"subscription": "Předplatné",
"paymentDetails": "Platební údaje",
+ "manageFamily": "Spravovat rodinu",
+ "contactToManageSubscription": "Kontaktujte nás na adrese support@ente.io, abyste mohli spravovat své předplatné {provider}.",
+ "renewSubscription": "Obnovit předplatné",
+ "cancelSubscription": "Zrušit předplatné",
+ "areYouSureYouWantToRenew": "Opravdu chcete obnovit?",
"yesRenew": "Ano, obnovit",
+ "areYouSureYouWantToCancel": "Opravdu chcete zrušit?",
"yesCancel": "Ano, zrušit",
+ "failedToRenew": "Nepodařilo se obnovit",
+ "failedToCancel": "Zrušení se nezdařilo",
+ "twoMonthsFreeOnYearlyPlans": "Získejte 2 měsíce zdarma při ročních plánech",
"monthly": "Měsíčně",
"@monthly": {
"description": "The text to display for monthly plans",
@@ -282,15 +637,102 @@
"description": "The text to display for yearly plans",
"type": "text"
},
+ "confirmPlanChange": "Potvrdit změnu tarifu",
+ "areYouSureYouWantToChangeYourPlan": "Opravdu chcete změnit svůj tarif?",
+ "youCannotDowngradeToThisPlan": "Na tento nižší tarif nelze přejít",
+ "cancelOtherSubscription": "Nejprve zrušte své stávající předplatné u {paymentProvider}",
+ "@cancelOtherSubscription": {
+ "description": "The text to display when the user has an existing subscription from a different payment provider",
+ "type": "text",
+ "placeholders": {
+ "paymentProvider": {
+ "example": "Apple",
+ "type": "String"
+ }
+ }
+ },
+ "optionalAsShortAsYouLike": "Volitelné, tak krátké, jak chcete...",
"send": "Odeslat",
+ "askCancelReason": "Vaše předplatné bylo zrušeno. Chcete sdělit důvod?",
+ "thankYouForSubscribing": "Děkujeme za aktivaci předplatného!",
+ "yourPurchaseWasSuccessful": "Váš nákup byl úspěšný",
+ "yourPlanWasSuccessfullyUpgraded": "Váš tarif byl úspěšně změněn na vyšší",
+ "yourPlanWasSuccessfullyDowngraded": "Váš tarif byl úspěšně změněn na nižší",
+ "yourSubscriptionWasUpdatedSuccessfully": "Vaše předplatné bylo úspěšně aktualizováno",
+ "googlePlayId": "Google Play ID",
"appleId": "Apple ID",
+ "playstoreSubscription": "Předplatné PlayStore",
+ "appstoreSubscription": "Předplatné AppStore",
+ "subAlreadyLinkedErrMessage": "Vaše {id} je již propojeno s jiným účtem Ente.\nPokud chcete použít své {id} s tímto účtem, kontaktujte prosím naši podporu",
+ "visitWebToManage": "Pro správu předplatného navštivte web.ente.io",
+ "couldNotUpdateSubscription": "Předplatné nelze aktualizovat",
+ "pleaseContactSupportAndWeWillBeHappyToHelp": "Kontaktujte nás na adrese support@ente.io a rádi Vám pomůžeme!",
+ "paymentFailed": "Platba se nezdařila",
+ "paymentFailedTalkToProvider": "Pokud vám byla účtována platba, obraťte se na podporu {providerName}",
+ "@paymentFailedTalkToProvider": {
+ "description": "The text to display when the payment failed",
+ "type": "text",
+ "placeholders": {
+ "providerName": {
+ "example": "AppStore|PlayStore",
+ "type": "String"
+ }
+ }
+ },
+ "continueOnFreeTrial": "Pokračovat v bezplatné zkušební verzi",
+ "areYouSureYouWantToExit": "Určitě chcete odejít?",
"thankYou": "Děkujeme",
+ "failedToVerifyPaymentStatus": "Nepodařilo se ověřit stav platby",
+ "pleaseWaitForSometimeBeforeRetrying": "Počkejte prosím chvíli a zkuste to znovu",
+ "paymentFailedMessage": "Vaše platba se bohužel nezdařila. Kontaktujte prosím podporu a my vám pomůžeme!",
+ "youAreOnAFamilyPlan": "Máte rodinný tarif!",
+ "contactFamilyAdmin": "Pro správu předplatného kontaktujte {familyAdminEmail}",
+ "leaveFamily": "Opustit rodinu",
+ "areYouSureThatYouWantToLeaveTheFamily": "Opravdu chcete opustit rodinný tarif?",
"leave": "Odejít",
+ "rateTheApp": "Ohodnotit aplikaci",
+ "startBackup": "Spustit zálohování",
+ "noPhotosAreBeingBackedUpRightNow": "Momentálně nejsou zálohovány žádné fotky",
+ "preserveMore": "Zachovat více",
+ "grantFullAccessPrompt": "Povolte přístup ke všem fotkám v aplikaci Nastavení",
+ "allowPermTitle": "Povolit přístup k fotografiím",
+ "allowPermBody": "Povolte v nastavení přístup k vašim fotkám, aby Ente mohl zobrazit a zálohovat vaši knihovnu.",
"openSettings": "Otevřít Nastavení",
+ "selectMorePhotos": "Vybrat více fotografií",
+ "existingUser": "Existující uživatel",
+ "privateBackups": "Soukromé zálohy",
+ "forYourMemories": "pro vaše vzpomínky",
+ "endtoendEncryptedByDefault": "Koncově šifrováno ve výchozím nastavení",
"safelyStored": "Bezpečně uloženo",
+ "atAFalloutShelter": "v protiatomovém krytu",
+ "designedToOutlive": "Navrženo k přežití",
+ "available": "Dostupné",
"everywhere": "všude",
- "pleaseLoginAgain": "Přihlaste se, prosím, znovu",
+ "androidIosWebDesktop": "Android, iOS, Web, Desktop",
+ "mobileWebDesktop": "Mobile, Web, Desktop",
+ "newToEnte": "Nový uživatel Ente",
+ "pleaseLoginAgain": "Prosím, přihlaste se znovu",
+ "autoLogoutMessage": "Z důvodu technické poruchy jste byli odhlášeni. Omlouváme se za způsobené nepříjemnosti.",
+ "yourSubscriptionHasExpired": "Vaše předplatné vypršelo",
+ "storageLimitExceeded": "Překročen limit úložiště",
"upgrade": "Upgradovat",
+ "raiseTicket": "Vytvořit ticket",
+ "@raiseTicket": {
+ "description": "Button text for raising a support tickets in case of unhandled errors during backup",
+ "type": "text"
+ },
+ "backupFailed": "Záloha se nezdařila",
+ "sorryBackupFailedDesc": "Omlouváme se, tento soubor nelze právě teď zálohovat. Zkusíme to znovu později.",
+ "couldNotBackUpTryLater": "Vaše data se nepodařilo zálohovat.\nZkusíme to znovu později.",
+ "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": "Ente může šifrovat a uchovávat soubory pouze v případě, že mu k nim udělíte přístup",
+ "pleaseGrantPermissions": "Prosím, udělte oprávnění",
+ "grantPermission": "Udělit oprávnění",
+ "privateSharing": "Soukromé sdílení",
+ "shareOnlyWithThePeopleYouWant": "Sdílejte pouze s lidmi, které chcete",
+ "usePublicLinksForPeopleNotOnEnte": "Používejte veřejné odkazy pro osoby, které nejsou na Ente",
+ "allowPeopleToAddPhotos": "Umožnit lidem přidávat fotografie",
+ "shareAnAlbumNow": "Sdílejte album nyní",
+ "collectEventPhotos": "Shromáždit fotografie z akce",
"sessionExpired": "Relace vypršela",
"loggingOut": "Odhlašování...",
"@onDevice": {
@@ -303,91 +745,361 @@
"type": "text"
},
"onEnte": "Na ente",
+ "name": "Název",
"newest": "Nejnovější",
+ "lastUpdated": "Naposledy aktualizováno",
"deleteEmptyAlbums": "Smazat prázdná alba",
"deleteEmptyAlbumsWithQuestionMark": "Smazat prázdná alba?",
+ "deleteAlbumsDialogBody": "Tím se odstraní všechna prázdná alba. To je užitečné, pokud chcete zredukovat nepořádek ve vašem seznamu alb.",
+ "deleteProgress": "Mazání {currentlyDeleting} / {totalCount}",
+ "genericProgress": "Zpracování {currentlyProcessing} / {totalCount}",
+ "@genericProgress": {
+ "description": "Generic progress text to display when processing multiple items",
+ "type": "text",
+ "placeholders": {
+ "currentlyProcessing": {
+ "example": "1",
+ "type": "int"
+ },
+ "totalCount": {
+ "example": "10",
+ "type": "int"
+ }
+ }
+ },
"permanentlyDelete": "Trvale odstranit",
+ "canOnlyCreateLinkForFilesOwnedByYou": "Můžete vytvářet odkazy pouze na soubory, které vlastníte",
"publicLinkCreated": "Veřejný odkaz vytvořen",
+ "youCanManageYourLinksInTheShareTab": "Své odkazy můžete spravovat na kartě Sdílení.",
+ "linkCopiedToClipboard": "Odkaz zkopírován do schránky",
"restore": "Obnovit",
"@restore": {
"description": "Display text for an action which triggers a restore of item from trash",
"type": "text"
},
"moveToAlbum": "Přesunout do alba",
+ "unhide": "Odkrýt",
+ "unarchive": "Zrušit archivaci",
"favorite": "Oblíbené",
+ "removeFromFavorite": "Odebrat z oblíbených",
"shareLink": "Sdílet odkaz",
+ "createCollage": "Vytvořit koláž",
+ "saveCollage": "Uložit koláž",
+ "collageSaved": "Koláž uložena do galerie",
"collageLayout": "Rozvržení",
+ "addToEnte": "Přidat do Ente",
"addToAlbum": "Přidat do alba",
"delete": "Smazat",
"hide": "Skrýt",
"share": "Sdílet",
+ "unhideToAlbum": "Odkrýt do alba",
+ "restoreToAlbum": "Obnovit do alba",
+ "moveItem": "{count, plural, =1 {Přesunout položku} other {Přesunout položky}}",
+ "@moveItem": {
+ "description": "Page title while moving one or more items to an album"
+ },
+ "addItem": "{count, plural, =1 {Přidat položku} other {Přidat položky}}",
+ "@addItem": {
+ "description": "Page title while adding one or more items to album"
+ },
+ "createOrSelectAlbum": "Vytvořit nebo vybrat album",
"selectAlbum": "Vybrat album",
"searchByAlbumNameHint": "Název alba",
+ "albumTitle": "Název alba",
"enterAlbumName": "Zadejte název alba",
"restoringFiles": "Obnovuji soubory...",
+ "movingFilesToAlbum": "Přesouvání souborů do alba...",
+ "unhidingFilesToAlbum": "Odkrývám soubory do alba",
+ "canNotUploadToAlbumsOwnedByOthers": "Nelze nahrávat do alb, která vlastní jiní uživatelé",
"uploadingFilesToAlbum": "Nahrávání souborů do alba...",
- "addedSuccessfullyTo": "Úspěšně přidáno do {albumName}",
+ "addedSuccessfullyTo": "Úspěšně přidáno do {albumName}",
+ "movedSuccessfullyTo": "Úspěšně přesunuto do {albumName}",
+ "thisAlbumAlreadyHDACollaborativeLink": "Toto album již má odkaz na spolupráci",
+ "collaborativeLinkCreatedFor": "Odkaz na spolupráci vytvořen pro {albumName}",
+ "askYourLovedOnesToShare": "Požádejte své blízké o sdílení",
"invite": "Pozvat",
+ "shareYourFirstAlbum": "Sdílet své první album",
+ "sharedWith": "Sdíleno s {emailIDs}",
"sharedWithMe": "Sdíleno se mnou",
"sharedByMe": "Sdíleno mnou",
"doubleYourStorage": "Zdvojnásobte své úložiště",
+ "referFriendsAnd2xYourPlan": "Doporučte přátele a zdvojnásobte svůj tarif",
+ "shareAlbumHint": "Otevřete album a klepněte na tlačítko sdílení v pravém horním rohu, abyste jej sdíleli.",
+ "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": "Položky zobrazují počet dní zbývajících do trvalého smazání",
+ "trashDaysLeft": "{count, plural, =0{Brzy} =1{1 den} few{{count} dny} other{{count} dní}}",
+ "@trashDaysLeft": {
+ "description": "Text to indicate number of days remaining before permanent deletion",
+ "placeholders": {
+ "count": {
+ "example": "1|2|3",
+ "type": "int"
+ }
+ }
+ },
"deleteAll": "Smazat vše",
"renameAlbum": "Přejmenovat album",
+ "convertToAlbum": "Převést na album",
+ "setCover": "Nastavit úvodní fotku",
+ "@setCover": {
+ "description": "Text to set cover photo for an album"
+ },
"sortAlbumsBy": "Seřadit podle",
"sortNewestFirst": "Od nejnovějších",
"sortOldestFirst": "Od nejstarších",
"rename": "Přejmenovat",
+ "leaveSharedAlbum": "Opustit sdílené album?",
"leaveAlbum": "Opustit album",
+ "photosAddedByYouWillBeRemovedFromTheAlbum": "Fotografie, které jste přidali, budou z alba odstraněny",
+ "youveNoFilesInThisAlbumThatCanBeDeleted": "V tomto albu nemáte žádné soubory, které lze smazat",
+ "youDontHaveAnyArchivedItems": "Nemáte žádné archivované položky.",
+ "ignoredFolderUploadReason": "Některé soubory v tomto albu jsou při nahrávání ignorovány, protože byly dříve odstraněny z Ente.",
+ "resetIgnoredFiles": "Obnovit ignorované soubory",
+ "deviceFilesAutoUploading": "Soubory přidané do tohoto alba zařízení se automaticky nahrají do Ente.",
+ "turnOnBackupForAutoUpload": "Zapněte zálohování, aby se soubory přidané do této složky zařízení automaticky nahrávaly do Ente.",
+ "noHiddenPhotosOrVideos": "Žádné skryté fotografie ani videa",
+ "toHideAPhotoOrVideo": "Pro skrytí fotky nebo videa",
+ "openTheItem": "• Otevřete položku",
+ "clickOnTheOverflowMenu": "• Klikněte na rozbalovací nabídku",
+ "click": "• Klikněte",
+ "nothingToSeeHere": "Tady není nic k vidění! 👀",
+ "unarchiveAlbum": "Odarchivovat album",
"archiveAlbum": "Archivovat album",
"calculating": "Probíhá výpočet...",
+ "pleaseWaitDeletingAlbum": "Čekejte prosím, mazání alba",
+ "searchByExamples": "• Názvy alb (např. „Fotoaparát“)\n• Typy souborů (např. „Videa“, „.gif“)\n• Roky a měsíce (např. „2022“, „leden“)\n• Svátky (např. „Vánoce“)\n• Popisy fotografií (např. „#zábava“)",
+ "youCanTrySearchingForADifferentQuery": "Můžete zkusit zadat jiný dotaz.",
"noResultsFound": "Nebyly nalezeny žádné výsledky",
+ "addedBy": "Přidáno uživatelem {emailOrName}",
+ "loadingExifData": "Načítání dat EXIF...",
+ "viewAllExifData": "Zobrazit všechna data EXIF",
+ "noExifData": "Žádná data EXIF",
+ "thisImageHasNoExifData": "Tento obrázek nemá žádné údaje exif",
"exif": "EXIF",
+ "noResults": "Žádné výsledky",
+ "weDontSupportEditingPhotosAndAlbumsThatYouDont": "Zatím nepodporujeme úpravy fotografií a alb, která nevlastníte",
+ "failedToFetchOriginalForEdit": "Nepodařilo se načíst originál pro úpravy",
"close": "Zavřít",
+ "setAs": "Nastavit jako",
+ "fileSavedToGallery": "Soubor uložen do galerie",
+ "filesSavedToGallery": "Soubory uloženy do galerie",
+ "fileFailedToSaveToGallery": "Nepodařilo se uložit soubor do galerie",
"download": "Stáhnout",
+ "pressAndHoldToPlayVideo": "Stiskněte a podržte pro přehrání videa",
+ "pressAndHoldToPlayVideoDetailed": "Stiskněte a podržte prst na obrázku, aby se spustilo přehrávání videa",
"downloadFailed": "Stahování selhalo",
- "deselectAll": "Zrušte výběr všech",
+ "deduplicateFiles": "Duplicitní soubory",
+ "deselectAll": "Zrušit výběr všech",
+ "reviewDeduplicateItems": "Prosím, zkontrolujte a smažte položky, které považujete za duplicitní.",
+ "clubByCaptureTime": "Seskupit podle doby zachycení",
+ "clubByFileName": "Seskupit podle názvu souboru",
"count": "Počet",
"totalSize": "Celková velikost",
+ "longpressOnAnItemToViewInFullscreen": "Dlouhým stiskem na položku zobrazíte v režimu celé obrazovky",
"decryptingVideo": "Dešifrování videa...",
+ "authToViewYourMemories": "Pro zobrazení svých vzpomínek se prosím ověřte",
"unlock": "Odemknout",
"freeUpSpace": "Uvolnit místo",
+ "freeUpSpaceSaving": "{count, plural, =1 {Lze jej odstranit ze zařízení, aby se uvolnilo {formattedSize} místa} other {Lze je odstranit ze zařízení, aby se uvolnilo {formattedSize} místa}}",
+ "filesBackedUpInAlbum": "{count, plural, one {1 soubor v tomto albu byl bezpečně zálohován} few {{formattedNumber} soubory v tomto albu byly bezpečně zálohovány} other {{formattedNumber} souborů v tomto albu bylo bezpečně zálohováno}}",
+ "@filesBackedUpInAlbum": {
+ "description": "Text to tell user how many files have been backed up in the album",
+ "placeholders": {
+ "count": {
+ "example": "1",
+ "type": "int"
+ },
+ "formattedNumber": {
+ "content": "{formattedNumber}",
+ "example": "1,000",
+ "type": "String"
+ }
+ }
+ },
+ "filesBackedUpFromDevice": "{count, plural, one {1 soubor na tomto zařízení byl bezpečně zálohován} few {{formattedNumber} soubory na tomto zařízení byly bezpečně zálohovány} other {{formattedNumber} souborů na tomto zařízení bylo bezpečně zálohováno}}",
+ "@filesBackedUpFromDevice": {
+ "description": "Text to tell user how many files have been backed up from this device",
+ "placeholders": {
+ "count": {
+ "example": "1",
+ "type": "int"
+ },
+ "formattedNumber": {
+ "content": "{formattedNumber}",
+ "example": "1,000",
+ "type": "String"
+ }
+ }
+ },
+ "@freeUpSpaceSaving": {
+ "description": "Text to tell user how much space they can free up by deleting items from the device"
+ },
+ "freeUpAccessPostDelete": "Stále k {count, plural, =1 {němu} other {nim}} máte přístup na Ente, pokud máte aktivní předplatné",
+ "@freeUpAccessPostDelete": {
+ "placeholders": {
+ "count": {
+ "example": "1",
+ "type": "int"
+ }
+ }
+ },
+ "freeUpAmount": "Uvolnit {sizeInMBorGB}",
+ "thisEmailIsAlreadyInUse": "Tato e-mailová adresa je již používána",
+ "incorrectCode": "Nesprávný kód",
+ "authenticationFailedPleaseTryAgain": "Přihlášení se nezdařilo, zkuste to znovu",
+ "verificationFailedPleaseTryAgain": "Ověření se nezdařilo, zkuste to znovu",
+ "authenticating": "Ověřování...",
+ "authenticationSuccessful": "Ověření bylo úspěšné!",
+ "incorrectRecoveryKey": "Nesprávný obnovovací klíč",
+ "theRecoveryKeyYouEnteredIsIncorrect": "Vámi zadaný obnovovací klíč je nesprávný",
+ "twofactorAuthenticationSuccessfullyReset": "Dvoufázové ověření bylo úspěšně obnoveno",
+ "pleaseVerifyTheCodeYouHaveEntered": "Zkontrolujte prosím kód, který jste zadali",
+ "pleaseContactSupportIfTheProblemPersists": "Pokud problém přetrvává, kontaktujte prosím podporu",
+ "twofactorAuthenticationHasBeenDisabled": "Dvoufázové ověřování bylo deaktivováno",
+ "sorryTheCodeYouveEnteredIsIncorrect": "Omlouváme se, zadaný kód je nesprávný",
+ "yourVerificationCodeHasExpired": "Váš ověřovací kód vypršel",
+ "emailChangedTo": "E-mail změněn na {newEmail}",
"verifying": "Ověřování...",
+ "disablingTwofactorAuthentication": "Vypínání dvoufázového ověřování...",
+ "allMemoriesPreserved": "Všechny vzpomínky zachovány",
"loadingGallery": "Načítání galerie...",
"syncing": "Synchronizace...",
+ "encryptingBackup": "Šifrování zálohy...",
"syncStopped": "Synchronizace zastavena",
+ "syncProgress": "{completed}/{total} vzpomínek zachováno",
+ "uploadingMultipleMemories": "Zachování {count} vzpomínek...",
+ "@uploadingMultipleMemories": {
+ "description": "Text to tell user how many memories are being preserved",
+ "placeholders": {
+ "count": {
+ "type": "String"
+ }
+ }
+ },
+ "uploadingSingleMemory": "Zachování 1 vzpomínky...",
+ "@syncProgress": {
+ "description": "Text to tell user how many memories have been preserved",
+ "placeholders": {
+ "completed": {
+ "type": "String"
+ },
+ "total": {
+ "type": "String"
+ }
+ }
+ },
"archiving": "Archivování...",
+ "unarchiving": "Probíhá odebírání z archivu...",
+ "successfullyArchived": "Úspěšně archivováno",
+ "successfullyUnarchived": "Úspěšně odebráno z archivu",
"renameFile": "Přejmenovat soubor",
"enterFileName": "Zadejte název souboru",
"filesDeleted": "Soubory odstraněny",
+ "selectedFilesAreNotOnEnte": "Vybrané soubory nejsou na Ente",
+ "thisActionCannotBeUndone": "Tuto akci nelze vrátit zpět",
"emptyTrash": "Vyprázdnit koš?",
+ "permDeleteWarning": "Veškeré položky v koši budou trvale smazány\n\nTuto akci nelze vrátit zpět",
"empty": "Vyprázdnit",
+ "couldNotFreeUpSpace": "Nelze uvolnit místo",
+ "permanentlyDeleteFromDevice": "Trvale smazat ze zařízení?",
+ "someOfTheFilesYouAreTryingToDeleteAre": "Některé soubory, které se pokoušíte smazat, jsou dostupné pouze na vašem zařízení a po smazání je nelze obnovit",
+ "theyWillBeDeletedFromAllAlbums": "Budou odstraněny ze všech alb.",
+ "someItemsAreInBothEnteAndYourDevice": "Některé položky jsou jak v Ente, tak ve vašem zařízení.",
+ "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": "Vybrané položky budou odstraněny ze všech alb a přesunuty do koše.",
+ "theseItemsWillBeDeletedFromYourDevice": "Tyto položky budou z vašeho zařízení odstraněny.",
+ "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Zdá se, že došlo k chybě. Zkuste to prosím znovu později. Pokud chyba přetrvává, kontaktujte prosím náš tým podpory.",
+ "error": "Chyba",
+ "tempErrorContactSupportIfPersists": "Zdá se, že došlo k chybě. Zkuste to prosím znovu později. Pokud chyba přetrvává, kontaktujte prosím náš tým podpory.",
+ "networkHostLookUpErr": "Nelze se připojit k Ente. Zkontrolujte nastavení sítě a pokud chyba přetrvává, kontaktujte podporu.",
+ "networkConnectionRefusedErr": "Nelze se připojit k Ente, zkuste to prosím znovu později. Pokud chyba přetrvává, kontaktujte prosím podporu.",
"cachedData": "Data uložená v mezipaměti",
"clearCaches": "Vymazat mezipaměť",
+ "remoteImages": "Vzdálené obrázky",
+ "remoteVideos": "Vzdálená videa",
+ "remoteThumbnails": "Vzdálené miniatury",
+ "pendingSync": "Čeká na synchronizaci",
+ "localGallery": "Místní galerie",
+ "todaysLogs": "Dnešní záznamy",
+ "viewLogs": "Zobrazit záznamy",
+ "logsDialogBody": "Tím se odešlou protokoly, které nám pomohou vyřešit váš problém. Upozorňujeme, že budou zahrnuty názvy souborů, aby bylo možné sledovat problémy s konkrétními soubory.",
+ "preparingLogs": "Příprava záznamů...",
+ "emailYourLogs": "Zašlete své protokoly e-mailem",
+ "pleaseSendTheLogsTo": "Záznamy prosím zašlete na adresu \n{toEmail}",
+ "copyEmailAddress": "Zkopírovat e-mailovou adresu",
"exportLogs": "Exportovat logy",
+ "pleaseEmailUsAt": "Prosím, pošlete nám e-mail na adresu {toEmail}",
"dismiss": "Zrušit",
"didYouKnow": "Věděli jste?",
+ "loadingMessage": "Načítání vašich fotografií...",
+ "loadMessage1": "Své předplatné můžete sdílet se svou rodinou",
+ "loadMessage2": "Dosud jsme uchovali více než 200 milionů vzpomínek",
+ "loadMessage3": "Vaše data uchováváme ve 3 kopiích, z nichž jedna je uložena v podzemním protiatomovém krytu",
+ "loadMessage4": "Všechny naše aplikace jsou open source",
+ "loadMessage5": "Náš zdrojový kód a kryptografie byly podrobeny externímu auditu",
+ "loadMessage6": "Můžete sdílet odkazy na svá alba se svými blízkými",
+ "loadMessage7": "Naše mobilní aplikace běží na pozadí, šifruje a zálohuje všechny nové fotografie, které pořídíte",
+ "loadMessage8": "web.ente.io má šikovný nástroj pro nahrávání souborů",
+ "loadMessage9": "K bezpečnému šifrování vašich dat používáme Xchacha20Poly1305",
+ "photoDescriptions": "Popisky fotografií",
+ "fileTypesAndNames": "Typy a názvy souborů",
"location": "Poloha",
"moments": "Momenty",
+ "searchFaceEmptySection": "Po dokončení indexování se zde zobrazí lidé",
+ "searchDatesEmptySection": "Hledat podle data, měsíce nebo roku",
+ "searchLocationEmptySection": "Seskupte fotografie pořízené v určitém okruhu od fotografie",
+ "searchPeopleEmptySection": "Pozvěte kamarády a uvidíte všechny fotografie, které zde sdíleli",
"searchAlbumsEmptySection": "Alba",
+ "searchFileTypesAndNamesEmptySection": "Typy a názvy souborů",
+ "searchCaptionEmptySection": "Přidejte do informací o fotografii popisky jako \"#výlet\", abyste je zde mohli rychle najít",
"language": "Jazyk",
"selectLanguage": "Vybrat jazyk",
+ "locationName": "Název místa",
"addLocation": "Přidat polohu",
+ "groupNearbyPhotos": "Seskupit fotografie pořízené v okolí",
+ "kiloMeterUnit": "km",
"addLocationButton": "Přidat",
"radius": "Rádius",
+ "locationTagFeatureDescription": "Značka polohy seskupuje všechny fotografie, které byly pořízeny v určitém okruhu od fotografie",
+ "galleryMemoryLimitInfo": "Až 1000 vzpomínek zobrazených v galerii",
"save": "Uložit",
+ "centerPoint": "Středový bod",
+ "pickCenterPoint": "Vyberte středový bod",
+ "useSelectedPhoto": "Použít vybranou fotografii",
+ "resetToDefault": "Obnovit výchozí",
+ "@resetToDefault": {
+ "description": "Button text to reset cover photo to default"
+ },
"edit": "Upravit",
"deleteLocation": "Odstranit polohu",
"rotateLeft": "Otočit doleva",
"flip": "Překlopit",
"rotateRight": "Otočit doprava",
"saveCopy": "Uložit kopii",
+ "light": "Světlý",
"color": "Barva",
"yesDiscardChanges": "Ano, zahodit změny",
+ "doYouWantToDiscardTheEditsYouHaveMade": "Chcete zrušit provedené úpravy?",
+ "saving": "Ukládání...",
+ "editsSaved": "Úpravy uloženy",
+ "oopsCouldNotSaveEdits": "Jejda, nelze uložit úpravy",
+ "distanceInKMUnit": "km",
+ "@distanceInKMUnit": {
+ "description": "Unit for distance in km"
+ },
"dayToday": "Dnes",
"dayYesterday": "Včera",
"storage": "Úložiště",
"usedSpace": "Využité místo",
"storageBreakupFamily": "Rodina",
+ "storageBreakupYou": "Vy",
+ "@storageBreakupYou": {
+ "description": "Label to indicate how much storage you are using when you are part of a family plan"
+ },
+ "storageUsageInfo": "{usedAmount} {usedStorageUnit} z {totalAmount} {totalStorageUnit} použito",
+ "@storageUsageInfo": {
+ "description": "Example: 1.2 GB of 2 GB used or 100 GB or 2TB used"
+ },
+ "availableStorageSpace": "{freeAmount} {storageUnit} volných",
+ "appVersion": "Verze: {versionValue}",
"verifyIDLabel": "Ověřit",
"fileInfoAddDescHint": "Přidat popis...",
"editLocationTagTitle": "Upravit lokalitu",
@@ -395,8 +1107,18 @@
"@setLabel": {
"description": "Label of confirm button to add a new custom radius to the radius selector of a location tag"
},
+ "setRadius": "Nastavit poloměr",
"familyPlanPortalTitle": "Rodina",
- "androidBiometricSuccess": "Úspěšně dokončeno",
+ "familyPlanOverview": "Přidejte 5 členů rodiny do svého stávajícího tarifu bez dalších poplatků.\n\nKaždý člen dostane svůj vlastní soukromý prostor a nemůže vidět soubory ostatních členů, pokud nejsou sdílené.\n\nRodinné tarify jsou k dispozici zákazníkům, kteří mají placené předplatné Ente.\n\nPřihlaste se k odběru a začněte hned teď!",
+ "androidBiometricHint": "Ověřte svou identitu",
+ "@androidBiometricHint": {
+ "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters."
+ },
+ "androidBiometricNotRecognized": "Nerozpoznáno. Zkuste znovu.",
+ "@androidBiometricNotRecognized": {
+ "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters."
+ },
+ "androidBiometricSuccess": "Úspěch",
"@androidBiometricSuccess": {
"description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters."
},
@@ -404,111 +1126,706 @@
"@androidCancelButton": {
"description": "Message showed on a button that the user can click to leave the current dialog. It is used on Android side. Maximum 30 characters."
},
+ "androidSignInTitle": "Je požadováno ověření",
+ "@androidSignInTitle": {
+ "description": "Message showed as a title in a dialog which indicates the user that they need to scan biometric to continue. It is used on Android side. Maximum 60 characters."
+ },
"androidBiometricRequiredTitle": "Je požadováno biometrické ověření",
"@androidBiometricRequiredTitle": {
"description": "Message showed as a title in a dialog which indicates the user has not set up biometric authentication on their device. It is used on Android side. Maximum 60 characters."
},
- "goToSettings": "Jít do nastavení",
+ "androidDeviceCredentialsRequiredTitle": "Jsou vyžadovány přihlašovací údaje zařízení",
+ "@androidDeviceCredentialsRequiredTitle": {
+ "description": "Message showed as a title in a dialog which indicates the user has not set up credentials authentication on their device. It is used on Android side. Maximum 60 characters."
+ },
+ "androidDeviceCredentialsSetupDescription": "Jsou vyžadovány přihlašovací údaje zařízení",
+ "@androidDeviceCredentialsSetupDescription": {
+ "description": "Message advising the user to go to the settings and configure device credentials on their device. It shows in a dialog on Android side."
+ },
+ "goToSettings": "Přejít do nastavení",
"@goToSettings": {
"description": "Message showed on a button that the user can click to go to settings pages from the current dialog. It is used on both Android and iOS side. Maximum 30 characters."
},
+ "androidGoToSettingsDescription": "Biometrické ověřování není na vašem zařízení nastaveno. Přejděte do části \"Nastavení\" > \"Zabezpečení\" a přidejte biometrické ověřování.",
+ "@androidGoToSettingsDescription": {
+ "description": "Message advising the user to go to the settings and configure biometric on their device. It shows in a dialog on Android side."
+ },
+ "iOSLockOut": "Biometrické ověřování je deaktivováno. Chcete-li jej aktivovat, uzamkněte a odemkněte obrazovku.",
+ "@iOSLockOut": {
+ "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side."
+ },
+ "iOSGoToSettingsDescription": "Biometrické ověřování není na vašem zařízení nastaveno. Povolte prosím Touch ID nebo Face ID na svém telefonu.",
+ "@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": {
"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."
},
+ "openstreetmapContributors": "Přispěvatelé OpenStreetMap",
+ "hostedAtOsmFrance": "Hostováno na OSM France",
"map": "Mapa",
"@map": {
"description": "Label for the map view"
},
"maps": "Mapy",
+ "enableMaps": "Povolit mapy",
+ "enableMapsDesc": "Tímto se vaše fotografie zobrazí na mapě světa.\n\nTato mapa je hostována službou Open Street Map a přesné umístění vašich fotografií není nikdy sdíleno.\n\nTuto funkci můžete kdykoli deaktivovat v nastavení.",
+ "quickLinks": "Rychlé odkazy",
+ "selectItemsToAdd": "Vyberte položky, které chcete přidat",
+ "addSelected": "Přidat vybrané",
+ "addFromDevice": "Přidat ze zařízení",
"addPhotos": "Přidat fotky",
"noPhotosFoundHere": "Zde nebyly nalezeny žádné fotky",
+ "zoomOutToSeePhotos": "Zmenšete zobrazení, abyste viděli fotografie",
+ "noImagesWithLocation": "Žádné obrázky s polohou",
"unpinAlbum": "Odepnout album",
"pinAlbum": "Připnout album",
"create": "Vytvořit",
"viewAll": "Zobrazit vše",
+ "nothingSharedWithYouYet": "Zatím s vámi nebylo nic sdíleno",
"noAlbumsSharedByYouYet": "Zatím nemáte žádná sdílená alba",
"sharedWithYou": "Sdíleno s vámi",
"sharedByYou": "Sdíleno vámi",
"inviteYourFriendsToEnte": "Pozvěte své přátelé do Ente",
"failedToDownloadVideo": "Stahování videa se nezdařilo",
+ "hiding": "Skrývání...",
+ "unhiding": "Odkrývání...",
+ "successfullyHid": "Úspěšně skryto",
+ "successfullyUnhid": "Úspěšně odkryto",
"crashReporting": "Hlášení o pádu",
+ "resumableUploads": "Obnovitelné nahrávání",
+ "addToHiddenAlbum": "Přidat do skrytého alba",
+ "moveToHiddenAlbum": "Přesunout do skrytého alba",
"fileTypes": "Typy souboru",
+ "deleteConfirmDialogBody": "Tento účet je propojen s dalšími aplikacemi Ente, pokud je používáte. Vaše nahraná data ve všech aplikacích Ente budou naplánována k odstranění a váš účet bude trvale smazán.",
+ "hearUsWhereTitle": "Jak jste se dozvěděli o společnosti Ente? (volitelné)",
+ "hearUsExplanation": "Nesledujeme instalace aplikací. Pomohlo by, kdybyste nám řekli, kde jste nás našli!",
+ "viewAddOnButton": "Zobrazit doplňky",
+ "addOns": "Doplňky",
+ "addOnPageSubtitle": "Podrobnosti o doplňcích",
"yourMap": "Vaše mapa",
+ "modifyYourQueryOrTrySearchingFor": "Upravte svůj dotaz nebo zkuste vyhledat",
+ "blackFridaySale": "Slevy Black Friday",
+ "upto50OffUntil4thDec": "Sleva až 50%, do 4. prosince.",
"photos": "Fotky",
"videos": "Videa",
+ "livePhotos": "Živé fotky",
+ "searchHint1": "Rychlé vyhledávání přímo v zařízení",
+ "searchHint2": "Data fotografií, popisy",
+ "searchHint3": "Alba, názvy souborů a typy",
+ "searchHint4": "Poloha",
+ "searchHint5": "Již brzy: Kouzelné vyhledávání tváří ✨",
+ "addYourPhotosNow": "Přidejte své fotografie nyní",
+ "searchResultCount": "{count, plural, one{Nalezen {count} výsledek} few{Nalezeny {count} výsledky} other{Nalezeno {count} výsledků}}",
+ "@searchResultCount": {
+ "description": "Text to tell user how many results were found for their search query",
+ "placeholders": {
+ "count": {
+ "example": "1|2|3",
+ "type": "int"
+ }
+ }
+ },
"faces": "Obličeje",
"people": "Lidé",
+ "contents": "Obsah",
"addNew": "Přidat nový",
"@addNew": {
"description": "Text to add a new item (location tag, album, caption etc)"
},
"contacts": "Kontakty",
"noInternetConnection": "Žádné připojení k internetu",
+ "pleaseCheckYourInternetConnectionAndTryAgain": "Zkontrolujte prosím připojení k internetu a zkuste to znovu.",
+ "signOutFromOtherDevices": "Odhlásit se z jiných zařízení",
+ "signOutOtherBody": "Pokud se domníváte, že někdo zná vaše heslo, můžete vynutit odhlášení všech ostatních zařízení, která používají váš účet.",
+ "signOutOtherDevices": "Odhlásit ostatní zařízení",
+ "doNotSignOut": "Neodhlašovat",
"editLocation": "Upravit polohu",
"selectALocation": "Vybrat polohu",
"selectALocationFirst": "Nejprve vyberte polohu",
+ "changeLocationOfSelectedItems": "Změnit umístění vybraných položek?",
+ "editsToLocationWillOnlyBeSeenWithinEnte": "Úpravy umístění budou viditelné pouze v rámci Ente",
+ "cleanUncategorized": "Vyčistit Nezařazené",
+ "cleanUncategorizedDescription": "Odeberte všechny soubory z alba Nezařazené, které se nacházejí v jiných albech",
+ "waitingForVerification": "Čekání na ověření...",
+ "passkey": "Přístupový klíč",
+ "passkeyAuthTitle": "Ověření přístupového klíče",
"loginWithTOTP": "Přihlášení pomocí TOTP",
+ "passKeyPendingVerification": "Ověření stále probíhá",
"loginSessionExpired": "Relace vypršela",
+ "loginSessionExpiredDetails": "Vaše relace vypršela. Přihlaste se prosím znovu.",
+ "verifyPasskey": "Ověřit přístupový klíč",
+ "playOnTv": "Přehrát album na televizi",
"pair": "Spárovat",
"deviceNotFound": "Zařízení nebylo nalezeno",
+ "castInstruction": "Navštivte stránku cast.ente.io na zařízení, které chcete spárovat.\n\nZadejte níže uvedený kód a album se přehraje na vaší televizi.",
"deviceCodeHint": "Zadejte kód",
+ "joinDiscord": "Připoj se na Discord",
"locations": "Lokality",
+ "addAName": "Přidat název",
+ "findThemQuickly": "Najděte je rychle",
+ "@findThemQuickly": {
+ "description": "Subtitle to indicate that the user can find people quickly by name"
+ },
+ "findPeopleByName": "Rychlé vyhledávání osob podle jména",
+ "addViewers": "{count, plural, =0 {Přidat pozorovatele} =1 {Přidat pozorovatele} other {Přidat pozorovatele}}",
+ "addCollaborators": "{count, plural, =0 {Přidat spolupracovníka} =1 {Přidat spolupracovníka} other {Přidat spolupracovníky}}",
+ "longPressAnEmailToVerifyEndToEndEncryption": "Dlouhým stisknutím e-mailu ověříte koncové šifrování.",
+ "developerSettingsWarning": "Opravdu chcete změnit nastavení pro vývojáře?",
+ "developerSettings": "Nastavení pro vývojáře",
+ "serverEndpoint": "Koncový bod serveru",
+ "invalidEndpoint": "Neplatný koncový bod",
+ "invalidEndpointMessage": "Omlouváme se, zadaný koncový bod je neplatný. Zadejte platný koncový bod a zkuste to znovu.",
+ "endpointUpdatedMessage": "Koncový bod byl úspěšně aktualizován",
+ "customEndpoint": "Připojeno k {endpoint}",
+ "createCollaborativeLink": "Vytvořit odkaz pro spolupráci",
"search": "Hledat",
+ "enterPersonName": "Zadejte jméno osoby",
+ "editEmailAlreadyLinked": "Tento e-mail je již propojen s {name}.",
+ "viewPersonToUnlink": "Zobraz {name} pro zrušení propojení",
+ "enterName": "Zadejte jméno",
"savePerson": "Uložit osobu",
"editPerson": "Upravit osobu",
"mergedPhotos": "Sloučené fotografie",
+ "orMergeWithExistingPerson": "Nebo sloučit se stávajícími",
"enterDateOfBirth": "Narozeniny (volitelné)",
"birthday": "Narozeniny",
+ "removePersonLabel": "Odebrat označení osoby",
+ "autoPairDesc": "Funkce automatického párování funguje pouze se zařízeními, která podporují Chromecast.",
+ "manualPairDesc": "Funkce \"Párovat s PINem\" funguje s jakoukoli obrazovkou, na které si chcete prohlížet své album.",
+ "connectToDevice": "Připojit k zařízení",
+ "autoCastDialogBody": "Zde uvidíte dostupná zařízení pro přenos.",
+ "autoCastiOSPermission": "V nastavení se ujistěte, že jsou pro aplikaci Ente Photos zapnutá oprávnění pro místní síť.",
+ "noDeviceFound": "Nebylo nalezeno žádné zařízení",
"stopCastingTitle": "Zastavit přenos",
+ "stopCastingBody": "Chcete přestat odesílat?",
+ "castIPMismatchTitle": "Nepodařilo se odeslat album",
+ "castIPMismatchBody": "Ujistěte se, že jste připojeni ke stejné síti jako televizor.",
+ "pairingComplete": "Párování dokončeno",
+ "savingEdits": "Ukládání úprav...",
+ "autoPair": "Automatické párování",
+ "pairWithPin": "Párovat s PINem",
+ "faceRecognition": "Rozpoznání tváře",
+ "foundFaces": "Nalezené tváře",
+ "clusteringProgress": "Průběh seskupování",
+ "trim": "Oříznout",
"crop": "Oříznout",
"rotate": "Otočit",
"left": "Doleva",
"right": "Doprava",
"whatsNew": "Co je nového",
+ "reviewSuggestions": "Zkontrolovat návrhy",
+ "review": "Zkontrolovat",
+ "useAsCover": "Použít jako náhled",
+ "notPersonLabel": "Není to {name}?",
+ "@notPersonLabel": {
+ "description": "Label to indicate that the person in the photo is not the person whose name is mentioned",
+ "placeholders": {
+ "name": {
+ "content": "{name}",
+ "type": "String"
+ }
+ }
+ },
"enable": "Povolit",
"enabled": "Zapnuto",
"moreDetails": "Další podrobnosti",
+ "enableMLIndexingDesc": "Ente podporuje strojové učení na zařízení pro rozpoznávání obličejů, magické vyhledávání a další pokročilé vyhledávací funkce",
+ "magicSearchHint": "Magické vyhledávání umožňuje vyhledávat fotografie podle jejich obsahu, např. „květina“, „červené auto“, „doklady totožnosti“",
"panorama": "Panorama",
+ "reenterPassword": "Zadejte heslo znovu",
"reenterPin": "Zadejte PIN znovu",
"deviceLock": "Zámek zařízení",
+ "pinLock": "Zámek PIN",
"next": "Další",
"setNewPassword": "Nastavit nové heslo",
"enterPin": "Zadejte PIN",
"setNewPin": "Nastavit nový PIN",
+ "appLock": "Zámek aplikace",
+ "noSystemLockFound": "Zámek systému nenalezen",
+ "tapToUnlock": "Pro odemčení klepněte",
+ "tooManyIncorrectAttempts": "Příliš mnoho neúspěšných pokusů",
+ "videoInfo": "Informace o videu",
"autoLock": "Automatické zamykání",
"immediately": "Ihned",
+ "autoLockFeatureDescription": "Čas, po kterém se aplikace zamkne po přesunutí na pozadí",
+ "hideContent": "Skrýt obsah",
+ "hideContentDescriptionAndroid": "Skrývá obsah aplikace v přepínači aplikací a zakazuje pořizování snímků obrazovky",
+ "hideContentDescriptionIos": "Skrývá obsah aplikace v přepínači aplikací",
+ "passwordStrengthInfo": "Síla hesla se počítá na základě délky hesla, použitých znaků a toho, zda se heslo objevuje v žebříčku 10 000 nejčastěji používaných hesel",
+ "noQuickLinksSelected": "Nebyly vybrány žádné rychlé odkazy",
+ "pleaseSelectQuickLinksToRemove": "Vyberte rychlé odkazy, které chcete odstranit",
+ "removePublicLinks": "Odebrat veřejné odkazy",
+ "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "Tím se odstraní veřejné odkazy všech vybraných rychlých odkazů.",
+ "guestView": "Zobrazení pro hosty",
+ "guestViewEnablePreSteps": "Chcete-li povolit zobrazení pro hosty, nastavte v systémových nastaveních přístupový kód zařízení nebo zámek obrazovky.",
+ "nameTheAlbum": "Pojmenujte album",
+ "collectPhotosDescription": "Vytvořte odkaz, na který mohou vaši přátelé nahrávat fotografie v původní kvalitě.",
+ "collect": "Sebrat",
+ "appLockDescriptions": "Vyberte si mezi výchozí uzamčenou obrazovkou zařízení a vlastní uzamčenou obrazovkou s PIN kódem nebo heslem.",
+ "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Chcete-li povolit zámek aplikace, nastavte v nastavení systému přístupový kód zařízení nebo zámek obrazovky.",
+ "authToViewPasskey": "Pro zobrazení vašeho přístupového klíče se prosím ověřte",
+ "loopVideoOn": "Přehrát video ve smyčce",
+ "loopVideoOff": "Zrušit přehrávání ve smyčce",
+ "localSyncErrorMessage": "Zdá se, že došlo k nějaké chybě, protože synchronizace místních fotografií trvá déle, než se očekávalo. Obraťte se prosím na náš tým podpory",
+ "showPerson": "Zobrazit osobu",
"sort": "Seřadit",
+ "mostRecent": "Nejnovější",
+ "mostRelevant": "Nejrelevantnější",
+ "loadingYourPhotos": "Načítání vašich fotografií...",
+ "processingImport": "Zpracovávám {folderName}...",
"personName": "Jméno osoby",
"addNewPerson": "Přidat novou osobu",
+ "addNameOrMerge": "Přidat jméno nebo sloučit",
+ "mergeWithExisting": "Sloučit s existujícím",
"newPerson": "Nová osoba",
"addName": "Přidat název",
"add": "Přidat",
+ "extraPhotosFoundFor": "Další fotografie nalezené pro {text}",
+ "@extraPhotosFoundFor": {
+ "placeholders": {
+ "text": {
+ "type": "String"
+ }
+ }
+ },
+ "extraPhotosFound": "Nalezeny další fotografie",
"configuration": "Nastavení",
+ "localIndexing": "Lokální indexování",
+ "processed": "Zpracováno",
"resetPerson": "Odstranit",
+ "areYouSureYouWantToResetThisPerson": "Opravdu chcete tuto osobu zapomenout?",
+ "allPersonGroupingWillReset": "Všechna seskupení pro tuto osobu budou zapomenuta a ztratíte všechny návrhy vytvořené pro tuto osobu",
+ "yesResetPerson": "Ano, zapomenout osobu",
+ "onlyThem": "Jen oni",
+ "checkingModels": "Kontrola modelů...",
+ "enableMachineLearningBanner": "Povolte strojové učení pro magické vyhledávání a rozpoznávání obličejů",
+ "searchDiscoverEmptySection": "Obrázky se zde zobrazí po dokončení zpracování a synchronizace",
+ "searchPersonsEmptySection": "Lidé se zde zobrazí po dokončení zpracování a synchronizace",
+ "viewersSuccessfullyAdded": "{count, plural, =0 {Přidáno 0 pozorovatelů} =1 {Přidán 1 pozorovatel} few {Přidáni {count} pozorovatelé} other {Přidáno {count} pozorovatelů}}",
+ "@viewersSuccessfullyAdded": {
+ "placeholders": {
+ "count": {
+ "type": "int",
+ "example": "2"
+ }
+ },
+ "description": "Number of viewers that were successfully added to an album."
+ },
+ "collaboratorsSuccessfullyAdded": "{count, plural, =0 {Přidáno 0 spolupracovníků} =1 {Přidán 1 spolupracovník} few {Přidáni {count} spolupracovníci} other {Přidáno {count} spolupracovníků}}",
+ "@collaboratorsSuccessfullyAdded": {
+ "placeholders": {
+ "count": {
+ "type": "int",
+ "example": "2"
+ }
+ },
+ "description": "Number of collaborators that were successfully added to an album."
+ },
+ "accountIsAlreadyConfigured": "Účet je již nakonfigurován.",
+ "sessionIdMismatch": "Neshoda ID relace",
+ "@sessionIdMismatch": {
+ "description": "In passkey page, deeplink is ignored because of session ID mismatch."
+ },
+ "failedToFetchActiveSessions": "Nepodařilo se načíst aktivní relace",
+ "@failedToFetchActiveSessions": {
+ "description": "In session page, warn user (in toast) that active sessions could not be fetched."
+ },
+ "failedToRefreshStripeSubscription": "Obnovení předplatného se nezdařilo",
"failedToPlayVideo": "Přehrávání videa se nezdařilo",
+ "uploadIsIgnoredDueToIgnorereason": "Nahrání bylo ignorováno z důvodu {ignoreReason}",
+ "@uploadIsIgnoredDueToIgnorereason": {
+ "placeholders": {
+ "ignoreReason": {
+ "type": "String",
+ "example": "no network"
+ }
+ }
+ },
+ "typeOfGallerGallerytypeIsNotSupportedForRename": "Typ galerie {galleryType} není podporován pro přejmenování",
+ "@typeOfGallerGallerytypeIsNotSupportedForRename": {
+ "placeholders": {
+ "galleryType": {
+ "type": "String",
+ "example": "no network"
+ }
+ }
+ },
+ "tapToUploadIsIgnoredDue": "Klepnutím nahrajte, nahrávání je momentálně ignorováno z důvodu {ignoreReason}",
+ "@tapToUploadIsIgnoredDue": {
+ "description": "Shown in upload icon widet, inside a tooltip.",
+ "placeholders": {
+ "ignoreReason": {
+ "type": "String",
+ "example": "no network"
+ }
+ }
+ },
+ "tapToUpload": "Klepnutím nahrajte",
+ "@tapToUpload": {
+ "description": "Shown in upload icon widet, inside a tooltip."
+ },
"info": "Informace",
"addFiles": "Přidat soubory",
+ "castAlbum": "Přenášet album",
+ "imageNotAnalyzed": "Obrázek nebyl analyzován",
+ "noFacesFound": "Nebyly nalezeny žádné tváře",
+ "fileNotUploadedYet": "Soubor ještě nebyl nahrán",
+ "noSuggestionsForPerson": "Žádné návrhy pro {personName}",
+ "@noSuggestionsForPerson": {
+ "placeholders": {
+ "personName": {
+ "type": "String",
+ "example": "Alice"
+ }
+ }
+ },
+ "month": "měsíc",
+ "yearShort": "rok",
+ "@yearShort": {
+ "description": "Appears in pricing page (/yr)"
+ },
+ "currentlyRunning": "aktuálně běží",
+ "ignored": "ignorováno",
+ "photosCount": "{count, plural, =0 {0 fotografií} =1 {1 fotografie} few {{count} fotografie} other {{count} fotografií}}",
+ "@photosCount": {
+ "placeholders": {
+ "count": {
+ "type": "int",
+ "example": "2"
+ }
+ }
+ },
+ "file": "Soubor",
+ "searchSectionsLengthMismatch": "Nesoulad délky sekcí: {snapshotLength} != {searchLength}",
+ "@searchSectionsLengthMismatch": {
+ "description": "Appears in search tab page",
+ "placeholders": {
+ "snapshotLength": {
+ "type": "int",
+ "example": "1"
+ },
+ "searchLength": {
+ "type": "int",
+ "example": "2"
+ }
+ }
+ },
+ "selectMailApp": "Vyberte emailovou aplikace",
+ "selectAllShort": "Vše",
+ "@selectAllShort": {
+ "description": "Text that appears in bottom right when you start to select multiple photos. When clicked, it selects all photos."
+ },
+ "selectCoverPhoto": "Vyberte úvodní fotografii",
+ "newLocation": "Nové umístění",
+ "faceNotClusteredYet": "Tvář ještě není seskupena, vraťte se prosím později",
+ "theLinkYouAreTryingToAccessHasExpired": "Odkaz, na který se pokoušíte přistupovat, vypršel.",
"openFile": "Otevřít soubor",
"backupFile": "Zálohovat soubor",
"openAlbumInBrowser": "Otevřít album v prohlížeči",
+ "openAlbumInBrowserTitle": "K přidání fotografií do tohoto alba použijte webovou aplikaci",
"allow": "Povolit",
+ "allowAppToOpenSharedAlbumLinks": "Povolit aplikaci otevírat odkazy na sdílená alba",
+ "seePublicAlbumLinksInApp": "Zobrazit odkazy na veřejná alba v aplikaci",
+ "emergencyContacts": "Nouzové kontakty",
"acceptTrustInvite": "Přijmout pozvání",
"declineTrustInvite": "Odmítnout pozvání",
+ "removeYourselfAsTrustedContact": "Odstranit sebe jako důvěryhodný kontakt",
+ "legacy": "Dědictví",
+ "legacyPageDesc": "Dědictví umožňuje důvěryhodným kontaktům přístup k vašemu účtu v době vaší nepřítomnosti.",
+ "legacyPageDesc2": "Důvěryhodné kontakty mohou zahájit obnovení účtu a pokud nebude do 30 dnů zablokováno, mohou resetovat vaše heslo a získat přístup k vašemu účtu.",
+ "legacyAccounts": "Účty pro dědictví",
+ "trustedContacts": "Důvěryhodné kontakty",
+ "addTrustedContact": "Přidat důvěryhodný kontakt",
"removeInvite": "Odstranit pozvání",
+ "recoveryWarning": "Důvěryhodný kontakt se snaží získat přístup k vašemu účtu",
+ "rejectRecovery": "Odmítnout obnovu",
+ "recoveryInitiated": "Obnovení zahájeno",
+ "recoveryInitiatedDesc": "K účtu budete mít přístup po {days} dnech. Oznámení bude zasláno na adresu {email}.",
+ "@recoveryInitiatedDesc": {
+ "placeholders": {
+ "days": {
+ "type": "int",
+ "example": "30"
+ },
+ "email": {
+ "type": "String",
+ "example": "me@example.com"
+ }
+ }
+ },
"cancelAccountRecovery": "Zrušit obnovení",
+ "recoveryAccount": "Obnovit účet",
+ "cancelAccountRecoveryBody": "Opravdu chcete zrušit obnovení?",
+ "startAccountRecoveryTitle": "Zahájit obnovení",
+ "whyAddTrustContact": "Důvěryhodný kontakt vám může pomoci při obnově dat.",
+ "recoveryReady": "Nyní můžete obnovit účet pro {email} nastavením nového hesla.",
+ "@recoveryReady": {
+ "placeholders": {
+ "email": {
+ "type": "String",
+ "example": "me@example.com"
+ }
+ }
+ },
+ "recoveryWarningBody": "{email} se pokouší obnovit váš účet.",
+ "trustedInviteBody": "Byli jste pozváni, abyste se stali kontaktní osobou pro dědictví od {email}.",
"warning": "Varování",
+ "proceed": "Pokračovat",
+ "confirmAddingTrustedContact": "Chystáte se přidat {email} jako důvěryhodný kontakt. Ten bude moci obnovit váš účet, pokud budete {numOfDays} dní nepřítomní.",
+ "@confirmAddingTrustedContact": {
+ "placeholders": {
+ "email": {
+ "type": "String",
+ "example": "me@example.com"
+ },
+ "numOfDays": {
+ "type": "int",
+ "example": "30"
+ }
+ }
+ },
+ "legacyInvite": "{email} vás pozval, abyste se stali důvěryhodným kontaktem",
+ "authToManageLegacy": "Pro správu důvěryhodných kontaktů se prosím ověřte",
+ "useDifferentPlayerInfo": "Máte potíže s přehráváním tohoto videa? Dlouhým stisknutím zde vyzkoušejte jiný přehrávač.",
+ "hideSharedItemsFromHomeGallery": "Skrýt sdílené položky z domácí galerie",
"gallery": "Galerie",
+ "joinAlbum": "Připojit se k albu",
+ "joinAlbumSubtext": "pro prohlížení a přidávání vašich fotografií",
+ "joinAlbumSubtextViewer": "pro přidání do sdílených alb",
"join": "Připojit se",
+ "linkEmail": "Propojit e-mail",
+ "link": "Propojit",
+ "noEnteAccountExclamation": "Toto není účet Ente!",
+ "orPickFromYourContacts": "nebo vyberte z kontaktů",
+ "emailDoesNotHaveEnteAccount": "{email} nemá účet Ente.",
+ "@emailDoesNotHaveEnteAccount": {
+ "description": "Shown when email doesn't have an Ente account",
+ "placeholders": {
+ "email": {
+ "type": "String"
+ }
+ }
+ },
+ "accountOwnerPersonAppbarTitle": "{title} (Já)",
+ "@accountOwnerPersonAppbarTitle": {
+ "description": "Title of appbar for account owner person",
+ "placeholders": {
+ "title": {
+ "type": "String"
+ }
+ }
+ },
+ "reassignMe": "Přeřadit „Já“",
"me": "Já",
+ "linkEmailToContactBannerCaption": "pro rychlejší sdílení",
+ "@linkEmailToContactBannerCaption": {
+ "description": "Caption for the 'Link email' title. It should be a continuation of the 'Link email' title. Just like how 'Link email' + 'for faster sharing' forms a proper sentence in English, the combination of these two strings should also be a proper sentence in other languages."
+ },
+ "selectPersonToLink": "Vyberte osobu, kterou chcete propojit",
+ "linkPersonToEmail": "Propojit osobu s {email}",
+ "@linkPersonToEmail": {
+ "placeholders": {
+ "email": {
+ "type": "String"
+ }
+ }
+ },
+ "linkPersonToEmailConfirmation": "Tímto se propojí {personName} s {email}",
+ "@linkPersonToEmailConfirmation": {
+ "description": "Confirmation message when linking a person to an email",
+ "placeholders": {
+ "personName": {
+ "type": "String"
+ },
+ "email": {
+ "type": "String"
+ }
+ }
+ },
+ "selectYourFace": "Vyberte svou tvář",
+ "reassigningLoading": "Přeřazování...",
+ "reassignedToName": "Přeřadili jsme vás k {name}",
+ "@reassignedToName": {
+ "placeholders": {
+ "name": {
+ "type": "String"
+ }
+ }
+ },
+ "saveChangesBeforeLeavingQuestion": "Před ukončením uložte změny",
+ "dontSave": "Neukládat",
"thisIsMeExclamation": "To jsem já!",
+ "linkPerson": "Propojte osobu",
+ "linkPersonCaption": "pro lepší zkušenosti se sdílením",
+ "@linkPersonCaption": {
+ "description": "Caption for the 'Link person' title. It should be a continuation of the 'Link person' title. Just like how 'Link person' + 'for better sharing experience' forms a proper sentence in English, the combination of these two strings should also be a proper sentence in other languages."
+ },
+ "videoStreaming": "Videa pro streamování",
+ "processingVideos": "Zpracování videí",
+ "streamDetails": "Podrobnosti o streamu",
"processing": "Zpracovává se",
"queued": "Ve frontě",
+ "ineligible": "Nesplňuje podmínky",
+ "failed": "Selhalo",
+ "playStream": "Přehrát stream",
+ "playOriginal": "Přehrát původní",
+ "joinAlbumConfirmationDialogBody": "Připojením se k albu bude váš e-mail viditelný pro jeho spolupracovníky.",
+ "pleaseWaitThisWillTakeAWhile": "Počkejte prosím, bude to chvíli trvat.",
"editTime": "Upravit čas",
"selectTime": "Vybrat čas",
"selectDate": "Vybrat datum",
"previous": "Předchozí",
+ "selectOneDateAndTimeForAll": "Vyberte jedno datum a čas pro všechny",
+ "selectStartOfRange": "Vyberte začátek rozsahu",
+ "thisWillMakeTheDateAndTimeOfAllSelected": "Tímto se datum a čas všech vybraných fotografií sjednotí.",
+ "allWillShiftRangeBasedOnFirst": "Toto je první v této skupině. Ostatní vybrané fotografie se automaticky posunou podle tohoto nového data",
"newRange": "Nový rozsah",
+ "selectOneDateAndTime": "Vyberte jedno datum a čas",
+ "moveSelectedPhotosToOneDate": "Přesunout vybrané fotografie do jednoho data",
+ "shiftDatesAndTime": "Posunout datum a čas",
+ "photosKeepRelativeTimeDifference": "Fotografie zachovávají relativní časový rozdíl",
+ "photocountPhotos": "{count, plural, =0 {Žádné fotografie} =1 {1 fotografie} few {{count} fotografie} other {{count} fotografií}}",
+ "@photocountPhotos": {
+ "placeholders": {
+ "count": {
+ "type": "int",
+ "example": "2"
+ }
+ }
+ },
+ "appIcon": "Ikona aplikace",
+ "notThisPerson": "Není to tato osoba?",
+ "selectedItemsWillBeRemovedFromThisPerson": "Vybrané položky budou z této osoby odebrány, ale nebudou smazány z vaší knihovny.",
+ "throughTheYears": "{dateFormat} v průběhu let",
+ "thisWeekThroughTheYears": "Tento týden v průběhu let",
+ "thisWeekXYearsAgo": "{count, plural, =1 {Tento týden, {count} rok nazpět} few {Tento týden, {count} roky nazpět} other {Tento týden, {count} let nazpět}}",
"youAndThem": "Vy a {name}",
- "selfiesWithThem": "Selfie s {name}"
+ "admiringThem": "Obdiv k {name}",
+ "embracingThem": "Objímání {name}",
+ "partyWithThem": "Párty s {name}",
+ "hikingWithThem": "Turistika s {name}",
+ "feastingWithThem": "Hodování s {name}",
+ "selfiesWithThem": "Selfie s {name}",
+ "posingWithThem": "Pózování s {name}",
+ "backgroundWithThem": "Krásný výhled s {name}",
+ "sportsWithThem": "Sporty s {name}",
+ "roadtripWithThem": "Výlet autem s {name}",
+ "spotlightOnYourself": "Vaše nejdůležitější události",
+ "spotlightOnThem": "Nejdůležitější události s {name}",
+ "personIsAge": "{name} má {age} let!",
+ "personTurningAge": "{name} brzy oslaví {age} let",
+ "lastTimeWithThem": "Naposledy s {name}",
+ "tripToLocation": "Výlet do {location}",
+ "tripInYear": "Cesta v roce {year}",
+ "lastYearsTrip": "Loňský výlet",
+ "sunrise": "Na obzoru",
+ "mountains": "Přes kopce",
+ "greenery": "Zelený život",
+ "beach": "Písek a moře",
+ "city": "Ve městě",
+ "moon": "V měsíčním svitu",
+ "onTheRoad": "Zase na cestách",
+ "food": "Kulinářský zážitek",
+ "pets": "Chlupatí společníci",
+ "curatedMemories": "Vybrané vzpomínky",
+ "widgets": "Widgety",
+ "memories": "Vzpomínky",
+ "peopleWidgetDesc": "Vyberte osoby, které chcete vidět na domovské obrazovce.",
+ "albumsWidgetDesc": "Vyberte alba, která chcete zobrazit na domovské obrazovce.",
+ "memoriesWidgetDesc": "Vyberte typ vzpomínek, které chcete zobrazit na domovské obrazovce.",
+ "smartMemories": "Chytré vzpomínky",
+ "pastYearsMemories": "Vzpomínky na minulé roky",
+ "deleteMultipleAlbumDialog": "Smazat také fotografie (a videa) přítomné v těchto {count} albech ze všech ostatních alb, jejichž součástí jsou?",
+ "addParticipants": "Přidat účastníky",
+ "selectedAlbums": "Vybráno: {count}",
+ "actionNotSupportedOnFavouritesAlbum": "Akce není podporována v albu Oblíbené",
+ "onThisDayMemories": "Vzpomínky v tento den",
+ "onThisDay": "V tento den",
+ "lookBackOnYourMemories": "Ohlédni se za svými vzpomínkami 🌄",
+ "newPhotosEmoji": " nové 📸",
+ "sorryWeHadToPauseYourBackups": "Omlouváme se, museli jsme pozastavit vaše zálohy",
+ "clickToInstallOurBestVersionYet": "Klikněte pro instalaci naší dosud nejlepší verze",
+ "onThisDayNotificationExplanation": "Dostávejte připomenutí vzpomínek z tohoto dne v předchozích letech.",
+ "addMemoriesWidgetPrompt": "Přidejte widget vzpomínek na domovskou obrazovku a vraťte se sem, abyste jej přizpůsobili.",
+ "addAlbumWidgetPrompt": "Přidejte widget alba na domovskou obrazovku a vraťte se sem, abyste jej přizpůsobili.",
+ "addPeopleWidgetPrompt": "Přidejte widget lidí na domovskou obrazovku a vraťte se sem, abyste jej přizpůsobili.",
+ "birthdayNotifications": "Oznámení o narozeninách",
+ "receiveRemindersOnBirthdays": "Dostávejte připomenutí, když má někdo narozeniny. Klepnutím na oznámení se dostanete k fotkám oslavence.",
+ "happyBirthday": "Všechno nejlepší k narozeninám! 🥳",
+ "birthdays": "Narozeniny",
+ "wishThemAHappyBirthday": "Popřejte {name} všechno nejlepší k narozeninám! 🎉",
+ "areYouSureRemoveThisFaceFromPerson": "Opravdu chcete odstranit tuto tvář z této osoby?",
+ "otherDetectedFaces": "Další detekované tváře",
+ "areThey": "Jsou to ",
+ "questionmark": "?",
+ "saveAsAnotherPerson": "Uložit jako jinou osobu",
+ "showLessFaces": "Zobrazit méně tváří",
+ "showMoreFaces": "Zobrazit více tváří",
+ "ignore": "Ignorovat",
+ "merge": "Sloučit",
+ "reset": "Obnovit",
+ "areYouSureYouWantToIgnoreThisPerson": "Opravdu chcete tuto osobu ignorovat?",
+ "areYouSureYouWantToIgnoreThesePersons": "Opravdu chcete tyto osoby ignorovat?",
+ "thePersonGroupsWillNotBeDisplayed": "Skupiny osob se již nebudou zobrazovat v sekci „Lidé“. Fotografie zůstanou beze změny.",
+ "thePersonWillNotBeDisplayed": "Tato osoba již nebude zobrazena v sekci „Lidé“. Fotografie zůstanou beze změny.",
+ "areYouSureYouWantToMergeThem": "Opravdu je chcete sloučit?",
+ "allUnnamedGroupsWillBeMergedIntoTheSelectedPerson": "Všechny nepojmenované skupiny budou sloučeny do vybrané osoby. Tuto akci lze stále vrátit zpět z přehledu historie návrhů dané osoby.",
+ "yesIgnore": "Ano, ignorovat",
+ "same": "Stejné",
+ "different": "Odlišné",
+ "sameperson": "Stejná osoba?",
+ "cLTitle1": "Pokročilý editor obrázků",
+ "cLDesc1": "Vydáváme nový a pokročilý editor obrázků, který přidává více ořezových rámečků, přednastavené filtry pro rychlé úpravy, možnosti jemného doladění včetně sytosti, kontrastu, jasu, teploty a mnoho dalšího. Nový editor také zahrnuje možnost kreslit na vaše fotografie a přidávat emodži jako nálepky.",
+ "cLTitle2": "Chytrá alba",
+ "cLDesc2": "Nyní můžete automaticky přidávat fotografie vybraných osob do libovolného alba. Stačí přejít do alba a v rozbalovací nabídce vybrat možnost „Automaticky přidat osoby“. Pokud tuto funkci použijete společně se sdíleným albem, můžete sdílet fotografie bez jediného kliknutí.",
+ "cLTitle3": "Vylepšená galerie",
+ "cLDesc3": "Přidali jsme možnost seskupit vaši galerii podle týdnů, měsíců a let. Nyní můžete svou galerii přizpůsobit tak, aby vypadala přesně podle vašich představ, a to díky těmto novým možnostem seskupování a přizpůsobitelným mřížkám",
+ "cLTitle4": "Rychlejší posouvání",
+ "cLDesc4": "Kromě řady vylepšení pod kapotou, která zlepšují procházení galerií, jsme také přepracovali posuvník tak, aby zobrazoval značky, díky nimž můžete rychle přeskakovat po časové ose.",
+ "indexingPausedStatusDescription": "Indexování je pozastaveno. Automaticky se obnoví, jakmile bude zařízení připraveno. Zařízení je považováno za připravené, pokud jsou úroveň nabití baterie, stav baterie a teplotní stav v normálním rozmezí.",
+ "thisWeek": "Tento týden",
+ "lastWeek": "Minulý týden",
+ "thisMonth": "Tento měsíc",
+ "thisYear": "Tento rok",
+ "groupBy": "Seskupit podle",
+ "faceThumbnailGenerationFailed": "Nelze vygenerovat miniatury obličejů",
+ "fileAnalysisFailed": "Nelze analyzovat soubor",
+ "editAutoAddPeople": "Upravit automatické přidávání osob",
+ "autoAddPeople": "Automatické přidávání osob",
+ "autoAddToAlbum": "Automaticky přidat do alba",
+ "shouldRemoveFilesSmartAlbumsDesc": "Mají být soubory související s osobou, které byly dříve vybrány ve smart albech, odstraněny?",
+ "addingPhotos": "Přidávání fotografií",
+ "gettingReady": "Připravuji",
+ "addSomePhotosDesc1": "Přidejte nějaké fotografie nebo vyberte ",
+ "addSomePhotosDesc2": "známé tváře",
+ "addSomePhotosDesc3": "\npro začátek",
+ "ignorePerson": "Ignorovat osobu",
+ "mixedGrouping": "Smíšené seskupení?",
+ "analysis": "Analýza",
+ "doesGroupContainMultiplePeople": "Obsahuje tato skupina více osob?",
+ "automaticallyAnalyzeAndSplitGrouping": "Automaticky analyzujeme seskupení, abychom zjistili, zda je přítomno více osob, a opět je oddělíme. To může trvat několik sekund.",
+ "layout": "Rozvržení",
+ "day": "Den",
+ "peopleAutoAddDesc": "Vyberte osoby, které chcete automaticky přidat do alba",
+ "undo": "Vrátit zpět",
+ "redo": "Opakovat akci",
+ "filter": "Filtr",
+ "adjust": "Upravit",
+ "draw": "Kreslit",
+ "sticker": "Nálepka",
+ "brushColor": "Barva štětce",
+ "font": "Písmo",
+ "background": "Pozadí",
+ "align": "Zarovnat",
+ "addedToAlbums": "{count, plural, =1{Úspěšně přidáno do 1 alba} other{Úspěšně přidáno do {count} alb}}",
+ "@addedToAlbums": {
+ "description": "Message shown when items are added to albums",
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/mobile/apps/photos/lib/l10n/intl_en.arb b/mobile/apps/photos/lib/l10n/intl_en.arb
index 6a947367a9..85117191d8 100644
--- a/mobile/apps/photos/lib/l10n/intl_en.arb
+++ b/mobile/apps/photos/lib/l10n/intl_en.arb
@@ -1840,5 +1840,105 @@
"videoPreviewAlreadyExists": "Video preview already exists",
"videoAlreadyInQueue": "Video file already present in the queue",
"addedToQueue": "Added to queue",
- "creatingStream": "Creating stream"
+ "creatingStream": "Creating stream",
+ "similarImages": "Similar images",
+ "deletingProgress": "Deleting... {progress}",
+ "@deletingProgress": {
+ "placeholders": {
+ "progress": {
+ "type": "String"
+ }
+ }
+ },
+ "findSimilarImages": "Find similar images",
+ "noSimilarImagesFound": "No similar images found",
+ "yourPhotosLookUnique": "Your photos look unique",
+ "similarGroupsFound": "{count, plural, =1{{count} group found} other{{count} groups found}}",
+ "@similarGroupsFound": {
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ },
+ "reviewAndRemoveSimilarImages": "Review and remove similar images",
+ "deletePhotosWithSize": "Delete {count} photos ({size})",
+ "@deletePhotosWithSize": {
+ "placeholders": {
+ "count": {
+ "type": "int"
+ },
+ "size": {
+ "type": "String"
+ }
+ }
+ },
+ "selectionOptions": "Selection options",
+ "selectExactWithCount": "Select exact ({count})",
+ "@selectExactWithCount": {
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ },
+ "selectExact": "Select exact",
+ "selectSimilarWithCount": "Select similar ({count})",
+ "@selectSimilarWithCount": {
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ },
+ "selectSimilar": "Select similar",
+ "selectAllWithCount": "Select all ({count})",
+ "@selectAllWithCount": {
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ },
+ "selectSimilarImagesTitle": "Select similar images",
+ "chooseSimilarImagesToSelect": "Choose which similar images to select for deletion",
+ "clearSelection": "Clear selection",
+ "similarImagesCount": "{count} similar images",
+ "@similarImagesCount": {
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ },
+ "deleteWithCount": "Delete ({count})",
+ "@deleteWithCount": {
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ },
+ "deleteFiles": "Delete files",
+ "areYouSureDeleteFiles": "Are you sure you want to delete these files?",
+ "greatJob": "Great job!",
+ "cleanedUpSimilarImages": "You cleaned up {count, plural, =1{{count} similar image} other{{count} similar images}} and freed up {size}",
+ "@cleanedUpSimilarImages": {
+ "placeholders": {
+ "count": {
+ "type": "int"
+ },
+ "size": {
+ "type": "String"
+ }
+ }
+ },
+ "size": "Size",
+ "similarity": "Similarity",
+ "analyzingPhotosLocally": "Analyzing your photos locally",
+ "findingSimilarImages": "Finding similar images",
+ "processingVisualPatterns": "Processing visual patterns",
+ "comparingImageFeatures": "Comparing image features",
+ "almostDone": "Almost done",
+ "processingLocally": "Processing locally"
}
\ No newline at end of file
diff --git a/mobile/apps/photos/lib/l10n/intl_es.arb b/mobile/apps/photos/lib/l10n/intl_es.arb
index 208d295700..841cdc135c 100644
--- a/mobile/apps/photos/lib/l10n/intl_es.arb
+++ b/mobile/apps/photos/lib/l10n/intl_es.arb
@@ -1776,5 +1776,56 @@
"same": "Igual",
"different": "Diferente",
"sameperson": "la misma persona?",
- "indexingPausedStatusDescription": "La indexación está pausada. Se reanudará automáticamente cuando el dispositivo esté listo. El dispositivo se considera listo cuando su nivel de batería, la salud de la batería y temperatura están en un rango saludable."
+ "cLTitle1": "Editor avanzado de imágenes",
+ "cLDesc1": "Estamos lanzando un nuevo y avanzado editor de imágenes que añade más marcos de recorte, preajustes de filtros para edición rápida, opciones de ajuste finas incluyendo saturación, contraste, brillo, temperatura y mucho más. El nuevo editor también incluye la capacidad de dibujar en tus fotos y añadir emojis como pegatinas.",
+ "cLTitle2": "Álbumes Inteligentes",
+ "cLDesc2": "Ahora puedes añadir automáticamente fotos de personas seleccionadas a cualquier álbum. Solo tienes que ir al álbum, y seleccionar \"Agregar personas automáticamente\" del menú desbordante. Si se utiliza junto con el álbum compartido, puedes compartir fotos con cero clics.",
+ "cLTitle3": "Galería mejorada",
+ "cLDesc3": "Hemos añadido la capacidad de agrupar tu galería por semanas, meses y años. Ahora puedes personalizar tu galería exactamente como quieras con estas nuevas opciones de agrupación, junto con rejillas personalizadas",
+ "cLTitle4": "Desplazamiento más rápido",
+ "cLDesc4": "Junto con un montón de mejoras bajo el capó para mejorar la experiencia del desplazamiento de la galería también hemos rediseñado la barra de desplazamiento para mostrar los marcadores, permitiéndote saltar rápidamente a través de la línea de tiempo.",
+ "indexingPausedStatusDescription": "La indexación está pausada. Se reanudará automáticamente cuando el dispositivo esté listo. El dispositivo se considera listo cuando su nivel de batería, la salud de la batería y temperatura están en un rango saludable.",
+ "thisWeek": "Esta semana",
+ "lastWeek": "Semana pasada",
+ "thisMonth": "Este mes",
+ "thisYear": "Este año",
+ "groupBy": "Agrupar por",
+ "faceThumbnailGenerationFailed": "No se pueden generar las miniaturas de cara",
+ "fileAnalysisFailed": "No se puede analizar el archivo",
+ "editAutoAddPeople": "Editar agregar personas automáticamente",
+ "autoAddPeople": "Agregar personas automáticamente",
+ "autoAddToAlbum": "Añadir al álbum automáticamente",
+ "shouldRemoveFilesSmartAlbumsDesc": "¿Deben eliminarse los archivos relacionados con la persona previamente seleccionada en los álbumes inteligentes?",
+ "addingPhotos": "Añadiendo fotos",
+ "gettingReady": "Preparándose",
+ "addSomePhotosDesc1": "Añadir algunas fotos o elegir ",
+ "addSomePhotosDesc2": "caras familiares",
+ "addSomePhotosDesc3": "\npara comenzar con",
+ "ignorePerson": "Ignorar persona",
+ "mixedGrouping": "¿Grupo mixto?",
+ "analysis": "Análisis",
+ "doesGroupContainMultiplePeople": "¿Esta agrupación contiene varias personas?",
+ "automaticallyAnalyzeAndSplitGrouping": "Analizaremos automáticamente la agrupación para determinar si hay varias personas presentes, y separarlas de nuevo. Esto puede tardar unos segundos.",
+ "layout": "Disposición",
+ "day": "Día",
+ "peopleAutoAddDesc": "Selecciona las personas que quieres añadir automáticamente al álbum",
+ "undo": "Deshacer",
+ "redo": "Rehacer",
+ "filter": "Filtro",
+ "adjust": "Ajustar",
+ "draw": "Dibujar",
+ "sticker": "Pegatina",
+ "brushColor": "Color del pincel",
+ "font": "Fuente",
+ "background": "Fondo",
+ "align": "Alinear",
+ "addedToAlbums": "{count, plural, one {}=1{Añadido con éxito a 1 álbum} other{Añadido con éxito a {count} álbumes}}",
+ "@addedToAlbums": {
+ "description": "Message shown when items are added to albums",
+ "placeholders": {
+ "count": {
+ "type": "int"
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/mobile/apps/photos/lib/l10n/intl_sv.arb b/mobile/apps/photos/lib/l10n/intl_sv.arb
index 2d4c753d42..237ea21a49 100644
--- a/mobile/apps/photos/lib/l10n/intl_sv.arb
+++ b/mobile/apps/photos/lib/l10n/intl_sv.arb
@@ -347,9 +347,11 @@
"deletePhotos": "Radera foton",
"inviteToEnte": "Bjud in till Ente",
"removePublicLink": "Ta bort publik länk",
+ "disableLinkMessage": "Detta kommer att ta bort den publika länken för att komma åt \"{albumName}\".",
"sharing": "Delar...",
"youCannotShareWithYourself": "Du kan inte dela med dig själv",
"archive": "Arkiv",
+ "createAlbumActionHint": "Långtryck för att välja foton och klicka på + för att skapa ett album",
"importing": "Importerar....",
"failedToLoadAlbums": "Det gick inte att läsa in album",
"hidden": "Dold",
@@ -360,16 +362,96 @@
"videoSmallCase": "video",
"photoSmallCase": "foto",
"singleFileDeleteHighlight": "Det kommer att tas bort från alla album.",
+ "singleFileInBothLocalAndRemote": "Denna {fileType} finns i både Ente och din enhet.",
+ "singleFileInRemoteOnly": "Denna {fileType} kommer att raderas från Ente.",
+ "singleFileDeleteFromDevice": "Denna {fileType} kommer att raderas från din enhet.",
+ "deleteFromEnte": "Radera från ente",
"yesDelete": "Ja, radera",
+ "movedToTrash": "Flyttad till papperskorgen",
"deleteFromDevice": "Radera från enhet",
+ "deleteFromBoth": "",
"newAlbum": "Nytt album",
"albums": "Album",
+ "memoryCount": "{count, plural, =0{inga minnen} one{{formattedCount} minne} other{{formattedCount} minnen}}",
+ "@memoryCount": {
+ "description": "The text to display the number of memories",
+ "type": "text",
+ "placeholders": {
+ "count": {
+ "example": "1",
+ "type": "int"
+ },
+ "formattedCount": {
+ "type": "String",
+ "example": "11.513, 11,511"
+ }
+ }
+ },
+ "selectedPhotos": "{count} markerade",
+ "@selectedPhotos": {
+ "description": "Display the number of selected photos",
+ "type": "text",
+ "placeholders": {
+ "count": {
+ "example": "5",
+ "type": "int"
+ }
+ }
+ },
+ "selectedPhotosWithYours": "{count} markerade ({yourCount} din)",
+ "@selectedPhotosWithYours": {
+ "description": "Display the number of selected photos, including the number of selected photos owned by the user",
+ "type": "text",
+ "placeholders": {
+ "count": {
+ "example": "12",
+ "type": "int"
+ },
+ "yourCount": {
+ "example": "2",
+ "type": "int"
+ }
+ }
+ },
+ "advancedSettings": "Avancerad",
+ "@advancedSettings": {
+ "description": "The text to display in the advanced settings section"
+ },
+ "photoGridSize": "Storlek på bildrutnät",
+ "manageDeviceStorage": "Hantera enhetscache",
+ "manageDeviceStorageDesc": "Granska och rensa lokal cachelagring.",
"machineLearning": "Maskininlärning",
"mlConsent": "Aktivera maskininlärning",
"mlConsentTitle": "Aktivera maskininlärning?",
+ "mlConsentDescription": "Om du aktiverar maskininlärning, kommer Ente extrahera information som ansiktsgeometri från filer, inklusive de som delas med dig.\n\nDetta kommer att hända på din enhet, och all genererad biometrisk information kommer att helsträckskrypteras.",
+ "mlConsentPrivacy": "Klicka här för mer information om denna funktion i vår integritetspolicy",
+ "mlConsentConfirmation": "Jag förstår och vill aktivera maskininlärning",
+ "magicSearch": "Magisk sökning",
+ "discover": "Upptäck",
+ "@discover": {
+ "description": "The text to display for the discover section under which we show receipts, screenshots, sunsets, greenery, etc."
+ },
+ "discover_identity": "Identitet",
+ "discover_screenshots": "Skärmdumpar",
"discover_receipts": "Kvitton",
"discover_notes": "Anteckningar",
+ "discover_memes": "Memes",
+ "discover_visiting_cards": "Besökskort",
+ "discover_babies": "Barn",
+ "discover_pets": "Husdjur",
+ "discover_selfies": "Selfies",
+ "discover_wallpapers": "Bakgrundsbilder",
+ "discover_food": "Mat",
+ "discover_celebrations": "Firanden",
+ "discover_sunset": "Solnedgång",
+ "discover_hills": "Berg",
+ "discover_greenery": "Grönt landskap",
+ "mlIndexingDescription": "Observera att maskininlärning kommer att resultera i en högre bandbredd och batterianvändning tills alla objekt är indexerade. Överväg att använda skrivbordsappen för snabbare indexering, alla resultat kommer att synkroniseras automatiskt.",
+ "loadingModel": "Laddar ner modeller...",
+ "waitingForWifi": "Väntar på WiFi...",
"status": "Status",
+ "indexedItems": "Indexerade objekt",
+ "pendingItems": "Väntande objekt",
"clearIndexes": "Rensa index",
"selectFoldersForBackup": "Välj mappar för säkerhetskopiering",
"selectedFoldersWillBeEncryptedAndBackedUp": "Valda mappar kommer att krypteras och säkerhetskopieras",
@@ -398,19 +480,47 @@
"yearsAgo": "{count, plural, one{{count} år sedan} other{{count} år sedan}}",
"backupSettings": "Säkerhetskopieringsinställningar",
"backupStatus": "Säkerhetskopieringsstatus",
+ "backupStatusDescription": "Objekt som har säkerhetskopierats kommer att visas här",
+ "backupOverMobileData": "Säkerhetskopiera via mobildata",
+ "backupVideos": "Säkerhetskopiera videor",
+ "disableAutoLock": "Inaktivera automatisk låsning",
+ "deviceLockExplanation": "Inaktivera enhetens skärmlås när Ente är i förgrunden och säkerhetskopiering pågår. Detta är normalt inte nödvändigt, men kan hjälpa stora uppladdningar och initial import av stora bibliotek slutföra snabbare.",
"about": "Om",
+ "weAreOpenSource": "Vi har öppen källkod!",
+ "privacy": "Sekretess",
"terms": "Villkor",
+ "checkForUpdates": "Sök efter uppdateringar",
+ "checkStatus": "Kontrollera status",
+ "checking": "Kontrollerar...",
+ "youAreOnTheLatestVersion": "Du är på den senaste versionen",
"account": "Konto",
"manageSubscription": "Hantera prenumeration",
+ "authToChangeYourEmail": "Autentisera för att ändra din e-postadress",
"changePassword": "Ändra lösenord",
+ "authToChangeYourPassword": "Autentisera för att ändra ditt lösenord",
+ "emailVerificationToggle": "E-postverifiering",
"exportYourData": "Exportera din data",
"logout": "Logga ut",
+ "authToInitiateAccountDeletion": "Vänligen autentisera för att initiera borttagning av konto",
"areYouSureYouWantToLogout": "Är du säker på att du vill logga ut?",
"yesLogout": "Ja, logga ut",
"aNewVersionOfEnteIsAvailable": "En ny version av Ente är tillgänglig.",
"update": "Uppdatera",
+ "installManually": "Installera manuellt",
+ "criticalUpdateAvailable": "Kritisk uppdatering tillgänglig",
+ "updateAvailable": "Uppdatering tillgänglig",
"ignoreUpdate": "Ignorera",
+ "downloading": "Laddar ner...",
+ "cannotDeleteSharedFiles": "Kan inte ta bort delade filer",
+ "theDownloadCouldNotBeCompleted": "Nedladdningen kunde inte slutföras",
"retry": "Försök igen",
+ "backedUpFolders": "Säkerhetskopiera mappar",
+ "backup": "Säkerhetskopiera",
+ "freeUpDeviceSpace": "Frigör enhetens lagringsutrymme",
+ "freeUpDeviceSpaceDesc": "Spara utrymme på din enhet genom att rensa filer som redan har säkerhetskopierats.",
+ "allClear": "✨ Allt klart",
+ "noDeviceThatCanBeDeleted": "Du har inga filer på denna enhet som kan tas bort",
+ "removeDuplicates": "Ta bort dubbletter",
"viewActiveSessions": "Visa aktiva sessioner",
"no": "Nej",
"yes": "Ja",
diff --git a/mobile/apps/photos/lib/ui/tools/similar_images_page.dart b/mobile/apps/photos/lib/ui/tools/similar_images_page.dart
index 3da1761e3d..3bd5778ee7 100644
--- a/mobile/apps/photos/lib/ui/tools/similar_images_page.dart
+++ b/mobile/apps/photos/lib/ui/tools/similar_images_page.dart
@@ -89,7 +89,7 @@ class _SimilarImagesPageState extends State {
return Scaffold(
appBar: AppBar(
elevation: 0,
- title: const Text("Similar images"), // TODO: lau: extract string
+ title: Text(AppLocalizations.of(context).similarImages),
actions: _pageState == SimilarImagesPageState.results
? [_getSortMenu()]
: null,
@@ -120,7 +120,7 @@ class _SimilarImagesPageState extends State {
final textTheme = getEnteTextTheme(context);
return Container(
- color: colorScheme.backgroundBase.withOpacity(0.8),
+ color: colorScheme.backgroundBase.withValues(alpha: 0.8),
child: Center(
child: Container(
padding:
@@ -150,7 +150,8 @@ class _SimilarImagesPageState extends State {
),
const SizedBox(width: 12),
Text(
- "Deleting... $value", // TODO: lau: extract string
+ AppLocalizations.of(context)
+ .deletingProgress(progress: value),
style: textTheme.body,
),
],
@@ -181,24 +182,24 @@ class _SimilarImagesPageState extends State {
),
const SizedBox(height: 32),
Text(
- "Find similar images", // TODO: lau: extract string
+ AppLocalizations.of(context).findSimilarImages,
style: textTheme.h3Bold,
textAlign: TextAlign.center,
),
const SizedBox(height: 16),
Text(
- "Use AI to find images that look similar to each other. Adjust the distance threshold below.", // TODO: lau: extract string
+ "Use AI to find images that look similar to each other. Adjust the distance threshold below.",
style: textTheme.body,
textAlign: TextAlign.center,
),
const SizedBox(height: 48),
Text(
- "Similarity threshold", // TODO: lau: extract string
+ "Similarity threshold",
style: textTheme.bodyBold,
),
const SizedBox(height: 8),
Text(
- "Lower values mean a closer match.", // TODO: lau: extract string
+ "Lower values mean a closer match.",
style: textTheme.miniMuted,
),
const SizedBox(height: 16),
@@ -229,7 +230,7 @@ class _SimilarImagesPageState extends State {
],
),
Text(
- "Current: ${_distanceThreshold.toStringAsFixed(2)}", // TODO: lau: extract string
+ "Current: ${_distanceThreshold.toStringAsFixed(2)}",
style: textTheme.body,
textAlign: TextAlign.center,
),
@@ -273,7 +274,7 @@ class _SimilarImagesPageState extends State {
),
const SizedBox(height: 32),
ButtonWidget(
- labelText: "Find similar images", // TODO: lau: extract string
+ labelText: AppLocalizations.of(context).findSimilarImages,
buttonType: ButtonType.primary,
onTap: () async {
await _findSimilarImages();
@@ -303,12 +304,12 @@ class _SimilarImagesPageState extends State {
),
const SizedBox(height: 16),
Text(
- "No similar images found", // TODO: lau: extract string
+ AppLocalizations.of(context).noSimilarImagesFound,
style: textTheme.h3Bold,
),
const SizedBox(height: 8),
Text(
- "Your photos look unique", // TODO: lau: extract string
+ AppLocalizations.of(context).yourPhotosLookUnique,
style: textTheme.bodyMuted,
),
],
@@ -348,12 +349,15 @@ class _SimilarImagesPageState extends State {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
- "${_similarFilesList.length} ${_similarFilesList.length == 1 ? 'group' : 'groups'} found", // TODO: lau: extract string
+ AppLocalizations.of(context).similarGroupsFound(
+ count: _similarFilesList.length,
+ ),
style: textTheme.bodyBold,
),
const SizedBox(height: 4),
Text(
- "Review and remove similar images", // TODO: lau: extract string
+ AppLocalizations.of(context)
+ .reviewAndRemoveSimilarImages,
style: textTheme.miniMuted,
),
],
@@ -428,8 +432,11 @@ class _SimilarImagesPageState extends State {
SizedBox(
width: double.infinity,
child: ButtonWidget(
- labelText:
- "Delete $selectedCount photos (${formatBytes(totalSize)})", // TODO: lau: extract string
+ labelText: AppLocalizations.of(context)
+ .deletePhotosWithSize(
+ count: selectedCount,
+ size: formatBytes(totalSize),
+ ),
buttonType: ButtonType.critical,
shouldSurfaceExecutionStates: false,
shouldShowSuccessConfirmation: false,
@@ -450,8 +457,7 @@ class _SimilarImagesPageState extends State {
SizedBox(
width: double.infinity,
child: ButtonWidget(
- labelText:
- "Selection options", // TODO: lau: extract string
+ labelText: AppLocalizations.of(context).selectionOptions,
buttonType: ButtonType.secondary,
shouldSurfaceExecutionStates: false,
shouldShowSuccessConfirmation: false,
@@ -588,23 +594,20 @@ class _SimilarImagesPageState extends State {
}
}
- final String exactLabel = exactFiles > 0
- ? "Select exact ($exactFiles)" // TODO: lau: extract string
- : "Select exact"; // TODO: lau: extract string
+ // Always show counts, even when 0
+ final String exactLabel =
+ AppLocalizations.of(context).selectExactWithCount(count: exactFiles);
- final String similarLabel = similarFiles > 0
- ? "Select similar ($similarFiles)" // TODO: lau: extract string
- : "Select similar"; // TODO: lau: extract string
+ final String similarLabel = AppLocalizations.of(context)
+ .selectSimilarWithCount(count: similarFiles);
- final String allLabel = allFiles > 0
- ? "Select all ($allFiles)" // TODO: lau: extract string
- : "Select all"; // TODO: lau: extract string
+ final String allLabel =
+ AppLocalizations.of(context).selectAllWithCount(count: allFiles);
await showActionSheet(
context: context,
- title: "Select similar images", // TODO: lau: extract string
- body:
- "Choose which similar images to select for deletion", // TODO: lau: extract string
+ title: AppLocalizations.of(context).selectSimilarImagesTitle,
+ body: AppLocalizations.of(context).chooseSimilarImagesToSelect,
buttons: [
ButtonWidget(
labelText: exactLabel,
@@ -614,6 +617,7 @@ class _SimilarImagesPageState extends State {
isInAlert: true,
buttonAction: ButtonAction.first,
shouldSurfaceExecutionStates: false,
+ isDisabled: exactFiles == 0,
onTap: () async {
_selectFilesByThreshold(0.0);
},
@@ -626,6 +630,7 @@ class _SimilarImagesPageState extends State {
isInAlert: true,
buttonAction: ButtonAction.second,
shouldSurfaceExecutionStates: false,
+ isDisabled: similarFiles == 0,
onTap: () async {
_selectFilesByThreshold(0.02);
},
@@ -638,12 +643,13 @@ class _SimilarImagesPageState extends State {
isInAlert: true,
buttonAction: ButtonAction.third,
shouldSurfaceExecutionStates: false,
+ isDisabled: allFiles == 0,
onTap: () async {
_selectFilesByThreshold(0.05);
},
),
ButtonWidget(
- labelText: "Clear selection", // TODO: lau: extract string
+ labelText: AppLocalizations.of(context).clearSelection,
buttonType: ButtonType.secondary,
buttonSize: ButtonSize.large,
shouldStickToDarkTheme: true,
@@ -670,10 +676,11 @@ class _SimilarImagesPageState extends State {
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
- "${similarFiles.files.length} similar images" +
+ AppLocalizations.of(context)
+ .similarImagesCount(count: similarFiles.files.length) +
(kDebugMode
? " (I: d: ${similarFiles.furthestDistance.toStringAsFixed(3)})"
- : ""), // TODO: lau: extract string
+ : ""),
style: textTheme.smallMuted.copyWith(
fontWeight: FontWeight.w600,
),
@@ -745,46 +752,23 @@ class _SimilarImagesPageState extends State {
listenable: _selectedFiles,
builder: (context, _) {
final bool isSelected = _selectedFiles.isFileSelected(file);
- final bool hasAnySelection = _selectedFiles.files.isNotEmpty;
return GestureDetector(
onTap: () {
- if (hasAnySelection) {
- // If files are selected, tap should toggle selection
- _selectedFiles.toggleSelection(file);
- } else {
- // If no files selected, tap opens detail page
- routeToPage(
- context,
- DetailPage(
- DetailPageConfiguration(
- allFiles,
- index,
- "similar_images_",
- mode: DetailPageMode.minimalistic,
- ),
- ),
- );
- }
+ _selectedFiles.toggleSelection(file);
},
onLongPress: () {
- if (hasAnySelection) {
- // If files are selected, long press opens detail page
- routeToPage(
- context,
- DetailPage(
- DetailPageConfiguration(
- allFiles,
- index,
- "similar_images_",
- mode: DetailPageMode.minimalistic,
- ),
+ routeToPage(
+ context,
+ DetailPage(
+ DetailPageConfiguration(
+ allFiles,
+ index,
+ "similar_images_",
+ mode: DetailPageMode.minimalistic,
),
- );
- } else {
- // If no files selected, long press starts selection
- _selectedFiles.toggleSelection(file);
- }
+ ),
+ );
},
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -890,7 +874,7 @@ class _SimilarImagesPageState extends State {
),
const SizedBox(width: 4),
Text(
- "Delete (${files.length})", // TODO: lau: extract string
+ AppLocalizations.of(context).deleteWithCount(count: files.length),
style: textTheme.smallBold.copyWith(
color: colorScheme.warning500,
),
@@ -909,9 +893,8 @@ class _SimilarImagesPageState extends State {
if (showDialog) {
final _ = await showChoiceActionSheet(
context,
- title: "Delete files", // TODO: lau: extract string
- body:
- "Are you sure you want to delete these files?", // TODO: lau: extract string
+ title: AppLocalizations.of(context).deleteFiles,
+ body: AppLocalizations.of(context).areYouSureDeleteFiles,
firstButtonLabel: AppLocalizations.of(context).delete,
isCritical: true,
firstButtonOnTap: () async {
@@ -937,7 +920,7 @@ class _SimilarImagesPageState extends State {
if (filesToDelete.isEmpty) {
return;
}
- final Map> collectionToFilesToAddMap = {};
+ final Map> collectionToFilesToAddMap = {};
final allDeleteFiles = {};
final groupsToRemove = {};
for (final similarGroup in _similarFilesList) {
@@ -952,7 +935,7 @@ class _SimilarImagesPageState extends State {
}
}
}
- if (similarGroup.files.length <= 1) {
+ if (similarGroup.length <= 1) {
groupsToRemove.add(similarGroup);
}
if (groupDeleteFiles.isNotEmpty) {
@@ -968,7 +951,7 @@ class _SimilarImagesPageState extends State {
continue;
}
if (!collectionToFilesToAddMap.containsKey(collectionID)) {
- collectionToFilesToAddMap[collectionID] = [];
+ collectionToFilesToAddMap[collectionID] = {};
}
collectionToFilesToAddMap[collectionID]!.addAll(filesToKeep);
}
@@ -993,7 +976,7 @@ class _SimilarImagesPageState extends State {
}
await CollectionsService.instance.addSilentlyToCollection(
collectionID,
- collectionToFilesToAddMap[collectionID]!,
+ collectionToFilesToAddMap[collectionID]!.toList(),
);
}
}
@@ -1035,13 +1018,16 @@ class _SimilarImagesPageState extends State {
),
const SizedBox(height: 16),
Text(
- "Great job!", // TODO: lau: extract string
+ AppLocalizations.of(context).greatJob,
style: textTheme.h3Bold,
textAlign: TextAlign.center,
),
const SizedBox(height: 8),
Text(
- "You cleaned up $deletedCount similar ${deletedCount == 1 ? 'image' : 'images'} and freed up ${formatBytes(totalSize)}", // TODO: lau: extract string
+ AppLocalizations.of(context).cleanedUpSimilarImages(
+ count: deletedCount,
+ size: formatBytes(totalSize),
+ ),
style: textTheme.body,
textAlign: TextAlign.center,
),
@@ -1049,7 +1035,7 @@ class _SimilarImagesPageState extends State {
SizedBox(
width: double.infinity,
child: ButtonWidget(
- labelText: "Done", // TODO: lau: extract string
+ labelText: AppLocalizations.of(context).done,
buttonType: ButtonType.primary,
onTap: () async => Navigator.of(context).pop(),
),
@@ -1064,55 +1050,25 @@ class _SimilarImagesPageState extends State {
final textTheme = getEnteTextTheme(context);
final colorScheme = getEnteColorScheme(context);
- Widget sortOptionContent(SortKey key) {
+ Text sortOptionText(SortKey key) {
String text;
- Widget trailing;
-
switch (key) {
case SortKey.size:
- text = "Size"; // TODO: lau: extract string
- trailing = Icon(
- Icons.arrow_downward,
- size: 16,
- color: colorScheme.textMuted,
- );
+ text = AppLocalizations.of(context).size;
break;
case SortKey.distanceAsc:
- text = "Similarity"; // TODO: lau: extract string
- trailing = Icon(
- Icons.arrow_downward,
- size: 16,
- color: colorScheme.textMuted,
- );
+ text = AppLocalizations.of(context).similarity;
break;
case SortKey.distanceDesc:
- text = "Similarity"; // TODO: lau: extract string
- trailing = Icon(
- Icons.arrow_upward,
- size: 16,
- color: colorScheme.textMuted,
- );
+ text = "(I) Similarity ↑";
break;
case SortKey.count:
- text = "Count"; // TODO: lau: extract string
- trailing = Icon(
- Icons.arrow_downward,
- size: 16,
- color: colorScheme.textMuted,
- );
+ text = AppLocalizations.of(context).count;
break;
}
-
- return Row(
- mainAxisSize: MainAxisSize.min,
- children: [
- Text(
- text,
- style: textTheme.miniBold,
- ),
- const SizedBox(width: 8),
- trailing,
- ],
+ return Text(
+ text,
+ style: textTheme.miniBold,
);
}
@@ -1129,15 +1085,29 @@ class _SimilarImagesPageState extends State {
onSelected: (int index) {
if (_isDisposed) return;
setState(() {
- _sortKey = SortKey.values[index];
+ final newKey = SortKey.values[index];
+ if (newKey == _sortKey) {
+ return;
+ } else {
+ _sortKey = newKey;
+ }
});
_sortSimilarFiles();
},
itemBuilder: (context) {
- return List.generate(SortKey.values.length, (index) {
+ final sortKeys = kDebugMode
+ ? SortKey.values
+ : SortKey.values
+ .where((key) => key != SortKey.distanceDesc)
+ .toList();
+ return List.generate(sortKeys.length, (index) {
+ final sortKey = sortKeys[index];
return PopupMenuItem(
- value: index,
- child: sortOptionContent(SortKey.values[index]),
+ value: SortKey.values.indexOf(sortKey),
+ child: Text(
+ sortOptionText(sortKey).data!,
+ style: textTheme.miniBold,
+ ),
);
});
},
@@ -1160,13 +1130,14 @@ class _SimilarImagesLoadingWidgetState extends State
late Animation _scaleAnimation;
late Animation _pulseAnimation;
int _loadingMessageIndex = 0;
- final List _loadingMessages = [
- "Analyzing your photos locally", // TODO: lau: extract string
- "Finding similar images", // TODO: lau: extract string
- "Processing visual patterns", // TODO: lau: extract string
- "Comparing image features", // TODO: lau: extract string
- "Almost done", // TODO: lau: extract string
- ];
+
+ List get _loadingMessages => [
+ AppLocalizations.of(context).analyzingPhotosLocally,
+ AppLocalizations.of(context).findingSimilarImages,
+ AppLocalizations.of(context).processingVisualPatterns,
+ AppLocalizations.of(context).comparingImageFeatures,
+ AppLocalizations.of(context).almostDone,
+ ];
@override
void initState() {
@@ -1203,7 +1174,6 @@ class _SimilarImagesLoadingWidgetState extends State
),
);
- // Cycle through loading messages
_startMessageCycling();
}
@@ -1251,8 +1221,8 @@ class _SimilarImagesLoadingWidgetState extends State
height: 160,
decoration: BoxDecoration(
shape: BoxShape.circle,
- color: colorScheme.primary500.withOpacity(
- _pulseAnimation.value * 0.1,
+ color: colorScheme.primary500.withValues(
+ alpha: _pulseAnimation.value * 0.1,
),
),
);
@@ -1275,11 +1245,11 @@ class _SimilarImagesLoadingWidgetState extends State
),
gradient: SweepGradient(
colors: [
- colorScheme.primary500.withOpacity(0),
- colorScheme.primary500.withOpacity(0.3),
- colorScheme.primary500.withOpacity(0.6),
+ colorScheme.primary500.withValues(alpha: 0),
+ colorScheme.primary500.withValues(alpha: 0.3),
+ colorScheme.primary500.withValues(alpha: 0.6),
colorScheme.primary500,
- colorScheme.primary500.withOpacity(0),
+ colorScheme.primary500.withValues(alpha: 0),
],
stops: const [0.0, 0.25, 0.5, 0.75, 1.0],
),
@@ -1337,7 +1307,7 @@ class _SimilarImagesLoadingWidgetState extends State
),
const SizedBox(width: 6),
Text(
- "Processing locally", // TODO: lau: extract string
+ AppLocalizations.of(context).processingLocally,
style: textTheme.miniFaint,
),
],
@@ -1372,8 +1342,8 @@ class _SimilarImagesLoadingWidgetState extends State
height: 8,
decoration: BoxDecoration(
shape: BoxShape.circle,
- color: colorScheme.primary500.withOpacity(
- value < 0.5 ? value * 2 : 2 - value * 2,
+ color: colorScheme.primary500.withValues(
+ alpha: value < 0.5 ? value * 2 : 2 - value * 2,
),
),
);