From 3e51fa1f83fb8508f9d9ee00ae6b76d333db0692 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Mon, 28 Jul 2025 00:45:26 +0000 Subject: [PATCH 1/8] New Crowdin translations by GitHub Action --- web/packages/base/locales/lt-LT/translation.json | 4 ++-- web/packages/base/locales/vi-VN/translation.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/web/packages/base/locales/lt-LT/translation.json b/web/packages/base/locales/lt-LT/translation.json index 63c2068b73..b26aebb96d 100644 --- a/web/packages/base/locales/lt-LT/translation.json +++ b/web/packages/base/locales/lt-LT/translation.json @@ -162,7 +162,7 @@ "ok": "Gerai", "success": "Pavyko", "error": "Klaida", - "note": "", + "note": "Pastaba", "offline_message": "Esate neprisijungę. Rodomi prisiminimai iš podėlio.", "install": "Diegti", "install_mobile_app": "Įdiekite mūsų „Android“ arba „iOS“ programą, kad automatiškai sukurtumėte atsargines visų nuotraukų kopijas", @@ -685,5 +685,5 @@ "person_favorites": "{{name}} mėgstami", "shared_favorites": "Bendrinami mėgstami", "added_by_name": "Įtraukė {{name}}", - "unowned_files_not_processed": "" + "unowned_files_not_processed": "Kiti naudotojai pridėti failai nebuvo apdoroti" } diff --git a/web/packages/base/locales/vi-VN/translation.json b/web/packages/base/locales/vi-VN/translation.json index d4a6197a5a..f3dec27f76 100644 --- a/web/packages/base/locales/vi-VN/translation.json +++ b/web/packages/base/locales/vi-VN/translation.json @@ -283,7 +283,7 @@ "disable_maps_confirm_message": "

Ảnh của bạn sẽ thôi hiển thị trên bản đồ thế giới.

Bạn có thể bật tính năng này bất cứ lúc nào từ Cài đặt.

", "details": "Chi tiết", "view_exif": "Xem thông số Exif", - "no_exif": "No Exif data", + "no_exif": "Không có Exif", "exif": "Exif", "two_factor": "Xác thực 2 bước", "two_factor_authentication": "Xác thực 2 bước", From a7f56d3dab7eaa881ce8a37b319fbae3c8df4108 Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Mon, 28 Jul 2025 01:05:39 +0000 Subject: [PATCH 2/8] New Crowdin translations by GitHub Action --- mobile/apps/photos/lib/l10n/intl_lt.arb | 45 ++++++++++++++++++++++--- mobile/apps/photos/lib/l10n/intl_vi.arb | 6 ++-- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/mobile/apps/photos/lib/l10n/intl_lt.arb b/mobile/apps/photos/lib/l10n/intl_lt.arb index 704c8bc261..86b591e3ab 100644 --- a/mobile/apps/photos/lib/l10n/intl_lt.arb +++ b/mobile/apps/photos/lib/l10n/intl_lt.arb @@ -484,7 +484,7 @@ "backupOverMobileData": "Kurti atsargines kopijas per mobiliuosius duomenis", "backupVideos": "Kurti atsargines vaizdo įrašų kopijas", "disableAutoLock": "Išjungti automatinį užraktą", - "deviceLockExplanation": "Išjunkite įrenginio ekrano užraktą, kai „Ente“ yra priekiniame fone ir kuriama atsarginės kopijos. Paprastai to nereikia, bet tai gali padėti greičiau užbaigti didelius įkėlimus ir pradinį didelių bibliotekų importą.", + "deviceLockExplanation": "Išjunkite įrenginio ekrano užraktą, kai „Ente“ yra priekiniame fone ir kuriama atsarginės kopijos. Paprastai to nereikia, bet tai gali padėti sparčiau užbaigti didelius įkėlimus ir pradinį didelių bibliotekų importą.", "about": "Apie", "weAreOpenSource": "Esame atviro kodo!", "privacy": "Privatumas", @@ -1049,7 +1049,7 @@ "searchPeopleEmptySection": "Pakvieskite asmenis ir čia matysite visas jų bendrinamas nuotraukas.", "searchAlbumsEmptySection": "Albumai", "searchFileTypesAndNamesEmptySection": "Failų tipai ir pavadinimai", - "searchCaptionEmptySection": "Pridėkite aprašymus, pavyzdžiui, „#kelionė“, į nuotraukos informaciją, kad greičiau jas čia rastumėte.", + "searchCaptionEmptySection": "Pridėkite aprašus, pavyzdžiui, „#kelionė“, į nuotraukos informaciją, kad sparčiau jas čia rastumėte.", "language": "Kalba", "selectLanguage": "Pasirinkite kalbą", "locationName": "Vietovės pavadinimas", @@ -1264,11 +1264,11 @@ "joinDiscord": "Jungtis prie „Discord“", "locations": "Vietovės", "addAName": "Pridėti vardą", - "findThemQuickly": "Raskite juos greitai", + "findThemQuickly": "Raskite juos sparčiai", "@findThemQuickly": { "description": "Subtitle to indicate that the user can find people quickly by name" }, - "findPeopleByName": "Greitai suraskite žmones pagal vardą", + "findPeopleByName": "Sparčiai suraskite asmenis pagal vardą", "addViewers": "{count, plural, =0 {Pridėti žiūrėtojų} =1 {Pridėti žiūrėtoją} other {Pridėti žiūrėtojų}}", "addCollaborators": "{count, plural, =0 {Pridėti bendradarbių} =1 {Pridėti bendradarbį} other {Pridėti bendradarbių}}", "longPressAnEmailToVerifyEndToEndEncryption": "Ilgai paspauskite el. paštą, kad patvirtintumėte visapusį šifravimą.", @@ -1755,5 +1755,40 @@ "receiveRemindersOnBirthdays": "Gaukite priminimus, kai yra kažkieno gimtadienis. Paliesdami pranešimą, pateksite į gimtadienio šventės asmens nuotraukas.", "happyBirthday": "Su gimtadieniu! 🥳", "birthdays": "Gimtadieniai", - "wishThemAHappyBirthday": "Palinkėkite {name} su gimtadieniu! 🎉" + "wishThemAHappyBirthday": "Palinkėkite {name} su gimtadieniu! 🎉", + "areYouSureRemoveThisFaceFromPerson": "Ar tikrai norite pašalinti šį veidą iš šio asmens?", + "otherDetectedFaces": "Kiti aptikti veidai", + "areThey": "Ar jie ", + "questionmark": "?", + "saveAsAnotherPerson": "Išsaugoti kaip kitą asmenį", + "showLessFaces": "Rodyti mažiau veidų", + "showMoreFaces": "Rodyti daugiau veidų", + "ignore": "Ignoruoti", + "merge": "Sujungti", + "reset": "Atkurti", + "areYouSureYouWantToIgnoreThisPerson": "Ar tikrai norite ignoruoti šį asmenį?", + "areYouSureYouWantToIgnoreThesePersons": "Ar tikrai norite ignoruoti šiuos asmenis?", + "thePersonGroupsWillNotBeDisplayed": "Asmenų grupės nebebus rodomos asmenų sekcijoje. Nuotraukos liks nepakitusios.", + "thePersonWillNotBeDisplayed": "Asmuo nebebus rodomas asmenų sekcijoje. Nuotraukos liks nepakitusios.", + "areYouSureYouWantToMergeThem": "Ar tikrai norite juos sujungti?", + "allUnnamedGroupsWillBeMergedIntoTheSelectedPerson": "Visos nepavadintos grupės bus sujungtos su pasirinktu asmeniu. Tai vis dar galima atšaukti iš asmens pasiūlymų istorijos apžvalgos.", + "yesIgnore": "Taip, ignoruoti", + "same": "Tas pats", + "different": "Skirtingas", + "sameperson": "Tas pats asmuo?", + "cLTitle1": "Įkeliami dideli vaizdo įrašų failai", + "cLDesc1": "Po vaizdo įrašų srauto perdavimo beta versijos ir darbo prie tęsiamų įkėlimų ir atsisiuntimų, dabar padidinome failų įkėlimo ribą iki 10 GB. Tai dabar pasiekiama tiek kompiuterinėse, tiek mobiliosiose programėlėse.", + "cLTitle2": "Fono įkėlimas", + "cLDesc2": "Fono įkėlimai dabar palaikomi ir sistemoje „iOS“ bei „Android“ įrenginiuose. Nebereikia atverti programėlės, kad būtų galima sukurti naujausių nuotraukų ir vaizdo įrašų atsarginę kopiją.", + "cLTitle3": "Automatiniai peržiūros prisiminimai", + "cLDesc3": "Mes žymiai patobulinome prisiminimų patirtį, įskaitant automatinį peržiūrėjimą, braukimą į kitą prisiminimą ir daug daugiau.", + "cLTitle4": "Patobulintas veido atpažinimas", + "cLDesc4": "Kartu su daugybe vidinių patobulinimų, dabar daug lengviau matyti visus aptiktus veidus, pateikti atsiliepimus apie panašius veidus ir pridėti / pašalinti veidus iš vienos nuotraukos.", + "cLTitle5": "Gimtadienio pranešimai", + "cLDesc5": "Dabar gausite pranešimą apie galimybę atsisakyti visų gimtadienių, kuriuos išsaugojote platformoje „Ente“, kartu su geriausių jų nuotraukų rinkiniu.", + "cLTitle6": "Tęsiami įkėlimai ir atsisiuntimai", + "cLDesc6": "Nebereikia laukti įkėlimų / atsisiuntimų užbaigti, kad užvertumėte programėlę. Dabar visus įkėlimus ir atsisiuntimus galima pristabdyti ir tęsti nuo tos vietos, kurioje sustojote.", + "indexingPausedStatusDescription": "Indeksavimas pristabdytas. Jis bus automatiškai tęsiamas, kai įrenginys bus parengtas. Įrenginys laikomas parengtu, kai jo akumuliatoriaus įkrovos lygis, akumuliatoriaus būklė ir terminė būklė yra normos ribose.", + "faceThumbnailGenerationFailed": "Nepavyksta sugeneruoti veido miniatiūrų.", + "fileAnalysisFailed": "Nepavyksta išanalizuoti failo." } \ No newline at end of file diff --git a/mobile/apps/photos/lib/l10n/intl_vi.arb b/mobile/apps/photos/lib/l10n/intl_vi.arb index 952bff39bb..ff819b9fa8 100644 --- a/mobile/apps/photos/lib/l10n/intl_vi.arb +++ b/mobile/apps/photos/lib/l10n/intl_vi.arb @@ -870,9 +870,9 @@ "youCanTrySearchingForADifferentQuery": "Bạn có thể thử tìm kiếm một truy vấn khác.", "noResultsFound": "Không tìm thấy kết quả", "addedBy": "Được thêm bởi {emailOrName}", - "loadingExifData": "Đang tải thông số Exif...", + "loadingExifData": "Đang lấy thông số Exif...", "viewAllExifData": "Xem thông số Exif", - "noExifData": "Không có thông số Exif", + "noExifData": "Không có Exif", "thisImageHasNoExifData": "Ảnh này không có thông số Exif", "exif": "Exif", "noResults": "Không có kết quả", @@ -1217,7 +1217,7 @@ "searchHint4": "Vị trí", "searchHint5": "Sắp ra mắt: Nhận diện khuôn mặt & tìm kiếm vi diệu ✨", "addYourPhotosNow": "Thêm ảnh của bạn ngay bây giờ", - "searchResultCount": "{count, plural, other{{count} kết quả được tìm thấy}}", + "searchResultCount": "{count, plural, other{{count} kết quả đã tìm thấy}}", "@searchResultCount": { "description": "Text to tell user how many results were found for their search query", "placeholders": { From 58bf661e199324106d0c540f3e53c7e0d1f5604c Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Mon, 28 Jul 2025 01:18:16 +0000 Subject: [PATCH 3/8] New Crowdin translations by GitHub Action --- mobile/apps/auth/lib/l10n/arb/app_ar.arb | 10 +-- mobile/apps/auth/lib/l10n/arb/app_be.arb | 100 +++++++++++++++++++++++ mobile/apps/auth/lib/l10n/arb/app_fr.arb | 4 +- mobile/apps/auth/lib/l10n/arb/app_lt.arb | 1 + mobile/apps/auth/lib/l10n/arb/app_vi.arb | 6 +- 5 files changed, 111 insertions(+), 10 deletions(-) diff --git a/mobile/apps/auth/lib/l10n/arb/app_ar.arb b/mobile/apps/auth/lib/l10n/arb/app_ar.arb index 7872963dd8..3a0e7b5b61 100644 --- a/mobile/apps/auth/lib/l10n/arb/app_ar.arb +++ b/mobile/apps/auth/lib/l10n/arb/app_ar.arb @@ -1,6 +1,6 @@ { "account": "الحساب", - "unlock": "فتح القُفْل", + "unlock": "فتح القفل", "recoveryKey": "مفتاح الاسترداد", "counterAppBarTitle": "العداد", "@counterAppBarTitle": { @@ -9,8 +9,8 @@ "onBoardingBody": "النسخ الاحتياطي لشيفرات الاستيثاق ذي العاملين", "onBoardingGetStarted": "ابدأ الآن", "setupFirstAccount": "إعداد الحساب الأول الخاص بك", - "importScanQrCode": "مسح شيفرة الاستجابة السريعة", - "qrCode": "شيفرة الاستجابة السريعة", + "importScanQrCode": "مسح رمز QR", + "qrCode": "رمز QR", "importEnterSetupKey": "أدخِل مفتاح الإعداد", "importAccountPageTitle": "أدخل تفاصيل الحساب", "secretCanNotBeEmpty": "لا يمكن أن يكون رمز السر فارغ", @@ -36,7 +36,7 @@ "codeAccountHint": "الحساب (you@domain.com)", "codeTagHint": "وسم", "accountKeyType": "نوع المفتاح", - "sessionExpired": "انتهت صَلاحِيَة الجِلسة", + "sessionExpired": "انتهت صلاحية الجلسة", "@sessionExpired": { "description": "Title of the dialog when the users current session is invalid/expired" }, @@ -106,7 +106,7 @@ "importSelectJsonFile": "انتقِ ملف JSON", "importSelectAppExport": "حدد ملف التصدير الخاص بـ{appName}", "importEnteEncGuide": "اختر ملف JSON المشفر المصدَّر من Ente", - "importRaivoGuide": "استخدم خيار \"صدر كلمات المرور لمرة واحدة إلى أرشيف Zip\" في إعدادات Raivo.\n\nاستخرج ملف الـzip واسترد ملف الـJSON.", + "importRaivoGuide": "استخدم خيار تصدير OTP إلى أرشيف Zip في إعدادات Raivo.\n\nاستخرج ملف zip واسترد ملف JSON.", "importBitwardenGuide": "استخدم خيار \"تصدير خزانة\" داخل أدوات Bitwarden واستيراد ملف JSON غير مشفر.", "importAegisGuide": "استخدم خيار \"Export the vault\" في إعدادات Aegis.\n\nإذا كان المخزن الخاص بك مشفرًا، فستحتاج إلى إدخال كلمة مرور المخزن لفك تشفير المخزن.", "import2FasGuide": "استخدم خيار \"الإعدادات -> النسخ الاحتياطي - التصدير\" في 2FAS.\n\nإذا تم تشفير النسخة الاحتياطية، سوف تحتاج إلى إدخال كلمة المرور لفك تشفير النسخة الاحتياطية", diff --git a/mobile/apps/auth/lib/l10n/arb/app_be.arb b/mobile/apps/auth/lib/l10n/arb/app_be.arb index d1719f4549..8681fde972 100644 --- a/mobile/apps/auth/lib/l10n/arb/app_be.arb +++ b/mobile/apps/auth/lib/l10n/arb/app_be.arb @@ -52,6 +52,7 @@ "trashCodeMessage": "Вы сапраўды хочаце выдаліць код для {account}?", "trash": "Сметніца", "viewLogsAction": "Паглядзець журналы", + "sendLogsDescription": "Гэта абагуліць вашы журналы з намі і дапаможа адладзіць вашу праблему. Хоць мы і прымаем захады, каб канфідэнцыяльныя звесткі не рэгістраваліся, але рэкамендуецца прагледзець гэтыя журналы перад адпраўкай.", "preparingLogsTitle": "Падрыхтоўка журналаў...", "emailLogsTitle": "Адправіць журнал па электроннай пошце", "emailLogsMessage": "Адпраўце журналы на {email}", @@ -83,12 +84,15 @@ "pleaseWait": "Пачакайце...", "generatingEncryptionKeysTitle": "Генерацыя ключоў шыфравання...", "recreatePassword": "Стварыць пароль паўторна", + "recreatePasswordMessage": "У бягучай прылады недастаткова вылічальнай здольнасці для праверкі вашага паролю, таму неабходна регенерыраваць яго адзін раз такім чынам, каб гэта працавала з усімі прыладамі.\n\nУвайдзіце, выкарыстоўваючы свой ключа аднаўлення і регенерыруйце свой пароль (калі хочаце, то можаце выбраць папярэдні пароль).", "useRecoveryKey": "Выкарыстоўваць ключ аднаўлення", "incorrectPasswordTitle": "Няправільны пароль", "welcomeBack": "З вяртаннем!", "emailAlreadyRegistered": "Электронная пошта ўжо зарэгістравана.", "emailNotRegistered": "Электронная пошта не зарэгістравана.", "madeWithLoveAtPrefix": "зроблена з ❤️ у ", + "supportDevs": "Падпішыцеся на ente, каб падтрымаць нас", + "supportDiscount": "Выкарыстоўвайце купон з кодам «AUTH», каб атрымаць скідку ў памеры 10% за першы год", "changeEmail": "Змяніць адрас электроннай пошты", "changePassword": "Змяніць пароль", "data": "Даныя", @@ -98,13 +102,29 @@ "passwordForDecryptingExport": "Пароль для дэшыфроўкі экспартавання", "passwordEmptyError": "Пароль не можа быць пустым", "importFromApp": "Імпартаваць коды з {appName}", + "importGoogleAuthGuide": "Экспартуйце свае ўліковыя запісы з Google Authenticator у QR-код з дапамогай параметра «Перанесці ўліковыя запісы». Потым скарыстайцеся іншай прыладай, якая можа адсканіраваць QR-код.\n\nПарада: вы можаце скарыстацца вэб-камерай свайго ноўтбука, каб сфатаграфаваць QR-код.", "importSelectJsonFile": "Выбраць файл JSON", "importSelectAppExport": "Выберыце файл экспартавання {appName}", + "importEnteEncGuide": "Выберыце зашыфраваны файл JSON, які экспартаваны з Ente", + "importRaivoGuide": "Скарыстайцеся параметрам «Экспартаваць OTP у архіў ZIP» у наладах Raivo.\n\nВыньце файл ZIP і імпартуйце файл JSON.", + "importBitwardenGuide": "Скарыстайцеся параметрам «Экспартаваць сховішча» ў Bitwarden Tools і імпартуйце файл JSON.", + "importAegisGuide": "Скарыстайцеся параметрам «Экспартаваць сховішча» ў наладах Aegis.\n\nВам спатрэбіцца ўвесці пароль ад сховішча, каб дэшыфраваць яго (у выпадку, калі яно было зашыфравана раней).", + "import2FasGuide": "Скарыстайцеся параметрам «Налады -> Рэзервовае капіяванне -Экспартаванне» ў наладах 2FAS.\n\nВам спатрэбіцца ўвесці пароль, каб дэшыфраваць рэзервовую копію (у выпадку, калі яна была зашыфравана раней)", + "importLastpassGuide": "Скарыстайцеся параметрам «Перанесці ўліковыя запісы» ў налады Lastpass Authenticator і націсніце «Экспартаваць уліковыя запісы ў файл».", "exportCodes": "Экспартаваць коды", "importLabel": "Імпарт", + "importInstruction": "Выберыце файл, які змяшчае спіс вашых кодаў у наступным фармаце", + "importCodeDelimiterInfo": "Коды могуць быць адасоблены коскамі або новым радком", "selectFile": "Выбраць файл", "emailVerificationToggle": "Праверка эл. пошты", + "emailVerificationEnableWarning": "Пераканайцеся, што ў вас захавана копія 2ФА ад вашай электроннай пошты па-за межамі праграмы Ente Auth перад тым, як уключаць праверку электроннай пошты. Гэта дазволіць пазбегнуць блакіроўкі вашага ўліковага запісу.", + "authToChangeEmailVerificationSetting": "Прайдзіце аўтэнтыфікацыю, каб змяніць праверку адраса электроннай пошты", "authenticateGeneric": "Прайдзіце аўтэнтыфікацыю", + "authToViewYourRecoveryKey": "Прайдзіце аўтэнтыфікацыю для прагляду свайго ключа аднаўлення", + "authToChangeYourEmail": "Прайдзіце аўтэнтыфікацыю, каб змяніць сваю электронную пошту", + "authToChangeYourPassword": "Прайдзіце аўтэнтыфікацыю, каб змяніць свой пароль", + "authToViewSecrets": "Прайдзіце аўтэнтыфікацыю для прагляду сваіх сакрэтаў", + "authToInitiateSignIn": "Прайдзіце аўтэнтыфікацыю, каб пачаць уваход для рэзервовай копіі.", "ok": "OK", "cancel": "Скасаваць", "yes": "Так", @@ -123,12 +143,17 @@ "oops": "Вой", "suggestFeatures": "Прапанаваць функцыю", "faq": "Частыя пытанні", + "somethingWentWrongMessage": "Нешта пайшло не так. Паспрабуйце яшчэ раз", "leaveFamily": "Пакінуць сямейны план", + "leaveFamilyMessage": "Вы ўпэўнены, што хочаце выйсці з сямейнага плана?", "inFamilyPlanMessage": "Вы ўдзельнік сямейнага плана!", + "hintForMobile": "Доўгі націск на код для рэдагавання або выдалення.", + "hintForDesktop": "Правы націск на код для рэдагавання або выдалення.", "scan": "Сканіраваць", "scanACode": "Сканіраваць код", "verify": "Праверыць", "verifyEmail": "Праверыць электронную пошту", + "enterCodeHint": "Увядзіце шасцізначны код з\nвашай праграмы аўтэнтыфікацыі", "lostDeviceTitle": "Згубілі прыладу?", "twoFactorAuthTitle": "Двухфактарная аўтэнтыфікацыя", "passkeyAuthTitle": "Праверка ключа доступу", @@ -137,14 +162,25 @@ "recoverAccount": "Аднавіць уліковы запіс", "enterRecoveryKeyHint": "Увядзіце свой ключ аднаўлення", "recover": "Аднавіць", + "contactSupportViaEmailMessage": "Адпраўце ліст на {email} з вашага зарэгістраванага адраса электроннай пошты", + "@contactSupportViaEmailMessage": { + "placeholders": { + "email": { + "type": "String" + } + } + }, "invalidQRCode": "Памылковы QR-код", "noRecoveryKeyTitle": "Няма ключа аднаўлення?", "enterEmailHint": "Увядзіце свой адрас электроннай пошты", "enterNewEmailHint": "Увядзіце свой новы адрас электроннай пошты", "invalidEmailTitle": "Памылковы адрас электроннай пошты", + "invalidEmailMessage": "Увядзіце сапраўдны адрас электронная пошты.", "deleteAccount": "Выдаліць уліковы запіс", + "deleteAccountQuery": "Вельмі шкада, што вы пакідаеце нас. Вы сутыкнуліся з нейкай праблемай?", "yesSendFeedbackAction": "Так. Адправіць водгук", "noDeleteAccountAction": "Не, выдаліць уліковы запіс", + "initiateAccountDeleteTitle": "Прайдзіце аўтэнтыфікацыю, каб пачаць выдаленне ўліковага запісу", "sendEmail": "Адправіць ліст", "createNewAccount": "Стварыць новы ўліковы запіс", "weakStrength": "Ненадзейны", @@ -158,9 +194,13 @@ "social": "Сацыяльныя сеткі", "security": "Бяспека", "lockscreen": "Экран блакіроўкі", + "authToChangeLockscreenSetting": "Прайдзіце аўтэнтыфікацыю, каб змяніць налады блакіроўкі экрана", + "deviceLockEnablePreSteps": "Наладзьце код доступу да прылады або блакіроўку экрана ў наладах вашай сістэме, каб уключыць блакіроўку прылады.", "viewActiveSessions": "Паглядзець актыўныя сеансы", + "authToViewYourActiveSessions": "Прайдзіце аўтэнтыфікацыю для прагляду сваіх актыўных сеансаў", "searchHint": "Пошук...", "search": "Пошук", + "sorryUnableToGenCode": "Немагчыма згенерыраваць код з {issuerName}", "noResult": "Няма вынікаў", "addCode": "Дадаць код", "scanAQrCode": "Сканіраваць QR-код", @@ -168,18 +208,36 @@ "edit": "Рэдагаваць", "share": "Абагуліць", "shareCodes": "Абагуліць коды", + "shareCodesDuration": "Выберыце працягласць, на якую вы хочаце абагуліць коды.", "restore": "Аднавіць", "copiedToClipboard": "Скапіявана ў буфер абмену", "copiedNextToClipboard": "Скапіяваць наступны код у буфер абмену", "error": "Памылка", "recoveryKeyCopiedToClipboard": "Ключ аднаўлення скапіяваны ў буфер абмену", + "recoveryKeyOnForgotPassword": "Адзіным спосабам аднавіць вашы даныя з'яўляецца гэты ключ, калі вы забылі свой пароль.", + "recoveryKeySaveDescription": "Захавайце гэты ключ, які складаецца з 24 слоў, у наедзеным месцы. Ён не захоўваецца на нашым серверы.", "doThisLater": "Зрабіць гэта пазней", "saveKey": "Захаваць ключ", "save": "Захаваць", "send": "Адправіць", + "saveOrSendDescription": "Вы сапраўды хочаце захаваць гэта ў сваім сховішчы (прадвызначана папка са спампоўваннямі) або адправіць у іншыя праграмы?", + "saveOnlyDescription": "Вы сапраўды хочаце захаваць гэта ў сваім сховішчы (прадвызначана папка са спампоўваннямі)?", "back": "Назад", "createAccount": "Стварыць уліковы запіс", + "passwordStrength": "Надзейнасць пароля: {passwordStrengthValue}", + "@passwordStrength": { + "description": "Text to indicate the password strength", + "placeholders": { + "passwordStrengthValue": { + "description": "The strength of the password as a string", + "type": "String", + "example": "Weak or Moderate or Strong" + } + }, + "message": "Password Strength: {passwordStrengthText}" + }, "password": "Пароль", + "signUpTerms": "Я пагаджаюся з умовамі абслугоўвання і палітыкай прыватнасці", "privacyPolicyTitle": "Палітыка прыватнасці", "termsOfServicesTitle": "Умовы", "encryption": "Шыфраванне", @@ -187,11 +245,17 @@ "changePasswordTitle": "Змяніць пароль", "resetPasswordTitle": "Скінуць пароль", "encryptionKeys": "Ключы шыфравання", + "passwordWarning": "Мы не захоўваем гэты пароль і мы не зможам расшыфраваць вашы даныя, калі вы забудзеце яго", + "enterPasswordToEncrypt": "Увядзіце пароль, каб была магчымасць выкарыстаць яго для расшыфроўкі вашых даных", + "enterNewPasswordToEncrypt": "Увядзіце новы пароль, каб мы маглі выкарыстаць яго для расшыфроўкі вашых даных", "passwordChangedSuccessfully": "Пароль паспяхова зменены", "generatingEncryptionKeys": "Генерацыя ключоў шыфравання...", "continueLabel": "Працягнуць", "insecureDevice": "Небяспечная прылада", + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Немагчыма згенерыраваць ключы бяспекі на гэтай прыладзе.\n\nЗарэгіструйцеся з іншай прылады.", "howItWorks": "Як гэта працуе", + "ackPasswordLostWarning": "Я ўсведамляю, што калі я страчу свой пароль, то я магу згубіць свае даныя, бо мае даныя абаронены скразным шыфраваннем.", + "loginTerms": "Націскаючы ўвайсці, я згаджаюся з умовамі абслугоўвання і палітыкай прыватнасці", "logInLabel": "Увайсці", "logout": "Выйсці", "areYouSureYouWantToLogout": "Вы сапраўды хочаце выйсці?", @@ -203,6 +267,7 @@ "systemTheme": "Сістэманая", "verifyingRecoveryKey": "Праверка ключа аднаўлення...", "recoveryKeyVerified": "Ключ аднаўлення правераны", + "recoveryKeySuccessBody": "Усё ў парадку! Вашы ключ аднаўлення з'яўляецца сапраўдным.\n\nНе забывайце захоўваць ваш ключ аднаўлення ў надзейным месцы.", "recreatePasswordTitle": "Стварыць пароль паўторна", "invalidKey": "Памылковы ключ", "tryAgain": "Паспрабуйце яшчэ раз", @@ -254,20 +319,40 @@ "checkInboxAndSpamFolder": "Праверце свае ўваходныя лісты (і спам) для завяршэння праверкі", "tapToEnterCode": "Націсніце, каб увесці код", "resendEmail": "Адправіць ліст яшчэ раз", + "weHaveSendEmailTo": "Ліст адпраўлены на электронную пошту {email}", + "@weHaveSendEmailTo": { + "description": "Text to indicate that we have sent a mail to the user", + "placeholders": { + "email": { + "description": "The email address of the user", + "type": "String", + "example": "example@ente.io" + } + } + }, "manualSort": "Карыстальніцкая", "editOrder": "Рэдагаваць заказ", "mostFrequentlyUsed": "Часта выкарыстоўваюцца", "mostRecentlyUsed": "Нядаўна выкарыстаныя", "activeSessions": "Актыўныя сеансы", + "somethingWentWrongPleaseTryAgain": "Нешта пайшло не так. Паспрабуйце яшчэ раз", + "thisWillLogYouOutOfThisDevice": "Гэта дзеянне завершыць сеанс на вашай прыладзе!", + "thisWillLogYouOutOfTheFollowingDevice": "Гэта дзеянне завершыць сеанс наступнай прылады:", "terminateSession": "Перарваць сеанс?", "terminate": "Перарваць", "thisDevice": "Гэта прылада", + "toResetVerifyEmail": "Спачатку праверце электронную пошту, каб скінуць свой пароль.", "thisEmailIsAlreadyInUse": "Гэта электронная пошта ўжо выкарыстоўваецца", + "verificationFailedPleaseTryAgain": "Збой праверкі. Паспрабуйце яшчэ раз", "yourVerificationCodeHasExpired": "Ваш праверачны код пратэрмінаваны", "incorrectCode": "Няправільны код", + "sorryTheCodeYouveEnteredIsIncorrect": "Уведзены вамі код з'яўляецца няправільным", "emailChangedTo": "Электронная пошта зменена на {newEmail}", + "authenticationFailedPleaseTryAgain": "Збой аўтэнтыфікацыі. Паспрабуйце яшчэ раз", "authenticationSuccessful": "Аўтэнтыфікацыя паспяхова пройдзена!", + "twofactorAuthenticationSuccessfullyReset": "Двухфактарная аўтэнтыфікацыя паспяхова скінута", "incorrectRecoveryKey": "Няправільны ключ аднаўлення", + "theRecoveryKeyYouEnteredIsIncorrect": "Вы ўвялі памылковы ключ аднаўлення", "enterPassword": "Увядзіце пароль", "selectExportFormat": "Выберыце фармат экспартавання", "exportDialogDesc": "Зашыфраванае экспартаванне будзе абаронена паролем, які вы выберыце.", @@ -332,14 +417,19 @@ "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." }, "noInternetConnection": "Адсутнічае падключэнне да інтэрнэту", + "pleaseCheckYourInternetConnectionAndTryAgain": "Праверце злучэнне з інтэрнэтам і паспрабуйце яшчэ раз.", "signOutFromOtherDevices": "Выйсці з іншых прылад", "signOutOtherDevices": "Выйсці на іншых прыладах", "doNotSignOut": "Не выходзіць", + "hearUsWhereTitle": "Адкуль вы пачулі пра Ente? (неабавязкова)", + "recoveryKeySaved": "Ключ аднаўлення захаваны ў папцы «Спампоўкі»!", "waitingForBrowserRequest": "Чаканне запыту браўзера...", "waitingForVerification": "Чаканне праверкі...", "passkey": "Ключ доступу", "passKeyPendingVerification": "Праверка пакуль яшчэ не завершана", "loginSessionExpired": "Сеанс завяршыўся", + "loginSessionExpiredDetails": "Ваш сеанс завяршыўся. Увайдзіце яшчэ раз.", + "developerSettingsWarning": "Вы ўпэўнены, што хочаце змяніць налады распрацоўшчыка?", "developerSettings": "Налады распрацоўшчыка", "serverEndpoint": "Канцавы пункт сервера", "invalidEndpoint": "Памылковы канцавы пункт", @@ -356,6 +446,7 @@ "create": "Стварыць", "editTag": "Рэдагаванне тэг", "deleteTagTitle": "Выдаліць тэг?", + "somethingWentWrongParsingCode": "Немагчыма прааналізаваць коды (колькасць: {x}).", "updateNotAvailable": "Абнаўленне недаступна", "viewRawCodes": "Паглядзець неапрацаваныя коды", "rawCodes": "Неапрацаваныя коды", @@ -372,12 +463,17 @@ "setNewPassword": "Задаць новы пароль", "deviceLock": "Блакіроўка прылады", "hideContent": "Схаваць змест", + "hideContentDescriptioniOS": "Хаваць змесціва праграмы ў пераключальніку праграм", "pinLock": "Блакіроўка PIN'ам", "enterPin": "Увядзіце PIN-код", "setNewPin": "Задаць новы PIN", + "importFailureDescNew": "Не ўдалося прааналізаваць выбраны файл.", "appLockNotEnabled": "Блакіроўка праграмы не ўключана", + "appLockNotEnabledDescription": "Уключыце блакіроўку праграмы ў раздзеле «Бяспека» -> «Блакіроўка праграмы»", + "authToViewPasskey": "Прайдзіце аўтэнтыфікацыю, каб паглядзець ключ доступу", "duplicateCodes": "Дублікаты кадоў", "noDuplicates": "✨ Няма дублікатаў", + "youveNoDuplicateCodesThatCanBeCleared": "У вас адсутнічаць дубліраваныя коды, які можна ачысціць", "deduplicateCodes": "Дубліраваныя кады", "deselectAll": "Зняць выбар з усіх", "selectAll": "Выбраць усе", @@ -386,8 +482,12 @@ "tellUsWhatYouThink": "Раскажыце, што вы думаеце", "dropReviewiOS": "Пакіньце водгук у App Store", "dropReviewAndroid": "Пакіньце водгук у Play Store", + "supportEnte": "Падтрымка ente", "giveUsAStarOnGithub": "Адзначце нас зоркай на Github", + "free5GB": "Бясплатна 5 ГБ на ente Photos", "loginWithAuthAccount": "Увайдзіце з дапамогай уліковага запісу Auth", + "freeStorageOffer": "Скідка ў памеры 10% на ente Photos", + "freeStorageOfferDescription": "Выкарыстоўвайце код «AUTH», каб атрымаць скідку ў памеры 10% за першы год", "advanced": "Пашыраныя", "algorithm": "Алгарытм", "type": "Тып", diff --git a/mobile/apps/auth/lib/l10n/arb/app_fr.arb b/mobile/apps/auth/lib/l10n/arb/app_fr.arb index 4d0b461bed..d402d56f9e 100644 --- a/mobile/apps/auth/lib/l10n/arb/app_fr.arb +++ b/mobile/apps/auth/lib/l10n/arb/app_fr.arb @@ -347,14 +347,14 @@ "terminate": "Quitter", "thisDevice": "Cet appareil", "toResetVerifyEmail": "Pour réinitialiser votre mot de passe, veuillez d'abord vérifier votre e-mail.", - "thisEmailIsAlreadyInUse": "Cette adresse mail est déjà utilisé", + "thisEmailIsAlreadyInUse": "Cette adresse mail est déjà utilisée", "verificationFailedPleaseTryAgain": "La vérification a échouée, veuillez réessayer", "yourVerificationCodeHasExpired": "Votre code de vérification a expiré", "incorrectCode": "Code non valide", "sorryTheCodeYouveEnteredIsIncorrect": "Le code que vous avez saisi est incorrect", "emailChangedTo": "L'e-mail a été changé en {newEmail}", "authenticationFailedPleaseTryAgain": "L'authentification a échouée, veuillez réessayer", - "authenticationSuccessful": "Authentification réussie!", + "authenticationSuccessful": "Authentification réussie !", "twofactorAuthenticationSuccessfullyReset": "L'authentification à deux facteurs a été réinitialisée avec succès ", "incorrectRecoveryKey": "Clé de récupération non valide", "theRecoveryKeyYouEnteredIsIncorrect": "La clé de récupération que vous avez entrée est incorrecte", diff --git a/mobile/apps/auth/lib/l10n/arb/app_lt.arb b/mobile/apps/auth/lib/l10n/arb/app_lt.arb index cd39c8b60f..3b3c0523e4 100644 --- a/mobile/apps/auth/lib/l10n/arb/app_lt.arb +++ b/mobile/apps/auth/lib/l10n/arb/app_lt.arb @@ -173,6 +173,7 @@ "invalidQRCode": "Netinkamas QR kodas.", "noRecoveryKeyTitle": "Neturite atkūrimo rakto?", "enterEmailHint": "Įveskite savo el. pašto adresą", + "enterNewEmailHint": "Įveskite savo naują el. pašto adresą", "invalidEmailTitle": "Netinkamas el. pašto adresas", "invalidEmailMessage": "Įveskite tinkamą el. pašto adresą.", "deleteAccount": "Ištrinti paskyrą", diff --git a/mobile/apps/auth/lib/l10n/arb/app_vi.arb b/mobile/apps/auth/lib/l10n/arb/app_vi.arb index 361f40f3d4..99909658ca 100644 --- a/mobile/apps/auth/lib/l10n/arb/app_vi.arb +++ b/mobile/apps/auth/lib/l10n/arb/app_vi.arb @@ -91,7 +91,7 @@ "emailAlreadyRegistered": "Email đã được đăng ký.", "emailNotRegistered": "Email chưa được đăng ký.", "madeWithLoveAtPrefix": "lập trình bằng ❤️ bởi ", - "supportDevs": "Đăng ký ente để hỗ trợ dự án này.", + "supportDevs": "Đăng ký ente để hỗ trợ chúng tôi", "supportDiscount": "Dùng mã \"AUTH\" để được giảm 10% trong năm đầu tiên", "changeEmail": "Đổi email", "changePassword": "Đổi mật khẩu", @@ -513,8 +513,8 @@ "giveUsAStarOnGithub": "Tặng sao trên GitHub", "free5GB": "Miễn phí 5GB cho ente Photos", "loginWithAuthAccount": "Đăng nhập bằng tài khoản Ente Auth", - "freeStorageOffer": "Giảm giá 10% cho ente Photos", - "freeStorageOfferDescription": "Dùng mã \"AUTH\" để được giảm 10% trong năm đầu tiên", + "freeStorageOffer": "Giảm 10% ente Photos", + "freeStorageOfferDescription": "Dùng mã \"AUTH\" để giảm 10% năm đầu tiên", "advanced": "Nâng cao", "algorithm": "Thuật toán", "type": "Loại", From f621461ba88772e1d8bc58bd6ba6de2685e39441 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 28 Jul 2025 13:41:37 +0530 Subject: [PATCH 4/8] Prettier: preserve proseWrap Always inserts linebreaks in positions that can break markdown content. --- desktop/.prettierrc.json | 1 - docs/.prettierrc.json | 3 +-- infra/staff/.prettierrc.json | 1 - infra/workers/.prettierrc.json | 3 +-- web/.prettierrc.json | 1 - 5 files changed, 2 insertions(+), 7 deletions(-) diff --git a/desktop/.prettierrc.json b/desktop/.prettierrc.json index 5c2751a5f9..0fe565bdad 100644 --- a/desktop/.prettierrc.json +++ b/desktop/.prettierrc.json @@ -1,6 +1,5 @@ { "tabWidth": 4, - "proseWrap": "always", "objectWrap": "collapse", "plugins": [ "prettier-plugin-organize-imports", diff --git a/docs/.prettierrc.json b/docs/.prettierrc.json index 8af31cded5..0a02bcefda 100644 --- a/docs/.prettierrc.json +++ b/docs/.prettierrc.json @@ -1,4 +1,3 @@ { - "tabWidth": 4, - "proseWrap": "always" + "tabWidth": 4 } diff --git a/infra/staff/.prettierrc.json b/infra/staff/.prettierrc.json index 7cf8c86c77..8b06525972 100644 --- a/infra/staff/.prettierrc.json +++ b/infra/staff/.prettierrc.json @@ -1,6 +1,5 @@ { "tabWidth": 4, - "proseWrap": "always", "plugins": [ "prettier-plugin-organize-imports", "prettier-plugin-packagejson" diff --git a/infra/workers/.prettierrc.json b/infra/workers/.prettierrc.json index 8af31cded5..0a02bcefda 100644 --- a/infra/workers/.prettierrc.json +++ b/infra/workers/.prettierrc.json @@ -1,4 +1,3 @@ { - "tabWidth": 4, - "proseWrap": "always" + "tabWidth": 4 } diff --git a/web/.prettierrc.json b/web/.prettierrc.json index 61cbc54727..bac8f0c074 100644 --- a/web/.prettierrc.json +++ b/web/.prettierrc.json @@ -1,6 +1,5 @@ { "tabWidth": 4, - "proseWrap": "always", "objectWrap": "collapse", "plugins": [ "prettier-plugin-organize-imports", From 3133a757ce06c144c1ab87a031891062c5b4729c Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 28 Jul 2025 14:01:51 +0530 Subject: [PATCH 5/8] Run prettier --- desktop/.github/workflows/desktop-release.yml | 6 ++---- docs/docs/auth/migration/index.md | 3 +-- docs/docs/photos/faq/desktop.md | 3 +-- docs/docs/photos/faq/security-and-privacy.md | 3 +-- docs/docs/photos/features/cast/index.md | 3 +-- docs/docs/photos/features/family-plans.md | 3 +-- docs/docs/photos/features/watch-folders.md | 3 +-- docs/docs/photos/migration/from-local-hard-disk.md | 3 +-- docs/docs/photos/troubleshooting/files-not-uploading.md | 3 +-- 9 files changed, 10 insertions(+), 20 deletions(-) diff --git a/desktop/.github/workflows/desktop-release.yml b/desktop/.github/workflows/desktop-release.yml index a3b8b38a13..69fd67ee96 100644 --- a/desktop/.github/workflows/desktop-release.yml +++ b/desktop/.github/workflows/desktop-release.yml @@ -44,8 +44,7 @@ jobs: # If triggered by a tag, checkout photosd-$tag from the source # repository. Otherwise checkout $source (default: "main"). repository: ente-io/ente - ref: - "${{ startsWith(github.ref, 'refs/tags/v') && + ref: "${{ startsWith(github.ref, 'refs/tags/v') && format('photosd-{0}', github.ref_name) || ( inputs.source || 'main' ) }}" @@ -110,8 +109,7 @@ jobs: env: # macOS notarization credentials key details APPLE_ID: ${{ secrets.APPLE_ID }} - APPLE_APP_SPECIFIC_PASSWORD: - ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} + APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} # Windows Azure Trusted Signing related values # https://www.electron.build/code-signing-win#using-azure-trusted-signing-beta diff --git a/docs/docs/auth/migration/index.md b/docs/docs/auth/migration/index.md index 24833a2cda..6622a27e25 100644 --- a/docs/docs/auth/migration/index.md +++ b/docs/docs/auth/migration/index.md @@ -1,7 +1,6 @@ --- title: Migrating to Ente Auth -description: - Guides for migrating your existing 2FA tokens into or out of Ente Auth +description: Guides for migrating your existing 2FA tokens into or out of Ente Auth --- # Migrating to/from Ente Auth diff --git a/docs/docs/photos/faq/desktop.md b/docs/docs/photos/faq/desktop.md index c0ef805584..b705bedfc4 100644 --- a/docs/docs/photos/faq/desktop.md +++ b/docs/docs/photos/faq/desktop.md @@ -1,7 +1,6 @@ --- title: Desktop app FAQ -description: - An assortment of frequently asked questions about Ente Photos desktop app +description: An assortment of frequently asked questions about Ente Photos desktop app --- # Desktop app FAQ diff --git a/docs/docs/photos/faq/security-and-privacy.md b/docs/docs/photos/faq/security-and-privacy.md index 6f40ab043f..dc8a1daac3 100644 --- a/docs/docs/photos/faq/security-and-privacy.md +++ b/docs/docs/photos/faq/security-and-privacy.md @@ -1,7 +1,6 @@ --- title: Security and Privacy FAQ -description: - Comprehensive information about security and privacy measures in Ente Photos +description: Comprehensive information about security and privacy measures in Ente Photos --- # Security and Privacy FAQ diff --git a/docs/docs/photos/features/cast/index.md b/docs/docs/photos/features/cast/index.md index 8a19090bc7..5a29e3b789 100644 --- a/docs/docs/photos/features/cast/index.md +++ b/docs/docs/photos/features/cast/index.md @@ -1,7 +1,6 @@ --- title: Cast -description: - Casting your photos on to a large screen or a TV or a Chromecast device +description: Casting your photos on to a large screen or a TV or a Chromecast device --- # Cast diff --git a/docs/docs/photos/features/family-plans.md b/docs/docs/photos/features/family-plans.md index cc5ee52aff..ff02a07aa1 100644 --- a/docs/docs/photos/features/family-plans.md +++ b/docs/docs/photos/features/family-plans.md @@ -1,7 +1,6 @@ --- title: Family plans -description: - Share your Ente Photos plan with your family members with no extra cost +description: Share your Ente Photos plan with your family members with no extra cost --- # Family plans diff --git a/docs/docs/photos/features/watch-folders.md b/docs/docs/photos/features/watch-folders.md index 7dea25e369..0b3e3310ab 100644 --- a/docs/docs/photos/features/watch-folders.md +++ b/docs/docs/photos/features/watch-folders.md @@ -1,7 +1,6 @@ --- title: Watch folder -description: - Automatic syncing of selected folders using the Ente Photos desktop app +description: Automatic syncing of selected folders using the Ente Photos desktop app --- # Watch folders diff --git a/docs/docs/photos/migration/from-local-hard-disk.md b/docs/docs/photos/migration/from-local-hard-disk.md index 91971ba198..1f42840f2e 100644 --- a/docs/docs/photos/migration/from-local-hard-disk.md +++ b/docs/docs/photos/migration/from-local-hard-disk.md @@ -1,7 +1,6 @@ --- title: Import from local hard disk -description: - Migrating to Ente Photos by importing data from your local hard disk +description: Migrating to Ente Photos by importing data from your local hard disk --- # Import photos from your local hard disk diff --git a/docs/docs/photos/troubleshooting/files-not-uploading.md b/docs/docs/photos/troubleshooting/files-not-uploading.md index b56afe57e3..331ae80e14 100644 --- a/docs/docs/photos/troubleshooting/files-not-uploading.md +++ b/docs/docs/photos/troubleshooting/files-not-uploading.md @@ -1,7 +1,6 @@ --- title: Files not uploading -description: - Troubleshooting when files are not uploading from your Ente Photos app +description: Troubleshooting when files are not uploading from your Ente Photos app --- # Files not uploading From 62049275f366d1e27bb13785b715791ed4965902 Mon Sep 17 00:00:00 2001 From: Manav Rathi Date: Mon, 28 Jul 2025 19:25:33 +0530 Subject: [PATCH 6/8] Handle old public albums e.g. "Trip to Sikkim" from the blog post --- web/packages/media/magic-metadata.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/packages/media/magic-metadata.ts b/web/packages/media/magic-metadata.ts index f5c308e7af..6e2857f97f 100644 --- a/web/packages/media/magic-metadata.ts +++ b/web/packages/media/magic-metadata.ts @@ -1,4 +1,5 @@ import { decryptMetadataJSON, encryptMetadataJSON } from "ente-base/crypto"; +import { nullishToZero } from "ente-utils/transform"; import { z } from "zod/v4"; /** @@ -10,7 +11,7 @@ import { z } from "zod/v4"; */ export const RemoteMagicMetadata = z.object({ version: z.number(), - count: z.number(), + count: z.number().nullish().transform(nullishToZero), data: z.string(), header: z.string(), }); From b1f6c576018f2254f5034a21d1c802fa10345583 Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Tue, 29 Jul 2025 10:16:53 +0200 Subject: [PATCH 7/8] Revert error on rotated image decoding for indexing --- mobile/apps/photos/lib/utils/image_ml_util.dart | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/mobile/apps/photos/lib/utils/image_ml_util.dart b/mobile/apps/photos/lib/utils/image_ml_util.dart index 0ab1428fea..7d68ec460b 100644 --- a/mobile/apps/photos/lib/utils/image_ml_util.dart +++ b/mobile/apps/photos/lib/utils/image_ml_util.dart @@ -53,10 +53,10 @@ Future decodeImageFromPath( final Map exifData = await readExifFromBytes(imageData); final int orientation = exifData['Image Orientation']?.values.firstAsInt() ?? 1; + final format = imagePath.split('.').last; if (orientation > 1 && includeRgbaBytes) { - _logger.severe("Image EXIF orientation $orientation is not supported"); - throw Exception( - 'UnhandledExifOrientation: exif orientation $orientation', + _logger.warning( + "Image EXIF orientation $orientation might not work, for format $format", ); } @@ -64,7 +64,6 @@ Future decodeImageFromPath( try { image = await decodeImageFromData(imageData); } catch (e, s) { - final format = imagePath.split('.').last; _logger.info( 'Cannot decode $format on ${Platform.isAndroid ? "Android" : "iOS"}, converting to jpeg', ); From c8e84c9af35c86ced83a8febfcf2f8c64a76c7a2 Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Tue, 29 Jul 2025 10:25:20 +0200 Subject: [PATCH 8/8] More neutral log line for heic --- mobile/apps/photos/lib/utils/image_ml_util.dart | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/mobile/apps/photos/lib/utils/image_ml_util.dart b/mobile/apps/photos/lib/utils/image_ml_util.dart index 7d68ec460b..795ff47d60 100644 --- a/mobile/apps/photos/lib/utils/image_ml_util.dart +++ b/mobile/apps/photos/lib/utils/image_ml_util.dart @@ -53,11 +53,16 @@ Future decodeImageFromPath( final Map exifData = await readExifFromBytes(imageData); final int orientation = exifData['Image Orientation']?.values.firstAsInt() ?? 1; - final format = imagePath.split('.').last; + final format = imagePath.split('.').last.toLowerCase(); if (orientation > 1 && includeRgbaBytes) { - _logger.warning( - "Image EXIF orientation $orientation might not work, for format $format", - ); + if (format == 'heic' || format == 'heif') { + _logger + .info("Decoding HEIC/HEIF image with EXIF orientation $orientation"); + } else { + _logger.warning( + "Decoding image with EXIF orientation $orientation, for format $format", + ); + } } late Image image;