diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index b431a08f6c..6bb853b994 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -26,6 +26,20 @@ body: label: Version description: The version can be seen at the bottom of settings. placeholder: e.g. v1.2.3 + - type: input + attributes: + label: Last working version + description: > + The version where the feature was last known to be working. It is + fine if you don't remember the exact version (mention roughly + then), but if there just isn't a last known working version, then + it is likely that what is being reported is not an issue but a + feature request. The difference between the two categories is not + just semantic - feature requests use GitHub discussions and so can + be [upvoted by the + community](https://github.com/ente-io/ente/discussions/categories/feature-requests) + (issues can't be). + placeholder: e.g. v1.2.3 - type: dropdown attributes: label: What product are you using? diff --git a/.github/workflows/auth-release.yml b/.github/workflows/auth-release.yml index 697c08efd2..bab3f58505 100644 --- a/.github/workflows/auth-release.yml +++ b/.github/workflows/auth-release.yml @@ -36,7 +36,7 @@ permissions: jobs: build-linux-latest: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 defaults: run: @@ -93,7 +93,7 @@ jobs: - name: Install dependencies for desktop build run: | sudo apt-get update -y - sudo apt-get install -y libsecret-1-dev libsodium-dev libfuse2 ninja-build libgtk-3-dev dpkg-dev pkg-config rpm patchelf libsqlite3-dev locate libayatana-appindicator3-dev libffi-dev libtiff6 xz-utils libarchive-tools libcurl4-openssl-dev + sudo apt-get install -y libsecret-1-dev libsodium-dev libfuse2 ninja-build libgtk-3-dev dpkg-dev pkg-config rpm patchelf libsqlite3-dev locate libayatana-appindicator3-dev libffi-dev libtiff5 xz-utils libarchive-tools libcurl4-openssl-dev sudo updatedb --localpaths='/usr/lib/x86_64-linux-gnu' - name: Install appimagetool diff --git a/.github/workflows/desktop-lint.yml b/.github/workflows/desktop-lint.yml index 8480fabc0d..c384cb2268 100644 --- a/.github/workflows/desktop-lint.yml +++ b/.github/workflows/desktop-lint.yml @@ -23,7 +23,7 @@ jobs: - name: Setup node and enable yarn caching uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: "yarn" cache-dependency-path: "desktop/yarn.lock" diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml index 1737775726..10fc84fe5f 100644 --- a/.github/workflows/docs-deploy.yml +++ b/.github/workflows/docs-deploy.yml @@ -28,7 +28,7 @@ jobs: - name: Setup node and enable yarn caching uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: "yarn" cache-dependency-path: "docs/yarn.lock" diff --git a/.github/workflows/docs-verify-build.yml b/.github/workflows/docs-verify-build.yml index a0b4cc359a..afede699b6 100644 --- a/.github/workflows/docs-verify-build.yml +++ b/.github/workflows/docs-verify-build.yml @@ -28,7 +28,7 @@ jobs: - name: Setup node and enable yarn caching uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: "yarn" cache-dependency-path: "docs/yarn.lock" diff --git a/.github/workflows/infra-deploy-staff.yml b/.github/workflows/infra-deploy-staff.yml index 6f1bf7212e..c38ede760e 100644 --- a/.github/workflows/infra-deploy-staff.yml +++ b/.github/workflows/infra-deploy-staff.yml @@ -28,7 +28,7 @@ jobs: - name: Setup node and enable yarn caching uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: "yarn" cache-dependency-path: "infra/staff/yarn.lock" diff --git a/.github/workflows/infra-lint-staff.yml b/.github/workflows/infra-lint-staff.yml index ed2189181d..9022fa6125 100644 --- a/.github/workflows/infra-lint-staff.yml +++ b/.github/workflows/infra-lint-staff.yml @@ -25,7 +25,7 @@ jobs: - name: Setup node and enable yarn caching uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: "yarn" cache-dependency-path: "infra/staff/yarn.lock" diff --git a/.github/workflows/server-publish-ghcr.yml b/.github/workflows/server-publish-ghcr.yml index 1d2e059208..3206f31751 100644 --- a/.github/workflows/server-publish-ghcr.yml +++ b/.github/workflows/server-publish-ghcr.yml @@ -8,7 +8,7 @@ on: workflow_dispatch: permissions: - contents: read + contents: write # for pushing the `ghcr/server` branch packages: write jobs: diff --git a/.github/workflows/web-deploy-one.yml b/.github/workflows/web-deploy-one.yml index 62711ec7ae..fd24af13e3 100644 --- a/.github/workflows/web-deploy-one.yml +++ b/.github/workflows/web-deploy-one.yml @@ -33,7 +33,7 @@ jobs: - name: Setup node and enable yarn caching uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: "yarn" cache-dependency-path: "web/yarn.lock" diff --git a/.github/workflows/web-deploy-preview.yml b/.github/workflows/web-deploy-preview.yml index 3590adac31..52d131179c 100644 --- a/.github/workflows/web-deploy-preview.yml +++ b/.github/workflows/web-deploy-preview.yml @@ -33,7 +33,7 @@ jobs: - name: Setup node and enable yarn caching uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: "yarn" cache-dependency-path: "web/yarn.lock" diff --git a/.github/workflows/web-deploy-staging.yml b/.github/workflows/web-deploy-staging.yml index dddd03d53d..e0652c36b1 100644 --- a/.github/workflows/web-deploy-staging.yml +++ b/.github/workflows/web-deploy-staging.yml @@ -41,7 +41,7 @@ jobs: - name: Setup node and enable yarn caching uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: "yarn" cache-dependency-path: "web/yarn.lock" diff --git a/.github/workflows/web-deploy.yml b/.github/workflows/web-deploy.yml index 18dd252443..32fee17ad4 100644 --- a/.github/workflows/web-deploy.yml +++ b/.github/workflows/web-deploy.yml @@ -37,7 +37,7 @@ jobs: - name: Setup node and enable yarn caching uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: "yarn" cache-dependency-path: "web/yarn.lock" diff --git a/.github/workflows/web-lint.yml b/.github/workflows/web-lint.yml index 2971bc3718..517022997d 100644 --- a/.github/workflows/web-lint.yml +++ b/.github/workflows/web-lint.yml @@ -28,7 +28,7 @@ jobs: - name: Setup node and enable yarn caching uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 cache: "yarn" cache-dependency-path: "web/yarn.lock" diff --git a/.github/workflows/web-publish-ghcr.yml b/.github/workflows/web-publish-ghcr.yml index b69a75977f..d03e28f7c5 100644 --- a/.github/workflows/web-publish-ghcr.yml +++ b/.github/workflows/web-publish-ghcr.yml @@ -8,7 +8,7 @@ on: workflow_dispatch: permissions: - contents: read + contents: write # for pushing the `ghcr/web` branch packages: write jobs: diff --git a/README.md b/README.md index c59ee59f19..fa55e684b1 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Private sharing. Collaborative albums. Family plans. Easy import, easier export. Background uploads. The list goes on. And of course, all of this, while being fully end-to-end encrypted across platforms. -Ente Photos is a paid service, but we offer 5GB of free storage. +Ente Photos is a paid service, but we offer 10GB of free storage. You can also clone this repository and choose to self-host.
diff --git a/auth/.fvmrc b/auth/.fvmrc new file mode 100644 index 0000000000..906bbb3497 --- /dev/null +++ b/auth/.fvmrc @@ -0,0 +1,3 @@ +{ + "flutter": "3.24.3" +} \ No newline at end of file diff --git a/auth/.gitignore b/auth/.gitignore index 1d0b106aea..4e09544950 100644 --- a/auth/.gitignore +++ b/auth/.gitignore @@ -41,4 +41,7 @@ lib/generated_plugin_registrant.dart !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages android/key.properties -dist/ \ No newline at end of file +dist/ + +# FVM Version Cache +.fvm/ \ No newline at end of file diff --git a/auth/android/.gitignore b/auth/android/.gitignore index 6f568019d3..27f7aec949 100644 --- a/auth/android/.gitignore +++ b/auth/android/.gitignore @@ -5,6 +5,8 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +/app/.cxx/ +/.kotlin/ # Remember to never publicly share your keystore. # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app diff --git a/auth/android/app/src/main/res/drawable-hdpi/ic_launcher_monochrome.png b/auth/android/app/src/main/res/drawable-hdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000..e7a02039d7 Binary files /dev/null and b/auth/android/app/src/main/res/drawable-hdpi/ic_launcher_monochrome.png differ diff --git a/auth/android/app/src/main/res/drawable-mdpi/ic_launcher_monochrome.png b/auth/android/app/src/main/res/drawable-mdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000..163a39ab80 Binary files /dev/null and b/auth/android/app/src/main/res/drawable-mdpi/ic_launcher_monochrome.png differ diff --git a/auth/android/app/src/main/res/drawable-xhdpi/ic_launcher_monochrome.png b/auth/android/app/src/main/res/drawable-xhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000..accaf7e863 Binary files /dev/null and b/auth/android/app/src/main/res/drawable-xhdpi/ic_launcher_monochrome.png differ diff --git a/auth/android/app/src/main/res/drawable-xxhdpi/ic_launcher_monochrome.png b/auth/android/app/src/main/res/drawable-xxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000..acdcc6084a Binary files /dev/null and b/auth/android/app/src/main/res/drawable-xxhdpi/ic_launcher_monochrome.png differ diff --git a/auth/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_monochrome.png b/auth/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000000..1372853943 Binary files /dev/null and b/auth/android/app/src/main/res/drawable-xxxhdpi/ic_launcher_monochrome.png differ diff --git a/auth/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml b/auth/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml index 28f41b3c4d..407dab1e31 100644 --- a/auth/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml +++ b/auth/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml @@ -1,6 +1,14 @@ - - + + + + + + diff --git a/auth/assets/custom-icons/_data/custom-icons.json b/auth/assets/custom-icons/_data/custom-icons.json index 97bb7c1ddd..f25bcc24b4 100644 --- a/auth/assets/custom-icons/_data/custom-icons.json +++ b/auth/assets/custom-icons/_data/custom-icons.json @@ -132,6 +132,10 @@ "Binance US" ] }, + { + "title": "Bitkub", + "slug": "bitkub" + }, { "title": "Bitfinex" }, @@ -183,6 +187,9 @@ "title": "Bluesky", "slug": "blue_sky" }, + { + "title": "bonify" + }, { "title": "Booking", "altNames": [ @@ -208,6 +215,13 @@ { "title": "Bugzilla" }, + { + "title": "Bundesagentur für Arbeit", + "slug": "bundesagentur_fur_arbeit", + "altNames": [ + "Agentur für Arbeit" + ] + }, { "title": "ButterflyMX", "slug": "butterflymx" @@ -285,6 +299,15 @@ "title": "CSGORoll", "slug": "csgoroll" }, + { + "title": "Cwallet", + "altNames": [ + "cwallet", + "c-wallet", + "c wallet", + "cwallet.com" + ] + }, { "title": "DCS", "altNames": [ @@ -376,6 +399,13 @@ ], "hex": "858585" }, + { + "title": "Fanatical", + "slug": "fanatical", + "altNames": [ + "FANATICAL" + ] + }, { "title": "Fastmail" }, @@ -405,6 +435,9 @@ "title": "Firefox", "slug": "mozilla" }, + { + "title": "fortrabbit" + }, { "title": "ForUsAll" }, @@ -499,12 +532,19 @@ "slug": "id_me" }, { - "title": "Infomaniak" + "title": "ImmoScout24", + "slug": "immo_scout_24", + "altNames": [ + "ImmobilienScout24" + ] }, { "title": "Impact.com", "slug": "impact" }, + { + "title": "Infomaniak" + }, { "title": "ING" }, @@ -606,8 +646,7 @@ }, { "title": "LinkedIn", - "slug": "linkedin", - "hex": "2596be" + "slug": "linkedin" }, { "title": "Linux.Do", @@ -658,6 +697,14 @@ "mathworks" ] }, + { + "title": "Mbin", + "altNames": [ + "kbin", + "thebrainbin", + "gehirneimer" + ] + }, { "title": "Mercado Livre", "slug": "mercado_livre", @@ -888,6 +935,13 @@ { "title": "PostNL" }, + { + "title": "Postmark", + "slug": "postmarkapp", + "altNames": [ + "postmarkapp" + ] + }, { "title": "PostScan Mail", "slug": "postscanmail", @@ -952,6 +1006,15 @@ "slug": "realvnc", "hex": "488aec" }, + { + "title": "RedotPay", + "altNames": [ + "redotpay", + "redot pay", + "redot-pay", + "redotpay.com" + ] + }, { "title": "Registro br", "slug": "registro_br", diff --git a/auth/assets/custom-icons/icons/bingx.svg b/auth/assets/custom-icons/icons/bingx.svg index 9bcb83f42d..d19c8cae23 100644 --- a/auth/assets/custom-icons/icons/bingx.svg +++ b/auth/assets/custom-icons/icons/bingx.svg @@ -1 +1,20 @@ - \ No newline at end of file + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/auth/assets/custom-icons/icons/bitkub.svg b/auth/assets/custom-icons/icons/bitkub.svg new file mode 100644 index 0000000000..0086949649 --- /dev/null +++ b/auth/assets/custom-icons/icons/bitkub.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/auth/assets/custom-icons/icons/bonify.svg b/auth/assets/custom-icons/icons/bonify.svg new file mode 100644 index 0000000000..0116be5044 --- /dev/null +++ b/auth/assets/custom-icons/icons/bonify.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/auth/assets/custom-icons/icons/bundesagentur_fur_arbeit.svg b/auth/assets/custom-icons/icons/bundesagentur_fur_arbeit.svg new file mode 100644 index 0000000000..3ec2be1ed2 --- /dev/null +++ b/auth/assets/custom-icons/icons/bundesagentur_fur_arbeit.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/auth/assets/custom-icons/icons/coinspot.svg b/auth/assets/custom-icons/icons/coinspot.svg index 0d94e75a88..8e436fd9d7 100644 --- a/auth/assets/custom-icons/icons/coinspot.svg +++ b/auth/assets/custom-icons/icons/coinspot.svg @@ -1,130 +1,59 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/auth/assets/custom-icons/icons/cwallet.svg b/auth/assets/custom-icons/icons/cwallet.svg new file mode 100644 index 0000000000..ea9bc16111 --- /dev/null +++ b/auth/assets/custom-icons/icons/cwallet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/auth/assets/custom-icons/icons/fanatical.svg b/auth/assets/custom-icons/icons/fanatical.svg new file mode 100644 index 0000000000..05fcebee53 --- /dev/null +++ b/auth/assets/custom-icons/icons/fanatical.svg @@ -0,0 +1,44 @@ + + + + + + + + diff --git a/auth/assets/custom-icons/icons/fortrabbit.svg b/auth/assets/custom-icons/icons/fortrabbit.svg new file mode 100644 index 0000000000..f0058df36d --- /dev/null +++ b/auth/assets/custom-icons/icons/fortrabbit.svg @@ -0,0 +1 @@ + diff --git a/auth/assets/custom-icons/icons/immo_scout_24.svg b/auth/assets/custom-icons/icons/immo_scout_24.svg new file mode 100644 index 0000000000..fe9f7a27a5 --- /dev/null +++ b/auth/assets/custom-icons/icons/immo_scout_24.svg @@ -0,0 +1,6 @@ + + +image/svg+xml \ No newline at end of file diff --git a/auth/assets/custom-icons/icons/luma.svg b/auth/assets/custom-icons/icons/luma.svg index 361a806eea..48252dd979 100644 --- a/auth/assets/custom-icons/icons/luma.svg +++ b/auth/assets/custom-icons/icons/luma.svg @@ -1,4 +1,5 @@ - - - + + + \ No newline at end of file diff --git a/auth/assets/custom-icons/icons/mbin.svg b/auth/assets/custom-icons/icons/mbin.svg new file mode 100644 index 0000000000..1c74199157 --- /dev/null +++ b/auth/assets/custom-icons/icons/mbin.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/auth/assets/custom-icons/icons/postmarkapp.svg b/auth/assets/custom-icons/icons/postmarkapp.svg new file mode 100644 index 0000000000..7d4f2e7b6b --- /dev/null +++ b/auth/assets/custom-icons/icons/postmarkapp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/auth/assets/custom-icons/icons/redotpay.svg b/auth/assets/custom-icons/icons/redotpay.svg new file mode 100644 index 0000000000..dda1e7c12a --- /dev/null +++ b/auth/assets/custom-icons/icons/redotpay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/auth/assets/generation-icons/icon-monochrome.png b/auth/assets/generation-icons/icon-monochrome.png new file mode 100644 index 0000000000..83413a6580 Binary files /dev/null and b/auth/assets/generation-icons/icon-monochrome.png differ diff --git a/auth/ios/Podfile.lock b/auth/ios/Podfile.lock index eefe5c24dd..def487fa15 100644 --- a/auth/ios/Podfile.lock +++ b/auth/ios/Podfile.lock @@ -90,11 +90,11 @@ PODS: - SDWebImage (5.21.0): - SDWebImage/Core (= 5.21.0) - SDWebImage/Core (5.21.0) - - Sentry/HybridSDK (8.36.0) - - sentry_flutter (8.9.0): + - Sentry/HybridSDK (8.46.0) + - sentry_flutter (8.14.2): - Flutter - FlutterMacOS - - Sentry/HybridSDK (= 8.36.0) + - Sentry/HybridSDK (= 8.46.0) - share_plus (0.0.1): - Flutter - shared_preferences_foundation (0.0.1): @@ -232,44 +232,44 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/url_launcher_ios/ios" SPEC CHECKSUMS: - app_links: e7a6750a915a9e161c58d91bc610e8cd1d4d0ad0 - connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db - cupertino_http: 947a233f40cfea55167a49f2facc18434ea117ba - device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6 + app_links: 3da4c36b46cac3bf24eb897f1a6ce80bda109874 + connectivity_plus: 3f6c9057f4cd64198dc826edfb0542892f825343 + cupertino_http: 94ac07f5ff090b8effa6c5e2c47871d48ab7c86c + device_info_plus: 335f3ce08d2e174b9fdc3db3db0f4e3b1f66bd89 DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 - file_picker: 09aa5ec1ab24135ccd7a1621c46c84134bfd6655 - file_saver: 503e386464dbe118f630e17b4c2e1190fa0cf808 - fk_user_agent: 1f47ec39291e8372b1d692b50084b0d54103c545 + file_picker: 9b3292d7c8bc68c8a7bf8eb78f730e49c8efc517 + file_saver: 6cdbcddd690cb02b0c1a0c225b37cd805c2bf8b6 + fk_user_agent: 137145b086229251761678fe034da53753f4ce59 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - flutter_email_sender: 10a22605f92809a11ef52b2f412db806c6082d40 - flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4 - flutter_local_authentication: 1172a4dd88f6306dadce067454e2c4caf07977bb - flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086 - flutter_native_splash: edf599c81f74d093a4daf8e17bd7a018854bc778 - flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12 - fluttertoast: e9a18c7be5413da53898f660530c56f35edfba9c - local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3 - move_to_background: 39a5b79b26d577b0372cbe8a8c55e7aa9fcd3a2d + flutter_email_sender: 2397f5e84aaacfb61af569637a963e7c687858d8 + flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99 + flutter_local_authentication: 989278c681612f1ee0e36019e149137f114b9d7f + flutter_local_notifications: ad39620c743ea4c15127860f4b5641649a988100 + flutter_native_splash: 35ddbc7228eafcb3969dcc5f1fbbe27c1145a4f0 + flutter_secure_storage: 1ed9476fba7e7a782b22888f956cce43e2c62f13 + fluttertoast: 76fea30fcf04176325f6864c87306927bd7d2038 + local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391 + move_to_background: 155f7bfbd34d43ad847cb630d2d2d87c17199710 MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb - objective_c: 77e887b5ba1827970907e10e832eec1683f3431d + objective_c: 89e720c30d716b036faf9c9684022048eee1eee2 OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 - package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c - path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 - privacy_screen: 1a131c052ceb3c3659934b003b0d397c2381a24e - qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e + package_info_plus: 580e9a5f1b6ca5594e7c9ed5f92d1dfb2a66b5e1 + path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 + privacy_screen: 3159a541f5d3a31bea916cfd4e58f9dc722b3fd4 + qr_code_scanner: d77f94ecc9abf96d9b9b8fc04ef13f611e5a147a SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 - Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 - sentry_flutter: 0eb93e5279eb41e2392212afe1ccd2fecb4f8cbe - share_plus: 8875f4f2500512ea181eef553c3e27dba5135aad - shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 - sodium_libs: 1faae17af662384acbd13e41867a0008cd2e2318 - sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec + Sentry: da60d980b197a46db0b35ea12cb8f39af48d8854 + sentry_flutter: 27892878729f42701297c628eb90e7c6529f3684 + share_plus: 011d6fb4f9d2576b83179a3a5c5e323202cdabcf + shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 + sodium_libs: 6c6d0e83f4ee427c6464caa1f1bdc2abf3ca0b7f + sqflite: c35dad70033b8862124f8337cc994a809fcd9fa3 sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb - sqlite3_flutter_libs: c00457ebd31e59fa6bb830380ddba24d44fbcd3b + sqlite3_flutter_libs: 9379996d65aa23dcda7585a5b58766cebe0aa042 SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 Toast: 1f5ea13423a1e6674c4abdac5be53587ae481c4e - url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe + url_launcher_ios: 694010445543906933d732453a59da0a173ae33d PODFILE CHECKSUM: 78f002751f1a8f65042b8da97902ba4124271c5a diff --git a/auth/lib/core/configuration.dart b/auth/lib/core/configuration.dart index c032d79689..7264ff6863 100644 --- a/auth/lib/core/configuration.dart +++ b/auth/lib/core/configuration.dart @@ -66,14 +66,14 @@ class Configuration { String? _volatilePassword; - final _secureStorageOptionsIOS = const IOSOptions( - accessibility: KeychainAccessibility.first_unlock_this_device, - ); - Future init() async { _preferences = await SharedPreferences.getInstance(); sqfliteFfiInit(); - _secureStorage = const FlutterSecureStorage(); + _secureStorage = const FlutterSecureStorage( + iOptions: IOSOptions( + accessibility: KeychainAccessibility.first_unlock_this_device, + ), + ); _tempDirectory = (await DirectoryUtils.getDirectoryForInit()).path; final tempDirectory = io.Directory(_tempDirectory); try { @@ -98,7 +98,6 @@ class Configuration { Future _initOfflineAccount() async { _offlineAuthKey = await _secureStorage.read( key: offlineAuthSecretKey, - iOptions: _secureStorageOptionsIOS, ); } @@ -108,22 +107,18 @@ class Configuration { unawaited( _secureStorage.delete( key: key, - iOptions: _secureStorageOptionsIOS, ), ); } } else { _key = await _secureStorage.read( key: keyKey, - iOptions: _secureStorageOptionsIOS, ); _secretKey = await _secureStorage.read( key: secretKeyKey, - iOptions: _secureStorageOptionsIOS, ); _authSecretKey = await _secureStorage.read( key: authSecretKeyKey, - iOptions: _secureStorageOptionsIOS, ); if (_key == null) { await logout(autoLogout: true); @@ -136,7 +131,6 @@ class Configuration { for (String key in onlineSecureKeys) { await _secureStorage.delete( key: key, - iOptions: _secureStorageOptionsIOS, ); } await LockScreenSettings.instance.removePinAndPassword(); @@ -396,7 +390,6 @@ class Configuration { await _secureStorage.write( key: keyKey, value: key, - iOptions: _secureStorageOptionsIOS, ); } @@ -405,7 +398,6 @@ class Configuration { await _secureStorage.write( key: secretKeyKey, value: secretKey, - iOptions: _secureStorageOptionsIOS, ); } @@ -414,7 +406,6 @@ class Configuration { await _secureStorage.write( key: authSecretKeyKey, value: authSecretKey, - iOptions: _secureStorageOptionsIOS, ); } @@ -463,18 +454,15 @@ class Configuration { Future optForOfflineMode() async { if ((await _secureStorage.containsKey( key: offlineAuthSecretKey, - iOptions: _secureStorageOptionsIOS, ))) { _offlineAuthKey = await _secureStorage.read( key: offlineAuthSecretKey, - iOptions: _secureStorageOptionsIOS, ); } else { _offlineAuthKey = CryptoUtil.bin2base64(CryptoUtil.generateKey()); await _secureStorage.write( key: offlineAuthSecretKey, value: _offlineAuthKey, - iOptions: _secureStorageOptionsIOS, ); } await _preferences.setBool(hasOptedForOfflineModeKey, true); diff --git a/auth/lib/l10n/arb/app_ar.arb b/auth/lib/l10n/arb/app_ar.arb index 9b8e3e7462..7128f1b1e6 100644 --- a/auth/lib/l10n/arb/app_ar.arb +++ b/auth/lib/l10n/arb/app_ar.arb @@ -1,6 +1,6 @@ { "account": "الحساب", - "unlock": "فتح القفل", + "unlock": "فتح القُفْل", "recoveryKey": "مفتاح الاسترداد", "counterAppBarTitle": "العداد", "@counterAppBarTitle": { @@ -16,7 +16,7 @@ "secretCanNotBeEmpty": "لا يمكن أن يكون رمز السر فارغ", "bothIssuerAndAccountCanNotBeEmpty": "لا يمكن أن يكون المُصدر والحساب فارغًا", "incorrectDetails": "بيانات غير صحيحة", - "pleaseVerifyDetails": "من فضلك تأكد من بياناتك وحاول مرة أخرى", + "pleaseVerifyDetails": "الرجاء التأكد من البيانات وإعادة المحاولة", "codeIssuerHint": "المصدِّر", "codeSecretKeyHint": "الرمز السري", "secret": "سري", @@ -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" }, @@ -48,6 +48,8 @@ "nextTotpTitle": "التالي", "deleteCodeTitle": "حذف الرمز؟", "deleteCodeMessage": "هل أنت متأكد من أنك تريد حذف هذه الشيفرة؟ هذا الإجراء لا رجعة فيه.", + "trashCode": "حذف الكود؟", + "trashCodeMessage": "هل أنت متيقِّن أنك تريد حذف الكود الخاص بـ {account}؟", "trash": "سلة المهملات", "viewLogsAction": "عرض السجلات", "sendLogsDescription": "سوف يُرسل هذا السجلات لنا لمساعدتنا على تصحيح مشكلتك. بينما نتخذ الاحتياطات لضمان عدم تسجيل المعلومات الحساسة، نشجعك على رؤية هذه السجلات قبل مشاركتها.", @@ -63,7 +65,7 @@ }, "copyEmailAction": "نسخ البريد الإلكتروني", "exportLogsAction": "تصدير السجلات", - "reportABug": "الابلاغ عن خلل تقني", + "reportABug": "ألإبلاغ عن خلل تقني", "crashAndErrorReporting": "الإبلاغ عن الأعطال والأخطاء", "reportBug": "الإبلاغ عن خلل", "emailUsMessage": "الرجاء مراسلتنا على {email}", @@ -79,22 +81,24 @@ "blog": "المدونة", "merchandise": "إدارة المنتجات", "verifyPassword": "التحقق من كلمة المرور", - "pleaseWait": "الرجاء الإنتظار...", + "pleaseWait": "انتظر قليلاً...", "generatingEncryptionKeysTitle": "توليد مفاتيح التشفير...", "recreatePassword": "إعادة كتابة كلمة المرور", "recreatePasswordMessage": "الجهاز الحالي ليس قويًا بما يكفي للتحقق من كلمة المرور الخاصة بك، لذا نحتاج إلى إعادة إنشائها مرة واحدة بطريقة تعمل مع جميع الأجهزة.\n\nالرجاء تسجيل الدخول باستخدام مفتاح الاسترداد وإعادة إنشاء كلمة المرور الخاصة بك (يمكنك استخدام نفس كلمة المرور مرة أخرى إذا كنت ترغب في ذلك).", "useRecoveryKey": "استخدم مفتاح الاسترداد", "incorrectPasswordTitle": "كلمة المرور غير صحيحة", "welcomeBack": "مرحبًا مجددًا!", - "madeWithLoveAtPrefix": "مصنوعة بـ❤️ في ", + "emailAlreadyRegistered": "البريد الإلكتروني مُسَجَّل من قبل.", + "emailNotRegistered": "البريد الإلكتروني غير مُسَجَّل.", + "madeWithLoveAtPrefix": "مصنوعة بـ❤️ في", "supportDevs": "اشترك في ente لدعمنا", - "supportDiscount": "استخدم رمز القسيمة \"AUTH\" للحصول على 10% خصم من السنة الأولى", + "supportDiscount": "استخدم رمز القسيمة \"AUTH\" للحصول على 10% خَصْم من السنة الأولى", "changeEmail": "غير البريد الإلكتروني", "changePassword": "غير كلمة المرور", "data": "البيانات", "importCodes": "استورد شيفرات", "importTypePlainText": "نص بسيط", - "importTypeEnteEncrypted": "تصدير مشفر ente", + "importTypeEnteEncrypted": "تصدير مشفَّر ente", "passwordForDecryptingExport": "كلمة المرور لفك تشفير التصدير", "passwordEmptyError": "لا يمكن أن تكون كلمة المرور فارغة", "importFromApp": "استورد الشيفرات من {appName}", @@ -111,10 +115,11 @@ "importLabel": "استيراد", "importInstruction": "الرجاء تحديد ملف يحتوي على قائمة بالرموز الخاصة بك بالشكل التالي", "importCodeDelimiterInfo": "يمكن فصل الرموز بفاصلة أو سطر جديد", - "selectFile": "اختيار الملف", + "selectFile": "حدد مِلَفّ", "emailVerificationToggle": "تأكيد عنوان البريد الإلكتروني", "emailVerificationEnableWarning": "لتجنب إقفال حسابك، تأكد من تخزين نسخة من بريدك الإلكتروني 2FA خارج Ente Auth قبل تمكين التحقق من البريد الإلكتروني.", "authToChangeEmailVerificationSetting": "الرجاء المصادقة لتغيير التحقق من البريد الإلكتروني", + "authenticateGeneric": "الرجاء المصادقة", "authToViewYourRecoveryKey": "الرجاء المصادقة لعرض مفتاح الاسترداد الخاص بك", "authToChangeYourEmail": "الرجاء المصادقة لتغيير بريدك الإلكتروني", "authToChangeYourPassword": "الرجاء المصادقة لتغيير كلمة المرور الخاصة بك", @@ -129,7 +134,7 @@ "general": "العامة", "settings": "الإعدادات", "copied": "تم النسخ", - "pleaseTryAgain": "حاول مرة اخرى", + "pleaseTryAgain": "يرجى المحاولة مرة أخرى", "existingUser": "المستخدم موجود", "newUser": "جديد في Ente", "delete": "حذف", @@ -142,6 +147,8 @@ "leaveFamily": "مغادرة خطة العائلة", "leaveFamilyMessage": "هل أنت متأكد من الخروج من خطة العائلة؟", "inFamilyPlanMessage": "أنت مندرج ضمن خطة عائلية!", + "hintForMobile": "اضغط مطولاً على الكود لتعديل أو إزالته.", + "hintForDesktop": "انقر بزر الأيمن على الكود لتعديله.", "scan": "مسح", "scanACode": "فحص رمز Qr", "verify": "التحقق", @@ -151,6 +158,7 @@ "twoFactorAuthTitle": "المصادقة الثنائية", "passkeyAuthTitle": "التحقق من مفتاح المرور", "verifyPasskey": "تحقق من مفتاح المرور", + "loginWithTOTP": "", "recoverAccount": "إسترجاع الحساب", "enterRecoveryKeyHint": "أدخل رمز الاسترداد", "recover": "استرداد", @@ -172,7 +180,7 @@ "yesSendFeedbackAction": "نعم، ارسل الملاحظات", "noDeleteAccountAction": "لا، حذف الحساب", "initiateAccountDeleteTitle": "الرجاء المصادقة لبدء حذف الحساب", - "sendEmail": "ارسل بريد الكتروني", + "sendEmail": "إرسال بريد إلكتروني", "createNewAccount": "إنشاء حساب جديد", "weakStrength": "ضعيف", "strongStrength": "قوي", @@ -184,9 +192,9 @@ "language": "اللغة", "social": "وسائل التواصل", "security": "الأمان", - "lockscreen": "شاشة القفل", - "authToChangeLockscreenSetting": "الرجاء المصادقة لتغيير إعدادات شاشة القفل", - "deviceLockEnablePreSteps": "لتمكين قفل التطبيق، فضلا أعد شيفرة مرور للجهاز أو قفل الشاشة في إعدادات نظامك.", + "lockscreen": "شاشة القُفْل", + "authToChangeLockscreenSetting": "الرجاء المصادقة لتغيير إعدادات شاشة القُفْل", + "deviceLockEnablePreSteps": "لتفعيل قُفْل الجهاز، اضبط رمز مرور أو قُفْل الشاشة من الإعدادات", "viewActiveSessions": "عرض الجلسات النشطة", "authToViewYourActiveSessions": "الرجاء المصادقة لعرض جلساتك النشطة", "searchHint": "بحث...", @@ -199,6 +207,7 @@ "edit": "تعديل", "share": "مشاركة", "shareCodes": "شارك الرموز", + "shareCodesDuration": "حدد المدة التي تريد أن تشارك فيها ألاكوا د.", "restore": "استعادة", "copiedToClipboard": "تم النسخ إلى الحافظة", "copiedNextToClipboard": "تم نسخ الرموز التالية إلى الحافظة", @@ -326,6 +335,7 @@ } }, "manualSort": "مخصّص", + "editOrder": "تعديل الطلب", "mostFrequentlyUsed": "مستخدم بكثرة", "mostRecentlyUsed": "مستخدمة مؤخراً", "activeSessions": "الجلسات النشطة", @@ -447,6 +457,9 @@ "customEndpoint": "متصل بـ{endpoint}", "pinText": "ثبت", "unpinText": "ألغِ التثبيت", + "pinnedCodeMessage": "ثُبِّت {code}", + "unpinnedCodeMessage": "أُلغِي تثبيت {code}", + "pinned": "ثُبِّت", "tags": "الأوسمة", "createNewTag": "أنشيء وسم جديد", "tag": "وسم", @@ -459,9 +472,9 @@ "viewRawCodes": "عرض الشيفرات الأصلية", "rawCodes": "الشيفرات الأصلية", "rawCodeData": "بيانات الشيفرات الأصلية", - "appLock": "قفل التطبيق", + "appLock": "قُفْل التطبيق", "noSystemLockFound": "لا يوجد قفل نظام", - "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "لتمكين قفل التطبيق، فضلا أعد شيفرة مرور الجهاز أو قفل الشاشة في إعدادات نظامك.", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "لتفعيل قُفْل التطبيق، اضبط رمز مرور الجهاز أو قُفْل الشاشة من الإعدادات.", "autoLock": "قفل تلقائي", "immediately": "فورًا", "reEnterPassword": "أعد إدخال كلمة المرور", @@ -475,14 +488,30 @@ "hideContentDescriptionAndroid": "يخفي محتوى التطبيق في مبدل التطبيقات ويمنع لقطات الشاشة", "hideContentDescriptioniOS": "يخفي محتوى التطبيق في مبدل التطبيقات", "autoLockFeatureDescription": "الوقت الذي بعده ينقفل التطبيق بعدما يوضع في الخلفية", - "appLockDescription": "اختر بين شاشة القفل الافتراضية الخاصة بجهازك وشاشة قفل مخصصة برقم تعريف شخصي أو كلمة مرور.", + "appLockDescription": "اختر نوع قُفْل الشاشة: افتراضي أو مخصص.", "pinLock": "قفل رقم التعريف الشخصي", "enterPin": "أدخل رقم التعريف الشخصي", "setNewPin": "عين رقم تعريف شخصي جديد", "importFailureDescNew": "تعذر إعراب الملف المنتقى.", + "appLockNotEnabled": "قُفْل التطبيق غير مفعل ", + "appLockNotEnabledDescription": "لحماية بياناتك، فعِّل قُفْل التطبيق من إعدادات الأمان ← قُفْل التطبيق", + "authToViewPasskey": "الرجاء المصادقة لعرض مفتاح الاسترداد الخاص بك", + "appLockOfflineModeWarning": "لقد اخترتَ المُتابعة دون نُسخ احتياطية. إذا نَسيتَ قُفْل التطبيق، فلن تتمكن من الوصول إلى بياناتك.", "duplicateCodes": "رموز مكررة", "noDuplicates": "✨ لا تكرارات", + "youveNoDuplicateCodesThatCanBeCleared": "لا توجد لديك أي أكواد مكررة يمكن حذفها", + "deduplicateCodes": "أكواد مكررة", "deselectAll": "ألغِ تحديد الكل", "selectAll": "حدد الكل", - "deleteDuplicates": "احذف التكرار" + "deleteDuplicates": "احذف التكرار", + "plainHTML": "HTML عَادِي ", + "tellUsWhatYouThink": "شاركنا برأيك", + "dropReviewiOS": "اترك مراجعة على أبل ستور", + "dropReviewAndroid": "اترك مراجعة بلاي ستور", + "supportEnte": "دعم ente", + "giveUsAStarOnGithub": "من فضلك أعطِنا نجمة على جيت هاب", + "free5GB": "5GB مجانًا على ente صور", + "loginWithAuthAccount": "سجّل الدخول باستخدام حساب المُصادقة", + "freeStorageOffer": "خَصْم 10٪ على صور ente", + "freeStorageOfferDescription": "استخدم الكود \"AUTH\" وأحصل على 10٪ خَصْم في السنة الأولى" } \ No newline at end of file diff --git a/auth/lib/l10n/arb/app_de.arb b/auth/lib/l10n/arb/app_de.arb index 8b14ee16c8..63b9870f01 100644 --- a/auth/lib/l10n/arb/app_de.arb +++ b/auth/lib/l10n/arb/app_de.arb @@ -499,11 +499,13 @@ "duplicateCodes": "Doppelte Codes", "noDuplicates": "✨ Keine Duplikate", "youveNoDuplicateCodesThatCanBeCleared": "Du hast keine doppelten Codes, die bereinigt werden können", + "deduplicateCodes": "Codes deduplizieren", "deselectAll": "Alle abwählen", "selectAll": "Alles auswählen", "deleteDuplicates": "Duplikate löschen", "plainHTML": "Reines HTML", "tellUsWhatYouThink": "Sagen Sie uns, was Sie denken", + "dropReviewiOS": "Hinterlasse eine Rezension im App Store", "dropReviewAndroid": "Hinterlasse eine Rezension im Google Play Store", "supportEnte": "Support ente", "giveUsAStarOnGithub": "Gib uns einen Stern auf Github", diff --git a/auth/lib/l10n/arb/app_es.arb b/auth/lib/l10n/arb/app_es.arb index 8daeda301e..d313140c40 100644 --- a/auth/lib/l10n/arb/app_es.arb +++ b/auth/lib/l10n/arb/app_es.arb @@ -506,6 +506,8 @@ "deleteDuplicates": "Eliminar duplicados", "plainHTML": "HTML plano", "tellUsWhatYouThink": "Cuéntanos cuál es su opinión", + "dropReviewiOS": "Deja una reseña en la App Store", + "dropReviewAndroid": "Deja una reseña en la Play Store", "supportEnte": "Apoya a ente", "giveUsAStarOnGithub": "Danos una estrella en GitHub", "free5GB": "5 GB gratis en ente Fotos", diff --git a/auth/lib/l10n/arb/app_fr.arb b/auth/lib/l10n/arb/app_fr.arb index 5c7fd37b35..feb20b658b 100644 --- a/auth/lib/l10n/arb/app_fr.arb +++ b/auth/lib/l10n/arb/app_fr.arb @@ -499,12 +499,15 @@ "appLockOfflineModeWarning": "Vous avez choisi de fonctionner sans sauvegardes. Si vous oubliez votre outil Applock, vous serez bloqué dans l'accès à vos données.", "duplicateCodes": "Codes dupliqués", "noDuplicates": "✨ Pas de doublons", + "youveNoDuplicateCodesThatCanBeCleared": "Vous n'avez aucun code en doublon pouvant être supprimé", "deduplicateCodes": "Codes dédupliqués", "deselectAll": "Tout désélectionner", "selectAll": "Tout sélectionner", "deleteDuplicates": "Supprimer les doublons", "plainHTML": "HTML Pur", "tellUsWhatYouThink": "Dites-nous ce que vous pensez", + "dropReviewiOS": "Laisser un avis sur l'App Store", + "dropReviewAndroid": "Laisser un avis sur le Play Store", "supportEnte": "Soutenir Ente", "giveUsAStarOnGithub": "Donnez-nous une étoile sur Github", "free5GB": "5 Go gratuits sur Ente Photos", diff --git a/auth/lib/l10n/arb/app_hu.arb b/auth/lib/l10n/arb/app_hu.arb index c9f6af364d..8030313d85 100644 --- a/auth/lib/l10n/arb/app_hu.arb +++ b/auth/lib/l10n/arb/app_hu.arb @@ -79,7 +79,7 @@ "contactSupport": "Lépj kapcsolatba az Ügyfélszolgálattal", "rateUsOnStore": "Értékelj minket a következőn: {storeName}", "blog": "Blog", - "merchandise": "Áru", + "merchandise": "Ajándéktárgyak", "verifyPassword": "Jelszó megerősítése", "pleaseWait": "Kérem várjon...", "generatingEncryptionKeysTitle": "Titkosítási kulcs generálása...", @@ -499,12 +499,15 @@ "appLockOfflineModeWarning": "Úgy döntött, hogy biztonsági mentés nélkül folytatja. Ha elfelejti az alkalmazászárat, akkor nem férhet hozzá adataihoz.", "duplicateCodes": "Ismétlődő kódok", "noDuplicates": "✨Nincs ismétlődés", + "youveNoDuplicateCodesThatCanBeCleared": "Nincsenek törölhető ismétlődő kódok", "deduplicateCodes": "Ismétlődő kódok", "deselectAll": "Összes kijelölés megszüntetése", "selectAll": "Összes kijelölése", "deleteDuplicates": "Ismétlődések törlése", "plainHTML": "Sima HTML kód", "tellUsWhatYouThink": "Mondja el mit gondol", + "dropReviewiOS": "Írj véleményt az App Store-ban", + "dropReviewAndroid": "Írj véleményt a Play Store-ban", "supportEnte": "Támogassa ente ", "giveUsAStarOnGithub": "Adj nekünk egy csillagot a Githubon", "free5GB": "5GB ingyen ente Photos", diff --git a/auth/lib/l10n/arb/app_lt.arb b/auth/lib/l10n/arb/app_lt.arb index f1903dd9b0..babdd784ae 100644 --- a/auth/lib/l10n/arb/app_lt.arb +++ b/auth/lib/l10n/arb/app_lt.arb @@ -506,6 +506,8 @@ "deleteDuplicates": "Ištrinti dublikatus", "plainHTML": "Grynasis HTML", "tellUsWhatYouThink": "Pasakykite mums, ką manote", + "dropReviewiOS": "Rašyti apžvalgą parduotuvėje „App Store“", + "dropReviewAndroid": "Rašyti apžvalgą parduotuvėje „Play“ parduotuvė“", "giveUsAStarOnGithub": "Suteikite mums žvaigždutę platformoje „Github“", "free5GB": "5 GB nemokami programai „ente“ nuotraukos", "loginWithAuthAccount": "Prisijungti su jūsų „Auth“ paskyra", diff --git a/auth/lib/l10n/arb/app_nl.arb b/auth/lib/l10n/arb/app_nl.arb index afcf113b0c..00ad14b4b5 100644 --- a/auth/lib/l10n/arb/app_nl.arb +++ b/auth/lib/l10n/arb/app_nl.arb @@ -506,6 +506,8 @@ "deleteDuplicates": "Dubbelen verwijderen", "plainHTML": "Alleen HTML", "tellUsWhatYouThink": "Vertel ons wat je vindt", + "dropReviewiOS": "Laat een beoordeling achter in de App Store", + "dropReviewAndroid": "Laat een beoordeling achter in de Play Store", "supportEnte": "Steun ente", "giveUsAStarOnGithub": "Geef ons een ster op Github", "free5GB": "5GB gratis op ente Photos", diff --git a/auth/lib/l10n/arb/app_or.arb b/auth/lib/l10n/arb/app_or.arb new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/auth/lib/l10n/arb/app_or.arb @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/auth/lib/l10n/arb/app_ru.arb b/auth/lib/l10n/arb/app_ru.arb index 09373f89cd..0c4d01fe25 100644 --- a/auth/lib/l10n/arb/app_ru.arb +++ b/auth/lib/l10n/arb/app_ru.arb @@ -83,22 +83,22 @@ "verifyPassword": "Подтверждение пароля", "pleaseWait": "Пожалуйста, подождите...", "generatingEncryptionKeysTitle": "Генерируем ключи шифрования...", - "recreatePassword": "Воссоздать пароль заново", + "recreatePassword": "Повторное создание пароля", "recreatePasswordMessage": "Текущее устройство недостаточно мощное для проверки пароля, поэтому нам нужно регенерировать его один раз таким образом, чтобы работать со всеми устройствами. \n\nПожалуйста, войдите, используя ваш ключ восстановления и сгенерируйте ваш пароль (вы можете использовать тот же самый, если пожелаете).", "useRecoveryKey": "Использовать ключ восстановления", "incorrectPasswordTitle": "Неправильный пароль", "welcomeBack": "С возвращением!", "emailAlreadyRegistered": "Адрес электронной почты уже зарегистрирован.", "emailNotRegistered": "Адрес электронной почты не зарегистрирован.", - "madeWithLoveAtPrefix": "сделана с ❤️ в ", + "madeWithLoveAtPrefix": "сделано с ❤️ в ", "supportDevs": "Подпишитесь на ente для поддержки нашего проекта", - "supportDiscount": "Используйте код скидки \"AUTH\", чтобы получить скидку 10% на первый год", - "changeEmail": "Изменить почту", + "supportDiscount": "Используйте кодовое слово \"AUTH\", чтобы получить скидку 10% на первый год", + "changeEmail": "Изменить адрес электронной почты", "changePassword": "Изменить пароль", "data": "Данные", "importCodes": "Импортировать коды", "importTypePlainText": "Обычный текст", - "importTypeEnteEncrypted": "Ente Зашифрованный экспорт", + "importTypeEnteEncrypted": "Зашифрованный экспорт из Ente", "passwordForDecryptingExport": "Пароль для расшифровки экспорта", "passwordEmptyError": "Пароль не может быть пустым", "importFromApp": "Импорт кодов из {appName}", @@ -106,27 +106,27 @@ "importSelectJsonFile": "Выбрать JSON-файл", "importSelectAppExport": "Выбрать файл экспорта {appName}", "importEnteEncGuide": "Выберите зашифрованный JSON файл, экспортированный из Ente", - "importRaivoGuide": "Используйте опцию «Export OTPs to Zip archive» в настройках Raivo.\n\nРаспакуйте zip-архив и импортируйте JSON-файл.", - "importBitwardenGuide": "Используйте опцию \"Экспортировать хранилище\" в Bitwarden Tools и импортируйте незашифрованный JSON файл.", + "importRaivoGuide": "Используйте опцию «Экспорт OTP-кодов в Zip-архив» в настройках Raivo.\n\nРаспакуйте zip-архив и импортируйте JSON-файл.", + "importBitwardenGuide": "Используйте опцию \"Экспортировать хранилище\" в Bitwarden и импортируйте незашифрованный JSON-файл.", "importAegisGuide": "Используйте опцию «Экспортировать хранилище» в настройках Aegis.\n\nЕсли ваше хранилище зашифровано, то для его расшифровки потребуется ввести пароль хранилища.", - "import2FasGuide": "Используйте опцию \"Settings->Backup -Export\" в 2FAS.\n\nЕсли ваша резервная копия зашифрована, то для расшифровки резервной копии необходимо ввести пароль", - "importLastpassGuide": "Используйте опцию \"Перенести аккаунты\" в настройках Lastpass Authenticator и нажмите на \"Экспортировать учетные записи в файл\". Импортируйте загружённый JSON файл.", + "import2FasGuide": "Используйте опцию \"Настройки->Резервное копирование -Экспорт\" в 2FAS.\n\nЕсли ваша резервная копия зашифрована, то для расшифровки резервной копии необходимо ввести пароль", + "importLastpassGuide": "Используйте опцию \"Перенести аккаунты\" в настройках Lastpass Authenticator и нажмите на \"Экспортировать учетные записи в файл\". Импортируйте загружённый JSON-файл.", "exportCodes": "Экспортировать коды", "importLabel": "Импорт", "importInstruction": "Пожалуйста, выберите файл, содержащий список ваших кодов в следующем формате", "importCodeDelimiterInfo": "Коды могут быть разделены запятой или новой строкой", "selectFile": "Выбрать файл", - "emailVerificationToggle": "Подтверждение электронной почты", - "emailVerificationEnableWarning": "Если вы храните у нас двухфакторную аутентификацию в своей электронной почте, включение проверки электронной почты может привести к тупиковой ситуации. Если у вас заблокирован доступ к одной службе, возможно, вы не сможете войти в другую.", + "emailVerificationToggle": "Подтверждение адреса электронной почты", + "emailVerificationEnableWarning": "Чтобы избежать блокировки вашей учетной записи, обязательно сохраните копию вашего электронного письма 2FA за пределами Ente Auth, прежде чем активировать проверку электронной почты.", "authToChangeEmailVerificationSetting": "Авторизуйтесь, чтобы изменить подтверждение электронной почты", "authenticateGeneric": "Пожалуйста, авторизуйтесь", "authToViewYourRecoveryKey": "Пожалуйста, авторизуйтесь для просмотра вашего ключа восстановления", "authToChangeYourEmail": "Пожалуйста, авторизуйтесь, чтобы изменить адрес электронной почты", "authToChangeYourPassword": "Пожалуйста, авторизуйтесь, чтобы изменить пароль", "authToViewSecrets": "Пожалуйста, авторизуйтесь для просмотра ваших секретов", - "authToInitiateSignIn": "Пожалуйста, авторизуйтесь, чтобы начать вход для резервного копирования.", + "authToInitiateSignIn": "Пожалуйста, авторизуйтесь, чтобы получить доступ к резервному копированию.", "ok": "Ок", - "cancel": "Отменить", + "cancel": "Отмена", "yes": "Да", "no": "Нет", "email": "Электронная почта", @@ -136,30 +136,31 @@ "copied": "Скопировано", "pleaseTryAgain": "Пожалуйста, попробуйте ещё раз", "existingUser": "Существующий пользователь", - "newUser": "Впервые здесь, в Ente", + "newUser": "Впервые в Ente", "delete": "Удалить", "enterYourPasswordHint": "Введите пароль", "forgotPassword": "Забыл пароль", "oops": "Ой", "suggestFeatures": "Предложить идеи", - "faq": "FAQ", - "somethingWentWrongMessage": "Что-то пошло не так. Попробуйте еще раз", + "faq": "ЧаВо", + "somethingWentWrongMessage": "Что-то пошло не так, пожалуйста, попробуйте еще раз", "leaveFamily": "Покинуть семью", "leaveFamilyMessage": "Вы уверены, что хотите отказаться от семейного плана?", "inFamilyPlanMessage": "Вы на семейном плане!", - "hintForMobile": "Длительное нажмите на код для редактирования или удаления.", - "hintForDesktop": "Щелкните правой кнопкой мыши по коду, чтобы изменить или удалить.", + "hintForMobile": "Нажмите на код и удерживайте, чтобы редактировать его или удалить.", + "hintForDesktop": "Щелкните правой кнопкой мыши по коду, чтобы редактировать его или удалить.", "scan": "Сканировать", "scanACode": "Сканировать QR-код", "verify": "Подтвердить", - "verifyEmail": "Подтвердить электронную почту", + "verifyEmail": "Подтвердить адрес электронной почты", "enterCodeHint": "Введите 6-значный код из\nвашего приложения-аутентификатора", "lostDeviceTitle": "Потеряно устройство?", "twoFactorAuthTitle": "Двухфакторная аутентификация", - "passkeyAuthTitle": "Проверка с помощью пароля", + "passkeyAuthTitle": "Проверка с помощью ключа доступа", "verifyPasskey": "Подтвердить пароль", + "loginWithTOTP": "Войти с помощью TOTP", "recoverAccount": "Восстановить аккаунт", - "enterRecoveryKeyHint": "Введите свой ключ восстановления", + "enterRecoveryKeyHint": "Введите ключ восстановления", "recover": "Восстановить", "contactSupportViaEmailMessage": "Пожалуйста, отправьте электронное письмо на адрес {email} с вашего зарегистрированного адреса электронной почты", "@contactSupportViaEmailMessage": { @@ -171,7 +172,7 @@ }, "invalidQRCode": "Неверный QR-код", "noRecoveryKeyTitle": "Нет ключа восстановления?", - "enterEmailHint": "Введите свою почту", + "enterEmailHint": "Введите адрес электронной почты", "invalidEmailTitle": "Неверный адрес электронной почты", "invalidEmailMessage": "Пожалуйста, введите действительный адрес электронной почты.", "deleteAccount": "Удалить аккаунт", @@ -182,7 +183,7 @@ "sendEmail": "Отправить электронное письмо", "createNewAccount": "Создать новый аккаунт", "weakStrength": "Слабый", - "strongStrength": "Крепкий", + "strongStrength": "Сильный", "moderateStrength": "Средний", "confirmPassword": "Подтвердить пароль", "close": "Закрыть", @@ -333,6 +334,9 @@ } } }, + "manualSort": "Ручная", + "editOrder": "Изменить порядок", + "mostFrequentlyUsed": "Частота использования", "mostRecentlyUsed": "Недавно использованные", "activeSessions": "Активные сеансы", "somethingWentWrongPleaseTryAgain": "Что-то пошло не так. Попробуйте еще раз", @@ -376,7 +380,7 @@ "deleteCodeAuthMessage": "Аутентификация для удаления кода", "showQRAuthMessage": "Аутентификация для отображения QR-кода", "confirmAccountDeleteTitle": "Подтвердить удаление аккаунта", - "confirmAccountDeleteMessage": "Эта учетная запись связана с другими приложениями Ente, если вы ими пользуетесь.\n\nЗагруженные вами данные во всех приложениях ente будут запланированы к удалению, а ваша учетная запись будет удалена без возможности восстановления.", + "confirmAccountDeleteMessage": "Эта учетная запись связана с другими приложениями Ente, если вы ими пользуетесь.\n\nЗагруженные вами данные во всех приложениях Ente будут запланированы к удалению, а ваша учетная запись будет удалена без возможности восстановления.", "androidBiometricHint": "Подтвердите личность", "@androidBiometricHint": { "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." @@ -436,7 +440,7 @@ "signOutOtherDevices": "Выйти из других устройств", "doNotSignOut": "Не выходить", "hearUsWhereTitle": "Как вы узнали о Ente? (необязательно)", - "hearUsExplanation": "Будет полезно, если вы укажете, где нашли нас, так как мы не отслеживаем установки приложения", + "hearUsExplanation": "Мы не отслеживаем установки приложений. Было бы полезно, если бы вы сказали, где нас нашли!", "recoveryKeySaved": "Ключ восстановления сохранён в папке Загрузки!", "waitingForBrowserRequest": "Ожидание запроса браузера...", "waitingForVerification": "Ожидание подтверждения...", @@ -453,6 +457,9 @@ "customEndpoint": "Подключено к {endpoint}", "pinText": "Прикрепить", "unpinText": "Открепить", + "pinnedCodeMessage": "{code} был закреплен", + "unpinnedCodeMessage": "{code} был откреплен", + "pinned": "Закреплено", "tags": "Метки", "createNewTag": "Создать новую метку", "tag": "Метка", @@ -462,9 +469,9 @@ "deleteTagMessage": "Вы уверены, что хотите удалить эту метку? Это действие необратимо.", "somethingWentWrongParsingCode": "Мы не смогли разобрать коды {x}.", "updateNotAvailable": "Обновление недоступно", - "viewRawCodes": "Просмотр сырых кодов", - "rawCodes": "Сырые коды", - "rawCodeData": "Сырая информация кодов", + "viewRawCodes": "Просмотр необработанных кодов", + "rawCodes": "Необработанные коды", + "rawCodeData": "Необработанные кодовые данные", "appLock": "Блокировка приложения", "noSystemLockFound": "Системная блокировка не найдена", "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Чтобы включить блокировку, настройте пароль устройства или блокировку экрана в настройках системы.", @@ -482,20 +489,28 @@ "hideContentDescriptioniOS": "Скрывает содержимое приложения в переключателе приложений", "autoLockFeatureDescription": "Время в фоне, после которого приложение блокируется", "appLockDescription": "Выберите между экраном блокировки вашего устройства и пользовательским экраном блокировки с PIN-кодом или паролем.", - "pinLock": "Pin Замок", + "pinLock": "Pin блокировка", "enterPin": "Введите PIN", "setNewPin": "Установите новый PIN", "importFailureDescNew": "Не удалось обработать выбранный файл.", "appLockNotEnabled": "Блокировка приложения отключена", - "appLockNotEnabledDescription": "Пожалуйста, включите блокировку приложения в безопасности > Блокировка приложений", + "appLockNotEnabledDescription": "Пожалуйста, включите блокировку приложения в разделе Безопасность > Блокировка приложений", "authToViewPasskey": "Пожалуйста, авторизуйтесь, чтобы просмотреть пароль", "appLockOfflineModeWarning": "Вы решили продолжить работу без резервного копирования. Если вы забудете свой пароль, доступ к вашим данным будет заблокирован.", "duplicateCodes": "Дублировать коды", "noDuplicates": "✨ Дубликатов нет", + "youveNoDuplicateCodesThatCanBeCleared": "У вас нет повторяющихся кодов, которые можно было бы удалить", + "deduplicateCodes": "Дедупликационные коды", + "deselectAll": "Снять выделение", "selectAll": "Выбрать все", + "deleteDuplicates": "Удалить повторяющиеся", "plainHTML": "Обычный HTML", "tellUsWhatYouThink": "Расскажите нам, что вы думаете", - "free5GB": "5GB бесплатно на ente фото", + "dropReviewiOS": "Оставьте отзыв в App Store", + "dropReviewAndroid": "Оставьте отзыв в Play Store", + "supportEnte": "Поддержка ente", + "giveUsAStarOnGithub": "Поставьте нам звезду на Github", + "free5GB": "5Гб бесплатного пространства на ente Фото", "loginWithAuthAccount": "Войти с помощью учетной записи Auth", "freeStorageOffer": "Скидка 10% на ente фото", "freeStorageOfferDescription": "Используйте код \"AUTH\", чтобы получить скидку 10% в первый год" diff --git a/auth/lib/l10n/arb/app_ta.arb b/auth/lib/l10n/arb/app_ta.arb index 9e26dfeeb6..2a29438925 100644 --- a/auth/lib/l10n/arb/app_ta.arb +++ b/auth/lib/l10n/arb/app_ta.arb @@ -1 +1,3 @@ -{} \ No newline at end of file +{ + "importScanQrCode": "" +} \ No newline at end of file diff --git a/auth/lib/l10n/arb/app_vi.arb b/auth/lib/l10n/arb/app_vi.arb index caf4bd40df..78f328e451 100644 --- a/auth/lib/l10n/arb/app_vi.arb +++ b/auth/lib/l10n/arb/app_vi.arb @@ -51,7 +51,7 @@ "trashCode": "Xóa mã?", "trashCodeMessage": "Bạn có chắc chắn muốn xóa mã cho {account} không?", "trash": "Xóa", - "viewLogsAction": "Xem các bản ghi", + "viewLogsAction": "Xem nhật ký", "sendLogsDescription": "Thao tác này sẽ gửi nhật ký để giúp chúng tôi gỡ lỗi sự cố của bạn. Mặc dù chúng tôi thực hiện các biện pháp phòng ngừa để đảm bảo rằng thông tin nhạy cảm không được ghi lại, nhưng chúng tôi khuyến khích bạn xem các nhật ký này trước khi chia sẻ chúng.", "preparingLogsTitle": "Đang chuẩn bị nhật ký...", "emailLogsTitle": "Nhật ký email", @@ -506,6 +506,8 @@ "deleteDuplicates": "Xóa trùng lặp", "plainHTML": "HTML thuần", "tellUsWhatYouThink": "Hãy cho chúng tôi biết bạn nghĩ gì", + "dropReviewiOS": "Đánh giá ngay trên App Store", + "dropReviewAndroid": "Đánh giá ngay trên Play Store", "supportEnte": "Hỗ trợ ente", "giveUsAStarOnGithub": "Cho chúng tôi ngôi sao trên Github", "free5GB": "Miễn phí 5GB cho ente Hình ảnh", diff --git a/auth/lib/l10n/arb/app_zh_CN.arb b/auth/lib/l10n/arb/app_zh_CN.arb index 9e86d4e7fa..a7c3a15e07 100644 --- a/auth/lib/l10n/arb/app_zh_CN.arb +++ b/auth/lib/l10n/arb/app_zh_CN.arb @@ -504,10 +504,10 @@ "deselectAll": "取消全选", "selectAll": "全选", "deleteDuplicates": "删除重复项", - "plainHTML": "Plain HTML", + "plainHTML": "纯 HTML", "tellUsWhatYouThink": "告诉我们您的想法", - "dropReviewiOS": "在 App Store 上发表评测", - "dropReviewAndroid": "在 Play 商店上发表评测", + "dropReviewiOS": "在 App Store 上发表评论", + "dropReviewAndroid": "在 Play 商店上发表评价", "supportEnte": "支持 ente", "giveUsAStarOnGithub": "在 Github 上给我们一个星标", "free5GB": "ente Photos 上 5GB 可用空间", diff --git a/auth/lib/l10n/arb/app_zh_TW.arb b/auth/lib/l10n/arb/app_zh_TW.arb index b24627417f..d02afb50d7 100644 --- a/auth/lib/l10n/arb/app_zh_TW.arb +++ b/auth/lib/l10n/arb/app_zh_TW.arb @@ -504,8 +504,10 @@ "deselectAll": "取消全選", "selectAll": "全選", "deleteDuplicates": "刪除重複項", - "plainHTML": "Plain HTML", + "plainHTML": "純HTML", "tellUsWhatYouThink": "告訴我們您的想法", + "dropReviewiOS": "在 App Store 上發表意見", + "dropReviewAndroid": "在 Play 商店上發表評測", "supportEnte": "支援 ente", "giveUsAStarOnGithub": "在 Github 上給我們一個星標", "free5GB": "ente Photos 上 5GB 可用空間", diff --git a/auth/lib/models/code.dart b/auth/lib/models/code.dart index cf2d9ffce4..452ae4e3f3 100644 --- a/auth/lib/models/code.dart +++ b/auth/lib/models/code.dart @@ -114,18 +114,19 @@ class Code { CodeDisplay? display, int digits, { Algorithm algorithm = Algorithm.sha1, + int period = defaultPeriod, }) { final String encodedIssuer = Uri.encodeQueryComponent(issuer); return Code( account, issuer, digits, - defaultPeriod, + period, secret, algorithm, type, 0, - "otpauth://${type.name}/$issuer:$account?algorithm=${algorithm.name.toUpperCase()}&digits=$digits&issuer=$encodedIssuer&period=30&secret=$secret", + "otpauth://${type.name}/$issuer:$account?algorithm=${algorithm.name.toUpperCase()}&digits=$digits&issuer=$encodedIssuer&period=$period&secret=$secret", display: display ?? CodeDisplay(), ); } diff --git a/auth/lib/onboarding/view/common/field_label.dart b/auth/lib/onboarding/view/common/field_label.dart index 2b4de42f93..4ba7589749 100644 --- a/auth/lib/onboarding/view/common/field_label.dart +++ b/auth/lib/onboarding/view/common/field_label.dart @@ -3,10 +3,12 @@ import 'package:flutter/material.dart'; class FieldLabel extends StatelessWidget { final String label; + final double width; const FieldLabel( this.label, { super.key, + this.width = 80, }); @override @@ -14,7 +16,7 @@ class FieldLabel extends StatelessWidget { return Padding( padding: const EdgeInsets.only(right: 12.0), child: SizedBox( - width: 80, + width: width, child: Text( label, style: getEnteTextTheme(context).miniBoldMuted, diff --git a/auth/lib/onboarding/view/setup_enter_secret_key_page.dart b/auth/lib/onboarding/view/setup_enter_secret_key_page.dart index 5c91a78c2d..a04e3e5be4 100644 --- a/auth/lib/onboarding/view/setup_enter_secret_key_page.dart +++ b/auth/lib/onboarding/view/setup_enter_secret_key_page.dart @@ -18,6 +18,7 @@ import 'package:ente_auth/ui/components/buttons/button_widget.dart'; import 'package:ente_auth/ui/components/custom_icon_widget.dart'; import 'package:ente_auth/ui/components/models/button_result.dart'; import 'package:ente_auth/ui/custom_icon_page.dart'; +import 'package:ente_auth/ui/topt_selector_widget.dart'; import 'package:ente_auth/ui/utils/icon_utils.dart'; import 'package:ente_auth/utils/dialog_util.dart'; import 'package:ente_auth/utils/toast_util.dart'; @@ -40,11 +41,13 @@ class _SetupEnterSecretKeyPageState extends State { final int _notesLimit = 500; final int _otherTextLimit = 200; final int defaultDigits = 6; + final int defaultPeriodInSeconds = 30; late TextEditingController _issuerController; late TextEditingController _accountController; late TextEditingController _secretController; late TextEditingController _notesController; late TextEditingController _digitsController; + late TextEditingController _periodController; late bool _secretKeyObscured; late List selectedTags = [...?widget.code?.display.tags]; List allTags = []; @@ -53,6 +56,8 @@ class _SetupEnterSecretKeyPageState extends State { String _customIconID = ""; late IconType _iconSrc; late Algorithm _algorithm; + late Type _type; + final ValueNotifier showAdvancedOptions = ValueNotifier(false); @override void initState() { @@ -74,6 +79,11 @@ class _SetupEnterSecretKeyPageState extends State { ? widget.code!.digits.toString() : defaultDigits.toString(), ); + _periodController = TextEditingController( + text: widget.code != null + ? widget.code!.period.toString() + : defaultPeriodInSeconds.toString(), + ); _secretKeyObscured = widget.code != null; _loadTags(); @@ -112,6 +122,7 @@ class _SetupEnterSecretKeyPageState extends State { : IconType.customIcon; _algorithm = widget.code == null ? Algorithm.sha1 : widget.code!.algorithm; + _type = widget.code == null ? Type.totp : widget.code!.type; super.initState(); } @@ -134,6 +145,7 @@ class _SetupEnterSecretKeyPageState extends State { _accountController.dispose(); _notesController.dispose(); _digitsController.dispose(); + _periodController.dispose(); super.dispose(); } @@ -282,76 +294,7 @@ class _SetupEnterSecretKeyPageState extends State { ), const SizedBox(height: 12), widget.code == null - ? Theme( - data: Theme.of(context).copyWith( - splashColor: Colors.transparent, - highlightColor: Colors.transparent, - hoverColor: Colors.transparent, - ), - child: ExpansionTile( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8.0), - ), - collapsedShape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8.0), - ), - collapsedBackgroundColor: Colors.transparent, - tilePadding: EdgeInsets.zero, - title: Text( - "Advanced", - style: getEnteTextTheme(context).small, - ), - children: [ - Row( - children: [ - const FieldLabel("Digits"), - Expanded( - child: TextFormField( - keyboardType: TextInputType.number, - // The validator receives the text that the user has entered. - validator: (value) { - if (value == null || value.isEmpty) { - return "Please enter a number"; - } - final intValue = int.tryParse(value); - if (intValue == null) { - return "Only integers are allowed"; - } - if (intValue < 1 || intValue > 10) { - return "OTP digits must be between 1 and 10"; - } - return null; - }, - maxLines: 1, - decoration: const InputDecoration( - contentPadding: EdgeInsets.symmetric( - vertical: 12.0, - ), - ), - style: getEnteTextTheme(context).small, - controller: _digitsController, - ), - ), - ], - ), - const SizedBox(height: 22), - Row( - children: [ - const FieldLabel("Algorithm"), - AlgorithmSelectorWidget( - currentAlgorithm: _algorithm, - onSelected: (newAlgorithm) async { - setState(() { - _algorithm = newAlgorithm; - }); - }, - ), - ], - ), - const SizedBox(height: 12), - ], - ), - ) + ? advanceOptionWidget() : const SizedBox.shrink(), const SizedBox(height: 12), Wrap( @@ -419,11 +362,25 @@ class _SetupEnterSecretKeyPageState extends State { return; } + final period = + int.tryParse(_periodController.text.trim()); + if (period != null && (period < 10 || period > 60)) { + String message = + "Period must be between 10 and 60 seconds"; + _showIncorrectDetailsDialog( + context, + message: message, + ); + return; + } + if ((_accountController.text.trim().isEmpty && _issuerController.text.trim().isEmpty) || _secretController.text.trim().isEmpty || _digitsController.text.trim().isEmpty || - digits == null) { + digits == null || + _periodController.text.trim().isEmpty || + period == null) { String message; if (_secretController.text.trim().isEmpty) { message = context.l10n.secretCanNotBeEmpty; @@ -431,6 +388,10 @@ class _SetupEnterSecretKeyPageState extends State { message = "Digits cannot be empty"; } else if (digits == null) { message = "Digits is not a integer"; + } else if (_periodController.text.isEmpty) { + message = "Period cannot be empty"; + } else if (period == null) { + message = "Period is not a integer"; } else { message = context.l10n.bothIssuerAndAccountCanNotBeEmpty; @@ -462,6 +423,7 @@ class _SetupEnterSecretKeyPageState extends State { final secret = _secretController.text.trim().replaceAll(' ', ''); final notes = _notesController.text.trim(); final digits = int.tryParse(_digitsController.text.trim()); + final period = int.tryParse(_periodController.text.trim()); final isStreamCode = issuer.toLowerCase() == "steam" || issuer.toLowerCase().contains('steampowered.com'); @@ -498,13 +460,14 @@ class _SetupEnterSecretKeyPageState extends State { final Code newCode = widget.code == null ? Code.fromAccountAndSecret( - isStreamCode ? Type.steam : Type.totp, + isStreamCode ? Type.steam : _type, account, issuer, secret, display, isStreamCode ? Code.steamDigits : digits!, algorithm: _algorithm, + period: period!, ) : widget.code!.copyWith( account: account, @@ -513,6 +476,8 @@ class _SetupEnterSecretKeyPageState extends State { display: display, algorithm: _algorithm, digits: digits!, + type: _type, + period: period, ); // Verify the validity of the code @@ -558,4 +523,159 @@ class _SetupEnterSecretKeyPageState extends State { _iconSrc = newCustomIcon.type; }); } + + Widget advanceOptionWidget() { + return Padding( + padding: const EdgeInsets.only(top: 16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + GestureDetector( + onTap: () { + showAdvancedOptions.value = !showAdvancedOptions.value; + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + const Text( + 'Advanced', + ), + ValueListenableBuilder( + valueListenable: showAdvancedOptions, + builder: (context, isExpanded, child) { + return Icon( + isExpanded + ? Icons.keyboard_arrow_up + : Icons.keyboard_arrow_down, + size: 24, + ); + }, + ), + ], + ), + ), + ValueListenableBuilder( + valueListenable: showAdvancedOptions, + builder: (context, isExpanded, child) { + return AnimatedSwitcher( + duration: const Duration(milliseconds: 300), + transitionBuilder: (child, animation) { + return SizeTransition( + sizeFactor: animation, + child: child, + ); + }, + child: isExpanded + ? SizedBox( + width: 400, + child: Padding( + padding: const EdgeInsets.only( + top: 16, + ), + child: GridView.count( + crossAxisCount: 2, + shrinkWrap: true, + childAspectRatio: 2.5, + crossAxisSpacing: 16, + mainAxisSpacing: 14, + physics: const NeverScrollableScrollPhysics(), + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + const FieldLabel("Algorithm", width: 60), + AlgorithmSelectorWidget( + currentAlgorithm: _algorithm, + onSelected: (newAlgorithm) async { + setState(() { + _algorithm = newAlgorithm; + }); + }, + ), + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + const FieldLabel("Type", width: 60), + ToptSelectorWidget( + currentTopt: _type, + onSelected: (newTopt) async { + setState(() { + _type = newTopt; + }); + }, + ), + ], + ), + Row( + children: [ + const FieldLabel("Period", width: 60), + Expanded( + child: TextFormField( + keyboardType: TextInputType.number, + // The validator receives the text that the user has entered. + validator: (value) { + if (value == null || value.isEmpty) { + return "Please enter a number"; + } + final intValue = int.tryParse(value); + if (intValue == null) { + return "Only integers are allowed"; + } + if (intValue < 1 || intValue > 60) { + return "Period must be between 1 and 60"; + } + return null; + }, + maxLines: 1, + style: getEnteTextTheme( + context, + ).small, + controller: _periodController, + ), + ), + ], + ), + Row( + children: [ + const FieldLabel("Digits", width: 60), + Expanded( + child: TextFormField( + keyboardType: TextInputType.number, + // The validator receives the text that the user has entered. + validator: (value) { + if (value == null || value.isEmpty) { + return "Please enter a number"; + } + final intValue = int.tryParse(value); + if (intValue == null) { + return "Only integers are allowed"; + } + if (intValue < 1 || intValue > 10) { + return "OTP digits must be between 1 and 10"; + } + return null; + }, + maxLines: 1, + style: getEnteTextTheme( + context, + ).small, + controller: _digitsController, + ), + ), + ], + ), + ], + ), + ), + ) + : const SizedBox.shrink(), + ); + }, + ), + ], + ), + ); + } } diff --git a/auth/lib/ui/home_page.dart b/auth/lib/ui/home_page.dart index 648c78eeb6..cd522b7746 100644 --- a/auth/lib/ui/home_page.dart +++ b/auth/lib/ui/home_page.dart @@ -580,7 +580,9 @@ class _HomePageState extends State { return ClipRect( child: CodeWidget( - key: ValueKey('${code.hashCode}_${newIndex}_$_codeSortKey'), + key: ValueKey( + '${code.hashCode}_${newIndex}_$_codeSortKey', + ), code, isCompactMode: isCompactMode, sortKey: _codeSortKey, @@ -667,11 +669,13 @@ class _HomePageState extends State { } return false; } + int lastScanTime = DateTime.now().millisecondsSinceEpoch - 1000; void _handleDeeplink(BuildContext context, String? link) { bool isAccountConfigured = Configuration.instance.hasConfiguredAccount(); - bool isOfflineModeEnabled = Configuration.instance.hasOptedForOfflineMode() && - Configuration.instance.getOfflineSecretKey() != null; + bool isOfflineModeEnabled = + Configuration.instance.hasOptedForOfflineMode() && + Configuration.instance.getOfflineSecretKey() != null; if (!(isAccountConfigured || isOfflineModeEnabled) || link == null) { return; } diff --git a/auth/lib/ui/settings/data/import/aegis_import.dart b/auth/lib/ui/settings/data/import/aegis_import.dart index cf2567ebe4..d7cdce2312 100644 --- a/auth/lib/ui/settings/data/import/aegis_import.dart +++ b/auth/lib/ui/settings/data/import/aegis_import.dart @@ -94,6 +94,7 @@ Future _processAegisExportFile( final isEncrypted = decodedJson['header']['slots'] != null; Map? aegisDB; if (isEncrypted) { + await dialog.hide(); String? password; try { await showTextInputDialog( @@ -109,6 +110,7 @@ Future _processAegisExportFile( await dialog.hide(); return null; } + await dialog.show(); final content = decryptAegisVault(decodedJson, password: password!); aegisDB = jsonDecode(content); } catch (e, s) { diff --git a/auth/lib/ui/topt_selector_widget.dart b/auth/lib/ui/topt_selector_widget.dart new file mode 100644 index 0000000000..23d18f8cdb --- /dev/null +++ b/auth/lib/ui/topt_selector_widget.dart @@ -0,0 +1,72 @@ +import 'package:ente_auth/models/code.dart'; +import 'package:ente_auth/theme/ente_theme.dart'; +import 'package:flutter/material.dart'; + +class ToptSelectorWidget extends StatelessWidget { + final Type currentTopt; + final void Function(Type) onSelected; + const ToptSelectorWidget({ + super.key, + required this.currentTopt, + required this.onSelected, + }); + + @override + Widget build(BuildContext context) { + Text toptOptionText(Type type) { + return Text( + type.name.toUpperCase(), + style: getEnteTextTheme(context).small, + ); + } + + return GestureDetector( + onTapDown: (TapDownDetails details) async { + final int? selectedValue = await showMenu( + context: context, + position: RelativeRect.fromLTRB( + details.globalPosition.dx, + details.globalPosition.dy, + details.globalPosition.dx, + details.globalPosition.dy + 300, + ), + items: List.generate(Type.values.length, (index) { + return PopupMenuItem( + value: index, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + toptOptionText(Type.values[index]), + if (Type.values[index] == currentTopt) + Icon( + Icons.check, + color: Theme.of(context).iconTheme.color, + ), + ], + ), + ); + }), + ); + if (selectedValue != null) { + onSelected(Type.values[selectedValue]); + } + }, + child: Container( + padding: const EdgeInsets.only(bottom: 4), + decoration: BoxDecoration( + border: Border( + bottom: BorderSide(color: Theme.of(context).dividerColor), + ), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + toptOptionText(currentTopt), + const SizedBox(width: 8), + const Icon(Icons.arrow_drop_down), + ], + ), + ), + ); + } +} diff --git a/auth/lib/utils/lock_screen_settings.dart b/auth/lib/utils/lock_screen_settings.dart index 848e867354..b87323e37d 100644 --- a/auth/lib/utils/lock_screen_settings.dart +++ b/auth/lib/utils/lock_screen_settings.dart @@ -1,4 +1,5 @@ import "dart:convert"; +import "dart:io"; import "dart:typed_data"; import "package:ente_auth/core/configuration.dart"; @@ -49,6 +50,8 @@ class LockScreenSettings { /// Function to Check if the migration for lock screen changes has /// already been done by checking a stored boolean value. await runLockScreenChangesMigration(); + + await _clearLsDataInKeychainIfFreshInstall(); } Future setOfflineModeWarningStatus(bool value) async { @@ -210,4 +213,17 @@ class LockScreenSettings { Future isPasswordSet() async { return await _secureStorage.containsKey(key: password); } + + // If the app was uninstalled (without logging out if it was used with + // backups), keychain items of the app persist in the keychain. To avoid using + // old keychain items, we delete them on reinstall. + Future _clearLsDataInKeychainIfFreshInstall() async { + if ((Platform.isIOS || Platform.isMacOS) && + !Configuration.instance.isLoggedIn() && + !Configuration.instance.hasOptedForOfflineMode()) { + await _secureStorage.delete(key: password); + await _secureStorage.delete(key: pin); + await _secureStorage.delete(key: saltKey); + } + } } diff --git a/auth/macos/Podfile.lock b/auth/macos/Podfile.lock index 19fe954a53..3506dde0ea 100644 --- a/auth/macos/Podfile.lock +++ b/auth/macos/Podfile.lock @@ -34,11 +34,11 @@ PODS: - FlutterMacOS - screen_retriever (0.0.1): - FlutterMacOS - - Sentry/HybridSDK (8.36.0) - - sentry_flutter (8.9.0): + - Sentry/HybridSDK (8.46.0) + - sentry_flutter (8.14.2): - Flutter - FlutterMacOS - - Sentry/HybridSDK (= 8.36.0) + - Sentry/HybridSDK (= 8.46.0) - share_plus (0.0.1): - FlutterMacOS - shared_preferences_foundation (0.0.1): @@ -157,33 +157,33 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/window_manager/macos SPEC CHECKSUMS: - app_links: 10e0a0ab602ffaf34d142cd4862f29d34b303b2a - connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db - cupertino_http: 947a233f40cfea55167a49f2facc18434ea117ba - device_info_plus: 5401765fde0b8d062a2f8eb65510fb17e77cf07f - file_saver: 44e6fbf666677faf097302460e214e977fdd977b - flutter_inappwebview_macos: bdf207b8f4ebd58e86ae06cd96b147de99a67c9b - flutter_local_authentication: 85674893931e1c9cfa7c9e4f5973cb8c56b018b0 - flutter_local_notifications: 3805ca215b2fb7f397d78b66db91f6a747af52e4 - flutter_secure_storage_macos: 59459653abe1adb92abbc8ea747d79f8d19866c9 + app_links: 9028728e32c83a0831d9db8cf91c526d16cc5468 + connectivity_plus: 3f6c9057f4cd64198dc826edfb0542892f825343 + cupertino_http: 94ac07f5ff090b8effa6c5e2c47871d48ab7c86c + device_info_plus: b0fafc687fb901e2af612763340f1b0d4352f8e5 + file_saver: e35bd97de451dde55ff8c38862ed7ad0f3418d0f + flutter_inappwebview_macos: c2d68649f9f8f1831bfcd98d73fd6256366d9d1d + flutter_local_authentication: 2f9a2682f498abcc12d7e9729b5007a947170fdc + flutter_local_notifications: 453432cd6399a07d072885bc7828fb2307868856 + flutter_secure_storage_macos: b2d62a774c23b060f0b99d0173b0b36abb4a8632 FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24 - local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3 - objective_c: e5f8194456e8fc943e034d1af00510a1bc29c067 + local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391 + objective_c: ec13431e45ba099cb734eb2829a5c1cd37986cba OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 - package_info_plus: fa739dd842b393193c5ca93c26798dff6e3d0e0c - path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 - screen_retriever: 59634572a57080243dd1bf715e55b6c54f241a38 - Sentry: f8374b5415bc38dfb5645941b3ae31230fbeae57 - sentry_flutter: 0eb93e5279eb41e2392212afe1ccd2fecb4f8cbe - share_plus: 36537c04ce0c3e3f5bd297ce4318b6d5ee5fd6cf - shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 - sodium_libs: d39bd76697736cb11ce4a0be73b9b4bc64466d6f - sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec + package_info_plus: a8a591e70e87ce97ce5d21b2594f69cea9e0312f + path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 + screen_retriever: 4f97c103641aab8ce183fa5af3b87029df167936 + Sentry: da60d980b197a46db0b35ea12cb8f39af48d8854 + sentry_flutter: 27892878729f42701297c628eb90e7c6529f3684 + share_plus: 11c7b7fa7020465584eca3ff6392c5bc1e399d6e + shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 + sodium_libs: b9459e5bfc1185349f43472e79fc5d8e526b2bda + sqflite: c35dad70033b8862124f8337cc994a809fcd9fa3 sqlite3: 0bb0e6389d824e40296f531b858a2a0b71c0d2fb - sqlite3_flutter_libs: 5ca46c1a04eddfbeeb5b16566164aa7ad1616e7b - tray_manager: 9064e219c56d75c476e46b9a21182087930baf90 - url_launcher_macos: c82c93949963e55b228a30115bd219499a6fe404 - window_manager: 3a1844359a6295ab1e47659b1a777e36773cd6e8 + sqlite3_flutter_libs: 03311aede9d32fb2d24e32bebb8cd01c3b2e6239 + tray_manager: a104b5c81b578d83f3c3d0f40a997c8b10810166 + url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673 + window_manager: 1d01fa7ac65a6e6f83b965471b1a7fdd3f06166c PODFILE CHECKSUM: 6ff827273ace187339fc5d3684072a26ad85c298 diff --git a/auth/pubspec.lock b/auth/pubspec.lock index fd4caa06a6..1070e3ba96 100644 --- a/auth/pubspec.lock +++ b/auth/pubspec.lock @@ -5,15 +5,15 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: f256b0c0ba6c7577c15e2e4e114755640a875e885099367bf6e012b19314c834 + sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab" url: "https://pub.dev" source: hosted - version: "72.0.0" + version: "76.0.0" _macros: dependency: transitive description: dart source: sdk - version: "0.3.2" + version: "0.3.3" adaptive_theme: dependency: "direct main" description: @@ -26,10 +26,10 @@ packages: dependency: transitive description: name: analyzer - sha256: b652861553cd3990d8ed361f7979dc6d7053a9ac8843fa73820ab68ce5410139 + sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e" url: "https://pub.dev" source: hosted - version: "6.7.0" + version: "6.11.0" ansicolor: dependency: transitive description: @@ -90,10 +90,10 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.12.0" auto_size_text: dependency: "direct main" description: @@ -130,10 +130,10 @@ packages: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" build: dependency: transitive description: @@ -202,10 +202,10 @@ packages: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -234,10 +234,10 @@ packages: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" code_builder: dependency: transitive description: @@ -250,10 +250,10 @@ packages: dependency: "direct main" description: name: collection - sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.18.0" + version: "1.19.1" confetti: dependency: "direct main" description: @@ -435,10 +435,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" ffi: dependency: "direct main" description: @@ -675,14 +675,13 @@ packages: source: hosted version: "9.2.2" flutter_secure_storage_linux: - dependency: "direct overridden" + dependency: transitive description: - path: flutter_secure_storage_linux - ref: develop - resolved-ref: "5a5692b609b3886cdd49b2ed06b9c079ecdff996" - url: "https://github.com/mogol/flutter_secure_storage.git" - source: git - version: "1.2.1" + name: flutter_secure_storage_linux + sha256: be76c1d24a97d0b98f8b54bce6b481a380a6590df992d0098f868ad54dc8f688 + url: "https://pub.dev" + source: hosted + version: "1.2.3" flutter_secure_storage_macos: dependency: transitive description: @@ -945,18 +944,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" + sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec url: "https://pub.dev" source: hosted - version: "10.0.5" + version: "10.0.8" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.0.9" leak_tracker_testing: dependency: transitive description: @@ -1025,18 +1024,18 @@ packages: dependency: transitive description: name: macros - sha256: "0acaed5d6b7eab89f63350bccd82119e6c602df0f391260d0e32b5e23db79536" + sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656" url: "https://pub.dev" source: hosted - version: "0.1.2-main.4" + version: "0.1.3-main.0" matcher: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.17" material_color_utilities: dependency: transitive description: @@ -1057,10 +1056,10 @@ packages: dependency: transitive description: name: meta - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.16.0" mime: dependency: transitive description: @@ -1169,10 +1168,10 @@ packages: dependency: "direct main" description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" path_drawing: dependency: transitive description: @@ -1361,18 +1360,18 @@ packages: dependency: "direct main" description: name: sentry - sha256: "033287044a6644a93498969449d57c37907e56f5cedb17b88a3ff20a882261dd" + sha256: "599701ca0693a74da361bc780b0752e1abc98226cf5095f6b069648116c896bb" url: "https://pub.dev" source: hosted - version: "8.9.0" + version: "8.14.2" sentry_flutter: dependency: "direct main" description: name: sentry_flutter - sha256: "3780b5a0bb6afd476857cfbc6c7444d969c29a4d9bd1aa5b6960aa76c65b737a" + sha256: "5ba2cf40646a77d113b37a07bd69f61bb3ec8a73cbabe5537b05a7c89d2656f8" url: "https://pub.dev" source: hosted - version: "8.9.0" + version: "8.14.2" share_plus: dependency: "direct main" description: @@ -1473,7 +1472,7 @@ packages: dependency: transitive description: flutter source: sdk - version: "0.0.99" + version: "0.0.0" sodium: dependency: transitive description: @@ -1510,10 +1509,10 @@ packages: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.10.1" sprintf: dependency: transitive description: @@ -1567,10 +1566,10 @@ packages: dependency: transitive description: name: stack_trace - sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.11.1" + version: "1.12.1" steam_totp: dependency: "direct main" description: @@ -1591,10 +1590,10 @@ packages: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" stream_transform: dependency: transitive description: @@ -1607,10 +1606,10 @@ packages: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.4.1" styled_text: dependency: "direct main" description: @@ -1631,18 +1630,18 @@ packages: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test_api: dependency: transitive description: name: test_api - sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "0.7.4" timezone: dependency: transitive description: @@ -1807,10 +1806,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" url: "https://pub.dev" source: hosted - version: "14.2.5" + version: "14.3.1" watcher: dependency: transitive description: @@ -1900,5 +1899,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.5.0 <4.0.0" + dart: ">=3.7.0-0 <4.0.0" flutter: ">=3.24.0" diff --git a/auth/pubspec.yaml b/auth/pubspec.yaml index 8e874214c9..cf2d97c7ec 100644 --- a/auth/pubspec.yaml +++ b/auth/pubspec.yaml @@ -1,7 +1,7 @@ name: ente_auth description: ente two-factor authenticator -version: 4.3.3+433 +version: 4.3.6+437 publish_to: none environment: @@ -84,8 +84,8 @@ dependencies: protobuf: ^3.0.0 qr_code_scanner: ^1.0.1 qr_flutter: ^4.1.0 - sentry: ^8.7.0 - sentry_flutter: ^8.7.0 + sentry: ^8.14.2 + sentry_flutter: ^8.14.2 share_plus: ^10.0.2 shared_preferences: ^2.0.5 sqflite: @@ -107,12 +107,6 @@ dependencies: window_manager: ^0.4.2 xdg_directories: ^1.0.4 -dependency_overrides: - flutter_secure_storage_linux: - git: - url: https://github.com/mogol/flutter_secure_storage.git - ref: develop - path: flutter_secure_storage_linux dev_dependencies: build_runner: ^2.1.11 flutter_test: @@ -148,12 +142,17 @@ flutter: fonts: - asset: fonts/Montserrat-Bold.ttf -flutter_icons: +# run "dart run flutter_launcher_icons" to generate icons +flutter_launcher_icons: + image_path: "assets/generation-icons/icon-light.png" + android: "launcher_icon" adaptive_icon_foreground: "assets/generation-icons/icon-light-adaptive-fg.png" adaptive_icon_background: "assets/generation-icons/icon-light-adaptive-bg.png" + adaptive_icon_monochrome: "assets/generation-icons/icon-monochrome.png" + adaptive_icon_foreground_inset: 0 + ios: true - image_path: "assets/generation-icons/icon-light.png" remove_alpha_ios: true flutter_native_splash: diff --git a/auth/windows/flutter/generated_plugin_registrant.cc b/auth/windows/flutter/generated_plugin_registrant.cc index bfed849740..410497c810 100644 --- a/auth/windows/flutter/generated_plugin_registrant.cc +++ b/auth/windows/flutter/generated_plugin_registrant.cc @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -38,6 +39,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("LocalAuthPlugin")); ScreenRetrieverPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("ScreenRetrieverPlugin")); + SentryFlutterPluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("SentryFlutterPlugin")); SharePlusWindowsPluginCApiRegisterWithRegistrar( registry->GetRegistrarForPlugin("SharePlusWindowsPluginCApi")); SodiumLibsPluginCApiRegisterWithRegistrar( diff --git a/auth/windows/flutter/generated_plugins.cmake b/auth/windows/flutter/generated_plugins.cmake index f53efb77a4..f62ec3549f 100644 --- a/auth/windows/flutter/generated_plugins.cmake +++ b/auth/windows/flutter/generated_plugins.cmake @@ -11,6 +11,7 @@ list(APPEND FLUTTER_PLUGIN_LIST flutter_secure_storage_windows local_auth_windows screen_retriever + sentry_flutter share_plus sodium_libs sqlite3_flutter_libs @@ -21,7 +22,6 @@ list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST jni - sentry_flutter ) set(PLUGIN_BUNDLED_LIBRARIES) diff --git a/cli/README.md b/cli/README.md index 5bdb36828a..9d65089a6c 100644 --- a/cli/README.md +++ b/cli/README.md @@ -60,7 +60,7 @@ ente account list #### Change export directory ```shell -ente account update --email email@domain.com --dir ~/photos +ente account update --app auth/photos --email email@domain.com --dir ~/photos ``` ### Export diff --git a/desktop/.github/workflows/desktop-release.yml b/desktop/.github/workflows/desktop-release.yml index 335de87258..fa8c8e53ef 100644 --- a/desktop/.github/workflows/desktop-release.yml +++ b/desktop/.github/workflows/desktop-release.yml @@ -52,7 +52,7 @@ jobs: - name: Setup node uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 22 - name: Increase yarn timeout # `yarn install` times out sometimes on the Windows runner, diff --git a/desktop/CHANGELOG.md b/desktop/CHANGELOG.md index 37dc4451e1..df8ea6b9bd 100644 --- a/desktop/CHANGELOG.md +++ b/desktop/CHANGELOG.md @@ -1,9 +1,14 @@ # CHANGELOG -## v1.7.12 (Unreleased) +## v1.7.13 (Unreleased) - . +## v1.7.12 + +- Improved video player with streaming support (for already processed videos). +- Support Arabic translations. + ## v1.7.11 - Improved file viewer. diff --git a/desktop/build/icon.ico b/desktop/build/icon.ico new file mode 100644 index 0000000000..070293ef40 Binary files /dev/null and b/desktop/build/icon.ico differ diff --git a/desktop/eslint.config.mjs b/desktop/eslint.config.mjs index 29a4bf34d9..b3384d4bc5 100644 --- a/desktop/eslint.config.mjs +++ b/desktop/eslint.config.mjs @@ -39,6 +39,15 @@ export default ts.config( "error", { allowTernary: true }, ], + // Allow force unwrapping potentially optional values. + // + // See: [Note: non-null-assertions have better stack trace] + "@typescript-eslint/no-non-null-assertion": "off", + // Allow `while(true)` etc. + "@typescript-eslint/no-unnecessary-condition": [ + "error", + { allowConstantLoopConditions: true }, + ], }, }, ); diff --git a/desktop/package.json b/desktop/package.json index 1247db5642..63b79becc7 100644 --- a/desktop/package.json +++ b/desktop/package.json @@ -1,6 +1,6 @@ { "name": "ente", - "version": "1.7.12-beta", + "version": "1.7.13-beta", "private": true, "description": "Desktop client for Ente Photos", "repository": "github:ente-io/photos-desktop", @@ -27,36 +27,36 @@ "dependencies": { "any-shell-escape": "^0.1.1", "auto-launch": "^5.0.6", - "chokidar": "^3.6.0", + "chokidar": "^4.0.3", "clip-bpe-js": "^0.0.6", "comlink": "^4.4.2", "compare-versions": "^6.1.1", - "electron-log": "^5.3.2", + "electron-log": "^5.4.0", "electron-store": "^8.2.0", - "electron-updater": "^6.4.0", + "electron-updater": "^6.6.3", "ffmpeg-static": "^5.2.0", - "lru-cache": "^11.0.2", + "lru-cache": "^11.1.0", "next-electron-server": "^1.0.0", "node-stream-zip": "^1.15.0", "onnxruntime-node": "^1.20.1" }, "devDependencies": { - "@eslint/js": "^9.22.0", - "@tsconfig/node20": "^20.1.4", + "@eslint/js": "^9.25.1", + "@tsconfig/node22": "^22.0.1", "@types/auto-launch": "^5.0.5", "@types/ffmpeg-static": "^3.0.3", "ajv": "^8.17.1", "concurrently": "^9.1.2", "cross-env": "^7.0.3", - "electron": "^34.3.4", - "electron-builder": "^26.0.0", + "electron": "^36.1.0", + "electron-builder": "^26.0.14", "eslint": "^9", "prettier": "3.5.3", "prettier-plugin-organize-imports": "^4.1.0", "prettier-plugin-packagejson": "^2.5.10", "shx": "^0.3.4", - "typescript": "^5.8.2", - "typescript-eslint": "^8.26.1" + "typescript": "^5.8.3", + "typescript-eslint": "^8.31.1" }, "packageManager": "yarn@1.22.22", "productName": "ente" diff --git a/desktop/scripts/vips.js b/desktop/scripts/vips.js index b6714d29ec..d995ba0ba7 100755 --- a/desktop/scripts/vips.js +++ b/desktop/scripts/vips.js @@ -24,7 +24,7 @@ * * Note that `vips.js` would've already run once `beforeBuild.js` is run, but on * our CI we prepare builds for multiple architectures in one go, so we need to - * unconditonally replace the binary with the relevant one for the current + * unconditionally replace the binary with the relevant one for the current * architecture being built (which might be different from the one we're running * on). `beforeBuild.js` runs for each architecture being built. * diff --git a/desktop/src/main.ts b/desktop/src/main.ts index a9d91e7645..dd6cab4a18 100644 --- a/desktop/src/main.ts +++ b/desktop/src/main.ts @@ -35,6 +35,7 @@ import log, { initLogging } from "./main/log"; import { createApplicationMenu, createTrayContextMenu } from "./main/menu"; import { setupAutoUpdater } from "./main/services/app-update"; import autoLauncher from "./main/services/auto-launcher"; +import { shouldHideDockIcon } from "./main/services/store"; import { createWatcher } from "./main/services/watch"; import { userPreferences } from "./main/stores/user-preferences"; import { migrateLegacyWatchStoreIfNeeded } from "./main/stores/watch"; @@ -385,8 +386,8 @@ const createMainWindow = () => { const wasAutoLaunched = autoLauncher.wasAutoLaunched(); if (wasAutoLaunched) { // Don't automatically show the app's window if we were auto-launched. - // On macOS, also hide the dock icon on macOS. - if (process.platform == "darwin") app.dock.hide(); + // On macOS, also hide the dock icon. + app.dock?.hide(); } else { // Show our window otherwise, maximizing it if we're not asked to set it // to a specific size. @@ -421,14 +422,18 @@ const createMainWindow = () => { window.on("hide", () => { // On macOS, when hiding the window also hide the app's icon in the dock - // if the user has selected the Settings > Hide dock icon checkbox. - if (process.platform == "darwin" && userPreferences.get("hideDockIcon")) - app.dock.hide(); + // unless the user has unchecked the Settings > Hide dock icon checkbox. + if (shouldHideDockIcon()) { + // macOS emits a window "hide" event when going fullscreen, and if + // we hide the dock icon there then the window disappears. So ignore + // this scenario. + if (!window.isFullScreen()) { + app.dock?.hide(); + } + } }); - window.on("show", () => { - if (process.platform == "darwin") void app.dock.show(); - }); + window.on("show", () => void app.dock?.show()); // Let ipcRenderer know when mainWindow is in the foreground so that it can // in turn inform the renderer process. @@ -609,7 +614,7 @@ const handleBackOnStripeCheckout = (window: BrowserWindow) => * * But this is an issue for uploads in the self hosted apps (or when we * ourselves are trying to test things by with an arbitrary S3 bucket without - * going via a worker). During upload, theer is no redirection, so the request + * going via a worker). During upload, there is no redirection, so the request * ACAO is "ente://app" but the response ACAO is `null` which don't match, * causing the request to fail. * diff --git a/desktop/src/main/ipc.ts b/desktop/src/main/ipc.ts index b0a2eccf0c..b99fae7173 100644 --- a/desktop/src/main/ipc.ts +++ b/desktop/src/main/ipc.ts @@ -13,6 +13,7 @@ import type { BrowserWindow } from "electron"; import { ipcMain } from "electron/main"; import type { CollectionMapping, + FFmpegCommand, FolderWatch, PendingUploads, ZipItem, @@ -40,6 +41,7 @@ import { fsRename, fsRm, fsRmdir, + fsStatMtime, fsWriteFile, fsWriteFileViaBackup, } from "./services/fs"; @@ -55,8 +57,8 @@ import { import { clearPendingUploads, listZipItems, - markUploadedFiles, - markUploadedZipItems, + markUploadedFile, + markUploadedZipItem, pathOrZipItemSize, pendingUploads, setPendingUploads, @@ -163,6 +165,8 @@ export const attachIPCHandlers = () => { ipcMain.handle("fsIsDir", (_, dirPath: string) => fsIsDir(dirPath)); + ipcMain.handle("fsStatMtime", (_, path: string) => fsStatMtime(path)); + ipcMain.handle("fsFindFiles", (_, folderPath: string) => fsFindFiles(folderPath), ); @@ -187,7 +191,7 @@ export const attachIPCHandlers = () => { "ffmpegExec", ( _, - command: string[], + command: FFmpegCommand, dataOrPathOrZipItem: Uint8Array | string | ZipItem, outputFileExtension: string, ) => ffmpegExec(command, dataOrPathOrZipItem, outputFileExtension), @@ -210,13 +214,15 @@ export const attachIPCHandlers = () => { ); ipcMain.handle( - "markUploadedFiles", - (_, paths: PendingUploads["filePaths"]) => markUploadedFiles(paths), + "markUploadedFile", + (_, path: string, associatedPath: string | undefined) => + markUploadedFile(path, associatedPath), ); ipcMain.handle( - "markUploadedZipItems", - (_, items: PendingUploads["zipItems"]) => markUploadedZipItems(items), + "markUploadedZipItem", + (_, item: ZipItem, associatedItem: ZipItem | undefined) => + markUploadedZipItem(item, associatedItem), ); ipcMain.handle("clearPendingUploads", () => clearPendingUploads()); diff --git a/desktop/src/main/menu.ts b/desktop/src/main/menu.ts index 6b007ec9fa..bf0a892dcd 100644 --- a/desktop/src/main/menu.ts +++ b/desktop/src/main/menu.ts @@ -7,7 +7,7 @@ import { } from "electron"; import { allowWindowClose } from "../main"; import { forceCheckForAppUpdates } from "./services/app-update"; -import { userPreferences } from "./stores/user-preferences"; +import { setShouldHideDockIcon, shouldHideDockIcon } from "./services/store"; /** Create and return the entries in the app's main menu bar */ export const createApplicationMenu = (mainWindow: BrowserWindow) => { @@ -15,7 +15,7 @@ export const createApplicationMenu = (mainWindow: BrowserWindow) => { // // Whenever the menu is redrawn the current value of these variables is used // to set the checked state for the various settings checkboxes. - let shouldHideDockIcon = !!userPreferences.get("hideDockIcon"); + let hideDockIcon = shouldHideDockIcon(); const macOSOnly = (options: MenuItemConstructorOptions[]) => process.platform == "darwin" ? options : []; @@ -24,9 +24,9 @@ export const createApplicationMenu = (mainWindow: BrowserWindow) => { const toggleHideDockIcon = () => { // Persist - userPreferences.set("hideDockIcon", !shouldHideDockIcon); + setShouldHideDockIcon(!hideDockIcon); // And update the in-memory state - shouldHideDockIcon = !shouldHideDockIcon; + hideDockIcon = !hideDockIcon; }; const handleHelp = () => @@ -48,7 +48,7 @@ export const createApplicationMenu = (mainWindow: BrowserWindow) => { { label: "Hide Dock Icon", type: "checkbox", - checked: shouldHideDockIcon, + checked: hideDockIcon, click: toggleHideDockIcon, }, ], diff --git a/desktop/src/main/services/ffmpeg.ts b/desktop/src/main/services/ffmpeg.ts index 3b8e1d99f6..b5587b6ba1 100644 --- a/desktop/src/main/services/ffmpeg.ts +++ b/desktop/src/main/services/ffmpeg.ts @@ -1,11 +1,13 @@ import pathToFfmpeg from "ffmpeg-static"; +import { randomBytes } from "node:crypto"; import fs from "node:fs/promises"; -import type { ZipItem } from "../../types/ipc"; -import { ensure } from "../utils/common"; +import path, { basename } from "node:path"; +import type { FFmpegCommand, ZipItem } from "../../types/ipc"; +import log from "../log"; import { execAsync } from "../utils/electron"; import { deleteTempFileIgnoringErrors, - makeFileForDataOrPathOrZipItem, + makeFileForDataOrStreamOrPathOrZipItem, makeTempFilePath, } from "../utils/temp"; @@ -42,7 +44,7 @@ const outputPathPlaceholder = "OUTPUT"; * But I'm not sure if our code is supposed to be able to use it, and how. */ export const ffmpegExec = async ( - command: string[], + command: FFmpegCommand, dataOrPathOrZipItem: Uint8Array | string | ZipItem, outputFileExtension: string, ): Promise => { @@ -50,14 +52,23 @@ export const ffmpegExec = async ( path: inputFilePath, isFileTemporary: isInputFileTemporary, writeToTemporaryFile: writeToTemporaryInputFile, - } = await makeFileForDataOrPathOrZipItem(dataOrPathOrZipItem); + } = await makeFileForDataOrStreamOrPathOrZipItem(dataOrPathOrZipItem); const outputFilePath = await makeTempFilePath(outputFileExtension); try { await writeToTemporaryInputFile(); + let resolvedCommand: string[]; + if (Array.isArray(command)) { + resolvedCommand = command; + } else { + const isHDR = await isHDRVideo(inputFilePath); + log.debug(() => [basename(inputFilePath), { isHDR }]); + resolvedCommand = isHDR ? command.hdr : command.default; + } + const cmd = substitutePlaceholders( - command, + resolvedCommand, inputFilePath, outputFilePath, ); @@ -99,18 +110,17 @@ const ffmpegBinaryPath = () => { // This substitution of app.asar by app.asar.unpacked is suggested by the // ffmpeg-static library author themselves: // https://github.com/eugeneware/ffmpeg-static/issues/16 - return ensure(pathToFfmpeg).replace("app.asar", "app.asar.unpacked"); + return pathToFfmpeg!.replace("app.asar", "app.asar.unpacked"); }; /** * A variant of {@link ffmpegExec} adapted to work with streams so that it can * handle the MP4 conversion of large video files. * - * See: [Note: Convert to MP4] - * @param inputFilePath The path to a file on the user's local file system. This * is the video we want to convert. - * @param inputFilePath The path to a file on the user's local file system where + * + * @param outputFilePath The path to a file on the user's local file system where * we should write the converted MP4 video. */ export const ffmpegConvertToMP4 = async ( @@ -130,3 +140,539 @@ export const ffmpegConvertToMP4 = async ( await execAsync(cmd); }; + +export interface FFmpegGenerateHLSPlaylistAndSegmentsResult { + playlistPath: string; + videoPath: string; + dimensions: { width: number; height: number }; + videoSize: number; +} + +/** + * A bespoke variant of {@link ffmpegExec} for generation of HLS playlists for + * videos. + * + * Overview of the cases: + * + * H.264, <= 10 MB - Skip + * H.264, <= 4000 kb/s bitrate - Don't re-encode video stream + * BT.709, <= 2000 kb/s bitrate - Don't apply the scale+fps filter + * !BT.709 - Apply tonemap (zscale+tonemap+zscale) + * + * Example invocation: + * + * ffmpeg -i in.mov -vf 'scale=-2:720,fps=30,zscale=transfer=linear,tonemap=tonemap=hable:desat=0,zscale=primaries=709:transfer=709:matrix=709,format=yuv420p' -c:v libx264 -c:a aac -f hls -hls_key_info_file out.m3u8.info -hls_list_size 0 -hls_flags single_file out.m3u8 + * + * See: [Note: Preview variant of videos] + * + * @param inputFilePath The path to a file on the user's local file system. This + * is the video we want to generate an streamable HLS playlist for. + * + * @param outputPathPrefix The path to unique, unused and temporary prefix on + * the user's local file system. This function will write the generated HLS + * playlist and video segments under this prefix. + * + * @returns The paths to two files on the user's local file system - one + * containing the generated HLS playlist, and the other containing the + * transcoded and encrypted video segments that the HLS playlist refers to. + * + * If the video is such that it doesn't require stream generation, then this + * function returns `undefined`. + */ +export const ffmpegGenerateHLSPlaylistAndSegments = async ( + inputFilePath: string, + outputPathPrefix: string, +): Promise => { + const { isH264, isBT709, bitrate } = + await detectVideoCharacteristics(inputFilePath); + + log.debug(() => [basename(inputFilePath), { isH264, isBT709, bitrate }]); + + // If the video is smaller than 10 MB, and already H.264 (the codec we are + // going to use for the conversion), then a streaming variant is not much + // use. Skip such cases. + // + // --- + // + // [Note: HEVC/H.265 issues] + // + // We've observed two issues out in the wild with HEVC videos: + // + // 1. On Linux, HEVC video streams don't play. However, since the audio + // stream plays, the browser tells us that the "video" itself is + // playable, but the user sees a blank screen with only audio. + // + // 2. HEVC + HDR videos taken on an iPhone have a rotation (`Side data: + // displaymatrix` in the ffmpeg output) that Chrome (and thus Electron) + // doesn't take into account, so these play upside down. + // + // Not fully related to this case, but mentioning here as to why both the + // size and codec need to be checked before skipping stream generation. + if (isH264) { + const inputVideoSize = await fs + .stat(inputFilePath) + .then((st) => st.size); + if (inputVideoSize <= 10 * 1024 * 1024 /* 10 MB */) { + return undefined; + } + } + + // If the video is already H.264 with a bitrate less than 4000 kbps, then we + // do not need to reencode the video stream (by _far_ the costliest part of + // the HLS stream generation). + const reencodeVideo = !(isH264 && bitrate && bitrate <= 4000 * 1000); + + // If the bitrate is not too high, then we don't need to rescale the video + // when generating the video stream. This is not a performance optimization, + // but more for avoiding making the video size smaller unnecessarily. + const rescaleVideo = !(bitrate && bitrate <= 2000 * 1000); + + // [Note: Tonemapping HDR to HD] + // + // BT.709 ("HD") is a standard that describes things like how color is + // encoded, the range of values, and their "meaning" - i.e. how to map the + // values in the video to the pixels on the screen. + // + // It is not the only such standard, there are three common examples: + // + // - BT.601 ("Standard-Definition" or SD) + // - BT.709 ("High-Definition" or HD) + // - BT.2020 ("Ultra-High-Definition" or UHD, aka HDR^). + // + // ^ HDR ("High-Dynamic-Range") is an addendum to BT.2020, but for our + // purpose here we can treat it as as alias. + // + // BT.709 is the most common amongst these for older files out stored on + // computers, and they conform mostly to the standard (one notable exception + // is that the BT.709 standard also recommends using the yuv422p pixel + // format, but de facto yuv420p is used because many video players only + // support yuv420p). + // + // Since BT.709 is the most widely supported standard, we use it when + // generating the HLS playlist so to allow playback across the widest + // possible hardware/OS/browser combinations. + // + // If we convert HDR to HD without naively, then the colors look washed out + // compared to the original. To resolve this, we use a ffmpeg filterchain + // that uses the tonemap filter. + // + // However applying this tonemap to videos that are already HD leads to a + // brightness drop. So we conditionally apply this filter chain only if the + // colorspace is not already BT.709. + // + // See also: [Note: Alternative FFmpeg command for HDR videos], although + // that uses a allow-list based check (while here we use deny-list). + // + // Reference: + // - https://trac.ffmpeg.org/wiki/colorspace + const tonemap = !isBT709; + + // We want the generated playlist to refer to the chunks as "output.ts". + // + // So we arrange things accordingly: We use the `outputPathPrefix` as our + // working directory, and then ask ffmpeg to generate a playlist with the + // name "output.m3u8". + // + // ffmpeg will automatically place the segments in a file with the same base + // name as the playlist, but with a ".ts" extension. And since we use the + // "single_file" option, all the segments will be placed in a file named + // "output.ts". + + await fs.mkdir(outputPathPrefix); + + const playlistPath = path.join(outputPathPrefix, "output.m3u8"); + const videoPath = path.join(outputPathPrefix, "output.ts"); + + // Generate a cryptographically secure random key (16 bytes). + const keyBytes = randomBytes(16); + const keyB64 = keyBytes.toString("base64"); + + // Convert it to a data: URI that will be added to the playlist. + const keyURI = `data:text/plain;base64,${keyB64}`; + + // Determine two paths - one where we will write the key itself, and where + // we will write the "key info" that provides ffmpeg the `keyURI` and the + // `keyPath;. + const keyPath = playlistPath + ".key"; + const keyInfoPath = playlistPath + ".key-info"; + + // Generate a "key info": + // + // - the first line specifies the key URI that is written into the playlist. + // - the second line specifies the path to the local file system file from + // where ffmpeg should read the key. + const keyInfo = [keyURI, keyPath].join("\n"); + + // Overview: + // + // - Video H.264 HD 720p 30fps. + // - Audio AAC 128kbps. + // - Encrypted HLS playlist with a single file containing all the chunks. + // + // Reference: + // - `man ffmpeg-all` + // - https://trac.ffmpeg.org/wiki/Encode/H.264 + // + const command = [ + ffmpegBinaryPath(), + // Reduce the amount of output lines we have to parse. + ["-hide_banner"], + // Input file. We don't need any extra options that apply to the input file. + "-i", + inputFilePath, + // The remaining options apply to the next output file (`playlistPath`). + reencodeVideo + ? [ + // `-vf` creates a filter graph for the video stream. It is a + // comma separated list of filters chained together, e.g. + // `filter1=key=value:key=value.filter2=key=value`. + "-vf", + [ + // Do the rescaling to even number of pixels always if the + // tonemapping is going to be applied subsequently, + // otherwise the tonemapping will fail with "image + // dimensions must be divisible by subsampling factor". + // + // While we add the extra condition here for completeness, + // it won't usually matter since a non-BT.709 video is + // likely using a new codec, and as such would've a high + // enough bitrate to require rescaling anyways. + rescaleVideo || tonemap + ? [ + // Scales the video to maximum 720p height, + // keeping aspect ratio and the calculated + // dimension divisible by 2 (some of the other + // operations require an even pixel count). + "scale=-2:720", + // Convert the video to a constant 30 fps, + // duplicating or dropping frames as necessary. + "fps=30", + ] + : [], + // Convert the colorspace if the video is not in the HD + // color space (bt709). Before conversion, tone map colors + // so that they work the same across the change in the + // dyamic range. + // + // 1. The tonemap filter only works linear light, so we + // first use zscale with transfer=linear to linearize + // the input. + // + // 2. Then we use the tonemap, with the hable option that + // is best for preserving details. desat=0 turns off + // the default desaturation. + // + // 3. Use zscale again to "convert to BT.709" by asking it + // to set the all three of color primaries, transfer + // characteristics and colorspace matrix to 709 (Note: + // the constants specified in the tonemap filter help + // do not include the "bt" prefix) + // + // See: https://ffmpeg.org/ffmpeg-filters.html#tonemap-1 + // + // See: [Note: Tonemapping HDR to HD] + tonemap + ? [ + "zscale=transfer=linear", + "tonemap=tonemap=hable:desat=0", + "zscale=primaries=709:transfer=709:matrix=709", + ] + : [], + // Output using the well supported pixel format: 8-bit YUV + // planar color space with 4:2:0 chroma subsampling. + "format=yuv420p", + ] + .flat() + .join(","), + ] + : [], + reencodeVideo + ? // Video codec H.264 + // + // - `-c:v libx264` converts the video stream to the H.264 codec. + // + // - We don't supply a bitrate, instead it uses the default CRF + // ("23") as recommended in the ffmpeg trac. + // + // - We don't supply a preset, it'll use the default ("medium"). + ["-c:v", "libx264"] + : // Keep the video stream unchanged + ["-c:v", "copy"], + // Audio codec AAC + // + // - `-c:a aac` converts the audio stream to use the AAC codec + // + // - We don't supply a bitrate, it'll use the AAC default 128k bps. + ["-c:a", "aac"], + // Generate a HLS playlist. + ["-f", "hls"], + // Tell ffmpeg where to find the key, and the URI for the key to write + // into the generated playlist. Implies "-hls_enc 1". + ["-hls_key_info_file", keyInfoPath], + // Generate as many playlist entries as needed (default limit is 5). + ["-hls_list_size", "0"], + // Place all the video segments within the same .ts file (with the same + // path as the playlist file but with a ".ts" extension). + ["-hls_flags", "single_file"], + // Output path where the playlist should be generated. + playlistPath, + ].flat(); + + let dimensions: ReturnType; + let videoSize: number; + + try { + // Write the key and the keyInfo to their desired paths. + await Promise.all([ + fs.writeFile(keyPath, keyBytes), + fs.writeFile(keyInfoPath, keyInfo, { encoding: "utf8" }), + ]); + + // Run the ffmpeg command to generate the HLS playlist and segments. + // + // Note: Depending on the size of the input file, this may take long! + const { stderr: conversionStderr } = await execAsync(command); + + // Determine the dimensions of the generated video from the stderr + // output produced by ffmpeg during the conversion. + dimensions = detectVideoDimensions(conversionStderr); + + // Find the size of the generated video segments by reading the size of + // the generated .ts file. + videoSize = await fs.stat(videoPath).then((st) => st.size); + } catch (e) { + log.error("HLS generation failed", e); + await Promise.all([ + deleteTempFileIgnoringErrors(playlistPath), + deleteTempFileIgnoringErrors(videoPath), + ]); + throw e; + } finally { + await Promise.all([ + deleteTempFileIgnoringErrors(keyInfoPath), + deleteTempFileIgnoringErrors(keyPath), + // ffmpeg writes a /path/output.ts.tmp, clear it out too. + deleteTempFileIgnoringErrors(videoPath + ".tmp"), + ]); + } + + return { playlistPath, videoPath, dimensions, videoSize }; +}; + +/** + * A regex that matches the first line of the form + * + * Stream #0:0: Video: h264 (High 10) ([27][0][0][0] / 0x001B), yuv420p10le(tv, bt2020nc/bt2020/arib-std-b67), 1920x1080, 30 fps, 30 tbr, 90k tbn + * + * The part after Video: is the first capture group. + * + * Another example: + * + * Stream #0:1[0x2](und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(progressive), 480x270 [SAR 1:1 DAR 16:9], 539 kb/s, 29.97 fps, 29.97 tbr, 30k tbn (default) + */ +const videoStreamLineRegex = /Stream #.+: Video:(.+)\n/; + +/** {@link videoStreamLineRegex}, but global. */ +const videoStreamLinesRegex = /Stream #.+: Video:(.+)\n/g; + +/** + * A regex that matches " kb/s" preceded by a space. See + * {@link videoStreamLineRegex} for the context in which it is used. + */ +const videoBitrateRegex = / ([1-9]\d*) kb\/s/; + +/** + * A regex that matches x pair preceded by a space. See + * {@link videoStreamLineRegex} for the context in which it is used. + * + * We constrain the digit sequence not to begin with 0 to exclude hexadecimal + * representations of various constants that ffmpeg prints on this line (e.g. + * "avc1 / 0x31637661"). + */ +const videoDimensionsRegex = / ([1-9]\d*)x([1-9]\d*)/; + +interface VideoCharacteristics { + isH264: boolean; + isBT709: boolean; + bitrate: number | undefined; +} +/** + * Heuristically determine information about the video at the given + * {@link inputFilePath}: + * + * - If is encoded using H.264 codec. + * - If it uses the BT.709 colorspace. + * - Its bitrate. + * + * The defaults are tailored for the cases in which these conditions are used, + * so that even if we get the detection wrong we'll only end up encoding videos + * that could've possibly been skipped as an optimization. + * + * [Note: Parsing CLI output might break on ffmpeg updates] + * + * This function tries to determine the these bits of information about the + * given video by scanning the ffmpeg info output for the video stream line, and + * doing various string matches and regex extractions. + * + * Needless to say, while this works currently, this is liable to break in the + * future. So if something stops working after updating ffmpeg, look here! + * + * Ideally, we'd have done this using `ffprobe`, but we don't have the ffprobe + * binary at hand, so we make do by grepping the log output of ffmpeg. + * + * For reference, + * + * - codec and colorspace are printed by the `avcodec_string` function in the + * ffmpeg source: + * https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/avcodec.c + * + * - bitrate is printed by the `dump_stream_format` function in `dump.c`. + */ +const detectVideoCharacteristics = async (inputFilePath: string) => { + const videoInfo = await pseudoFFProbeVideo(inputFilePath); + const videoStreamLine = videoStreamLineRegex.exec(videoInfo)?.at(1)?.trim(); + + // Since the checks are heuristic, start with defaults that would cause the + // codec conversion to happen, even if it is unnecessary. + const res: VideoCharacteristics = { + isH264: false, + isBT709: false, + bitrate: undefined, + }; + if (!videoStreamLine) return res; + + res.isH264 = videoStreamLine.startsWith("h264 "); + res.isBT709 = videoStreamLine.includes("bt709"); + // The regex matches "\d kb/s", but there can be other units for the + // bitrate. However, (a) "kb/s" is the most common for videos out in the + // wild, and (b) even if we guess wrong it we'll just do "-v:c x264" instead + // of "-v:c copy", so only unnecessary processing but no change in output. + const brs = videoBitrateRegex.exec(videoStreamLine)?.at(0); + if (brs) { + const br = parseInt(brs, 10); + if (br) res.bitrate = br; + } + + return res; +}; + +/** + * Heuristically detect the dimensions of the given video from the log output of + * the ffmpeg invocation during the HLS playlist generation. + * + * This function tries to determine the width and height of the generated video + * from the output log written by ffmpeg on its stderr during the generation + * process, scanning it for the last video stream line, and trying to match a + * "x" regex. + * + * See: [Note: Parsing CLI output might break on ffmpeg updates]. + */ +const detectVideoDimensions = (conversionStderr: string) => { + // There is a nicer way to do it - by running `pseudoFFProbeVideo` on the + // generated playlist. However, that playlist includes a data URL that + // specifies the encryption info, and ffmpeg refuses to read that unless we + // specify the "-allowed_extensions ALL" or something to that effect. + // + // Unfortunately, our current ffmpeg binary (5.x) does not support that + // option. So we instead parse the conversion output itself. + // + // This is also nice, since it saves on an extra ffmpeg invocation. But we + // now need to be careful to find the right video stream line, since the + // conversion output includes both the input and output video stream lines. + // + // To match the right (output) video stream line, we use a global regex, and + // use the last match since that'd correspond to the single video stream + // written in the output. + const videoStreamLine = Array.from( + conversionStderr.matchAll(videoStreamLinesRegex), + ) + .at(-1) /* Last Stream...: Video: line in the output */ + ?.at(1); /* First capture group */ + if (videoStreamLine) { + const [, ws, hs] = videoDimensionsRegex.exec(videoStreamLine) ?? []; + if (ws && hs) { + const w = parseInt(ws, 10); + const h = parseInt(hs, 10); + if (w && h) { + return { width: w, height: h }; + } + } + } + throw new Error( + `Unable to detect video dimensions from stream line [${videoStreamLine ?? ""}]`, + ); +}; + +/** + * Heuristically detect if the file at given path is a HDR video. + * + * This is similar to {@link detectVideoCharacteristics}, and see that + * function's documentation for all the caveats. However, this function uses an + * allow-list instead, and considers any file with color transfer "smpte2084" or + * "arib-std-b67" to be HDR. While this is in some sense a more exact check, it + * comes with different caveats: + * + * - These particular constants are not guaranteed to be correct; these are just + * what I saw on the internet as being used / recommended for detecting HDR. + * + * - Since we don't have ffprobe, we're not checking the color space value + * itself but a substring of the stream line in the ffmpeg stderr output. + * + * In particular, we use this more exact check for places where we have less + * leeway. e.g. when generating thumbnails, if we apply the tonemapping to any + * non-BT.709 file (as the HLS stream generation does), we start getting the + * "code 3074: no path between colorspaces" error during the JPEG conversion + * (this is not a problem in the H.264 conversion). + * + * - See: [Note: Alternative FFmpeg command for HDR videos] + * - See: [Note: Tonemapping HDR to HD] + * + * @param inputFilePath The path to a video file on the user's machine. + * + * @returns `true` if this file is likely a HDR video. Exceptions are treated as + * `false` to make this function safe to invoke without breaking the happy path. + */ +const isHDRVideo = async (inputFilePath: string) => { + try { + const videoInfo = await pseudoFFProbeVideo(inputFilePath); + const vs = videoStreamLineRegex.exec(videoInfo)?.at(1); + if (!vs) return false; + return vs.includes("smpte2084") || vs.includes("arib-std-b67"); + } catch (e) { + log.warn(`Could not detect HDR status of ${inputFilePath}`, e); + return false; + } +}; + +/** + * Return the stderr of ffmpeg in an attempt to gain information about the video + * at the given {@link inputFilePath}. + * + * We don't have the ffprobe binary at hand, which is why we need to use this + * alternative. See: [Note: Parsing CLI output might break on ffmpeg updates] + * + * @returns the stderr of ffmpeg after running it on the input file. The exact + * command we run is: + * + * ffmpeg -i in.mov -an -frames:v 0 -f null - 2>info.txt + * + * And the returned string is the contents of the `info.txt` thus produced. + */ +const pseudoFFProbeVideo = async (inputFilePath: string) => { + const command = [ + ffmpegPathPlaceholder, + // Reduce the amount of output lines we have to parse. + ["-hide_banner"], + ["-i", inputPathPlaceholder], + "-an", + ["-frames:v", "0"], + ["-f", "null"], + "-", + ].flat(); + + const cmd = substitutePlaceholders(command, inputFilePath, /* NA */ ""); + + const { stderr } = await execAsync(cmd); + + return stderr; +}; diff --git a/desktop/src/main/services/fs.ts b/desktop/src/main/services/fs.ts index 6cfe101ebf..cba66a46d9 100644 --- a/desktop/src/main/services/fs.ts +++ b/desktop/src/main/services/fs.ts @@ -36,6 +36,17 @@ export const fsIsDir = async (dirPath: string) => { return stat.isDirectory(); }; +export const fsStatMtime = (path: string) => + // [Note: Integral last modified time] + // + // Whenever we need to find the modified time of a file, use the + // `mtime.getTime()` instead of `mtimeMs` of the stat; this way, it is + // guaranteed that the times are integral (we persist these values to remote + // in some cases, and the contract is for them to be integral; mtimeMs is a + // float with sub-millisecond precision), and that all places use the same + // value so that they're comparable. + fs.stat(path).then((st) => st.mtime.getTime()); + export const fsFindFiles = async (dirPath: string) => { const items = await fs.readdir(dirPath, { withFileTypes: true }); let paths: string[] = []; diff --git a/desktop/src/main/services/image.ts b/desktop/src/main/services/image.ts index 1c8574d287..7daa101d2a 100644 --- a/desktop/src/main/services/image.ts +++ b/desktop/src/main/services/image.ts @@ -6,7 +6,7 @@ import { type ZipItem } from "../../types/ipc"; import { execAsync, isDev } from "../utils/electron"; import { deleteTempFileIgnoringErrors, - makeFileForDataOrPathOrZipItem, + makeFileForDataOrStreamOrPathOrZipItem, makeTempFilePath, } from "../utils/temp"; @@ -69,7 +69,7 @@ export const generateImageThumbnail = async ( path: inputFilePath, isFileTemporary: isInputFileTemporary, writeToTemporaryFile: writeToTemporaryInputFile, - } = await makeFileForDataOrPathOrZipItem(dataOrPathOrZipItem); + } = await makeFileForDataOrStreamOrPathOrZipItem(dataOrPathOrZipItem); const outputFilePath = await makeTempFilePath("jpeg"); diff --git a/desktop/src/main/services/logout.ts b/desktop/src/main/services/logout.ts index ab031b9112..805eb6d109 100644 --- a/desktop/src/main/services/logout.ts +++ b/desktop/src/main/services/logout.ts @@ -1,6 +1,6 @@ import type { FSWatcher } from "chokidar"; import log from "../log"; -import { clearConvertToMP4Results } from "../stream"; +import { clearPendingVideoResults } from "../stream"; import { clearStores } from "./store"; import { watchReset } from "./watch"; import { clearOpenZipCache } from "./zip"; @@ -22,9 +22,9 @@ export const logout = (watcher: FSWatcher) => { ignoreError("FS watch", e); } try { - clearConvertToMP4Results(); + clearPendingVideoResults(); } catch (e) { - ignoreError("convert-to-mp4", e); + ignoreError("video", e); } try { clearStores(); diff --git a/desktop/src/main/services/ml-worker.ts b/desktop/src/main/services/ml-worker.ts index 3dd12a8003..5158925d31 100644 --- a/desktop/src/main/services/ml-worker.ts +++ b/desktop/src/main/services/ml-worker.ts @@ -16,8 +16,9 @@ import fs from "node:fs/promises"; import path from "node:path"; import * as ort from "onnxruntime-node"; import { messagePortMainEndpoint } from "../utils/comlink"; -import { ensure, wait } from "../utils/common"; +import { wait } from "../utils/common"; import { writeStream } from "../utils/stream"; +import { fsStatMtime } from "./fs"; /** * We cannot do @@ -63,12 +64,13 @@ process.parentPort.once("message", (e) => { // parent. expose( { + fsStatMtime, computeCLIPImageEmbedding, computeCLIPTextEmbeddingIfAvailable, detectFaces, computeFaceEmbeddings, }, - messagePortMainEndpoint(ensure(e.ports[0])), + messagePortMainEndpoint(e.ports[0]!), ); }); @@ -80,7 +82,7 @@ process.parentPort.once("message", (e) => { let _userDataPath: string | undefined; /** Equivalent to app.getPath("userData") */ -const userDataPath = () => ensure(_userDataPath); +const userDataPath = () => _userDataPath!; const parseInitData = (data: unknown) => { if ( @@ -131,10 +133,8 @@ const makeCachedInferenceSession = ( const createSession = (modelPath: string) => createInferenceSession(modelPath); - const cachedInferenceSession = () => { - if (!session) session = download().then(createSession); - return session; - }; + const cachedInferenceSession = () => + (session ??= download().then(createSession)); return cachedInferenceSession; }; @@ -252,7 +252,7 @@ export const computeCLIPImageEmbedding = async ( const results = await session.run(feeds); log.debugString(`ONNX/CLIP image embedding took ${Date.now() - t} ms`); /* Need these model specific casts to type the result */ - return ensure(results.output).data as Float32Array; + return results.output!.data as Float32Array; }; const cachedCLIPTextSession = makeCachedInferenceSession( @@ -261,10 +261,7 @@ const cachedCLIPTextSession = makeCachedInferenceSession( ); let _tokenizer: Tokenizer | undefined; -const getTokenizer = () => { - if (!_tokenizer) _tokenizer = new Tokenizer(); - return _tokenizer; -}; +const getTokenizer = () => (_tokenizer ??= new Tokenizer()); /** * Compute CLIP embeddings for an text snippet. @@ -295,7 +292,7 @@ export const computeCLIPTextEmbeddingIfAvailable = async (text: string) => { const t = Date.now(); const results = await session.run(feeds); log.debugString(`ONNX/CLIP text embedding took ${Date.now() - t} ms`); - return ensure(results.output).data as Float32Array; + return results.output!.data as Float32Array; }; const cachedFaceDetectionSession = makeCachedInferenceSession( @@ -316,7 +313,7 @@ export const detectFaces = async ( const t = Date.now(); const results = await session.run(feeds); log.debugString(`ONNX/YOLO face detection took ${Date.now() - t} ms`); - return ensure(results.output).data; + return results.output!.data; }; const cachedFaceEmbeddingSession = makeCachedInferenceSession( diff --git a/desktop/src/main/services/store.ts b/desktop/src/main/services/store.ts index 8ebac1a276..f4f5a9369a 100644 --- a/desktop/src/main/services/store.ts +++ b/desktop/src/main/services/store.ts @@ -42,3 +42,31 @@ export const lastShownChangelogVersion = (): number | undefined => export const setLastShownChangelogVersion = (version: number) => userPreferences.set("lastShownChangelogVersion", version); + +/** + * Return true if the dock icon should be hidden when the window is closed + * [macOS only]. + * + * On macOS, if this function returns true then when hiding ("closing" it with + * the x traffic light) the window we also hide the app's icon in the dock. The + * user can modify their preference using the Menu bar > ente > Settings > Hide + * dock icon checkbox. + * + * If the user has not set a value for this preference (i.e., the value is + * `undefined`), we use the default `true`. This is confusing, but this way we + * can retain the preexisting preference key instead of doing a migration. + * + * Value | Behaviour + * ----------|-------------- + * undefined | default (hide) + * false | show + * true | hide + * + * On non-macOS platforms, it always returns false. + */ +export const shouldHideDockIcon = (): boolean => + process.platform == "darwin" && + userPreferences.get("hideDockIcon") !== false; + +export const setShouldHideDockIcon = (hide: boolean) => + userPreferences.set("hideDockIcon", hide); diff --git a/desktop/src/main/services/upload.ts b/desktop/src/main/services/upload.ts index 4c20529da4..f62a181a48 100644 --- a/desktop/src/main/services/upload.ts +++ b/desktop/src/main/services/upload.ts @@ -135,22 +135,35 @@ export const setPendingUploads = ({ }); }; -export const markUploadedFiles = (paths: string[]) => { +export const markUploadedFile = ( + path: string, + associatedPath: string | undefined, +) => { const existing = uploadStatusStore.get("filePaths") ?? []; - const updated = existing.filter((p) => !paths.includes(p)); + const updated = existing.filter((p) => p != path && p != associatedPath); uploadStatusStore.set("filePaths", updated); + // See: [Note: Integral last modified time] + return fs.stat(path).then((st) => st.mtime.getTime()); }; -export const markUploadedZipItems = ( - items: [zipPath: string, entryName: string][], +export const markUploadedZipItem = ( + item: ZipItem, + associatedItem: ZipItem | undefined, ) => { const existing = uploadStatusStore.get("zipItems") ?? []; - const updated = existing.filter( - (z) => !items.some((e) => z[0] == e[0] && z[1] == e[1]), + const updated = exceptZipItem( + exceptZipItem(existing, item), + associatedItem, ); uploadStatusStore.set("zipItems", updated); + return fs.stat(item[0]).then((st) => st.mtime.getTime()); }; +const exceptZipItem = (items: ZipItem[], item: ZipItem | undefined) => + item + ? items.filter((zi) => !(zi[0] == item[0] && zi[1] == item[1])) + : items; + export const clearPendingUploads = () => { uploadStatusStore.clear(); clearOpenZipCache(); diff --git a/desktop/src/main/stream.ts b/desktop/src/main/stream.ts index 9c23b49630..7007debe1d 100644 --- a/desktop/src/main/stream.ts +++ b/desktop/src/main/stream.ts @@ -3,17 +3,23 @@ */ import { net, protocol } from "electron/main"; import { randomUUID } from "node:crypto"; +import fs_ from "node:fs"; import fs from "node:fs/promises"; -import { Writable } from "node:stream"; +import { Readable, Writable } from "node:stream"; import { pathToFileURL } from "node:url"; import log from "./log"; -import { ffmpegConvertToMP4 } from "./services/ffmpeg"; +import { + ffmpegConvertToMP4, + ffmpegGenerateHLSPlaylistAndSegments, + type FFmpegGenerateHLSPlaylistAndSegmentsResult, +} from "./services/ffmpeg"; import { markClosableZip, openZip } from "./services/zip"; -import { ensure } from "./utils/common"; +import { wait } from "./utils/common"; import { writeStream } from "./utils/stream"; import { deleteTempFile, deleteTempFileIgnoringErrors, + makeFileForDataOrStreamOrPathOrZipItem, makeTempFilePath, } from "./utils/temp"; @@ -57,25 +63,39 @@ const handleStreamRequest = async (request: Request): Promise => { const { host, searchParams } = new URL(url); switch (host) { case "read": - return handleRead(ensure(searchParams.get("path"))); + return handleRead(searchParams.get("path")!); case "read-zip": return handleReadZip( - ensure(searchParams.get("zipPath")), - ensure(searchParams.get("entryName")), + searchParams.get("zipPath")!, + searchParams.get("entryName")!, ); case "write": - return handleWrite(ensure(searchParams.get("path")), request); + return handleWrite(searchParams.get("path")!, request); + + case "video": { + const op = searchParams.get("op"); + if (op) { + switch (op) { + case "convert-to-mp4": + return handleConvertToMP4Write(request); + case "generate-hls": + return handleGenerateHLSWrite(request, searchParams); + default: + return new Response(`Unknown op ${op}`, { + status: 404, + }); + } + } - case "convert-to-mp4": { const token = searchParams.get("token"); const done = searchParams.get("done") !== null; - return token - ? done - ? handleConvertToMP4ReadDone(token) - : handleConvertToMP4Read(token) - : handleConvertToMP4Write(request); + if (!token) { + return new Response("Missing token", { status: 404 }); + } + + return done ? handleVideoDone(token) : handleVideoRead(token); } default: @@ -105,6 +125,7 @@ const handleRead = async (path: string) => { res.headers.set("Content-Length", `${fileSize}`); // Add the file's last modified time (as epoch milliseconds). + // See: [Note: Integral last modified time] const mtimeMs = stat.mtime.getTime(); res.headers.set("X-Last-Modified-Ms", `${mtimeMs}`); } @@ -166,21 +187,21 @@ const handleReadZip = async (zipPath: string, entryName: string) => { }; const handleWrite = async (path: string, request: Request) => { - await writeStream(path, ensure(request.body)); + await writeStream(path, request.body!); return new Response("", { status: 200 }); }; /** - * A map from token to file paths for convert-to-mp4 requests that we have - * received. + * A map from token to file paths generated as a result of stream://video + * requests we have received. */ -const convertToMP4Results = new Map(); +const pendingVideoResults = new Map(); /** - * Clear any in-memory state for in-flight convert-to-mp4 requests. Meant to be - * called during logout. + * Clear any in-memory state for in-flight streamed video processing requests. + * Meant to be called during logout. */ -export const clearConvertToMP4Results = () => convertToMP4Results.clear(); +export const clearPendingVideoResults = () => pendingVideoResults.clear(); /** * [Note: Convert to MP4] @@ -195,26 +216,26 @@ export const clearConvertToMP4Results = () => convertToMP4Results.clear(); * mode for the Web fetch API). So we need to simulate that using two different * streaming requests. * - * renderer → main stream://convert-to-mp4 + * renderer → main stream://video?op=convert-to-mp4 * → request.body is the original video - * ← response is a token + * ← response is [token] * - * renderer → main stream://convert-to-mp4?token= + * renderer → main stream://video?token= * ← response.body is the converted video * - * renderer → main stream://convert-to-mp4?token=&done + * renderer → main stream://video?token=&done * ← 200 OK * * Note that the conversion itself is not streaming. The conversion still - * happens in a single shot, we are just streaming the data across the IPC - * boundary to allow us to pass large amounts of data without running out of - * memory. + * happens in a single invocation of ffmpeg, we are just streaming the data + * across the IPC boundary to allow us to pass large amounts of data without + * running out of memory. * * See also: [Note: IPC streams] */ const handleConvertToMP4Write = async (request: Request) => { const inputTempFilePath = await makeTempFilePath(); - await writeStream(inputTempFilePath, ensure(request.body)); + await writeStream(inputTempFilePath, request.body!); const outputTempFilePath = await makeTempFilePath("mp4"); try { @@ -228,25 +249,177 @@ const handleConvertToMP4Write = async (request: Request) => { } const token = randomUUID(); - convertToMP4Results.set(token, outputTempFilePath); + pendingVideoResults.set(token, outputTempFilePath); return new Response(token, { status: 200 }); }; -const handleConvertToMP4Read = async (token: string) => { - const filePath = convertToMP4Results.get(token); +const handleVideoRead = async (token: string) => { + const filePath = pendingVideoResults.get(token); if (!filePath) return new Response(`Unknown token ${token}`, { status: 404 }); return net.fetch(pathToFileURL(filePath).toString()); }; -const handleConvertToMP4ReadDone = async (token: string) => { - const filePath = convertToMP4Results.get(token); +const handleVideoDone = async (token: string) => { + const filePath = pendingVideoResults.get(token); if (!filePath) return new Response(`Unknown token ${token}`, { status: 404 }); await deleteTempFile(filePath); - convertToMP4Results.delete(token); + pendingVideoResults.delete(token); return new Response("", { status: 200 }); }; + +/** + * Generate a HLS playlist for the given video. + * + * See: [Note: Convert to MP4] for the general architecture of commands that do + * renderer <-> main I/O using streams. + * + * The difference here is that we the conversion generates two streams^ - one + * for the HLS playlist itself, and one for the file containing the encrypted + * and transcoded video chunks. The video stream we write to the objectUploadURL + * (provided via {@link params}), and then we return a JSON object containing + * the token for the playlist, and other metadata for use by the renderer. + * + * ^ if the video doesn't require a stream to be generated (e.g. it is very + * small and already uses a compatible codec) then a HTT 204 is returned and + * no stream is generated. + */ +const handleGenerateHLSWrite = async ( + request: Request, + params: URLSearchParams, +) => { + const objectUploadURL = params.get("objectUploadURL"); + if (!objectUploadURL) throw new Error("Missing objectUploadURL"); + + let inputItem: Parameters[0]; + const path = params.get("path"); + if (path) { + inputItem = path; + } else { + const zipPath = params.get("zipPath"); + const entryName = params.get("entryName"); + if (zipPath && entryName) { + inputItem = [zipPath, entryName]; + } else { + const body = request.body; + if (!body) throw new Error("Missing body"); + inputItem = body; + } + } + + const { + path: inputFilePath, + isFileTemporary: isInputFileTemporary, + writeToTemporaryFile: writeToTemporaryInputFile, + } = await makeFileForDataOrStreamOrPathOrZipItem(inputItem); + + const outputFilePathPrefix = await makeTempFilePath(); + let result: FFmpegGenerateHLSPlaylistAndSegmentsResult | undefined; + try { + await writeToTemporaryInputFile(); + + result = await ffmpegGenerateHLSPlaylistAndSegments( + inputFilePath, + outputFilePathPrefix, + ); + + if (!result) { + // This video doesn't require stream generation. + return new Response(null, { status: 204 }); + } + + const { playlistPath, videoPath } = result; + try { + await uploadVideoSegments(videoPath, objectUploadURL); + + const playlistToken = randomUUID(); + pendingVideoResults.set(playlistToken, playlistPath); + + const { dimensions, videoSize } = result; + return new Response( + JSON.stringify({ playlistToken, dimensions, videoSize }), + { status: 200 }, + ); + } catch (e) { + await deleteTempFileIgnoringErrors(playlistPath); + throw e; + } finally { + await deleteTempFileIgnoringErrors(videoPath); + } + } finally { + if (isInputFileTemporary) + await deleteTempFileIgnoringErrors(inputFilePath); + } +}; + +/** + * Upload the file at the given {@link videoFilePath} to the provided presigned + * {@link objectUploadURL} using a HTTP PUT request. + * + * In case on non-HTTP-4xx errors, retry up to 3 times with exponential backoff. + * + * See: [Note: Upload HLS video segment from node side]. + * + * --- + * + * This is an inlined but bespoke reimplementation of `retryEnsuringHTTPOkOr4xx` + * from `web/packages/base/http.ts` (we don't have the rest of the scaffolding + * used by that function, which is why it is inlined bespoked). + * + * It handles the specific use case of uploading videos since generating the HLS + * stream is a fairly expensive operation, so a retry to discount transient + * network issues is called for. There are only 2 retries for a total of 3 + * attempts, and the retry gaps are more spaced out. + */ +export const uploadVideoSegments = async ( + videoFilePath: string, + objectUploadURL: string, +) => { + const waitTimeBeforeNextTry = [5000, 20000]; + + while (true) { + let abort = false; + try { + const nodeStream = fs_.createReadStream(videoFilePath); + const webStream = Readable.toWeb(nodeStream); + + const res = await net.fetch(objectUploadURL, { + method: "PUT", + // The duplex option is required since we're passing a stream. + // + // @ts-expect-error TypeScript's libdom.d.ts does not include + // the "duplex" parameter, e.g. see + // https://github.com/node-fetch/node-fetch/issues/1769. + duplex: "half", + body: webStream, + }); + + if (res.ok) { + // Success. + return; + } + if (res.status >= 400 && res.status < 500) { + // HTTP 4xx. + abort = true; + } + throw new Error( + `Failed to upload generated HLS video: HTTP ${res.status} ${res.statusText}`, + ); + } catch (e) { + if (abort) { + throw e; + } + const t = waitTimeBeforeNextTry.shift(); + if (!t) { + throw e; + } else { + log.warn("Will retry potentially transient request failure", e); + } + await wait(t); + } + } +}; diff --git a/desktop/src/main/types/any-shell-escape.d.ts b/desktop/src/main/types/any-shell-escape.d.ts index 4172cdb1ef..c5fef6fb96 100644 --- a/desktop/src/main/types/any-shell-escape.d.ts +++ b/desktop/src/main/types/any-shell-escape.d.ts @@ -12,7 +12,7 @@ * * yields (on POSIX shells): * - * curl -v -H 'Location;' -H 'User-Agent: FoorBar'"'"'s so-called "Browser"' 'http://www.daveeddy.com/?name=dave&age=24' + * curl -v -H 'Location;' -H 'User-Agent: FooBar'"'"'s so-called "Browser"' 'http://www.daveeddy.com/?name=dave&age=24' * * or (on Windows): * diff --git a/desktop/src/main/utils/common.ts b/desktop/src/main/utils/common.ts index 929281d740..b123014270 100644 --- a/desktop/src/main/utils/common.ts +++ b/desktop/src/main/utils/common.ts @@ -5,20 +5,13 @@ * currently a common package that both of them share. */ -/** - * Throw an exception if the given value is `null` or `undefined`. - */ -export const ensure = (v: T | null | undefined): T => { - if (v === null) throw new Error("Required value was null"); - if (v === undefined) throw new Error("Required value was not found"); - return v; -}; - /** * Wait for {@link ms} milliseconds * * This function is a promisified `setTimeout`. It returns a promise that * resolves after {@link ms} milliseconds. + * + * Duplicated from `web/packages/utils/promise.ts`. */ export const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); diff --git a/desktop/src/main/utils/stream.ts b/desktop/src/main/utils/stream.ts index f5a98de0f7..cfa3327ffc 100644 --- a/desktop/src/main/utils/stream.ts +++ b/desktop/src/main/utils/stream.ts @@ -27,7 +27,7 @@ const writeNodeStream = async (filePath: string, fileStream: Readable) => { fileStream.pipe(writeable); - await new Promise((resolve, reject) => { + await new Promise((resolve, reject) => { writeable.on("finish", resolve); writeable.on("error", (err) => { if (existsSync(filePath)) { diff --git a/desktop/src/main/utils/temp.ts b/desktop/src/main/utils/temp.ts index a37f5767f3..67fd9ae1b9 100644 --- a/desktop/src/main/utils/temp.ts +++ b/desktop/src/main/utils/temp.ts @@ -5,7 +5,7 @@ import path from "node:path"; import type { ZipItem } from "../../types/ipc"; import log from "../log"; import { markClosableZip, openZip } from "../services/zip"; -import { ensure } from "./common"; +import { writeStream } from "./stream"; /** * Our very own directory within the system temp directory. Go crazy, but @@ -20,17 +20,21 @@ const enteTempDirPath = async () => { /** Generate a random string suitable for being used as a file name prefix */ const randomPrefix = () => { const ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; - const randomChar = () => ensure(ch[Math.floor(Math.random() * ch.length)]); + const randomChar = () => ch[Math.floor(Math.random() * ch.length)]!; return Array(10).fill("").map(randomChar).join(""); }; /** - * Return the path to a temporary file with the given {@link suffix}. + * Return the path to a temporary file with an optional {@link extension}. * * The function returns the path to a file in the system temp directory (in an * Ente specific folder therin) with a random prefix and an (optional) - * {@link extension}. + * {@link extension}. The parent directory is guaranteed to exist. + * + * @param extension A string, if provided, is used as the extension for the + * generated path. It will be automatically prefixed by a dot, so don't include + * the dot in the provided string. * * It ensures that there is no existing item with the same name already. * @@ -64,7 +68,7 @@ export const deleteTempFile = async (tempFilePath: string) => { }; /** - * A variant of {@link deleteTempFile} that supresses any errors, making it + * A variant of {@link deleteTempFile} that suppresses any errors, making it * safe to call them in a sequence without needing to handle the scenario where * one of them failing causes the rest to be skipped. */ @@ -76,7 +80,7 @@ export const deleteTempFileIgnoringErrors = async (tempFilePath: string) => { } }; -/** The result of {@link makeFileForDataOrPathOrZipItem}. */ +/** The result of {@link makeFileForDataOrStreamOrPathOrZipItem}. */ interface FileForDataOrPathOrZipItem { /** * The path to the file (possibly temporary). @@ -101,14 +105,14 @@ interface FileForDataOrPathOrZipItem { /** * Return the path to a file, a boolean indicating if this is a temporary path * that needs to be deleted after processing, and a function to write the given - * {@link dataOrPathOrZipItem} into that temporary file if needed. + * {@link item} into that temporary file if needed. * - * @param dataOrPathOrZipItem The contents of the file, or the path to an - * existing file, or a (path to a zip file, name of an entry within that zip - * file) tuple. + * @param item The contents of the file (bytes), or a {@link ReadableStream} + * with the contents of the file, or the path to an existing file, or a (path to + * a zip file, name of an entry within that zip file) tuple. */ -export const makeFileForDataOrPathOrZipItem = async ( - dataOrPathOrZipItem: Uint8Array | string | ZipItem, +export const makeFileForDataOrStreamOrPathOrZipItem = async ( + item: Uint8Array | ReadableStream | string | ZipItem, ): Promise => { let path: string; let isFileTemporary: boolean; @@ -116,18 +120,19 @@ export const makeFileForDataOrPathOrZipItem = async ( /* no-op */ }; - if (typeof dataOrPathOrZipItem == "string") { - path = dataOrPathOrZipItem; + if (typeof item == "string") { + path = item; isFileTemporary = false; } else { path = await makeTempFilePath(); isFileTemporary = true; - if (dataOrPathOrZipItem instanceof Uint8Array) { - writeToTemporaryFile = () => - fs.writeFile(path, dataOrPathOrZipItem); + if (item instanceof Uint8Array) { + writeToTemporaryFile = () => fs.writeFile(path, item); + } else if (item instanceof ReadableStream) { + writeToTemporaryFile = () => writeStream(path, item); } else { writeToTemporaryFile = async () => { - const [zipPath, entryName] = dataOrPathOrZipItem; + const [zipPath, entryName] = item; const zip = openZip(zipPath); try { await zip.extract(entryName, path); diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts index 3fab447722..ef586210dd 100644 --- a/desktop/src/preload.ts +++ b/desktop/src/preload.ts @@ -66,6 +66,7 @@ import type { IpcRendererEvent } from "electron"; import type { AppUpdate, CollectionMapping, + FFmpegCommand, FolderWatch, PendingUploads, ZipItem, @@ -183,6 +184,8 @@ const fsWriteFileViaBackup = (path: string, contents: string) => const fsIsDir = (dirPath: string) => ipcRenderer.invoke("fsIsDir", dirPath); +const fsStatMtime = (path: string) => ipcRenderer.invoke("fsStatMtime", path); + // - Conversion const convertToJPEG = (imageData: Uint8Array) => @@ -201,7 +204,7 @@ const generateImageThumbnail = ( ); const ffmpegExec = ( - command: string[], + command: FFmpegCommand, dataOrPathOrZipItem: Uint8Array | string | ZipItem, outputFileExtension: string, ) => @@ -289,11 +292,11 @@ const pendingUploads = () => ipcRenderer.invoke("pendingUploads"); const setPendingUploads = (pendingUploads: PendingUploads) => ipcRenderer.invoke("setPendingUploads", pendingUploads); -const markUploadedFiles = (paths: PendingUploads["filePaths"]) => - ipcRenderer.invoke("markUploadedFiles", paths); +const markUploadedFile = (path: string, associatedPath?: string) => + ipcRenderer.invoke("markUploadedFile", path, associatedPath); -const markUploadedZipItems = (items: PendingUploads["zipItems"]) => - ipcRenderer.invoke("markUploadedZipItems", items); +const markUploadedZipItem = (item: ZipItem, associatedItem?: ZipItem) => + ipcRenderer.invoke("markUploadedZipItem", item, associatedItem); const clearPendingUploads = () => ipcRenderer.invoke("clearPendingUploads"); @@ -335,7 +338,7 @@ const clearPendingUploads = () => ipcRenderer.invoke("clearPendingUploads"); * > * > https://www.electronjs.org/docs/latest/api/context-bridge#methods * - * The copy itself is relatively fast, but the problem with transfering large + * The copy itself is relatively fast, but the problem with transferring large * amounts of data is potentially running out of memory during the copy. * * For an alternative, see [Note: IPC streams]. @@ -378,6 +381,7 @@ contextBridge.exposeInMainWorld("electron", { writeFile: fsWriteFile, writeFileViaBackup: fsWriteFileViaBackup, isDir: fsIsDir, + statMtime: fsStatMtime, findFiles: fsFindFiles, }, @@ -410,7 +414,7 @@ contextBridge.exposeInMainWorld("electron", { pathOrZipItemSize, pendingUploads, setPendingUploads, - markUploadedFiles, - markUploadedZipItems, + markUploadedFile, + markUploadedZipItem, clearPendingUploads, }); diff --git a/desktop/src/types/ipc.ts b/desktop/src/types/ipc.ts index f61cd71a2a..7701836217 100644 --- a/desktop/src/types/ipc.ts +++ b/desktop/src/types/ipc.ts @@ -32,3 +32,5 @@ export interface PendingUploads { filePaths: string[]; zipItems: ZipItem[]; } + +export type FFmpegCommand = string[] | { default: string[]; hdr: string[] }; diff --git a/desktop/tsconfig.json b/desktop/tsconfig.json index cf0f8b8856..b677d664e8 100644 --- a/desktop/tsconfig.json +++ b/desktop/tsconfig.json @@ -7,10 +7,10 @@ * Recommended target, lib and other settings for code running in the * version of Node.js bundled with Electron. * - * Currently, with Electron 30, this is Node.js 20.11.1. - * https://www.electronjs.org/blog/electron-30-0 + * Currently, with Electron 35, this is Node.js 22.14.0. + * https://www.electronjs.org/blog/electron-35-0 */ - "extends": "@tsconfig/node20/tsconfig.json", + "extends": "@tsconfig/node22/tsconfig.json", /* TSConfig docs: https://aka.ms/tsconfig.json */ "compilerOptions": { diff --git a/desktop/yarn.lock b/desktop/yarn.lock index 09ae1ae36e..25b3a8f43a 100644 --- a/desktop/yarn.lock +++ b/desktop/yarn.lock @@ -25,19 +25,19 @@ ajv "^6.12.0" ajv-keywords "^3.4.1" -"@electron/asar@3.2.18": - version "3.2.18" - resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.18.tgz#fa607f829209bab8b9e0ce6658d3fe81b2cba517" - integrity sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg== +"@electron/asar@3.4.1": + version "3.4.1" + resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.4.1.tgz#4e9196a4b54fba18c56cd8d5cac67c5bdc588065" + integrity sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA== dependencies: commander "^5.0.0" glob "^7.1.6" minimatch "^3.0.4" "@electron/asar@^3.2.7": - version "3.2.10" - resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.10.tgz#615cf346b734b23cafa4e0603551010bd0e50aa8" - integrity sha512-mvBSwIBUeiRscrCeJE1LwctAriBj65eUDm0Pc11iE5gRwzkmsdbS7FnZ1XUWjpSeQWL1L5g12Fc/SchPM9DUOw== + version "3.2.18" + resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.18.tgz#fa607f829209bab8b9e0ce6658d3fe81b2cba517" + integrity sha512-2XyvMe3N3Nrs8cV39IKELRHTYUWFKrmqqSY1U+GMlc0jvqjIVnoxhNd2H4JolWQncbJi1DCvb5TNxZuI2fEjWg== dependencies: commander "^5.0.0" glob "^7.1.6" @@ -103,10 +103,10 @@ minimist "^1.2.6" plist "^3.0.5" -"@electron/rebuild@3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.7.0.tgz#82e20c467ddedbb295d7f641592c52e68c141e9f" - integrity sha512-VW++CNSlZwMYP7MyXEbrKjpzEwhB5kDNbzGtiPEjwYysqyTCF+YbNJ210Dj3AjWsGSV4iEEwNkmJN9yGZmVvmw== +"@electron/rebuild@3.7.2": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.7.2.tgz#8d808b29159c50086d27a5dec72b40bf16b4b582" + integrity sha512-19/KbIR/DAxbsCkiaGMXIdPnMCJLkcf8AvGnduJtWBs/CBwiAjY1apCqOLVxrXg+rtXFCngbXhBanWjxLUt1Mg== dependencies: "@electron/node-gyp" "https://github.com/electron/node-gyp#06b29aafb7708acef8b3669835c8a7857ebc92d2" "@malept/cross-spawn-promise" "^2.0.0" @@ -177,10 +177,10 @@ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.9.1.tgz#4a97e85e982099d6c7ee8410aacb55adaa576f06" integrity sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ== -"@eslint/js@^9.22.0": - version "9.22.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.22.0.tgz#4ff53649ded7cbce90b444b494c234137fa1aa3d" - integrity sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ== +"@eslint/js@^9.25.1": + version "9.25.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.25.1.tgz#25f5c930c2b68b5ebe7ac857f754cbd61ef6d117" + integrity sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg== "@eslint/object-schema@^2.1.4": version "2.1.4" @@ -290,10 +290,10 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@tsconfig/node20@^20.1.4": - version "20.1.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node20/-/node20-20.1.4.tgz#3457d42eddf12d3bde3976186ab0cd22b85df928" - integrity sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg== +"@tsconfig/node22@^22.0.1": + version "22.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node22/-/node22-22.0.1.tgz#27e3ee9b359e31e5b94690bf2bad5a923c1d57d0" + integrity sha512-VkgOa3n6jvs1p+r3DiwBqeEwGAwEvnVCg/hIjiANl5IEcqP3G0u5m8cBJspe1t9qjZRlZ7WFgqq5bJrGdgAKMg== "@types/auto-launch@^5.0.5": version "5.0.5" @@ -346,25 +346,18 @@ resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== -"@types/node@*": - version "22.5.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.5.4.tgz#83f7d1f65bc2ed223bdbf57c7884f1d5a4fa84e8" - integrity sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg== +"@types/node@*", "@types/node@^22.7.7": + version "22.14.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.0.tgz#d3bfa3936fef0dbacd79ea3eb17d521c628bb47e" + integrity sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA== dependencies: - undici-types "~6.19.2" + undici-types "~6.21.0" "@types/node@^10.0.3": version "10.17.60" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== -"@types/node@^20.9.0": - version "20.16.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.16.5.tgz#d43c7f973b32ffdf9aa7bd4f80e1072310fd7a53" - integrity sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA== - dependencies: - undici-types "~6.19.2" - "@types/plist@^3.0.1": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/plist/-/plist-3.0.5.tgz#9a0c49c0f9886c8c8696a7904dd703f6284036e0" @@ -392,62 +385,62 @@ dependencies: "@types/node" "*" -"@typescript-eslint/eslint-plugin@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.1.tgz#3e48eb847924161843b092c87a9b65176b53782f" - integrity sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA== +"@typescript-eslint/eslint-plugin@8.31.1": + version "8.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.31.1.tgz#62f1befe59647524994e89de4516d8dcba7a850a" + integrity sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.26.1" - "@typescript-eslint/type-utils" "8.26.1" - "@typescript-eslint/utils" "8.26.1" - "@typescript-eslint/visitor-keys" "8.26.1" + "@typescript-eslint/scope-manager" "8.31.1" + "@typescript-eslint/type-utils" "8.31.1" + "@typescript-eslint/utils" "8.31.1" + "@typescript-eslint/visitor-keys" "8.31.1" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^2.0.1" -"@typescript-eslint/parser@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.26.1.tgz#0e2f915a497519fc43f52cf2ecbfa607ff56f72e" - integrity sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ== +"@typescript-eslint/parser@8.31.1": + version "8.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.31.1.tgz#e9b0ccf30d37dde724ee4d15f4dbc195995cce1b" + integrity sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q== dependencies: - "@typescript-eslint/scope-manager" "8.26.1" - "@typescript-eslint/types" "8.26.1" - "@typescript-eslint/typescript-estree" "8.26.1" - "@typescript-eslint/visitor-keys" "8.26.1" + "@typescript-eslint/scope-manager" "8.31.1" + "@typescript-eslint/types" "8.31.1" + "@typescript-eslint/typescript-estree" "8.31.1" + "@typescript-eslint/visitor-keys" "8.31.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.26.1.tgz#5e6ad0ac258ccf79462e91c3f43a3f1f7f31a6cc" - integrity sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg== +"@typescript-eslint/scope-manager@8.31.1": + version "8.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.31.1.tgz#1eb52e76878f545e4add142e0d8e3e97e7aa443b" + integrity sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw== dependencies: - "@typescript-eslint/types" "8.26.1" - "@typescript-eslint/visitor-keys" "8.26.1" + "@typescript-eslint/types" "8.31.1" + "@typescript-eslint/visitor-keys" "8.31.1" -"@typescript-eslint/type-utils@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.26.1.tgz#462f0bae09de72ac6e8e1af2ebe588c23224d7f8" - integrity sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg== +"@typescript-eslint/type-utils@8.31.1": + version "8.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.31.1.tgz#be0f438fb24b03568e282a0aed85f776409f970c" + integrity sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA== dependencies: - "@typescript-eslint/typescript-estree" "8.26.1" - "@typescript-eslint/utils" "8.26.1" + "@typescript-eslint/typescript-estree" "8.31.1" + "@typescript-eslint/utils" "8.31.1" debug "^4.3.4" ts-api-utils "^2.0.1" -"@typescript-eslint/types@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.26.1.tgz#d5978721670cff263348d5062773389231a64132" - integrity sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ== +"@typescript-eslint/types@8.31.1": + version "8.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.31.1.tgz#478ed6f7e8aee1be7b63a60212b6bffe1423b5d4" + integrity sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ== -"@typescript-eslint/typescript-estree@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.1.tgz#eb0e4ce31753683d83be53441a409fd5f0b34afd" - integrity sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA== +"@typescript-eslint/typescript-estree@8.31.1": + version "8.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.1.tgz#37792fe7ef4d3021c7580067c8f1ae66daabacdf" + integrity sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag== dependencies: - "@typescript-eslint/types" "8.26.1" - "@typescript-eslint/visitor-keys" "8.26.1" + "@typescript-eslint/types" "8.31.1" + "@typescript-eslint/visitor-keys" "8.31.1" debug "^4.3.4" fast-glob "^3.3.2" is-glob "^4.0.3" @@ -455,22 +448,22 @@ semver "^7.6.0" ts-api-utils "^2.0.1" -"@typescript-eslint/utils@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.26.1.tgz#54cc58469955f25577f659753b71a0e117a0539f" - integrity sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg== +"@typescript-eslint/utils@8.31.1": + version "8.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.31.1.tgz#5628ea0393598a0b2f143d0fc6d019f0dee9dd14" + integrity sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.26.1" - "@typescript-eslint/types" "8.26.1" - "@typescript-eslint/typescript-estree" "8.26.1" + "@typescript-eslint/scope-manager" "8.31.1" + "@typescript-eslint/types" "8.31.1" + "@typescript-eslint/typescript-estree" "8.31.1" -"@typescript-eslint/visitor-keys@8.26.1": - version "8.26.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.1.tgz#c5267fcc82795cf10280363023837deacad2647c" - integrity sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg== +"@typescript-eslint/visitor-keys@8.31.1": + version "8.31.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.1.tgz#6742b0e3ba1e0c1e35bdaf78c03e759eb8dd8e75" + integrity sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw== dependencies: - "@typescript-eslint/types" "8.26.1" + "@typescript-eslint/types" "8.31.1" eslint-visitor-keys "^4.2.0" "@xmldom/xmldom@^0.8.8": @@ -571,44 +564,35 @@ any-shell-escape@^0.1.1: resolved "https://registry.yarnpkg.com/any-shell-escape/-/any-shell-escape-0.1.1.tgz#d55ab972244c71a9a5e1ab0879f30bf110806959" integrity sha512-36j4l5HVkboyRhIWgtMh1I9i8LTdFqVwDEHy1cp+QioJyKgAUG40X0W8s7jakWRta/Sjvm8mUG1fU6Tj8mWagQ== -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - app-builder-bin@5.0.0-alpha.12: version "5.0.0-alpha.12" resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-5.0.0-alpha.12.tgz#2daf82f8badc698e0adcc95ba36af4ff0650dc80" integrity sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w== -app-builder-lib@26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-26.0.0.tgz#726b8b2c058f04f854aba70c7245d48454905980" - integrity sha512-vZTt6Nc401IHBHISqspcO9tUF80ddOP5ehh2B4goLefM+zdT75CvuQUuqz7yzRgW16pHLqCvKMws0FbJQfLB5w== +app-builder-lib@26.0.14: + version "26.0.14" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-26.0.14.tgz#a28fbefb600cf052d1259932f32289e043573f61" + integrity sha512-nc/A9MUd95MCc7bR4yVW7Lhs9FZTA/l8QdV8PE1vZZOOiogK4dupBfCCJG0UqLU81JS62f078/bwAeuMjt3hfQ== dependencies: "@develar/schema-utils" "~2.6.5" - "@electron/asar" "3.2.18" + "@electron/asar" "3.4.1" "@electron/fuses" "^1.8.0" "@electron/notarize" "2.5.0" "@electron/osx-sign" "1.3.1" - "@electron/rebuild" "3.7.0" + "@electron/rebuild" "3.7.2" "@electron/universal" "2.0.1" "@malept/flatpak-bundler" "^0.4.0" "@types/fs-extra" "9.0.13" async-exit-hook "^2.0.1" - bluebird-lst "^1.0.9" - builder-util "26.0.0" - builder-util-runtime "9.3.0" + builder-util "26.0.13" + builder-util-runtime "9.3.2" chromium-pickle-js "^0.2.0" config-file-ts "0.2.8-rc1" debug "^4.3.4" dotenv "^16.4.5" dotenv-expand "^11.0.6" ejs "^3.1.8" - electron-publish "26.0.0" + electron-publish "26.0.13" fs-extra "^10.1.0" hosted-git-info "^4.1.0" is-ci "^3.0.0" @@ -617,10 +601,12 @@ app-builder-lib@26.0.0: json5 "^2.2.3" lazy-val "^1.0.5" minimatch "^10.0.0" + plist "3.1.0" resedit "^1.7.0" semver "^7.3.8" tar "^6.1.12" temp-file "^3.4.0" + tiny-async-pool "1.3.0" applescript@^1.0.0: version "1.0.0" @@ -688,11 +674,6 @@ base64-js@^1.3.1, base64-js@^1.5.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" @@ -702,18 +683,6 @@ bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" -bluebird-lst@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c" - integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw== - dependencies: - bluebird "^3.5.5" - -bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - boolean@^3.0.1: version "3.2.0" resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" @@ -734,7 +703,7 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.3, braces@~3.0.2: +braces@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -759,24 +728,23 @@ buffer@^5.1.0, buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -builder-util-runtime@9.3.0: - version "9.3.0" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.3.0.tgz#58d97c279bb8626a10d779e1cf22fea0eb25f5e8" - integrity sha512-wR81YIybr41JITLSltwtTsZXkgTwcpBol7LGOyB5A8fKCcZaYLDWgUqDwmsjhlgADD6sGD5ieyzS/5wbL2l/qQ== +builder-util-runtime@9.3.2: + version "9.3.2" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.3.2.tgz#2a69a239b50e26accf4ed4ea1730406a3117213c" + integrity sha512-7QDXJ1FwT6d9ZhG4kuObUUPY8/ENBS/Ky26O4hR5vbeoRGavgekS2Jxv+8sCn/v23aPGU2DXRWEeJuijN2ooYA== dependencies: debug "^4.3.4" sax "^1.2.4" -builder-util@26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-26.0.0.tgz#e5bc122f3e9e94fa2e3afd2e837e81ce9f177359" - integrity sha512-iLN4R0UAzSz4MxPmz+6vnXMqaY5BMd2FSNlM9f7eHSRYqZrsoTHCSrd7W4Kr4qFIdUxLlRz3X2npATapXzomIg== +builder-util@26.0.13: + version "26.0.13" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-26.0.13.tgz#a2c11f8e89e5392719e540d610d70d8413943d74" + integrity sha512-6b64uHzywaL2KAG+rVcqk/Prta1m3I2Jo1d4d2CrApb6EeSk2V384tmSL0EniH+P8jaNbMp6qhg7cIALw32zRA== dependencies: "7zip-bin" "~5.2.0" "@types/debug" "^4.1.6" app-builder-bin "5.0.0-alpha.12" - bluebird-lst "^1.0.9" - builder-util-runtime "9.3.0" + builder-util-runtime "9.3.2" chalk "^4.1.2" cross-spawn "^7.0.6" debug "^4.3.4" @@ -789,6 +757,7 @@ builder-util@26.0.0: source-map-support "^0.5.19" stat-mode "^1.0.0" temp-file "^3.4.0" + tiny-async-pool "1.3.0" cacache@^16.1.0: version "16.1.3" @@ -850,20 +819,12 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== +chokidar@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" + readdirp "^4.0.1" chownr@^2.0.0: version "2.0.0" @@ -1046,16 +1007,7 @@ cross-env@^7.0.3: dependencies: cross-spawn "^7.0.1" -cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cross-spawn@^7.0.6: +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -1153,14 +1105,14 @@ dir-compare@^4.2.0: minimatch "^3.0.5" p-limit "^3.1.0 " -dmg-builder@26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-26.0.0.tgz#6dc81be31f7ffe9f8a5fc77ce7f83eba33ae9aa7" - integrity sha512-NyyTgm1U56ytpFvuGjj63PYug3v+oYYbPc8e08EiHP6G4TvMwYabmSzFtanfoO1iI7xOljpW/fW7SNCHHElsfw== +dmg-builder@26.0.14: + version "26.0.14" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-26.0.14.tgz#ce8180da319cf3ee05d42cd460a7509207ad474b" + integrity sha512-0l7oEj175hee7NfnaUpb0zf7fsgh1SyHeLjDA0AtOMnBUfTGxPPwrifbUxfd73qzamrGNcyeqza+m/EJx3QUug== dependencies: - app-builder-lib "26.0.0" - builder-util "26.0.0" - builder-util-runtime "9.3.0" + app-builder-lib "26.0.14" + builder-util "26.0.13" + builder-util-runtime "9.3.2" fs-extra "^10.1.0" iconv-lite "^0.6.2" js-yaml "^4.1.0" @@ -1207,35 +1159,35 @@ ejs@^3.1.8: dependencies: jake "^10.8.5" -electron-builder@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-26.0.0.tgz#f5c03b049e3e9b0d3da7737f93bf1a830d1f17bb" - integrity sha512-R1ZNTCtwjApiELkE4LTNIF6UkV+FMgyDIjILlsVvFak8Jr60cI9gu4q3lVALYzGBcFyzHKn2RPp6j0gl5kuVow== +electron-builder@^26.0.14: + version "26.0.14" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-26.0.14.tgz#8927c6da42a69425d15e08f351e944ea0e7866da" + integrity sha512-YBxpWLMGj0oS7fbS3LVingeZqFunU0F8s+uB9QTd5+wN4qgrf/rSGRkqoImbWg2+F2yHq11wmaA/Xr9xzvgQ0w== dependencies: - app-builder-lib "26.0.0" - builder-util "26.0.0" - builder-util-runtime "9.3.0" + app-builder-lib "26.0.14" + builder-util "26.0.13" + builder-util-runtime "9.3.2" chalk "^4.1.2" - dmg-builder "26.0.0" + dmg-builder "26.0.14" fs-extra "^10.1.0" is-ci "^3.0.0" lazy-val "^1.0.5" simple-update-notifier "2.0.0" yargs "^17.6.2" -electron-log@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.3.2.tgz#76aa0091f9cbf0d304546ca6f271ebb6ad953bf4" - integrity sha512-EFI5MFFEzFJU5gyhJNpKQhfGfrRP9IWzSu0sSxrWXasWKvVAOFgBySafX8W1pbPKa/w8/DDPu2bBBtVZJdDsnw== +electron-log@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/electron-log/-/electron-log-5.4.0.tgz#3180bf5194b2e2efacb62ec1392f8150faf4de6b" + integrity sha512-AXI5OVppskrWxEAmCxuv8ovX+s2Br39CpCAgkGMNHQtjYT3IiVbSQTncEjFVGPgoH35ZygRm/mvUMBDWwhRxgg== -electron-publish@26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-26.0.0.tgz#f37b9babe62885c2ee552af2817bf2048b566637" - integrity sha512-0MOeYp1IRDj+jdkWluEVMer8fpc/htwWJZdGQUMbbbhgMnX8AvDdwHuR0UdaPFLDJ076E9YHd2urkeFyLm7PUQ== +electron-publish@26.0.13: + version "26.0.13" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-26.0.13.tgz#04340520e6e9de5262fecfa011658cfcc3fc8917" + integrity sha512-O5hfHSwli5cegQ4JS3Dp0dZcheex6UCRE/qYyRQvhB6DhSwojiwTnAGEuQCJXc8K8Zxz2lku5Du3VwYHf8d5Lw== dependencies: "@types/fs-extra" "^9.0.11" - builder-util "26.0.0" - builder-util-runtime "9.3.0" + builder-util "26.0.13" + builder-util-runtime "9.3.2" chalk "^4.1.2" form-data "^4.0.0" fs-extra "^10.1.0" @@ -1250,12 +1202,12 @@ electron-store@^8.2.0: conf "^10.2.0" type-fest "^2.17.0" -electron-updater@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-6.4.0.tgz#f413e5d1cb4fadde451eb7daa585ddb6332e2409" - integrity sha512-E2fqL3GrVaXGZm2w95s4kJuPIF633pi5GhEy1/ReOHjDW9h/C0mZ1LXcLq0LsyQ4vyVj9UsdRb4E+Zy/d7RKUw== +electron-updater@^6.6.3: + version "6.6.3" + resolved "https://registry.yarnpkg.com/electron-updater/-/electron-updater-6.6.3.tgz#a1f53671ffbb08a475d495d48f0c0d971e665d5d" + integrity sha512-i448/SwMtqxy5wqAcXScnWjiFxZp+hmWA2jZCmojcdfodEGhi/DWTdRP01mE3lCILb8hmdE28SBaHf1oQW3+kw== dependencies: - builder-util-runtime "9.3.0" + builder-util-runtime "9.3.2" fs-extra "^10.1.0" js-yaml "^4.1.0" lazy-val "^1.0.5" @@ -1264,13 +1216,13 @@ electron-updater@^6.4.0: semver "^7.6.3" tiny-typed-emitter "^2.1.0" -electron@^34.3.4: - version "34.3.4" - resolved "https://registry.yarnpkg.com/electron/-/electron-34.3.4.tgz#3acbcb5fe1aabfa926dddce23de28da9e6023cc5" - integrity sha512-bIsjBh5EN229K4orJpVfjLb7JEoCYkUVg3tS981E1elEjvhBITqwm+K1j9goEqMIlxqYWgogREYpSZRQ+aLWgQ== +electron@^36.1.0: + version "36.1.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-36.1.0.tgz#9919b77e61cd1400acc6dd24f9db8451fba5f8eb" + integrity sha512-gnp3BnbKdGsVc7cm1qlEaZc8pJsR08mIs8H/yTo8gHEtFkGGJbDTVZOYNAfbQlL0aXh+ozv+CnyiNeDNkT1Upg== dependencies: "@electron/get" "^2.0.0" - "@types/node" "^20.9.0" + "@types/node" "^22.7.7" extract-zip "^2.0.1" emoji-regex@^8.0.0: @@ -1342,12 +1294,7 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb" - integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== - -eslint-visitor-keys@^4.2.0: +eslint-visitor-keys@^4.0.0, eslint-visitor-keys@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== @@ -1621,11 +1568,6 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" @@ -1664,7 +1606,7 @@ git-hooks-list@^3.0.0: resolved "https://registry.yarnpkg.com/git-hooks-list/-/git-hooks-list-3.1.0.tgz#386dc531dcc17474cf094743ff30987a3d3e70fc" integrity sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA== -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -1942,13 +1884,6 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - is-ci@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" @@ -1973,7 +1908,7 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -2185,10 +2120,10 @@ lru-cache@^10.2.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== -lru-cache@^11.0.2: - version "11.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.2.tgz#fbd8e7cf8211f5e7e5d91905c415a3f55755ca39" - integrity sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA== +lru-cache@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.1.0.tgz#afafb060607108132dbc1cf8ae661afb69486117" + integrity sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A== lru-cache@^6.0.0: version "6.0.0" @@ -2459,11 +2394,6 @@ nopt@^6.0.0: dependencies: abbrev "^1.0.0" -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - normalize-url@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" @@ -2633,7 +2563,7 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: +picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -2650,7 +2580,7 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -plist@^3.0.4, plist@^3.0.5, plist@^3.1.0: +plist@3.1.0, plist@^3.0.4, plist@^3.0.5, plist@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9" integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ== @@ -2744,12 +2674,10 @@ readable-stream@^3.0.2, readable-stream@^3.4.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== rechoir@^0.6.2: version "0.6.2" @@ -2886,6 +2814,11 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== +semver@^5.5.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + semver@^6.2.0: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" @@ -3133,6 +3066,13 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +tiny-async-pool@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz#c013e1b369095e7005db5595f95e646cca6ef8a5" + integrity sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA== + dependencies: + semver "^5.5.0" + tiny-typed-emitter@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5" @@ -3209,29 +3149,24 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript-eslint@^8.26.1: - version "8.26.1" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.26.1.tgz#d17a638a7543bc535157b83cdf5876513c71493b" - integrity sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg== +typescript-eslint@^8.31.1: + version "8.31.1" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.31.1.tgz#b77ab1e48ced2daab9225ff94bab54391a4af69b" + integrity sha512-j6DsEotD/fH39qKzXTQRwYYWlt7D+0HmfpOK+DVhwJOFLcdmn92hq3mBb7HlKJHbjjI/gTOqEcc9d6JfpFf/VA== dependencies: - "@typescript-eslint/eslint-plugin" "8.26.1" - "@typescript-eslint/parser" "8.26.1" - "@typescript-eslint/utils" "8.26.1" + "@typescript-eslint/eslint-plugin" "8.31.1" + "@typescript-eslint/parser" "8.31.1" + "@typescript-eslint/utils" "8.31.1" -typescript@^5.4.3: - version "5.5.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" - integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== +typescript@^5.4.3, typescript@^5.8.3: + version "5.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== -typescript@^5.8.2: - version "5.8.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.2.tgz#8170b3702f74b79db2e5a96207c15e65807999e4" - integrity sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ== - -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== unique-filename@^2.0.0: version "2.0.1" diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts index 5999d84b77..43ee4fe192 100644 --- a/docs/docs/.vitepress/sidebar.ts +++ b/docs/docs/.vitepress/sidebar.ts @@ -182,6 +182,7 @@ export const sidebar = [ text: "Auth", items: [ { text: "Introduction", link: "/auth/" }, + { text: "Features", link: "/auth/features/" }, { text: "FAQ", collapsed: true, @@ -223,6 +224,7 @@ export const sidebar = [ }, { text: "Troubleshooting", + collapsed: true, items: [ { text: "Windows login", @@ -238,58 +240,91 @@ export const sidebar = [ items: [ { text: "Getting started", link: "/self-hosting/" }, { - text: "System requirements", - link: "/self-hosting/guides/system-requirements", + text: "Connecting to custom server", + link: "/self-hosting/guides/custom-server/", + }, + { + text: "Creating accounts", + link: "/self-hosting/creating-accounts", + }, + { + text: "Configuring your server", + link: "/self-hosting/museum", + }, + { + text: "Configuring S3", + link: "/self-hosting/guides/configuring-s3", + }, + { + text: "Reverse proxy", + link: "/self-hosting/reverse-proxy", }, { text: "Guides", + collapsed: true, items: [ { text: "Introduction", link: "/self-hosting/guides/" }, - { - text: "Connect to custom server", - link: "/self-hosting/guides/custom-server/", - }, - { - text: "Hosting the web app", - link: "/self-hosting/guides/web-app", - }, - { - text: "Configuring S3", - link: "/self-hosting/guides/configuring-s3", - }, - { - text: "Hosting Ente with external S3 (Community)", - link: "/self-hosting/guides/external-s3", - }, - { - text: "DB migration", - link: "/self-hosting/guides/db-migration", - }, - { - text: "Hosting Ente without Docker", - link: "/self-hosting/guides/standalone-ente", - }, - { - text: "Ente via Tailscale (Community)", - link: "/self-hosting/guides/Tailscale.md", - }, - { - text: "Configure CLI for Self Hosted Instance", - link: "/self-hosting/guides/selfhost-cli", - }, { text: "Administering your server", link: "/self-hosting/guides/admin", }, - { - text: "Mobile build", - link: "/self-hosting/guides/mobile-build", + text: "Configuring CLI for your instance", + link: "/self-hosting/guides/selfhost-cli", + }, + { + text: "Running Ente from source", + link: "/self-hosting/guides/from-source", + }, + { + text: "Running Ente without Docker", + link: "/self-hosting/guides/standalone-ente", }, ], }, + { + text: "Troubleshooting", + collapsed: true, + items: [ + { + text: "General", + link: "/self-hosting/troubleshooting/misc", + }, + { + text: "Bucket CORS", + link: '/self-hosting/troubleshooting/bucket-cors' + }, + { + text: "Uploads", + link: "/self-hosting/troubleshooting/uploads", + }, + { + text: "Docker / quickstart", + link: "/self-hosting/troubleshooting/docker", + }, + { + text: "Ente CLI secrets", + link: "/self-hosting/troubleshooting/keyring", + }, + ], + }, + { + text: "Community Guides", + collapsed: true, + items :[ + { + text: "Ente via Tailscale", + link: "/self-hosting/guides/Tailscale", + }, + { + text: "Ente with External S3", + link: "/self-hosting/guides/external-s3", + } + ] + }, { text: "FAQ", + collapsed: true, items: [ { text: "General", link: "/self-hosting/faq/" }, { @@ -306,27 +341,6 @@ export const sidebar = [ }, ], }, - { - text: "Troubleshooting", - items: [ - { - text: "Uploads", - link: "/self-hosting/troubleshooting/uploads", - }, - { - text: "Docker", - link: "/self-hosting/troubleshooting/docker", - }, - { - text: "Yarn", - link: "/self-hosting/troubleshooting/yarn", - }, - { - text: "Ente CLI Secrets", - link: "/self-hosting/troubleshooting/keyring", - }, - ], - }, ], }, { diff --git a/docs/docs/auth/features/index.md b/docs/docs/auth/features/index.md new file mode 100644 index 0000000000..ddee2bd2fb --- /dev/null +++ b/docs/docs/auth/features/index.md @@ -0,0 +1,139 @@ +--- +title: Features - Auth +description: Features available in Ente Auth +--- + +# Features + +This page outlines the key features available in Ente Auth. + +### Icons + +Ente Auth supports the icon pack provided by +[simple-icons](https://github.com/simple-icons/simple-icons). If an icon you +need is missing, please refer to the +[docs/adding-icons](https://github.com/ente-io/ente/blob/main/auth/docs/adding-icons.md) +guide for instructions on how to contribute. + +### Search + +Quickly find your codes by searching based on issuer or account name. You can +also configure the app to focus the search bar automatically on app start by +going to **Settings → General → Focus search on app start**. + +### Tags + +Organize and filter your codes with ease using tags. + +- **Creating a Tag:** When adding or editing a code, tap the orange (+) icon to + create a new tag. +- **Adding an existing Tag:** When adding or editing a code, select the desired + tag from the list. + +### Pinning + +Highlight your frequently used services by pinning them to the top of your code +list. To pin a code, long-press (mobile) or right-click (desktop) the code and +select "Pin". + +### Notes + +Add additional information to your codes using notes. Notes can be added during +the process of creating or modifying a code. + +### Sharing + +Securely share codes temporarily with others. + +- Long-press (mobile) or right-click (desktop) on a code and choose "Share". +- Select a duration for the shared link: 2 minutes, 5 minutes, or 10 minutes. +- This generates a unique, time-limited link. Recipients can view the codes for + the specified duration without gaining access to the underlying secret key. + After the link expires, the recipients will no longer be able to view new + codes. + +### Custom sorting + +Customize the order in which your codes are displayed. Ente Auth provides +several sorting options: + +- Issuer name +- Account name +- Frequently used +- Recently used +- Manual (custom drag-and-drop order) + +Access the sort menu in the top-right corner (next to the search icon) to change +your sorting preference. + +### Offline mode + +Ente Auth can be used entirely offline. Choose "Use without backups" on the +login screen. In this mode, your codes are stored locally on your device. + +Unlike when using an account, data is not synced or backed up to the cloud. You +are responsible for manually backing up your codes. + +### Display options + +Customize how your codes are displayed for optimal usability. + +- **Show large icons:** Display codes with larger icons for enhanced visibility. +- **Compact mode:** Switch to a more compact layout to view more codes on the + screen simultaneously. +- **Hide codes:** Hide the actual code values for extra privacy. Double-tap a + code to reveal it when needed. + +### App lock + +Add an additional layer of protection using the app lock. Choose from the +following lock methods: + +- **Device lock:** Use the existing lock configured on your device (e.g., Face + ID, Touch ID, system password). +- **PIN lock:** Set up a 4-digit PIN code to unlock the app. +- **Password lock:** Set up a password to unlock the app. + +Additionally, configure **Auto lock** to automatically lock the app after a +specified period of time (options: Immediately, 5s, 15s, 1m, 5m, 30m). + +### Import / Export + +Ente Auth offers various import and export options for your codes. + +- **Export:** Export your codes in plain text, as an encrypted file, or + automatically via the CLI. +- **Import:** Import codes from various other authentication apps. + +For detailed instructions, refer to the +[migration guides](../migration-guides/). + +### Deduplicate codes + +If you import codes and end up with duplicates, you can easily remove them. Go +to **Settings → Data → Duplicate codes** to find and remove duplicate codes. + +### Trash + +Manage unwanted codes by moving them to the Trash. The Trash is not cleared +automatically, giving you the flexibility to restore or permanently delete codes +at any time. + +- **Trashing a code:** Long-press (mobile) or right-click (desktop) on a code + and select "Trash" to move it to the Trash. +- **Viewing trashed codes:** If you have trashed codes, you can view them by + selecting the Trash tag. +- **Managing trashed codes:** In the Trash view, you can either permanently + delete codes or restore them back to your main list. + +### Scan QR + +Easily add or share entries using QR codes: + +- **Add by scanning (mobile):** On mobile, you can add a new entry by scanning + the QR code provided by the service. This quickly adds the entry to Ente Auth. +- **Show entry as QR code:** On all apps, you can long-press (mobile) or + right-click (desktop) a code and select "QR". This allows you to easily share + the complete entry (including the secret) with others by letting them scan the + displayed QR code. This can also be used to easily add the same entry to + another authenticatior app or service. diff --git a/docs/docs/auth/migration-guides/authy/index.md b/docs/docs/auth/migration-guides/authy/index.md index 30b8c550cf..27baa97ab1 100644 --- a/docs/docs/auth/migration-guides/authy/index.md +++ b/docs/docs/auth/migration-guides/authy/index.md @@ -10,8 +10,8 @@ A guide written by Green, an ente.io lover > [!WARNING] > > Authy has dropped all support for its desktop apps. It is no longer possible -> to export data from Authy using methods 1 and 2. You will either need a rooted -> android phone or you will need to reconfigure 2FA for each of your accounts. +> to export data from Authy using methods 1 and 2. You will need either an iOS device +> and computer (method 4) or a rooted Android phone (method 3) to follow this guide. --- @@ -202,7 +202,15 @@ This uses the tool [Aegis Authenticator](https://getaegis.app/) from 6. Then export the codes from Aegis Authenticator to `json` or `txt` using the "Export to file" option in the "Import & Export" menu. -## Importing to Ente Authenticator (Method 1, method 2.1) +## Method 4: Authy-iOS-MiTM + +**Who should use this?** Technical iOS users of Authy that cannot export their tokens with methods 1 or 2 (due to those methods being patched) or method 3 (due to that method requiring a rooted Android device). + +This method works by intercepting the data the Authy app receives while logging in for the first time, which contains your encrypted authenticator tokens. After the encrypted authenticator tokens are dumped, you can decrypt them using your backup password and convert them to an Ente token file. + +For an up-to-date guide of how to retrieve the encrypted authenticator tokens and decrypt them, please see [Authy-iOS-MiTM](https://github.com/AlexTech01/Authy-iOS-MiTM). To convert the `decrypted_tokens.json` file from that guide into a format Ente Authenticator can recognize, use [this](https://gist.github.com/gboudreau/94bb0c11a6209c82418d01a59d958c93?permalink_comment_id=5317087#gistcomment-5317087) Python script. Once you have the `ente_auth_import.plain` file from that script, transfer it to your device and follow the instructions below to import it into Ente Authenticator. + +## Importing to Ente Authenticator (Method 1, method 2.1, method 4) 1. Copy the TXT file to one of your devices with Ente Authenticator. 2. Log in to your account (if you haven't already), or press "Use without diff --git a/docs/docs/photos/faq/export.md b/docs/docs/photos/faq/export.md index 12e203061d..16879ee327 100644 --- a/docs/docs/photos/faq/export.md +++ b/docs/docs/photos/faq/export.md @@ -7,10 +7,9 @@ description: Frequently asked questions about keeping extra backups of your data ## How can I backup my data in a local drive outside Ente? -Yes! You can use our CLI tool or our desktop app to set up exports of your data -to your local drive. This way, you can use Ente in your day to day use, but will -have an additional guarantee that a copy of your original photos and videos are -always available in normal directories and files. +You can use our CLI tool or our desktop app to set up exports of your data +to your local drive. This way, you can use Ente in your day to day use, with an additional guarantee that a copy of your original photos and videos are +always available on your machine. - You can use [Ente's CLI](https://github.com/ente-io/ente/tree/main/cli#export) to export your data in a cron job to a location of your choice. The exports diff --git a/docs/docs/photos/features/family-plans.md b/docs/docs/photos/features/family-plans.md index 080c3362d8..711b9e3094 100644 --- a/docs/docs/photos/features/family-plans.md +++ b/docs/docs/photos/features/family-plans.md @@ -24,7 +24,7 @@ In brief, ## Storage Limits -If you're an admin of a family, you will be able to set storage limits for the +If you're an admin of a family, you will be able to set storage limits for the members in your family plan. In brief, @@ -38,15 +38,5 @@ In brief, - If the admin has set a limit for any user, that limit value will be prefilled in the input box. -- Incase, if you want to remove any storage limit from a members account, you +- If you want to remove any storage limit from a members account, you can click on the "Remove Limit" and they can upload photos without any limit. - -## FAQ - -- **Can you assign a storage quota for each individual member in the family - plan?** - - Unfortunately, at this moment, assigning a storage quota for each individual - member in the family plan is not supported. For updates on this feature - request, please follow - [this thread](https://github.com/ente-io/ente/discussions/857). diff --git a/docs/docs/photos/features/trash.md b/docs/docs/photos/features/trash.md index 84a685279b..b60226a671 100644 --- a/docs/docs/photos/features/trash.md +++ b/docs/docs/photos/features/trash.md @@ -6,7 +6,7 @@ description: Deleting items and trash # Trash Whenever you delete an item from Ente, it is moved to Trash. These items will be -automatically deleted from Trash after 30 days. You can manaully select photos +automatically deleted from Trash after 30 days. You can manually select photos to permanently delete or completely empty the trash if you wish. Items in trash are included in your used storage calculation. diff --git a/docs/docs/photos/troubleshooting/nas.md b/docs/docs/photos/troubleshooting/nas.md index 262d4c758d..c84463ce63 100644 --- a/docs/docs/photos/troubleshooting/nas.md +++ b/docs/docs/photos/troubleshooting/nas.md @@ -14,9 +14,21 @@ directly stream chunks of Google Takeout zips that are stored on network drives. In particular, the folder watch functionality suffers a lot since the app needs access to file system events to detect changes to the users files so that they -can be uploaded whenever there are changes. +can be uploaded whenever there are changes. Network drives are less reliable in +providing these file change events correctly. Since are high chances of the user having a subpar experience, we request customers to avoid using the desktop app directly with network attached storage and instead temporarily copy the files to their local storage for uploads, and avoid watching folders that live on a network drive. + +## Exporting to UNC paths + +Generally, exports are likely to work better than imports, since the interaction +with the file system is relatively simpler (Note that the app still needs to +scan the folder to find existing files, esp. if the continuous export option is +enabled). + +A special case is when exporting to a UNC path. In this case, the file +separators will not work as expected and the export will not start. As a +workaround, you can map your UNC path to a network drive and use that instead. diff --git a/docs/docs/public/cloudflare.png b/docs/docs/public/cloudflare.png new file mode 100644 index 0000000000..fe3d379dd4 Binary files /dev/null and b/docs/docs/public/cloudflare.png differ diff --git a/docs/docs/public/endpoint.png b/docs/docs/public/endpoint.png new file mode 100644 index 0000000000..ddd2c3bd5d Binary files /dev/null and b/docs/docs/public/endpoint.png differ diff --git a/docs/docs/public/otp.png b/docs/docs/public/otp.png new file mode 100644 index 0000000000..a4591c7672 Binary files /dev/null and b/docs/docs/public/otp.png differ diff --git a/docs/docs/public/quickstart.png b/docs/docs/public/quickstart.png new file mode 100644 index 0000000000..c70fe513ab Binary files /dev/null and b/docs/docs/public/quickstart.png differ diff --git a/docs/docs/public/web-app.webp b/docs/docs/public/web-app.webp new file mode 100644 index 0000000000..3db4ccf683 Binary files /dev/null and b/docs/docs/public/web-app.webp differ diff --git a/docs/docs/self-hosting/creating-accounts.md b/docs/docs/self-hosting/creating-accounts.md new file mode 100644 index 0000000000..5c3a53d3a3 --- /dev/null +++ b/docs/docs/self-hosting/creating-accounts.md @@ -0,0 +1,27 @@ +--- +title: Creating accounts +description: Creating accounts on your deployment +--- + +# Creating accounts + +Once Ente is up and running, the Ente Photos web app will be accessible on +`http://localhost:3000`. Open this URL in your browser and proceed with creating +an account. + +The default API endpoint for museum will be `localhost:8080`. + +![endpoint](/endpoint.png) + +To complete your account registration you will need to enter a 6-digit +verification code. + +This code can be found in the server logs, which should already be shown in your +quickstart terminal. Alternatively, you can open the server logs with the +following command from inside the `my-ente` folder: + +```sh +sudo docker compose logs +``` + +![otp](/otp.png) diff --git a/docs/docs/self-hosting/faq/otp.md b/docs/docs/self-hosting/faq/otp.md index 5a9b8d0f2d..0a85b60717 100644 --- a/docs/docs/self-hosting/faq/otp.md +++ b/docs/docs/self-hosting/faq/otp.md @@ -12,6 +12,19 @@ verification code by: - Reading it from the DB (otts table) +The easiest option when getting started is to look for it in the server (museum) +logs. If you're already running the docker compose cluster using the quickstart +script, you should be already seeing the logs in your terminal. Otherwise you +can go to the folder (e.g. `my-ente`) where your `compose.yaml` is, then run +`docker compose logs museum --follow`. Once you can see the logs, look for a +line like: + +``` +... Skipping sending email to email@example.com: *Verification code: 112089* +``` + +That is the verification code. + > [!TIP] > > You can also configure your instance to send out emails so that you can get diff --git a/docs/docs/self-hosting/guides/configuring-s3.md b/docs/docs/self-hosting/guides/configuring-s3.md index 45076c91fc..f4095db2eb 100644 --- a/docs/docs/self-hosting/guides/configuring-s3.md +++ b/docs/docs/self-hosting/guides/configuring-s3.md @@ -5,23 +5,26 @@ description: from outside localhost --- -# Components of the Architecture +# Architecture ![Client, Museum, S3](/client-museum-s3.png) -There are three components involved in uploading: +There are three components involved in uploading a file: 1. The client (e.g. the web app or the mobile app) 2. Ente's server (museum) -3. The S3-compatible object storage (e.g. minio in the default starter) +3. The S3-compatible object storage (e.g. MinIO in the default starter) For the uploads to work, all three of them need to be able to reach each other. -This is because the client uploads directly to the object storage. The -interaction goes something like this: +This is because the client uploads directly to the object storage. -1. Client wants to upload, it asks museum where it should upload to. -2. Museum creates pre-signed URLs for the S3 bucket that was configured. -3. Client directly uploads to the S3 buckets these URLs. +A file upload flows as follows: + +1. Client that wants to upload a file asks museum where it should upload the + file to +2. museum creates pre-signed URLs for the S3 bucket that was configured +3. Client directly uploads to the S3 buckets these URLs +4. Client finally informs museum that a file has been uploaded to this URL The upshot of this is that _both_ the client and museum should be able to reach your S3 bucket. @@ -30,10 +33,10 @@ your S3 bucket. The URL for the S3 bucket is configured in [scripts/compose/credentials.yaml](https://github.com/ente-io/ente/blob/main/server/scripts/compose/credentials.yaml#L10). -You can edit this file directly when testing, though it is just simpler and more -robust to create a `museum.yaml` (in the same folder as the Docker compose file) -and put your custom configuration there (in your case, you can put an entire -`s3` config object in your `museum.yaml`). + +You can edit this file directly while testing, though it is more robust to +create a `museum.yaml` (in the same folder as the Docker compose file) and to +setup your custom configuration there. > [!TIP] > For more details about these configuration objects, see the documentation for @@ -42,29 +45,32 @@ and put your custom configuration there (in your case, you can put an entire By default, you only need to configure the endpoint for the first bucket. -The docker compose file is shipped with MinIO as the Self Hosted S3 Compatible Storage. -By default, MinIO server is served on `localhost:3200` and the MinIO UI on -`localhost:3201`. -For example, in a localhost network situation, the way this -connection works is, Museum (`1`) and MinIO (`2`) run on the same docker network and -the web app (`3`) which will also be hosted on the localhost. This enables all the -three components of the setup being able to communicate with each other seamlessly. +The Docker compose file is shipped with MinIO as the self hosted S3 compatible +storage. By default, MinIO server is served on `localhost:3200` and the MinIO UI +on `localhost:3201`. + +For example, in a localhost network situation, the way this connection works is, +museum (`1`) and MinIO (`2`) run on the same Docker network and the web app +(`3`) will also be hosted on your localhost. This enables all the three +components of the setup to communicate with each other seamlessly. The same principle applies if you're deploying to your custom domain. ## Replication ![Replication](/replication.png) -

Community contributed diagram of Ente's Replication Process

+

Community contributed diagram of Ente's replication process

> [!IMPORTANT] -> As of now, Replication works only if all the 3 storage type -> needs are fulfilled (1 Hot, 1 Cold and 1 Glacier Storage). +> +> As of now, replication works only if all the 3 storage type needs are +> fulfilled (1 hot, 1 cold and 1 glacier storage). > > [Reference](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970) -If you're wondering why there are 3 buckets on MinIO UI - that's because our -production instance uses these to perform [replication](https://ente.io/reliability/). +If you're wondering why there are 3 buckets on the MinIO UI - that's because our +production instance uses these to perform +[replication](https://ente.io/reliability/). If you're also wondering about why the bucket names are specifically what they are, it's because that is exactly what we are using on our production instance. @@ -72,10 +78,10 @@ We use `b2-eu-cen` as hot, `wasabi-eu-central-2-v3` as cold (also the secondary and `scw-eu-fr-v3` as glacier storage. As of now, all of this is hardcoded. Hence, the same hardcoded configuration is applied when you self host Ente. -In a Self hosted Ente Instance replication is turned off by default. -When replication is turned off, only the first bucket (`b2-eu-cen`) is used, -and the other two are ignored. Only the names here are specifically fixed, but -in the configuration body you can put any other keys. It does not have any relation +In a self hosted Ente instance replication is turned off by default. When +replication is turned off, only the first bucket (`b2-eu-cen`) is used, and the +other two are ignored. Only the names here are specifically fixed, but in the +configuration body you can put any other keys. It does not have any relation with `b2`, `wasabi` or even `scaleway`. Use the `s3.hot_storage.primary` option if you'd like to set one of the other @@ -85,23 +91,23 @@ predefined buckets as the primary bucket. > [!NOTE] > -> If you need to configure SSL, for example if you're running over the internet, -> you'll need to turn off `s3.are_local_buckets` (which disables SSL in the -> default starter compose template). +> If you need to configure SSL, you'll need to turn off `s3.are_local_buckets` +> (which disables SSL in the default starter compose template). > Disabling `s3.are_local_buckets` also switches to the subdomain style URLs for -the buckets. However, not all S3 providers support these, in particular, minio -does not work with these in default configuration. So in such cases you'll -also need to then enable `s3.use_path_style_urls`. +the buckets. However, not all S3 providers support these. In particular, MinIO +does not work with these in default configuration. So in such cases you'll also +need to enable `s3.use_path_style_urls`. ## Summary Set the S3 bucket `endpoint` in `credentials.yaml` to a `yourserverip:3200` or -some such IP/hostname that accessible from both where you are running the Ente -clients (e.g. the mobile app) and also from within the Docker compose cluster. +some such IP / hostname that is accessible from both where you are running the +Ente clients (e.g. the mobile app) and also from within the Docker compose +cluster. -#### Example +### Example An example `museum.yaml` when you're trying to connect to museum running on your computer from your phone on the same WiFi network: @@ -115,51 +121,4 @@ s3: endpoint: http://:3200 region: eu-central-2 bucket: b2-eu-cen -``` - -## FAE (Frequently Answered Errors) - -Here are some Frequently Answered Errors from the Community Chat with the reasoning -for a particular error and its potential fix. - -In most situations, the problem turns out to be some minute mistakes or misconfigurations -on the users end and that turns out to be the bottleneck of the whole problem. -Please make sure to `reverse_proxy` Museum to a domain as well as check your S3 -Credentials and whole config for any minor mis-configurations. - -It is also suggested that the user setups Bucket CORS on MinIO or any external -S3 Bucket they are connecting to. To setup Bucket CORS, help yourself by upload -[this](https://help.ente.io/self-hosting/guides/external-s3#_5-fix-potential-cors-issue-with-your-bucket). - -### 403 Forbidden - -If museum (`2`) is able to make a network connection to your S3 bucket (`3`) but -uploads are still failing, it could be a credentials or permissions issue. A -telltale sign of this is that in the museum logs you can see `403 Forbidden` -errors about it not able to find the size of a file even though the -corresponding object exists in the S3 bucket. - -To fix these, you should ensure the following: - -1. The bucket CORS rules do not allow museum to access these objects. - - For uploading files from the browser, you will need to currently set - allowedOrigins to "\*", and allow the "X-Auth-Token", "X-Client-Package" - headers configuration too. - [Here is an example of a working configuration](https://github.com/ente-io/ente/discussions/1764#discussioncomment-9478204). - -2. The credentials are not being picked up (you might be setting the correct - creds, but not in the place where museum picks them from). - -### Mismatch in File Size - -The "Mismatch in File Size" error mostly occurs in a situation where the client (`1`) -is re-uploading a file which is already in the bucket with a different File Size. The -reason for re-upload could be anything including Network issue, sudden killing of app -before the upload is complete and etc. - -This is also one of Museums (`2`) Validation Checks for the size of file being -re-uploaded from the client to the size of the file which is already -uploaded to the S3 Bucket. - -In most case, it is very unlikely that this error could be a cause of some mistake in -the configuration or Browser/Bucket CORS. +``` \ No newline at end of file diff --git a/docs/docs/self-hosting/guides/custom-server/index.md b/docs/docs/self-hosting/guides/custom-server/index.md index 42577e7eae..86060ba909 100644 --- a/docs/docs/self-hosting/guides/custom-server/index.md +++ b/docs/docs/self-hosting/guides/custom-server/index.md @@ -8,6 +8,8 @@ description: Using a custom self-hosted server with Ente client apps and CLI You can modify various Ente client apps and CLI to connect to a self hosted custom server endpoint. +[[toc]] + ## Mobile The pre-built Ente apps from GitHub / App Store / Play Store / F-Droid can be @@ -77,3 +79,37 @@ endpoint: (Another [example](https://github.com/ente-io/ente/blob/main/cli/config.yaml.example)) + +## Find the hostname of your server + +If you want to access your museum within your own network, you can use the +`hostname` command to find a addressable local network hostname or IP for your +computer, and then use it by suffixing it with the port number. + +First, run + +```sh +hostname +``` + +The result will look something like this + +```sh +my-computer.local +``` + +You will need to replace the server endpoint with an address that uses your +server's hostname and the port number. Here's an example: + +``` +http://my-computer.local:8080 +``` + +Note that this will only work within your network. To access it from outside the +network, you need to use the public IP or hostname. + +> [!TIP] +> +> If you're having trouble uploading from your mobile app, it is likely that +> museum is not able to connect to your S3 storage. See the [Configuring +> S3](/self-hosting/guides/configuring-s3) guide for more details. diff --git a/docs/docs/self-hosting/guides/external-s3.md b/docs/docs/self-hosting/guides/external-s3.md index 610d6e1c3d..0a919092c0 100644 --- a/docs/docs/self-hosting/guides/external-s3.md +++ b/docs/docs/self-hosting/guides/external-s3.md @@ -250,64 +250,6 @@ docker compose exec -i postgres psql -U pguser -d ente_db -c "INSERT INTO storag After few reloads, you should see 1 To of quota. -## 5. Fix potential CORS issue with your bucket - -### For AWS S3 - -If you cannot upload a photo due to a CORS issue, you need to fix the CORS -configuration of your bucket. - -Create a `cors.json` file with the following content: - -```json -{ - "CORSRules": [ - { - "AllowedOrigins": ["*"], - "AllowedHeaders": ["*"], - "AllowedMethods": ["GET", "HEAD", "POST", "PUT", "DELETE"], - "MaxAgeSeconds": 3000, - "ExposeHeaders": ["Etag"] - } - ] -} -``` - -You may want to change the `AllowedOrigins` to a more restrictive value. - -If you are using AWS for S3, you can execute the below command to get rid of -CORS. Make sure to enter the right path for the `cors.json` file. - -```bash -aws s3api put-bucket-cors --bucket YOUR_S3_BUCKET --cors-configuration /path/to/cors.json -``` - -### For Self-hosted Minio Instance - -> Important: MinIO does not take JSON CORS file as the input, instead you will -> have to build a CORS.xml file or just convert the above `cors.json` to XML. - -A minor requirement here is the tool `mc` for managing buckets via command line -interface. Checkout the `mc set alias` document to configure alias for your -instance and bucket. After this you will be prompted for your AccessKey and -Secret, which is your username and password, go ahead and enter that. - -```sh -mc cors set // set "cors_allowed_origin=*" -``` - -You can create also `.csv` file and dump the list of origins you would like to -allow and replace the `*` with `path` to the CSV file. - -Now, uploads should be working fine. - ## Related Some other users have also shared their setups. @@ -315,3 +257,5 @@ Some other users have also shared their setups. - [Using Traefik](https://github.com/ente-io/ente/pull/3663) - [Building custom images from source (Linux)](https://github.com/ente-io/ente/discussions/3778) + +- [Troubleshooting Bucket CORS](/self-hosting/troubleshooting/bucket-cors) diff --git a/docs/docs/self-hosting/guides/from-source.md b/docs/docs/self-hosting/guides/from-source.md new file mode 100644 index 0000000000..df3ec7e5fb --- /dev/null +++ b/docs/docs/self-hosting/guides/from-source.md @@ -0,0 +1,228 @@ +--- +title: Ente from Source +description: Getting started self hosting Ente Photos and/or Ente Auth +--- + + +# Ente from Source + +> [!WARNING] NOTE +> The below documentation will cover instructions about self-hosting the web app manually. If you +> want to deploy Ente hassle free, use the [one line](https://ente.io/blog/self-hosting-quickstart/) +> command to setup Ente. This guide might be deprecated in the near future. + +## Installing Docker + +Refer to +[How to install Docker from the APT repository](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) +for detailed instructions. + +## Start the server + +```sh +git clone https://github.com/ente-io/ente +cd ente/server +docker compose up --build +``` + +> [!TIP] +> +> You can also use a pre-built Docker image from `ghcr.io/ente-io/server` +> ([More info](https://github.com/ente-io/ente/blob/main/server/docs/docker.md)) + +Install the necessary dependencies for running the web client + +```sh +# installing npm and yarn + +sudo apt update +sudo apt install nodejs npm +sudo npm install -g yarn // to install yarn globally +``` + +Then in a separate terminal, you can run (e.g) the web client + +```sh +cd ente/web +git submodule update --init --recursive +yarn install +NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev +``` + +That's about it. If you open http://localhost:3000, you will be able to create +an account on a Ente Photos web app running on your machine, and this web app +will be connecting to the server running on your local machine at +`localhost:8080`. + +For the mobile apps, you don't even need to build, and can install normal Ente +apps and configure them to use your +[custom self-hosted server](/self-hosting/guides/custom-server/). + +> If you want to build the mobile apps from source, see the instructions +> [here](/self-hosting/guides/mobile-build). + +## Web app with Docker and Compose + +The instructoins in previous section were just a temporary way to run the web app locally. +To run the web apps as services, the user has to build a docker image manually. + +> [!IMPORTANT] +> +> Recurring changes might be made by the team or from community if more +> improvements can be made so that we are able to build a full-fledged docker +> image. + +```dockerfile +FROM node:20-bookworm-slim as builder + +WORKDIR ./ente + +COPY . . +COPY apps/ . + +# Will help default to yarn versoin 1.22.22 +RUN corepack enable + +# Endpoint for Ente Server +ENV NEXT_PUBLIC_ENTE_ENDPOINT=https://your-ente-endpoint.com +ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://your-albums-endpoint.com + +RUN yarn cache clean +RUN yarn install --network-timeout 1000000000 +RUN yarn build:photos && yarn build:accounts && yarn build:auth && yarn build:cast + +FROM node:20-bookworm-slim + +WORKDIR /app + +COPY --from=builder /ente/apps/photos/out /app/photos +COPY --from=builder /ente/apps/accounts/out /app/accounts +COPY --from=builder /ente/apps/auth/out /app/auth +COPY --from=builder /ente/apps/cast/out /app/cast + +RUN npm install -g serve + +ENV PHOTOS=3000 +EXPOSE ${PHOTOS} + +ENV ACCOUNTS=3001 +EXPOSE ${ACCOUNTS} + +ENV AUTH=3002 +EXPOSE ${AUTH} + +ENV CAST=3003 +EXPOSE ${CAST} + +# The albums app does not have navigable pages on it, but the +# port will be exposed in-order to self up the albums endpoint +# `apps.public-albums` in museum.yaml configuration file. +ENV ALBUMS=3004 +EXPOSE ${ALBUMS} + +CMD ["sh", "-c", "serve /app/photos -l tcp://0.0.0.0:${PHOTOS} & serve /app/accounts -l tcp://0.0.0.0:${ACCOUNTS} & serve /app/auth -l tcp://0.0.0.0:${AUTH} & serve /app/cast -l tcp://0.0.0.0:${CAST}"] +``` + +The above is a multi-stage Dockerfile which creates a production ready static +output of the 4 apps (Photos, Accounts, Auth and Cast) and serves the static +content with Caddy. + +Looking at 2 different node base-images doing different tasks in the same +Dockerfile would not make sense, but the Dockerfile is divided into two just to +improve the build efficiency as building this Dockerfile will arguably take more +time. + +Lets build a Docker image from the above Dockerfile. Copy and paste the above +Dockerfile contents in the root of your web directory which is inside +`ente/web`. Execute the below command to create an image from this Dockerfile. + +```sh +# Build the image +docker build -t : --no-cache --progress plain . +``` + +You can always edit the Dockerfile and remove the steps for apps which you do +not intend to install on your system (like auth or cast) and opt out of those. + +Regarding Albums App, take a note that they are not apps with navigable pages, +if accessed on the web-browser they will simply redirect to ente.web.io. + +## compose.yaml + +Moving ahead, we need to paste the below contents into the compose.yaml inside +`ente/server/compose.yaml` under the services section. + +```yaml +ente-web: + image: # name of the image you used while building + ports: + - 3000:3000 + - 3001:3001 + - 3002:3002 + - 3003:3003 + - 3004:3004 + environment: + - NODE_ENV=development + restart: always +``` + +Now, we're good to go. All we are left to do now is start the containers. + +```sh +docker compose up -d # --build + +# Accessing the logs +docker compose logs +``` + +## Configure App Endpoints + +> [!NOTE] +> Previously, this was dependent on the env variables `NEXT_ENTE_PUBLIC_ACCOUNTS_ENDPOINT` +> and etc. Please check the below documentation to update your setup configurations + +You can configure the web endpoints for the other apps including Accounts, Albums +Family and Cast in your `museum.yaml` configuration file. Checkout +[`local.yaml`](https://github.com/ente-io/ente/blob/543411254b2bb55bd00a0e515dcafa12d12d3b35/server/configurations/local.yaml#L76-L89) +to configure the endpoints. Make sure to setup up your DNS Records accordingly to the +similar URL's you set up in `museum.yaml`. + +Next part is to configure the web server. + +# Web server configuration + +The last step ahead is configuring reverse_proxy for the ports on which the apps +are being served (you will have to make changes, if you have cusotmized the +ports). The web server of choice in this guide is +[Caddy](https://caddyserver.com) because with caddy you don't have to manually +configure/setup SSL ceritifcates as caddy will take care of that. + +```sh +photos.yourdomain.com { + reverse_proxy http://localhost:3001 + # for logging + log { + level error + } +} + +auth.yourdomain.com { + reverse_proxy http://localhost:3002 +} +# and so on ... +``` + +Next, start the caddy server :). + +```sh +# If caddy service is not enabled +sudo systemctl enable caddy + +sudo systemctl daemon-reload +sudo systemctl start caddy +``` + +## Contributing + +Please start a discussion on the Github Repo if you have any suggestions for the +Dockerfile, You can also share your setups on Github Discussions. diff --git a/docs/docs/self-hosting/guides/web-app.md b/docs/docs/self-hosting/guides/web-app.md index 1213eacf8f..015cb7d986 100644 --- a/docs/docs/self-hosting/guides/web-app.md +++ b/docs/docs/self-hosting/guides/web-app.md @@ -5,6 +5,12 @@ description: server --- + +> [!WARNING] NOTE +> This page covers documentation around self-hosting the web app manually. If you +> want to deploy Ente hassle free, please use the [one line](https://ente.io/blog/self-hosting-quickstart/) +> command to setup Ente. This guide might be deprecated in the near future. + # Web app The getting started instructions mention using `yarn dev` (which is an alias of diff --git a/docs/docs/self-hosting/index.md b/docs/docs/self-hosting/index.md index bb0396d4a3..c0eef22f2c 100644 --- a/docs/docs/self-hosting/index.md +++ b/docs/docs/self-hosting/index.md @@ -10,90 +10,32 @@ the same code we use for our own cloud service. > [!TIP] > -> To get some context, you might find our -> [blog post](https://ente.io/blog/open-sourcing-our-server/) announcing the -> open sourcing of our server useful. +> You might find our [blog post](https://ente.io/blog/open-sourcing-our-server/) +> announcing the open sourcing of our server useful. -## Getting started - Quickstart +## System requirements -Install [Docker](https://www.docker.com). Then, paste the following command in a -your terminal: +The server has minimal resource requirements, running as a lightweight Go +binary. It performs well on small cloud instances, old laptops, and even +[low-end embedded devices](https://github.com/ente-io/ente/discussions/594). + +## Getting started + +Run this command on your terminal to setup Ente. ```sh sh -c "$(curl -fsSL https://raw.githubusercontent.com/ente-io/ente/main/server/quickstart.sh)" ``` -> [!TIP] -> -> For more details about what this does, see [the quickstart -> README](https://github.com/ente-io/ente/blob/main/server/docs/quickstart.md). +The above `curl` command pulls the Docker image, creates a directory `my-ente` +in the current working directory and starts all containers required to run Ente. -That's about it. If you open http://localhost:3000, you will be able to create -an account on a Ente Photos web app running on your machine, and this web app -will be connecting to the server running on your local machine at -`localhost:8080`. The verification code will be shown in the server logs. +![quickstart](/quickstart.png) -For the mobile or desktop apps, you don't even need to build, and can install -normal Ente apps and configure them to use your -[custom self-hosted server](guides/custom-server/). +![self-hosted-ente](/web-app.webp) -## Getting started - From source +## Queries? -The quickstart method above uses pre-built images. Alternatively, if you want to -build the self hosted server images from source, you can use the steps in this -section. - -#### Installing Docker - -Refer to -[How to install Docker from the APT repository](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) -for detailed instructions. - -#### Start the server - -```sh -git clone https://github.com/ente-io/ente -cd ente/server -docker compose up --build -``` - -Install the necessary dependencies for running the web client - -```sh -# installing npm and yarn - -sudo apt update -sudo apt install nodejs npm -sudo npm install -g yarn // to install yarn globally -``` - -Then in a separate terminal, you can run (e.g) the web client - -```sh -cd ente/web -yarn install -NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev -``` - -> If you want to build the mobile apps from source, see the instructions -> [here](guides/mobile-build). - -## Next steps - -- More details about the server are in its - [README](https://github.com/ente-io/ente/tree/main/server#readme) - -- More details about running the server (with or without Docker) are in - [RUNNING](https://github.com/ente-io/ente/blob/main/server/RUNNING.md) - -- If you have questions around self-hosting that are not answered in any of the - existing documentation, you can ask in our - [GitHub Discussions](https://github.com/ente-io/ente/discussions). **Please - remember to search first if the query has been already asked and answered.** - -## Contributing! - -One particular way in which you can help is by adding new [guides](guides/) on -this help site. The documentation is written in Markdown and adding new pages is -[easy](https://github.com/ente-io/ente/tree/main/docs#readme). Editing existing -pages is even easier: at the bottom of each page is an _Edit this page_ link. +If you need support, please ask on our community +[Discord](https://ente.io/discord) or start a discussion on +[GitHub](https://github.com/ente-io/ente/discussions/). diff --git a/docs/docs/self-hosting/museum.md b/docs/docs/self-hosting/museum.md new file mode 100644 index 0000000000..4d1da34b0a --- /dev/null +++ b/docs/docs/self-hosting/museum.md @@ -0,0 +1,69 @@ +--- +title: Configuring your server +description: Guide to writing a museum.yaml +--- + +# Configuring your server + +Ente's monolithic server is called **museum**. + +`museum.yaml` is a YAML configuration file used to configure museum. By default, +[`local.yaml`](https://github.com/ente-io/ente/tree/main/server/configurations/local.yaml) +is provided, but its settings are overridden with those from `museum.yaml`. + +If you used our quickstart script, your `my-ente` directory will include a +`museum.yaml` file with preset configurations for encryption keys, secrets, +PostgreSQL and MinIO. + +> [!TIP] +> +> Always do `docker compose down` inside your `my-ente` directory. If you've +> made changes to `museum.yaml`, restart the containers with `docker compose up +> -d ` to see your changes in action. + +## S3 buckets + +The `s3` section within `museum.yaml` is by default configured to use local +MinIO buckets. + +If you wish to use an external S3 provider, you can edit the configuration with +your provider's credentials, and set `are_local_buckets` to `false`. + +Check out [Configuring S3](/self-hosting/guides/configuring-s3.md) to understand +more about configuring S3 buckets. + +MinIO uses the port `3200` for API Endpoints and their web app runs over +`:3201`. You can login to MinIO Web Console by opening `localhost:3201` in your browser. + +If you face any issues related to uploads then checkout [Troubleshooting bucket +CORS](/self-hosting/troubleshooting/bucket-cors) and [Frequently encountered S3 +errors](/self-hosting/guides/configuring-s3#frequently-encountered-errors). + +## Web apps + +The web apps for Ente Photos is divided into multiple sub-apps like albums, +cast, auth, etc. These endpoints are configurable in the museum.yaml under the +`apps.*` section. + +For example, + +```yaml +apps: + public-albums: albums.myente.xyz + cast: cast.myente.xyz + accounts: accounts.myente.xyz + family: family.myente.xyz +``` + +By default, all the values redirect to our publicly hosted production services. +After you are done with filling the values, restart museum and the app will +start utilizing those endpoints instead of Ente's production instances. + +Once you have configured all the necessary endpoints, `cd` into `my-ente` and +stop all the Docker containers with `docker compose down` and restart them with +`docker compose up -d`. + +Similarly, you can use the default +[`local.yaml`](https://github.com/ente-io/ente/tree/main/server/configurations/local.yaml) +as a reference for building a functioning `museum.yaml` for many other +functionalities like SMTP, Discord notifications, Hardcoded-OTTs, etc. diff --git a/docs/docs/self-hosting/reverse-proxy.md b/docs/docs/self-hosting/reverse-proxy.md new file mode 100644 index 0000000000..7ef79ac412 --- /dev/null +++ b/docs/docs/self-hosting/reverse-proxy.md @@ -0,0 +1,49 @@ +--- +Title: Configuring Reverse Proxy +Description: configuring reverse proxy for Museum and other endpoints +--- + +# Reverse proxy + +Ente's server (museum) runs on port `:8080`, web app on `:3000` and the other +apps from ports `3001-3004`. + +We highly recommend using HTTPS for Museum (`8080`). For security reasons museum +will not accept incoming HTTP traffic. + +Head over to your DNS management dashboard and setup the appropriate records for +the endpoints. Mostly, `A` or `AAAA` records targeting towards your server's IP +address should be sufficient. The rest of the work will be done by the web +server on your machine. + +![cloudflare](/cloudflare.png) + +### Caddy + +Setting up a reverse proxy with Caddy is easy and straightforward. + +Firstly, install Caddy on your server. + +```sh +sudo apt install caddy +``` + +After the installation is complete, a `Caddyfile` is created on the path +`/etc/caddy/`. This file is used to configure reverse proxies among other +things. + +```yaml +# Caddyfile - myente.xyz is just an example. +api.myente.xyz { + reverse_proxy http://localhost:8080 +} +ente.myente.xyz { + reverse_proxy http://localhost:3000 +} +#...and so on for other endpoints +``` + +After a hard-reload, the Ente Photos web app should be up on https://ente.myente.xyz. + +If you are using a different tool for reverse proxy (like nginx), please check +out their documentation. diff --git a/docs/docs/self-hosting/troubleshooting/bucket-cors.md b/docs/docs/self-hosting/troubleshooting/bucket-cors.md new file mode 100644 index 0000000000..19c1dbff47 --- /dev/null +++ b/docs/docs/self-hosting/troubleshooting/bucket-cors.md @@ -0,0 +1,62 @@ +--- +title: Bucket CORS +description: Troubleshooting CORS issues with S3 Buckets +--- + +# Fix potential CORS issues with your Buckets + +## For AWS S3 + +If you cannot upload a photo due to a CORS issue, you need to fix the CORS +configuration of your bucket. + +Create a `cors.json` file with the following content: + +```json +{ + "CORSRules": [ + { + "AllowedOrigins": ["*"], + "AllowedHeaders": ["*"], + "AllowedMethods": ["GET", "HEAD", "POST", "PUT", "DELETE"], + "MaxAgeSeconds": 3000, + "ExposeHeaders": ["Etag"] + } + ] +} +``` + +You may want to change the `AllowedOrigins` to a more restrictive value. + +If you are using AWS for S3, you can execute the below command to get rid of +CORS. Make sure to enter the right path for the `cors.json` file. + +```bash +aws s3api put-bucket-cors --bucket YOUR_S3_BUCKET --cors-configuration /path/to/cors.json +``` + +## For Self-hosted Minio Instance + +> Important: MinIO does not take JSON CORS file as the input, instead you will +> have to build a CORS.xml file or just convert the above `cors.json` to XML. + +A minor requirement here is the tool `mc` for managing buckets via command line +interface. Checkout the `mc set alias` document to configure alias for your +instance and bucket. After this you will be prompted for your AccessKey and +Secret, which is your username and password, go ahead and enter that. + +```sh +mc cors set // api cors_allow_origin="*" +``` + +You can create also `.csv` file and dump the list of origins you would like to +allow and replace the `*` with `path` to the CSV file. + +Now, uploads should be working fine. \ No newline at end of file diff --git a/docs/docs/self-hosting/troubleshooting/docker.md b/docs/docs/self-hosting/troubleshooting/docker.md index 905ac709e4..6c80070b34 100644 --- a/docs/docs/self-hosting/troubleshooting/docker.md +++ b/docs/docs/self-hosting/troubleshooting/docker.md @@ -70,3 +70,61 @@ services.postgres.healthcheck Additional property start_interval is not allowed You will need to upgrade your Docker compose version to a newer version that supports the `start_interval` property on the health check. + +## Postgres authentication failed + +If you're getting Postgres password authentication failures when starting your +cluster, then you might be using a stale Docker volume. + +In more detail, if you're getting an error of the following form (pasting a full +example for easier greppability): + +``` +museum-1 | panic: pq: password authentication failed for user "pguser" +museum-1 | +museum-1 | goroutine 1 [running]: +museum-1 | main.setupDatabase() +museum-1 | /etc/ente/cmd/museum/main.go:846 +0x338 +museum-1 | main.main() +museum-1 | /etc/ente/cmd/museum/main.go:124 +0x44c +museum-1 exited with code 2 +``` + +Then the issue is that the password you're using is not the password postgres is +expecting (duh), and a potential scenario where that can happen is something +like this: + +1. On a machine, you create a new cluster with `quickstart.sh`. + +2. Later you delete that folder, but then create another cluster with + `quickstart.sh`. Each time `quickstart.sh` runs, it creates new credentials, + and then when it tries to spin up the docker compose cluster, use them to + connect to the postgres running within. + +3. However, you would already have a docker volume from the first run of + `quickstart.sh`. Since the folder name is the same in both cases `my-ente`, + Docker will reuse the existing volumes (`my-ente_postgres-data`, + `my-ente_minio-data`). So your postgres is running off the old credentials, + and you're trying to connect to it using the new ones, and the error arises. + +The solution is to delete the stale docker volume. **Be careful**, this will +delete all data in those volumes (any thing you uploaded etc), so first +understand if this is the exact problem you are facing before deleting those +volumes. + +If you're sure of what you're doing, the volumes can be deleted by + +``` +docker volume ls +``` + +to list them, and then delete the ones that begin with `my-ente` using +`docker volume rm`. You can delete all stale volumes by using +`docker system prune` with the `--volumes` flag, but be _really_ careful, +that'll delete all volumes (Ente or otherwise) on your machine that are not +currently in use by a running docker container. + +If you're unsure about removing volumes, another alternative is to rename your +`my-ente` folder. Docker uses the folder name to determine the volume name +prefix, so giving it a different name will cause Docker to create a volume +afresh for it. diff --git a/docs/docs/self-hosting/troubleshooting/misc.md b/docs/docs/self-hosting/troubleshooting/misc.md new file mode 100644 index 0000000000..65c1e7ffd1 --- /dev/null +++ b/docs/docs/self-hosting/troubleshooting/misc.md @@ -0,0 +1,35 @@ +--- +title: General troubleshooting cases +description: Fixing various errors when trying to self host Ente +--- + +## Functionality not working on self hosted + +If some specific functionality (e.g. album listing, video playback) does not +work on your self hosted instance, it is possible that you have set _some_, but +not _all_ needed CSP headers (by default, CSP is not enabled). + +To expand on it - by default, currently the generated build does not enable CSP +headers. The generated build includes a _headers file that Cloudflare will use +to set HTTP response headers, but even these do not enable CSP, it is set to a +report only mode. + +However, your web server might be setting some CSP policy. If so, then you will +need to ensure that all necessary CSP headers are set. + +You can see the current +[_headers](https://github.com/ente-io/ente/blob/main/web/apps/photos/public/_headers) +file contents to use a template for your CSP policy. The +`Content-Security-Policy-Report-Only` value will show you the CSP headers in +"dry run" report-only mode we're setting - you can use that as a template, +tweaking it as per your setup. + +How do you know if this is the problem you're facing? The browser console +_might_ be giving you errors when you try to open the page and perform the +corresponding function. + +> Refused to load https://subdomain.example.org/... because it does not appear +> in the script-src directive of the Content Security Policy. + +This is not guaranteed, each browsers handles CSP errors differently, and some +may silently swallow it. diff --git a/docs/docs/self-hosting/troubleshooting/uploads.md b/docs/docs/self-hosting/troubleshooting/uploads.md index 435a5e93c6..6bfef9f923 100644 --- a/docs/docs/self-hosting/troubleshooting/uploads.md +++ b/docs/docs/self-hosting/troubleshooting/uploads.md @@ -1,13 +1,54 @@ --- -title: Uploads failing +title: Uploads description: Fixing upload errors when trying to self host Ente --- -# Uploads failing +# Troubleshooting upload failures -If uploads to your minio are failing, you need to ensure that you've configured -the S3 bucket `endpoint` in `credentials.yaml` (or `museum.yaml`) to, say, -`yourserverip:3200`. This can be any host or port, it just need to be a value -that is reachable from both your client and from museum. +Here are some errors our community members frequently encountered with the +context and potential fixes. -For more details, see [configuring-s3](/self-hosting/guides/configuring-s3). +Fundamentally in most situations, the problem is because of minor mistakes or +misconfiguration. Please make sure to reverse proxy museum and MinIO API +endpoint to a domain and check your S3 credentials and whole configuration +file for any minor misconfigurations. + +It is also suggested that the user setups bucket CORS on MinIO or any external +S3 service provider they are connecting to. To setup bucket CORS, please [read +this](/self-hosting/troubleshooting/bucket-cors). + +## What is S3 and how is it incorporated in Ente ? + +S3 is an cloud storage protocol made by Amazon (specifically AWS). S3 is designed to store +files and data as objects inside Buckets and it is mostly used for Online +Backups and storing different types of files. + +Ente's Docker setup is shipped with [MinIO](https://min.io/) as its default S3 provider. +MinIO supports the Amazon S3 protocol and leverages your disk storage to +dump all the uploaded files as encrypted object blobs. + +## 403 Forbidden + +If museum is able to make a network connection to your S3 bucket but +uploads are still failing, it could be a credentials or permissions issue. + +A telltale sign of this is that in the museum logs you can see `403 Forbidden` +errors about it not able to find the size of a file even though the +corresponding object exists in the S3 bucket. + +This could be because + +1. The bucket CORS rules do not allow museum to access these objects. For + uploading files from the browser, you will need to set `allowedOrigins` to + `*`, and allow the `X-Auth-Token`, `X-Client-Package` headers configuration + too. [Here is an example of a working + configuration](https://github.com/ente-io/ente/discussions/1764#discussioncomment-9478204). + +2. The credentials are not being picked up (you might be setting the correct + credentials, but not in the place where museum reads them from). + +## Mismatch in file size + +The "Mismatch in file size" error mostly occurs in a situation where the client is re-uploading a file which is already in the bucket with a different +file size. The reason for re-upload could be anything including network issue, +sudden killing of app before the upload is complete and etc. diff --git a/infra/staff/src/App.tsx b/infra/staff/src/App.tsx index 2a754f3bd0..a1bf14d6c8 100644 --- a/infra/staff/src/App.tsx +++ b/infra/staff/src/App.tsx @@ -10,10 +10,10 @@ import "./App.css"; import FamilyTableComponent from "./components/FamilyComponentTable"; import StorageBonusTableComponent from "./components/StorageBonusTableComponent"; import TokensTableComponent from "./components/TokenTableComponent"; -import type { UserData } from "./components/UserComponent"; import UserComponent from "./components/UserComponent"; import duckieimage from "./components/duckie.png"; import { apiOrigin } from "./services/support"; +import type { UserData, UserResponse } from "./types"; export let email = ""; export let token = ""; @@ -29,38 +29,6 @@ export const setToken = (newToken: string) => { export const getEmail = () => email; export const getToken = () => token; -interface User { - ID: string; - email: string; - creationTime: number; -} - -interface Subscription { - productID: string; - paymentProvider: string; - expiryTime: number; - storage: number; -} - -interface Security { - isEmailMFAEnabled: boolean; - isTwoFactorEnabled: boolean; - passkeys: string; - passkeyCount: number; - canDisableEmailMFA: boolean; -} - -interface UserResponse { - user: User; - subscription: Subscription; - authCodes?: number; - details?: { - usage?: number; - storageBonus?: number; - profileData: Security; - }; -} - const App: React.FC = () => { const [localEmail, setLocalEmail] = useState(""); const [localToken, setLocalToken] = useState(""); @@ -139,7 +107,7 @@ const App: React.FC = () => { console.log("API Response:", userDataResponse); const extractedUserData: UserData = { - User: { + user: { "User ID": userDataResponse.user.ID || "None", Email: userDataResponse.user.email || "None", "Creation time": @@ -147,7 +115,7 @@ const App: React.FC = () => { userDataResponse.user.creationTime / 1000, ).toLocaleString() || "None", }, - Storage: { + storage: { Total: userDataResponse.subscription.storage ? userDataResponse.subscription.storage >= 1024 ** 3 ? `${(userDataResponse.subscription.storage / 1024 ** 3).toFixed(2)} GB` @@ -166,7 +134,7 @@ const App: React.FC = () => { : `${(userDataResponse.details.storageBonus / 1024 ** 2).toFixed(2)} MB` : "None", }, - Subscription: { + subscription: { "Product ID": userDataResponse.subscription.productID || "None", Provider: @@ -176,7 +144,7 @@ const App: React.FC = () => { userDataResponse.subscription.expiryTime / 1000, ).toLocaleString() || "None", }, - Security: { + security: { "Email MFA": userDataResponse.details?.profileData .isEmailMFAEnabled ? "Enabled" diff --git a/infra/staff/src/components/ChangeEmail.tsx b/infra/staff/src/components/ChangeEmail.tsx index 26407af50e..d3824babc4 100644 --- a/infra/staff/src/components/ChangeEmail.tsx +++ b/infra/staff/src/components/ChangeEmail.tsx @@ -10,10 +10,10 @@ import { import React, { useEffect, useState } from "react"; import { getEmail, getToken } from "../App"; import { apiOrigin } from "../services/support"; -interface ErrorResponse { - message: string; -} +import type { ErrorResponse } from "../types"; +// The below interfaces will only be used in this file +// hence not including them into a sub-merged types file interface ChangeEmailProps { open: boolean; onClose: () => void; diff --git a/infra/staff/src/components/CloseFamily.tsx b/infra/staff/src/components/CloseFamily.tsx index 145c11b505..5ab71bd474 100644 --- a/infra/staff/src/components/CloseFamily.tsx +++ b/infra/staff/src/components/CloseFamily.tsx @@ -10,14 +10,7 @@ import { import React, { useState } from "react"; import { getEmail, getToken } from "../App"; // Import getEmail and getToken functions import { apiOrigin } from "../services/support"; - -interface UserData { - subscription?: { - userID: string; - // Add other properties as per your API response structure - }; - // Add other properties as per your API response structure -} +import type { UserData } from "../types"; interface CloseFamilyProps { open: boolean; diff --git a/infra/staff/src/components/Disable2FA.tsx b/infra/staff/src/components/Disable2FA.tsx index 29a3a6cd5a..62166aef24 100644 --- a/infra/staff/src/components/Disable2FA.tsx +++ b/infra/staff/src/components/Disable2FA.tsx @@ -10,14 +10,7 @@ import { import React, { useState } from "react"; import { getEmail, getToken } from "../App"; // Import getEmail and getToken functions import { apiOrigin } from "../services/support"; - -interface UserData { - subscription?: { - userID: string; - // Add other properties as per your API response structure - }; - // Add other properties as per your API response structure -} +import type { UserData } from "../types"; interface Disable2FAProps { open: boolean; diff --git a/infra/staff/src/components/DisablePasskeys.tsx b/infra/staff/src/components/DisablePasskeys.tsx index 824b2f2f87..a2757a371d 100644 --- a/infra/staff/src/components/DisablePasskeys.tsx +++ b/infra/staff/src/components/DisablePasskeys.tsx @@ -10,20 +10,7 @@ import { import React, { useState } from "react"; import { getEmail, getToken } from "../App"; // Import getEmail and getToken functions import { apiOrigin } from "../services/support"; - -interface UserData { - subscription?: { - userID: string; - // Add other properties as per your API response structure - }; - // Add other properties as per your API response structure -} - -interface DisablePasskeysProps { - open: boolean; - handleClose: () => void; - handleDisablePasskeys: () => void; // Callback to handle disabling passkeys -} +import type { DisablePasskeysProps, UserData } from "../types"; const DisablePasskeys: React.FC = ({ open, diff --git a/infra/staff/src/components/FamilyComponentTable.tsx b/infra/staff/src/components/FamilyComponentTable.tsx index 2171b3aeda..859960483e 100644 --- a/infra/staff/src/components/FamilyComponentTable.tsx +++ b/infra/staff/src/components/FamilyComponentTable.tsx @@ -13,23 +13,10 @@ import * as React from "react"; import { useEffect, useState } from "react"; import { getEmail, getToken } from "../App"; import { apiOrigin } from "../services/support"; +import type { FamilyMember, UserData } from "../types"; +import { formatUsageToGB } from "../utils/"; import CloseFamily from "./CloseFamily"; -interface FamilyMember { - id: string; - email: string; - status: string; - usage: number; -} - -interface UserData { - details: { - familyData: { - members: FamilyMember[]; - }; - }; -} - const FamilyTableComponent: React.FC = () => { const [familyMembers, setFamilyMembers] = useState([]); const [closeFamilyOpen, setCloseFamilyOpen] = useState(false); @@ -54,7 +41,7 @@ const FamilyTableComponent: React.FC = () => { } const userData = (await response.json()) as UserData; // Typecast to UserData interface const members: FamilyMember[] = - userData.details.familyData.members; + userData.details?.familyData.members ?? []; setFamilyMembers(members); } catch (error) { console.error("Error fetching family data:", error); @@ -69,11 +56,6 @@ const FamilyTableComponent: React.FC = () => { ); }, []); - const formatUsageToGB = (usage: number): string => { - const usageInGB = (usage / (1024 * 1024 * 1024)).toFixed(2); - return `${usageInGB} GB`; - }; - const handleOpenCloseFamily = () => { setCloseFamilyOpen(true); }; diff --git a/infra/staff/src/components/ToggleEmailMFA.tsx b/infra/staff/src/components/ToggleEmailMFA.tsx index 0e0a469a73..82e3f28015 100644 --- a/infra/staff/src/components/ToggleEmailMFA.tsx +++ b/infra/staff/src/components/ToggleEmailMFA.tsx @@ -10,14 +10,7 @@ import { import React, { useState } from "react"; import { getEmail, getToken } from "../App"; // Import getEmail and getToken functions import { apiOrigin } from "../services/support"; - -interface UserData { - subscription?: { - userID: string; - // Add other properties as per your API response structure - }; - // Add other properties as per your API response structure -} +import type { UserData } from "../types"; interface ToggleEmailMFAProps { open: boolean; diff --git a/infra/staff/src/components/UpdateSubscription.tsx b/infra/staff/src/components/UpdateSubscription.tsx index b1bf7dfea1..1b1806b59a 100644 --- a/infra/staff/src/components/UpdateSubscription.tsx +++ b/infra/staff/src/components/UpdateSubscription.tsx @@ -62,8 +62,8 @@ const UpdateSubscription: React.FC = ({ expiryTime: "", userId: "", attributes: { - "customerID": "", - "stripeAccountCountry": "" + customerID: "", + stripeAccountCountry: "", }, }); @@ -108,9 +108,13 @@ const UpdateSubscription: React.FC = ({ expiryTime: expiryTime, userId: userDataResponse.subscription.userID || "", attributes: { - customerID: userDataResponse.subscription.attributes.customerID || "", - stripeAccountCountry: userDataResponse.subscription.attributes.stripeAccountCountry || "" - } + customerID: + userDataResponse.subscription.attributes + .customerID || "", + stripeAccountCountry: + userDataResponse.subscription.attributes + .stripeAccountCountry || "", + }, }); } catch (error) { console.error("Error fetching data:", error); @@ -174,8 +178,9 @@ const UpdateSubscription: React.FC = ({ transactionId: values.transactionId, attributes: { customerID: values.attributes.customerID, - stripeAccountCountry: values.attributes.stripeAccountCountry - } + stripeAccountCountry: + values.attributes.stripeAccountCountry, + }, }; try { diff --git a/infra/staff/src/components/UserComponent.tsx b/infra/staff/src/components/UserComponent.tsx index bc93101960..be2b1afb11 100644 --- a/infra/staff/src/components/UserComponent.tsx +++ b/infra/staff/src/components/UserComponent.tsx @@ -13,6 +13,7 @@ import TableContainer from "@mui/material/TableContainer"; import TableRow from "@mui/material/TableRow"; import Typography from "@mui/material/Typography"; import * as React from "react"; +import type { UserComponentProps } from "../types"; import ChangeEmail from "./ChangeEmail"; import DeleteAccount from "./DeleteAccont"; import Disable2FA from "./Disable2FA"; @@ -20,17 +21,6 @@ import DisablePasskeys from "./DisablePasskeys"; import ToggleEmailMFA from "./ToggleEmailMFA"; import UpdateSubscription from "./UpdateSubscription"; -export interface UserData { - User: Record; - Storage: Record; - Subscription: Record; - Security: Record; -} - -interface UserComponentProps { - userData: UserData | null; -} - const UserComponent: React.FC = ({ userData }) => { const [deleteAccountOpen, setDeleteAccountOpen] = React.useState(false); const [email2FAEnabled, setEmail2FAEnabled] = React.useState(false); @@ -44,10 +34,10 @@ const UserComponent: React.FC = ({ userData }) => { const [disablePasskeysOpen, setDisablePasskeysOpen] = React.useState(false); React.useEffect(() => { - setTwoFactorEnabled(userData?.Security["Two factor 2FA"] === "Enabled"); - setEmail2FAEnabled(userData?.Security["Email MFA"] === "Enabled"); + setTwoFactorEnabled(userData?.security["Two factor 2FA"] === "Enabled"); + setEmail2FAEnabled(userData?.security["Email MFA"] === "Enabled"); setCanDisableEmailMFA( - userData?.Security["Can Disable EmailMFA"] === "Yes", + userData?.security["Can Disable EmailMFA"] === "Yes", ); }, [userData]); @@ -148,14 +138,10 @@ const DataTable: React.FC = ({ minHeight: 300, display: "flex", flexDirection: "column", - marginBottom: "20px", height: "100%", width: "100%", - padding: "13px", + padding: "10px", overflowX: "hidden", - "&:not(:last-child)": { - marginBottom: "40px", - }, }} > = ({ width: "100%", }} > - {title} + {title.charAt(0).toUpperCase() + title.slice(1)} - {title === "User" && ( + {title === "user" && ( = ({ )} - {title === "Subscription" && ( + {title === "subscription" && ( ; + storage: Record; + subscription?: Record; + security: Record; + details?: { + familyData: { + members: FamilyMember[]; + }; + }; +} + +export interface UserComponentProps { + userData: UserData | null; +} + +// Error Response Interface +export interface ErrorResponse { + message: string; +} + +// Types related to Subscriptions +export interface Subscription { + productID: string; + paymentProvider: string; + expiryTime: number; + storage: number; +} + +export interface Security { + isEmailMFAEnabled: boolean; + isTwoFactorEnabled: boolean; + passkeys: string; + passkeyCount: number; + canDisableEmailMFA: boolean; +} + +// Types related Family +export interface FamilyMember { + id: string; + email: string; + status: string; + usage: number; +} + +// Types related to passkeys +export interface DisablePasskeysProps { + open: boolean; + handleClose: () => void; + handleDisablePasskeys: () => void; // Callback to handle disabling passkeys +} diff --git a/infra/staff/src/utils/index.ts b/infra/staff/src/utils/index.ts new file mode 100644 index 0000000000..46a4bc3fcf --- /dev/null +++ b/infra/staff/src/utils/index.ts @@ -0,0 +1,5 @@ +// Common utilities +export function formatUsageToGB(usage: number): string { + const usageInGB = (usage / (1024 * 1024 * 1024)).toFixed(2); + return `${usageInGB} GB`; +} diff --git a/infra/staff/src/utils/strings.ts b/infra/staff/src/utils/strings.ts deleted file mode 100644 index 39b22fcd76..0000000000 --- a/infra/staff/src/utils/strings.ts +++ /dev/null @@ -1,13 +0,0 @@ -/** - * User facing strings in the app. - * - * By keeping them separate, we make our lives easier if/when we need to - * localize the corresponding pages. Right now, these are just the values in the - * default language, English. - */ -const S = { - hello: "Hello Ente!", - error_generic: "Oops, something went wrong.", -}; - -export default S; diff --git a/mobile/android/build.gradle b/mobile/android/build.gradle index 35258232be..5f335a8ac0 100644 --- a/mobile/android/build.gradle +++ b/mobile/android/build.gradle @@ -1,5 +1,6 @@ ext { - appCompatVersion = '1.1.0' // for background_fetch + compileSdkVersion = 35 + targetSdkVersion = 35 } allprojects { @@ -11,6 +12,9 @@ allprojects { maven { url "${project(':background_fetch').projectDir}/libs" } + maven { + url "${project(':ffmpeg_kit_flutter').projectDir}/libs" + } } } diff --git a/mobile/fastlane/metadata/android/ar/full_description.txt b/mobile/fastlane/metadata/android/ar/full_description.txt index 9ba4fe3143..4c64b17c6f 100644 --- a/mobile/fastlane/metadata/android/ar/full_description.txt +++ b/mobile/fastlane/metadata/android/ar/full_description.txt @@ -1,36 +1,36 @@ -ente is a simple app to backup and share your photos and videos. +Ente هو تطبيق بسيط للنسخ الاحتياطي لصورك ومقاطع الفيديو الخاصة بك ومشاركتها. -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. +إذا كنت تبحث عن بديل لتطبيق صور جوجل (Google Photos) يراعي خصوصيتك، فقد وصلت إلى المكان المناسب. مع Ente، يتم تخزين ذكرياتك بتشفير كامل من طرف إلى طرف (e2ee)، مما يعني أنك وحدك من يستطيع الاطلاع عليها. هذا يعني أنك وحدك من يستطيع رؤيتها. -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. +لدينا تطبيقات مفتوحة المصدر لمنصات أندرويد، وآي أو إس، والويب، وسطح المكتب، وستتم مزامنة صورك بسلاسة بينها جميعًا بطريقة مشفرة بالكامل من طرف إلى طرف (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. يمكنك مشاركة روابط عامة يمكن لأي شخص عرضها، حيث يستطيعون مشاهدة ألبومك والمساهمة بإضافة الصور إليه، حتى بدون الحاجة إلى حساب أو تطبيق. -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. +تُكرّر بياناتك المشفرة في 3 مواقع مختلفة، بما في ذلك ملجأ محصن في باريس. نحن نأخذ مسألة الحفاظ على ذكرياتك للأجيال القادمة بجدية ونسهّل عليك ضمان بقاء ذكرياتك حية بعد رحيلك. -We are here to make the safest photos app ever, come join our journey! +مهمتنا هي تطوير تطبيق الصور الأكثر أمانًا على الإطلاق، ندعوك للانضمام إلينا في هذه الرحلة! -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! +الميزات +- نسخ احتياطية بالجودة الأصلية، لأن كل بكسل له قيمة. +- خطط عائلية، لتتمكن من مشاركة مساحة التخزين مع عائلتك. +- ألبومات تعاونية، لتتمكنوا من جمع صوركم المشتركة بعد رحلة ما. +- مجلدات مشتركة، إذا كنت ترغب في أن يستمتع شريكك بصور "الكاميرا" الخاصة بك. +- روابط للألبومات، يمكن حمايتها بكلمة مرور. +- إمكانية تحرير مساحة على جهازك، عن طريق إزالة الملفات التي تم نسخها احتياطيًا بأمان. +- دعم فني يقدمه أفراد حقيقيون، لأنك تستحق الاهتمام. +- إضافة أوصاف، لتتمكن من تعليق ذكرياتك والعثور عليها بسهولة. +- محرر صور، لإضفاء لمساتك النهائية. +- إضافة للمفضلة، إخفاء، واستعادة ذكرياتك، فهي لا تُقدّر بثمن. +- استيراد بنقرة واحدة من جوجل، وآبل، والقرص الصلب الخاص بك، وغيرها. +- الوضع الداكن، لأن صورك تظهر بشكلٍ أفضل فيه +- مصادقة ثنائية (2FA)، مصادقة ثلاثية (3FA)، مصادقة بيومترية +- والكثير غيرها! -PERMISSIONS -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 أذونات معينة للعمل كمزود لتخزين الصور، يمكن مراجعة تفاصيلها هنا: 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. +التسعير +نحن لا نوفر خططًا مجانية دائمة، لأنه من المهم بالنسبة لنا أن نضمن استدامة الخدمة وصمودها أمام اختبار الزمن. بدلاً من ذلك، نقدم خططًا بأسعار معقولة يمكنك مشاركتها بحرية مع عائلتك. يمكنك العثور على مزيد من المعلومات على 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. +الدعم +نحن نفخر بتقديم الدعم البشري. إذا كنت من عملائنا المشتركين، يمكنك التواصل عبر team@ente.io وتوقع ردًا من فريقنا في غضون 24 ساعة. diff --git a/mobile/fastlane/metadata/android/cs/full_description.txt b/mobile/fastlane/metadata/android/cs/full_description.txt index 9ba4fe3143..c6300bd1a3 100644 --- a/mobile/fastlane/metadata/android/cs/full_description.txt +++ b/mobile/fastlane/metadata/android/cs/full_description.txt @@ -26,11 +26,11 @@ FEATURES - 2FA, 3FA, biometric auth - and a LOT more! -PERMISSIONS +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 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. -SUPPORT +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. diff --git a/mobile/fastlane/metadata/android/eu/full_description.txt b/mobile/fastlane/metadata/android/eu/full_description.txt new file mode 100644 index 0000000000..9ba4fe3143 --- /dev/null +++ b/mobile/fastlane/metadata/android/eu/full_description.txt @@ -0,0 +1,36 @@ +ente is a simple app to backup and share your photos and videos. + +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. + +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. + +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. + +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. + +We are here to make the safest photos app ever, come join our journey! + +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! + +PERMISSIONS +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 + +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. + +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. diff --git a/mobile/fastlane/metadata/android/eu/short_description.txt b/mobile/fastlane/metadata/android/eu/short_description.txt new file mode 100644 index 0000000000..7a5fe973db --- /dev/null +++ b/mobile/fastlane/metadata/android/eu/short_description.txt @@ -0,0 +1 @@ +ente is an end-to-end encrypted photo storage app \ No newline at end of file diff --git a/mobile/fastlane/metadata/android/eu/title.txt b/mobile/fastlane/metadata/android/eu/title.txt new file mode 100644 index 0000000000..3a4fed48fe --- /dev/null +++ b/mobile/fastlane/metadata/android/eu/title.txt @@ -0,0 +1 @@ +ente - encrypted photo storage \ No newline at end of file diff --git a/mobile/fastlane/metadata/android/or/full_description.txt b/mobile/fastlane/metadata/android/or/full_description.txt new file mode 100644 index 0000000000..9ba4fe3143 --- /dev/null +++ b/mobile/fastlane/metadata/android/or/full_description.txt @@ -0,0 +1,36 @@ +ente is a simple app to backup and share your photos and videos. + +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. + +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. + +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. + +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. + +We are here to make the safest photos app ever, come join our journey! + +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! + +PERMISSIONS +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 + +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. + +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. diff --git a/mobile/fastlane/metadata/android/or/short_description.txt b/mobile/fastlane/metadata/android/or/short_description.txt new file mode 100644 index 0000000000..7a5fe973db --- /dev/null +++ b/mobile/fastlane/metadata/android/or/short_description.txt @@ -0,0 +1 @@ +ente is an end-to-end encrypted photo storage app \ No newline at end of file diff --git a/mobile/fastlane/metadata/android/or/title.txt b/mobile/fastlane/metadata/android/or/title.txt new file mode 100644 index 0000000000..3a4fed48fe --- /dev/null +++ b/mobile/fastlane/metadata/android/or/title.txt @@ -0,0 +1 @@ +ente - encrypted photo storage \ No newline at end of file diff --git a/mobile/fastlane/metadata/android/pt_BR/full_description.txt b/mobile/fastlane/metadata/android/pt_BR/full_description.txt new file mode 100644 index 0000000000..08da532506 --- /dev/null +++ b/mobile/fastlane/metadata/android/pt_BR/full_description.txt @@ -0,0 +1,36 @@ +ente é um aplicativo simples para fazer cópia de segurança e compartilhar suas fotos e vídeos. + +Se você está procurando por uma alternativa ao Google Fotos focado em privacidade, você veio ao lugar certo. Com ente, eles são armazenados com criptografia de ponta a ponta (e2ee). Isso significa que só você pode vê-los. + +Nós temos aplicativos de código aberto em todas as plataformas, Android, iOS, web e desktop, e suas fotos vão sincronizar perfeitamente entre todas elas de forma criptografada (e2ee). + +ente também torna simples compartilhar seus álbuns com seus entes queridos, mesmo que eles não estejam no ente. Você pode compartilhar links para o público, em que eles podem visualizar seu álbum e colaborar adicionando fotos a ele, mesmo sem uma conta ou aplicativo. + +Seus dados criptografados são replicados em 3 locais diferentes, incluindo um abrigo avançado em Paris. Nós levamos a sério a nossa postura e fazemos que seja fácil garantir que suas memórias vivam. + +Estamos aqui para se tornar o aplicativo de fotos mais seguro de todos, venha e participe de nossa jornada! + +RECURSOS +— Cópia de resolução original, por cada pixel ser importante +- Planos familiares, para você poder compartilhar o armazenamento com sua família +- Álbuns colaborativos, para você agrupar fotos após uma corrida +- Pastas compartilhadas, caso você queira que seu parceiro aproveite seus cliques na "Câmera" +- Links de álbuns, que podem ser protegidos com uma senha e definidos para expirar +- Capacidade de liberar espaço, removendo arquivos salvos com segurança +- Apoio humano, porque você vale a pena +- Descrições, para você poder captar suas memórias e encontrá-las com facilidade +- Editor de imagens, para adicionar últimos toques +- Favoritar, ocultar e reviver suas memórias, pois elas são preciosas +- Importar num só clique do Google, Apple, seu disco rígido e muito mais +- Tema escuro, porque suas fotos parecem bem nele +- 2FA, 3FA, Autenticação biométrica +- e MUITO mais! + +PERMISSÕES +ente solicita certas permissões para servir o propósito de um fornecedor de armazenamento de fotos, que pode ser revisado aqui: https://github.com/ente-io/ente/blob/f-droid/mobile/android/permissions.md + +PREÇO +Nós não oferecemos planos grátis para sempre, porque é importante para nós que permaneçamos sustentáveis e resistamos à prova do tempo. Em vez disso, oferecemos planos acessíveis que você pode compartilhar livremente com seus familiares. Você pode encontrar mais informações em ente.io. + +AJUDA +Nós temos orgulho em oferecer apoio humano. Se você é um cliente pago, você pode contatar em team@ente.io e esperar uma resposta de nossa equipe dentro de 1 dia. diff --git a/mobile/fastlane/metadata/android/pt_BR/short_description.txt b/mobile/fastlane/metadata/android/pt_BR/short_description.txt new file mode 100644 index 0000000000..59c457c0e3 --- /dev/null +++ b/mobile/fastlane/metadata/android/pt_BR/short_description.txt @@ -0,0 +1 @@ +ente é um aplicativo de armazenamento de fotos criptografado de ponta a ponta \ No newline at end of file diff --git a/mobile/fastlane/metadata/android/pt_BR/title.txt b/mobile/fastlane/metadata/android/pt_BR/title.txt new file mode 100644 index 0000000000..8d04a2f96e --- /dev/null +++ b/mobile/fastlane/metadata/android/pt_BR/title.txt @@ -0,0 +1 @@ +ente - armazenamento de fotos criptografado \ No newline at end of file diff --git a/mobile/fastlane/metadata/android/pt_PT/full_description.txt b/mobile/fastlane/metadata/android/pt_PT/full_description.txt new file mode 100644 index 0000000000..38a7c1b83f --- /dev/null +++ b/mobile/fastlane/metadata/android/pt_PT/full_description.txt @@ -0,0 +1,36 @@ +ente é uma aplicação simples para fazer backup e para partilhar as fotos e vídeos. + +Se busca por uma alternativa do Google Fotos baseada em privacidade, chegaste ao lugar correto. Com ente, eles são encriptados de ponta a ponta (e2ee). Significando que só o utilizador pode vê-las. + +Temos aplicações de fonte aberta para Android, iOS, sítio web e desktop, e as fotos serão perfeitamente sincronizadas entre todas elas numa maneira de encriptação de ponta a ponta (e2ee). + +Ente também simplifica a partilha dos seus álbuns com os seus entes queridos, mesmo que estes não estejam no ente. Pode partilhar ligações visíveis publicamente, onde podem ver o seu álbum e colaborar adicionando fotografias ao mesmo, mesmo sem uma conta ou aplicação. + +Os seus dados encriptados são replicados em 3 locais diferentes, incluindo um abrigo de emergência em Paris. Levamos a posteridade a sério e facilitamos a tarefa de garantir que as suas memórias perdurem para além de si. + +Estamos aqui para criar a aplicação de fotografias mais segura de sempre, junte-se à nossa viagem! + +RECURSOS +- Cópias de segurança de qualidade original, porque cada pixel é importante +- Planos familiares, para que possa partilhar o armazenamento com a sua família +- Álbuns colaborativos, para que possa reunir fotos depois de uma viagem +- Pastas partilhadas, caso queira que o seu parceiro desfrute dos seus cliques na “Câmara” +- Links para álbuns, que podem ser protegidas com uma palavra-passe +- Capacidade de libertar espaço, removendo ficheiros dos quais foi feita uma cópia de segurança segura +- Apoio humano, porque vale a pena +- Descrições, para que possa legendar as suas memórias e encontrá-las facilmente +- Editor de imagens, para dar os retoques finais +- Favoritar, ocultar e reviver suas memórias, pois elas são preciosas +- Importação com um clique do Google, da Apple, do seu disco rígido e muito mais +- Tema escuro, porque as suas fotos ficam bem com ele +- 2FA, 3FA, autenticação biométrica +- e MUITO mais! + +PERMISSÕES +ente solicita determinadas permissões para servir o objetivo de um fornecedor de armazenamento de fotografias, que pode ser consultado aqui: https://github.com/ente-io/ente/blob/f-droid/mobile/android/permissions.md + +PREÇO +Não oferecemos planos gratuitos para sempre, porque é importante para nós mantermo-nos sustentáveis e resistirmos ao teste do tempo. Em vez disso, oferecemos planos acessíveis que pode partilhar livremente com a sua família. Pode encontrar mais informações em ente.io. + +SUPPORT +Orgulhamo-nos de oferecer um apoio humano Se for nosso cliente pago, pode contactar team@ente.io e esperar uma resposta da nossa equipa no prazo de 24 horas. diff --git a/mobile/fastlane/metadata/android/pt_PT/short_description.txt b/mobile/fastlane/metadata/android/pt_PT/short_description.txt new file mode 100644 index 0000000000..26293fcd81 --- /dev/null +++ b/mobile/fastlane/metadata/android/pt_PT/short_description.txt @@ -0,0 +1 @@ +ente é uma aplicação de armazenamento de fotos encriptadas ponta a ponta \ No newline at end of file diff --git a/mobile/fastlane/metadata/android/pt_PT/title.txt b/mobile/fastlane/metadata/android/pt_PT/title.txt new file mode 100644 index 0000000000..3ef173686f --- /dev/null +++ b/mobile/fastlane/metadata/android/pt_PT/title.txt @@ -0,0 +1 @@ +ente - armazenamento de fotos encriptado \ No newline at end of file diff --git a/mobile/fastlane/metadata/ios/ar/description.txt b/mobile/fastlane/metadata/ios/ar/description.txt index a98a74300a..df0c52ee93 100644 --- a/mobile/fastlane/metadata/ios/ar/description.txt +++ b/mobile/fastlane/metadata/ios/ar/description.txt @@ -1,33 +1,33 @@ -Ente is a simple app to automatically backup and organize your photos and videos. +Ente هو تطبيق بسيط لإنشاء نسخ احتياطية وتنظيم صورك ومقاطع الفيديو الخاصة بك تلقائيًا. -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. +إذا كنت تبحث عن بديل يحفظ الخصوصية للحفاظ على ذكرياتك، فأنت في المكان الصحيح. مع Ente، يتم تخزينهن بتشفير من طرف إلى طرف (e2ee). هذا يعني أنك وحدك من يستطيع رؤيتها. -We have apps across all platforms, and your photos will seamlessly sync between all your devices in an end-to-end encrypted (e2ee) manner. +لدينا تطبيقات عبر جميع المنصات، وستتم مزامنة صورك بسلاسة بين جميع أجهزتك بطريقة مشفرة من طرف إلى طرف (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 أيضًا من السهل مشاركة ألبوماتك مع أحبائك. يمكنك إما مشاركتها مباشرة مع مستخدمي Ente الآخرين، بتشفير من طرف إلى طرف؛ أو باستخدام روابط قابلة للعرض بشكل عام. -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. +يتم تخزين بياناتك المشفرة عبر مواقع متعددة، بما في ذلك ملجأ للطوارئ في باريس. نحن نأخذ مسألة البقاء على مر الزمن بجدية ونجعل من السهل ضمان أن ذكرياتك ستدوم بعدك. -We are here to make the safest photos app ever, come join our journey! +نحن هنا لنصنع أكثر تطبيقات الصور أمانًا على الإطلاق، انضم إلى رحلتنا! -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! +الميزات +- نسخ احتياطية بالجودة الأصلية، لأن كل بكسل مهم +- خطط عائلية، حتى تتمكن من مشاركة مساحة التخزين مع عائلتك +- مجلدات مشتركة، في حال كنت ترغب في أن يستمتع شريكك بصور "الكاميرا" الخاصة بك +- روابط الألبوم، التي يمكن حمايتها بكلمة مرور وتعيينها لتنتهي صلاحيتها +- القدرة على تحرير المساحة، عن طريق إزالة الملفات التي تم نسخها احتياطيًا بأمان +- محرر الصور، لإضافة اللمسات النهائية +- إضافة إلى المفضلة، إخفاء، وإعادة إحياء ذكرياتك، فهي ثمينة +- استيراد بنقرة واحدة من جميع مزودي التخزين الرئيسيين +- الوضع الداكن، لأن صورك تظهر بشكلٍ أفضل فيه +- مصادقة ثنائية (2FA)، مصادقة ثلاثية (3FA)، مصادقة بيومترية +- وأكثر من ذلك بكثير! -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. +التسعير +نحن لا نقدم خططًا مجانية إلى الأبد، لأنه من المهم بالنسبة لنا أن نبقى مستدامين ونتجاوز اختبار الزمن. بدلاً من ذلك، نقدم خططًا بأسعار معقولة يمكنك مشاركتها بحرية مع عائلتك. يمكنك العثور على مزيد من المعلومات على 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. +الدعم +نحن نفخر بتقديم الدعم البشري. إذا كنت عميلاً مدفوعًا لدينا، يمكنك التواصل عبر team@ente.io وتوقع ردًا من فريقنا في غضون 24 ساعة. -TERMS +الشروط https://ente.io/terms diff --git a/mobile/fastlane/metadata/ios/ar/keywords.txt b/mobile/fastlane/metadata/ios/ar/keywords.txt index 482e69dbc3..531605f2df 100644 --- a/mobile/fastlane/metadata/ios/ar/keywords.txt +++ b/mobile/fastlane/metadata/ios/ar/keywords.txt @@ -1 +1 @@ -صور، تصوير، عائلة، خصوصية، سحابة، نسخ احتياطي، مقاطع الفيديو، صورة، تشفير، تخزين، ألبوم، بديل +صور، تصوير، عائلة، خصوصية، سحابة، نسخ احتياطي، مقاطع الفيديو، صورة، تشفير، تخزين، مجموعة الصور، بديل diff --git a/mobile/fastlane/metadata/ios/eu/description.txt b/mobile/fastlane/metadata/ios/eu/description.txt new file mode 100644 index 0000000000..a98a74300a --- /dev/null +++ b/mobile/fastlane/metadata/ios/eu/description.txt @@ -0,0 +1,33 @@ +Ente is a simple app to automatically backup and organize your photos and videos. + +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. + +We have apps across all platforms, and your photos will seamlessly sync between all your devices in an end-to-end encrypted (e2ee) manner. + +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. + +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. + +We are here to make the safest photos app ever, come join our journey! + +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! + +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. + +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. + +TERMS +https://ente.io/terms diff --git a/mobile/fastlane/metadata/ios/eu/keywords.txt b/mobile/fastlane/metadata/ios/eu/keywords.txt new file mode 100644 index 0000000000..e1462baf51 --- /dev/null +++ b/mobile/fastlane/metadata/ios/eu/keywords.txt @@ -0,0 +1 @@ +photos,photography,family,privacy,cloud,backup,videos,photo,encryption,storage,album,alternative diff --git a/mobile/fastlane/metadata/ios/eu/name.txt b/mobile/fastlane/metadata/ios/eu/name.txt new file mode 100644 index 0000000000..3a991c4abc --- /dev/null +++ b/mobile/fastlane/metadata/ios/eu/name.txt @@ -0,0 +1 @@ +Ente Photos diff --git a/mobile/fastlane/metadata/ios/eu/subtitle.txt b/mobile/fastlane/metadata/ios/eu/subtitle.txt new file mode 100644 index 0000000000..958a35f1c9 --- /dev/null +++ b/mobile/fastlane/metadata/ios/eu/subtitle.txt @@ -0,0 +1 @@ +Encrypted photo storage diff --git a/mobile/fastlane/metadata/ios/lt/description.txt b/mobile/fastlane/metadata/ios/lt/description.txt index 73464e32c3..13249a5328 100644 --- a/mobile/fastlane/metadata/ios/lt/description.txt +++ b/mobile/fastlane/metadata/ios/lt/description.txt @@ -12,7 +12,7 @@ Esame čia tam, kad sukurtume saugiausią nuotraukų programą, prisijunkite pri FUNKCIJOS – Originalios kokybės atsarginės kopijos, nes kiekvienas taškelis yra svarbus -– Šeimos planai, kad galėtumėte dalytis saugykla su šeima +– Šeimos planai, tad galite dalytis saugykla su šeima – Bendrinami aplankai, jei norite, kad partneris galėtų mėgautis jūsų „fotoaparato“ paspaudimais – Albumo nuorodos, kurias galima apsaugoti slaptažodžiu ir nustatyti jų galiojimo laiką – Galimybė atlaisvinti vietą, pašalinant saugiai atsargines kopijas sukūrusius failus @@ -24,9 +24,9 @@ FUNKCIJOS – ir DAR daugiau! KAINODARA -Nesiūlome amžinai nemokamų planų, nes mums svarbu, kad išliktume tvarūs ir atlaikytume laiko išbandymą. Vietoj to siūlome nebrangius planus, kuriais galite laisvai dalytis su savo šeima. Daugiau informacijos galima rasti svetainėje ente.io. +Nesiūlome visam laikui nemokamų planų, nes mums svarbu, kad išliktume tvarūs ir atlaikytume laiko išbandymą. Vietoj to siūlome nebrangius planus, kuriais galite laisvai dalytis su savo šeima. Daugiau informacijos galima rasti svetainėje ente.io. -PALAIKYMAS +PAGALBA Didžiuojamės galėdami pasiūlyti žmogiškąją pagalbą. Jei esate mūsų mokamas klientas, galite susisiekti adresu team@ente.io ir tikėtis mūsų komandos atsakymo per 24 valandas. SĄLYGOS diff --git a/mobile/fastlane/metadata/ios/or/description.txt b/mobile/fastlane/metadata/ios/or/description.txt new file mode 100644 index 0000000000..a98a74300a --- /dev/null +++ b/mobile/fastlane/metadata/ios/or/description.txt @@ -0,0 +1,33 @@ +Ente is a simple app to automatically backup and organize your photos and videos. + +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. + +We have apps across all platforms, and your photos will seamlessly sync between all your devices in an end-to-end encrypted (e2ee) manner. + +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. + +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. + +We are here to make the safest photos app ever, come join our journey! + +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! + +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. + +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. + +TERMS +https://ente.io/terms diff --git a/mobile/fastlane/metadata/ios/or/keywords.txt b/mobile/fastlane/metadata/ios/or/keywords.txt new file mode 100644 index 0000000000..e1462baf51 --- /dev/null +++ b/mobile/fastlane/metadata/ios/or/keywords.txt @@ -0,0 +1 @@ +photos,photography,family,privacy,cloud,backup,videos,photo,encryption,storage,album,alternative diff --git a/mobile/fastlane/metadata/ios/or/name.txt b/mobile/fastlane/metadata/ios/or/name.txt new file mode 100644 index 0000000000..3a991c4abc --- /dev/null +++ b/mobile/fastlane/metadata/ios/or/name.txt @@ -0,0 +1 @@ +Ente Photos diff --git a/mobile/fastlane/metadata/ios/or/subtitle.txt b/mobile/fastlane/metadata/ios/or/subtitle.txt new file mode 100644 index 0000000000..958a35f1c9 --- /dev/null +++ b/mobile/fastlane/metadata/ios/or/subtitle.txt @@ -0,0 +1 @@ +Encrypted photo storage diff --git a/mobile/fastlane/metadata/ios/pt_BR/description.txt b/mobile/fastlane/metadata/ios/pt_BR/description.txt new file mode 100644 index 0000000000..23ec5ffbfa --- /dev/null +++ b/mobile/fastlane/metadata/ios/pt_BR/description.txt @@ -0,0 +1,33 @@ +Ente é um aplicativo simples para copiar com segurança automaticamente e organizar suas fotos e vídeos. + +Se você esteve procurando por uma alternativa amigável à privacidade para preservar suas memórias, você veio no lugar certo. Com Ente, elas são armazenadas com criptografia de ponta a ponta (e2ee). Isso significa que só você pode vê-las. + +Temos aplicativos de código aberto em Android, iOS, web e desktop, e suas fotos vão sincronizar perfeitamente entre todas elas de forma criptografada (e2ee). + +Ente também torna simples compartilhar seus álbuns com seus entes queridos. Você pode compartilhá-los diretamente com outros usuários do Ente, criptografados de ponta a ponta; ou com links publicamente visíveis. + +Seus dados criptografados são replicados em locais diferentes, incluindo um abrigo avançado em Paris. Nós levamos a sério a nossa postura e fazemos que seja fácil garantir que suas memórias vivam. + +Estamos aqui para se tornar o aplicativo de fotos mais seguro de todos, venha e participe de nossa jornada! + +RECURSOS +— Cópia de resolução original, por cada pixel ser importante +- Planos familiares, para você poder compartilhar o armazenamento com sua família +- Pastas compartilhadas, caso você queira que seu parceiro aproveite seus cliques na "Câmera" +- Links de álbuns, que podem ser protegidos com uma senha e definidos para expirar +- Capacidade de liberar espaço, removendo arquivos salvos com segurança +- Editor de imagens, para adicionar últimos toques +- Favoritar, ocultar e reviver suas memórias, pois elas são preciosas +- Importar num clique só para todos os fornecedores principais de armazenamento +- Tema escuro, porque suas fotos parecem bem nele +- 2FA, 3FA, Autenticação biométrica +- e MUITO mais! + +PREÇO +Nós não oferecemos planos grátis para sempre, porque é importante para nós que permaneçamos sustentáveis e resistamos à prova do tempo. Em vez disso, oferecemos planos acessíveis que você pode compartilhar livremente com seus familiares. Você pode encontrar mais informações em ente.io. + +AJUDA +Nós temos orgulho em oferecer apoio humano. Se você é um cliente pago, você pode contatar em team@ente.io e esperar uma resposta de nossa equipe dentro de 1 dia. + +TERMOS +https://ente.io/terms diff --git a/mobile/fastlane/metadata/ios/pt_BR/keywords.txt b/mobile/fastlane/metadata/ios/pt_BR/keywords.txt new file mode 100644 index 0000000000..e8081a0336 --- /dev/null +++ b/mobile/fastlane/metadata/ios/pt_BR/keywords.txt @@ -0,0 +1 @@ +fotos,fotografia,família,privacidade,nuvem,cópiadesegurança,vídeos,foto,criptografia,armazenamento,álbum,alternativa diff --git a/mobile/fastlane/metadata/ios/pt_BR/name.txt b/mobile/fastlane/metadata/ios/pt_BR/name.txt new file mode 100644 index 0000000000..40a1cc3114 --- /dev/null +++ b/mobile/fastlane/metadata/ios/pt_BR/name.txt @@ -0,0 +1 @@ +Ente Fotos diff --git a/mobile/fastlane/metadata/ios/pt_BR/subtitle.txt b/mobile/fastlane/metadata/ios/pt_BR/subtitle.txt new file mode 100644 index 0000000000..c7fc3ef6cd --- /dev/null +++ b/mobile/fastlane/metadata/ios/pt_BR/subtitle.txt @@ -0,0 +1 @@ +Armazenamento de fotos criptografado diff --git a/mobile/fastlane/metadata/ios/pt_PT/description.txt b/mobile/fastlane/metadata/ios/pt_PT/description.txt new file mode 100644 index 0000000000..09e3bcf93f --- /dev/null +++ b/mobile/fastlane/metadata/ios/pt_PT/description.txt @@ -0,0 +1,33 @@ +Ente é uma aplicação simples feita para fazer backup automaticamente e organizar as suas fotos e vídeos. + +Se busca por uma alternativa mais privada para preservar as suas memórias, chegaste ao lugar correto. Com Ente, eles são armazenados em encriptação de ponta a ponta (e2ee). Isto significa que só vos podeis vê-las. + +Já temos aplicações em todas as plataformas, e as suas fotos sincronizam perfeitamente em todos os dispositivos numa maneira de encriptação de ponta a ponta (e2ee). + +O Ente também simplifica a partilha de álbuns com os seus entes queridos. Também pode partilhá-los diretamente com outros utilizadores do Ente, encriptado de ponta a ponta; ou com ligações visíveis publicamente. + +Os seus dados encriptados são armazenados em várias localizações, incluindo um abrigo avançado em Paris. Levamos a nossa postura seriamente e facilitamos que as suas memórias vivenciem. + +Aqui estamos, fazendo a aplicação de fotos MAIS segura, vêm e adere a nossa jornada! + +FUNCIONALIDADES +- Backups de qualidade original, por cada píxel ser importante +- Planos familiares, para partilhar o armazenamento com a sua família +- Pastas partilhadas, se deseja que o seu parceiro desfrute dos cliques da "Câmara" +- Links de álbuns, para poder ser protegido por uma palavra-passe e definido para expiração +- Capacidade de liberar espaço, eliminando ficheiros com backups já feitos +- Editor de imagens, para dar toques finais +- Adicione aos favoritos, oculte e reanime as suas memórias, já que elas são preciosas +- Importação num clique de todos os principais fornecedores de armazenamento +- Tema escuro, porque as suas fotos ficam bonitas nele +- 2FA, 3FA, autenticação biométrica +- e MUITO mais! + +PREÇOS +Não é oferecido pacotes gratuitos para sempre, porque é importante que nos mantenha sustentável e resistentes ao teste do tempo. Ao invés, oferecemos planos acessíveis para poder partilhar livremente com a sua família. Pode achar mais informações em ente.io. + +SUPORTE +Orgulhamo-nos de oferecer suporte humano. Se é um cliente pago, pode contactar ao team@ente.io e esperar uma resposta da nossa equipa dentre 1 dia. + +TERMOS +https://ente.io/terms diff --git a/mobile/fastlane/metadata/ios/pt_PT/keywords.txt b/mobile/fastlane/metadata/ios/pt_PT/keywords.txt new file mode 100644 index 0000000000..fb3ab2aa69 --- /dev/null +++ b/mobile/fastlane/metadata/ios/pt_PT/keywords.txt @@ -0,0 +1 @@ +fotos, fotografia, família, privacidade, nuvem, backup, vídeos, foto, encriptação, armazenamento, álbum, alternativa diff --git a/mobile/fastlane/metadata/ios/pt_PT/name.txt b/mobile/fastlane/metadata/ios/pt_PT/name.txt new file mode 100644 index 0000000000..3a991c4abc --- /dev/null +++ b/mobile/fastlane/metadata/ios/pt_PT/name.txt @@ -0,0 +1 @@ +Ente Photos diff --git a/mobile/fastlane/metadata/ios/pt_PT/subtitle.txt b/mobile/fastlane/metadata/ios/pt_PT/subtitle.txt new file mode 100644 index 0000000000..568ad02358 --- /dev/null +++ b/mobile/fastlane/metadata/ios/pt_PT/subtitle.txt @@ -0,0 +1 @@ +Armazenamento de fotos encriptado diff --git a/mobile/fastlane/metadata/ios/ru/description.txt b/mobile/fastlane/metadata/ios/ru/description.txt index dc90c44334..dd01ad1300 100644 --- a/mobile/fastlane/metadata/ios/ru/description.txt +++ b/mobile/fastlane/metadata/ios/ru/description.txt @@ -1,33 +1,33 @@ -Ente - это простое приложение для автоматического резервного копирования и упорядочения ваших фотографий и видео. +Ente — это простое приложение для автоматического резервного копирования и организации ваших фото и видео. -Если вы ищете подходящую для вас альтернативу для сохранения ваших воспоминаний, вы попали в нужное место. В Ente, они хранятся в сквозном шифровании (e2ee). Это означает то, что только вы можете их просматривать. +Если вы ищете конфиденциальную альтернативу для сохранения своих воспоминаний, то вы попали по адресу. В Ente они хранятся с использованием сквозного шифрования (E2EE). Это означает, что только вы можете их просматривать. -У нас есть приложения на всех платформах, и ваши фотографии будут легко синхронизироваться со всеми вашими устройствами с помощью сквозного шифрования (e2ee). +У нас есть приложения для всех платформ, и ваши фото будут синхронизироваться между всеми вашими устройствами с использованием сквозного шифрования (E2EE). -В Ente также проще поделиться своими альбомами со своими близкими. Вы можете либо поделиться ими напрямую с другими пользователями Ente, со сквозным шифрованием; либо с помощью ссылок для публичного просмотра. +Ente также упрощает обмен вашими альбомами с близкими. Вы можете делиться ими напрямую с другими пользователями Ente с использованием сквозного шифрования или через общедоступные ссылки. -Ваши зашифрованные данные хранятся в нескольких локациях, включая скрытое убежище в Париже. Мы серьезно относимся к потомству и легко сделаем так, что ваши воспоминания переживут и вас. +Ваши зашифрованные данные хранятся в нескольких локациях, включая бункер в Париже. Мы серьёзно относимся к сохранению наследия и упрощаем задачу сохранения ваших воспоминаний. -Мы здесь, чтобы сделать самое безопасное приложение для хранения фотографий, присоединяйтесь к нашему путешествию! +Мы существуем, чтобы создать самое безопасное приложение для фото. Присоединяйтесь к нашему путешествию! ОСОБЕННОСТИ -- Оригинальное качество резервных копий, потому что важен каждый пиксел -- Семейные планы, чтобы вы могли делиться хранилищем с вашей семьей -- Общие папки, если вы хотите, чтобы ваш партнер наслаждался кликами вашей "Камеры" -- Ссылки для альбома, которые могут быть защищены паролем и установлены на срок действия -- Возможность освободить место путем удаления файлов, которые были безопасно сохранены -- Редактор изображений, для добавления финальных штрихов -- Избранное, скрывать и доверять вашим воспоминаниям, потому что они драгоценны -- Импорт в один клик из всех основных приложений для хранения -- Темная тема, потому что в ней хорошо выглядят ваши фотографии -- 2ФА, 3ФА, биометрическая аутентификация -- и ещё МНОГОЕ другое! +- Резервные копии в оригинальном качестве, потому что каждый пиксель важен +- Семейные тарифы, чтобы вы могли делиться хранилищем с семьёй +- Общие папки, если вы хотите, чтобы ваш партнёр мог наслаждаться вашими снимками +- Ссылки на альбомы, которые можно защитить паролем и установить срок действия +- Возможность освободить место от файлов, которые уже надёжно сохранены +- Редактор изображений, чтобы добавить последние штрихи +- Отмечайте избранное, скрывайте и переживайте заново свои воспоминания, ведь они бесценны +- Импорт одним кликом из всех крупных сервисов хранения фото +- Тёмная тема, потому что ваши фото выглядят в ней хорошо +- двух/трёхфакторная и биометрическая аутентификации +- и многое другое! + +СТОИМОСТЬ +Мы не предлагаем вечно бесплатные тарифы, потому что для нас важно оставаться устойчивыми и выдержать испытание временем. Вместо этого мы предлагаем доступные тарифы, которыми вы можете свободно делиться с семьёй. Подробности вы можете найти на ente.io. ПОДДЕРЖКА -Мы не предлагаем бесконечные бесплатные планы, потому что для нас важно оставаться устойчивыми и выдерживать испытание временем. Вместо этого мы предлагаем доступные по цене планы, которыми вы можете свободно делиться с вашей семьей. Дополнительную информацию можно найти на ente.io. +Мы гордимся тем, что предлагаем человеческую поддержку. Если вы подписаны на платный тариф, вы можете написать на team@ente.io и получить ответ от нашей команды в течение 24 часов. УСЛОВИЯ -Мы гордимся тем, что предлагаем поддержку с живыми людьми. Если вы являетесь нашим платным клиентом, вы можете связаться по электронному адресу team@ente.io и получить ответ от нашей команды в течение 24 часов. - -ЦЕНА https://ente.io/terms diff --git a/mobile/fastlane/metadata/ios/ru/name.txt b/mobile/fastlane/metadata/ios/ru/name.txt index 92f417f65f..3a991c4abc 100644 --- a/mobile/fastlane/metadata/ios/ru/name.txt +++ b/mobile/fastlane/metadata/ios/ru/name.txt @@ -1 +1 @@ -Фотографии Ente +Ente Photos diff --git a/mobile/fastlane/metadata/ios/ru/subtitle.txt b/mobile/fastlane/metadata/ios/ru/subtitle.txt index 990f6a1af7..0484aaac8d 100644 --- a/mobile/fastlane/metadata/ios/ru/subtitle.txt +++ b/mobile/fastlane/metadata/ios/ru/subtitle.txt @@ -1 +1 @@ -Зашифрованное хранилище фотографий +Зашифрованное фото хранилище diff --git a/mobile/fastlane/metadata/playstore/ar/full_description.txt b/mobile/fastlane/metadata/playstore/ar/full_description.txt index 7f3774d3af..94cc917f5e 100644 --- a/mobile/fastlane/metadata/playstore/ar/full_description.txt +++ b/mobile/fastlane/metadata/playstore/ar/full_description.txt @@ -4,27 +4,27 @@ Ente هو تطبيق بسيط لنسخ الصور ومقاطع الفيديو ا لدينا تطبيقات على أندرويد، اي او اس، ويب، وسطح المكتب، وسيتم مزامنة صورك بسلاسة بين جميع أجهزتك بطريقة مشفرة من طرف إلى طرف (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 يُسهِّل مشاركة ألبوماتك مع أحبائك. يمكنك إما مشاركتها مباشرةً مع مستخدمي Ente الآخرين مشفرةً من طرف إلى طرف، أو عبر روابط قابلة للمشاهدة العامة. -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. +تُخزَّن بياناتك المشفرة في مواقع متعددة، بما في ذلك مَلجأ مقاوم للكوارث في باريس. نحن نأخذ الحفاظ على الإرث الرقمي على محمل الجِدّ، ونُسهِّل عليك ضمان بقاء ذكرياتك بعد رحيلك. -We are here to make the safest photos app ever, come join our journey! +نحن هنا لبناء أكثر تطبيق صور أمانًا على الإطلاق. انضم إلينا في رحلتنا! -✨ 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! +✨ مزايا +- جودة النسخ الاحتياطية الأصلية، لأن كل بكسل مهم +- خطط عائلية، حتى تتمكن من مشاركة التخزين مع عائلتك +- شارك لحظاتك العفوية مع من تُحب عبر مجلدات مشتركة +- روابط الألبوم، يمكن تأمينها بكلمة مرور وضَبْط تاريخ انتهائها +- القدرة على تحرير المساحة، عن طريق إزالة الملفات التي تم نسخها احتياطيًا بأمان +- محرر الصورة، لإضافة اللمسات النهائية +- ضَعْ ذكرياتك في المفضلة، أخفِها، وعِشها من جديد؛ فهي ثمينة +- استيراد بنقرة واحدة من جوجل، وآبل، والقرص الصلب الخاص بك، وغيرها +- الوضع الداكن، لأن صورك تظهر بشكلٍ أفضل فيه +- استيراد بنقرة واحدة من جوجل، وآبل، والقرص الصلب الخاص بك، وغيرها. +- وغير ذلك الكثير! -💲 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. +💲السعر +لا نقدِّم خططًا مجانية دائمة، لأننا نحرص على ضمان استدامة خدماتنا واستمراريتها على المدى الطويل. بدلًا من ذلك، نُقدِّم خططًا بأسعار معقولة يمكنك مشاركتها بحرية مع عائلتك. يمكنك العثور على مزيد من المعلومات على موقع 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 +🙋 الدعم +نحن نعتز بتقديم خدمة عملاء مباشرةً من فريق بشري متخصص. إذا كنتَ عميلاً مدفوعًا لدينا، يُمكنك التواصل مع team@ente.io وتوقع ردًا من فريقنا خلال 24 ساعة. \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/eu/full_description.txt b/mobile/fastlane/metadata/playstore/eu/full_description.txt new file mode 100644 index 0000000000..ec999a783c --- /dev/null +++ b/mobile/fastlane/metadata/playstore/eu/full_description.txt @@ -0,0 +1,30 @@ +Ente is a simple app to automatically backup and organize your photos and videos. + +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. + +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. + +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. + +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. + +We are here to make the safest photos app ever, come join our journey! + +✨ 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! + +💲 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. + +🙋 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 diff --git a/mobile/fastlane/metadata/playstore/eu/short_description.txt b/mobile/fastlane/metadata/playstore/eu/short_description.txt new file mode 100644 index 0000000000..6c00229894 --- /dev/null +++ b/mobile/fastlane/metadata/playstore/eu/short_description.txt @@ -0,0 +1 @@ +Encrypted photo storage - backup, organize and share your photos and videos \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/eu/title.txt b/mobile/fastlane/metadata/playstore/eu/title.txt new file mode 100644 index 0000000000..97fdef3be7 --- /dev/null +++ b/mobile/fastlane/metadata/playstore/eu/title.txt @@ -0,0 +1 @@ +Ente Photos \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/lt/full_description.txt b/mobile/fastlane/metadata/playstore/lt/full_description.txt index ecf818aaa5..090a4b415a 100644 --- a/mobile/fastlane/metadata/playstore/lt/full_description.txt +++ b/mobile/fastlane/metadata/playstore/lt/full_description.txt @@ -12,7 +12,7 @@ Esame čia tam, kad sukurtume saugiausią nuotraukų programą, prisijunkite pri ✨ FUNKCIJOS – Originalios kokybės atsarginės kopijos, nes kiekvienas taškelis yra svarbus -– Šeimos planai, kad galėtumėte dalytis saugykla su šeima +– Šeimos planai, tad galite dalytis saugykla su šeima – Bendrinami aplankai, jei norite, kad partneris galėtų mėgautis jūsų „fotoaparato“ paspaudimais – Albumo nuorodos, kurias galima apsaugoti slaptažodžiu ir nustatyti jų galiojimo laiką – Galimybė atlaisvinti vietą, pašalinant saugiai atsargines kopijas sukūrusius failus @@ -24,7 +24,7 @@ Esame čia tam, kad sukurtume saugiausią nuotraukų programą, prisijunkite pri – ir DAR daugiau! 💲 KAINODARA -Nesiūlome amžinai nemokamų planų, nes mums svarbu, kad išliktume tvarūs ir atlaikytume laiko išbandymą. Vietoj to siūlome nebrangius planus, kuriais galite laisvai dalytis su savo šeima. Daugiau informacijos galima rasti svetainėje ente.io. +Nesiūlome visam laikui nemokamų planų, nes mums svarbu, kad išliktume tvarūs ir atlaikytume laiko išbandymą. Vietoj to siūlome nebrangius planus, kuriais galite laisvai dalytis su savo šeima. Daugiau informacijos galima rasti svetainėje ente.io. -🙋 PALAIKYMAS +🙋 PAGALBA Didžiuojamės galėdami pasiūlyti žmogiškąją pagalbą. Jei esate mūsų mokamas klientas, galite susisiekti adresu team@ente.io ir tikėtis mūsų komandos atsakymo per 24 valandas. \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/or/full_description.txt b/mobile/fastlane/metadata/playstore/or/full_description.txt new file mode 100644 index 0000000000..ec999a783c --- /dev/null +++ b/mobile/fastlane/metadata/playstore/or/full_description.txt @@ -0,0 +1,30 @@ +Ente is a simple app to automatically backup and organize your photos and videos. + +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. + +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. + +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. + +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. + +We are here to make the safest photos app ever, come join our journey! + +✨ 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! + +💲 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. + +🙋 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 diff --git a/mobile/fastlane/metadata/playstore/or/short_description.txt b/mobile/fastlane/metadata/playstore/or/short_description.txt new file mode 100644 index 0000000000..6c00229894 --- /dev/null +++ b/mobile/fastlane/metadata/playstore/or/short_description.txt @@ -0,0 +1 @@ +Encrypted photo storage - backup, organize and share your photos and videos \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/or/title.txt b/mobile/fastlane/metadata/playstore/or/title.txt new file mode 100644 index 0000000000..97fdef3be7 --- /dev/null +++ b/mobile/fastlane/metadata/playstore/or/title.txt @@ -0,0 +1 @@ +Ente Photos \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/pt_BR/full_description.txt b/mobile/fastlane/metadata/playstore/pt_BR/full_description.txt new file mode 100644 index 0000000000..f1a705c14a --- /dev/null +++ b/mobile/fastlane/metadata/playstore/pt_BR/full_description.txt @@ -0,0 +1,30 @@ +Ente é um aplicativo básico para salvar e organizar suas fotos e vídeos com segurança. + +Se você esteve procurando uma alternativa de ótima privacidade para preservar suas memórias, você chegou ao lugar certo. Com Ente, suas fotos e vídeos são criptografados de ponta a ponta (e2ee). Significando que somente você pode vê-las. + +Temos sites/aplicativos para Android, iOS e Computador, e suas fotos serão sincronizadas sem parar em todos os dispositivos numa maneira de criptografia de ponta a ponta (e2ee). + +Ente facilita o compartilhamento de álbuns entre entes queridos. Você pode compartilhá-los diretamente com outros usuários Ente, criptografados de ponta a ponta; ou links disponíveis publicamente. + +Seus dados criptografados são armazenados em vários locais, incluindo até um refúgio avançado em Paris. Nós levamos nossa postura a sério e facilitamos que você se certifique que suas memórias vivam. + +Estamos aqui para tornar o Ente Photos mais seguro, venha e junte-se à nossa jornada! + +✨ RECURSOS +- Cópia em qualidade original, por cada píxel ser importante +- Planos familiares, para você poder compartilhar o armazenamento com seus familiares +- Pastas compartilhadas, caso queira que seu parceiro aproveite os cliques da "Câmera" +- Links de álbuns, em que podem ser protegidos com senhas e definidos aquando expirar +- Capacidade de liberar espaço, removendo arquivos salvos com segurança +- Editor de imagens, para adicionar últimos toques +- Favoritar, ocultar e reviver suas memórias, por serem preciosas +- A importação em só um clique do Google, Apple, seu disco rígido e mais +- Tema escuro, por suas fotos parecem boas nele +- 2FA, 3FA, Autenticação biométrica +- e MUITO mais! + +💲 PREÇO +Não oferecemos planos grátis para sempre, porque é importante para nós que nos mantenha sustentáveis e resistamos à prova do tempo. Em vez disso, oferecemos planos acessíveis que você pode compartilhar livremente com seus familiares. Você pode saber mais informações em ente.io + +🙋 AJUDA +Nós temos orgulho em oferecer apoio humano. Se você é um cliente pago, você pode contatar em team@ente.io e esperar uma resposta de nossa equipe dentro de 1 dia. \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/pt_BR/short_description.txt b/mobile/fastlane/metadata/playstore/pt_BR/short_description.txt new file mode 100644 index 0000000000..3b17638d30 --- /dev/null +++ b/mobile/fastlane/metadata/playstore/pt_BR/short_description.txt @@ -0,0 +1 @@ +Armazenamento criptografado de fotos - salve com segurança, organize e compartilhe suas fotos e vídeos \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/pt_BR/title.txt b/mobile/fastlane/metadata/playstore/pt_BR/title.txt new file mode 100644 index 0000000000..536837e6bb --- /dev/null +++ b/mobile/fastlane/metadata/playstore/pt_BR/title.txt @@ -0,0 +1 @@ +Ente Fotos \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/pt_PT/full_description.txt b/mobile/fastlane/metadata/playstore/pt_PT/full_description.txt new file mode 100644 index 0000000000..f1757bf090 --- /dev/null +++ b/mobile/fastlane/metadata/playstore/pt_PT/full_description.txt @@ -0,0 +1,30 @@ +Ente é uma aplicação simples feita para fazer backup automaticamente e organizar as suas fotos e vídeos. + +Se busca por uma alternativa mais privada para preservar as suas memórias, chegaste ao lugar correto. Com Ente, eles são armazenados em encriptação de ponta a ponta (e2ee). Isto significa que só vos podeis vê-las. + +Temos aplicações para Android, iOS, Web e ambiente de trabalho, e as suas fotografias serão perfeitamente sincronizadas entre todos os seus dispositivos de uma forma encriptada de ponta a ponta (e2ee). + +O Ente também simplifica a partilha dos seus álbuns com os seus entes queridos Pode partilhá-los diretamente com outros utilizadores do Ente, encriptados de ponta a ponta, ou com ligações publicamente visíveis. + +Os seus dados encriptados são armazenados em vários locais, incluindo um abrigo de emergência em Paris. Levamos a posteridade a sério e facilitamos a tarefa de garantir que as suas memórias perdurem para além de si. + +Estamos aqui para criar a aplicação de fotografias mais segura de sempre, junte-se à nossa viagem! + +✨ RECURSOS +- Cópias de segurança de qualidade original, porque cada pixel é importante +- Planos familiares, para que possa partilhar o armazenamento com a sua família +- Pastas partilhadas, caso queira que o seu parceiro desfrute dos seus cliques na “Câmara” +- Links para álbuns, que podem ser protegidas com uma palavra-passe e definidas para expirar +- Capacidade de libertar espaço, removendo ficheiros dos quais foi feita uma cópia de segurança segura +- Editor de imagens, para dar os retoques finais +- Favoritar, ocultar e reviver suas memórias, pois elas são preciosas +- Importação com um clique do Google, da Apple, do seu disco rígido e muito mais +- Tema escuro, porque as suas fotografias ficam bem com ele +- 2FA, 3FA, autenticação biométrica +- and a LOT more! + +💲 PREÇOS +Não oferecemos planos gratuitos para sempre, porque é importante para nós mantermo-nos sustentáveis e resistirmos ao teste do tempo. Em vez disso, oferecemos planos acessíveis que pode partilhar livremente com a sua família. Pode encontrar mais informações em ente.io. + +🙋 SUPPORT +Orgulhamo-nos de oferecer um apoio humano. Se for nosso cliente pago, pode contactar team@ente.io e esperar uma resposta da nossa equipa no prazo de 24 horas. \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/pt_PT/short_description.txt b/mobile/fastlane/metadata/playstore/pt_PT/short_description.txt new file mode 100644 index 0000000000..071e170ad5 --- /dev/null +++ b/mobile/fastlane/metadata/playstore/pt_PT/short_description.txt @@ -0,0 +1 @@ +Armazenamento de fotos encriptado - faça backup, organize e partilhe as suas fotos e vídeos \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/pt_PT/title.txt b/mobile/fastlane/metadata/playstore/pt_PT/title.txt new file mode 100644 index 0000000000..97fdef3be7 --- /dev/null +++ b/mobile/fastlane/metadata/playstore/pt_PT/title.txt @@ -0,0 +1 @@ +Ente Photos \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/ru/full_description.txt b/mobile/fastlane/metadata/playstore/ru/full_description.txt index def3ae693b..08ef1c83e3 100644 --- a/mobile/fastlane/metadata/playstore/ru/full_description.txt +++ b/mobile/fastlane/metadata/playstore/ru/full_description.txt @@ -1,30 +1,30 @@ -Ente - это простое приложение для автоматического резервного копирования и упорядочения ваших фотографий и видео. +Ente — это простое приложение для автоматического резервного копирования и организации ваших фото и видео. -Если вы ищете подходящую для вас конфиденциальную альтернативу для сохранения ваших воспоминаний, вы попали в нужное место. В Ente, они хранятся в сквозном шифровании (e2ee). Это означает то, что только вы можете их просматривать. +Если вы ищете конфиденциальную альтернативу для сохранения ваших воспоминаний, то вы попали по адресу. В Ente они хранятся с использованием сквозного шифрования (E2EE). Это означает, что только вы можете их просматривать. -У нас есть приложения с открытым исходным кодом на всех платформах, и ваши фотографии будут беспрепятственно синхронизироваться со всеми вашими устройствами с помощью сквозного шифрования (e2ee). +Наши приложения доступны для Android, iOS, браузера и компьютера, и ваши фото будут синхронизироваться между всеми вашими устройствами с использованием сквозного шифрования (E2EE). -В Ente также проще поделиться своими альбомами со своими близкими. Вы можете либо поделиться ими напрямую с другими пользователями Ente, со сквозным шифрованием; либо с помощью ссылок для публичного просмотра. +Ente также упрощает обмен вашими альбомами с близкими. Вы можете делиться ими напрямую с другими пользователями Ente с использованием сквозного шифрования или через общедоступные ссылки. -Ваши зашифрованные данные хранятся в нескольких локациях, включая скрытое убежище в Париже. Мы серьезно относимся к потомству и легко сделаем так, что ваши воспоминания переживут и вас. +Ваши зашифрованные данные хранятся в нескольких локациях, включая бункер в Париже. Мы серьёзно относимся к сохранению наследия и упрощаем задачу сохранения ваших воспоминаний. -Мы здесь, чтобы сделать самое безопасное приложение для хранения фотографий, присоединяйтесь к нашему путешествию! +Мы существуем, чтобы создать самое безопасное приложение для фото. Присоединяйтесь к нашему путешествию! ✨ ОСОБЕННОСТИ -- Оригинальное качество резервных копий, потому что важен каждый пиксел -- Семейные планы, чтобы вы могли делиться хранилищем с вашей семьей -- Общие папки, если вы хотите, чтобы ваш партнер наслаждался кликами вашей "Камеры" -- Ссылки для альбома, которые могут быть защищены паролем и установлены на срок действия -- Возможность освободить место путем удаления файлов, которые были безопасно сохранены -- Редактор изображений, для добавления финальных штрихов -- Избранное, скрывать и доверять вашим воспоминаниям, потому что они драгоценны -- Импорт в один клик из Google, Apple, вашего жесткого диска и многого другого -- Темная тема, потому что в ней хорошо выглядят ваши фотографии -- 2ФА, 3ФА, биометрическая аутентификация -- и ещё МНОГОЕ другое! +- Резервные копии в оригинальном качестве, потому что каждый пиксель важен +- Семейные тарифы, чтобы вы могли делиться хранилищем с семьёй +- Общие папки, если вы хотите, чтобы ваш партнёр мог наслаждаться вашими снимками +- Ссылки на альбомы, которые можно защитить паролем и установить срок действия +- Возможность освободить место от файлов, которые уже надёжно сохранены +- Редактор изображений, чтобы добавить последние штрихи +- Отмечайте избранное, скрывайте и переживайте заново свои воспоминания, ведь они бесценны +- Импорт одним кликом из Google, Apple, вашего жёсткого диска и не только +- Тёмная тема, потому что ваши фото выглядят в ней хорошо +- двух/трёхфакторная и биометрическая аутентификации +- и многое другое! -💲 ЦЕНА -Мы не предлагаем бесконечные бесплатные планы, потому что для нас важно оставаться устойчивыми и выдерживать испытание временем. Вместо этого мы предлагаем доступные по цене планы, которыми вы можете свободно делиться с вашей семьей. Дополнительную информацию можно найти на сайте ente.io. +💲 СТОИМОСТЬ +Мы не предлагаем вечно бесплатные тарифы, потому что для нас важно оставаться устойчивыми и выдержать испытание временем. Вместо этого мы предлагаем доступные тарифы, которыми вы можете свободно делиться с семьёй. Подробности вы можете найти на ente.io. 🙋 ПОДДЕРЖКА -Мы гордимся тем, что предлагаем поддержку с живыми людьми. Если вы являетесь нашим платным клиентом, вы можете связаться по электронному адресу team@ente.io и получить ответ от нашей команды в течение 24 часов. \ No newline at end of file +Мы гордимся тем, что предлагаем человеческую поддержку. Если вы подписаны на платный тариф, вы можете написать на team@ente.io и получить ответ от нашей команды в течение 24 часов. \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/ru/short_description.txt b/mobile/fastlane/metadata/playstore/ru/short_description.txt index d64bddbec7..157e4ca81f 100644 --- a/mobile/fastlane/metadata/playstore/ru/short_description.txt +++ b/mobile/fastlane/metadata/playstore/ru/short_description.txt @@ -1 +1 @@ -Зашифрованное хранилище фотографий для резервного копирования и обмена \ No newline at end of file +Зашифрованное фото хранилище для резервного копирования и обмена \ No newline at end of file diff --git a/mobile/fastlane/metadata/playstore/ru/title.txt b/mobile/fastlane/metadata/playstore/ru/title.txt index 3b1c079da3..97fdef3be7 100644 --- a/mobile/fastlane/metadata/playstore/ru/title.txt +++ b/mobile/fastlane/metadata/playstore/ru/title.txt @@ -1 +1 @@ -Фотографии Ente \ No newline at end of file +Ente Photos \ No newline at end of file diff --git a/mobile/ios/Podfile b/mobile/ios/Podfile index b4e1b4fc8c..1b0ab1d4d2 100644 --- a/mobile/ios/Podfile +++ b/mobile/ios/Podfile @@ -1,6 +1,8 @@ # Uncomment this line to define a global platform for your project platform :ios, '13.0' +source 'https://github.com/ente-io/ffmpeg-kit-custom-repo-ios.git' +source 'https://cdn.cocoapods.org/' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/mobile/ios/Podfile.lock b/mobile/ios/Podfile.lock index 69f0686047..d76dd0c63d 100644 --- a/mobile/ios/Podfile.lock +++ b/mobile/ios/Podfile.lock @@ -1,4 +1,6 @@ PODS: + - app_links (0.0.2): + - Flutter - background_fetch (1.3.7): - Flutter - battery_info (0.0.1): @@ -12,12 +14,9 @@ PODS: - Flutter - device_info_plus (0.0.1): - Flutter - - ffmpeg-kit-ios-full-gpl (6.0) - - ffmpeg_kit_flutter_full_gpl (6.0.3): - - ffmpeg_kit_flutter_full_gpl/full-gpl (= 6.0.3) - - Flutter - - ffmpeg_kit_flutter_full_gpl/full-gpl (6.0.3): - - ffmpeg-kit-ios-full-gpl (= 6.0) + - ffmpeg_kit_custom (6.0.3) + - ffmpeg_kit_flutter (6.0.3): + - ffmpeg_kit_custom - Flutter - file_saver (0.0.1): - Flutter @@ -54,8 +53,6 @@ PODS: - GoogleUtilities/UserDefaults (~> 8.0) - nanopb (~> 3.30910.0) - Flutter (1.0.0) - - flutter_app_icon_changer (0.0.1): - - Flutter - flutter_email_sender (0.0.1): - Flutter - flutter_image_compress_common (1.0.0): @@ -111,8 +108,6 @@ PODS: - Flutter - image_editor_common (1.0.0): - Flutter - - image_picker_ios (0.0.1): - - Flutter - in_app_purchase_storekit (0.0.1): - Flutter - FlutterMacOS @@ -195,11 +190,11 @@ PODS: - SDWebImageWebPCoder (0.14.6): - libwebp (~> 1.0) - SDWebImage/Core (~> 5.17) - - Sentry/HybridSDK (8.44.0) - - sentry_flutter (8.13.2): + - Sentry/HybridSDK (8.46.0) + - sentry_flutter (8.14.1): - Flutter - FlutterMacOS - - Sentry/HybridSDK (= 8.44.0) + - Sentry/HybridSDK (= 8.46.0) - share_plus (0.0.1): - Flutter - shared_preferences_foundation (0.0.1): @@ -231,8 +226,6 @@ PODS: - Flutter - ua_client_hints (1.4.1): - Flutter - - uni_links (0.0.1): - - Flutter - url_launcher_ios (0.0.1): - Flutter - video_player_avfoundation (0.0.1): @@ -247,18 +240,18 @@ PODS: - Flutter DEPENDENCIES: + - app_links (from `.symlinks/plugins/app_links/ios`) - background_fetch (from `.symlinks/plugins/background_fetch/ios`) - battery_info (from `.symlinks/plugins/battery_info/ios`) - connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`) - cupertino_http (from `.symlinks/plugins/cupertino_http/darwin`) - dart_ui_isolate (from `.symlinks/plugins/dart_ui_isolate/ios`) - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`) - - ffmpeg_kit_flutter_full_gpl (from `.symlinks/plugins/ffmpeg_kit_flutter_full_gpl/ios`) + - ffmpeg_kit_flutter (from `.symlinks/plugins/ffmpeg_kit_flutter/ios`) - file_saver (from `.symlinks/plugins/file_saver/ios`) - firebase_core (from `.symlinks/plugins/firebase_core/ios`) - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) - Flutter (from `Flutter`) - - flutter_app_icon_changer (from `.symlinks/plugins/flutter_app_icon_changer/ios`) - flutter_email_sender (from `.symlinks/plugins/flutter_email_sender/ios`) - flutter_image_compress_common (from `.symlinks/plugins/flutter_image_compress_common/ios`) - flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`) @@ -269,7 +262,6 @@ DEPENDENCIES: - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) - home_widget (from `.symlinks/plugins/home_widget/ios`) - image_editor_common (from `.symlinks/plugins/image_editor_common/ios`) - - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - in_app_purchase_storekit (from `.symlinks/plugins/in_app_purchase_storekit/darwin`) - integration_test (from `.symlinks/plugins/integration_test/ios`) - launcher_icon_switcher (from `.symlinks/plugins/launcher_icon_switcher/ios`) @@ -299,7 +291,6 @@ DEPENDENCIES: - sqlite3_flutter_libs (from `.symlinks/plugins/sqlite3_flutter_libs/darwin`) - system_info_plus (from `.symlinks/plugins/system_info_plus/ios`) - ua_client_hints (from `.symlinks/plugins/ua_client_hints/ios`) - - uni_links (from `.symlinks/plugins/uni_links/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`) - video_thumbnail (from `.symlinks/plugins/video_thumbnail/ios`) @@ -307,8 +298,9 @@ DEPENDENCIES: - wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`) SPEC REPOS: + https://github.com/ente-io/ffmpeg-kit-custom-repo-ios: + - ffmpeg_kit_custom trunk: - - ffmpeg-kit-ios-full-gpl - Firebase - FirebaseCore - FirebaseCoreInternal @@ -329,6 +321,8 @@ SPEC REPOS: - sqlite3 EXTERNAL SOURCES: + app_links: + :path: ".symlinks/plugins/app_links/ios" background_fetch: :path: ".symlinks/plugins/background_fetch/ios" battery_info: @@ -341,8 +335,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/dart_ui_isolate/ios" device_info_plus: :path: ".symlinks/plugins/device_info_plus/ios" - ffmpeg_kit_flutter_full_gpl: - :path: ".symlinks/plugins/ffmpeg_kit_flutter_full_gpl/ios" + ffmpeg_kit_flutter: + :path: ".symlinks/plugins/ffmpeg_kit_flutter/ios" file_saver: :path: ".symlinks/plugins/file_saver/ios" firebase_core: @@ -351,8 +345,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/firebase_messaging/ios" Flutter: :path: Flutter - flutter_app_icon_changer: - :path: ".symlinks/plugins/flutter_app_icon_changer/ios" flutter_email_sender: :path: ".symlinks/plugins/flutter_email_sender/ios" flutter_image_compress_common: @@ -373,8 +365,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/home_widget/ios" image_editor_common: :path: ".symlinks/plugins/image_editor_common/ios" - image_picker_ios: - :path: ".symlinks/plugins/image_picker_ios/ios" in_app_purchase_storekit: :path: ".symlinks/plugins/in_app_purchase_storekit/darwin" integration_test: @@ -433,8 +423,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/system_info_plus/ios" ua_client_hints: :path: ".symlinks/plugins/ua_client_hints/ios" - uni_links: - :path: ".symlinks/plugins/uni_links/ios" url_launcher_ios: :path: ".symlinks/plugins/url_launcher_ios/ios" video_player_avfoundation: @@ -447,84 +435,82 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/wakelock_plus/ios" SPEC CHECKSUMS: - background_fetch: 39f11371c0dce04b001c4bfd5e782bcccb0a85e2 - battery_info: b6c551049266af31556b93c9d9b9452cfec0219f - connectivity_plus: 2a701ffec2c0ae28a48cf7540e279787e77c447d - cupertino_http: 947a233f40cfea55167a49f2facc18434ea117ba - dart_ui_isolate: d5bcda83ca4b04f129d70eb90110b7a567aece14 - device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6 - ffmpeg-kit-ios-full-gpl: 80adc341962e55ef709e36baa8ed9a70cf4ea62b - ffmpeg_kit_flutter_full_gpl: 8d15c14c0c3aba616fac04fe44b3d27d02e3c330 - file_saver: 503e386464dbe118f630e17b4c2e1190fa0cf808 + app_links: 76b66b60cc809390ca1ad69bfd66b998d2387ac7 + background_fetch: 94b36ee293e82972852dba8ede1fbcd3bd3d9d57 + battery_info: 83f3aae7be2fccefab1d2bf06b8aa96f11c8bcdd + connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd + cupertino_http: 94ac07f5ff090b8effa6c5e2c47871d48ab7c86c + dart_ui_isolate: 46f6714abe6891313267153ef6f9748d8ecfcab1 + device_info_plus: 335f3ce08d2e174b9fdc3db3db0f4e3b1f66bd89 + ffmpeg_kit_custom: 682b4f2f1ff1f8abae5a92f6c3540f2441d5be99 + ffmpeg_kit_flutter: 915b345acc97d4142e8a9a8549d177ff10f043f5 + file_saver: 6cdbcddd690cb02b0c1a0c225b37cd805c2bf8b6 Firebase: d80354ed7f6df5f9aca55e9eb47cc4b634735eaf - firebase_core: 6e223dfa350b2edceb729cea505eaaef59330682 - firebase_messaging: 07fde77ae28c08616a1d4d870450efc2b38cf40d + firebase_core: 6cbed78b4f298ed103a9fd034e6dbc846320480f + firebase_messaging: 5e0adf2eb18b0ee59aa0c109314c091a0497ecac FirebaseCore: 99fe0c4b44a39f37d99e6404e02009d2db5d718d FirebaseCoreInternal: df24ce5af28864660ecbd13596fc8dd3a8c34629 FirebaseInstallations: 6c963bd2a86aca0481eef4f48f5a4df783ae5917 FirebaseMessaging: 487b634ccdf6f7b7ff180fdcb2a9935490f764e8 Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - flutter_app_icon_changer: e633ce623d36db4dd63c01e4b63fc8a5d44ed48d - flutter_email_sender: e03bdda7637bcd3539bfe718fddd980e9508efaa - flutter_image_compress_common: ec1d45c362c9d30a3f6a0426c297f47c52007e3e - flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4 - flutter_local_notifications: 4cde75091f6327eb8517fa068a0a5950212d2086 - flutter_native_splash: f71420956eb811e6d310720fee915f1d42852e7a - flutter_secure_storage: d33dac7ae2ea08509be337e775f6b59f1ff45f12 - flutter_sodium: a00383520fc689c688b66fd3092984174712493e - fluttertoast: 21eecd6935e7064cc1fcb733a4c5a428f3f24f0f + flutter_email_sender: aa1e9772696691d02cd91fea829856c11efb8e58 + flutter_image_compress_common: 1697a328fd72bfb335507c6bca1a65fa5ad87df1 + flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99 + flutter_local_notifications: ad39620c743ea4c15127860f4b5641649a988100 + flutter_native_splash: 6cad9122ea0fad137d23137dd14b937f3e90b145 + flutter_secure_storage: 2c2ff13db9e0a5647389bff88b0ecac56e3f3418 + flutter_sodium: 7e4621538491834eba53bd524547854bcbbd6987 + fluttertoast: 2c67e14dce98bbdb200df9e1acf610d7a6264ea1 GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d - home_widget: 0434835a4c9a75704264feff6be17ea40e0f0d57 - image_editor_common: d6f6644ae4a6de80481e89fe6d0a8c49e30b4b43 - image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 - in_app_purchase_storekit: a1ce04056e23eecc666b086040239da7619cd783 - integration_test: 252f60fa39af5e17c3aa9899d35d908a0721b573 - launcher_icon_switcher: 8e0ad2131a20c51c1dd939896ee32e70cd845b37 + home_widget: f169fc41fd807b4d46ab6615dc44d62adbf9f64f + image_editor_common: 3de87e7c4804f4ae24c8f8a998362b98c105cac1 + in_app_purchase_storekit: d1a48cb0f8b29dbf5f85f782f5dd79b21b90a5e6 + integration_test: 4a889634ef21a45d28d50d622cf412dc6d9f586e + launcher_icon_switcher: 84c218d233505aa7d8655d8fa61a3ba802c022da libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 - local_auth_darwin: 66e40372f1c29f383a314c738c7446e2f7fdadc3 - local_auth_ios: 5046a18c018dd973247a0564496c8898dbb5adf9 + local_auth_darwin: 553ce4f9b16d3fdfeafce9cf042e7c9f77c1c391 + local_auth_ios: f7a1841beef3151d140a967c2e46f30637cdf451 Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d - maps_launcher: 2e5b6a2d664ec6c27f82ffa81b74228d770ab203 - media_extension: 6618f07abd762cdbfaadf1b0c56a287e820f0c84 - media_kit_libs_ios_video: a5fe24bc7875ccd6378a0978c13185e1344651c1 - media_kit_video: 5da63f157170e5bf303bf85453b7ef6971218a2e - motion_sensors: 03f55b7c637a7e365a0b5f9697a449f9059d5d91 - motionphoto: 8b65ce50c7d7ff3c767534fc3768b2eed9ac24e4 - move_to_background: cd3091014529ec7829e342ad2d75c0a11f4378a5 + maps_launcher: edf829809ba9e894d70e569bab11c16352dedb45 + media_extension: 671e2567880d96c95c65c9a82ccceed8f2e309fd + media_kit_libs_ios_video: 5a18affdb97d1f5d466dc79988b13eff6c5e2854 + media_kit_video: 1746e198cb697d1ffb734b1d05ec429d1fcd1474 + motion_sensors: 741e702c17467b9569a92165dda8d4d88c6167f1 + motionphoto: 23e2aeb5c6380112f69468d71f970fa7438e5ed1 + move_to_background: 7e3467dd2a1d1013e98c9c1cb93fd53cd7ef9d84 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - native_video_player: 5d36066807b680e181473e6890dde643ac85380d - objective_c: 77e887b5ba1827970907e10e832eec1683f3431d - onnxruntime: e7c2ae44385191eaad5ae64c935a72debaddc997 + native_video_player: e363dd14f6a498ad8a8f7e6486a0db046ad19f13 + objective_c: 89e720c30d716b036faf9c9684022048eee1eee2 + onnxruntime: f9b296392c96c42882be020a59dbeac6310d81b2 onnxruntime-c: a909204639a1f035f575127ac406f781ac797c9c onnxruntime-objc: b6fab0f1787aa6f7190c2013f03037df4718bd8b - open_mail_app: 70273c53f768beefdafbe310c3d9086e4da3cb02 + open_mail_app: 7314a609e88eed22d53671279e189af7a0ab0f11 OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 - package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4 - path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 - permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 - photo_manager: ff695c7a1dd5bc379974953a2b5c0a293f7c4c8a - privacy_screen: 1a131c052ceb3c3659934b003b0d397c2381a24e + package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 + path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 + permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d + photo_manager: d2fbcc0f2d82458700ee6256a15018210a81d413 + privacy_screen: 3159a541f5d3a31bea916cfd4e58f9dc722b3fd4 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - receive_sharing_intent: 79c848f5b045674ad60b9fea3bafea59962ad2c1 + receive_sharing_intent: 222384f00ffe7e952bbfabaa9e3967cb87e5fe00 SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380 - Sentry: 0f9bc9adfc0b960e7f3bb5ec67e9a3d8193f3bdb - sentry_flutter: 64a43fb39ab4c7f67d8a4cad52b49e22439e58b7 - share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f - shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 - sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d + Sentry: da60d980b197a46db0b35ea12cb8f39af48d8854 + sentry_flutter: 942017adbe00f963061cb11ec260414a990b7a42 + share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a + shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 + sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 sqlite3: fc1400008a9b3525f5914ed715a5d1af0b8f4983 - sqlite3_flutter_libs: 069c435986dd4b63461aecd68f4b30be4a9e9daa - system_info_plus: 5393c8da281d899950d751713575fbf91c7709aa - ua_client_hints: aeabd123262c087f0ce151ef96fa3ab77bfc8b38 - uni_links: 103d3319e3383ed8bce559b96b1e219fbf02ba96 - url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe - video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3 - video_thumbnail: 94ba6705afbaa120b77287080424930f23ea0c40 - volume_controller: 2e3de73d6e7e81a0067310d17fb70f2f86d71ac7 - wakelock_plus: 373cfe59b235a6dd5837d0fb88791d2f13a90d56 + sqlite3_flutter_libs: 3c323550ef3b928bc0aa9513c841e45a7d242832 + system_info_plus: 555ce7047fbbf29154726db942ae785c29211740 + ua_client_hints: 92fe0d139619b73ec9fcb46cc7e079a26178f586 + url_launcher_ios: 694010445543906933d732453a59da0a173ae33d + video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b + video_thumbnail: 584ccfa55d8fd2f3d5507218b0a18d84c839c620 + volume_controller: 3657a1f65bedb98fa41ff7dc5793537919f31b12 + wakelock_plus: 04623e3f525556020ebd4034310f20fe7fda8b49 -PODFILE CHECKSUM: 20e086e6008977d43a3d40260f3f9bffcac748dd +PODFILE CHECKSUM: a8ef88ad74ba499756207e7592c6071a96756d18 COCOAPODS: 1.16.2 diff --git a/mobile/ios/Runner.xcodeproj/project.pbxproj b/mobile/ios/Runner.xcodeproj/project.pbxproj index ee7eaf5710..678d1e3446 100644 --- a/mobile/ios/Runner.xcodeproj/project.pbxproj +++ b/mobile/ios/Runner.xcodeproj/project.pbxproj @@ -19,7 +19,7 @@ CEE6BE702D7AE7FD00E4048B /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6DACD83C2B755B0600BA9516 /* WidgetKit.framework */; }; CEE6BE712D7AE7FD00E4048B /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6DACD83E2B755B0600BA9516 /* SwiftUI.framework */; }; CEE6BE7C2D7AE7FE00E4048B /* EnteMemoryWidgetExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = CEE6BE6F2D7AE7FD00E4048B /* EnteMemoryWidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - DA6BE5E826B3BC8600656280 /* (null) in Resources */ = {isa = PBXBuildFile; }; + DA6BE5E826B3BC8600656280 /* BuildFile in Resources */ = {isa = PBXBuildFile; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -86,7 +86,7 @@ /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */ - CEE6BE802D7AE7FE00E4048B /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = { + CEE6BE802D7AE7FE00E4048B /* Exceptions for "EnteMemoryWidget" folder in "EnteMemoryWidgetExtension" target */ = { isa = PBXFileSystemSynchronizedBuildFileExceptionSet; membershipExceptions = ( Info.plist, @@ -96,7 +96,18 @@ /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ - CEE6BE722D7AE7FD00E4048B /* EnteMemoryWidget */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (CEE6BE802D7AE7FE00E4048B /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = EnteMemoryWidget; sourceTree = ""; }; + CEE6BE722D7AE7FD00E4048B /* EnteMemoryWidget */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + CEE6BE802D7AE7FE00E4048B /* Exceptions for "EnteMemoryWidget" folder in "EnteMemoryWidgetExtension" target */, + ); + explicitFileTypes = { + }; + explicitFolders = ( + ); + path = EnteMemoryWidget; + sourceTree = ""; + }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ @@ -246,8 +257,6 @@ CEE6BE722D7AE7FD00E4048B /* EnteMemoryWidget */, ); name = EnteMemoryWidgetExtension; - packageProductDependencies = ( - ); productName = EnteMemoryWidgetExtension; productReference = CEE6BE6F2D7AE7FD00E4048B /* EnteMemoryWidgetExtension.appex */; productType = "com.apple.product-type.app-extension"; @@ -300,7 +309,7 @@ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, - DA6BE5E826B3BC8600656280 /* (null) in Resources */, + DA6BE5E826B3BC8600656280 /* BuildFile in Resources */, 277218A0270F596900FFE3CC /* GoogleService-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -365,6 +374,7 @@ "${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework", "${BUILT_PRODUCTS_DIR}/SDWebImageWebPCoder/SDWebImageWebPCoder.framework", "${BUILT_PRODUCTS_DIR}/Sentry/Sentry.framework", + "${BUILT_PRODUCTS_DIR}/app_links/app_links.framework", "${BUILT_PRODUCTS_DIR}/background_fetch/background_fetch.framework", "${BUILT_PRODUCTS_DIR}/battery_info/battery_info.framework", "${BUILT_PRODUCTS_DIR}/connectivity_plus/connectivity_plus.framework", @@ -372,7 +382,6 @@ "${BUILT_PRODUCTS_DIR}/dart_ui_isolate/dart_ui_isolate.framework", "${BUILT_PRODUCTS_DIR}/device_info_plus/device_info_plus.framework", "${BUILT_PRODUCTS_DIR}/file_saver/file_saver.framework", - "${BUILT_PRODUCTS_DIR}/flutter_app_icon_changer/flutter_app_icon_changer.framework", "${BUILT_PRODUCTS_DIR}/flutter_email_sender/flutter_email_sender.framework", "${BUILT_PRODUCTS_DIR}/flutter_image_compress_common/flutter_image_compress_common.framework", "${BUILT_PRODUCTS_DIR}/flutter_inappwebview_ios/flutter_inappwebview_ios.framework", @@ -383,7 +392,6 @@ "${BUILT_PRODUCTS_DIR}/fluttertoast/fluttertoast.framework", "${BUILT_PRODUCTS_DIR}/home_widget/home_widget.framework", "${BUILT_PRODUCTS_DIR}/image_editor_common/image_editor_common.framework", - "${BUILT_PRODUCTS_DIR}/image_picker_ios/image_picker_ios.framework", "${BUILT_PRODUCTS_DIR}/in_app_purchase_storekit/in_app_purchase_storekit.framework", "${BUILT_PRODUCTS_DIR}/integration_test/integration_test.framework", "${BUILT_PRODUCTS_DIR}/launcher_icon_switcher/launcher_icon_switcher.framework", @@ -414,20 +422,19 @@ "${BUILT_PRODUCTS_DIR}/sqlite3_flutter_libs/sqlite3_flutter_libs.framework", "${BUILT_PRODUCTS_DIR}/system_info_plus/system_info_plus.framework", "${BUILT_PRODUCTS_DIR}/ua_client_hints/ua_client_hints.framework", - "${BUILT_PRODUCTS_DIR}/uni_links/uni_links.framework", "${BUILT_PRODUCTS_DIR}/url_launcher_ios/url_launcher_ios.framework", "${BUILT_PRODUCTS_DIR}/video_player_avfoundation/video_player_avfoundation.framework", "${BUILT_PRODUCTS_DIR}/video_thumbnail/video_thumbnail.framework", "${BUILT_PRODUCTS_DIR}/volume_controller/volume_controller.framework", "${BUILT_PRODUCTS_DIR}/wakelock_plus/wakelock_plus.framework", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg-kit-ios-full-gpl/ffmpegkit.framework/ffmpegkit", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg-kit-ios-full-gpl/libavcodec.framework/libavcodec", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg-kit-ios-full-gpl/libavdevice.framework/libavdevice", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg-kit-ios-full-gpl/libavfilter.framework/libavfilter", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg-kit-ios-full-gpl/libavformat.framework/libavformat", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg-kit-ios-full-gpl/libavutil.framework/libavutil", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg-kit-ios-full-gpl/libswresample.framework/libswresample", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg-kit-ios-full-gpl/libswscale.framework/libswscale", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg_kit_custom/ffmpegkit.framework/ffmpegkit", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg_kit_custom/libavcodec.framework/libavcodec", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg_kit_custom/libavdevice.framework/libavdevice", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg_kit_custom/libavfilter.framework/libavfilter", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg_kit_custom/libavformat.framework/libavformat", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg_kit_custom/libavutil.framework/libavutil", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg_kit_custom/libswresample.framework/libswresample", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/ffmpeg_kit_custom/libswscale.framework/libswscale", "${PODS_XCFRAMEWORKS_BUILD_DIR}/media_kit_libs_ios_video/Ass.framework/Ass", "${PODS_XCFRAMEWORKS_BUILD_DIR}/media_kit_libs_ios_video/Avcodec.framework/Avcodec", "${PODS_XCFRAMEWORKS_BUILD_DIR}/media_kit_libs_ios_video/Avfilter.framework/Avfilter", @@ -461,6 +468,7 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageWebPCoder.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Sentry.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/app_links.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/background_fetch.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/battery_info.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/connectivity_plus.framework", @@ -468,7 +476,6 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/dart_ui_isolate.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info_plus.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_saver.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_app_icon_changer.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_email_sender.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_image_compress_common.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_inappwebview_ios.framework", @@ -479,7 +486,6 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/fluttertoast.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/home_widget.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_editor_common.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/image_picker_ios.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/in_app_purchase_storekit.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/integration_test.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/launcher_icon_switcher.framework", @@ -510,7 +516,6 @@ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqlite3_flutter_libs.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/system_info_plus.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ua_client_hints.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/uni_links.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/url_launcher_ios.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/video_player_avfoundation.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/video_thumbnail.framework", diff --git a/mobile/ios/Runner/AppDelegate.swift b/mobile/ios/Runner/AppDelegate.swift index 3f14877d91..f1a6bbe1bf 100644 --- a/mobile/ios/Runner/AppDelegate.swift +++ b/mobile/ios/Runner/AppDelegate.swift @@ -1,6 +1,7 @@ +import AVFoundation import Flutter import UIKit -import AVFoundation +import app_links @main @objc class AppDelegate: FlutterAppDelegate { @@ -13,34 +14,16 @@ import AVFoundation UNUserNotificationCenter.current().delegate = self as UNUserNotificationCenterDelegate } - let controller : FlutterViewController = window?.rootViewController as! FlutterViewController - let audioSessionChannel = FlutterMethodChannel(name: "io.ente.frame/audio_session", - binaryMessenger: controller.binaryMessenger) - - audioSessionChannel.setMethodCallHandler({ - (call: FlutterMethodCall, result: @escaping FlutterResult) -> Void in - if call.method == "setAudioSessionCategory" { - self.setAudioSessionCategory(result: result) - } else { - result(FlutterMethodNotImplemented) - } - }) - GeneratedPluginRegistrant.register(with: self) - return super.application(application, didFinishLaunchingWithOptions: launchOptions) - } - - private func setAudioSessionCategory(result: @escaping FlutterResult) { - do { - try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .defaultToSpeaker]) - try AVAudioSession.sharedInstance().setActive(true) - result(nil) - } catch { - result(FlutterError(code: "AUDIO_SESSION_ERROR", - message: "Failed to set audio session category", - details: error.localizedDescription)) + // Retrieve the link from parameters + if let url = AppLinks.shared.getLink(launchOptions: launchOptions) { + // We have a link, propagate it to your Flutter app or not + AppLinks.shared.handleLink(url: url) + return true // Returning true will stop the propagation to other packages } + + return super.application(application, didFinishLaunchingWithOptions: launchOptions) } override func applicationDidBecomeActive(_ application: UIApplication) { diff --git a/mobile/ios/Runner/Assets.xcassets/IconDark.appiconset/IconDarkDark.png b/mobile/ios/Runner/Assets.xcassets/IconDark.appiconset/IconDarkDark.png index 5ce8a224d7..ed48680046 100644 Binary files a/mobile/ios/Runner/Assets.xcassets/IconDark.appiconset/IconDarkDark.png and b/mobile/ios/Runner/Assets.xcassets/IconDark.appiconset/IconDarkDark.png differ diff --git a/mobile/ios/Runner/Assets.xcassets/IconGreen.appiconset/IconGreenDark.png b/mobile/ios/Runner/Assets.xcassets/IconGreen.appiconset/IconGreenDark.png index 5ce8a224d7..ed48680046 100644 Binary files a/mobile/ios/Runner/Assets.xcassets/IconGreen.appiconset/IconGreenDark.png and b/mobile/ios/Runner/Assets.xcassets/IconGreen.appiconset/IconGreenDark.png differ diff --git a/mobile/ios/Runner/Assets.xcassets/IconLight.appiconset/IconLightDark.png b/mobile/ios/Runner/Assets.xcassets/IconLight.appiconset/IconLightDark.png index 5ce8a224d7..ed48680046 100644 Binary files a/mobile/ios/Runner/Assets.xcassets/IconLight.appiconset/IconLightDark.png and b/mobile/ios/Runner/Assets.xcassets/IconLight.appiconset/IconLightDark.png differ diff --git a/mobile/lib/audio_session_handler.dart b/mobile/lib/audio_session_handler.dart deleted file mode 100644 index 8aede31b12..0000000000 --- a/mobile/lib/audio_session_handler.dart +++ /dev/null @@ -1,16 +0,0 @@ -import "package:flutter/services.dart"; -import "package:logging/logging.dart"; - -class AudioSessionHandler { - static final _logger = Logger("AudioSessionHandler"); - static const MethodChannel _channel = - MethodChannel('io.ente.frame/audio_session'); - - static Future setAudioSessionCategory() async { - try { - await _channel.invokeMethod('setAudioSessionCategory'); - } on PlatformException catch (e) { - _logger.warning("Failed to set audio session category: '${e.message}'."); - } - } -} diff --git a/mobile/lib/core/configuration.dart b/mobile/lib/core/configuration.dart index c110a3a100..32a9e6389e 100644 --- a/mobile/lib/core/configuration.dart +++ b/mobile/lib/core/configuration.dart @@ -33,7 +33,6 @@ import 'package:photos/services/sync/sync_service.dart'; import 'package:photos/utils/file_uploader.dart'; import "package:photos/utils/lock_screen_settings.dart"; import 'package:photos/utils/validator_util.dart'; -import "package:photos/utils/wakelock_util.dart"; import 'package:shared_preferences/shared_preferences.dart'; import "package:tuple/tuple.dart"; import 'package:uuid/uuid.dart'; @@ -53,10 +52,6 @@ class Configuration { static const keyKey = "key"; static const keyShouldBackupOverMobileData = "should_backup_over_mobile_data"; static const keyShouldBackupVideos = "should_backup_videos"; - - // keyShouldKeepDeviceAwake is used to determine whether the device screen - // should be kept on while the app is in foreground. - static const keyShouldKeepDeviceAwake = "should_keep_device_awake"; static const keyShowSystemLockScreen = "should_show_lock_screen"; static const keyHasSelectedAnyBackupFolder = "has_selected_any_folder_for_backup"; @@ -84,14 +79,14 @@ class Configuration { late String _sharedDocumentsMediaDirectory; String? _volatilePassword; - final _secureStorageOptionsIOS = const IOSOptions( - accessibility: KeychainAccessibility.first_unlock_this_device, - ); - Future init() async { try { _preferences = await SharedPreferences.getInstance(); - _secureStorage = const FlutterSecureStorage(); + _secureStorage = const FlutterSecureStorage( + iOptions: IOSOptions( + accessibility: KeychainAccessibility.first_unlock_this_device, + ), + ); _documentsDirectory = (await getApplicationDocumentsDirectory()).path; _tempDocumentsDirPath = _documentsDirectory + "/temp/"; final tempDocumentsDir = Directory(_tempDocumentsDirPath); @@ -104,15 +99,13 @@ class Configuration { _documentsDirectory + "/ente-shared-media"; Directory(_sharedDocumentsMediaDirectory).createSync(recursive: true); if (!_preferences.containsKey(tokenKey)) { - await _secureStorage.deleteAll(iOptions: _secureStorageOptionsIOS); + await _secureStorage.deleteAll(); } else { _key = await _secureStorage.read( key: keyKey, - iOptions: _secureStorageOptionsIOS, ); _secretKey = await _secureStorage.read( key: secretKeyKey, - iOptions: _secureStorageOptionsIOS, ); if (_key == null) { await logout(autoLogout: true); @@ -191,7 +184,7 @@ class Configuration { } } await _preferences.clear(); - await _secureStorage.deleteAll(iOptions: _secureStorageOptionsIOS); + await _secureStorage.deleteAll(); _key = null; _cachedToken = null; _secretKey = null; @@ -428,6 +421,13 @@ class Configuration { return _preferences.getString(endPointKey) ?? endpoint; } + // isEnteProduction checks if the current endpoint is the default production + // endpoint. This is used to determine if the app is in production mode or + // not. The default production endpoint is set in the environment variable + bool isEnteProduction() { + return getHttpEndpoint() == kDefaultProductionEndpoint; + } + Future setHttpEndpoint(String endpoint) async { await _preferences.setString(endPointKey, endpoint); Bus.instance.fire(EndpointUpdatedEvent()); @@ -499,13 +499,11 @@ class Configuration { // Used to clear key from secure storage await _secureStorage.delete( key: keyKey, - iOptions: _secureStorageOptionsIOS, ); } else { await _secureStorage.write( key: keyKey, value: key, - iOptions: _secureStorageOptionsIOS, ); } } @@ -516,13 +514,11 @@ class Configuration { // Used to clear secret key from secure storage await _secureStorage.delete( key: secretKeyKey, - iOptions: _secureStorageOptionsIOS, ); } else { await _secureStorage.write( key: secretKeyKey, value: secretKey, - iOptions: _secureStorageOptionsIOS, ); } } @@ -584,16 +580,6 @@ class Configuration { } } - bool shouldKeepDeviceAwake() { - final keepAwake = _preferences.get(keyShouldKeepDeviceAwake); - return keepAwake == null ? false : keepAwake as bool; - } - - Future setShouldKeepDeviceAwake(bool value) async { - await _preferences.setBool(keyShouldKeepDeviceAwake, value); - await EnteWakeLock.toggle(enable: value); - } - Future setShouldBackupVideos(bool value) async { await _preferences.setBool(keyShouldBackupVideos, value); if (value) { @@ -656,12 +642,10 @@ class Configuration { await _secureStorage.write( key: keyKey, value: _key, - iOptions: _secureStorageOptionsIOS, ); await _secureStorage.write( key: secretKeyKey, value: _secretKey, - iOptions: _secureStorageOptionsIOS, ); await _preferences.setBool( hasMigratedSecureStorageKey, diff --git a/mobile/lib/core/constants.dart b/mobile/lib/core/constants.dart index 163399acb8..78f3db6bad 100644 --- a/mobile/lib/core/constants.dart +++ b/mobile/lib/core/constants.dart @@ -27,8 +27,8 @@ const subGalleryMultiplier = 10; // used to identify which ente file are available in app cache const String sharedMediaIdentifier = 'ente-shared-media://'; -const thumbnailDiskLoadDeferDuration = Duration(milliseconds: 40); -const thumbnailServerLoadDeferDuration = Duration(milliseconds: 80); +const galleryThumbnailDiskLoadDeferDuration = Duration(milliseconds: 500); +const galleryThumbnailServerLoadDeferDuration = Duration(milliseconds: 80); // 256 bit key maps to 24 words // https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki#Generating_the_mnemonic diff --git a/mobile/lib/db/files_db.dart b/mobile/lib/db/files_db.dart index 6fb89a9d77..ae702d92b4 100644 --- a/mobile/lib/db/files_db.dart +++ b/mobile/lib/db/files_db.dart @@ -1588,25 +1588,6 @@ class FilesDB with SqlDbBase { return files; } - Future> getGeneratedIDForFilesOlderThan( - int cutOffTime, - int ownerID, - ) async { - final db = await instance.sqliteAsyncDB; - final rows = await db.getAll( - ''' - SELECT DISTINCT $columnGeneratedID FROM $filesTable - WHERE $columnCreationTime <= ? AND ($columnOwnerID IS NULL OR $columnOwnerID = ?) - ''', - [cutOffTime, ownerID], - ); - final result = []; - for (final row in rows) { - result.add(row[columnGeneratedID].toString()); - } - return result; - } - // For givenUserID, get List of unique LocalIDs for files which are // uploaded by the given user and location is missing Future> getLocalIDsForFilesWithoutLocation(int ownerID) async { @@ -1643,23 +1624,6 @@ class FilesDB with SqlDbBase { return result; } - // For a given userID, return unique localID for all uploaded live photos - Future> getLivePhotosForUser(int userId) async { - final db = await instance.sqliteAsyncDB; - final rows = await db.getAll( - ''' - SELECT DISTINCT $columnLocalID FROM $filesTable - WHERE $columnOwnerID = ? AND $columnFileType = ? AND $columnLocalID IS NOT NULL - ''', - [userId, getInt(FileType.livePhoto)], - ); - final result = []; - for (final row in rows) { - result.add(row[columnLocalID] as String); - } - return result; - } - Future> getLocalFilesBackedUpWithoutLocation(int userId) async { final db = await instance.sqliteAsyncDB; final rows = await db.getAll( @@ -1720,6 +1684,9 @@ class FilesDB with SqlDbBase { AND $columnCreationTime > ? AND $columnUploadedFileID != -1 AND $columnOwnerID = $userID + AND $columnLocalID IS NOT NULL + AND ($columnFileSize IS NULL OR $columnFileSize <= 524288000) + AND ($columnDuration IS NULL OR $columnDuration <= 60) ORDER BY $columnCreationTime DESC ''', [getInt(fileType), beginDate.microsecondsSinceEpoch], @@ -1750,25 +1717,6 @@ class FilesDB with SqlDbBase { return deduplicatedFiles; } - Future> fetchFilesCountbyType(int userID) async { - final db = await instance.sqliteAsyncDB; - final result = await db.getAll( - ''' - SELECT $columnFileType, COUNT(DISTINCT $columnUploadedFileID) - FROM $filesTable WHERE $columnUploadedFileID != -1 AND - $columnOwnerID IS $userID GROUP BY $columnFileType - ''', - ); - - final filesCount = {}; - for (var e in result) { - filesCount.addAll( - {getFileType(e[columnFileType] as int): e.values.last as int}, - ); - } - return filesCount; - } - Future fetchAllUploadedAndSharedFilesWithLocation( int startTime, int endTime, { @@ -1805,17 +1753,17 @@ class FilesDB with SqlDbBase { return FileLoadResult(filteredFiles, files.length == limit); } - Future> getAllFileIDs() async { + Future remoteFileCount() async { final db = await instance.sqliteAsyncDB; final results = await db.getAll(''' SELECT DISTINCT $columnUploadedFileID FROM $filesTable WHERE $columnUploadedFileID IS NOT NULL AND $columnUploadedFileID IS NOT -1 '''); - final ids = []; + final ids = {}; for (final result in results) { ids.add(result[columnUploadedFileID] as int); } - return ids; + return ids.length; } ///Returns "columnName1 = ?, columnName2 = ?, ..." diff --git a/mobile/lib/db/ml/db.dart b/mobile/lib/db/ml/db.dart index fde278a9f2..0186ead274 100644 --- a/mobile/lib/db/ml/db.dart +++ b/mobile/lib/db/ml/db.dart @@ -814,7 +814,7 @@ class MLDataDB with SqlDbBase implements IMLDataDB { @override Future getClusteredToIndexableFilesRatio() async { - final int indexableFiles = (await getIndexableFileIDs()).length; + final int indexableFiles = await getIndexableFileCount(); final int clusteredFiles = await getClusteredOrFacelessFileCount(); return clusteredFiles / indexableFiles; diff --git a/mobile/lib/generated/intl/messages_all.dart b/mobile/lib/generated/intl/messages_all.dart index ca08eee22a..5d4e637e74 100644 --- a/mobile/lib/generated/intl/messages_all.dart +++ b/mobile/lib/generated/intl/messages_all.dart @@ -27,6 +27,7 @@ import 'messages_el.dart' as messages_el; import 'messages_en.dart' as messages_en; import 'messages_es.dart' as messages_es; import 'messages_et.dart' as messages_et; +import 'messages_eu.dart' as messages_eu; import 'messages_fa.dart' as messages_fa; import 'messages_fr.dart' as messages_fr; import 'messages_gu.dart' as messages_gu; @@ -43,8 +44,11 @@ import 'messages_lv.dart' as messages_lv; import 'messages_ml.dart' as messages_ml; import 'messages_nl.dart' as messages_nl; import 'messages_no.dart' as messages_no; +import 'messages_or.dart' as messages_or; import 'messages_pl.dart' as messages_pl; import 'messages_pt.dart' as messages_pt; +import 'messages_pt_BR.dart' as messages_pt_br; +import 'messages_pt_PT.dart' as messages_pt_pt; import 'messages_ro.dart' as messages_ro; import 'messages_ru.dart' as messages_ru; import 'messages_sl.dart' as messages_sl; @@ -71,6 +75,7 @@ Map _deferredLibraries = { 'en': () => new SynchronousFuture(null), 'es': () => new SynchronousFuture(null), 'et': () => new SynchronousFuture(null), + 'eu': () => new SynchronousFuture(null), 'fa': () => new SynchronousFuture(null), 'fr': () => new SynchronousFuture(null), 'gu': () => new SynchronousFuture(null), @@ -87,8 +92,11 @@ Map _deferredLibraries = { 'ml': () => new SynchronousFuture(null), 'nl': () => new SynchronousFuture(null), 'no': () => new SynchronousFuture(null), + 'or': () => new SynchronousFuture(null), 'pl': () => new SynchronousFuture(null), 'pt': () => new SynchronousFuture(null), + 'pt_BR': () => new SynchronousFuture(null), + 'pt_PT': () => new SynchronousFuture(null), 'ro': () => new SynchronousFuture(null), 'ru': () => new SynchronousFuture(null), 'sl': () => new SynchronousFuture(null), @@ -127,6 +135,8 @@ MessageLookupByLibrary? _findExact(String localeName) { return messages_es.messages; case 'et': return messages_et.messages; + case 'eu': + return messages_eu.messages; case 'fa': return messages_fa.messages; case 'fr': @@ -159,10 +169,16 @@ MessageLookupByLibrary? _findExact(String localeName) { return messages_nl.messages; case 'no': return messages_no.messages; + case 'or': + return messages_or.messages; case 'pl': return messages_pl.messages; case 'pt': return messages_pt.messages; + case 'pt_BR': + return messages_pt_br.messages; + case 'pt_PT': + return messages_pt_pt.messages; case 'ro': return messages_ro.messages; case 'ru': diff --git a/mobile/lib/generated/intl/messages_ar.dart b/mobile/lib/generated/intl/messages_ar.dart index 87b73df68f..a404a9e6d0 100644 --- a/mobile/lib/generated/intl/messages_ar.dart +++ b/mobile/lib/generated/intl/messages_ar.dart @@ -20,62 +20,2151 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'ar'; + static String m0(title) => "${title} (أنا)"; + + static String m1(count) => + "${Intl.plural(count, zero: 'إضافة متعاون', one: 'إضافة متعاون', two: 'إضافة متعاونين', few: 'إضافة ${count} متعاونين', many: 'إضافة ${count} متعاونًا', other: 'إضافة ${count} متعاونًا')}"; + + static String m2(count) => + "${Intl.plural(count, one: 'إضافة عنصر', two: 'إضافة عنصرين', few: 'إضافة ${count} عناصر', many: 'إضافة ${count} عنصرًا', other: 'إضافة ${count} عنصرًا')}"; + + static String m3(storageAmount, endDate) => + "إضافتك بسعة ${storageAmount} صالحة حتى ${endDate}"; + + static String m4(count) => + "${Intl.plural(count, zero: 'إضافة مشاهد', one: 'إضافة مشاهد', two: 'إضافة مشاهدين', few: 'إضافة ${count} مشاهدين', many: 'إضافة ${count} مشاهدًا', other: 'إضافة ${count} مشاهدًا')}"; + + static String m5(emailOrName) => "تمت الإضافة بواسطة ${emailOrName}"; + + static String m6(albumName) => "تمت الإضافة بنجاح إلى ${albumName}"; + + static String m7(name) => "الإعجاب بـ ${name}"; + + static String m8(count) => + "${Intl.plural(count, zero: 'لا يوجد مشاركون', one: 'مشارك واحد', two: 'مشاركان', few: '${count} مشاركين', many: '${count} مشاركًا', other: '${count} مشارك')}"; + + static String m9(versionValue) => "الإصدار: ${versionValue}"; + + static String m10(freeAmount, storageUnit) => + "${freeAmount} ${storageUnit} متوفرة"; + + static String m11(name) => "مناظر جميلة مع ${name}"; + + static String m12(paymentProvider) => + "يرجى إلغاء اشتراكك الحالي من ${paymentProvider} أولاً."; + + static String m13(user) => + "لن يتمكن ${user} من إضافة المزيد من الصور إلى هذا الألبوم.\n\nسيظل بإمكانه إزالة الصور الحالية التي أضافها."; + + static String m14(isFamilyMember, storageAmountInGb) => + "${Intl.select(isFamilyMember, { + 'true': 'عائلتك حصلت على ${storageAmountInGb} جيجابايت حتى الآن', + 'false': 'لقد حصلت على ${storageAmountInGb} جيجابايت حتى الآن', + 'other': 'لقد حصلت على ${storageAmountInGb} جيجابايت حتى الآن!', + })}"; + + static String m15(albumName) => "تم إنشاء رابط تعاوني لـ ${albumName}"; + + static String m16(count) => + "${Intl.plural(count, zero: 'تمت إضافة 0 متعاونين', one: 'تمت إضافة متعاون واحد', two: 'تمت إضافة متعاونين', few: 'تمت إضافة ${count} متعاونين', many: 'تمت إضافة ${count} متعاونًا', other: 'تمت إضافة ${count} متعاونًا')}"; + + static String m17(email, numOfDays) => + "أنت على وشك إضافة ${email} كجهة اتصال موثوقة. سيكون بإمكانهم استعادة حسابك إذا كنت غائبًا لمدة ${numOfDays} أيام."; + + static String m18(familyAdminEmail) => + "يرجى الاتصال بـ ${familyAdminEmail} لإدارة اشتراكك."; + + static String m19(provider) => + "يرجى التواصل معنا على support@ente.io لإدارة اشتراكك في ${provider}."; + + static String m20(endpoint) => "متصل بـ ${endpoint}"; + + static String m21(count) => + "${Intl.plural(count, one: 'حذف عنصر واحد', two: 'حذف عنصرين', few: 'حذف ${count} عناصر', many: 'حذف ${count} عنصرًا', other: 'حذف ${count} عنصرًا')}"; + + static String m22(currentlyDeleting, totalCount) => + "جارٍ الحذف ${currentlyDeleting} / ${totalCount}"; + + static String m23(albumName) => + "سيؤدي هذا إلى إزالة الرابط العام للوصول إلى \"${albumName}\"."; + + static String m24(supportEmail) => + "يرجى إرسال بريد إلكتروني إلى ${supportEmail} من عنوان بريدك الإلكتروني المسجل."; + + static String m25(count, storageSaved) => + "لقد قمت بتنظيف ${Intl.plural(count, one: 'ملف مكرر واحد', two: 'ملفين مكررين', few: '${count} ملفات مكررة', many: '${count} ملفًا مكررًا', other: '${count} ملفًا مكررًا')}، مما وفر ${storageSaved}!"; + + static String m26(count, formattedSize) => + "${count} ملفات، ${formattedSize} لكل منها"; + + static String m27(newEmail) => "تم تغيير البريد الإلكتروني إلى ${newEmail}"; + + static String m28(email) => "${email} لا يملك حساب Ente."; + + static String m29(email) => + "${email} لا يملك حسابًا على Ente.\n\nأرسل له دعوة لمشاركة الصور."; + + static String m30(name) => "معانقة ${name}"; + + static String m31(text) => "تم العثور على صور إضافية لـ ${text}"; + + static String m32(name) => "الاستمتاع بالطعام مع ${name}"; + + static String m33(count, formattedNumber) => + "${Intl.plural(count, one: 'ملف واحد', two: 'ملفان', few: '${formattedNumber} ملفات', many: '${formattedNumber} ملفًا', other: '${formattedNumber} ملفًا')} على هذا الجهاز تم نسخه احتياطيًا بأمان"; + + static String m34(count, formattedNumber) => + "${Intl.plural(count, one: 'ملف واحد', two: 'ملفان', few: '${formattedNumber} ملفات', many: '${formattedNumber} ملفًا', other: '${formattedNumber} ملفًا')} في هذا الألبوم تم نسخه احتياطيًا بأمان"; + + static String m35(storageAmountInGB) => + "${storageAmountInGB} جيجابايت مجانية في كل مرة يشترك فيها شخص بخطة مدفوعة ويطبق رمزك"; + + static String m36(endDate) => "التجربة المجانية صالحة حتى ${endDate}"; + + static String m37(count) => + "لا يزال بإمكانك الوصول ${Intl.plural(count, one: 'إليه', two: 'إليهما', other: 'إليها')} على Ente طالما لديك اشتراك نشط."; + + static String m38(sizeInMBorGB) => "تحرير ${sizeInMBorGB}"; + + static String m39(count, formattedSize) => + "${Intl.plural(count, one: 'يمكن حذفه من الجهاز لتحرير ${formattedSize}', two: 'يمكن حذفهما من الجهاز لتحرير ${formattedSize}', few: 'يمكن حذفها من الجهاز لتحرير ${formattedSize}', many: 'يمكن حذفها من الجهاز لتحرير ${formattedSize}', other: 'يمكن حذفها من الجهاز لتحرير ${formattedSize}')}"; + + static String m40(currentlyProcessing, totalCount) => + "جارٍ المعالجة ${currentlyProcessing} / ${totalCount}"; + + static String m41(name) => "التنزه مع ${name}"; + + static String m42(count) => + "${Intl.plural(count, one: '${count} عُنْصُر', other: '${count} عَنَاصِر')}"; + + static String m43(name) => "آخر مرة مع ${name}"; + + static String m44(email) => "${email} دعاك لتكون جهة اتصال موثوقة"; + + static String m45(expiryTime) => "ستنتهي صلاحية الرابط في ${expiryTime}"; + + static String m46(email) => "ربط الشخص بـ ${email}"; + + static String m47(personName, email) => + "سيؤدي هذا إلى ربط ${personName} بـ ${email}"; + + static String m48(count, formattedCount) => + "${Intl.plural(count, zero: 'لا توجد ذكريات', one: 'ذكرى واحدة', two: 'ذكريتان', few: '${formattedCount} ذكريات', many: '${formattedCount} ذكرى', other: '${formattedCount} ذكرى')}"; + + static String m49(count) => + "${Intl.plural(count, one: 'نقل عنصر', two: 'نقل عنصرين', few: 'نقل ${count} عناصر', many: 'نقل ${count} عنصرًا', other: 'نقل ${count} عنصرًا')}"; + + static String m50(albumName) => "تم النقل بنجاح إلى ${albumName}"; + + static String m51(personName) => "لا توجد اقتراحات لـ ${personName}"; + + static String m52(name) => "ليس ${name}؟"; + + static String m53(familyAdminEmail) => + "يرجى الاتصال بـ ${familyAdminEmail} لتغيير الرمز الخاص بك."; + + static String m54(name) => "الاحتفال مع ${name}"; + + static String m55(passwordStrengthValue) => + "قوة كلمة المرور: ${passwordStrengthValue}"; + + static String m56(providerName) => + "يرجى التواصل مع دعم ${providerName} إذا تم خصم المبلغ منك."; + + static String m57(name, age) => "${name} يبلغ ${age}!"; + + static String m58(name, age) => "${name} سيبلغ ${age} قريبًا"; + + static String m59(count) => + "${Intl.plural(count, zero: 'لا توجد صور', one: 'صورة واحدة', two: 'صورتان', few: '${count} صور', many: '${count} صورة', other: '${count} صورة')}"; + + static String m60(count) => + "${Intl.plural(count, zero: 'لا توجد صور', one: 'صورة واحدة', two: 'صورتان', few: '${count} صور', many: '${count} صورة', other: '${count} صورة')}"; + + static String m61(endDate) => + "التجربة المجانية صالحة حتى ${endDate}.\nيمكنك اختيار خطة مدفوعة بعد ذلك."; + + static String m62(toEmail) => + "يرجى مراسلتنا عبر البريد الإلكتروني على ${toEmail}"; + + static String m63(toEmail) => "يرجى إرسال السجلات إلى \n${toEmail}"; + + static String m64(name) => "التقاط صور مع ${name}"; + + static String m65(folderName) => "جارٍ معالجة ${folderName}..."; + + static String m66(storeName) => "قيّمنا على ${storeName}"; + + static String m67(name) => "تمت إعادة تعيينك إلى ${name}"; + + static String m68(days, email) => + "يمكنك الوصول إلى الحساب بعد ${days} أيام. سيتم إرسال إشعار إلى ${email}."; + + static String m69(email) => + "يمكنك الآن استرداد حساب ${email} عن طريق تعيين كلمة مرور جديدة."; + + static String m70(email) => "${email} يحاول استرداد حسابك."; + + static String m71(storageInGB) => + "3. تحصلون كلاكما على ${storageInGB} جيجابايت* مجانًا"; + + static String m72(userEmail) => + "سيتم إزالة ${userEmail} من هذا الألبوم المشترك.\n\nسيتم أيضًا إزالة أي صور أضافها إلى الألبوم."; + + static String m73(endDate) => "يتجدد الاشتراك في ${endDate}"; + + static String m74(name) => "رحلة برية مع ${name}"; + + static String m75(count) => + "${Intl.plural(count, one: '${count} النتائج التي تم العثور عليها', other: '${count} النتائج التي تم العثور عليها')}"; + + static String m76(snapshotLength, searchLength) => + "عدم تطابق طول الأقسام: ${snapshotLength} != ${searchLength}"; + + static String m77(count) => "تم تحديد ${count}"; + + static String m78(count, yourCount) => + "تم تحديد ${count} (${yourCount} منها لك)"; + + static String m79(name) => "صور سيلفي مع ${name}"; + + static String m80(verificationID) => + "إليك معرّف التحقق الخاص بي لـ ente.io: ${verificationID}"; + + static String m81(verificationID) => + "مرحبًا، هل يمكنك تأكيد أن هذا هو معرّف التحقق الخاص بك على ente.io: ${verificationID}؟"; + + static String m82(referralCode, referralStorageInGB) => + "رمز إحالة Ente الخاص بي: ${referralCode}\n\nطبقه في الإعدادات ← عام ← الإحالات للحصول على ${referralStorageInGB} جيجابايت مجانًا بعد الاشتراك في خطة مدفوعة.\n\nhttps://ente.io"; + + static String m83(numberOfPeople) => + "${Intl.plural(numberOfPeople, zero: 'مشاركة مع أشخاص محددين', one: 'تمت المشاركة مع شخص واحد', two: 'تمت المشاركة مع شخصين', few: 'تمت المشاركة مع ${numberOfPeople} أشخاص', many: 'تمت المشاركة مع ${numberOfPeople} شخصًا', other: 'تمت المشاركة مع ${numberOfPeople} شخصًا')}"; + + static String m84(emailIDs) => "تمت المشاركة مع ${emailIDs}"; + + static String m85(fileType) => "سيتم حذف ${fileType} من جهازك."; + + static String m86(fileType) => "${fileType} موجود في Ente وعلى جهازك."; + + static String m87(fileType) => "سيتم حذف ${fileType} من Ente."; + + static String m88(name) => "الرياضة مع ${name}"; + + static String m89(name) => "تسليط الضوء على ${name}"; + + static String m90(storageAmountInGB) => "${storageAmountInGB} جيجابايت"; + + static String m91( + usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => + "تم استخدام ${usedAmount} ${usedStorageUnit} من ${totalAmount} ${totalStorageUnit}"; + + static String m92(id) => + "تم ربط ${id} الخاص بك بحساب Ente آخر.\nإذا كنت ترغب في استخدام ${id} مع هذا الحساب، يرجى الاتصال بدعمنا."; + + static String m93(endDate) => "سيتم إلغاء اشتراكك في ${endDate}"; + + static String m94(completed, total) => "${completed}/${total} ذكريات محفوظة"; + + static String m95(ignoreReason) => + "انقر للتحميل، تم تجاهل التحميل حاليًا بسبب ${ignoreReason}"; + + static String m96(storageAmountInGB) => + "سيحصلون أيضًا على ${storageAmountInGB} جيجابايت"; + + static String m97(email) => "هذا هو معرّف التحقق الخاص بـ ${email}"; + + static String m98(count) => + "${Intl.plural(count, one: 'هذا الأسبوع، قبل سنة', two: 'هذا الأسبوع، قبل سنتين', few: 'هذا الأسبوع، قبل ${count} سنوات', many: 'هذا الأسبوع، قبل ${count} سنة', other: 'هذا الأسبوع، قبل ${count} سنة')}"; + + static String m99(dateFormat) => "${dateFormat} عبر السنين"; + + static String m100(count) => + "${Intl.plural(count, zero: 'قريبًا', one: 'يوم واحد', two: 'يومان', few: '${count} أيام', many: '${count} يومًا', other: '${count} يومًا')}"; + + static String m101(year) => "رحلة في ${year}"; + + static String m102(location) => "رحلة إلى ${location}"; + + static String m103(email) => + "لقد تمت دعوتك لتكون جهة اتصال موثوقة بواسطة ${email}."; + + static String m104(galleryType) => + "نوع المعرض ${galleryType} غير مدعوم لإعادة التسمية."; + + static String m105(ignoreReason) => "تم تجاهل التحميل بسبب ${ignoreReason}"; + + static String m106(count) => "جارٍ حفظ ${count} ذكريات..."; + + static String m107(endDate) => "صالح حتى ${endDate}"; + + static String m108(email) => "التحقق من ${email}"; + + static String m109(count) => + "${Intl.plural(count, zero: 'تمت إضافة 0 مشاهدين', one: 'تمت إضافة مشاهد واحد', two: 'تمت إضافة مشاهدين', few: 'تمت إضافة ${count} مشاهدين', many: 'تمت إضافة ${count} مشاهدًا', other: 'تمت إضافة ${count} مشاهدًا')}"; + + static String m110(email) => + "لقد أرسلنا بريدًا إلكترونيًا إلى ${email}"; + + static String m111(count) => + "${Intl.plural(count, one: 'قبل سنة', two: 'قبل سنتين', few: 'قبل ${count} سنوات', many: 'قبل ${count} سنة', other: 'قبل ${count} سنة')}"; + + static String m112(name) => "أنت و ${name}"; + + static String m113(storageSaved) => "لقد حررت ${storageSaved} بنجاح!"; + final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { + "aNewVersionOfEnteIsAvailable": + MessageLookupByLibrary.simpleMessage("يتوفر إصدار جديد من Ente."), + "about": MessageLookupByLibrary.simpleMessage("حول التطبيق"), + "acceptTrustInvite": + MessageLookupByLibrary.simpleMessage("قبول الدعوة"), + "account": MessageLookupByLibrary.simpleMessage("الحساب"), + "accountIsAlreadyConfigured": + MessageLookupByLibrary.simpleMessage("الحساب تم تكوينه بالفعل."), + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("مرحبًا مجددًا!"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( - "أُدركُ أنّني فقدتُ كلمة مروري، فقد أفقد بياناتي لأن بياناتي مشفرة تشفيرًا تامًّا من النهاية إلى النهاية."), - "askDeleteReason": MessageLookupByLibrary.simpleMessage( - "ما السبب الرئيسي وراء حذف حسابك؟"), + "أدرك أنني إذا فقدت كلمة المرور، فقد أفقد بياناتي لأنها مشفرة بالكامل من طرف إلى طرف."), + "activeSessions": + MessageLookupByLibrary.simpleMessage("الجلسات النشطة"), + "add": MessageLookupByLibrary.simpleMessage("إضافة"), + "addAName": MessageLookupByLibrary.simpleMessage("إضافة اسم"), + "addANewEmail": + MessageLookupByLibrary.simpleMessage("إضافة بريد إلكتروني جديد"), + "addCollaborator": MessageLookupByLibrary.simpleMessage("إضافة متعاون"), + "addCollaborators": m1, + "addFiles": MessageLookupByLibrary.simpleMessage("إضافة ملفات"), + "addFromDevice": + MessageLookupByLibrary.simpleMessage("إضافة من الجهاز"), + "addItem": m2, + "addLocation": MessageLookupByLibrary.simpleMessage("إضافة موقع"), + "addLocationButton": MessageLookupByLibrary.simpleMessage("إضافة"), + "addMore": MessageLookupByLibrary.simpleMessage("إضافة المزيد"), + "addName": MessageLookupByLibrary.simpleMessage("إضافة اسم"), + "addNameOrMerge": + MessageLookupByLibrary.simpleMessage("إضافة اسم أو دمج"), + "addNew": MessageLookupByLibrary.simpleMessage("إضافة جديد"), + "addNewPerson": MessageLookupByLibrary.simpleMessage("إضافة شخص جديد"), + "addOnPageSubtitle": + MessageLookupByLibrary.simpleMessage("تفاصيل الإضافات"), + "addOnValidTill": m3, + "addOns": MessageLookupByLibrary.simpleMessage("الإضافات"), + "addPhotos": MessageLookupByLibrary.simpleMessage("إضافة صور"), + "addSelected": MessageLookupByLibrary.simpleMessage("إضافة المحدد"), + "addToAlbum": MessageLookupByLibrary.simpleMessage("إضافة إلى الألبوم"), + "addToEnte": MessageLookupByLibrary.simpleMessage("إضافة إلى Ente"), + "addToHiddenAlbum": + MessageLookupByLibrary.simpleMessage("إضافة إلى الألبوم المخفي"), + "addTrustedContact": + MessageLookupByLibrary.simpleMessage("إضافة جهة اتصال موثوقة"), + "addViewer": MessageLookupByLibrary.simpleMessage("إضافة مشاهد"), + "addViewers": m4, + "addYourPhotosNow": + MessageLookupByLibrary.simpleMessage("أضف صورك الآن"), + "addedAs": MessageLookupByLibrary.simpleMessage("تمت الإضافة كـ"), + "addedBy": m5, + "addedSuccessfullyTo": m6, + "addingToFavorites": + MessageLookupByLibrary.simpleMessage("جارٍ الإضافة إلى المفضلة..."), + "admiringThem": m7, + "advanced": MessageLookupByLibrary.simpleMessage("متقدم"), + "advancedSettings": + MessageLookupByLibrary.simpleMessage("الإعدادات المتقدمة"), + "after1Day": MessageLookupByLibrary.simpleMessage("بعد يوم"), + "after1Hour": MessageLookupByLibrary.simpleMessage("بعد ساعة"), + "after1Month": MessageLookupByLibrary.simpleMessage("بعد شهر"), + "after1Week": MessageLookupByLibrary.simpleMessage("بعد أسبوع"), + "after1Year": MessageLookupByLibrary.simpleMessage("بعد سنة"), + "albumOwner": MessageLookupByLibrary.simpleMessage("المالك"), + "albumParticipantsCount": m8, + "albumTitle": MessageLookupByLibrary.simpleMessage("عنوان الألبوم"), + "albumUpdated": + MessageLookupByLibrary.simpleMessage("تم تحديث الألبوم"), + "albums": MessageLookupByLibrary.simpleMessage("الألبومات"), + "allClear": MessageLookupByLibrary.simpleMessage("✨ كل شيء واضح"), + "allMemoriesPreserved": + MessageLookupByLibrary.simpleMessage("تم حفظ جميع الذكريات"), + "allPersonGroupingWillReset": MessageLookupByLibrary.simpleMessage( + "سيتم إعادة تعيين جميع تجمعات هذا الشخص، وستفقد جميع الاقتراحات المقدمة لهذا الشخص."), + "allWillShiftRangeBasedOnFirst": MessageLookupByLibrary.simpleMessage( + "هذه هي الأولى في المجموعة. سيتم تغيير تواريخ الصور المحددة الأخرى تلقائيًا بناءً على هذا التاريخ الجديد."), + "allow": MessageLookupByLibrary.simpleMessage("السماح"), + "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( + "السماح للأشخاص الذين لديهم الرابط بإضافة صور إلى الألبوم المشترك أيضًا."), + "allowAddingPhotos": + MessageLookupByLibrary.simpleMessage("السماح بإضافة الصور"), + "allowAppToOpenSharedAlbumLinks": MessageLookupByLibrary.simpleMessage( + "السماح للتطبيق بفتح روابط الألبومات المشتركة"), + "allowDownloads": + MessageLookupByLibrary.simpleMessage("السماح بالتنزيلات"), + "allowPeopleToAddPhotos": + MessageLookupByLibrary.simpleMessage("السماح للأشخاص بإضافة الصور"), + "allowPermBody": MessageLookupByLibrary.simpleMessage( + "يرجى السماح بالوصول إلى صورك من الإعدادات حتى يتمكن Ente من عرض نسختك الاحتياطية ومكتبتك."), + "allowPermTitle": + MessageLookupByLibrary.simpleMessage("السماح بالوصول إلى الصور"), + "androidBiometricHint": + MessageLookupByLibrary.simpleMessage("تحقق من الهوية"), + "androidBiometricNotRecognized": MessageLookupByLibrary.simpleMessage( + "لم يتم التعرف. حاول مرة أخرى."), + "androidBiometricRequiredTitle": + MessageLookupByLibrary.simpleMessage("المصادقة البيومترية مطلوبة"), + "androidBiometricSuccess": MessageLookupByLibrary.simpleMessage("نجاح"), + "androidCancelButton": MessageLookupByLibrary.simpleMessage("إلغاء"), + "androidDeviceCredentialsRequiredTitle": + MessageLookupByLibrary.simpleMessage("بيانات اعتماد الجهاز مطلوبة"), + "androidDeviceCredentialsSetupDescription": + MessageLookupByLibrary.simpleMessage("بيانات اعتماد الجهاز مطلوبة"), + "androidGoToSettingsDescription": MessageLookupByLibrary.simpleMessage( + "لم يتم إعداد المصادقة البيومترية على جهازك. انتقل إلى \'الإعدادات > الأمان\' لإضافة المصادقة البيومترية."), + "androidIosWebDesktop": MessageLookupByLibrary.simpleMessage( + "أندرويد، iOS، الويب، سطح المكتب"), + "androidSignInTitle": + MessageLookupByLibrary.simpleMessage("المصادقة مطلوبة"), + "appIcon": MessageLookupByLibrary.simpleMessage("أيقونة التطبيق"), + "appLock": MessageLookupByLibrary.simpleMessage("قفل التطبيق"), + "appLockDescriptions": MessageLookupByLibrary.simpleMessage( + "اختر بين شاشة القفل الافتراضية لجهازك وشاشة قفل مخصصة برمز PIN أو كلمة مرور."), + "appVersion": m9, + "appleId": MessageLookupByLibrary.simpleMessage("معرّف Apple"), + "apply": MessageLookupByLibrary.simpleMessage("تطبيق"), + "applyCodeTitle": MessageLookupByLibrary.simpleMessage("تطبيق الرمز"), + "appstoreSubscription": + MessageLookupByLibrary.simpleMessage("اشتراك متجر App Store"), + "archive": MessageLookupByLibrary.simpleMessage("الأرشيف"), + "archiveAlbum": MessageLookupByLibrary.simpleMessage("أرشفة الألبوم"), + "archiving": MessageLookupByLibrary.simpleMessage("جارٍ الأرشفة..."), + "areYouSureThatYouWantToLeaveTheFamily": + MessageLookupByLibrary.simpleMessage( + "هل أنت متأكد من رغبتك في مغادرة الخطة العائلية؟"), + "areYouSureYouWantToCancel": MessageLookupByLibrary.simpleMessage( + "هل أنت متأكد من رغبتك في الإلغاء؟"), + "areYouSureYouWantToChangeYourPlan": + MessageLookupByLibrary.simpleMessage( + "هل أنت متأكد من رغبتك في تغيير خطتك؟"), + "areYouSureYouWantToExit": MessageLookupByLibrary.simpleMessage( + "هل أنت متأكد من رغبتك في الخروج؟"), + "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( + "هل أنت متأكد من رغبتك في تسجيل الخروج؟"), + "areYouSureYouWantToRenew": MessageLookupByLibrary.simpleMessage( + "هل أنت متأكد من رغبتك في التجديد؟"), + "areYouSureYouWantToResetThisPerson": + MessageLookupByLibrary.simpleMessage( + "هل أنت متأكد من رغبتك في إعادة تعيين هذا الشخص؟"), + "askCancelReason": MessageLookupByLibrary.simpleMessage( + "تم إلغاء اشتراكك. هل ترغب في مشاركة السبب؟"), + "askDeleteReason": + MessageLookupByLibrary.simpleMessage("ما السبب الرئيس لحذف حسابك؟"), + "askYourLovedOnesToShare": + MessageLookupByLibrary.simpleMessage("اطلب من أحبائك المشاركة"), + "atAFalloutShelter": + MessageLookupByLibrary.simpleMessage("في ملجأ للطوارئ"), + "authToChangeEmailVerificationSetting": + MessageLookupByLibrary.simpleMessage( + "يرجى المصادقة لتغيير إعداد التحقق من البريد الإلكتروني."), + "authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage( + "يرجى المصادقة لتغيير إعدادات شاشة القفل."), + "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( + "يرجى المصادقة لتغيير بريدك الإلكتروني."), + "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( + "يرجى المصادقة لتغيير كلمة المرور الخاصة بك."), + "authToConfigureTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "يرجى المصادقة لإعداد المصادقة الثنائية."), + "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( + "يرجى المصادقة لبدء عملية حذف الحساب."), + "authToManageLegacy": MessageLookupByLibrary.simpleMessage( + "يرجى المصادقة لإدارة جهات الاتصال الموثوقة الخاصة بك."), + "authToViewPasskey": MessageLookupByLibrary.simpleMessage( + "يرجى المصادقة لعرض مفتاح المرور الخاص بك."), + "authToViewTrashedFiles": MessageLookupByLibrary.simpleMessage( + "يرجى المصادقة لعرض ملفاتك المحذوفة."), + "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( + "يرجى المصادقة لعرض جلساتك النشطة."), + "authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage( + "يرجى المصادقة للوصول إلى ملفاتك المخفية."), + "authToViewYourMemories": + MessageLookupByLibrary.simpleMessage("يرجى المصادقة لعرض ذكرياتك."), + "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "يرجى المصادقة لعرض مفتاح الاسترداد الخاص بك."), + "authenticating": + MessageLookupByLibrary.simpleMessage("جارٍ المصادقة..."), + "authenticationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "فشلت المصادقة، يرجى المحاولة مرة أخرى."), + "authenticationSuccessful": + MessageLookupByLibrary.simpleMessage("تمت المصادقة بنجاح!"), + "autoCastDialogBody": MessageLookupByLibrary.simpleMessage( + "سترى أجهزة Cast المتاحة هنا."), + "autoCastiOSPermission": MessageLookupByLibrary.simpleMessage( + "تأكد من تشغيل أذونات الشبكة المحلية لتطبيق Ente Photos في الإعدادات."), + "autoLock": MessageLookupByLibrary.simpleMessage("قفل تلقائي"), + "autoLockFeatureDescription": MessageLookupByLibrary.simpleMessage( + "الوقت الذي يتم بعده قفل التطبيق بعد وضعه في الخلفية."), + "autoLogoutMessage": MessageLookupByLibrary.simpleMessage( + "بسبب خلل تقني، تم تسجيل خروجك. نعتذر عن الإزعاج."), + "autoPair": MessageLookupByLibrary.simpleMessage("إقران تلقائي"), + "autoPairDesc": MessageLookupByLibrary.simpleMessage( + "الإقران التلقائي يعمل فقط مع الأجهزة التي تدعم Chromecast."), + "available": MessageLookupByLibrary.simpleMessage("متوفر"), + "availableStorageSpace": m10, + "backedUpFolders": + MessageLookupByLibrary.simpleMessage("المجلدات المنسوخة احتياطيًا"), + "backgroundWithThem": m11, + "backup": MessageLookupByLibrary.simpleMessage("النسخ الاحتياطي"), + "backupFailed": + MessageLookupByLibrary.simpleMessage("فشل النسخ الاحتياطي"), + "backupFile": MessageLookupByLibrary.simpleMessage("نسخ احتياطي للملف"), + "backupOverMobileData": MessageLookupByLibrary.simpleMessage( + "النسخ الاحتياطي عبر بيانات الجوال"), + "backupSettings": + MessageLookupByLibrary.simpleMessage("إعدادات النسخ الاحتياطي"), + "backupStatus": + MessageLookupByLibrary.simpleMessage("حالة النسخ الاحتياطي"), + "backupStatusDescription": MessageLookupByLibrary.simpleMessage( + "ستظهر العناصر التي تم نسخها احتياطيًا هنا"), + "backupVideos": MessageLookupByLibrary.simpleMessage( + "النسخ الاحتياطي لمقاطع الفيديو"), + "beach": MessageLookupByLibrary.simpleMessage("رمال وبحر"), + "birthday": MessageLookupByLibrary.simpleMessage("تاريخ الميلاد"), + "blackFridaySale": + MessageLookupByLibrary.simpleMessage("تخفيضات الجمعة السوداء"), + "blog": MessageLookupByLibrary.simpleMessage("المدونة"), + "cLBulkEdit": + MessageLookupByLibrary.simpleMessage("تعديل التواريخ بشكل جماعي"), + "cLBulkEditDesc": MessageLookupByLibrary.simpleMessage( + "يمكنك الآن تحديد صور متعددة، وتعديل التاريخ/الوقت لجميعها بإجراء سريع واحد. تغيير التواريخ مدعوم أيضًا."), + "cLFamilyPlan": + MessageLookupByLibrary.simpleMessage("حدود الخطة العائلية"), + "cLFamilyPlanDesc": MessageLookupByLibrary.simpleMessage( + "يمكنك الآن تعيين حدود لمقدار التخزين الذي يمكن لأفراد عائلتك استخدامه."), + "cLIcon": MessageLookupByLibrary.simpleMessage("أيقونة جديدة"), + "cLIconDesc": MessageLookupByLibrary.simpleMessage( + "أخيرًا، أيقونة تطبيق جديدة، نعتقد أنها تمثل عملنا على أفضل وجه. أضفنا أيضًا مبدل أيقونات حتى تتمكن من الاستمرار في استخدام الأيقونة القديمة."), + "cLMemories": MessageLookupByLibrary.simpleMessage("الذكريات"), + "cLMemoriesDesc": MessageLookupByLibrary.simpleMessage( + "أعد اكتشاف لحظاتك الخاصة - تسليط الضوء على الأشخاص المفضلين لديك، رحلاتك وعطلاتك، أفضل لقطاتك، وأكثر من ذلك بكثير. قم بتشغيل تعلم الآلة، ضع علامة على نفسك وقم بتسمية أصدقائك للحصول على أفضل تجربة."), + "cLWidgets": + MessageLookupByLibrary.simpleMessage("الأدوات المصغرة (Widgets)"), + "cLWidgetsDesc": MessageLookupByLibrary.simpleMessage( + "الأدوات المصغرة للشاشة الرئيسية المدمجة مع الذكريات متاحة الآن. ستعرض لحظاتك الخاصة دون فتح التطبيق."), + "cachedData": MessageLookupByLibrary.simpleMessage("البيانات المؤقتة"), + "calculating": MessageLookupByLibrary.simpleMessage("جارٍ الحساب..."), + "canNotOpenBody": MessageLookupByLibrary.simpleMessage( + "عذرًا، لا يمكن فتح هذا الألبوم في التطبيق."), + "canNotOpenTitle": + MessageLookupByLibrary.simpleMessage("لا يمكن فتح هذا الألبوم"), + "canNotUploadToAlbumsOwnedByOthers": + MessageLookupByLibrary.simpleMessage( + "لا يمكن التحميل إلى ألبومات يملكها آخرون."), + "canOnlyCreateLinkForFilesOwnedByYou": + MessageLookupByLibrary.simpleMessage( + "يمكن إنشاء رابط للملفات التي تملكها فقط."), + "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( + "يمكنك فقط إزالة الملفات التي تملكها."), "cancel": MessageLookupByLibrary.simpleMessage("إلغاء"), - "decrypting": MessageLookupByLibrary.simpleMessage("فك التشفير..."), + "cancelAccountRecovery": + MessageLookupByLibrary.simpleMessage("إلغاء استرداد الحساب"), + "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( + "هل أنت متأكد من رغبتك في إلغاء الاسترداد؟"), + "cancelOtherSubscription": m12, + "cancelSubscription": + MessageLookupByLibrary.simpleMessage("إلغاء الاشتراك"), + "cannotAddMorePhotosAfterBecomingViewer": m13, + "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( + "لا يمكن حذف الملفات المشتركة."), + "castAlbum": MessageLookupByLibrary.simpleMessage("بث الألبوم"), + "castIPMismatchBody": MessageLookupByLibrary.simpleMessage( + "يرجى التأكد من أنك متصل بنفس الشبكة المتصل بها التلفزيون."), + "castIPMismatchTitle": + MessageLookupByLibrary.simpleMessage("فشل بث الألبوم"), + "castInstruction": MessageLookupByLibrary.simpleMessage( + "قم بزيارة cast.ente.io على الجهاز الذي تريد إقرانه.\n\nأدخل الرمز أدناه لتشغيل الألبوم على تلفزيونك."), + "centerPoint": MessageLookupByLibrary.simpleMessage("نقطة المركز"), + "change": MessageLookupByLibrary.simpleMessage("تغيير"), + "changeEmail": + MessageLookupByLibrary.simpleMessage("تغيير البريد الإلكتروني"), + "changeLocationOfSelectedItems": + MessageLookupByLibrary.simpleMessage("تغيير موقع العناصر المحددة؟"), + "changePassword": + MessageLookupByLibrary.simpleMessage("تغيير كلمة المرور"), + "changePasswordTitle": + MessageLookupByLibrary.simpleMessage("تغيير كلمة المرور"), + "changePermissions": + MessageLookupByLibrary.simpleMessage("تغيير الإذن؟"), + "changeYourReferralCode": + MessageLookupByLibrary.simpleMessage("تغيير رمز الإحالة الخاص بك"), + "checkForUpdates": + MessageLookupByLibrary.simpleMessage("التحقق من وجود تحديثات"), + "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( + "تحقق من صندوق الوارد ومجلد البريد غير الهام (Spam) لإكمال التحقق"), + "checkStatus": MessageLookupByLibrary.simpleMessage("التحقق من الحالة"), + "checking": MessageLookupByLibrary.simpleMessage("جارٍ التحقق..."), + "checkingModels": + MessageLookupByLibrary.simpleMessage("جارٍ فحص النماذج..."), + "city": MessageLookupByLibrary.simpleMessage("في المدينة"), + "claimFreeStorage": MessageLookupByLibrary.simpleMessage( + "المطالبة بمساحة تخزين مجانية"), + "claimMore": MessageLookupByLibrary.simpleMessage("المطالبة بالمزيد!"), + "claimed": MessageLookupByLibrary.simpleMessage("تم الحصول عليها"), + "claimedStorageSoFar": m14, + "cleanUncategorized": + MessageLookupByLibrary.simpleMessage("تنظيف غير المصنف"), + "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( + "إزالة جميع الملفات من قسم \'غير مصنف\' الموجودة في ألبومات أخرى."), + "clearCaches": + MessageLookupByLibrary.simpleMessage("مسح ذاكرة التخزين المؤقت"), + "clearIndexes": MessageLookupByLibrary.simpleMessage("مسح الفهارس"), + "click": MessageLookupByLibrary.simpleMessage("• انقر على"), + "clickOnTheOverflowMenu": MessageLookupByLibrary.simpleMessage( + "• انقر على قائمة الخيارات الإضافية"), + "close": MessageLookupByLibrary.simpleMessage("إغلاق"), + "clubByCaptureTime": + MessageLookupByLibrary.simpleMessage("التجميع حسب وقت الالتقاط"), + "clubByFileName": + MessageLookupByLibrary.simpleMessage("التجميع حسب اسم الملف"), + "clusteringProgress": + MessageLookupByLibrary.simpleMessage("تقدم التجميع"), + "codeAppliedPageTitle": + MessageLookupByLibrary.simpleMessage("تم تطبيق الرمز"), + "codeChangeLimitReached": MessageLookupByLibrary.simpleMessage( + "عذرًا، لقد تجاوزت الحد المسموح به لتعديلات الرمز."), + "codeCopiedToClipboard": + MessageLookupByLibrary.simpleMessage("تم نسخ الرمز إلى الحافظة"), + "codeUsedByYou": + MessageLookupByLibrary.simpleMessage("الرمز المستخدم من قبلك"), + "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( + "أنشئ رابطًا يسمح للأشخاص بإضافة الصور ومشاهدتها في ألبومك المشترك دون الحاجة إلى تطبيق Ente أو حساب. خيار مثالي لجمع صور الفعاليات بسهولة."), + "collaborativeLink": + MessageLookupByLibrary.simpleMessage("رابط تعاوني"), + "collaborativeLinkCreatedFor": m15, + "collaborator": MessageLookupByLibrary.simpleMessage("متعاون"), + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": + MessageLookupByLibrary.simpleMessage( + "يمكن للمتعاونين إضافة الصور ومقاطع الفيديو إلى الألبوم المشترك."), + "collaboratorsSuccessfullyAdded": m16, + "collageLayout": MessageLookupByLibrary.simpleMessage("التخطيط"), + "collageSaved": + MessageLookupByLibrary.simpleMessage("تم حفظ الكولاج في المعرض."), + "collect": MessageLookupByLibrary.simpleMessage("جمع"), + "collectEventPhotos": + MessageLookupByLibrary.simpleMessage("جمع صور الفعالية"), + "collectPhotos": MessageLookupByLibrary.simpleMessage("جمع الصور"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "أنشئ رابطًا يمكن لأصدقائك من خلاله تحميل الصور بالجودة الأصلية."), + "color": MessageLookupByLibrary.simpleMessage("اللون"), + "configuration": MessageLookupByLibrary.simpleMessage("التكوين"), + "confirm": MessageLookupByLibrary.simpleMessage("تأكيد"), + "confirm2FADisable": MessageLookupByLibrary.simpleMessage( + "هل أنت متأكد من رغبتك في تعطيل المصادقة الثنائية؟"), + "confirmAccountDeletion": + MessageLookupByLibrary.simpleMessage("تأكيد حذف الحساب"), + "confirmAddingTrustedContact": m17, + "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( + "نعم، أرغب في حذف هذا الحساب وبياناته نهائيًا من جميع التطبيقات."), + "confirmPassword": + MessageLookupByLibrary.simpleMessage("تأكيد كلمة المرور"), + "confirmPlanChange": + MessageLookupByLibrary.simpleMessage("تأكيد تغيير الخطة"), + "confirmRecoveryKey": + MessageLookupByLibrary.simpleMessage("تأكيد مفتاح الاسترداد"), + "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "تأكيد مفتاح الاسترداد الخاص بك"), + "connectToDevice": + MessageLookupByLibrary.simpleMessage("الاتصال بالجهاز"), + "contactFamilyAdmin": m18, + "contactSupport": + MessageLookupByLibrary.simpleMessage("الاتصال بالدعم"), + "contactToManageSubscription": m19, + "contacts": MessageLookupByLibrary.simpleMessage("جهات الاتصال"), + "contents": MessageLookupByLibrary.simpleMessage("المحتويات"), + "continueLabel": MessageLookupByLibrary.simpleMessage("متابعة"), + "continueOnFreeTrial": MessageLookupByLibrary.simpleMessage( + "الاستمرار في التجربة المجانية"), + "convertToAlbum": + MessageLookupByLibrary.simpleMessage("تحويل إلى ألبوم"), + "copyEmailAddress": + MessageLookupByLibrary.simpleMessage("نسخ عنوان البريد الإلكتروني"), + "copyLink": MessageLookupByLibrary.simpleMessage("نسخ الرابط"), + "copypasteThisCodentoYourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "انسخ هذا الرمز وألصقه\n في تطبيق المصادقة الخاص بك"), + "couldNotBackUpTryLater": MessageLookupByLibrary.simpleMessage( + "لم نتمكن من نسخ بياناتك احتياطيًا.\nسنحاول مرة أخرى لاحقًا."), + "couldNotFreeUpSpace": + MessageLookupByLibrary.simpleMessage("تعذر تحرير المساحة."), + "couldNotUpdateSubscription": + MessageLookupByLibrary.simpleMessage("تعذر تحديث الاشتراك."), + "count": MessageLookupByLibrary.simpleMessage("العدد"), + "crashReporting": + MessageLookupByLibrary.simpleMessage("الإبلاغ عن الأعطال"), + "create": MessageLookupByLibrary.simpleMessage("إنشاء"), + "createAccount": MessageLookupByLibrary.simpleMessage("إنشاء حساب"), + "createAlbumActionHint": MessageLookupByLibrary.simpleMessage( + "اضغط مطولاً لتحديد الصور ثم انقر على \'+\' لإنشاء ألبوم"), + "createCollaborativeLink": + MessageLookupByLibrary.simpleMessage("إنشاء رابط تعاوني"), + "createCollage": MessageLookupByLibrary.simpleMessage("إنشاء كولاج"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("إنشاء حساب جديد"), + "createOrSelectAlbum": + MessageLookupByLibrary.simpleMessage("إنشاء أو تحديد ألبوم"), + "createPublicLink": + MessageLookupByLibrary.simpleMessage("إنشاء رابط عام"), + "creatingLink": + MessageLookupByLibrary.simpleMessage("جارٍ إنشاء الرابط..."), + "criticalUpdateAvailable": + MessageLookupByLibrary.simpleMessage("يتوفر تحديث حرج"), + "crop": MessageLookupByLibrary.simpleMessage("اقتصاص"), + "curatedMemories": MessageLookupByLibrary.simpleMessage("ذكريات منسقة"), + "currentUsageIs": + MessageLookupByLibrary.simpleMessage("استخدامك الحالي هو"), + "currentlyRunning": + MessageLookupByLibrary.simpleMessage("قيد التشغيل حاليًا"), + "custom": MessageLookupByLibrary.simpleMessage("مخصص"), + "customEndpoint": m20, + "darkTheme": MessageLookupByLibrary.simpleMessage("داكن"), + "dayToday": MessageLookupByLibrary.simpleMessage("اليوم"), + "dayYesterday": MessageLookupByLibrary.simpleMessage("الأمس"), + "declineTrustInvite": + MessageLookupByLibrary.simpleMessage("رفض الدعوة"), + "decrypting": + MessageLookupByLibrary.simpleMessage("جارٍ فك التشفير..."), + "decryptingVideo": + MessageLookupByLibrary.simpleMessage("جارٍ فك تشفير الفيديو..."), + "deduplicateFiles": + MessageLookupByLibrary.simpleMessage("إزالة الملفات المكررة"), + "delete": MessageLookupByLibrary.simpleMessage("حذف"), "deleteAccount": MessageLookupByLibrary.simpleMessage("حذف الحساب"), "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( - "نحن آسفون لرؤيتك تذهب. يرجى مشاركة ملاحظاتك لمساعدتنا على التحسن."), + "نأسف لمغادرتك. نرجو مشاركة ملاحظاتك لمساعدتنا على التحسين."), + "deleteAccountPermanentlyButton": + MessageLookupByLibrary.simpleMessage("حذف الحساب نهائيًا"), + "deleteAlbum": MessageLookupByLibrary.simpleMessage("حذف الألبوم"), + "deleteAlbumDialog": MessageLookupByLibrary.simpleMessage( + "هل ترغب أيضًا في حذف الصور (ومقاطع الفيديو) الموجودة في هذا الألبوم من جميع الألبومات الأخرى التي هي جزء منها؟"), + "deleteAlbumsDialogBody": MessageLookupByLibrary.simpleMessage( + "سيؤدي هذا إلى حذف جميع الألبومات الفارغة. هذا مفيد عندما تريد تقليل الفوضى في قائمة ألبوماتك."), + "deleteAll": MessageLookupByLibrary.simpleMessage("حذف الكل"), + "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( + "هذا الحساب مرتبط بتطبيقات Ente الأخرى، إذا كنت تستخدم أيًا منها. سيتم جدولة بياناتك التي تم تحميلها، عبر جميع تطبيقات Ente، للحذف، وسيتم حذف حسابك نهائيًا."), + "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( + "أرسل بريدًا إلكترونيًا إلى account-deletion@ente.io من عنوان بريدك الإلكتروني المسجل."), + "deleteEmptyAlbums": + MessageLookupByLibrary.simpleMessage("حذف الألبومات الفارغة"), + "deleteEmptyAlbumsWithQuestionMark": + MessageLookupByLibrary.simpleMessage("حذف الألبومات الفارغة؟"), + "deleteFromBoth": + MessageLookupByLibrary.simpleMessage("الحذف من كليهما"), + "deleteFromDevice": + MessageLookupByLibrary.simpleMessage("الحذف من الجهاز"), + "deleteFromEnte": MessageLookupByLibrary.simpleMessage("الحذف من Ente"), + "deleteItemCount": m21, + "deleteLocation": MessageLookupByLibrary.simpleMessage("حذف الموقع"), + "deletePhotos": MessageLookupByLibrary.simpleMessage("حذف الصور"), + "deleteProgress": m22, + "deleteReason1": MessageLookupByLibrary.simpleMessage( + "تفتقر إلى مِيزة أساسية أحتاج إليها"), + "deleteReason2": MessageLookupByLibrary.simpleMessage( + "التطبيق أو مِيزة معينة لا تعمل كما هو متوقع"), + "deleteReason3": + MessageLookupByLibrary.simpleMessage("وجدت خدمة أخرى أفضل"), + "deleteReason4": MessageLookupByLibrary.simpleMessage("سببي غير مدرج"), + "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( + "ستتم معالجة طلبك خلال 72 ساعة."), + "deleteSharedAlbum": + MessageLookupByLibrary.simpleMessage("حذف الألبوم المشترك؟"), + "deleteSharedAlbumDialogBody": MessageLookupByLibrary.simpleMessage( + "سيتم حذف الألبوم للجميع.\n\nستفقد الوصول إلى الصور المشتركة في هذا الألبوم التي يملكها الآخرون."), + "deselectAll": MessageLookupByLibrary.simpleMessage("إلغاء تحديد الكل"), + "designedToOutlive": + MessageLookupByLibrary.simpleMessage("مصممة لتدوم"), + "details": MessageLookupByLibrary.simpleMessage("التفاصيل"), + "developerSettings": + MessageLookupByLibrary.simpleMessage("إعدادات المطور"), + "developerSettingsWarning": MessageLookupByLibrary.simpleMessage( + "هل أنت متأكد من رغبتك في تعديل إعدادات المطور؟"), + "deviceCodeHint": MessageLookupByLibrary.simpleMessage("أدخل الرمز"), + "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( + "سيتم تحميل الملفات المضافة إلى ألبوم الجهاز هذا تلقائيًا إلى Ente."), + "deviceLock": MessageLookupByLibrary.simpleMessage("قفل الجهاز"), + "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( + "عطّل قفل شاشة الجهاز عندما يكون Ente قيد التشغيل في المقدمة ويقوم بالنسخ الاحتياطي.\nهذا الإجراء غير مطلوب عادةً، لكنه قد يسرّع إكمال التحميلات الكبيرة أو الاستيرادات الأولية للمكتبات الضخمة."), + "deviceNotFound": + MessageLookupByLibrary.simpleMessage("لم يتم العثور على الجهاز"), + "didYouKnow": MessageLookupByLibrary.simpleMessage("هل تعلم؟"), + "disableAutoLock": + MessageLookupByLibrary.simpleMessage("تعطيل القفل التلقائي"), + "disableDownloadWarningBody": MessageLookupByLibrary.simpleMessage( + "لا يزال بإمكان المشاهدين التقاط لقطات شاشة أو حفظ نسخة من صورك باستخدام أدوات خارجية."), + "disableDownloadWarningTitle": + MessageLookupByLibrary.simpleMessage("يرجى الملاحظة"), + "disableLinkMessage": m23, + "disableTwofactor": + MessageLookupByLibrary.simpleMessage("تعطيل المصادقة الثنائية"), + "disablingTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "جارٍ تعطيل المصادقة الثنائية..."), + "discord": MessageLookupByLibrary.simpleMessage("Discord"), + "discover": MessageLookupByLibrary.simpleMessage("اكتشاف"), + "discover_babies": MessageLookupByLibrary.simpleMessage("الأطفال"), + "discover_celebrations": + MessageLookupByLibrary.simpleMessage("الاحتفالات"), + "discover_food": MessageLookupByLibrary.simpleMessage("الطعام"), + "discover_greenery": + MessageLookupByLibrary.simpleMessage("المساحات الخضراء"), + "discover_hills": MessageLookupByLibrary.simpleMessage("التلال"), + "discover_identity": MessageLookupByLibrary.simpleMessage("الهوية"), + "discover_memes": MessageLookupByLibrary.simpleMessage("الميمز"), + "discover_notes": MessageLookupByLibrary.simpleMessage("الملاحظات"), + "discover_pets": + MessageLookupByLibrary.simpleMessage("الحيوانات الأليفة"), + "discover_receipts": MessageLookupByLibrary.simpleMessage("الإيصالات"), + "discover_screenshots": + MessageLookupByLibrary.simpleMessage("لقطات الشاشة"), + "discover_selfies": MessageLookupByLibrary.simpleMessage("صور السيلفي"), + "discover_sunset": MessageLookupByLibrary.simpleMessage("غروب الشمس"), + "discover_visiting_cards": + MessageLookupByLibrary.simpleMessage("بطاقات الزيارة"), + "discover_wallpapers": MessageLookupByLibrary.simpleMessage("الخلفيات"), + "dismiss": MessageLookupByLibrary.simpleMessage("تجاهل"), + "distanceInKMUnit": MessageLookupByLibrary.simpleMessage("كم"), + "doNotSignOut": + MessageLookupByLibrary.simpleMessage("عدم تسجيل الخروج"), + "doThisLater": MessageLookupByLibrary.simpleMessage("لاحقًا"), + "doYouWantToDiscardTheEditsYouHaveMade": + MessageLookupByLibrary.simpleMessage( + "هل تريد تجاهل التعديلات التي قمت بها؟"), + "done": MessageLookupByLibrary.simpleMessage("تم"), + "dontSave": MessageLookupByLibrary.simpleMessage("عدم الحفظ"), + "doubleYourStorage": MessageLookupByLibrary.simpleMessage( + "ضاعف مساحة التخزين الخاصة بك"), + "download": MessageLookupByLibrary.simpleMessage("تنزيل"), + "downloadFailed": MessageLookupByLibrary.simpleMessage("فشل التنزيل"), + "downloading": MessageLookupByLibrary.simpleMessage("جارٍ التنزيل..."), + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, + "edit": MessageLookupByLibrary.simpleMessage("تعديل"), + "editLocation": MessageLookupByLibrary.simpleMessage("تعديل الموقع"), + "editLocationTagTitle": + MessageLookupByLibrary.simpleMessage("تعديل الموقع"), + "editPerson": MessageLookupByLibrary.simpleMessage("تعديل الشخص"), + "editTime": MessageLookupByLibrary.simpleMessage("تعديل الوقت"), + "editsSaved": MessageLookupByLibrary.simpleMessage("تم حفظ التعديلات."), + "editsToLocationWillOnlyBeSeenWithinEnte": + MessageLookupByLibrary.simpleMessage( + "ستكون التعديلات على الموقع مرئية فقط داخل Ente."), + "eligible": MessageLookupByLibrary.simpleMessage("مؤهل"), "email": MessageLookupByLibrary.simpleMessage("البريد الإلكتروني"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage( - "البريد الإلكتروني مسجل بالفعل."), + "البريد الإلكتروني مُسَجَّل من قبل."), + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage("البريد الإلكتروني غير مسجل."), + "emailVerificationToggle": MessageLookupByLibrary.simpleMessage( + "تأكيد عنوان البريد الإلكتروني"), + "emailYourLogs": MessageLookupByLibrary.simpleMessage( + "إرسال سجلاتك عبر البريد الإلكتروني"), + "embracingThem": m30, + "emergencyContacts": + MessageLookupByLibrary.simpleMessage("جهات اتصال الطوارئ"), + "empty": MessageLookupByLibrary.simpleMessage("إفراغ"), + "emptyTrash": + MessageLookupByLibrary.simpleMessage("إفراغ سلة المهملات؟"), + "enable": MessageLookupByLibrary.simpleMessage("تمكين"), + "enableMLIndexingDesc": MessageLookupByLibrary.simpleMessage( + "يدعم Ente تعلم الآلة على الجهاز للتعرف على الوجوه والبحث السحري وميزات البحث المتقدم الأخرى."), + "enableMachineLearningBanner": MessageLookupByLibrary.simpleMessage( + "قم بتمكين تعلم الآلة للبحث السحري والتعرف على الوجوه."), + "enableMaps": MessageLookupByLibrary.simpleMessage("تمكين الخرائط"), + "enableMapsDesc": MessageLookupByLibrary.simpleMessage( + "سيؤدي هذا إلى عرض صورك على خريطة العالم.\n\nتستضيف هذه الخريطة OpenStreetMap، ولا تتم مشاركة المواقع الدقيقة لصورك أبدًا.\n\nيمكنك تعطيل هذه الميزة في أي وقت من الإعدادات."), + "enabled": MessageLookupByLibrary.simpleMessage("مُمكّن"), + "encryptingBackup": MessageLookupByLibrary.simpleMessage( + "جارٍ تشفير النسخة الاحتياطية..."), + "encryption": MessageLookupByLibrary.simpleMessage("التشفير"), + "encryptionKeys": + MessageLookupByLibrary.simpleMessage("مفاتيح التشفير"), + "endpointUpdatedMessage": MessageLookupByLibrary.simpleMessage( + "تم تحديث نقطة النهاية بنجاح."), + "endtoendEncryptedByDefault": MessageLookupByLibrary.simpleMessage( + "تشفير من طرف إلى طرف بشكل افتراضي"), + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": + MessageLookupByLibrary.simpleMessage( + "يمكن لـ Ente تشفير وحفظ الملفات فقط إذا منحت الإذن بالوصول إليها."), + "entePhotosPerm": MessageLookupByLibrary.simpleMessage( + "Ente بحاجة إلى إذن لحفظ صورك"), + "enteSubscriptionPitch": MessageLookupByLibrary.simpleMessage( + "يحفظ Ente ذكرياتك، بحيث تظل دائمًا متاحة لك حتى لو فقدت جهازك."), + "enteSubscriptionShareWithFamily": MessageLookupByLibrary.simpleMessage( + "يمكنك أيضًا إضافة أفراد عائلتك إلى خطتك."), + "enterAlbumName": + MessageLookupByLibrary.simpleMessage("أدخل اسم الألبوم"), + "enterCode": MessageLookupByLibrary.simpleMessage("أدخل الرمز"), + "enterCodeDescription": MessageLookupByLibrary.simpleMessage( + "أدخل الرمز المقدم من صديقك للمطالبة بمساحة تخزين مجانية لكما."), + "enterDateOfBirth": + MessageLookupByLibrary.simpleMessage("تاريخ الميلاد (اختياري)"), + "enterEmail": + MessageLookupByLibrary.simpleMessage("أدخل البريد الإلكتروني"), + "enterFileName": MessageLookupByLibrary.simpleMessage("أدخل اسم الملف"), + "enterName": MessageLookupByLibrary.simpleMessage("أدخل الاسم"), + "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "أدخل كلمة مرور جديدة يمكننا استخدامها لتشفير بياناتك"), + "enterPassword": + MessageLookupByLibrary.simpleMessage("أدخل كلمة المرور"), + "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "أدخل كلمة مرور يمكننا استخدامها لتشفير بياناتك"), + "enterPersonName": + MessageLookupByLibrary.simpleMessage("أدخل اسم الشخص"), + "enterPin": MessageLookupByLibrary.simpleMessage("أدخل رمز PIN"), + "enterReferralCode": + MessageLookupByLibrary.simpleMessage("أدخل رمز الإحالة"), + "enterThe6digitCodeFromnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "أدخل الرمز المكون من 6 أرقام من\n تطبيق المصادقة الخاص بك"), "enterValidEmail": MessageLookupByLibrary.simpleMessage( - "الرجاء إدخال بريد إلكتروني صالح."), + "يرجى إدخال عنوان بريد إلكتروني صالح."), "enterYourEmailAddress": MessageLookupByLibrary.simpleMessage("أدخل عنوان بريدك الإلكتروني"), + "enterYourPassword": + MessageLookupByLibrary.simpleMessage("أدخل كلمة المرور"), "enterYourRecoveryKey": - MessageLookupByLibrary.simpleMessage("أدخل رمز الاسترداد"), + MessageLookupByLibrary.simpleMessage("أدخل مفتاح الاسترداد"), + "error": MessageLookupByLibrary.simpleMessage("خطأ"), + "everywhere": MessageLookupByLibrary.simpleMessage("في كل مكان"), + "exif": MessageLookupByLibrary.simpleMessage("EXIF"), + "existingUser": MessageLookupByLibrary.simpleMessage("مستخدم حالي"), + "expiredLinkInfo": MessageLookupByLibrary.simpleMessage( + "انتهت صلاحية هذا الرابط. يرجى اختيار وقت انتهاء صلاحية جديد أو تعطيل انتهاء صلاحية الرابط."), + "exportLogs": MessageLookupByLibrary.simpleMessage("تصدير السجلات"), + "exportYourData": MessageLookupByLibrary.simpleMessage("تصدير بياناتك"), + "extraPhotosFound": + MessageLookupByLibrary.simpleMessage("تم العثور على صور إضافية"), + "extraPhotosFoundFor": m31, + "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( + "لم يتم تجميع الوجه بعد، يرجى العودة لاحقًا"), + "faceRecognition": + MessageLookupByLibrary.simpleMessage("التعرف على الوجوه"), + "faces": MessageLookupByLibrary.simpleMessage("الوجوه"), + "failed": MessageLookupByLibrary.simpleMessage("فشل"), + "failedToApplyCode": + MessageLookupByLibrary.simpleMessage("فشل تطبيق الرمز"), + "failedToCancel": MessageLookupByLibrary.simpleMessage("فشل الإلغاء"), + "failedToDownloadVideo": + MessageLookupByLibrary.simpleMessage("فشل تنزيل الفيديو"), + "failedToFetchActiveSessions": + MessageLookupByLibrary.simpleMessage("فشل جلب الجلسات النشطة."), + "failedToFetchOriginalForEdit": MessageLookupByLibrary.simpleMessage( + "فشل جلب النسخة الأصلية للتعديل."), + "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( + "تعذر جلب تفاصيل الإحالة. يرجى المحاولة مرة أخرى لاحقًا."), + "failedToLoadAlbums": + MessageLookupByLibrary.simpleMessage("فشل تحميل الألبومات"), + "failedToPlayVideo": + MessageLookupByLibrary.simpleMessage("فشل تشغيل الفيديو."), + "failedToRefreshStripeSubscription": + MessageLookupByLibrary.simpleMessage("فشل تحديث الاشتراك."), + "failedToRenew": MessageLookupByLibrary.simpleMessage("فشل التجديد"), + "failedToVerifyPaymentStatus": + MessageLookupByLibrary.simpleMessage("فشل التحقق من حالة الدفع."), + "familyPlanOverview": MessageLookupByLibrary.simpleMessage( + "أضف 5 أفراد من عائلتك إلى خطتك الحالية دون دفع رسوم إضافية.\n\nيحصل كل فرد على مساحة خاصة به، ولا يمكنهم رؤية ملفات بعضهم البعض إلا إذا تمت مشاركتها.\n\nالخطط العائلية متاحة للعملاء الذين لديهم اشتراك Ente مدفوع.\n\nاشترك الآن للبدء!"), + "familyPlanPortalTitle": + MessageLookupByLibrary.simpleMessage("العائلة"), + "familyPlans": MessageLookupByLibrary.simpleMessage("الخطط العائلية"), + "faq": MessageLookupByLibrary.simpleMessage("الأسئلة الشائعة"), + "faqs": MessageLookupByLibrary.simpleMessage("الأسئلة الشائعة"), + "favorite": MessageLookupByLibrary.simpleMessage("المفضلة"), + "feastingWithThem": m32, "feedback": MessageLookupByLibrary.simpleMessage("ملاحظات"), + "file": MessageLookupByLibrary.simpleMessage("ملف"), + "fileFailedToSaveToGallery": + MessageLookupByLibrary.simpleMessage("فشل حفظ الملف في المعرض."), + "fileInfoAddDescHint": + MessageLookupByLibrary.simpleMessage("إضافة وصف..."), + "fileNotUploadedYet": + MessageLookupByLibrary.simpleMessage("لم يتم تحميل الملف بعد"), + "fileSavedToGallery": + MessageLookupByLibrary.simpleMessage("تم حفظ الملف في المعرض."), + "fileTypes": MessageLookupByLibrary.simpleMessage("أنواع الملفات"), + "fileTypesAndNames": + MessageLookupByLibrary.simpleMessage("أنواع وأسماء الملفات"), + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, + "filesDeleted": MessageLookupByLibrary.simpleMessage("تم حذف الملفات."), + "filesSavedToGallery": + MessageLookupByLibrary.simpleMessage("تم حفظ الملفات في المعرض."), + "findPeopleByName": MessageLookupByLibrary.simpleMessage( + "البحث عن الأشخاص بسرعة بالاسم"), + "findThemQuickly": + MessageLookupByLibrary.simpleMessage("اعثر عليهم بسرعة"), + "flip": MessageLookupByLibrary.simpleMessage("قلب"), + "food": MessageLookupByLibrary.simpleMessage("متعة الطهي"), + "forYourMemories": MessageLookupByLibrary.simpleMessage("لذكرياتك"), "forgotPassword": - MessageLookupByLibrary.simpleMessage("نسيت كلمة المرور"), + MessageLookupByLibrary.simpleMessage("نسيت كلمة المرور؟"), + "foundFaces": + MessageLookupByLibrary.simpleMessage("الوجوه التي تم العثور عليها"), + "freeStorageClaimed": MessageLookupByLibrary.simpleMessage( + "تم المطالبة بمساحة التخزين المجانية"), + "freeStorageOnReferralSuccess": m35, + "freeStorageUsable": MessageLookupByLibrary.simpleMessage( + "مساحة تخزين مجانية متاحة للاستخدام"), + "freeTrial": MessageLookupByLibrary.simpleMessage("تجربة مجانية"), + "freeTrialValidTill": m36, + "freeUpAccessPostDelete": m37, + "freeUpAmount": m38, + "freeUpDeviceSpace": + MessageLookupByLibrary.simpleMessage("تحرير مساحة على الجهاز"), + "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( + "وفر مساحة على جهازك عن طريق مسح الملفات التي تم نسخها احتياطيًا."), + "freeUpSpace": MessageLookupByLibrary.simpleMessage("تحرير المساحة"), + "freeUpSpaceSaving": m39, + "gallery": MessageLookupByLibrary.simpleMessage("المعرض"), + "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( + "يتم عرض ما يصل إلى 1000 ذكرى في المعرض."), + "general": MessageLookupByLibrary.simpleMessage("عام"), + "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( + "جارٍ إنشاء مفاتيح التشفير..."), + "genericProgress": m40, + "goToSettings": + MessageLookupByLibrary.simpleMessage("الانتقال إلى الإعدادات"), + "googlePlayId": + MessageLookupByLibrary.simpleMessage("معرّف Google Play"), + "grantFullAccessPrompt": MessageLookupByLibrary.simpleMessage( + "يرجى السماح بالوصول إلى جميع الصور في تطبيق الإعدادات."), + "grantPermission": MessageLookupByLibrary.simpleMessage("منح الإذن"), + "greenery": MessageLookupByLibrary.simpleMessage("الحياة الخضراء"), + "groupNearbyPhotos": + MessageLookupByLibrary.simpleMessage("تجميع الصور القريبة"), + "guestView": MessageLookupByLibrary.simpleMessage("عرض الضيف"), + "guestViewEnablePreSteps": MessageLookupByLibrary.simpleMessage( + "لتمكين عرض الضيف، يرجى إعداد رمز مرور الجهاز أو قفل الشاشة في إعدادات النظام."), + "hearUsExplanation": MessageLookupByLibrary.simpleMessage( + "نحن لا نتتبع عمليات تثبيت التطبيق. سيساعدنا إذا أخبرتنا أين وجدتنا!"), + "hearUsWhereTitle": + MessageLookupByLibrary.simpleMessage("كيف سمعت عن Ente؟ (اختياري)"), + "help": MessageLookupByLibrary.simpleMessage("المساعدة"), + "hidden": MessageLookupByLibrary.simpleMessage("المخفية"), + "hide": MessageLookupByLibrary.simpleMessage("إخفاء"), + "hideContent": MessageLookupByLibrary.simpleMessage("إخفاء المحتوى"), + "hideContentDescriptionAndroid": MessageLookupByLibrary.simpleMessage( + "يخفي محتوى التطبيق في مبدل التطبيقات ويعطل لقطات الشاشة."), + "hideContentDescriptionIos": MessageLookupByLibrary.simpleMessage( + "يخفي محتوى التطبيق في مبدل التطبيقات."), + "hideSharedItemsFromHomeGallery": MessageLookupByLibrary.simpleMessage( + "إخفاء العناصر المشتركة من معرض الصفحة الرئيسية"), + "hiding": MessageLookupByLibrary.simpleMessage("جارٍ الإخفاء..."), + "hikingWithThem": m41, + "hostedAtOsmFrance": + MessageLookupByLibrary.simpleMessage("مستضاف في OSM France"), + "howItWorks": MessageLookupByLibrary.simpleMessage("كيف يعمل"), + "howToViewShareeVerificationID": MessageLookupByLibrary.simpleMessage( + "يرجى الطلب منهم الضغط مطولًا على عنوان بريدهم الإلكتروني في شاشة الإعدادات، والتأكد من تطابق المعرّفات على كلا الجهازين."), + "iOSGoToSettingsDescription": MessageLookupByLibrary.simpleMessage( + "لم يتم إعداد المصادقة البيومترية على جهازك. يرجى تمكين Touch ID أو Face ID على هاتفك."), + "iOSLockOut": MessageLookupByLibrary.simpleMessage( + "تم تعطيل المصادقة البيومترية. يرجى قفل شاشتك وفتحها لتمكينها."), + "iOSOkButton": MessageLookupByLibrary.simpleMessage("موافق"), + "ignoreUpdate": MessageLookupByLibrary.simpleMessage("تجاهل"), + "ignored": MessageLookupByLibrary.simpleMessage("تم التجاهل"), + "ignoredFolderUploadReason": MessageLookupByLibrary.simpleMessage( + "تم تجاهل تحميل بعض الملفات في هذا الألبوم لأنه تم حذفها مسبقًا من Ente."), + "imageNotAnalyzed": + MessageLookupByLibrary.simpleMessage("لم يتم تحليل الصورة"), + "immediately": MessageLookupByLibrary.simpleMessage("فورًا"), + "importing": MessageLookupByLibrary.simpleMessage("جارٍ الاستيراد..."), + "incorrectCode": MessageLookupByLibrary.simpleMessage("رمز غير صحيح"), + "incorrectPasswordTitle": + MessageLookupByLibrary.simpleMessage("كلمة المرور غير صحيحة"), + "incorrectRecoveryKey": + MessageLookupByLibrary.simpleMessage("مفتاح الاسترداد غير صحيح."), "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage( "مفتاح الاسترداد الذي أدخلته غير صحيح"), "incorrectRecoveryKeyTitle": MessageLookupByLibrary.simpleMessage("مفتاح الاسترداد غير صحيح"), + "indexedItems": + MessageLookupByLibrary.simpleMessage("العناصر المفهرسة"), + "indexingIsPaused": MessageLookupByLibrary.simpleMessage( + "الفهرسة متوقفة مؤقتًا. سيتم استئنافها تلقائيًا عندما يكون الجهاز جاهزًا."), + "ineligible": MessageLookupByLibrary.simpleMessage("غير مؤهل"), + "info": MessageLookupByLibrary.simpleMessage("معلومات"), + "insecureDevice": MessageLookupByLibrary.simpleMessage("جهاز غير آمن"), + "installManually": + MessageLookupByLibrary.simpleMessage("التثبيت يدويًا"), "invalidEmailAddress": MessageLookupByLibrary.simpleMessage( "عنوان البريد الإلكتروني غير صالح"), + "invalidEndpoint": + MessageLookupByLibrary.simpleMessage("نقطة النهاية غير صالحة"), + "invalidEndpointMessage": MessageLookupByLibrary.simpleMessage( + "عذرًا، نقطة النهاية التي أدخلتها غير صالحة. يرجى إدخال نقطة نهاية صالحة والمحاولة مرة أخرى."), + "invalidKey": MessageLookupByLibrary.simpleMessage("المفتاح غير صالح"), + "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( + "مفتاح الاسترداد الذي أدخلته غير صالح. يرجى التأكد من أنه يحتوي على 24 كلمة، والتحقق من كتابة كل كلمة بشكل صحيح.\n\nإذا كنت تستخدم مفتاح استرداد قديمًا، تأكد من أنه مكون من 64 حرفًا، وتحقق من صحة كل حرف."), + "invite": MessageLookupByLibrary.simpleMessage("دعوة"), + "inviteToEnte": MessageLookupByLibrary.simpleMessage("دعوة إلى Ente"), + "inviteYourFriends": + MessageLookupByLibrary.simpleMessage("ادعُ أصدقاءك"), + "inviteYourFriendsToEnte": + MessageLookupByLibrary.simpleMessage("ادعُ أصدقاءك إلى Ente"), + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": + MessageLookupByLibrary.simpleMessage( + "يبدو أن خطأً ما قد حدث. يرجى المحاولة مرة أخرى بعد بعض الوقت. إذا استمر الخطأ، يرجى الاتصال بفريق الدعم لدينا."), + "itemCount": m42, + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": + MessageLookupByLibrary.simpleMessage( + "تعرض العناصر عدد الأيام المتبقية قبل الحذف الدائم."), + "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( + "سيتم إزالة العناصر المحددة من هذا الألبوم."), + "join": MessageLookupByLibrary.simpleMessage("انضمام"), + "joinAlbum": + MessageLookupByLibrary.simpleMessage("الانضمام إلى الألبوم"), + "joinAlbumConfirmationDialogBody": MessageLookupByLibrary.simpleMessage( + "الانضمام إلى ألبوم سيجعل بريدك الإلكتروني مرئيًا للمشاركين فيه."), + "joinAlbumSubtext": + MessageLookupByLibrary.simpleMessage("لعرض صورك وإضافتها"), + "joinAlbumSubtextViewer": MessageLookupByLibrary.simpleMessage( + "لإضافة هذا إلى الألبومات المشتركة"), + "joinDiscord": + MessageLookupByLibrary.simpleMessage("الانضمام إلى Discord"), + "keepPhotos": MessageLookupByLibrary.simpleMessage("الاحتفاظ بالصور"), + "kiloMeterUnit": MessageLookupByLibrary.simpleMessage("كم"), "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( - "الرجاء مساعدتنا بهذه المعلومات"), + "يرجى مساعدتنا بهذه المعلومات"), + "language": MessageLookupByLibrary.simpleMessage("اللغة"), + "lastTimeWithThem": m43, + "lastUpdated": MessageLookupByLibrary.simpleMessage("آخر تحديث"), + "lastYearsTrip": + MessageLookupByLibrary.simpleMessage("رحلة العام الماضي"), + "leave": MessageLookupByLibrary.simpleMessage("مغادرة"), + "leaveAlbum": MessageLookupByLibrary.simpleMessage("مغادرة الألبوم"), + "leaveFamily": + MessageLookupByLibrary.simpleMessage("مغادرة خطة العائلة"), + "leaveSharedAlbum": + MessageLookupByLibrary.simpleMessage("مغادرة الألبوم المشترك؟"), + "left": MessageLookupByLibrary.simpleMessage("يسار"), + "legacy": MessageLookupByLibrary.simpleMessage("جهات الاتصال الموثوقة"), + "legacyAccounts": + MessageLookupByLibrary.simpleMessage("الحسابات الموثوقة"), + "legacyInvite": m44, + "legacyPageDesc": MessageLookupByLibrary.simpleMessage( + "تسمح جهات الاتصال الموثوقة لأشخاص معينين بالوصول إلى حسابك في حالة غيابك."), + "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( + "يمكن لجهات الاتصال الموثوقة بدء استرداد الحساب، وإذا لم يتم حظر ذلك خلال 30 يومًا، يمكنهم إعادة تعيين كلمة المرور والوصول إلى حسابك."), + "light": MessageLookupByLibrary.simpleMessage("فاتح"), + "lightTheme": MessageLookupByLibrary.simpleMessage("فاتح"), + "link": MessageLookupByLibrary.simpleMessage("ربط"), + "linkCopiedToClipboard": + MessageLookupByLibrary.simpleMessage("تم نسخ الرابط إلى الحافظة."), + "linkDeviceLimit": MessageLookupByLibrary.simpleMessage("حد الأجهزة"), + "linkEmail": + MessageLookupByLibrary.simpleMessage("ربط البريد الإلكتروني"), + "linkEmailToContactBannerCaption": + MessageLookupByLibrary.simpleMessage("لمشاركة أسرع"), + "linkEnabled": MessageLookupByLibrary.simpleMessage("مفعّل"), + "linkExpired": MessageLookupByLibrary.simpleMessage("منتهي الصلاحية"), + "linkExpiresOn": m45, + "linkExpiry": + MessageLookupByLibrary.simpleMessage("انتهاء صلاحية الرابط"), + "linkHasExpired": + MessageLookupByLibrary.simpleMessage("انتهت صلاحية الرابط"), + "linkNeverExpires": MessageLookupByLibrary.simpleMessage("أبدًا"), + "linkPerson": MessageLookupByLibrary.simpleMessage("ربط الشخص"), + "linkPersonCaption": + MessageLookupByLibrary.simpleMessage("لتجربة مشاركة أفضل"), + "linkPersonToEmail": m46, + "linkPersonToEmailConfirmation": m47, + "livePhotos": MessageLookupByLibrary.simpleMessage("الصور الحية"), + "loadMessage1": MessageLookupByLibrary.simpleMessage( + "يمكنك مشاركة اشتراكك مع عائلتك."), + "loadMessage2": MessageLookupByLibrary.simpleMessage( + "لقد حفظنا أكثر من 30 مليون ذكرى حتى الآن."), + "loadMessage3": MessageLookupByLibrary.simpleMessage( + "نحتفظ بـ 3 نسخ من بياناتك، إحداها في ملجأ للطوارئ تحت الأرض."), + "loadMessage4": MessageLookupByLibrary.simpleMessage( + "جميع تطبيقاتنا مفتوحة المصدر."), + "loadMessage5": MessageLookupByLibrary.simpleMessage( + "تم تدقيق شفرتنا المصدرية والتشفير الخاص بنا خارجيًا."), + "loadMessage6": MessageLookupByLibrary.simpleMessage( + "يمكنك مشاركة روابط ألبوماتك مع أحبائك."), + "loadMessage7": MessageLookupByLibrary.simpleMessage( + "تعمل تطبيقات الهاتف المحمول الخاصة بنا في الخلفية لتشفير أي صور جديدة تلتقطها ونسخها احتياطيًا."), + "loadMessage8": MessageLookupByLibrary.simpleMessage( + "web.ente.io لديه أداة تحميل رائعة."), + "loadMessage9": MessageLookupByLibrary.simpleMessage( + "نستخدم XChaCha20-Poly1305 لتشفير بياناتك بأمان."), + "loadingExifData": + MessageLookupByLibrary.simpleMessage("جارٍ تحميل بيانات EXIF..."), + "loadingGallery": + MessageLookupByLibrary.simpleMessage("جارٍ تحميل المعرض..."), + "loadingMessage": + MessageLookupByLibrary.simpleMessage("جارٍ تحميل صورك..."), + "loadingModel": + MessageLookupByLibrary.simpleMessage("جارٍ تحميل النماذج..."), + "loadingYourPhotos": + MessageLookupByLibrary.simpleMessage("جارٍ تحميل صورك..."), + "localGallery": MessageLookupByLibrary.simpleMessage("المعرض المحلي"), + "localIndexing": + MessageLookupByLibrary.simpleMessage("الفهرسة المحلية"), + "localSyncErrorMessage": MessageLookupByLibrary.simpleMessage( + "يبدو أن خطأً ما قد حدث لأن مزامنة الصور المحلية تستغرق وقتًا أطول من المتوقع. يرجى التواصل مع فريق الدعم لدينا."), + "location": MessageLookupByLibrary.simpleMessage("الموقع"), + "locationName": MessageLookupByLibrary.simpleMessage("اسم الموقع"), + "locationTagFeatureDescription": MessageLookupByLibrary.simpleMessage( + "تقوم علامة الموقع بتجميع جميع الصور التي تم التقاطها ضمن نصف قطر معين لصورة ما."), + "locations": MessageLookupByLibrary.simpleMessage("المواقع"), + "lockButtonLabel": MessageLookupByLibrary.simpleMessage("قفل"), + "lockscreen": MessageLookupByLibrary.simpleMessage("شاشة القفل"), + "logInLabel": MessageLookupByLibrary.simpleMessage("تسجيل الدخول"), + "loggingOut": + MessageLookupByLibrary.simpleMessage("جارٍ تسجيل الخروج..."), + "loginSessionExpired": + MessageLookupByLibrary.simpleMessage("انتهت صلاحية الجلسة."), + "loginSessionExpiredDetails": MessageLookupByLibrary.simpleMessage( + "انتهت صلاحية جلستك. يرجى تسجيل الدخول مرة أخرى."), + "loginTerms": MessageLookupByLibrary.simpleMessage( + "بالنقر على تسجيل الدخول، أوافق على شروط الخدمة و سياسة الخصوصية"), + "loginWithTOTP": + MessageLookupByLibrary.simpleMessage("تسجيل الدخول باستخدام TOTP"), + "logout": MessageLookupByLibrary.simpleMessage("تسجيل الخروج"), + "logsDialogBody": MessageLookupByLibrary.simpleMessage( + "سيؤدي هذا إلى إرسال السجلات لمساعدتنا في تصحيح مشكلتك. يرجى ملاحظة أنه سيتم تضمين أسماء الملفات للمساعدة في تتبع المشكلات المتعلقة بملفات معينة."), + "longPressAnEmailToVerifyEndToEndEncryption": + MessageLookupByLibrary.simpleMessage( + "اضغط مطولاً على بريد إلكتروني للتحقق من التشفير من طرف إلى طرف."), + "longpressOnAnItemToViewInFullscreen": + MessageLookupByLibrary.simpleMessage( + "اضغط مطولاً على عنصر لعرضه في وضع ملء الشاشة."), + "loopVideoOff": + MessageLookupByLibrary.simpleMessage("إيقاف تكرار الفيديو"), + "loopVideoOn": + MessageLookupByLibrary.simpleMessage("تشغيل تكرار الفيديو"), + "lostDevice": MessageLookupByLibrary.simpleMessage("جهاز مفقود؟"), + "machineLearning": MessageLookupByLibrary.simpleMessage("تعلم الآلة"), + "magicSearch": MessageLookupByLibrary.simpleMessage("البحث السحري"), + "magicSearchHint": MessageLookupByLibrary.simpleMessage( + "يسمح البحث السحري بالبحث عن الصور حسب محتوياتها، مثل \'زهرة\'، \'سيارة حمراء\'، \'وثائق هوية\'"), + "manage": MessageLookupByLibrary.simpleMessage("إدارة"), + "manageDeviceStorage": + MessageLookupByLibrary.simpleMessage("إدارة مساحة تخزين الجهاز"), + "manageDeviceStorageDesc": MessageLookupByLibrary.simpleMessage( + "مراجعة ومسح ذاكرة التخزين المؤقت المحلية."), + "manageFamily": MessageLookupByLibrary.simpleMessage("إدارة العائلة"), + "manageLink": MessageLookupByLibrary.simpleMessage("إدارة الرابط"), + "manageParticipants": + MessageLookupByLibrary.simpleMessage("إدارة المشاركين"), + "manageSubscription": + MessageLookupByLibrary.simpleMessage("إدارة الاشتراك"), + "manualPairDesc": MessageLookupByLibrary.simpleMessage( + "الإقران بالرمز السري يعمل مع أي شاشة ترغب في عرض ألبومك عليها."), + "map": MessageLookupByLibrary.simpleMessage("الخريطة"), + "maps": MessageLookupByLibrary.simpleMessage("الخرائط"), + "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), + "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), + "me": MessageLookupByLibrary.simpleMessage("أنا"), + "memoryCount": m48, + "merchandise": + MessageLookupByLibrary.simpleMessage("المنتجات الترويجية"), + "mergeWithExisting": + MessageLookupByLibrary.simpleMessage("الدمج مع شخص موجود"), + "mergedPhotos": MessageLookupByLibrary.simpleMessage("الصور المدمجة"), + "mlConsent": MessageLookupByLibrary.simpleMessage("تمكين تعلم الآلة"), + "mlConsentConfirmation": MessageLookupByLibrary.simpleMessage( + "أنا أفهم، وأرغب في تمكين تعلم الآلة"), + "mlConsentDescription": MessageLookupByLibrary.simpleMessage( + "إذا قمت بتمكين تعلم الآلة، سيقوم Ente باستخراج معلومات مثل هندسة الوجه من الملفات، بما في ذلك تلك التي تمت مشاركتها معك.\n\nسيحدث هذا على جهازك، وسيتم تشفير أي معلومات بيومترية تم إنشاؤها تشفيرًا تامًا من طرف إلى طرف."), + "mlConsentPrivacy": MessageLookupByLibrary.simpleMessage( + "يرجى النقر هنا لمزيد من التفاصيل حول هذه الميزة في سياسة الخصوصية الخاصة بنا"), + "mlConsentTitle": + MessageLookupByLibrary.simpleMessage("تمكين تعلم الآلة؟"), + "mlIndexingDescription": MessageLookupByLibrary.simpleMessage( + "يرجى ملاحظة أن تعلم الآلة سيؤدي إلى استهلاك أعلى لعرض النطاق الترددي والبطارية حتى تتم فهرسة جميع العناصر.\nنوصي باستخدام تطبيق سطح المكتب لإجراء الفهرسة بشكل أسرع. سيتم مزامنة جميع النتائج تلقائيًا."), + "mobileWebDesktop": MessageLookupByLibrary.simpleMessage( + "الهاتف المحمول، الويب، سطح المكتب"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("متوسطة"), + "modifyYourQueryOrTrySearchingFor": + MessageLookupByLibrary.simpleMessage( + "قم بتعديل استعلامك، أو حاول البحث عن"), + "moments": MessageLookupByLibrary.simpleMessage("اللحظات"), + "month": MessageLookupByLibrary.simpleMessage("شهر"), + "monthly": MessageLookupByLibrary.simpleMessage("شهريًا"), + "moon": MessageLookupByLibrary.simpleMessage("في ضوء القمر"), + "moreDetails": + MessageLookupByLibrary.simpleMessage("المزيد من التفاصيل"), + "mostRecent": MessageLookupByLibrary.simpleMessage("الأحدث"), + "mostRelevant": MessageLookupByLibrary.simpleMessage("الأكثر صلة"), + "mountains": MessageLookupByLibrary.simpleMessage("فوق التلال"), + "moveItem": m49, + "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage( + "نقل الصور المحددة إلى تاريخ واحد"), + "moveToAlbum": MessageLookupByLibrary.simpleMessage("نقل إلى ألبوم"), + "moveToHiddenAlbum": + MessageLookupByLibrary.simpleMessage("نقل إلى الألبوم المخفي"), + "movedSuccessfullyTo": m50, + "movedToTrash": + MessageLookupByLibrary.simpleMessage("تم النقل إلى سلة المهملات"), + "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "جارٍ نقل الملفات إلى الألبوم..."), + "name": MessageLookupByLibrary.simpleMessage("الاسم"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("تسمية الألبوم"), + "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( + "تعذر الاتصال بـ Ente، يرجى المحاولة مرة أخرى بعد بعض الوقت. إذا استمر الخطأ، يرجى الاتصال بالدعم."), + "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( + "تعذر الاتصال بـ Ente، يرجى التحقق من إعدادات الشبكة والاتصال بالدعم إذا استمر الخطأ."), + "never": MessageLookupByLibrary.simpleMessage("أبدًا"), + "newAlbum": MessageLookupByLibrary.simpleMessage("ألبوم جديد"), + "newLocation": MessageLookupByLibrary.simpleMessage("موقع جديد"), + "newPerson": MessageLookupByLibrary.simpleMessage("شخص جديد"), + "newRange": MessageLookupByLibrary.simpleMessage("نطاق جديد"), + "newToEnte": MessageLookupByLibrary.simpleMessage("جديد في Ente"), + "newest": MessageLookupByLibrary.simpleMessage("الأحدث"), + "next": MessageLookupByLibrary.simpleMessage("التالي"), + "no": MessageLookupByLibrary.simpleMessage("لا"), + "noAlbumsSharedByYouYet": + MessageLookupByLibrary.simpleMessage("لم تشارك أي ألبومات بعد"), + "noDeviceFound": + MessageLookupByLibrary.simpleMessage("لم يتم العثور على جهاز."), + "noDeviceLimit": MessageLookupByLibrary.simpleMessage("لا شيء"), + "noDeviceThatCanBeDeleted": MessageLookupByLibrary.simpleMessage( + "لا توجد ملفات على هذا الجهاز يمكن حذفها."), + "noDuplicates": + MessageLookupByLibrary.simpleMessage("✨ لا توجد ملفات مكررة"), + "noEnteAccountExclamation": + MessageLookupByLibrary.simpleMessage("لا يوجد حساب Ente!"), + "noExifData": + MessageLookupByLibrary.simpleMessage("لا توجد بيانات EXIF"), + "noFacesFound": + MessageLookupByLibrary.simpleMessage("لم يتم العثور على وجوه"), + "noHiddenPhotosOrVideos": MessageLookupByLibrary.simpleMessage( + "لا توجد صور أو مقاطع فيديو مخفية"), + "noImagesWithLocation": + MessageLookupByLibrary.simpleMessage("لا توجد صور تحتوي على موقع"), + "noInternetConnection": + MessageLookupByLibrary.simpleMessage("لا يوجد اتصال بالإنترنت"), + "noPhotosAreBeingBackedUpRightNow": + MessageLookupByLibrary.simpleMessage( + "لا يتم نسخ أي صور احتياطيًا في الوقت الحالي."), + "noPhotosFoundHere": + MessageLookupByLibrary.simpleMessage("لم يتم العثور على صور هنا"), + "noQuickLinksSelected": + MessageLookupByLibrary.simpleMessage("لم يتم تحديد روابط سريعة."), "noRecoveryKey": - MessageLookupByLibrary.simpleMessage("ما من مفتاح استرداد؟"), + MessageLookupByLibrary.simpleMessage("لا تملك مفتاح استرداد؟"), "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( - "لا يمكن فك تشفير بياناتك دون كلمة المرور أو مفتاح الاسترداد بسبب طبيعة بروتوكول التشفير الخاص بنا من النهاية إلى النهاية"), + "نظرًا لطبيعة التشفير الكامل من طرف إلى طرف، لا يمكن فك تشفير بياناتك دون كلمة المرور أو مفتاح الاسترداد الخاص بك"), + "noResults": MessageLookupByLibrary.simpleMessage("لا توجد نتائج"), + "noResultsFound": + MessageLookupByLibrary.simpleMessage("لم يتم العثور على نتائج."), + "noSuggestionsForPerson": m51, + "noSystemLockFound": + MessageLookupByLibrary.simpleMessage("لم يتم العثور على قفل نظام."), + "notPersonLabel": m52, + "notThisPerson": MessageLookupByLibrary.simpleMessage("ليس هذا الشخص؟"), + "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( + "لم تتم مشاركة أي شيء معك بعد"), + "nothingToSeeHere": + MessageLookupByLibrary.simpleMessage("لا يوجد شيء هنا! 👀"), + "notifications": MessageLookupByLibrary.simpleMessage("الإشعارات"), + "ok": MessageLookupByLibrary.simpleMessage("حسنًا"), + "onDevice": MessageLookupByLibrary.simpleMessage("على الجهاز"), + "onEnte": MessageLookupByLibrary.simpleMessage( + "على Ente"), + "onTheRoad": + MessageLookupByLibrary.simpleMessage("على الطريق مرة أخرى"), + "onlyFamilyAdminCanChangeCode": m53, + "onlyThem": MessageLookupByLibrary.simpleMessage("هم فقط"), + "oops": MessageLookupByLibrary.simpleMessage("عفوًا"), + "oopsCouldNotSaveEdits": + MessageLookupByLibrary.simpleMessage("عفوًا، تعذر حفظ التعديلات."), + "oopsSomethingWentWrong": + MessageLookupByLibrary.simpleMessage("عفوًا، حدث خطأ ما"), + "openAlbumInBrowser": + MessageLookupByLibrary.simpleMessage("فتح الألبوم في المتصفح"), + "openAlbumInBrowserTitle": MessageLookupByLibrary.simpleMessage( + "يرجى استخدام تطبيق الويب لإضافة صور إلى هذا الألبوم"), + "openFile": MessageLookupByLibrary.simpleMessage("فتح الملف"), + "openSettings": MessageLookupByLibrary.simpleMessage("فتح الإعدادات"), + "openTheItem": MessageLookupByLibrary.simpleMessage("• افتح العنصر"), + "openstreetmapContributors": + MessageLookupByLibrary.simpleMessage("مساهمو OpenStreetMap"), + "optionalAsShortAsYouLike": + MessageLookupByLibrary.simpleMessage("اختياري، قصير كما تشاء..."), + "orMergeWithExistingPerson": + MessageLookupByLibrary.simpleMessage("أو الدمج مع شخص موجود"), + "orPickAnExistingOne": + MessageLookupByLibrary.simpleMessage("أو اختر واحدًا موجودًا"), + "orPickFromYourContacts": + MessageLookupByLibrary.simpleMessage("أو اختر من جهات اتصالك"), + "pair": MessageLookupByLibrary.simpleMessage("إقران"), + "pairWithPin": + MessageLookupByLibrary.simpleMessage("الإقران بالرمز السري"), + "pairingComplete": + MessageLookupByLibrary.simpleMessage("اكتمل الإقران"), + "panorama": MessageLookupByLibrary.simpleMessage("بانوراما"), + "partyWithThem": m54, + "passKeyPendingVerification": + MessageLookupByLibrary.simpleMessage("التحقق لا يزال معلقًا."), + "passkey": MessageLookupByLibrary.simpleMessage("مفتاح المرور"), + "passkeyAuthTitle": + MessageLookupByLibrary.simpleMessage("التحقق من مفتاح المرور"), + "password": MessageLookupByLibrary.simpleMessage("كلمة المرور"), + "passwordChangedSuccessfully": + MessageLookupByLibrary.simpleMessage("تم تغيير كلمة المرور بنجاح."), + "passwordLock": MessageLookupByLibrary.simpleMessage("قفل بكلمة مرور"), + "passwordStrength": m55, + "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( + "يتم حساب قوة كلمة المرور مع الأخذ في الاعتبار طول كلمة المرور، والأحرف المستخدمة، وما إذا كانت كلمة المرور تظهر في قائمة أفضل 10,000 كلمة مرور شائعة الاستخدام."), + "passwordWarning": MessageLookupByLibrary.simpleMessage( + "نحن لا نخزن كلمة المرور هذه، لذا إذا نسيتها، لا يمكننا المساعدة في فك تشفير بياناتك."), + "paymentDetails": MessageLookupByLibrary.simpleMessage("تفاصيل الدفع"), + "paymentFailed": + MessageLookupByLibrary.simpleMessage("فشلت عملية الدفع"), + "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( + "للأسف، فشلت عملية الدفع الخاصة بك. يرجى الاتصال بالدعم وسوف نساعدك!"), + "paymentFailedTalkToProvider": m56, + "pendingItems": MessageLookupByLibrary.simpleMessage("العناصر المعلقة"), + "pendingSync": MessageLookupByLibrary.simpleMessage("المزامنة المعلقة"), + "people": MessageLookupByLibrary.simpleMessage("الأشخاص"), + "peopleUsingYourCode": + MessageLookupByLibrary.simpleMessage("الأشخاص الذين يستخدمون رمزك"), + "permDeleteWarning": MessageLookupByLibrary.simpleMessage( + "سيتم حذف جميع العناصر في سلة المهملات نهائيًا.\n\nلا يمكن التراجع عن هذا الإجراء."), + "permanentlyDelete": MessageLookupByLibrary.simpleMessage("حذف نهائي"), + "permanentlyDeleteFromDevice": + MessageLookupByLibrary.simpleMessage("حذف نهائي من الجهاز؟"), + "personIsAge": m57, + "personName": MessageLookupByLibrary.simpleMessage("اسم الشخص"), + "personTurningAge": m58, + "pets": MessageLookupByLibrary.simpleMessage("رفاق فروي"), + "photoDescriptions": + MessageLookupByLibrary.simpleMessage("أوصاف الصور"), + "photoGridSize": MessageLookupByLibrary.simpleMessage("حجم شبكة الصور"), + "photoSmallCase": MessageLookupByLibrary.simpleMessage("صورة"), + "photocountPhotos": m59, + "photos": MessageLookupByLibrary.simpleMessage("الصور"), + "photosAddedByYouWillBeRemovedFromTheAlbum": + MessageLookupByLibrary.simpleMessage( + "ستتم إزالة الصور التي أضفتها من الألبوم."), + "photosCount": m60, + "photosKeepRelativeTimeDifference": + MessageLookupByLibrary.simpleMessage( + "تحتفظ الصور بالفرق الزمني النسبي"), + "pickCenterPoint": + MessageLookupByLibrary.simpleMessage("اختيار نقطة المركز"), + "pinAlbum": MessageLookupByLibrary.simpleMessage("تثبيت الألبوم"), + "pinLock": MessageLookupByLibrary.simpleMessage("قفل برمز PIN"), + "playOnTv": + MessageLookupByLibrary.simpleMessage("تشغيل الألبوم على التلفزيون"), + "playOriginal": MessageLookupByLibrary.simpleMessage("تشغيل الأصلي"), + "playStoreFreeTrialValidTill": m61, + "playStream": MessageLookupByLibrary.simpleMessage("تشغيل البث"), + "playstoreSubscription": + MessageLookupByLibrary.simpleMessage("اشتراك متجر Play"), + "pleaseCheckYourInternetConnectionAndTryAgain": + MessageLookupByLibrary.simpleMessage( + "يرجى التحقق من اتصال الإنترنت الخاص بك والمحاولة مرة أخرى."), + "pleaseContactSupportAndWeWillBeHappyToHelp": + MessageLookupByLibrary.simpleMessage( + "يرجى التواصل مع support@ente.io وسنكون سعداء بمساعدتك!"), + "pleaseContactSupportIfTheProblemPersists": + MessageLookupByLibrary.simpleMessage( + "يرجى الاتصال بالدعم إذا استمرت المشكلة."), + "pleaseEmailUsAt": m62, + "pleaseGrantPermissions": + MessageLookupByLibrary.simpleMessage("يرجى منح الأذونات."), + "pleaseLoginAgain": + MessageLookupByLibrary.simpleMessage("يرجى تسجيل الدخول مرة أخرى."), + "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( + "يرجى تحديد الروابط السريعة للإزالة."), + "pleaseSendTheLogsTo": m63, + "pleaseTryAgain": + MessageLookupByLibrary.simpleMessage("يرجى المحاولة مرة أخرى"), + "pleaseVerifyTheCodeYouHaveEntered": + MessageLookupByLibrary.simpleMessage( + "يرجى التحقق من الرمز الذي أدخلته."), + "pleaseWait": MessageLookupByLibrary.simpleMessage("يرجى الانتظار..."), + "pleaseWaitDeletingAlbum": MessageLookupByLibrary.simpleMessage( + "يرجى الانتظار، جارٍ حذف الألبوم"), + "pleaseWaitForSometimeBeforeRetrying": + MessageLookupByLibrary.simpleMessage( + "يرجى الانتظار لبعض الوقت قبل إعادة المحاولة."), + "pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage( + "يرجى الانتظار، قد يستغرق هذا بعض الوقت."), + "posingWithThem": m64, + "preparingLogs": + MessageLookupByLibrary.simpleMessage("جارٍ تحضير السجلات..."), + "preserveMore": MessageLookupByLibrary.simpleMessage("حفظ المزيد"), + "pressAndHoldToPlayVideo": + MessageLookupByLibrary.simpleMessage("اضغط مطولاً لتشغيل الفيديو"), + "pressAndHoldToPlayVideoDetailed": MessageLookupByLibrary.simpleMessage( + "اضغط مطولاً على الصورة لتشغيل الفيديو"), + "previous": MessageLookupByLibrary.simpleMessage("السابق"), + "privacy": MessageLookupByLibrary.simpleMessage("الخصوصية"), + "privacyPolicyTitle": + MessageLookupByLibrary.simpleMessage("سياسة الخصوصية"), + "privateBackups": + MessageLookupByLibrary.simpleMessage("نسخ احتياطية خاصة"), + "privateSharing": MessageLookupByLibrary.simpleMessage("مشاركة خاصة"), + "proceed": MessageLookupByLibrary.simpleMessage("متابعة"), + "processed": MessageLookupByLibrary.simpleMessage("تمت المعالجة"), + "processing": MessageLookupByLibrary.simpleMessage("المعالجة"), + "processingImport": m65, + "processingVideos": + MessageLookupByLibrary.simpleMessage("معالجة مقاطع الفيديو"), + "publicLinkCreated": + MessageLookupByLibrary.simpleMessage("تم إنشاء الرابط العام."), + "publicLinkEnabled": + MessageLookupByLibrary.simpleMessage("تمكين الرابط العام"), + "queued": MessageLookupByLibrary.simpleMessage("في قائمة الانتظار"), + "quickLinks": MessageLookupByLibrary.simpleMessage("روابط سريعة"), + "radius": MessageLookupByLibrary.simpleMessage("نصف القطر"), + "raiseTicket": MessageLookupByLibrary.simpleMessage("فتح تذكرة دعم"), + "rateTheApp": MessageLookupByLibrary.simpleMessage("تقييم التطبيق"), + "rateUs": MessageLookupByLibrary.simpleMessage("تقييم التطبيق"), + "rateUsOnStore": m66, + "reassignMe": + MessageLookupByLibrary.simpleMessage("إعادة تعيين \"أنا\""), + "reassignedToName": m67, + "reassigningLoading": + MessageLookupByLibrary.simpleMessage("جارٍ إعادة التعيين..."), + "recover": MessageLookupByLibrary.simpleMessage("استعادة"), + "recoverAccount": + MessageLookupByLibrary.simpleMessage("استعادة الحساب"), "recoverButton": MessageLookupByLibrary.simpleMessage("استرداد"), + "recoveryAccount": + MessageLookupByLibrary.simpleMessage("استرداد الحساب"), + "recoveryInitiated": + MessageLookupByLibrary.simpleMessage("بدء الاسترداد"), + "recoveryInitiatedDesc": m68, + "recoveryKey": MessageLookupByLibrary.simpleMessage("مفتاح الاسترداد"), + "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "تم نسخ مفتاح الاسترداد إلى الحافظة"), + "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( + "إذا نسيت كلمة المرور الخاصة بك، فإن الطريقة الوحيدة لاستعادة بياناتك هي باستخدام هذا المفتاح."), + "recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage( + "لا نحتفظ بنسخة من هذا المفتاح. يرجى حفظ المفتاح المكون من 24 كلمة في مكان آمن."), + "recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage( + "مفتاح الاسترداد الخاص بك صالح. شكرًا على التحقق.\n\nيرجى تذكر الاحتفاظ بنسخة احتياطية آمنة من مفتاح الاسترداد."), + "recoveryKeyVerified": MessageLookupByLibrary.simpleMessage( + "تم التحقق من مفتاح الاسترداد."), + "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( + "مفتاح الاسترداد هو الطريقة الوحيدة لاستعادة صورك إذا نسيت كلمة المرور. يمكنك العثور عليه في الإعدادات > الحساب.\n\nالرجاء إدخال مفتاح الاسترداد هنا للتحقق من أنك حفظته بشكل صحيح."), + "recoveryReady": m69, "recoverySuccessful": - MessageLookupByLibrary.simpleMessage("نجح الاسترداد!"), - "sorry": MessageLookupByLibrary.simpleMessage("المعذرة"), + MessageLookupByLibrary.simpleMessage("تم الاسترداد بنجاح!"), + "recoveryWarning": MessageLookupByLibrary.simpleMessage( + "جهة اتصال موثوقة تحاول الوصول إلى حسابك"), + "recoveryWarningBody": m70, + "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( + "لا يمكن التحقق من كلمة المرور على جهازك الحالي، لكن يمكننا تعديلها لتعمل على جميع الأجهزة.\n\nسجّل الدخول باستخدام مفتاح الاسترداد، ثم أنشئ كلمة مرور جديدة (يمكنك اختيار نفس الكلمة السابقة إذا أردت)."), + "recreatePasswordTitle": + MessageLookupByLibrary.simpleMessage("إعادة إنشاء كلمة المرور"), + "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("إعادة إدخال كلمة المرور"), + "reenterPin": + MessageLookupByLibrary.simpleMessage("إعادة إدخال رمز PIN"), + "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( + "أحِل الأصدقاء وضاعف خطتك مرتين"), + "referralStep1": + MessageLookupByLibrary.simpleMessage("1. أعطِ هذا الرمز لأصدقائك"), + "referralStep2": + MessageLookupByLibrary.simpleMessage("2. يشتركون في خطة مدفوعة"), + "referralStep3": m71, + "referrals": MessageLookupByLibrary.simpleMessage("الإحالات"), + "referralsAreCurrentlyPaused": + MessageLookupByLibrary.simpleMessage("الإحالات متوقفة مؤقتًا"), + "rejectRecovery": MessageLookupByLibrary.simpleMessage("رفض الاسترداد"), + "remindToEmptyDeviceTrash": MessageLookupByLibrary.simpleMessage( + "تذكر أيضًا إفراغ \"المحذوفة مؤخرًا\" من \"الإعدادات\" -> \"التخزين\" لاستعادة المساحة المحررة."), + "remindToEmptyEnteTrash": MessageLookupByLibrary.simpleMessage( + "تذكر أيضًا إفراغ \"سلة المهملات\" لاستعادة المساحة المحررة."), + "remoteImages": MessageLookupByLibrary.simpleMessage("الصور عن بعد"), + "remoteThumbnails": + MessageLookupByLibrary.simpleMessage("الصور المصغرة عن بعد"), + "remoteVideos": + MessageLookupByLibrary.simpleMessage("مقاطع الفيديو عن بعد"), + "remove": MessageLookupByLibrary.simpleMessage("إزالة"), + "removeDuplicates": + MessageLookupByLibrary.simpleMessage("إزالة النسخ المكررة"), + "removeDuplicatesDesc": MessageLookupByLibrary.simpleMessage( + "مراجعة وإزالة الملفات المتطابقة تمامًا."), + "removeFromAlbum": + MessageLookupByLibrary.simpleMessage("إزالة من الألبوم"), + "removeFromAlbumTitle": + MessageLookupByLibrary.simpleMessage("إزالة من الألبوم؟"), + "removeFromFavorite": + MessageLookupByLibrary.simpleMessage("إزالة من المفضلة"), + "removeInvite": MessageLookupByLibrary.simpleMessage("إزالة الدعوة"), + "removeLink": MessageLookupByLibrary.simpleMessage("إزالة الرابط"), + "removeParticipant": + MessageLookupByLibrary.simpleMessage("إزالة المشارك"), + "removeParticipantBody": m72, + "removePersonLabel": + MessageLookupByLibrary.simpleMessage("إزالة تسمية الشخص"), + "removePublicLink": + MessageLookupByLibrary.simpleMessage("إزالة الرابط العام"), + "removePublicLinks": + MessageLookupByLibrary.simpleMessage("إزالة الروابط العامة"), + "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( + "بعض العناصر التي تزيلها تمت إضافتها بواسطة أشخاص آخرين، وستفقد الوصول إليها."), + "removeWithQuestionMark": + MessageLookupByLibrary.simpleMessage("إزالة؟"), + "removeYourselfAsTrustedContact": MessageLookupByLibrary.simpleMessage( + "إزالة نفسك كجهة اتصال موثوقة"), + "removingFromFavorites": + MessageLookupByLibrary.simpleMessage("جارٍ الإزالة من المفضلة..."), + "rename": MessageLookupByLibrary.simpleMessage("إعادة تسمية"), + "renameAlbum": + MessageLookupByLibrary.simpleMessage("إعادة تسمية الألبوم"), + "renameFile": MessageLookupByLibrary.simpleMessage("إعادة تسمية الملف"), + "renewSubscription": + MessageLookupByLibrary.simpleMessage("تجديد الاشتراك"), + "renewsOn": m73, + "reportABug": MessageLookupByLibrary.simpleMessage("الإبلاغ عن خطأ"), + "reportBug": MessageLookupByLibrary.simpleMessage("الإبلاغ عن خطأ"), + "resendEmail": MessageLookupByLibrary.simpleMessage( + "إعادة إرسال البريد الإلكتروني"), + "resetIgnoredFiles": MessageLookupByLibrary.simpleMessage( + "إعادة تعيين الملفات المتجاهلة"), + "resetPasswordTitle": + MessageLookupByLibrary.simpleMessage("إعادة تعيين كلمة المرور"), + "resetPerson": MessageLookupByLibrary.simpleMessage("إزالة"), + "resetToDefault": + MessageLookupByLibrary.simpleMessage("إعادة التعيين إلى الافتراضي"), + "restore": MessageLookupByLibrary.simpleMessage("استعادة"), + "restoreToAlbum": + MessageLookupByLibrary.simpleMessage("استعادة إلى الألبوم"), + "restoringFiles": + MessageLookupByLibrary.simpleMessage("جارٍ استعادة الملفات..."), + "resumableUploads": + MessageLookupByLibrary.simpleMessage("تحميلات قابلة للاستئناف"), + "retry": MessageLookupByLibrary.simpleMessage("إعادة المحاولة"), + "review": MessageLookupByLibrary.simpleMessage("مراجعة"), + "reviewDeduplicateItems": MessageLookupByLibrary.simpleMessage( + "يرجى مراجعة وحذف العناصر التي تعتقد أنها مكررة."), + "reviewSuggestions": + MessageLookupByLibrary.simpleMessage("مراجعة الاقتراحات"), + "right": MessageLookupByLibrary.simpleMessage("يمين"), + "roadtripWithThem": m74, + "rotate": MessageLookupByLibrary.simpleMessage("تدوير"), + "rotateLeft": MessageLookupByLibrary.simpleMessage("تدوير لليسار"), + "rotateRight": MessageLookupByLibrary.simpleMessage("تدوير لليمين"), + "safelyStored": MessageLookupByLibrary.simpleMessage("مخزنة بأمان"), + "save": MessageLookupByLibrary.simpleMessage("حفظ"), + "saveChangesBeforeLeavingQuestion": + MessageLookupByLibrary.simpleMessage("حفظ التغييرات قبل المغادرة؟"), + "saveCollage": MessageLookupByLibrary.simpleMessage("حفظ الكولاج"), + "saveCopy": MessageLookupByLibrary.simpleMessage("حفظ نسخة"), + "saveKey": MessageLookupByLibrary.simpleMessage("حفظ المفتاح"), + "savePerson": MessageLookupByLibrary.simpleMessage("حفظ الشخص"), + "saveYourRecoveryKeyIfYouHaventAlready": + MessageLookupByLibrary.simpleMessage( + "احفظ مفتاح الاسترداد إذا لم تكن قد فعلت ذلك بالفعل."), + "saving": MessageLookupByLibrary.simpleMessage("جارٍ الحفظ..."), + "savingEdits": + MessageLookupByLibrary.simpleMessage("جارٍ حفظ التعديلات..."), + "scanCode": MessageLookupByLibrary.simpleMessage("مسح الرمز"), + "scanThisBarcodeWithnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "امسح هذا الباركود باستخدام\nتطبيق المصادقة الخاص بك"), + "search": MessageLookupByLibrary.simpleMessage("بحث"), + "searchAlbumsEmptySection": + MessageLookupByLibrary.simpleMessage("الألبومات"), + "searchByAlbumNameHint": + MessageLookupByLibrary.simpleMessage("اسم الألبوم"), + "searchByExamples": MessageLookupByLibrary.simpleMessage( + "• أسماء الألبومات (مثل \"الكاميرا\")\n• أنواع الملفات (مثل \"مقاطع الفيديو\"، \".gif\")\n• السنوات والأشهر (مثل \"2022\"، \"يناير\")\n• العطلات (مثل \"عيد الميلاد\")\n• أوصاف الصور (مثل \"#مرح\")"), + "searchCaptionEmptySection": MessageLookupByLibrary.simpleMessage( + "أضف أوصافًا مثل \"#رحلة\" في معلومات الصورة للعثور عليها بسرعة هنا."), + "searchDatesEmptySection": MessageLookupByLibrary.simpleMessage( + "ابحث حسب تاريخ أو شهر أو سنة."), + "searchDiscoverEmptySection": MessageLookupByLibrary.simpleMessage( + "سيتم عرض الصور هنا بمجرد اكتمال المعالجة والمزامنة."), + "searchFaceEmptySection": MessageLookupByLibrary.simpleMessage( + "سيتم عرض الأشخاص هنا بمجرد الانتهاء من الفهرسة."), + "searchFileTypesAndNamesEmptySection": + MessageLookupByLibrary.simpleMessage("أنواع وأسماء الملفات"), + "searchHint1": + MessageLookupByLibrary.simpleMessage("بحث سريع على الجهاز"), + "searchHint2": + MessageLookupByLibrary.simpleMessage("تواريخ الصور، الأوصاف"), + "searchHint3": MessageLookupByLibrary.simpleMessage( + "الألبومات، أسماء الملفات، والأنواع"), + "searchHint4": MessageLookupByLibrary.simpleMessage("الموقع"), + "searchHint5": MessageLookupByLibrary.simpleMessage( + "قريبًا: الوجوه والبحث السحري ✨"), + "searchLocationEmptySection": MessageLookupByLibrary.simpleMessage( + "تجميع الصور الملتقطة ضمن نصف قطر معين لصورة ما."), + "searchPeopleEmptySection": MessageLookupByLibrary.simpleMessage( + "ادعُ الأشخاص، وسترى جميع الصور التي شاركوها هنا."), + "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( + "سيتم عرض الأشخاص هنا بمجرد اكتمال المعالجة والمزامنة."), + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, + "security": MessageLookupByLibrary.simpleMessage("الأمان"), + "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( + "رؤية روابط الألبومات العامة في التطبيق"), + "selectALocation": MessageLookupByLibrary.simpleMessage("تحديد موقع"), + "selectALocationFirst": + MessageLookupByLibrary.simpleMessage("حدد موقعًا أولاً"), + "selectAlbum": MessageLookupByLibrary.simpleMessage("تحديد ألبوم"), + "selectAll": MessageLookupByLibrary.simpleMessage("تحديد الكل"), + "selectAllShort": MessageLookupByLibrary.simpleMessage("الكل"), + "selectCoverPhoto": + MessageLookupByLibrary.simpleMessage("تحديد صورة الغلاف"), + "selectDate": MessageLookupByLibrary.simpleMessage("تحديد التاريخ"), + "selectFoldersForBackup": MessageLookupByLibrary.simpleMessage( + "تحديد المجلدات للنسخ الاحتياطي"), + "selectItemsToAdd": + MessageLookupByLibrary.simpleMessage("تحديد العناصر للإضافة"), + "selectLanguage": MessageLookupByLibrary.simpleMessage("اختر اللغة"), + "selectMailApp": + MessageLookupByLibrary.simpleMessage("تحديد تطبيق البريد"), + "selectMorePhotos": + MessageLookupByLibrary.simpleMessage("تحديد المزيد من الصور"), + "selectOneDateAndTime": + MessageLookupByLibrary.simpleMessage("تحديد تاريخ ووقت واحد"), + "selectOneDateAndTimeForAll": MessageLookupByLibrary.simpleMessage( + "تحديد تاريخ ووقت واحد للجميع"), + "selectPersonToLink": + MessageLookupByLibrary.simpleMessage("تحديد الشخص للربط"), + "selectReason": MessageLookupByLibrary.simpleMessage("اختر سببًا"), + "selectStartOfRange": + MessageLookupByLibrary.simpleMessage("تحديد بداية النطاق"), + "selectTime": MessageLookupByLibrary.simpleMessage("تحديد الوقت"), + "selectYourFace": MessageLookupByLibrary.simpleMessage("حدد وجهك"), + "selectYourPlan": MessageLookupByLibrary.simpleMessage("اختر خطتك"), + "selectedFilesAreNotOnEnte": MessageLookupByLibrary.simpleMessage( + "الملفات المحددة ليست موجودة على Ente."), + "selectedFoldersWillBeEncryptedAndBackedUp": + MessageLookupByLibrary.simpleMessage( + "سيتم تشفير المجلدات المحددة ونسخها احتياطيًا"), + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": + MessageLookupByLibrary.simpleMessage( + "سيتم حذف العناصر المحددة من جميع الألبومات ونقلها إلى سلة المهملات."), + "selectedItemsWillBeRemovedFromThisPerson": + MessageLookupByLibrary.simpleMessage( + "سيتم إزالة العناصر المحددة من هذا الشخص، ولكن لن يتم حذفها من مكتبتك."), + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "selfiesWithThem": m79, + "send": MessageLookupByLibrary.simpleMessage("إرسال"), + "sendEmail": + MessageLookupByLibrary.simpleMessage("إرسال بريد إلكتروني"), + "sendInvite": MessageLookupByLibrary.simpleMessage("إرسال دعوة"), + "sendLink": MessageLookupByLibrary.simpleMessage("إرسال الرابط"), + "serverEndpoint": + MessageLookupByLibrary.simpleMessage("نقطة نهاية الخادم"), + "sessionExpired": + MessageLookupByLibrary.simpleMessage("انتهت صلاحية الجلسة"), + "sessionIdMismatch": + MessageLookupByLibrary.simpleMessage("عدم تطابق معرّف الجلسة"), + "setAPassword": MessageLookupByLibrary.simpleMessage("تعيين كلمة مرور"), + "setAs": MessageLookupByLibrary.simpleMessage("تعيين كـ"), + "setCover": MessageLookupByLibrary.simpleMessage("تعيين كغلاف"), + "setLabel": MessageLookupByLibrary.simpleMessage("تعيين"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("تعيين كلمة مرور جديدة"), + "setNewPin": MessageLookupByLibrary.simpleMessage("تعيين رمز PIN جديد"), + "setPasswordTitle": + MessageLookupByLibrary.simpleMessage("تعيين كلمة المرور"), + "setRadius": MessageLookupByLibrary.simpleMessage("تعيين نصف القطر"), + "setupComplete": MessageLookupByLibrary.simpleMessage("اكتمل الإعداد"), + "share": MessageLookupByLibrary.simpleMessage("مشاركة"), + "shareALink": MessageLookupByLibrary.simpleMessage("مشاركة رابط"), + "shareAlbumHint": MessageLookupByLibrary.simpleMessage( + "افتح ألبومًا وانقر على زر المشاركة في الزاوية اليمنى العليا للمشاركة."), + "shareAnAlbumNow": + MessageLookupByLibrary.simpleMessage("شارك ألبومًا الآن"), + "shareLink": MessageLookupByLibrary.simpleMessage("مشاركة الرابط"), + "shareMyVerificationID": m80, + "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( + "شارك فقط مع الأشخاص الذين تريدهم."), + "shareTextConfirmOthersVerificationID": m81, + "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( + "قم بتنزيل تطبيق Ente حتى نتمكن من مشاركة الصور ومقاطع الفيديو بالجودة الأصلية بسهولة.\n\nhttps://ente.io"), + "shareTextReferralCode": m82, + "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( + "المشاركة مع غير مستخدمي Ente"), + "shareWithPeopleSectionTitle": m83, + "shareYourFirstAlbum": + MessageLookupByLibrary.simpleMessage("شارك ألبومك الأول"), + "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( + "أنشئ ألبومات مشتركة وتعاونية مع مستخدمي Ente الآخرين، بما في ذلك المستخدمين ذوي الاشتراكات المجانية."), + "sharedByMe": + MessageLookupByLibrary.simpleMessage("تمت مشاركتها بواسطتي"), + "sharedByYou": + MessageLookupByLibrary.simpleMessage("تمت مشاركتها بواسطتك"), + "sharedPhotoNotifications": MessageLookupByLibrary.simpleMessage( + "إشعارات الصور المشتركة الجديدة"), + "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( + "تلقّ إشعارات عندما يضيف شخص ما صورة إلى ألبوم مشترك أنت جزء منه."), + "sharedWith": m84, + "sharedWithMe": + MessageLookupByLibrary.simpleMessage("تمت مشاركتها معي"), + "sharedWithYou": + MessageLookupByLibrary.simpleMessage("تمت مشاركتها معك"), + "sharing": MessageLookupByLibrary.simpleMessage("جارٍ المشاركة..."), + "shiftDatesAndTime": + MessageLookupByLibrary.simpleMessage("تغيير التواريخ والوقت"), + "showMemories": MessageLookupByLibrary.simpleMessage("عرض الذكريات"), + "showPerson": MessageLookupByLibrary.simpleMessage("إظهار الشخص"), + "signOutFromOtherDevices": MessageLookupByLibrary.simpleMessage( + "تسجيل الخروج من الأجهزة الأخرى"), + "signOutOtherBody": MessageLookupByLibrary.simpleMessage( + "إذا كنت تعتقد أن شخصًا ما قد يعرف كلمة مرورك، يمكنك إجبار جميع الأجهزة الأخرى التي تستخدم حسابك على تسجيل الخروج."), + "signOutOtherDevices": MessageLookupByLibrary.simpleMessage( + "تسجيل الخروج من الأجهزة الأخرى"), + "signUpTerms": MessageLookupByLibrary.simpleMessage( + "أوافق على شروط الخدمة وسياسة الخصوصية"), + "singleFileDeleteFromDevice": m85, + "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( + "سيتم حذفه من جميع الألبومات."), + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, + "skip": MessageLookupByLibrary.simpleMessage("تخط"), + "social": MessageLookupByLibrary.simpleMessage("التواصل الاجتماعي"), + "someItemsAreInBothEnteAndYourDevice": + MessageLookupByLibrary.simpleMessage( + "بعض العناصر موجودة في Ente وعلى جهازك."), + "someOfTheFilesYouAreTryingToDeleteAre": + MessageLookupByLibrary.simpleMessage( + "بعض الملفات التي تحاول حذفها متوفرة فقط على جهازك ولا يمكن استردادها إذا تم حذفها."), + "someoneSharingAlbumsWithYouShouldSeeTheSameId": + MessageLookupByLibrary.simpleMessage( + "يجب أن يرى أي شخص يشارك ألبومات معك نفس معرّف التحقق على جهازه."), + "somethingWentWrong": + MessageLookupByLibrary.simpleMessage("حدث خطأ ما"), + "somethingWentWrongPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "حدث خطأ ما، يرجى المحاولة مرة أخرى"), + "sorry": MessageLookupByLibrary.simpleMessage("عفوًا"), + "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( + "عذرًا، تعذرت الإضافة إلى المفضلة!"), + "sorryCouldNotRemoveFromFavorites": + MessageLookupByLibrary.simpleMessage( + "عذرًا، تعذرت الإزالة من المفضلة!"), + "sorryTheCodeYouveEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "عذرًا، الرمز الذي أدخلته غير صحيح."), + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": + MessageLookupByLibrary.simpleMessage( + "عذرًا، لم نتمكن من إنشاء مفاتيح آمنة على هذا الجهاز.\n\nيرجى التسجيل من جهاز مختلف."), + "sort": MessageLookupByLibrary.simpleMessage("فرز"), + "sortAlbumsBy": MessageLookupByLibrary.simpleMessage("فرز حسب"), + "sortNewestFirst": MessageLookupByLibrary.simpleMessage("الأحدث أولاً"), + "sortOldestFirst": MessageLookupByLibrary.simpleMessage("الأقدم أولاً"), + "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ نجاح"), + "sportsWithThem": m88, + "spotlightOnThem": m89, + "spotlightOnYourself": + MessageLookupByLibrary.simpleMessage("تسليط الضوء عليك"), + "startAccountRecoveryTitle": + MessageLookupByLibrary.simpleMessage("بدء الاسترداد"), + "startBackup": + MessageLookupByLibrary.simpleMessage("بدء النسخ الاحتياطي"), + "status": MessageLookupByLibrary.simpleMessage("الحالة"), + "stopCastingBody": + MessageLookupByLibrary.simpleMessage("هل تريد إيقاف البث؟"), + "stopCastingTitle": MessageLookupByLibrary.simpleMessage("إيقاف البث"), + "storage": MessageLookupByLibrary.simpleMessage("التخزين"), + "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("العائلة"), + "storageBreakupYou": MessageLookupByLibrary.simpleMessage("أنت"), + "storageInGB": m90, + "storageLimitExceeded": + MessageLookupByLibrary.simpleMessage("تم تجاوز حد التخزين."), + "storageUsageInfo": m91, + "streamDetails": MessageLookupByLibrary.simpleMessage("تفاصيل البث"), + "strongStrength": MessageLookupByLibrary.simpleMessage("قوية"), + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, + "subscribe": MessageLookupByLibrary.simpleMessage("اشتراك"), + "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( + "المشاركة متاحة فقط للاشتراكات المدفوعة النشطة."), + "subscription": MessageLookupByLibrary.simpleMessage("الاشتراك"), + "success": MessageLookupByLibrary.simpleMessage("تم بنجاح"), + "successfullyArchived": + MessageLookupByLibrary.simpleMessage("تمت الأرشفة بنجاح."), + "successfullyHid": + MessageLookupByLibrary.simpleMessage("تم الإخفاء بنجاح."), + "successfullyUnarchived": + MessageLookupByLibrary.simpleMessage("تم إلغاء الأرشفة بنجاح."), + "successfullyUnhid": + MessageLookupByLibrary.simpleMessage("تم الإظهار بنجاح."), + "suggestFeatures": MessageLookupByLibrary.simpleMessage("اقتراح ميزة"), + "sunrise": MessageLookupByLibrary.simpleMessage("على الأفق"), + "support": MessageLookupByLibrary.simpleMessage("الدعم"), + "syncProgress": m94, + "syncStopped": MessageLookupByLibrary.simpleMessage("توقفت المزامنة"), + "syncing": MessageLookupByLibrary.simpleMessage("جارٍ المزامنة..."), + "systemTheme": MessageLookupByLibrary.simpleMessage("النظام"), + "tapToCopy": MessageLookupByLibrary.simpleMessage("انقر للنسخ"), + "tapToEnterCode": + MessageLookupByLibrary.simpleMessage("انقر لإدخال الرمز"), + "tapToUnlock": MessageLookupByLibrary.simpleMessage("انقر لفتح القفل"), + "tapToUpload": MessageLookupByLibrary.simpleMessage("انقر للتحميل"), + "tapToUploadIsIgnoredDue": m95, + "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( + "يبدو أن خطأً ما قد حدث. يرجى المحاولة مرة أخرى بعد بعض الوقت. إذا استمر الخطأ، يرجى الاتصال بفريق الدعم لدينا."), "terminate": MessageLookupByLibrary.simpleMessage("إنهاء"), "terminateSession": - MessageLookupByLibrary.simpleMessage("إنهاء الجلسة؟"), + MessageLookupByLibrary.simpleMessage("إنهاء الجَلسةِ؟"), + "terms": MessageLookupByLibrary.simpleMessage("الشروط"), + "termsOfServicesTitle": + MessageLookupByLibrary.simpleMessage("شروط الخدمة"), + "thankYou": MessageLookupByLibrary.simpleMessage("شكرًا لك"), + "thankYouForSubscribing": + MessageLookupByLibrary.simpleMessage("شكرًا لاشتراكك!"), + "theDownloadCouldNotBeCompleted": + MessageLookupByLibrary.simpleMessage("تعذر إكمال التنزيل."), + "theLinkYouAreTryingToAccessHasExpired": + MessageLookupByLibrary.simpleMessage( + "انتهت صلاحية الرابط الذي تحاول الوصول إليه."), + "theRecoveryKeyYouEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "مفتاح الاسترداد الذي أدخلته غير صحيح."), + "theme": MessageLookupByLibrary.simpleMessage("المظهر"), + "theseItemsWillBeDeletedFromYourDevice": + MessageLookupByLibrary.simpleMessage( + "سيتم حذف هذه العناصر من جهازك."), + "theyAlsoGetXGb": m96, + "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( + "سيتم حذفها من جميع الألبومات."), + "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( + "لا يمكن التراجع عن هذا الإجراء."), + "thisAlbumAlreadyHDACollaborativeLink": + MessageLookupByLibrary.simpleMessage( + "هذا الألبوم لديه رابط تعاوني بالفعل."), + "thisCanBeUsedToRecoverYourAccountIfYou": + MessageLookupByLibrary.simpleMessage( + "يمكن استخدام هذا المفتاح لاستعادة حسابك إذا فقدت جهاز المصادقة الثنائية."), "thisDevice": MessageLookupByLibrary.simpleMessage("هذا الجهاز"), + "thisEmailIsAlreadyInUse": MessageLookupByLibrary.simpleMessage( + "هذا البريد الإلكتروني مستخدم بالفعل."), + "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( + "لا تحتوي هذه الصورة على بيانات EXIF."), + "thisIsMeExclamation": MessageLookupByLibrary.simpleMessage("هذا أنا!"), + "thisIsPersonVerificationId": m97, + "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( + "هذا هو معرّف التحقق الخاص بك"), + "thisWeekThroughTheYears": + MessageLookupByLibrary.simpleMessage("هذا الأسبوع عبر السنين"), + "thisWeekXYearsAgo": m98, "thisWillLogYouOutOfTheFollowingDevice": MessageLookupByLibrary.simpleMessage( "سيؤدي هذا إلى تسجيل خروجك من الجهاز التالي:"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( - "سيؤدي هذا إلى تسجيل خروجك من هذا الجهاز!"), + "سيؤدي هذا إلى تسجيل خروجك من هذا الجهاز."), + "thisWillMakeTheDateAndTimeOfAllSelected": + MessageLookupByLibrary.simpleMessage( + "سيجعل هذا تاريخ ووقت جميع الصور المحددة متماثلاً."), + "thisWillRemovePublicLinksOfAllSelectedQuickLinks": + MessageLookupByLibrary.simpleMessage( + "سيؤدي هذا إلى إزالة الروابط العامة لجميع الروابط السريعة المحددة."), + "throughTheYears": m99, + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "لتمكين قفل التطبيق، يرجى إعداد رمز مرور الجهاز أو قفل الشاشة في إعدادات النظام."), + "toHideAPhotoOrVideo": + MessageLookupByLibrary.simpleMessage("لإخفاء صورة أو مقطع فيديو:"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( "لإعادة تعيين كلمة المرور، يرجى التحقق من بريدك الإلكتروني أولاً."), - "verify": MessageLookupByLibrary.simpleMessage("التحقّق"), + "todaysLogs": MessageLookupByLibrary.simpleMessage("سجلات اليوم"), + "tooManyIncorrectAttempts": MessageLookupByLibrary.simpleMessage( + "محاولات غير صحيحة كثيرة جدًا."), + "total": MessageLookupByLibrary.simpleMessage("المجموع"), + "totalSize": MessageLookupByLibrary.simpleMessage("الحجم الإجمالي"), + "trash": MessageLookupByLibrary.simpleMessage("سلة المهملات"), + "trashDaysLeft": m100, + "trim": MessageLookupByLibrary.simpleMessage("قص"), + "tripInYear": m101, + "tripToLocation": m102, + "trustedContacts": + MessageLookupByLibrary.simpleMessage("جهات الاتصال الموثوقة"), + "trustedInviteBody": m103, + "tryAgain": MessageLookupByLibrary.simpleMessage("المحاولة مرة أخرى"), + "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( + "قم بتشغيل النسخ الاحتياطي لتحميل الملفات المضافة إلى مجلد الجهاز هذا تلقائيًا إلى Ente."), + "twitter": MessageLookupByLibrary.simpleMessage("X (Twitter سابقًا)"), + "twoMonthsFreeOnYearlyPlans": MessageLookupByLibrary.simpleMessage( + "شهرين مجانيين على الخطط السنوية."), + "twofactor": MessageLookupByLibrary.simpleMessage("المصادقة الثنائية"), + "twofactorAuthenticationHasBeenDisabled": + MessageLookupByLibrary.simpleMessage("تم تعطيل المصادقة الثنائية."), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage("المصادقة الثنائية"), + "twofactorAuthenticationSuccessfullyReset": + MessageLookupByLibrary.simpleMessage( + "تمت إعادة تعيين المصادقة الثنائية بنجاح."), + "twofactorSetup": + MessageLookupByLibrary.simpleMessage("إعداد المصادقة الثنائية"), + "typeOfGallerGallerytypeIsNotSupportedForRename": m104, + "unarchive": MessageLookupByLibrary.simpleMessage("إلغاء الأرشفة"), + "unarchiveAlbum": + MessageLookupByLibrary.simpleMessage("إلغاء أرشفة الألبوم"), + "unarchiving": + MessageLookupByLibrary.simpleMessage("جارٍ إلغاء الأرشفة..."), + "unavailableReferralCode": + MessageLookupByLibrary.simpleMessage("عذرًا، هذا الرمز غير متوفر."), + "uncategorized": MessageLookupByLibrary.simpleMessage("غير مصنف"), + "unhide": MessageLookupByLibrary.simpleMessage("إظهار"), + "unhideToAlbum": + MessageLookupByLibrary.simpleMessage("إظهار في الألبوم"), + "unhiding": MessageLookupByLibrary.simpleMessage("جارٍ إظهار..."), + "unhidingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "جارٍ إظهار الملفات في الألبوم..."), + "unlock": MessageLookupByLibrary.simpleMessage("فتح"), + "unpinAlbum": + MessageLookupByLibrary.simpleMessage("إلغاء تثبيت الألبوم"), + "unselectAll": MessageLookupByLibrary.simpleMessage("إلغاء تحديد الكل"), + "update": MessageLookupByLibrary.simpleMessage("تحديث"), + "updateAvailable": MessageLookupByLibrary.simpleMessage("يتوفر تحديث"), + "updatingFolderSelection": + MessageLookupByLibrary.simpleMessage("جارٍ تحديث تحديد المجلد..."), + "upgrade": MessageLookupByLibrary.simpleMessage("ترقية"), + "uploadIsIgnoredDueToIgnorereason": m105, + "uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "جارٍ تحميل الملفات إلى الألبوم..."), + "uploadingMultipleMemories": m106, + "uploadingSingleMemory": + MessageLookupByLibrary.simpleMessage("جارٍ حفظ ذكرى واحدة..."), + "upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage( + "خصم يصل إلى 50%، حتى 4 ديسمبر."), + "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( + "مساحة التخزين القابلة للاستخدام مقيدة بخطتك الحالية.\nالمساحة التخزينية الزائدة التي تمت المطالبة بها ستصبح قابلة للاستخدام تلقائيًا عند ترقية خطتك."), + "useAsCover": MessageLookupByLibrary.simpleMessage("استخدام كغلاف"), + "useDifferentPlayerInfo": MessageLookupByLibrary.simpleMessage( + "هل تواجه مشكلة في تشغيل هذا الفيديو؟ اضغط مطولاً هنا لتجربة مشغل مختلف."), + "usePublicLinksForPeopleNotOnEnte": + MessageLookupByLibrary.simpleMessage( + "استخدم الروابط العامة للأشخاص غير المسجلين في Ente."), + "useRecoveryKey": + MessageLookupByLibrary.simpleMessage("استخدام مفتاح الاسترداد"), + "useSelectedPhoto": + MessageLookupByLibrary.simpleMessage("استخدام الصورة المحددة"), + "usedSpace": MessageLookupByLibrary.simpleMessage("المساحة المستخدمة"), + "validTill": m107, + "verificationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "فشل التحقق، يرجى المحاولة مرة أخرى."), + "verificationId": MessageLookupByLibrary.simpleMessage("معرّف التحقق"), + "verify": MessageLookupByLibrary.simpleMessage("التحقق"), "verifyEmail": - MessageLookupByLibrary.simpleMessage("التحقق من البريد الإلكتروني") + MessageLookupByLibrary.simpleMessage("التحقق من البريد الإلكتروني"), + "verifyEmailID": m108, + "verifyIDLabel": MessageLookupByLibrary.simpleMessage("تحقق"), + "verifyPasskey": + MessageLookupByLibrary.simpleMessage("التحقق من مفتاح المرور"), + "verifyPassword": + MessageLookupByLibrary.simpleMessage("التحقق من كلمة المرور"), + "verifying": MessageLookupByLibrary.simpleMessage("جارٍ التحقق..."), + "verifyingRecoveryKey": MessageLookupByLibrary.simpleMessage( + "جارٍ التحقق من مفتاح الاسترداد..."), + "videoInfo": MessageLookupByLibrary.simpleMessage("معلومات الفيديو"), + "videoSmallCase": MessageLookupByLibrary.simpleMessage("فيديو"), + "videoStreaming": MessageLookupByLibrary.simpleMessage("بث الفيديو"), + "videos": MessageLookupByLibrary.simpleMessage("مقاطع الفيديو"), + "viewActiveSessions": + MessageLookupByLibrary.simpleMessage("عرض الجلسات النشطة"), + "viewAddOnButton": MessageLookupByLibrary.simpleMessage("عرض الإضافات"), + "viewAll": MessageLookupByLibrary.simpleMessage("عرض الكل"), + "viewAllExifData": + MessageLookupByLibrary.simpleMessage("عرض جميع بيانات EXIF"), + "viewLargeFiles": + MessageLookupByLibrary.simpleMessage("الملفات الكبيرة"), + "viewLargeFilesDesc": MessageLookupByLibrary.simpleMessage( + "عرض الملفات التي تستهلك أكبر قدر من مساحة التخزين."), + "viewLogs": MessageLookupByLibrary.simpleMessage("عرض السجلات"), + "viewRecoveryKey": + MessageLookupByLibrary.simpleMessage("عرض مفتاح الاسترداد"), + "viewer": MessageLookupByLibrary.simpleMessage("مشاهد"), + "viewersSuccessfullyAdded": m109, + "visitWebToManage": MessageLookupByLibrary.simpleMessage( + "يرجى زيارة web.ente.io لإدارة اشتراكك."), + "waitingForVerification": + MessageLookupByLibrary.simpleMessage("في انتظار التحقق..."), + "waitingForWifi": + MessageLookupByLibrary.simpleMessage("في انتظار شبكة Wi-Fi..."), + "warning": MessageLookupByLibrary.simpleMessage("تحذير"), + "weAreOpenSource": + MessageLookupByLibrary.simpleMessage("نحن مفتوحو المصدر!"), + "weDontSupportEditingPhotosAndAlbumsThatYouDont": + MessageLookupByLibrary.simpleMessage( + "لا ندعم تعديل الصور والألبومات التي لا تملكها بعد."), + "weHaveSendEmailTo": m110, + "weakStrength": MessageLookupByLibrary.simpleMessage("ضعيفة"), + "welcomeBack": MessageLookupByLibrary.simpleMessage("أهلاً بعودتك!"), + "whatsNew": MessageLookupByLibrary.simpleMessage("ما الجديد"), + "whyAddTrustContact": MessageLookupByLibrary.simpleMessage( + "يمكن لجهة الاتصال الموثوقة المساعدة في استعادة بياناتك."), + "yearShort": MessageLookupByLibrary.simpleMessage("سنة"), + "yearly": MessageLookupByLibrary.simpleMessage("سنويًا"), + "yearsAgo": m111, + "yes": MessageLookupByLibrary.simpleMessage("نعم"), + "yesCancel": MessageLookupByLibrary.simpleMessage("نعم، إلغاء"), + "yesConvertToViewer": + MessageLookupByLibrary.simpleMessage("نعم، التحويل إلى مشاهد"), + "yesDelete": MessageLookupByLibrary.simpleMessage("نعم، حذف"), + "yesDiscardChanges": + MessageLookupByLibrary.simpleMessage("نعم، تجاهل التغييرات"), + "yesLogout": MessageLookupByLibrary.simpleMessage("نعم، تسجيل الخروج"), + "yesRemove": MessageLookupByLibrary.simpleMessage("نعم، إزالة"), + "yesRenew": MessageLookupByLibrary.simpleMessage("نعم، تجديد"), + "yesResetPerson": + MessageLookupByLibrary.simpleMessage("نعم، إعادة تعيين الشخص"), + "you": MessageLookupByLibrary.simpleMessage("أنت"), + "youAndThem": m112, + "youAreOnAFamilyPlan": + MessageLookupByLibrary.simpleMessage("أنت مشترك في خطة عائلية!"), + "youAreOnTheLatestVersion": + MessageLookupByLibrary.simpleMessage("أنت تستخدم أحدث إصدار."), + "youCanAtMaxDoubleYourStorage": MessageLookupByLibrary.simpleMessage( + "* يمكنك مضاعفة مساحة التخزين الخاصة بك بحد أقصى"), + "youCanManageYourLinksInTheShareTab": + MessageLookupByLibrary.simpleMessage( + "يمكنك إدارة روابطك في علامة تبويب المشاركة."), + "youCanTrySearchingForADifferentQuery": + MessageLookupByLibrary.simpleMessage( + "يمكنك محاولة البحث عن استعلام مختلف."), + "youCannotDowngradeToThisPlan": MessageLookupByLibrary.simpleMessage( + "لا يمكنك الترقية إلى هذه الخطة."), + "youCannotShareWithYourself": + MessageLookupByLibrary.simpleMessage("لا يمكنك المشاركة مع نفسك."), + "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( + "لا توجد لديك أي عناصر مؤرشفة."), + "youHaveSuccessfullyFreedUp": m113, + "yourAccountHasBeenDeleted": + MessageLookupByLibrary.simpleMessage("تم حذف حسابك بنجاح."), + "yourMap": MessageLookupByLibrary.simpleMessage("خريطتك"), + "yourPlanWasSuccessfullyDowngraded": + MessageLookupByLibrary.simpleMessage("تم تخفيض خطتك بنجاح."), + "yourPlanWasSuccessfullyUpgraded": + MessageLookupByLibrary.simpleMessage("تمت ترقية خطتك بنجاح."), + "yourPurchaseWasSuccessful": + MessageLookupByLibrary.simpleMessage("تم الشراء بنجاح."), + "yourStorageDetailsCouldNotBeFetched": + MessageLookupByLibrary.simpleMessage( + "تعذر جلب تفاصيل التخزين الخاصة بك."), + "yourSubscriptionHasExpired": + MessageLookupByLibrary.simpleMessage("انتهت صلاحية اشتراكك."), + "yourSubscriptionWasUpdatedSuccessfully": + MessageLookupByLibrary.simpleMessage("تم تحديث اشتراكك بنجاح."), + "yourVerificationCodeHasExpired": MessageLookupByLibrary.simpleMessage( + "انتهت صلاحية رمز التحقق الخاص بك."), + "youveNoDuplicateFilesThatCanBeCleared": + MessageLookupByLibrary.simpleMessage( + "لا توجد لديك أي ملفات مكررة يمكن مسحها."), + "youveNoFilesInThisAlbumThatCanBeDeleted": + MessageLookupByLibrary.simpleMessage( + "لا توجد لديك ملفات في هذا الألبوم يمكن حذفها."), + "zoomOutToSeePhotos": + MessageLookupByLibrary.simpleMessage("قم بالتصغير لرؤية الصور") }; } diff --git a/mobile/lib/generated/intl/messages_be.dart b/mobile/lib/generated/intl/messages_be.dart index 0d5635e01e..c671f70439 100644 --- a/mobile/lib/generated/intl/messages_be.dart +++ b/mobile/lib/generated/intl/messages_be.dart @@ -20,12 +20,12 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'be'; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Надзейнасць пароля: ${passwordStrengthValue}"; - static String m1(storageAmountInGB) => "${storageAmountInGB} Гб"; + static String m90(storageAmountInGB) => "${storageAmountInGB} Гб"; - static String m2(email) => + static String m110(email) => "Ліст адпраўлены на электронную пошту ${email}"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -187,7 +187,7 @@ class MessageLookup extends MessageLookupByLibrary { "password": MessageLookupByLibrary.simpleMessage("Пароль"), "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage("Пароль паспяхова зменены"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordWarning": MessageLookupByLibrary.simpleMessage( "Мы не захоўваем гэты пароль і мы не зможам расшыфраваць вашы даныя, калі вы забудзеце яго"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("фота"), @@ -249,7 +249,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage( "Немагчыма згенерыраваць ключы бяспекі на гэтай прыладзе.\n\nЗарэгіструйцеся з іншай прылады."), "status": MessageLookupByLibrary.simpleMessage("Стан"), - "storageInGB": m1, + "storageInGB": m90, "strongStrength": MessageLookupByLibrary.simpleMessage("Надзейны"), "support": MessageLookupByLibrary.simpleMessage("Падтрымка"), "systemTheme": MessageLookupByLibrary.simpleMessage("Сістэма"), @@ -288,7 +288,7 @@ class MessageLookup extends MessageLookupByLibrary { "videoSmallCase": MessageLookupByLibrary.simpleMessage("відэа"), "viewLargeFiles": MessageLookupByLibrary.simpleMessage("Вялікія файлы"), "viewer": MessageLookupByLibrary.simpleMessage("Праглядальнік"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Ненадзейны"), "welcomeBack": MessageLookupByLibrary.simpleMessage("З вяртаннем!"), "yesDelete": MessageLookupByLibrary.simpleMessage("Так, выдаліць"), diff --git a/mobile/lib/generated/intl/messages_cs.dart b/mobile/lib/generated/intl/messages_cs.dart index 226e365e9c..20f003b5bd 100644 --- a/mobile/lib/generated/intl/messages_cs.dart +++ b/mobile/lib/generated/intl/messages_cs.dart @@ -22,10 +22,245 @@ class MessageLookup extends MessageLookupByLibrary { final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { + "acceptTrustInvite": + MessageLookupByLibrary.simpleMessage("Přijmout pozvání"), + "account": MessageLookupByLibrary.simpleMessage("Účet"), + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("Vítejte zpět!"), + "add": MessageLookupByLibrary.simpleMessage("Přidat"), + "addName": MessageLookupByLibrary.simpleMessage("Přidat název"), + "addNew": MessageLookupByLibrary.simpleMessage("Přidat nový"), + "addNewPerson": + MessageLookupByLibrary.simpleMessage("Přidat novou osobu"), + "addToAlbum": MessageLookupByLibrary.simpleMessage("Přidat do alba"), + "advancedSettings": MessageLookupByLibrary.simpleMessage("Pokročilé"), + "after1Day": MessageLookupByLibrary.simpleMessage("Po 1 dni"), + "after1Hour": MessageLookupByLibrary.simpleMessage("Po 1 hodině"), + "after1Month": MessageLookupByLibrary.simpleMessage("Po 1 měsíci"), + "after1Week": MessageLookupByLibrary.simpleMessage("Po 1 týdnu"), + "after1Year": MessageLookupByLibrary.simpleMessage("Po 1 roce"), + "albumOwner": MessageLookupByLibrary.simpleMessage("Vlastník"), + "allow": MessageLookupByLibrary.simpleMessage("Povolit"), + "androidCancelButton": MessageLookupByLibrary.simpleMessage("Zrušit"), + "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), + "apply": MessageLookupByLibrary.simpleMessage("Použít"), + "archiveAlbum": + MessageLookupByLibrary.simpleMessage("Archivovat album"), + "archiving": MessageLookupByLibrary.simpleMessage("Archivování..."), "askDeleteReason": MessageLookupByLibrary.simpleMessage( "Jaký je váš hlavní důvod, proč mažete svůj účet?"), + "autoLock": + MessageLookupByLibrary.simpleMessage("Automatické zamykání"), + "birthday": MessageLookupByLibrary.simpleMessage("Narozeniny"), + "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "cLIcon": MessageLookupByLibrary.simpleMessage("Nová ikona"), + "cLMemories": MessageLookupByLibrary.simpleMessage("Vzpomínky"), + "cancel": MessageLookupByLibrary.simpleMessage("Zrušit"), + "changeEmail": MessageLookupByLibrary.simpleMessage("Změnit e-mail"), "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( "Zkontrolujte prosím svou doručenou poštu (a spam) pro dokončení ověření"), - "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage("") + "close": MessageLookupByLibrary.simpleMessage("Zavřít"), + "collaborator": MessageLookupByLibrary.simpleMessage("Spolupracovník"), + "collageLayout": MessageLookupByLibrary.simpleMessage("Rozvržení"), + "color": MessageLookupByLibrary.simpleMessage("Barva"), + "confirm": MessageLookupByLibrary.simpleMessage("Potvrdit"), + "contacts": MessageLookupByLibrary.simpleMessage("Kontakty"), + "continueLabel": MessageLookupByLibrary.simpleMessage("Pokračovat"), + "create": MessageLookupByLibrary.simpleMessage("Vytvořit"), + "createAccount": MessageLookupByLibrary.simpleMessage("Vytvořit účet"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("Vytvořit nový účet"), + "crop": MessageLookupByLibrary.simpleMessage("Oříznout"), + "dayToday": MessageLookupByLibrary.simpleMessage("Dnes"), + "dayYesterday": MessageLookupByLibrary.simpleMessage("Včera"), + "declineTrustInvite": + MessageLookupByLibrary.simpleMessage("Odmítnout pozvání"), + "decrypting": MessageLookupByLibrary.simpleMessage("Dešifrování..."), + "delete": MessageLookupByLibrary.simpleMessage("Smazat"), + "deleteAccount": MessageLookupByLibrary.simpleMessage("Smazat účet"), + "deleteEmptyAlbums": + MessageLookupByLibrary.simpleMessage("Smazat prázdná alba"), + "deleteEmptyAlbumsWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Smazat prázdná alba?"), + "deviceCodeHint": MessageLookupByLibrary.simpleMessage("Zadejte kód"), + "discord": MessageLookupByLibrary.simpleMessage("Discord"), + "discover_food": MessageLookupByLibrary.simpleMessage("Jídlo"), + "discover_pets": + MessageLookupByLibrary.simpleMessage("Domácí mazlíčci"), + "discover_selfies": MessageLookupByLibrary.simpleMessage("Selfie"), + "discover_wallpapers": MessageLookupByLibrary.simpleMessage("Pozadí"), + "dismiss": MessageLookupByLibrary.simpleMessage("Zrušit"), + "done": MessageLookupByLibrary.simpleMessage("Hotovo"), + "download": MessageLookupByLibrary.simpleMessage("Stáhnout"), + "edit": MessageLookupByLibrary.simpleMessage("Upravit"), + "editPerson": MessageLookupByLibrary.simpleMessage("Upravit osobu"), + "editTime": MessageLookupByLibrary.simpleMessage("Upravit čas"), + "email": MessageLookupByLibrary.simpleMessage("E-mail"), + "empty": MessageLookupByLibrary.simpleMessage("Vyprázdnit"), + "enable": MessageLookupByLibrary.simpleMessage("Povolit"), + "encryption": MessageLookupByLibrary.simpleMessage("Šifrování"), + "enterDateOfBirth": + MessageLookupByLibrary.simpleMessage("Narozeniny (volitelné)"), + "enterValidEmail": MessageLookupByLibrary.simpleMessage( + "Prosím, zadejte platnou e-mailovou adresu."), + "enterYourEmailAddress": MessageLookupByLibrary.simpleMessage( + "Zadejte svou e-mailovou adresu"), + "enterYourPassword": + MessageLookupByLibrary.simpleMessage("Zadejte své heslo"), + "exif": MessageLookupByLibrary.simpleMessage("EXIF"), + "faces": MessageLookupByLibrary.simpleMessage("Obličeje"), + "failedToDownloadVideo": MessageLookupByLibrary.simpleMessage( + "Stahování videa se nezdařilo"), + "familyPlanPortalTitle": MessageLookupByLibrary.simpleMessage("Rodina"), + "faq": MessageLookupByLibrary.simpleMessage("Často kladené dotazy"), + "favorite": MessageLookupByLibrary.simpleMessage("Oblíbené"), + "feedback": MessageLookupByLibrary.simpleMessage("Zpětná vazba"), + "flip": MessageLookupByLibrary.simpleMessage("Překlopit"), + "gallery": MessageLookupByLibrary.simpleMessage("Galerie"), + "general": MessageLookupByLibrary.simpleMessage("Obecné"), + "hide": MessageLookupByLibrary.simpleMessage("Skrýt"), + "iOSOkButton": MessageLookupByLibrary.simpleMessage("OK"), + "immediately": MessageLookupByLibrary.simpleMessage("Ihned"), + "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage(""), + "info": MessageLookupByLibrary.simpleMessage("Informace"), + "invalidEmailAddress": + MessageLookupByLibrary.simpleMessage("Neplatná e-mailová adresa"), + "invalidKey": MessageLookupByLibrary.simpleMessage("Neplatný klíč"), + "invite": MessageLookupByLibrary.simpleMessage("Pozvat"), + "inviteYourFriendsToEnte": + MessageLookupByLibrary.simpleMessage("Pozvěte své přátelé do Ente"), + "language": MessageLookupByLibrary.simpleMessage("Jazyk"), + "leave": MessageLookupByLibrary.simpleMessage("Odejít"), + "leaveAlbum": MessageLookupByLibrary.simpleMessage("Opustit album"), + "left": MessageLookupByLibrary.simpleMessage("Doleva"), + "linkHasExpired": + MessageLookupByLibrary.simpleMessage("Platnost odkazu vypršela"), + "linkNeverExpires": MessageLookupByLibrary.simpleMessage("Nikdy"), + "loadingGallery": + MessageLookupByLibrary.simpleMessage("Načítání galerie..."), + "location": MessageLookupByLibrary.simpleMessage("Poloha"), + "locations": MessageLookupByLibrary.simpleMessage("Lokality"), + "loggingOut": MessageLookupByLibrary.simpleMessage("Odhlašování..."), + "loginSessionExpired": + MessageLookupByLibrary.simpleMessage("Relace vypršela"), + "logout": MessageLookupByLibrary.simpleMessage("Odhlásit se"), + "lostDevice": + MessageLookupByLibrary.simpleMessage("Ztratili jste zařízení?"), + "manage": MessageLookupByLibrary.simpleMessage("Spravovat"), + "manageSubscription": + MessageLookupByLibrary.simpleMessage("Spravovat předplatné"), + "map": MessageLookupByLibrary.simpleMessage("Mapa"), + "maps": MessageLookupByLibrary.simpleMessage("Mapy"), + "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), + "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), + "me": MessageLookupByLibrary.simpleMessage("Já"), + "monthly": MessageLookupByLibrary.simpleMessage("Měsíčně"), + "moreDetails": + MessageLookupByLibrary.simpleMessage("Další podrobnosti"), + "movedToTrash": + MessageLookupByLibrary.simpleMessage("Přesunuto do koše"), + "never": MessageLookupByLibrary.simpleMessage("Nikdy"), + "newAlbum": MessageLookupByLibrary.simpleMessage("Nové album"), + "newest": MessageLookupByLibrary.simpleMessage("Nejnovější"), + "next": MessageLookupByLibrary.simpleMessage("Další"), + "no": MessageLookupByLibrary.simpleMessage("Ne"), + "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( + "Zatím nemáte žádná sdílená alba"), + "noDuplicates": + MessageLookupByLibrary.simpleMessage("✨ Žádné duplicity"), + "noInternetConnection": + MessageLookupByLibrary.simpleMessage("Žádné připojení k internetu"), + "noResultsFound": MessageLookupByLibrary.simpleMessage( + "Nebyly nalezeny žádné výsledky"), + "notifications": MessageLookupByLibrary.simpleMessage("Notifikace"), + "ok": MessageLookupByLibrary.simpleMessage("Ok"), + "openFile": MessageLookupByLibrary.simpleMessage("Otevřít soubor"), + "panorama": MessageLookupByLibrary.simpleMessage("Panorama"), + "password": MessageLookupByLibrary.simpleMessage("Heslo"), + "people": MessageLookupByLibrary.simpleMessage("Lidé"), + "personName": MessageLookupByLibrary.simpleMessage("Jméno osoby"), + "pinAlbum": MessageLookupByLibrary.simpleMessage("Připnout album"), + "pleaseTryAgain": + MessageLookupByLibrary.simpleMessage("Zkuste to prosím znovu"), + "pleaseWait": MessageLookupByLibrary.simpleMessage("Čekejte prosím..."), + "previous": MessageLookupByLibrary.simpleMessage("Předchozí"), + "privacy": MessageLookupByLibrary.simpleMessage("Soukromí"), + "rateUs": MessageLookupByLibrary.simpleMessage("Ohodnoť nás"), + "remove": MessageLookupByLibrary.simpleMessage("Odstranit"), + "removeDuplicates": + MessageLookupByLibrary.simpleMessage("Odstranit duplicity"), + "removeInvite": + MessageLookupByLibrary.simpleMessage("Odstranit pozvání"), + "removeLink": MessageLookupByLibrary.simpleMessage("Odstranit odkaz"), + "renameAlbum": + MessageLookupByLibrary.simpleMessage("Přejmenovat album"), + "renameFile": + MessageLookupByLibrary.simpleMessage("Přejmenovat soubor"), + "resetPerson": MessageLookupByLibrary.simpleMessage("Odstranit"), + "restore": MessageLookupByLibrary.simpleMessage("Obnovit"), + "right": MessageLookupByLibrary.simpleMessage("Doprava"), + "rotate": MessageLookupByLibrary.simpleMessage("Otočit"), + "rotateLeft": MessageLookupByLibrary.simpleMessage("Otočit doleva"), + "rotateRight": MessageLookupByLibrary.simpleMessage("Otočit doprava"), + "save": MessageLookupByLibrary.simpleMessage("Uložit"), + "saveCopy": MessageLookupByLibrary.simpleMessage("Uložit kopii"), + "saveKey": MessageLookupByLibrary.simpleMessage("Uložit klíč"), + "savePerson": MessageLookupByLibrary.simpleMessage("Uložit osobu"), + "searchAlbumsEmptySection": + MessageLookupByLibrary.simpleMessage("Alba"), + "security": MessageLookupByLibrary.simpleMessage("Zabezpečení"), + "selectDate": MessageLookupByLibrary.simpleMessage("Vybrat datum"), + "selectLanguage": MessageLookupByLibrary.simpleMessage("Vybrat jazyk"), + "selectTime": MessageLookupByLibrary.simpleMessage("Vybrat čas"), + "sendLink": MessageLookupByLibrary.simpleMessage("Odeslat odkaz"), + "setLabel": MessageLookupByLibrary.simpleMessage("Nastavit"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Nastavit nové heslo"), + "share": MessageLookupByLibrary.simpleMessage("Sdílet"), + "shareLink": MessageLookupByLibrary.simpleMessage("Sdílet odkaz"), + "sharedByMe": MessageLookupByLibrary.simpleMessage("Sdíleno mnou"), + "sharedByYou": MessageLookupByLibrary.simpleMessage("Sdíleno vámi"), + "sharedWithMe": MessageLookupByLibrary.simpleMessage("Sdíleno se mnou"), + "sharedWithYou": MessageLookupByLibrary.simpleMessage("Sdíleno s vámi"), + "skip": MessageLookupByLibrary.simpleMessage("Přeskočit"), + "sort": MessageLookupByLibrary.simpleMessage("Seřadit"), + "sortAlbumsBy": MessageLookupByLibrary.simpleMessage("Seřadit podle"), + "sortNewestFirst": + MessageLookupByLibrary.simpleMessage("Od nejnovějších"), + "sortOldestFirst": + MessageLookupByLibrary.simpleMessage("Od nejstarších"), + "storage": MessageLookupByLibrary.simpleMessage("Úložiště"), + "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Rodina"), + "syncing": MessageLookupByLibrary.simpleMessage("Synchronizace..."), + "terminate": MessageLookupByLibrary.simpleMessage("Ukončit"), + "thankYou": MessageLookupByLibrary.simpleMessage("Děkujeme"), + "thisDevice": MessageLookupByLibrary.simpleMessage("Toto zařízení"), + "thisIsMeExclamation": + MessageLookupByLibrary.simpleMessage("To jsem já!"), + "totalSize": MessageLookupByLibrary.simpleMessage("Celková velikost"), + "trash": MessageLookupByLibrary.simpleMessage("Koš"), + "twitter": MessageLookupByLibrary.simpleMessage("Twitter"), + "unlock": MessageLookupByLibrary.simpleMessage("Odemknout"), + "unpinAlbum": MessageLookupByLibrary.simpleMessage("Odepnout album"), + "upgrade": MessageLookupByLibrary.simpleMessage("Upgradovat"), + "usedSpace": MessageLookupByLibrary.simpleMessage("Využité místo"), + "verify": MessageLookupByLibrary.simpleMessage("Ověřit"), + "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Ověřit"), + "verifying": MessageLookupByLibrary.simpleMessage("Ověřování..."), + "videos": MessageLookupByLibrary.simpleMessage("Videa"), + "viewAll": MessageLookupByLibrary.simpleMessage("Zobrazit vše"), + "viewer": MessageLookupByLibrary.simpleMessage("Prohlížející"), + "welcomeBack": MessageLookupByLibrary.simpleMessage("Vítejte zpět!"), + "whatsNew": MessageLookupByLibrary.simpleMessage("Co je nového"), + "yearly": MessageLookupByLibrary.simpleMessage("Ročně"), + "yes": MessageLookupByLibrary.simpleMessage("Ano"), + "yesCancel": MessageLookupByLibrary.simpleMessage("Ano, zrušit"), + "yesDelete": MessageLookupByLibrary.simpleMessage("Ano, smazat"), + "yesDiscardChanges": + MessageLookupByLibrary.simpleMessage("Ano, zahodit změny"), + "yesRemove": MessageLookupByLibrary.simpleMessage("Ano, odstranit"), + "yesRenew": MessageLookupByLibrary.simpleMessage("Ano, obnovit"), + "you": MessageLookupByLibrary.simpleMessage("Vy"), + "yourMap": MessageLookupByLibrary.simpleMessage("Vaše mapa") }; } diff --git a/mobile/lib/generated/intl/messages_da.dart b/mobile/lib/generated/intl/messages_da.dart index 8eef3e4a80..da5f4ee32e 100644 --- a/mobile/lib/generated/intl/messages_da.dart +++ b/mobile/lib/generated/intl/messages_da.dart @@ -20,28 +20,33 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'da'; - static String m3(user) => + static String m8(count) => + "${Intl.plural(count, zero: 'Ingen Deltagere', one: '1 Deltager', other: '${count} Deltagere')}"; + + static String m13(user) => "${user} vil ikke kunne tilføje flere billeder til dette album\n\nDe vil stadig kunne fjerne eksisterende billeder tilføjet af dem"; - static String m4(storageAmountInGB) => + static String m24(supportEmail) => + "Send venligst en email til ${supportEmail} fra din registrerede email adresse"; + + static String m35(storageAmountInGB) => "${storageAmountInGB} GB hver gang nogen tilmelder sig et betalt abonnement og anvender din kode"; - static String m5(count, formattedCount) => - "${Intl.plural(count, zero: 'ingen minder', one: '${formattedCount} minde', other: '${formattedCount} minder')}"; + static String m45(expiryTime) => "Link udløber den ${expiryTime}"; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Kodeordets styrke: ${passwordStrengthValue}"; - static String m6(count) => "${count} valgt"; + static String m77(count) => "${count} valgt"; - static String m7(verificationID) => + static String m81(verificationID) => "Hey, kan du bekræfte, at dette er dit ente.io verifikation ID: ${verificationID}"; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m8(storageAmountInGB) => "De får også ${storageAmountInGB} GB"; + static String m96(storageAmountInGB) => "De får også ${storageAmountInGB} GB"; - static String m2(email) => + static String m110(email) => "Vi har sendt en email til ${email}"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -52,9 +57,14 @@ class MessageLookup extends MessageLookupByLibrary { "Jeg forstår at hvis jeg mister min adgangskode kan jeg miste mine data, da mine data er end-to-end krypteret."), "activeSessions": MessageLookupByLibrary.simpleMessage("Aktive sessioner"), + "addANewEmail": + MessageLookupByLibrary.simpleMessage("Tilføj en ny e-mail"), + "addCollaborator": + MessageLookupByLibrary.simpleMessage("Tilføj samarbejdspartner"), "addMore": MessageLookupByLibrary.simpleMessage("Tilføj flere"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage("Oplysninger om tilføjelser"), + "addViewer": MessageLookupByLibrary.simpleMessage("Tilføj seer"), "addedAs": MessageLookupByLibrary.simpleMessage("Tilføjet som"), "addingToFavorites": MessageLookupByLibrary.simpleMessage("Tilføjer til favoritter..."), @@ -65,6 +75,13 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("Efter 1 uge"), "after1Year": MessageLookupByLibrary.simpleMessage("Efter 1 år"), "albumOwner": MessageLookupByLibrary.simpleMessage("Ejer"), + "albumParticipantsCount": m8, + "albumUpdated": + MessageLookupByLibrary.simpleMessage("Album er opdateret"), + "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Tillad personer med linket også at tilføje billeder til det delte album."), + "allowAddingPhotos": + MessageLookupByLibrary.simpleMessage("Tillad tilføjelse af fotos"), "allowDownloads": MessageLookupByLibrary.simpleMessage("Tillad downloads"), "askDeleteReason": MessageLookupByLibrary.simpleMessage( @@ -78,25 +95,39 @@ class MessageLookup extends MessageLookupByLibrary { "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( "Kan kun fjerne filer ejet af dig"), "cancel": MessageLookupByLibrary.simpleMessage("Annuller"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage("Kan ikke slette delte filer"), "changeEmail": MessageLookupByLibrary.simpleMessage("Skift email adresse"), "changePasswordTitle": MessageLookupByLibrary.simpleMessage("Skift adgangskode"), + "changePermissions": + MessageLookupByLibrary.simpleMessage("Rediger rettigheder?"), "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( "Tjek venligst din indbakke (og spam) for at færdiggøre verificeringen"), "clearIndexes": MessageLookupByLibrary.simpleMessage("Ryd indekser"), + "codeCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Kode kopieret til udklipsholder"), + "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( + "Opret et link, så folk kan tilføje og se fotos i dit delte album uden at behøve en Ente-app eller konto. Fantastisk til at indsamle event fotos."), + "collaborativeLink": + MessageLookupByLibrary.simpleMessage("Kollaborativt link"), "collectPhotos": MessageLookupByLibrary.simpleMessage("Indsaml billeder"), + "confirm": MessageLookupByLibrary.simpleMessage("Bekræft"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage("Bekræft Sletning Af Konto"), "confirmPassword": MessageLookupByLibrary.simpleMessage("Bekræft adgangskode"), + "confirmRecoveryKey": + MessageLookupByLibrary.simpleMessage("Bekræft gendannelsesnøgle"), + "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Bekræft din gendannelsesnøgle"), "contactSupport": MessageLookupByLibrary.simpleMessage("Kontakt support"), "continueLabel": MessageLookupByLibrary.simpleMessage("Fortsæt"), + "copyLink": MessageLookupByLibrary.simpleMessage("Kopiér link"), "copypasteThisCodentoYourAuthenticatorApp": MessageLookupByLibrary.simpleMessage( "Kopiér denne kode\ntil din autentificeringsapp"), @@ -105,8 +136,11 @@ class MessageLookup extends MessageLookupByLibrary { "createAccount": MessageLookupByLibrary.simpleMessage("Opret konto"), "createNewAccount": MessageLookupByLibrary.simpleMessage("Opret en ny konto"), + "createPublicLink": + MessageLookupByLibrary.simpleMessage("Opret et offentligt link"), "creatingLink": MessageLookupByLibrary.simpleMessage("Opretter link..."), + "custom": MessageLookupByLibrary.simpleMessage("Tilpasset"), "decrypting": MessageLookupByLibrary.simpleMessage("Dekrypterer..."), "deleteAccount": MessageLookupByLibrary.simpleMessage("Slet konto"), "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( @@ -118,6 +152,8 @@ class MessageLookup extends MessageLookupByLibrary { "Send venligst en email til account-deletion@ente.io fra din registrerede email adresse."), "deleteReason1": MessageLookupByLibrary.simpleMessage( "Der mangler en vigtig funktion, som jeg har brug for"), + "deleteReason2": MessageLookupByLibrary.simpleMessage( + "App\'en eller en bestemt funktion virker ikke som den skal"), "deleteReason3": MessageLookupByLibrary.simpleMessage( "Jeg fandt en anden tjeneste, som jeg syntes bedre om"), "deleteReason4": @@ -142,6 +178,8 @@ class MessageLookup extends MessageLookupByLibrary { "discover_sunset": MessageLookupByLibrary.simpleMessage("Solnedgang"), "discover_wallpapers": MessageLookupByLibrary.simpleMessage("Baggrundsbilleder"), + "doThisLater": MessageLookupByLibrary.simpleMessage("Gør det senere"), + "dropSupportEmail": m24, "eligible": MessageLookupByLibrary.simpleMessage("kvalificeret"), "email": MessageLookupByLibrary.simpleMessage("Email"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage( @@ -151,6 +189,7 @@ class MessageLookup extends MessageLookupByLibrary { "encryption": MessageLookupByLibrary.simpleMessage("Kryptering"), "encryptionKeys": MessageLookupByLibrary.simpleMessage("Krypteringsnøgler"), + "enterCode": MessageLookupByLibrary.simpleMessage("Indtast kode"), "enterEmail": MessageLookupByLibrary.simpleMessage("Indtast email adresse"), "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( @@ -160,6 +199,9 @@ class MessageLookup extends MessageLookupByLibrary { "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( "Indtast en adgangskode vi kan bruge til at kryptere dine data"), "enterPin": MessageLookupByLibrary.simpleMessage("Indtast PIN"), + "enterThe6digitCodeFromnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Indtast den 6-cifrede kode fra din autentificeringsapp"), "enterValidEmail": MessageLookupByLibrary.simpleMessage( "Indtast venligst en gyldig email adresse."), "enterYourEmailAddress": @@ -177,7 +219,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Find folk hurtigt ved navn"), "forgotPassword": MessageLookupByLibrary.simpleMessage("Glemt adgangskode"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("Frigør enhedsplads"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( @@ -198,6 +240,7 @@ class MessageLookup extends MessageLookupByLibrary { "insecureDevice": MessageLookupByLibrary.simpleMessage("Usikker enhed"), "invalidEmailAddress": MessageLookupByLibrary.simpleMessage("Ugyldig email adresse"), + "invalidKey": MessageLookupByLibrary.simpleMessage("Ugyldig nøgle"), "invite": MessageLookupByLibrary.simpleMessage("Inviter"), "inviteYourFriends": MessageLookupByLibrary.simpleMessage("Inviter dine venner"), @@ -206,23 +249,34 @@ class MessageLookup extends MessageLookupByLibrary { "keepPhotos": MessageLookupByLibrary.simpleMessage("Behold billeder"), "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( "Hjælp os venligst med disse oplysninger"), + "linkDeviceLimit": + MessageLookupByLibrary.simpleMessage("Enheds grænse"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Aktiveret"), "linkExpired": MessageLookupByLibrary.simpleMessage("Udløbet"), + "linkExpiresOn": m45, + "linkExpiry": MessageLookupByLibrary.simpleMessage("Udløb af link"), + "linkHasExpired": + MessageLookupByLibrary.simpleMessage("Linket er udløbet"), "linkNeverExpires": MessageLookupByLibrary.simpleMessage("Aldrig"), "loadingModel": MessageLookupByLibrary.simpleMessage("Downloader modeller..."), "lockButtonLabel": MessageLookupByLibrary.simpleMessage("Lås"), "logInLabel": MessageLookupByLibrary.simpleMessage("Log ind"), "loggingOut": MessageLookupByLibrary.simpleMessage("Logger ud..."), + "loginTerms": MessageLookupByLibrary.simpleMessage( + "Ved at klikke på log ind accepterer jeg vilkårene for service og privatlivspolitik"), "longPressAnEmailToVerifyEndToEndEncryption": MessageLookupByLibrary.simpleMessage( "Langt tryk på en e-mail for at bekræfte slutningen af krypteringen."), + "lostDevice": + MessageLookupByLibrary.simpleMessage("Har du mistet enhed?"), "machineLearning": MessageLookupByLibrary.simpleMessage("Maskinlæring"), "magicSearch": MessageLookupByLibrary.simpleMessage("Magisk søgning"), "manage": MessageLookupByLibrary.simpleMessage("Administrér"), "manageDeviceStorageDesc": MessageLookupByLibrary.simpleMessage( "Gennemgå og ryd lokal cache-lagring."), - "memoryCount": m5, + "manageParticipants": + MessageLookupByLibrary.simpleMessage("Administrer"), "mlConsent": MessageLookupByLibrary.simpleMessage("Aktiver maskinlæring"), "mlConsentPrivacy": MessageLookupByLibrary.simpleMessage( @@ -231,20 +285,25 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Aktiver maskinlæring?"), "mlIndexingDescription": MessageLookupByLibrary.simpleMessage( "Bemærk venligst, at maskinindlæring vil resultere i en højere båndbredde og batteriforbrug, indtil alle elementer er indekseret. Overvej at bruge desktop app til hurtigere indeksering, vil alle resultater blive synkroniseret automatisk."), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Moderat"), "moments": MessageLookupByLibrary.simpleMessage("Øjeblikke"), "never": MessageLookupByLibrary.simpleMessage("Aldrig"), "newAlbum": MessageLookupByLibrary.simpleMessage("Nyt album"), "next": MessageLookupByLibrary.simpleMessage("Næste"), + "noDeviceLimit": MessageLookupByLibrary.simpleMessage("Ingen"), "noRecoveryKey": MessageLookupByLibrary.simpleMessage("Ingen gendannelsesnøgle?"), "ok": MessageLookupByLibrary.simpleMessage("Ok"), "oops": MessageLookupByLibrary.simpleMessage("Ups"), "oopsSomethingWentWrong": MessageLookupByLibrary.simpleMessage("Ups, noget gik galt"), + "orPickAnExistingOne": + MessageLookupByLibrary.simpleMessage("Eller vælg en eksisterende"), "password": MessageLookupByLibrary.simpleMessage("Adgangskode"), "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( "Adgangskoden er blevet ændret"), - "passwordStrength": m0, + "passwordLock": MessageLookupByLibrary.simpleMessage("Adgangskodelås"), + "passwordStrength": m55, "passwordWarning": MessageLookupByLibrary.simpleMessage( "Vi gemmer ikke denne adgangskode, så hvis du glemmer den kan vi ikke dekryptere dine data"), "pendingItems": @@ -254,12 +313,35 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportAndWeWillBeHappyToHelp": MessageLookupByLibrary.simpleMessage( "Kontakt support@ente.io og vi vil være glade for at hjælpe!"), + "pleaseTryAgain": + MessageLookupByLibrary.simpleMessage("Prøv venligst igen"), "pleaseWait": MessageLookupByLibrary.simpleMessage("Vent venligst..."), "privacyPolicyTitle": MessageLookupByLibrary.simpleMessage("Privatlivspolitik"), + "publicLinkEnabled": + MessageLookupByLibrary.simpleMessage("Offentligt link aktiveret"), + "recover": MessageLookupByLibrary.simpleMessage("Gendan"), + "recoverAccount": MessageLookupByLibrary.simpleMessage("Gendan konto"), "recoverButton": MessageLookupByLibrary.simpleMessage("Gendan"), + "recoveryKey": + MessageLookupByLibrary.simpleMessage("Gendannelse nøgle"), + "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Gendannelsesnøgle kopieret til udklipsholder"), + "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( + "Hvis du glemmer din adgangskode, den eneste måde, du kan gendanne dine data er med denne nøgle."), + "recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage( + "Vi gemmer ikke denne nøgle, gem venligst denne 24 ord nøgle på et sikkert sted."), + "recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage( + "Super! Din gendannelsesnøgle er gyldig. Tak fordi du verificerer.\n\nHusk at holde din gendannelsesnøgle sikker sikkerhedskopieret."), + "recoveryKeyVerified": + MessageLookupByLibrary.simpleMessage("Gendannelsesnøgle bekræftet"), + "recoverySuccessful": + MessageLookupByLibrary.simpleMessage("Gendannelse lykkedes!"), + "recreatePasswordTitle": + MessageLookupByLibrary.simpleMessage("Genskab adgangskode"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. De tilmelder sig en betalt plan"), + "remove": MessageLookupByLibrary.simpleMessage("Fjern"), "removeFromAlbum": MessageLookupByLibrary.simpleMessage("Fjern fra album"), "removeFromAlbumTitle": @@ -276,6 +358,11 @@ class MessageLookup extends MessageLookupByLibrary { "resetPasswordTitle": MessageLookupByLibrary.simpleMessage("Nulstil adgangskode"), "retry": MessageLookupByLibrary.simpleMessage("Prøv igen"), + "saveKey": MessageLookupByLibrary.simpleMessage("Gem nøgle"), + "saveYourRecoveryKeyIfYouHaventAlready": + MessageLookupByLibrary.simpleMessage( + "Gem din gendannelsesnøgle, hvis du ikke allerede har"), + "scanCode": MessageLookupByLibrary.simpleMessage("Skan kode"), "scanThisBarcodeWithnyourAuthenticatorApp": MessageLookupByLibrary.simpleMessage( "Skan denne QR-kode med godkendelses-appen"), @@ -288,12 +375,17 @@ class MessageLookup extends MessageLookupByLibrary { "selectedFoldersWillBeEncryptedAndBackedUp": MessageLookupByLibrary.simpleMessage( "Valgte mapper vil blive krypteret og sikkerhedskopieret"), - "selectedPhotos": m6, + "selectedPhotos": m77, "sendEmail": MessageLookupByLibrary.simpleMessage("Send email"), "sendLink": MessageLookupByLibrary.simpleMessage("Send link"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Angiv adgangskode"), - "shareTextConfirmOthersVerificationID": m7, + "setupComplete": + MessageLookupByLibrary.simpleMessage("Opsætning fuldført"), + "shareALink": MessageLookupByLibrary.simpleMessage("Del et link"), + "shareTextConfirmOthersVerificationID": m81, + "shareWithNonenteUsers": + MessageLookupByLibrary.simpleMessage("Del med ikke Ente brugere"), "showMemories": MessageLookupByLibrary.simpleMessage("Vis minder"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Jeg er enig i betingelser for brug og privatlivspolitik"), @@ -301,6 +393,7 @@ class MessageLookup extends MessageLookupByLibrary { "somethingWentWrongPleaseTryAgain": MessageLookupByLibrary.simpleMessage( "Noget gik galt, prøv venligst igen"), + "sorry": MessageLookupByLibrary.simpleMessage("Beklager"), "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( "Beklager, kunne ikke føje til favoritter!"), "sorryCouldNotRemoveFromFavorites": @@ -310,19 +403,27 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage( "Beklager, vi kunne ikke generere sikre krypteringsnøgler på denne enhed.\n\nForsøg venligst at oprette en konto fra en anden enhed."), "status": MessageLookupByLibrary.simpleMessage("Status"), - "storageInGB": m1, + "storageInGB": m90, "strongStrength": MessageLookupByLibrary.simpleMessage("Stærkt"), "subscribe": MessageLookupByLibrary.simpleMessage("Abonner"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Du skal have et aktivt betalt abonnement for at aktivere deling."), + "tapToCopy": + MessageLookupByLibrary.simpleMessage("tryk for at kopiere"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage("Tryk for at indtaste kode"), + "terminate": MessageLookupByLibrary.simpleMessage("Afbryd"), "terminateSession": MessageLookupByLibrary.simpleMessage("Afslut session?"), "termsOfServicesTitle": MessageLookupByLibrary.simpleMessage("Betingelser"), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, + "thisCanBeUsedToRecoverYourAccountIfYou": + MessageLookupByLibrary.simpleMessage( + "Dette kan bruges til at gendanne din konto, hvis du mister din anden faktor"), "thisDevice": MessageLookupByLibrary.simpleMessage("Denne enhed"), + "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( + "Dette er dit bekræftelses-ID"), "thisWillLogYouOutOfTheFollowingDevice": MessageLookupByLibrary.simpleMessage( "Dette vil logge dig ud af følgende enhed:"), @@ -330,20 +431,37 @@ class MessageLookup extends MessageLookupByLibrary { "Dette vil logge dig ud af denne enhed!"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( "For at nulstille din adgangskode, bekræft venligst din email adresse."), + "tryAgain": MessageLookupByLibrary.simpleMessage("Prøv igen"), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage("To-faktor-godkendelse"), + "twofactorSetup": + MessageLookupByLibrary.simpleMessage("To-faktor opsætning"), "unavailableReferralCode": MessageLookupByLibrary.simpleMessage( "Beklager, denne kode er ikke tilgængelig."), "unselectAll": MessageLookupByLibrary.simpleMessage("Fravælg alle"), "updatingFolderSelection": MessageLookupByLibrary.simpleMessage("Opdaterer mappevalg..."), + "useRecoveryKey": + MessageLookupByLibrary.simpleMessage("Brug gendannelsesnøgle"), "verify": MessageLookupByLibrary.simpleMessage("Bekræft"), + "verifyEmail": MessageLookupByLibrary.simpleMessage("Bekræft e-mail"), + "verifyPassword": + MessageLookupByLibrary.simpleMessage("Bekræft adgangskode"), + "verifyingRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Verificerer gendannelsesnøgle..."), "viewAddOnButton": MessageLookupByLibrary.simpleMessage("Vis tilføjelser"), + "viewRecoveryKey": + MessageLookupByLibrary.simpleMessage("Vis gendannelsesnøgle"), + "viewer": MessageLookupByLibrary.simpleMessage("Seer"), "waitingForWifi": MessageLookupByLibrary.simpleMessage("Venter på Wi-fi..."), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Svagt"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Velkommen tilbage!"), + "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( + "Ja, konverter til præsentation"), "yesRemove": MessageLookupByLibrary.simpleMessage("Ja, fjern"), "you": MessageLookupByLibrary.simpleMessage("Dig"), "yourAccountHasBeenDeleted": diff --git a/mobile/lib/generated/intl/messages_de.dart b/mobile/lib/generated/intl/messages_de.dart index 19f40e736f..458a6896e5 100644 --- a/mobile/lib/generated/intl/messages_de.dart +++ b/mobile/lib/generated/intl/messages_de.dart @@ -20,41 +20,43 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'de'; - static String m9(title) => "${title} (Ich)"; + static String m0(title) => "${title} (Ich)"; - static String m10(count) => - "${Intl.plural(count, one: 'Teilnehmer', other: 'Teilnehmer')} hinzufügen"; + static String m1(count) => + "${Intl.plural(count, zero: 'Bearbeiter hinzufügen', one: 'Bearbeiter hinzufügen', other: 'Bearbeiter hinzufügen')}"; - static String m11(count) => + static String m2(count) => "${Intl.plural(count, one: 'Element hinzufügen', other: 'Elemente hinzufügen')}"; - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "Dein ${storageAmount} Add-on ist gültig bis ${endDate}"; - static String m13(count) => - "${Intl.plural(count, one: 'Betrachter', other: 'Betrachter')} hinzufügen"; + static String m4(count) => + "${Intl.plural(count, zero: 'Betrachter hinzufügen', one: 'Betrachter hinzufügen', other: 'Betrachter hinzufügen')}"; - static String m14(emailOrName) => "Von ${emailOrName} hinzugefügt"; + static String m5(emailOrName) => "Von ${emailOrName} hinzugefügt"; - static String m15(albumName) => "Erfolgreich zu ${albumName} hinzugefügt"; + static String m6(albumName) => "Erfolgreich zu ${albumName} hinzugefügt"; - static String m16(name) => "${name} wertschätzen"; + static String m7(name) => "${name} wertschätzen"; - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'Keine Teilnehmer', one: '1 Teilnehmer', other: '${count} Teilnehmer')}"; - static String m18(versionValue) => "Version: ${versionValue}"; + static String m9(versionValue) => "Version: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} frei"; - static String m20(paymentProvider) => + static String m11(name) => "Schöne Ausblicke mit ${name}"; + + static String m12(paymentProvider) => "Bitte kündige dein aktuelles Abo über ${paymentProvider} zuerst"; - static String m3(user) => + static String m13(user) => "Der Nutzer \"${user}\" wird keine weiteren Fotos zum Album hinzufügen können.\n\nJedoch kann er weiterhin vorhandene Bilder, welche durch ihn hinzugefügt worden sind, wieder entfernen"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Deine Familiengruppe hat bereits ${storageAmountInGb} GB erhalten', @@ -62,217 +64,217 @@ class MessageLookup extends MessageLookupByLibrary { 'other': 'Du hast bereits ${storageAmountInGb} GB erhalten!', })}"; - static String m22(albumName) => + static String m15(albumName) => "Kollaborativer Link für ${albumName} erstellt"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: '0 Mitarbeiter hinzugefügt', one: '1 Mitarbeiter hinzugefügt', other: '${count} Mitarbeiter hinzugefügt')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "Du bist dabei, ${email} als vertrauenswürdigen Kontakt hinzuzufügen. Die Person wird in der Lage sein, dein Konto wiederherzustellen, wenn du für ${numOfDays} Tage abwesend bist."; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Bitte kontaktiere ${familyAdminEmail} um dein Abo zu verwalten"; - static String m26(provider) => + static String m19(provider) => "Bitte kontaktiere uns über support@ente.io, um dein ${provider} Abo zu verwalten."; - static String m27(endpoint) => "Verbunden mit ${endpoint}"; + static String m20(endpoint) => "Verbunden mit ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Lösche ${count} Element', other: 'Lösche ${count} Elemente')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Lösche ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Der öffentliche Link zum Zugriff auf \"${albumName}\" wird entfernt."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Bitte sende eine E-Mail an ${supportEmail} von deiner registrierten E-Mail-Adresse"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "Du hast ${Intl.plural(count, one: '${count} duplizierte Datei', other: '${count} dupliziere Dateien')} gelöscht und (${storageSaved}!) freigegeben"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} Dateien, ${formattedSize} jede"; - static String m34(newEmail) => "E-Mail-Adresse geändert zu ${newEmail}"; + static String m27(newEmail) => "E-Mail-Adresse geändert zu ${newEmail}"; - static String m35(email) => "${email} hat kein Ente-Konto."; + static String m28(email) => "${email} hat kein Ente-Konto."; - static String m36(email) => + static String m29(email) => "${email} hat kein Ente-Konto.\n\nSende eine Einladung, um Fotos zu teilen."; - static String m37(name) => "${name} umarmen"; + static String m30(name) => "${name} umarmen"; - static String m38(text) => "Zusätzliche Fotos für ${text} gefunden"; + static String m31(text) => "Zusätzliche Fotos für ${text} gefunden"; - static String m39(name) => "Feiern mit ${name}"; + static String m32(name) => "Feiern mit ${name}"; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "${Intl.plural(count, one: '1 Datei', other: '${formattedNumber} Dateien')} auf diesem Gerät wurde(n) sicher gespeichert"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "${Intl.plural(count, one: '1 Datei', other: '${formattedNumber} Dateien')} in diesem Album wurde(n) sicher gespeichert"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB jedes Mal, wenn sich jemand mit deinem Code für einen bezahlten Tarif anmeldet"; - static String m42(endDate) => "Kostenlose Demo verfügbar bis zum ${endDate}"; + static String m36(endDate) => "Kostenlose Demo verfügbar bis zum ${endDate}"; - static String m43(count) => - "Du kannst immernoch über Ente ${Intl.plural(count, one: 'darauf', other: 'auf sie')} zugreifen, solange du ein aktives Abo hast"; + static String m37(count) => + "Du hast ${Intl.plural(count, one: 'darauf', other: 'auf sie')} weiterhin Zugriff, solange du ein aktives Abo hast"; - static String m44(sizeInMBorGB) => "${sizeInMBorGB} freigeben"; + static String m38(sizeInMBorGB) => "${sizeInMBorGB} freigeben"; - static String m45(count, formattedSize) => + static String m39(count, formattedSize) => "${Intl.plural(count, one: 'Es kann vom Gerät gelöscht werden, um ${formattedSize} freizugeben', other: 'Sie können vom Gerät gelöscht werden, um ${formattedSize} freizugeben')}"; - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Verarbeite ${currentlyProcessing} / ${totalCount}"; - static String m47(name) => "Wandern mit ${name}"; + static String m41(name) => "Wandern mit ${name}"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} Objekt', other: '${count} Objekte')}"; - static String m49(name) => "Zuletzt mit ${name}"; + static String m43(name) => "Zuletzt mit ${name}"; - static String m50(email) => + static String m44(email) => "${email} hat dich eingeladen, ein vertrauenswürdiger Kontakt zu werden"; - static String m51(expiryTime) => "Link läuft am ${expiryTime} ab"; + static String m45(expiryTime) => "Link läuft am ${expiryTime} ab"; - static String m52(email) => "Person mit ${email} verknüpfen"; + static String m46(email) => "Person mit ${email} verknüpfen"; - static String m53(personName, email) => + static String m47(personName, email) => "Dies wird ${personName} mit ${email} verknüpfen"; - static String m5(count, formattedCount) => - "${Intl.plural(count, zero: 'keine Erinnerungsstücke', one: '${formattedCount} Erinnerung', other: '${formattedCount} Erinnerungsstücke')}"; + static String m48(count, formattedCount) => + "${Intl.plural(count, zero: 'keine Erinnerungen', one: '${formattedCount} Erinnerung', other: '${formattedCount} Erinnerungen')}"; - static String m54(count) => + static String m49(count) => "${Intl.plural(count, one: 'Element verschieben', other: 'Elemente verschieben')}"; - static String m55(albumName) => "Erfolgreich zu ${albumName} hinzugefügt"; + static String m50(albumName) => "Erfolgreich zu ${albumName} hinzugefügt"; - static String m56(personName) => "Keine Vorschläge für ${personName}"; + static String m51(personName) => "Keine Vorschläge für ${personName}"; - static String m57(name) => "Nicht ${name}?"; + static String m52(name) => "Nicht ${name}?"; - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Bitte wende Dich an ${familyAdminEmail}, um den Code zu ändern."; - static String m59(name) => "Party mit ${name}"; + static String m54(name) => "Party mit ${name}"; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Passwortstärke: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Bitte kontaktiere den Support von ${providerName}, falls etwas abgebucht wurde"; - static String m61(name, age) => "${name} ist ${age}!"; + static String m57(name, age) => "${name} ist ${age}!"; - static String m62(name, age) => "${name} wird bald ${age}"; + static String m58(name, age) => "${name} wird bald ${age}"; - static String m63(count) => + static String m59(count) => "${Intl.plural(count, zero: 'Keine Fotos', one: 'Ein Foto', other: '${count} Fotos')}"; - static String m64(count) => - "${Intl.plural(count, zero: '0 Fotos', one: '1 Foto', other: '${count} Fotos')}"; + static String m60(count) => + "${Intl.plural(count, zero: '0 Fotos', one: 'Ein Foto', other: '${count} Fotos')}"; - static String m65(endDate) => + static String m61(endDate) => "Kostenlose Testversion gültig bis ${endDate}.\nDu kannst anschließend ein bezahltes Paket auswählen."; - static String m66(toEmail) => "Bitte sende uns eine E-Mail an ${toEmail}"; + static String m62(toEmail) => "Bitte sende uns eine E-Mail an ${toEmail}"; - static String m67(toEmail) => "Bitte sende die Protokolle an ${toEmail}"; + static String m63(toEmail) => "Bitte sende die Protokolle an ${toEmail}"; - static String m68(name) => "Posieren mit ${name}"; + static String m64(name) => "Posieren mit ${name}"; - static String m69(folderName) => "Verarbeite ${folderName}..."; + static String m65(folderName) => "Verarbeite ${folderName}..."; - static String m70(storeName) => "Bewerte uns auf ${storeName}"; + static String m66(storeName) => "Bewerte uns auf ${storeName}"; - static String m71(name) => "Du wurdest an ${name} neu zugewiesen"; + static String m67(name) => "Du wurdest an ${name} neu zugewiesen"; - static String m72(days, email) => + static String m68(days, email) => "Du kannst nach ${days} Tagen auf das Konto zugreifen. Eine Benachrichtigung wird an ${email} versendet."; - static String m73(email) => + static String m69(email) => "Du kannst jetzt das Konto von ${email} wiederherstellen, indem du ein neues Passwort setzt."; - static String m74(email) => + static String m70(email) => "${email} versucht, dein Konto wiederherzustellen."; - static String m75(storageInGB) => + static String m71(storageInGB) => "3. Ihr beide erhaltet ${storageInGB} GB* kostenlos"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} wird aus diesem geteilten Album entfernt\n\nAlle von ihnen hinzugefügte Fotos werden ebenfalls aus dem Album entfernt"; - static String m77(endDate) => "Erneuert am ${endDate}"; + static String m73(endDate) => "Erneuert am ${endDate}"; - static String m78(name) => "Roadtrip mit ${name}"; + static String m74(name) => "Roadtrip mit ${name}"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: '${count} Ergebnis gefunden', other: '${count} Ergebnisse gefunden')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "Abschnittslänge stimmt nicht überein: ${snapshotLength} != ${searchLength}"; - static String m6(count) => "${count} ausgewählt"; + static String m77(count) => "${count} ausgewählt"; - static String m81(count, yourCount) => + static String m78(count, yourCount) => "${count} ausgewählt (${yourCount} von Ihnen)"; - static String m82(name) => "Selfies mit ${name}"; + static String m79(name) => "Selfies mit ${name}"; - static String m83(verificationID) => + static String m80(verificationID) => "Hier ist meine Verifizierungs-ID: ${verificationID} für ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "Hey, kannst du bestätigen, dass dies deine ente.io Verifizierungs-ID ist: ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Ente Weiterempfehlungs-Code: ${referralCode} \n\nEinlösen unter Einstellungen → Allgemein → Weiterempfehlungen, um ${referralStorageInGB} GB kostenlos zu erhalten, sobald Sie einen kostenpflichtigen Tarif abgeschlossen haben\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Teile mit bestimmten Personen', one: 'Teilen mit 1 Person', other: 'Teilen mit ${numberOfPeople} Personen')}"; - static String m86(emailIDs) => "Geteilt mit ${emailIDs}"; + static String m84(emailIDs) => "Geteilt mit ${emailIDs}"; - static String m87(fileType) => + static String m85(fileType) => "Dieses ${fileType} wird von deinem Gerät gelöscht."; - static String m88(fileType) => + static String m86(fileType) => "Diese Datei ist sowohl in Ente als auch auf deinem Gerät."; - static String m89(fileType) => "Diese Datei wird von Ente gelöscht."; + static String m87(fileType) => "Diese Datei wird von Ente gelöscht."; - static String m90(name) => "Sport mit ${name}"; + static String m88(name) => "Sport mit ${name}"; - static String m91(name) => "Spot auf ${name}"; + static String m89(name) => "Spot auf ${name}"; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} von ${totalAmount} ${totalStorageUnit} verwendet"; - static String m93(id) => + static String m92(id) => "Dein ${id} ist bereits mit einem anderen Ente-Konto verknüpft.\nWenn du deine ${id} mit diesem Konto verwenden möchtest, kontaktiere bitte unseren Support"; - static String m94(endDate) => "Dein Abo endet am ${endDate}"; + static String m93(endDate) => "Dein Abo endet am ${endDate}"; - static String m95(completed, total) => + static String m94(completed, total) => "${completed}/${total} Erinnerungsstücke gesichert"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Zum Hochladen tippen, Hochladen wird derzeit ignoriert, da ${ignoreReason}"; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "Diese erhalten auch ${storageAmountInGB} GB"; static String m97(email) => "Dies ist ${email}s Verifizierungs-ID"; @@ -305,17 +307,17 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "Verifiziere ${email}"; static String m109(count) => - "${Intl.plural(count, zero: '0 Betrachter hinzugefügt', one: '1 Betrachter hinzugefügt', other: '${count} Betrachter hinzugefügt')}"; + "${Intl.plural(count, zero: '0 Betrachter hinzugefügt', one: 'Einen Betrachter hinzugefügt', other: '${count} Betrachter hinzugefügt')}"; - static String m2(email) => + static String m110(email) => "Wir haben eine E-Mail an ${email} gesendet"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: 'vor einem Jahr', other: 'vor ${count} Jahren')}"; - static String m111(name) => "Du und ${name}"; + static String m112(name) => "Du und ${name}"; - static String m112(storageSaved) => + static String m113(storageSaved) => "Du hast ${storageSaved} erfolgreich freigegeben!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -329,7 +331,7 @@ class MessageLookup extends MessageLookupByLibrary { "account": MessageLookupByLibrary.simpleMessage("Konto"), "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage( "Das Konto ist bereits konfiguriert."), - "accountOwnerPersonAppbarTitle": m9, + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("Willkommen zurück!"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( @@ -343,11 +345,11 @@ class MessageLookup extends MessageLookupByLibrary { "Neue E-Mail-Adresse hinzufügen"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Bearbeiter hinzufügen"), - "addCollaborators": m10, + "addCollaborators": m1, "addFiles": MessageLookupByLibrary.simpleMessage("Dateien hinzufügen"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Vom Gerät hinzufügen"), - "addItem": m11, + "addItem": m2, "addLocation": MessageLookupByLibrary.simpleMessage("Ort hinzufügen"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Hinzufügen"), "addMore": MessageLookupByLibrary.simpleMessage("Mehr hinzufügen"), @@ -359,7 +361,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Neue Person hinzufügen"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage("Details der Add-ons"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Add-ons"), "addPhotos": MessageLookupByLibrary.simpleMessage("Fotos hinzufügen"), "addSelected": @@ -372,15 +374,15 @@ class MessageLookup extends MessageLookupByLibrary { "addTrustedContact": MessageLookupByLibrary.simpleMessage( "Vertrauenswürdigen Kontakt hinzufügen"), "addViewer": MessageLookupByLibrary.simpleMessage("Album teilen"), - "addViewers": m13, + "addViewers": m4, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage("Füge deine Foto jetzt hinzu"), "addedAs": MessageLookupByLibrary.simpleMessage("Hinzugefügt als"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage( "Wird zu Favoriten hinzugefügt..."), - "admiringThem": m16, + "admiringThem": m7, "advanced": MessageLookupByLibrary.simpleMessage("Erweitert"), "advancedSettings": MessageLookupByLibrary.simpleMessage("Erweitert"), "after1Day": MessageLookupByLibrary.simpleMessage("Nach einem Tag"), @@ -389,7 +391,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("Nach 1 Woche"), "after1Year": MessageLookupByLibrary.simpleMessage("Nach 1 Jahr"), "albumOwner": MessageLookupByLibrary.simpleMessage("Besitzer"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Albumtitel"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Album aktualisiert"), @@ -442,7 +444,7 @@ class MessageLookup extends MessageLookupByLibrary { "appLock": MessageLookupByLibrary.simpleMessage("App-Sperre"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Wähle zwischen dem Standard-Sperrbildschirm deines Gerätes und einem eigenen Sperrbildschirm mit PIN oder Passwort."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Anwenden"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Code nutzen"), @@ -526,9 +528,10 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "Automatisches Verbinden funktioniert nur mit Geräten, die Chromecast unterstützen."), "available": MessageLookupByLibrary.simpleMessage("Verfügbar"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("Gesicherte Ordner"), + "backgroundWithThem": m11, "backup": MessageLookupByLibrary.simpleMessage("Backup"), "backupFailed": MessageLookupByLibrary.simpleMessage("Sicherung fehlgeschlagen"), @@ -547,11 +550,23 @@ class MessageLookup extends MessageLookupByLibrary { "blackFridaySale": MessageLookupByLibrary.simpleMessage("Black-Friday-Aktion"), "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "cLBulkEdit": MessageLookupByLibrary.simpleMessage( + "Massenbearbeitung von Datumsangaben"), + "cLBulkEditDesc": MessageLookupByLibrary.simpleMessage( + "Du kannst jetzt mehrere Fotos auswählen, und das Datum/Uhrzeit für alle mit einer Aktion ändern. Das Verschieben von Daten wird auch unterstützt."), + "cLFamilyPlan": MessageLookupByLibrary.simpleMessage( + "Obergrenzen für den Familientarif"), + "cLFamilyPlanDesc": MessageLookupByLibrary.simpleMessage( + "Du kannst jetzt festlegen, wie viel Speicherplatz deine Familienmitglieder nutzen können."), "cLIcon": MessageLookupByLibrary.simpleMessage("Neues Icon"), "cLIconDesc": MessageLookupByLibrary.simpleMessage( "Endlich ein neues App-Icon, das unserer Meinung nach unser Werk am besten repräsentiert. Zudem ist es möglich, weiterhin das alte App-Icon zu verwenden."), "cLMemories": MessageLookupByLibrary.simpleMessage("Erinnerungen"), + "cLMemoriesDesc": MessageLookupByLibrary.simpleMessage( + "Entdecke Deine besonderen Momente neu – Spot auf Deine liebsten Personen, Deine Reisen und Urlaube, Deine besten Schnappschüsse und vieles mehr. Aktiviere das maschinelle Lernen, tagge Dich selbst und benenne Deine Freunde für die besten Ergebnisse."), "cLWidgets": MessageLookupByLibrary.simpleMessage("Widgets"), + "cLWidgetsDesc": MessageLookupByLibrary.simpleMessage( + "Homescreen-Widgets mit integrierten Erinnerungen sind nun verfügbar. Sie zeigen dir deine besonderen Momente an, ohne die App zu öffnen."), "cachedData": MessageLookupByLibrary.simpleMessage("Daten im Cache"), "calculating": MessageLookupByLibrary.simpleMessage("Wird berechnet..."), @@ -572,10 +587,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Wiederherstellung abbrechen"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "Bist du sicher, dass du die Wiederherstellung abbrechen möchtest?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Abonnement kündigen"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( "Konnte geteilte Dateien nicht löschen"), "castAlbum": MessageLookupByLibrary.simpleMessage("Album übertragen"), @@ -613,7 +628,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Freien Speicher einlösen"), "claimMore": MessageLookupByLibrary.simpleMessage("Mehr einlösen!"), "claimed": MessageLookupByLibrary.simpleMessage("Eingelöst"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("Unkategorisiert leeren"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -642,12 +657,12 @@ class MessageLookup extends MessageLookupByLibrary { "Erstelle einen Link, mit dem andere Fotos in dem geteilten Album sehen und selbst welche hinzufügen können - ohne dass sie die ein Ente-Konto oder die App benötigen. Ideal um gemeinsam Fotos von Events zu sammeln."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Gemeinschaftlicher Link"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Bearbeiter"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "Bearbeiter können Fotos & Videos zu dem geteilten Album hinzufügen."), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("Layout"), "collageSaved": MessageLookupByLibrary.simpleMessage( "Collage in Galerie gespeichert"), @@ -664,7 +679,7 @@ class MessageLookup extends MessageLookupByLibrary { "Bist du sicher, dass du die Zwei-Faktor-Authentifizierung (2FA) deaktivieren willst?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage("Kontolöschung bestätigen"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Ja, ich möchte dieses Konto und alle enthaltenen Daten über alle Apps hinweg endgültig löschen."), "confirmPassword": @@ -677,10 +692,10 @@ class MessageLookup extends MessageLookupByLibrary { "Bestätige deinen Wiederherstellungsschlüssel"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Mit Gerät verbinden"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("Support kontaktieren"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Kontakte"), "contents": MessageLookupByLibrary.simpleMessage("Inhalte"), "continueLabel": MessageLookupByLibrary.simpleMessage("Weiter"), @@ -723,12 +738,14 @@ class MessageLookup extends MessageLookupByLibrary { "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( "Kritisches Update ist verfügbar!"), "crop": MessageLookupByLibrary.simpleMessage("Zuschneiden"), + "curatedMemories": + MessageLookupByLibrary.simpleMessage("Ausgewählte Erinnerungen"), "currentUsageIs": MessageLookupByLibrary.simpleMessage("Aktuell genutzt werden "), "currentlyRunning": MessageLookupByLibrary.simpleMessage("läuft gerade"), "custom": MessageLookupByLibrary.simpleMessage("Benutzerdefiniert"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Dunkel"), "dayToday": MessageLookupByLibrary.simpleMessage("Heute"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Gestern"), @@ -766,11 +783,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Vom Gerät löschen"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Von Ente löschen"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Standort löschen"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Fotos löschen"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "Es fehlt eine zentrale Funktion, die ich benötige"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -808,7 +825,7 @@ class MessageLookup extends MessageLookupByLibrary { "Zuschauer können weiterhin Screenshots oder mit anderen externen Programmen Kopien der Bilder machen."), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Bitte beachten Sie:"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage( "Zweiten Faktor (2FA) deaktivieren"), "disablingTwofactorAuthentication": @@ -852,9 +869,9 @@ class MessageLookup extends MessageLookupByLibrary { "Herunterladen fehlgeschlagen"), "downloading": MessageLookupByLibrary.simpleMessage("Wird heruntergeladen..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Bearbeiten"), "editLocation": MessageLookupByLibrary.simpleMessage("Standort bearbeiten"), @@ -871,16 +888,16 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("E-Mail"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage( "E-Mail ist bereits registriert."), - "emailChangedTo": m34, - "emailDoesNotHaveEnteAccount": m35, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage("E-Mail nicht registriert."), "emailVerificationToggle": MessageLookupByLibrary.simpleMessage("E-Mail-Verifizierung"), "emailYourLogs": MessageLookupByLibrary.simpleMessage( "Protokolle per E-Mail senden"), - "embracingThem": m37, + "embracingThem": m30, "emergencyContacts": MessageLookupByLibrary.simpleMessage("Notfallkontakte"), "empty": MessageLookupByLibrary.simpleMessage("Leeren"), @@ -959,7 +976,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Daten exportieren"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage("Zusätzliche Fotos gefunden"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Gesicht ist noch nicht gruppiert, bitte komm später zurück"), "faceRecognition": @@ -997,7 +1014,7 @@ class MessageLookup extends MessageLookupByLibrary { "faq": MessageLookupByLibrary.simpleMessage("Häufig gestellte Fragen"), "faqs": MessageLookupByLibrary.simpleMessage("FAQs"), "favorite": MessageLookupByLibrary.simpleMessage("Favorit"), - "feastingWithThem": m39, + "feastingWithThem": m32, "feedback": MessageLookupByLibrary.simpleMessage("Rückmeldung"), "file": MessageLookupByLibrary.simpleMessage("Datei"), "fileFailedToSaveToGallery": MessageLookupByLibrary.simpleMessage( @@ -1011,8 +1028,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("Dateitypen"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("Dateitypen und -namen"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("Dateien gelöscht"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage( @@ -1031,28 +1048,28 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Gesichter gefunden"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage( "Kostenlos hinzugefügter Speicherplatz"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage( "Freier Speicherplatz nutzbar"), "freeTrial": MessageLookupByLibrary.simpleMessage("Kostenlose Testphase"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAccessPostDelete": m37, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("Gerätespeicher freiräumen"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Spare Speicherplatz auf deinem Gerät, indem du Dateien löschst, die bereits gesichert wurden."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Speicherplatz freigeben"), - "freeUpSpaceSaving": m45, + "freeUpSpaceSaving": m39, "gallery": MessageLookupByLibrary.simpleMessage("Galerie"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "Bis zu 1000 Erinnerungsstücke angezeigt in der Galerie"), "general": MessageLookupByLibrary.simpleMessage("Allgemein"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Generierung von Verschlüsselungscodes..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Zu den Einstellungen"), "googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"), @@ -1082,7 +1099,7 @@ class MessageLookup extends MessageLookupByLibrary { "hideSharedItemsFromHomeGallery": MessageLookupByLibrary.simpleMessage( "Geteilte Elemente in der Home-Galerie ausblenden"), "hiding": MessageLookupByLibrary.simpleMessage("Verstecken..."), - "hikingWithThem": m47, + "hikingWithThem": m41, "hostedAtOsmFrance": MessageLookupByLibrary.simpleMessage("Gehostet bei OSM France"), "howItWorks": @@ -1141,7 +1158,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Etwas ist schiefgelaufen. Bitte versuche es später noch einmal. Sollte der Fehler weiter bestehen, kontaktiere unser Supportteam."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Elemente zeigen die Anzahl der Tage bis zum dauerhaften Löschen an"), @@ -1162,7 +1179,7 @@ class MessageLookup extends MessageLookupByLibrary { "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage("Bitte gib diese Daten ein"), "language": MessageLookupByLibrary.simpleMessage("Sprache"), - "lastTimeWithThem": m49, + "lastTimeWithThem": m43, "lastUpdated": MessageLookupByLibrary.simpleMessage("Zuletzt aktualisiert"), "lastYearsTrip": @@ -1177,7 +1194,7 @@ class MessageLookup extends MessageLookupByLibrary { "legacy": MessageLookupByLibrary.simpleMessage("Digitales Erbe"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Digital geerbte Konten"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "Das digitale Erbe erlaubt vertrauenswürdigen Kontakten den Zugriff auf dein Konto in deiner Abwesenheit."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1194,7 +1211,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("für schnelleres Teilen"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Aktiviert"), "linkExpired": MessageLookupByLibrary.simpleMessage("Abgelaufen"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Ablaufdatum des Links"), "linkHasExpired": @@ -1203,8 +1220,8 @@ class MessageLookup extends MessageLookupByLibrary { "linkPerson": MessageLookupByLibrary.simpleMessage("Person verknüpfen"), "linkPersonCaption": MessageLookupByLibrary.simpleMessage( "um besseres Teilen zu ermöglichen"), - "linkPersonToEmail": m52, - "linkPersonToEmailConfirmation": m53, + "linkPersonToEmail": m46, + "linkPersonToEmailConfirmation": m47, "livePhotos": MessageLookupByLibrary.simpleMessage("Live-Fotos"), "loadMessage1": MessageLookupByLibrary.simpleMessage( "Du kannst dein Abonnement mit deiner Familie teilen"), @@ -1291,7 +1308,7 @@ class MessageLookup extends MessageLookupByLibrary { "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), "me": MessageLookupByLibrary.simpleMessage("Ich"), - "memoryCount": m5, + "memoryCount": m48, "merchandise": MessageLookupByLibrary.simpleMessage("Merchandise"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage( "Mit vorhandenem zusammenführen"), @@ -1323,14 +1340,14 @@ class MessageLookup extends MessageLookupByLibrary { "mostRecent": MessageLookupByLibrary.simpleMessage("Neuste"), "mostRelevant": MessageLookupByLibrary.simpleMessage("Nach Relevanz"), "mountains": MessageLookupByLibrary.simpleMessage("Über den Bergen"), - "moveItem": m54, + "moveItem": m49, "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage( "Ausgewählte Fotos auf ein Datum verschieben"), "moveToAlbum": MessageLookupByLibrary.simpleMessage("Zum Album verschieben"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage( "Zu verstecktem Album verschieben"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage( "In den Papierkorb verschoben"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( @@ -1384,10 +1401,10 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Keine Ergebnisse"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Keine Ergebnisse gefunden"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage("Keine Systemsperre gefunden"), - "notPersonLabel": m57, + "notPersonLabel": m52, "notThisPerson": MessageLookupByLibrary.simpleMessage("Nicht diese Person?"), "nothingSharedWithYouYet": @@ -1401,7 +1418,7 @@ class MessageLookup extends MessageLookupByLibrary { "onEnte": MessageLookupByLibrary.simpleMessage( "Auf ente"), "onTheRoad": MessageLookupByLibrary.simpleMessage("Wieder unterwegs"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Nur diese"), "oops": MessageLookupByLibrary.simpleMessage("Hoppla"), "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( @@ -1431,7 +1448,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Mit PIN verbinden"), "pairingComplete": MessageLookupByLibrary.simpleMessage("Verbunden"), "panorama": MessageLookupByLibrary.simpleMessage("Panorama"), - "partyWithThem": m59, + "partyWithThem": m54, "passKeyPendingVerification": MessageLookupByLibrary.simpleMessage( "Verifizierung steht noch aus"), "passkey": MessageLookupByLibrary.simpleMessage("Passkey"), @@ -1441,7 +1458,7 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( "Passwort erfolgreich geändert"), "passwordLock": MessageLookupByLibrary.simpleMessage("Passwort Sperre"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "Die Berechnung der Stärke des Passworts basiert auf dessen Länge, den verwendeten Zeichen, und ob es in den 10.000 am häufigsten verwendeten Passwörtern vorkommt"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1452,7 +1469,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Zahlung fehlgeschlagen"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Leider ist deine Zahlung fehlgeschlagen. Wende dich an unseren Support und wir helfen dir weiter!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Ausstehende Elemente"), "pendingSync": @@ -1466,21 +1483,21 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Dauerhaft löschen"), "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( "Endgültig vom Gerät löschen?"), - "personIsAge": m61, + "personIsAge": m57, "personName": MessageLookupByLibrary.simpleMessage("Name der Person"), - "personTurningAge": m62, + "personTurningAge": m58, "pets": MessageLookupByLibrary.simpleMessage("Pelzige Begleiter"), "photoDescriptions": MessageLookupByLibrary.simpleMessage("Foto Beschreibungen"), "photoGridSize": MessageLookupByLibrary.simpleMessage("Fotorastergröße"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("Foto"), - "photocountPhotos": m63, + "photocountPhotos": m59, "photos": MessageLookupByLibrary.simpleMessage("Fotos"), "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Von dir hinzugefügte Fotos werden vom Album entfernt"), - "photosCount": m64, + "photosCount": m60, "photosKeepRelativeTimeDifference": MessageLookupByLibrary.simpleMessage( "Fotos behalten relativen Zeitunterschied"), @@ -1492,7 +1509,7 @@ class MessageLookup extends MessageLookupByLibrary { "Album auf dem Fernseher wiedergeben"), "playOriginal": MessageLookupByLibrary.simpleMessage("Original abspielen"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playStream": MessageLookupByLibrary.simpleMessage("Stream abspielen"), "playstoreSubscription": MessageLookupByLibrary.simpleMessage("PlayStore Abo"), @@ -1505,14 +1522,14 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Bitte wenden Sie sich an den Support, falls das Problem weiterhin besteht"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( "Bitte erteile die nötigen Berechtigungen"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Bitte logge dich erneut ein"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Bitte wähle die zu entfernenden schnellen Links"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Bitte versuche es erneut"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1526,7 +1543,7 @@ class MessageLookup extends MessageLookupByLibrary { "Bitte warte kurz, bevor du es erneut versuchst"), "pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage( "Bitte warten, dies wird eine Weile dauern."), - "posingWithThem": m68, + "posingWithThem": m64, "preparingLogs": MessageLookupByLibrary.simpleMessage( "Protokolle werden vorbereitet..."), "preserveMore": @@ -1546,7 +1563,7 @@ class MessageLookup extends MessageLookupByLibrary { "proceed": MessageLookupByLibrary.simpleMessage("Fortfahren"), "processed": MessageLookupByLibrary.simpleMessage("Verarbeitet"), "processing": MessageLookupByLibrary.simpleMessage("In Bearbeitung"), - "processingImport": m69, + "processingImport": m65, "processingVideos": MessageLookupByLibrary.simpleMessage("Verarbeite Videos"), "publicLinkCreated": @@ -1559,10 +1576,10 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("Ticket erstellen"), "rateTheApp": MessageLookupByLibrary.simpleMessage("App bewerten"), "rateUs": MessageLookupByLibrary.simpleMessage("Bewerte uns"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "reassignMe": MessageLookupByLibrary.simpleMessage("\"Ich\" neu zuweisen"), - "reassignedToName": m71, + "reassignedToName": m67, "reassigningLoading": MessageLookupByLibrary.simpleMessage("Ordne neu zu..."), "recover": MessageLookupByLibrary.simpleMessage("Wiederherstellen"), @@ -1574,7 +1591,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Konto wiederherstellen"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("Wiederherstellung gestartet"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage( "Wiederherstellungs-Schlüssel"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( @@ -1589,12 +1606,12 @@ class MessageLookup extends MessageLookupByLibrary { "Wiederherstellungs-Schlüssel überprüft"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Dein Wiederherstellungsschlüssel ist die einzige Möglichkeit, auf deine Fotos zuzugreifen, solltest du dein Passwort vergessen. Du findest ihn unter Einstellungen > Konto.\n\nBitte gib deinen Wiederherstellungsschlüssel hier ein, um sicherzugehen, dass du ihn korrekt gesichert hast."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage( "Wiederherstellung erfolgreich!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "Ein vertrauenswürdiger Kontakt versucht, auf dein Konto zuzugreifen"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "Das aktuelle Gerät ist nicht leistungsfähig genug, um dein Passwort zu verifizieren, aber wir können es neu erstellen, damit es auf allen Geräten funktioniert.\n\nBitte melde dich mit deinem Wiederherstellungs-Schlüssel an und erstelle dein Passwort neu (Wenn du willst, kannst du dasselbe erneut verwenden)."), "recreatePasswordTitle": @@ -1610,7 +1627,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Gib diesen Code an deine Freunde"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Sie schließen ein bezahltes Abo ab"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Weiterempfehlungen"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Einlösungen sind derzeit pausiert"), @@ -1642,7 +1659,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Link entfernen"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Teilnehmer entfernen"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Personenetikett entfernen"), "removePublicLink": @@ -1662,7 +1679,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Datei umbenennen"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Abonnement erneuern"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Fehler melden"), "reportBug": MessageLookupByLibrary.simpleMessage("Fehler melden"), "resendEmail": @@ -1688,7 +1705,7 @@ class MessageLookup extends MessageLookupByLibrary { "reviewSuggestions": MessageLookupByLibrary.simpleMessage("Vorschläge überprüfen"), "right": MessageLookupByLibrary.simpleMessage("Rechts"), - "roadtripWithThem": m78, + "roadtripWithThem": m74, "rotate": MessageLookupByLibrary.simpleMessage("Drehen"), "rotateLeft": MessageLookupByLibrary.simpleMessage("Nach links drehen"), "rotateRight": @@ -1745,8 +1762,8 @@ class MessageLookup extends MessageLookupByLibrary { "Laden Sie Personen ein, damit Sie geteilte Fotos hier einsehen können"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "Personen werden hier angezeigt, sobald Verarbeitung und Synchronisierung abgeschlossen sind"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Sicherheit"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( "Öffentliche Album-Links in der App ansehen"), @@ -1795,9 +1812,9 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeRemovedFromThisPerson": MessageLookupByLibrary.simpleMessage( "Ausgewählte Elemente werden von dieser Person entfernt, aber nicht aus deiner Bibliothek gelöscht."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, - "selfiesWithThem": m82, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "selfiesWithThem": m79, "send": MessageLookupByLibrary.simpleMessage("Absenden"), "sendEmail": MessageLookupByLibrary.simpleMessage("E-Mail senden"), "sendInvite": MessageLookupByLibrary.simpleMessage("Einladung senden"), @@ -1827,16 +1844,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Teile jetzt ein Album"), "shareLink": MessageLookupByLibrary.simpleMessage("Link teilen"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Teile mit ausgewählten Personen"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Hol dir Ente, damit wir ganz einfach Fotos und Videos in Originalqualität teilen können\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Mit Nicht-Ente-Benutzern teilen"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("Teile dein erstes Album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1847,7 +1864,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Neue geteilte Fotos"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Erhalte Benachrichtigungen, wenn jemand ein Foto zu einem gemeinsam genutzten Album hinzufügt, dem du angehörst"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Mit mir geteilt"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("Mit dir geteilt"), @@ -1865,11 +1882,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Andere Geräte abmelden"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Ich stimme den Nutzungsbedingungen und der Datenschutzerklärung zu"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Es wird aus allen Alben gelöscht."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Überspringen"), "social": MessageLookupByLibrary.simpleMessage("Social Media"), "someItemsAreInBothEnteAndYourDevice": @@ -1887,6 +1904,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage( "Ein Fehler ist aufgetreten, bitte versuche es erneut"), "sorry": MessageLookupByLibrary.simpleMessage("Entschuldigung"), + "sorryBackupFailedDesc": MessageLookupByLibrary.simpleMessage( + "Leider konnten wir diese Datei momentan nicht sichern, wir werden es später erneut versuchen."), "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( "Konnte leider nicht zu den Favoriten hinzugefügt werden!"), "sorryCouldNotRemoveFromFavorites": @@ -1906,8 +1925,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Älteste zuerst"), "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Abgeschlossen"), - "sportsWithThem": m90, - "spotlightOnThem": m91, + "sportsWithThem": m88, + "spotlightOnThem": m89, "spotlightOnYourself": MessageLookupByLibrary.simpleMessage("Spot auf dich selbst"), "startAccountRecoveryTitle": @@ -1922,14 +1941,14 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Speicherplatz"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Familie"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Sie"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage( "Speichergrenze überschritten"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "streamDetails": MessageLookupByLibrary.simpleMessage("Stream-Details"), "strongStrength": MessageLookupByLibrary.simpleMessage("Stark"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Abonnieren"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Du benötigst ein aktives, bezahltes Abonnement, um das Teilen zu aktivieren."), @@ -1947,7 +1966,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Verbesserung vorschlagen"), "sunrise": MessageLookupByLibrary.simpleMessage("Am Horizont"), "support": MessageLookupByLibrary.simpleMessage("Support"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Synchronisierung angehalten"), "syncing": MessageLookupByLibrary.simpleMessage("Synchronisiere …"), @@ -1960,7 +1979,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Zum Entsperren antippen"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Zum Hochladen antippen"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Etwas ist schiefgelaufen. Bitte versuche es später noch einmal. Sollte der Fehler weiter bestehen, kontaktiere unser Supportteam."), "terminate": MessageLookupByLibrary.simpleMessage("Beenden"), @@ -1984,7 +2003,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Diese Elemente werden von deinem Gerät gelöscht."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Sie werden aus allen Alben gelöscht."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -2156,7 +2175,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Wir unterstützen keine Bearbeitung von Fotos und Alben, die du noch nicht besitzt"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Schwach"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Willkommen zurück!"), @@ -2165,7 +2184,7 @@ class MessageLookup extends MessageLookupByLibrary { "Ein vertrauenswürdiger Kontakt kann helfen, deine Daten wiederherzustellen."), "yearShort": MessageLookupByLibrary.simpleMessage("Jahr"), "yearly": MessageLookupByLibrary.simpleMessage("Jährlich"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Ja"), "yesCancel": MessageLookupByLibrary.simpleMessage("Ja, kündigen"), "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( @@ -2179,7 +2198,7 @@ class MessageLookup extends MessageLookupByLibrary { "yesResetPerson": MessageLookupByLibrary.simpleMessage("Ja, Person zurücksetzen"), "you": MessageLookupByLibrary.simpleMessage("Du"), - "youAndThem": m111, + "youAndThem": m112, "youAreOnAFamilyPlan": MessageLookupByLibrary.simpleMessage("Du bist im Familien-Tarif!"), "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage( @@ -2198,7 +2217,7 @@ class MessageLookup extends MessageLookupByLibrary { "Du kannst nicht mit dir selbst teilen"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "Du hast keine archivierten Elemente."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage( "Dein Benutzerkonto wurde gelöscht"), "yourMap": MessageLookupByLibrary.simpleMessage("Deine Karte"), diff --git a/mobile/lib/generated/intl/messages_en.dart b/mobile/lib/generated/intl/messages_en.dart index dad803e44a..2242437680 100644 --- a/mobile/lib/generated/intl/messages_en.dart +++ b/mobile/lib/generated/intl/messages_en.dart @@ -20,259 +20,259 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'en'; - static String m9(title) => "${title} (Me)"; + static String m0(title) => "${title} (Me)"; - static String m10(count) => + static String m1(count) => "${Intl.plural(count, zero: 'Add collaborator', one: 'Add collaborator', other: 'Add collaborators')}"; - static String m11(count) => + static String m2(count) => "${Intl.plural(count, one: 'Add item', other: 'Add items')}"; - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "Your ${storageAmount} add-on is valid till ${endDate}"; - static String m13(count) => + static String m4(count) => "${Intl.plural(count, zero: 'Add viewer', one: 'Add viewer', other: 'Add viewers')}"; - static String m14(emailOrName) => "Added by ${emailOrName}"; + static String m5(emailOrName) => "Added by ${emailOrName}"; - static String m15(albumName) => "Added successfully to ${albumName}"; + static String m6(albumName) => "Added successfully to ${albumName}"; - static String m16(name) => "Admiring ${name}"; + static String m7(name) => "Admiring ${name}"; - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'No Participants', one: '1 Participant', other: '${count} Participants')}"; - static String m18(versionValue) => "Version: ${versionValue}"; + static String m9(versionValue) => "Version: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} free"; - static String m113(name) => "Beautiful views with ${name}"; + static String m11(name) => "Beautiful views with ${name}"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "Please cancel your existing subscription from ${paymentProvider} first"; - static String m3(user) => + static String m13(user) => "${user} will not be able to add more photos to this album\n\nThey will still be able to remove existing photos added by them"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Your family has claimed ${storageAmountInGb} GB so far', 'false': 'You have claimed ${storageAmountInGb} GB so far', 'other': 'You have claimed ${storageAmountInGb} GB so far!', })}"; - static String m22(albumName) => "Collaborative link created for ${albumName}"; + static String m15(albumName) => "Collaborative link created for ${albumName}"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: 'Added 0 collaborator', one: 'Added 1 collaborator', other: 'Added ${count} collaborators')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "You are about to add ${email} as a trusted contact. They will be able to recover your account if you are absent for ${numOfDays} days."; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Please contact ${familyAdminEmail} to manage your subscription"; - static String m26(provider) => + static String m19(provider) => "Please contact us at support@ente.io to manage your ${provider} subscription."; - static String m27(endpoint) => "Connected to ${endpoint}"; + static String m20(endpoint) => "Connected to ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Delete ${count} item', other: 'Delete ${count} items')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Deleting ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "This will remove the public link for accessing \"${albumName}\"."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Please drop an email to ${supportEmail} from your registered email address"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "You have cleaned up ${Intl.plural(count, one: '${count} duplicate file', other: '${count} duplicate files')}, saving (${storageSaved}!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} files, ${formattedSize} each"; - static String m34(newEmail) => "Email changed to ${newEmail}"; + static String m27(newEmail) => "Email changed to ${newEmail}"; - static String m35(email) => "${email} does not have an Ente account."; + static String m28(email) => "${email} does not have an Ente account."; - static String m36(email) => + static String m29(email) => "${email} does not have an Ente account.\n\nSend them an invite to share photos."; - static String m37(name) => "Embracing ${name}"; + static String m30(name) => "Embracing ${name}"; - static String m38(text) => "Extra photos found for ${text}"; + static String m31(text) => "Extra photos found for ${text}"; - static String m39(name) => "Feasting with ${name}"; + static String m32(name) => "Feasting with ${name}"; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "${Intl.plural(count, one: '1 file', other: '${formattedNumber} files')} on this device have been backed up safely"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "${Intl.plural(count, one: '1 file', other: '${formattedNumber} files')} in this album has been backed up safely"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB each time someone signs up for a paid plan and applies your code"; - static String m42(endDate) => "Free trial valid till ${endDate}"; + static String m36(endDate) => "Free trial valid till ${endDate}"; - static String m43(count) => + static String m37(count) => "You can still access ${Intl.plural(count, one: 'it', other: 'them')} on Ente as long as you have an active subscription"; - static String m44(sizeInMBorGB) => "Free up ${sizeInMBorGB}"; + static String m38(sizeInMBorGB) => "Free up ${sizeInMBorGB}"; - static String m45(count, formattedSize) => + static String m39(count, formattedSize) => "${Intl.plural(count, one: 'It can be deleted from the device to free up ${formattedSize}', other: 'They can be deleted from the device to free up ${formattedSize}')}"; - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Processing ${currentlyProcessing} / ${totalCount}"; - static String m47(name) => "Hiking with ${name}"; + static String m41(name) => "Hiking with ${name}"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} item', other: '${count} items')}"; - static String m49(name) => "Last time with ${name}"; + static String m43(name) => "Last time with ${name}"; - static String m50(email) => + static String m44(email) => "${email} has invited you to be a trusted contact"; - static String m51(expiryTime) => "Link will expire on ${expiryTime}"; + static String m45(expiryTime) => "Link will expire on ${expiryTime}"; - static String m52(email) => "Link person to ${email}"; + static String m46(email) => "Link person to ${email}"; - static String m53(personName, email) => + static String m47(personName, email) => "This will link ${personName} to ${email}"; - static String m5(count, formattedCount) => + static String m48(count, formattedCount) => "${Intl.plural(count, zero: 'no memories', one: '${formattedCount} memory', other: '${formattedCount} memories')}"; - static String m54(count) => + static String m49(count) => "${Intl.plural(count, one: 'Move item', other: 'Move items')}"; - static String m55(albumName) => "Moved successfully to ${albumName}"; + static String m50(albumName) => "Moved successfully to ${albumName}"; - static String m56(personName) => "No suggestions for ${personName}"; + static String m51(personName) => "No suggestions for ${personName}"; - static String m57(name) => "Not ${name}?"; + static String m52(name) => "Not ${name}?"; - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Please contact ${familyAdminEmail} to change your code."; - static String m59(name) => "Party with ${name}"; + static String m54(name) => "Party with ${name}"; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Password strength: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Please talk to ${providerName} support if you were charged"; - static String m61(name, age) => "${name} is ${age}!"; + static String m57(name, age) => "${name} is ${age}!"; - static String m62(name, age) => "${name} turning ${age} soon"; + static String m58(name, age) => "${name} turning ${age} soon"; - static String m63(count) => + static String m59(count) => "${Intl.plural(count, zero: 'No photos', one: '1 photo', other: '${count} photos')}"; - static String m64(count) => - "${Intl.plural(count, zero: '0 photo', one: '1 photo', other: '${count} photos')}"; + static String m60(count) => + "${Intl.plural(count, zero: '0 photos', one: '1 photo', other: '${count} photos')}"; - static String m65(endDate) => + static String m61(endDate) => "Free trial valid till ${endDate}.\nYou can choose a paid plan afterwards."; - static String m66(toEmail) => "Please email us at ${toEmail}"; + static String m62(toEmail) => "Please email us at ${toEmail}"; - static String m67(toEmail) => "Please send the logs to \n${toEmail}"; + static String m63(toEmail) => "Please send the logs to \n${toEmail}"; - static String m68(name) => "Posing with ${name}"; + static String m64(name) => "Posing with ${name}"; - static String m69(folderName) => "Processing ${folderName}..."; + static String m65(folderName) => "Processing ${folderName}..."; - static String m70(storeName) => "Rate us on ${storeName}"; + static String m66(storeName) => "Rate us on ${storeName}"; - static String m71(name) => "Reassigned you to ${name}"; + static String m67(name) => "Reassigned you to ${name}"; - static String m72(days, email) => + static String m68(days, email) => "You can access the account after ${days} days. A notification will be sent to ${email}."; - static String m73(email) => + static String m69(email) => "You can now recover ${email}\'s account by setting a new password."; - static String m74(email) => "${email} is trying to recover your account."; + static String m70(email) => "${email} is trying to recover your account."; - static String m75(storageInGB) => + static String m71(storageInGB) => "3. Both of you get ${storageInGB} GB* free"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} will be removed from this shared album\n\nAny photos added by them will also be removed from the album"; - static String m77(endDate) => "Subscription renews on ${endDate}"; + static String m73(endDate) => "Subscription renews on ${endDate}"; - static String m78(name) => "Road trip with ${name}"; + static String m74(name) => "Road trip with ${name}"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: '${count} result found', other: '${count} results found')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "Sections length mismatch: ${snapshotLength} != ${searchLength}"; - static String m6(count) => "${count} selected"; + static String m77(count) => "${count} selected"; - static String m81(count, yourCount) => + static String m78(count, yourCount) => "${count} selected (${yourCount} yours)"; - static String m82(name) => "Selfies with ${name}"; + static String m79(name) => "Selfies with ${name}"; - static String m83(verificationID) => + static String m80(verificationID) => "Here\'s my verification ID: ${verificationID} for ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "Hey, can you confirm that this is your ente.io verification ID: ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Ente referral code: ${referralCode} \n\nApply it in Settings → General → Referrals to get ${referralStorageInGB} GB free after you signup for a paid plan\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Share with specific people', one: 'Shared with 1 person', other: 'Shared with ${numberOfPeople} people')}"; - static String m86(emailIDs) => "Shared with ${emailIDs}"; + static String m84(emailIDs) => "Shared with ${emailIDs}"; - static String m87(fileType) => + static String m85(fileType) => "This ${fileType} will be deleted from your device."; - static String m88(fileType) => + static String m86(fileType) => "This ${fileType} is in both Ente and your device."; - static String m89(fileType) => "This ${fileType} will be deleted from Ente."; + static String m87(fileType) => "This ${fileType} will be deleted from Ente."; - static String m90(name) => "Sports with ${name}"; + static String m88(name) => "Sports with ${name}"; - static String m91(name) => "Spotlight on ${name}"; + static String m89(name) => "Spotlight on ${name}"; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} of ${totalAmount} ${totalStorageUnit} used"; - static String m93(id) => + static String m92(id) => "Your ${id} is already linked to another Ente account.\nIf you would like to use your ${id} with this account, please contact our support\'\'"; - static String m94(endDate) => + static String m93(endDate) => "Your subscription will be cancelled on ${endDate}"; - static String m95(completed, total) => + static String m94(completed, total) => "${completed}/${total} memories preserved"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Tap to upload, upload is currently ignored due to ${ignoreReason}"; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "They also get ${storageAmountInGB} GB"; static String m97(email) => "This is ${email}\'s Verification ID"; @@ -305,16 +305,16 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "Verify ${email}"; static String m109(count) => - "${Intl.plural(count, zero: 'Added 0 viewer', one: 'Added 1 viewer', other: 'Added ${count} viewers')}"; + "${Intl.plural(count, zero: 'Added 0 viewers', one: 'Added 1 viewer', other: 'Added ${count} viewers')}"; - static String m2(email) => "We have sent a mail to ${email}"; + static String m110(email) => "We have sent a mail to ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: '${count} year ago', other: '${count} years ago')}"; - static String m111(name) => "You and ${name}"; + static String m112(name) => "You and ${name}"; - static String m112(storageSaved) => + static String m113(storageSaved) => "You have successfully freed up ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -327,7 +327,7 @@ class MessageLookup extends MessageLookupByLibrary { "account": MessageLookupByLibrary.simpleMessage("Account"), "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage( "Account is already configured."), - "accountOwnerPersonAppbarTitle": m9, + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("Welcome back!"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( @@ -339,11 +339,11 @@ class MessageLookup extends MessageLookupByLibrary { "addANewEmail": MessageLookupByLibrary.simpleMessage("Add a new email"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Add collaborator"), - "addCollaborators": m10, + "addCollaborators": m1, "addFiles": MessageLookupByLibrary.simpleMessage("Add Files"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Add from device"), - "addItem": m11, + "addItem": m2, "addLocation": MessageLookupByLibrary.simpleMessage("Add location"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Add"), "addMore": MessageLookupByLibrary.simpleMessage("Add more"), @@ -354,7 +354,7 @@ class MessageLookup extends MessageLookupByLibrary { "addNewPerson": MessageLookupByLibrary.simpleMessage("Add new person"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage("Details of add-ons"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Add-ons"), "addPhotos": MessageLookupByLibrary.simpleMessage("Add photos"), "addSelected": MessageLookupByLibrary.simpleMessage("Add selected"), @@ -365,15 +365,15 @@ class MessageLookup extends MessageLookupByLibrary { "addTrustedContact": MessageLookupByLibrary.simpleMessage("Add Trusted Contact"), "addViewer": MessageLookupByLibrary.simpleMessage("Add viewer"), - "addViewers": m13, + "addViewers": m4, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage("Add your photos now"), "addedAs": MessageLookupByLibrary.simpleMessage("Added as"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("Adding to favorites..."), - "admiringThem": m16, + "admiringThem": m7, "advanced": MessageLookupByLibrary.simpleMessage("Advanced"), "advancedSettings": MessageLookupByLibrary.simpleMessage("Advanced"), "after1Day": MessageLookupByLibrary.simpleMessage("After 1 day"), @@ -382,7 +382,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("After 1 week"), "after1Year": MessageLookupByLibrary.simpleMessage("After 1 year"), "albumOwner": MessageLookupByLibrary.simpleMessage("Owner"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Album title"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Album updated"), "albums": MessageLookupByLibrary.simpleMessage("Albums"), @@ -431,7 +431,7 @@ class MessageLookup extends MessageLookupByLibrary { "appLock": MessageLookupByLibrary.simpleMessage("App lock"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Choose between your device\'s default lock screen and a custom lock screen with a PIN or password."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Apply"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Apply code"), @@ -513,10 +513,10 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "Auto pair works only with devices that support Chromecast."), "available": MessageLookupByLibrary.simpleMessage("Available"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("Backed up folders"), - "backgroundWithThem": m113, + "backgroundWithThem": m11, "backup": MessageLookupByLibrary.simpleMessage("Backup"), "backupFailed": MessageLookupByLibrary.simpleMessage("Backup failed"), "backupFile": MessageLookupByLibrary.simpleMessage("Backup file"), @@ -568,10 +568,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Cancel recovery"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "Are you sure you want to cancel recovery?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Cancel subscription"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage("Cannot delete shared files"), "castAlbum": MessageLookupByLibrary.simpleMessage("Cast album"), @@ -607,7 +607,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Claim free storage"), "claimMore": MessageLookupByLibrary.simpleMessage("Claim more!"), "claimed": MessageLookupByLibrary.simpleMessage("Claimed"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("Clean Uncategorized"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -636,12 +636,12 @@ class MessageLookup extends MessageLookupByLibrary { "Create a link to allow people to add and view photos in your shared album without needing an Ente app or account. Great for collecting event photos."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Collaborative link"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Collaborator"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "Collaborators can add photos and videos to the shared album."), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("Layout"), "collageSaved": MessageLookupByLibrary.simpleMessage("Collage saved to gallery"), @@ -658,7 +658,7 @@ class MessageLookup extends MessageLookupByLibrary { "Are you sure you want to disable two-factor authentication?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage("Confirm Account Deletion"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Yes, I want to permanently delete this account and its data across all apps."), "confirmPassword": @@ -671,10 +671,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Confirm your recovery key"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Connect to device"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("Contact support"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Contacts"), "contents": MessageLookupByLibrary.simpleMessage("Contents"), "continueLabel": MessageLookupByLibrary.simpleMessage("Continue"), @@ -715,12 +715,14 @@ class MessageLookup extends MessageLookupByLibrary { "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage("Critical update available"), "crop": MessageLookupByLibrary.simpleMessage("Crop"), + "curatedMemories": + MessageLookupByLibrary.simpleMessage("Curated memories"), "currentUsageIs": MessageLookupByLibrary.simpleMessage("Current usage is "), "currentlyRunning": MessageLookupByLibrary.simpleMessage("currently running"), "custom": MessageLookupByLibrary.simpleMessage("Custom"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Dark"), "dayToday": MessageLookupByLibrary.simpleMessage("Today"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Yesterday"), @@ -757,11 +759,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Delete from device"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Delete from Ente"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Delete location"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Delete photos"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "It’s missing a key feature that I need"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -800,7 +802,7 @@ class MessageLookup extends MessageLookupByLibrary { "Viewers can still take screenshots or save a copy of your photos using external tools"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Please note"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage("Disable two-factor"), "disablingTwofactorAuthentication": @@ -842,9 +844,9 @@ class MessageLookup extends MessageLookupByLibrary { "downloadFailed": MessageLookupByLibrary.simpleMessage("Download failed"), "downloading": MessageLookupByLibrary.simpleMessage("Downloading..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Edit"), "editLocation": MessageLookupByLibrary.simpleMessage("Edit location"), "editLocationTagTitle": @@ -859,16 +861,16 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("Email"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage("Email already registered."), - "emailChangedTo": m34, - "emailDoesNotHaveEnteAccount": m35, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage("Email not registered."), "emailVerificationToggle": MessageLookupByLibrary.simpleMessage("Email verification"), "emailYourLogs": MessageLookupByLibrary.simpleMessage("Email your logs"), - "embracingThem": m37, + "embracingThem": m30, "emergencyContacts": MessageLookupByLibrary.simpleMessage("Emergency Contacts"), "empty": MessageLookupByLibrary.simpleMessage("Empty"), @@ -943,7 +945,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Export your data"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage("Extra photos found"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Face not clustered yet, please come back later"), "faceRecognition": @@ -980,7 +982,7 @@ class MessageLookup extends MessageLookupByLibrary { "faq": MessageLookupByLibrary.simpleMessage("FAQ"), "faqs": MessageLookupByLibrary.simpleMessage("FAQs"), "favorite": MessageLookupByLibrary.simpleMessage("Favorite"), - "feastingWithThem": m39, + "feastingWithThem": m32, "feedback": MessageLookupByLibrary.simpleMessage("Feedback"), "file": MessageLookupByLibrary.simpleMessage("File"), "fileFailedToSaveToGallery": MessageLookupByLibrary.simpleMessage( @@ -994,8 +996,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("File types"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("File types and names"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("Files deleted"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage("Files saved to gallery"), @@ -1012,26 +1014,26 @@ class MessageLookup extends MessageLookupByLibrary { "foundFaces": MessageLookupByLibrary.simpleMessage("Found faces"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("Free storage claimed"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage("Free storage usable"), "freeTrial": MessageLookupByLibrary.simpleMessage("Free trial"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAccessPostDelete": m37, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("Free up device space"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Save space on your device by clearing files that have been already backed up."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Free up space"), - "freeUpSpaceSaving": m45, + "freeUpSpaceSaving": m39, "gallery": MessageLookupByLibrary.simpleMessage("Gallery"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "Up to 1000 memories shown in gallery"), "general": MessageLookupByLibrary.simpleMessage("General"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Generating encryption keys..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Go to settings"), "googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"), "grantFullAccessPrompt": MessageLookupByLibrary.simpleMessage( @@ -1059,7 +1061,7 @@ class MessageLookup extends MessageLookupByLibrary { "hideSharedItemsFromHomeGallery": MessageLookupByLibrary.simpleMessage( "Hide shared items from home gallery"), "hiding": MessageLookupByLibrary.simpleMessage("Hiding..."), - "hikingWithThem": m47, + "hikingWithThem": m41, "hostedAtOsmFrance": MessageLookupByLibrary.simpleMessage("Hosted at OSM France"), "howItWorks": MessageLookupByLibrary.simpleMessage("How it works"), @@ -1114,7 +1116,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "It looks like something went wrong. Please retry after some time. If the error persists, please contact our support team."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Items show the number of days remaining before permanent deletion"), @@ -1134,7 +1136,7 @@ class MessageLookup extends MessageLookupByLibrary { "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( "Kindly help us with this information"), "language": MessageLookupByLibrary.simpleMessage("Language"), - "lastTimeWithThem": m49, + "lastTimeWithThem": m43, "lastUpdated": MessageLookupByLibrary.simpleMessage("Last updated"), "lastYearsTrip": MessageLookupByLibrary.simpleMessage("Last year\'s trip"), @@ -1147,7 +1149,7 @@ class MessageLookup extends MessageLookupByLibrary { "legacy": MessageLookupByLibrary.simpleMessage("Legacy"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Legacy accounts"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "Legacy allows trusted contacts to access your account in your absence."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1163,7 +1165,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("for faster sharing"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Enabled"), "linkExpired": MessageLookupByLibrary.simpleMessage("Expired"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Link expiry"), "linkHasExpired": MessageLookupByLibrary.simpleMessage("Link has expired"), @@ -1171,8 +1173,8 @@ class MessageLookup extends MessageLookupByLibrary { "linkPerson": MessageLookupByLibrary.simpleMessage("Link person"), "linkPersonCaption": MessageLookupByLibrary.simpleMessage( "for better sharing experience"), - "linkPersonToEmail": m52, - "linkPersonToEmailConfirmation": m53, + "linkPersonToEmail": m46, + "linkPersonToEmailConfirmation": m47, "livePhotos": MessageLookupByLibrary.simpleMessage("Live Photos"), "loadMessage1": MessageLookupByLibrary.simpleMessage( "You can share your subscription with your family"), @@ -1257,7 +1259,7 @@ class MessageLookup extends MessageLookupByLibrary { "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), "me": MessageLookupByLibrary.simpleMessage("Me"), - "memoryCount": m5, + "memoryCount": m48, "merchandise": MessageLookupByLibrary.simpleMessage("Merchandise"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Merge with existing"), @@ -1288,13 +1290,13 @@ class MessageLookup extends MessageLookupByLibrary { "mostRecent": MessageLookupByLibrary.simpleMessage("Most recent"), "mostRelevant": MessageLookupByLibrary.simpleMessage("Most relevant"), "mountains": MessageLookupByLibrary.simpleMessage("Over the hills"), - "moveItem": m54, + "moveItem": m49, "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage( "Move selected photos to one date"), "moveToAlbum": MessageLookupByLibrary.simpleMessage("Move to album"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Move to hidden album"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("Moved to trash"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage("Moving files to album..."), @@ -1345,10 +1347,10 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("No results"), "noResultsFound": MessageLookupByLibrary.simpleMessage("No results found"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage("No system lock found"), - "notPersonLabel": m57, + "notPersonLabel": m52, "notThisPerson": MessageLookupByLibrary.simpleMessage("Not this person?"), "nothingSharedWithYouYet": @@ -1361,7 +1363,7 @@ class MessageLookup extends MessageLookupByLibrary { "onEnte": MessageLookupByLibrary.simpleMessage( "On ente"), "onTheRoad": MessageLookupByLibrary.simpleMessage("On the road again"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Only them"), "oops": MessageLookupByLibrary.simpleMessage("Oops"), "oopsCouldNotSaveEdits": @@ -1390,7 +1392,7 @@ class MessageLookup extends MessageLookupByLibrary { "pairingComplete": MessageLookupByLibrary.simpleMessage("Pairing complete"), "panorama": MessageLookupByLibrary.simpleMessage("Panorama"), - "partyWithThem": m59, + "partyWithThem": m54, "passKeyPendingVerification": MessageLookupByLibrary.simpleMessage( "Verification is still pending"), "passkey": MessageLookupByLibrary.simpleMessage("Passkey"), @@ -1400,7 +1402,7 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( "Password changed successfully"), "passwordLock": MessageLookupByLibrary.simpleMessage("Password lock"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "Password strength is calculated considering the length of the password, used characters, and whether or not the password appears in the top 10,000 most used passwords"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1410,7 +1412,7 @@ class MessageLookup extends MessageLookupByLibrary { "paymentFailed": MessageLookupByLibrary.simpleMessage("Payment failed"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Unfortunately your payment failed. Please contact support and we\'ll help you out!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Pending items"), "pendingSync": MessageLookupByLibrary.simpleMessage("Pending sync"), "people": MessageLookupByLibrary.simpleMessage("People"), @@ -1422,21 +1424,21 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Permanently delete"), "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( "Permanently delete from device?"), - "personIsAge": m61, + "personIsAge": m57, "personName": MessageLookupByLibrary.simpleMessage("Person name"), - "personTurningAge": m62, + "personTurningAge": m58, "pets": MessageLookupByLibrary.simpleMessage("Furry companions"), "photoDescriptions": MessageLookupByLibrary.simpleMessage("Photo descriptions"), "photoGridSize": MessageLookupByLibrary.simpleMessage("Photo grid size"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("photo"), - "photocountPhotos": m63, + "photocountPhotos": m59, "photos": MessageLookupByLibrary.simpleMessage("Photos"), "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Photos added by you will be removed from the album"), - "photosCount": m64, + "photosCount": m60, "photosKeepRelativeTimeDifference": MessageLookupByLibrary.simpleMessage( "Photos keep relative time difference"), @@ -1446,7 +1448,7 @@ class MessageLookup extends MessageLookupByLibrary { "pinLock": MessageLookupByLibrary.simpleMessage("PIN lock"), "playOnTv": MessageLookupByLibrary.simpleMessage("Play album on TV"), "playOriginal": MessageLookupByLibrary.simpleMessage("Play original"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playStream": MessageLookupByLibrary.simpleMessage("Play stream"), "playstoreSubscription": MessageLookupByLibrary.simpleMessage("PlayStore subscription"), @@ -1459,14 +1461,14 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Please contact support if the problem persists"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("Please grant permissions"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Please login again"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Please select quick links to remove"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Please try again"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1480,7 +1482,7 @@ class MessageLookup extends MessageLookupByLibrary { "Please wait for sometime before retrying"), "pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage( "Please wait, this will take a while."), - "posingWithThem": m68, + "posingWithThem": m64, "preparingLogs": MessageLookupByLibrary.simpleMessage("Preparing logs..."), "preserveMore": MessageLookupByLibrary.simpleMessage("Preserve more"), @@ -1499,7 +1501,7 @@ class MessageLookup extends MessageLookupByLibrary { "proceed": MessageLookupByLibrary.simpleMessage("Proceed"), "processed": MessageLookupByLibrary.simpleMessage("Processed"), "processing": MessageLookupByLibrary.simpleMessage("Processing"), - "processingImport": m69, + "processingImport": m65, "processingVideos": MessageLookupByLibrary.simpleMessage("Processing videos"), "publicLinkCreated": @@ -1512,9 +1514,9 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("Raise ticket"), "rateTheApp": MessageLookupByLibrary.simpleMessage("Rate the app"), "rateUs": MessageLookupByLibrary.simpleMessage("Rate us"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "reassignMe": MessageLookupByLibrary.simpleMessage("Reassign \"Me\""), - "reassignedToName": m71, + "reassignedToName": m67, "reassigningLoading": MessageLookupByLibrary.simpleMessage("Reassigning..."), "recover": MessageLookupByLibrary.simpleMessage("Recover"), @@ -1525,7 +1527,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Recover account"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("Recovery initiated"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Recovery key"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( "Recovery key copied to clipboard"), @@ -1539,12 +1541,12 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Recovery key verified"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Your recovery key is the only way to recover your photos if you forget your password. You can find your recovery key in Settings > Account.\n\nPlease enter your recovery key here to verify that you have saved it correctly."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("Recovery successful!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "A trusted contact is trying to access your account"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "The current device is not powerful enough to verify your password, but we can regenerate in a way that works with all devices.\n\nPlease login using your recovery key and regenerate your password (you can use the same one again if you wish)."), "recreatePasswordTitle": @@ -1559,7 +1561,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Give this code to your friends"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. They sign up for a paid plan"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Referrals"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Referrals are currently paused"), @@ -1588,7 +1590,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Remove link"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Remove participant"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Remove person label"), "removePublicLink": @@ -1608,7 +1610,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Rename file"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Renew subscription"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Report a bug"), "reportBug": MessageLookupByLibrary.simpleMessage("Report bug"), "resendEmail": MessageLookupByLibrary.simpleMessage("Resend email"), @@ -1633,7 +1635,7 @@ class MessageLookup extends MessageLookupByLibrary { "reviewSuggestions": MessageLookupByLibrary.simpleMessage("Review suggestions"), "right": MessageLookupByLibrary.simpleMessage("Right"), - "roadtripWithThem": m78, + "roadtripWithThem": m74, "rotate": MessageLookupByLibrary.simpleMessage("Rotate"), "rotateLeft": MessageLookupByLibrary.simpleMessage("Rotate left"), "rotateRight": MessageLookupByLibrary.simpleMessage("Rotate right"), @@ -1687,8 +1689,8 @@ class MessageLookup extends MessageLookupByLibrary { "Invite people, and you\'ll see all photos shared by them here"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "People will be shown here once processing and syncing is complete"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Security"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( "See public album links in app"), @@ -1737,9 +1739,9 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeRemovedFromThisPerson": MessageLookupByLibrary.simpleMessage( "Selected items will be removed from this person, but not deleted from your library."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, - "selfiesWithThem": m82, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "selfiesWithThem": m79, "send": MessageLookupByLibrary.simpleMessage("Send"), "sendEmail": MessageLookupByLibrary.simpleMessage("Send email"), "sendInvite": MessageLookupByLibrary.simpleMessage("Send invite"), @@ -1768,16 +1770,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Share an album now"), "shareLink": MessageLookupByLibrary.simpleMessage("Share link"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Share only with the people you want"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Download Ente so we can easily share original quality photos and videos\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage("Share with non-Ente users"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("Share your first album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1788,7 +1790,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("New shared photos"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Receive notifications when someone adds a photo to a shared album that you\'re a part of"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Shared with me"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("Shared with you"), @@ -1805,11 +1807,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Sign out other devices"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "I agree to the terms of service and privacy policy"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "It will be deleted from all albums."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Skip"), "social": MessageLookupByLibrary.simpleMessage("Social"), "someItemsAreInBothEnteAndYourDevice": @@ -1827,6 +1829,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage( "Something went wrong, please try again"), "sorry": MessageLookupByLibrary.simpleMessage("Sorry"), + "sorryBackupFailedDesc": MessageLookupByLibrary.simpleMessage( + "Sorry, we could not backup this file right now, we will retry later."), "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( "Sorry, could not add to favorites!"), "sorryCouldNotRemoveFromFavorites": @@ -1843,8 +1847,8 @@ class MessageLookup extends MessageLookupByLibrary { "sortNewestFirst": MessageLookupByLibrary.simpleMessage("Newest first"), "sortOldestFirst": MessageLookupByLibrary.simpleMessage("Oldest first"), "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Success"), - "sportsWithThem": m90, - "spotlightOnThem": m91, + "sportsWithThem": m88, + "spotlightOnThem": m89, "spotlightOnYourself": MessageLookupByLibrary.simpleMessage("Spotlight on yourself"), "startAccountRecoveryTitle": @@ -1858,14 +1862,14 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Storage"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Family"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("You"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Storage limit exceeded"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "streamDetails": MessageLookupByLibrary.simpleMessage("Stream details"), "strongStrength": MessageLookupByLibrary.simpleMessage("Strong"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Subscribe"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "You need an active paid subscription to enable sharing."), @@ -1883,7 +1887,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Suggest features"), "sunrise": MessageLookupByLibrary.simpleMessage("On the horizon"), "support": MessageLookupByLibrary.simpleMessage("Support"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Sync stopped"), "syncing": MessageLookupByLibrary.simpleMessage("Syncing..."), "systemTheme": MessageLookupByLibrary.simpleMessage("System"), @@ -1892,7 +1896,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Tap to enter code"), "tapToUnlock": MessageLookupByLibrary.simpleMessage("Tap to unlock"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Tap to upload"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "It looks like something went wrong. Please retry after some time. If the error persists, please contact our support team."), "terminate": MessageLookupByLibrary.simpleMessage("Terminate"), @@ -1915,7 +1919,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "These items will be deleted from your device."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "They will be deleted from all albums."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -2079,7 +2083,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "We don\'t support editing photos and albums that you don\'t own yet"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Weak"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Welcome back!"), "whatsNew": MessageLookupByLibrary.simpleMessage("What\'s new"), @@ -2087,7 +2091,7 @@ class MessageLookup extends MessageLookupByLibrary { "Trusted contact can help in recovering your data."), "yearShort": MessageLookupByLibrary.simpleMessage("yr"), "yearly": MessageLookupByLibrary.simpleMessage("Yearly"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Yes"), "yesCancel": MessageLookupByLibrary.simpleMessage("Yes, cancel"), "yesConvertToViewer": @@ -2101,7 +2105,7 @@ class MessageLookup extends MessageLookupByLibrary { "yesResetPerson": MessageLookupByLibrary.simpleMessage("Yes, reset person"), "you": MessageLookupByLibrary.simpleMessage("You"), - "youAndThem": m111, + "youAndThem": m112, "youAreOnAFamilyPlan": MessageLookupByLibrary.simpleMessage("You are on a family plan!"), "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage( @@ -2120,7 +2124,7 @@ class MessageLookup extends MessageLookupByLibrary { "You cannot share with yourself"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "You don\'t have any archived items."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage( "Your account has been deleted"), "yourMap": MessageLookupByLibrary.simpleMessage("Your map"), diff --git a/mobile/lib/generated/intl/messages_es.dart b/mobile/lib/generated/intl/messages_es.dart index 46018cbb8f..4d7a8ecc81 100644 --- a/mobile/lib/generated/intl/messages_es.dart +++ b/mobile/lib/generated/intl/messages_es.dart @@ -20,39 +20,43 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'es'; - static String m9(title) => "${title} (Yo)"; + static String m0(title) => "${title} (Yo)"; - static String m10(count) => + static String m1(count) => "${Intl.plural(count, zero: 'Añadir colaborador', one: 'Añadir colaborador', other: 'Añadir colaboradores')}"; - static String m11(count) => - "${Intl.plural(count, one: 'Agregar elemento', other: 'Agregar elementos')}"; + static String m2(count) => + "${Intl.plural(count, one: 'Añadir objeto', other: 'Añadir objetos')}"; - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "Tu ${storageAmount} adicional es válido hasta ${endDate}"; - static String m13(count) => + static String m4(count) => "${Intl.plural(count, zero: 'Añadir espectador', one: 'Añadir espectador', other: 'Añadir espectadores')}"; - static String m14(emailOrName) => "Añadido por ${emailOrName}"; + static String m5(emailOrName) => "Añadido por ${emailOrName}"; - static String m15(albumName) => "Añadido exitosamente a ${albumName}"; + static String m6(albumName) => "Añadido exitosamente a ${albumName}"; - static String m17(count) => + static String m7(name) => "Admirando a ${name}"; + + static String m8(count) => "${Intl.plural(count, zero: 'No hay Participantes', one: '1 Participante', other: '${count} Participantes')}"; - static String m18(versionValue) => "Versión: ${versionValue}"; + static String m9(versionValue) => "Versión: ${versionValue}"; - static String m19(freeAmount, storageUnit) => - "${freeAmount} ${storageUnit} gratis"; + static String m10(freeAmount, storageUnit) => + "${freeAmount} ${storageUnit} disponible"; - static String m20(paymentProvider) => + static String m11(name) => "Preciosas vistas con ${name}"; + + static String m12(paymentProvider) => "Por favor, cancela primero tu suscripción existente de ${paymentProvider}"; - static String m3(user) => + static String m13(user) => "${user} no podrá añadir más fotos a este álbum\n\nTodavía podrán eliminar las fotos ya añadidas por ellos"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Tu familia ha obtenido ${storageAmountInGb} GB hasta el momento', @@ -61,197 +65,233 @@ class MessageLookup extends MessageLookupByLibrary { '¡Tú has obtenido ${storageAmountInGb} GB hasta el momento!', })}"; - static String m22(albumName) => + static String m15(albumName) => "Enlace colaborativo creado para ${albumName}"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: '0 colaboradores añadidos', one: '1 colaborador añadido', other: '${count} colaboradores añadidos')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "Estás a punto de añadir ${email} como un contacto de confianza. Esta persona podrá recuperar tu cuenta si no estás durante ${numOfDays} días."; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Por favor contacta con ${familyAdminEmail} para administrar tu suscripción"; - static String m26(provider) => + static String m19(provider) => "Por favor, contáctanos en support@ente.io para gestionar tu suscripción a ${provider}."; - static String m27(endpoint) => "Conectado a ${endpoint}"; + static String m20(endpoint) => "Conectado a ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Elimina ${count} elemento', other: 'Elimina ${count} elementos')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Borrando ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Esto eliminará el enlace público para acceder a \"${albumName}\"."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Por favor, envía un correo electrónico a ${supportEmail} desde tu dirección de correo electrónico que usó para registrarse"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "¡Has limpiado ${Intl.plural(count, one: '${count} archivo duplicado', other: '${count} archivos duplicados')}, ahorrando (${storageSaved}!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} archivos, ${formattedSize} cada uno"; - static String m34(newEmail) => "Correo cambiado a ${newEmail}"; + static String m27(newEmail) => "Correo cambiado a ${newEmail}"; - static String m35(email) => "${email} no tiene una cuenta de Ente."; + static String m28(email) => "${email} no tiene una cuenta de Ente."; - static String m36(email) => + static String m29(email) => "${email} no tiene una cuente en Ente.\n\nEnvíale una invitación para compartir fotos."; - static String m38(text) => "Fotos adicionales encontradas para ${text}"; + static String m30(name) => "Abrazando a ${name}"; - static String m40(count, formattedNumber) => + static String m31(text) => "Fotos adicionales encontradas para ${text}"; + + static String m32(name) => "Festejando con ${name}"; + + static String m33(count, formattedNumber) => "Se ha realizado la copia de seguridad de ${Intl.plural(count, one: '1 archivo', other: '${formattedNumber} archivos')} de este dispositivo de forma segura"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "Se ha realizado la copia de seguridad de ${Intl.plural(count, one: '1 archivo', other: '${formattedNumber} archivos')} de este álbum de forma segura"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB cada vez que alguien se registra en un plan de pago y aplica tu código"; - static String m42(endDate) => "Prueba gratuita válida hasta ${endDate}"; + static String m36(endDate) => "Prueba gratuita válida hasta ${endDate}"; - static String m43(count) => + static String m37(count) => "Aún puedes acceder ${Intl.plural(count, one: 'a él', other: 'a ellos')} en Ente mientras tengas una suscripción activa"; - static String m44(sizeInMBorGB) => "Liberar ${sizeInMBorGB}"; + static String m38(sizeInMBorGB) => "Liberar ${sizeInMBorGB}"; - static String m45(count, formattedSize) => + static String m39(count, formattedSize) => "${Intl.plural(count, one: 'Se puede eliminar del dispositivo para liberar ${formattedSize}', other: 'Se pueden eliminar del dispositivo para liberar ${formattedSize}')}"; - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Procesando ${currentlyProcessing} / ${totalCount}"; - static String m48(count) => + static String m41(name) => "Senderismo con ${name}"; + + static String m42(count) => "${Intl.plural(count, one: '${count} elemento', other: '${count} elementos')}"; - static String m50(email) => + static String m43(name) => "Última vez con ${name}"; + + static String m44(email) => "${email} te ha invitado a ser un contacto de confianza"; - static String m51(expiryTime) => "El enlace caducará en ${expiryTime}"; + static String m45(expiryTime) => "El enlace caducará en ${expiryTime}"; - static String m52(email) => "Enlazar persona a ${email}"; + static String m46(email) => "Enlazar persona a ${email}"; - static String m53(personName, email) => + static String m47(personName, email) => "Esto enlazará a ${personName} a ${email}"; - static String m5(count, formattedCount) => - "${Intl.plural(count, zero: 'sin recuerdos', one: '${formattedCount} recuerdo', other: '${formattedCount} recuerdos')}"; + static String m48(count, formattedCount) => + "${Intl.plural(count, zero: 'no hay recuerdos', one: '${formattedCount} recuerdo', other: '${formattedCount} recuerdos')}"; - static String m54(count) => - "${Intl.plural(count, one: 'Mover elemento', other: 'Mover elementos')}"; + static String m49(count) => + "${Intl.plural(count, one: 'Mover objeto', other: 'Mover objetos')}"; - static String m55(albumName) => "Movido exitosamente a ${albumName}"; + static String m50(albumName) => "Movido exitosamente a ${albumName}"; - static String m56(personName) => "No hay sugerencias para ${personName}"; + static String m51(personName) => "No hay sugerencias para ${personName}"; - static String m57(name) => "¿No es ${name}?"; + static String m52(name) => "¿No es ${name}?"; - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Por favor, contacta a ${familyAdminEmail} para cambiar tu código."; - static String m0(passwordStrengthValue) => + static String m54(name) => "Fiesta con ${name}"; + + static String m55(passwordStrengthValue) => "Seguridad de la contraseña: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Por favor, habla con el soporte de ${providerName} si se te cobró"; - static String m64(count) => + static String m57(name, age) => "¡${name} tiene ${age} años!"; + + static String m58(name, age) => "${name} cumpliendo ${age} pronto"; + + static String m59(count) => + "${Intl.plural(count, zero: 'No hay fotos', one: '1 foto', other: '${count} fotos')}"; + + static String m60(count) => "${Intl.plural(count, zero: '0 fotos', one: '1 foto', other: '${count} fotos')}"; - static String m65(endDate) => + static String m61(endDate) => "Prueba gratuita válida hasta ${endDate}.\nPuedes elegir un plan de pago después."; - static String m66(toEmail) => + static String m62(toEmail) => "Por favor, envíanos un correo electrónico a ${toEmail}"; - static String m67(toEmail) => "Por favor, envía los registros a ${toEmail}"; + static String m63(toEmail) => "Por favor, envía los registros a ${toEmail}"; - static String m69(folderName) => "Procesando ${folderName}..."; + static String m64(name) => "Posando con ${name}"; - static String m70(storeName) => "Puntúanos en ${storeName}"; + static String m65(folderName) => "Procesando ${folderName}..."; - static String m71(name) => "Te has reasignado a ${name}"; + static String m66(storeName) => "Puntúanos en ${storeName}"; - static String m72(days, email) => + static String m67(name) => "Te has reasignado a ${name}"; + + static String m68(days, email) => "Puedes acceder a la cuenta después de ${days} días. Se enviará una notificación a ${email}."; - static String m73(email) => + static String m69(email) => "Ahora puedes recuperar la cuenta de ${email} estableciendo una nueva contraseña."; - static String m74(email) => "${email} está intentando recuperar tu cuenta."; + static String m70(email) => "${email} está intentando recuperar tu cuenta."; - static String m75(storageInGB) => + static String m71(storageInGB) => "3. Ambos obtienen ${storageInGB} GB* gratis"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} será eliminado de este álbum compartido\n\nCualquier foto añadida por ellos también será eliminada del álbum"; - static String m77(endDate) => "La suscripción se renueva el ${endDate}"; + static String m73(endDate) => "La suscripción se renueva el ${endDate}"; - static String m79(count) => + static String m74(name) => "Viaje en carretera con ${name}"; + + static String m75(count) => "${Intl.plural(count, one: '${count} resultado encontrado', other: '${count} resultados encontrados')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "La longitud de las secciones no coincide: ${snapshotLength} != ${searchLength}"; - static String m6(count) => "${count} seleccionados"; + static String m77(count) => "${count} seleccionados"; - static String m81(count, yourCount) => + static String m78(count, yourCount) => "${count} seleccionados (${yourCount} tuyos)"; - static String m83(verificationID) => + static String m79(name) => "Selfies con ${name}"; + + static String m80(verificationID) => "Aquí está mi ID de verificación: ${verificationID} para ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "Hola, ¿puedes confirmar que esta es tu ID de verificación ente.io: ${verificationID}?"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Código de referido de Ente: ${referralCode} \n\nAñádelo en Ajustes → General → Referidos para obtener ${referralStorageInGB} GB gratis tras comprar un plan de pago.\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Compartir con personas específicas', one: 'Compartido con 1 persona', other: 'Compartido con ${numberOfPeople} personas')}"; - static String m86(emailIDs) => "Compartido con ${emailIDs}"; + static String m84(emailIDs) => "Compartido con ${emailIDs}"; - static String m87(fileType) => + static String m85(fileType) => "Este ${fileType} se eliminará de tu dispositivo."; - static String m88(fileType) => + static String m86(fileType) => "Este ${fileType} está tanto en Ente como en tu dispositivo."; - static String m89(fileType) => "Este ${fileType} será eliminado de Ente."; + static String m87(fileType) => "Este ${fileType} será eliminado de Ente."; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m88(name) => "Deportes con ${name}"; - static String m92( + static String m89(name) => "Enfocar a ${name}"; + + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; + + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} de ${totalAmount} ${totalStorageUnit} usados"; - static String m93(id) => + static String m92(id) => "Tu ${id} ya está vinculada a otra cuenta de Ente.\nSi deseas utilizar tu ${id} con esta cuenta, ponte en contacto con nuestro servicio de asistencia\'\'"; - static String m94(endDate) => "Tu suscripción se cancelará el ${endDate}"; + static String m93(endDate) => "Tu suscripción se cancelará el ${endDate}"; - static String m95(completed, total) => + static String m94(completed, total) => "${completed}/${total} recuerdos conservados"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Toca para subir, la subida se está ignorando debido a ${ignoreReason}"; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "También obtienen ${storageAmountInGB} GB"; static String m97(email) => "Este es el ID de verificación de ${email}"; + static String m98(count) => + "${Intl.plural(count, one: 'Esta semana, hace ${count} año', other: 'Esta semana, hace ${count} años')}"; + + static String m99(dateFormat) => "${dateFormat} a través de los años"; + static String m100(count) => "${Intl.plural(count, zero: 'Pronto', one: '1 día', other: '${count} días')}"; + static String m101(year) => "Viaje en ${year}"; + + static String m102(location) => "Viaje a ${location}"; + static String m103(email) => "Has sido invitado a ser un contacto legado por ${email}."; @@ -270,13 +310,15 @@ class MessageLookup extends MessageLookupByLibrary { static String m109(count) => "${Intl.plural(count, zero: '0 espectadores añadidos', one: '1 espectador añadido', other: '${count} espectadores añadidos')}"; - static String m2(email) => + static String m110(email) => "Hemos enviado un correo a ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: 'Hace ${count} año', other: 'Hace ${count} años')}"; - static String m112(storageSaved) => + static String m112(name) => "Tú y ${name}"; + + static String m113(storageSaved) => "¡Has liberado ${storageSaved} con éxito!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -289,7 +331,7 @@ class MessageLookup extends MessageLookupByLibrary { "account": MessageLookupByLibrary.simpleMessage("Cuenta"), "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage( "La cuenta ya está configurada."), - "accountOwnerPersonAppbarTitle": m9, + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("¡Bienvenido de nuevo!"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( @@ -302,11 +344,11 @@ class MessageLookup extends MessageLookupByLibrary { "Agregar nuevo correo electrónico"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Agregar colaborador"), - "addCollaborators": m10, + "addCollaborators": m1, "addFiles": MessageLookupByLibrary.simpleMessage("Añadir archivos"), "addFromDevice": MessageLookupByLibrary.simpleMessage( "Agregar desde el dispositivo"), - "addItem": m11, + "addItem": m2, "addLocation": MessageLookupByLibrary.simpleMessage("Agregar ubicación"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Añadir"), @@ -319,7 +361,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Añadir nueva persona"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage( "Detalles de los complementos"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Complementos"), "addPhotos": MessageLookupByLibrary.simpleMessage("Agregar fotos"), "addSelected": @@ -331,14 +373,15 @@ class MessageLookup extends MessageLookupByLibrary { "addTrustedContact": MessageLookupByLibrary.simpleMessage( "Añadir contacto de confianza"), "addViewer": MessageLookupByLibrary.simpleMessage("Añadir espectador"), - "addViewers": m13, + "addViewers": m4, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage("Añade tus fotos ahora"), "addedAs": MessageLookupByLibrary.simpleMessage("Agregado como"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("Añadiendo a favoritos..."), + "admiringThem": m7, "advanced": MessageLookupByLibrary.simpleMessage("Avanzado"), "advancedSettings": MessageLookupByLibrary.simpleMessage("Avanzado"), "after1Day": MessageLookupByLibrary.simpleMessage("Después de un día"), @@ -349,7 +392,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Después de una semana"), "after1Year": MessageLookupByLibrary.simpleMessage("Después de un año"), "albumOwner": MessageLookupByLibrary.simpleMessage("Propietario"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Título del álbum"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Álbum actualizado"), @@ -359,6 +402,8 @@ class MessageLookup extends MessageLookupByLibrary { "Todos los recuerdos preservados"), "allPersonGroupingWillReset": MessageLookupByLibrary.simpleMessage( "Se eliminarán todas las agrupaciones para esta persona, y se eliminarán todas sus sugerencias"), + "allWillShiftRangeBasedOnFirst": MessageLookupByLibrary.simpleMessage( + "Este es el primero en el grupo. Otras fotos seleccionadas cambiarán automáticamente basándose en esta nueva fecha"), "allow": MessageLookupByLibrary.simpleMessage("Permitir"), "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( "Permitir a las personas con el enlace añadir fotos al álbum compartido."), @@ -395,11 +440,12 @@ class MessageLookup extends MessageLookupByLibrary { "Android, iOS, Web, Computadora"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage( "Se necesita autenticación biométrica"), + "appIcon": MessageLookupByLibrary.simpleMessage("Ícono"), "appLock": MessageLookupByLibrary.simpleMessage("Bloqueo de aplicación"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Escoge entre la pantalla de bloqueo por defecto de tu dispositivo y una pantalla de bloqueo personalizada con un PIN o contraseña."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("ID de Apple"), "apply": MessageLookupByLibrary.simpleMessage("Aplicar"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Usar código"), @@ -482,9 +528,10 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "El emparejamiento automático funciona sólo con dispositivos compatibles con Chromecast."), "available": MessageLookupByLibrary.simpleMessage("Disponible"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage( "Carpetas con copia de seguridad"), + "backgroundWithThem": m11, "backup": MessageLookupByLibrary.simpleMessage("Copia de seguridad"), "backupFailed": MessageLookupByLibrary.simpleMessage( "La copia de seguridad ha fallado"), @@ -500,10 +547,28 @@ class MessageLookup extends MessageLookupByLibrary { "Los elementos con copia seguridad aparecerán aquí"), "backupVideos": MessageLookupByLibrary.simpleMessage( "Copia de seguridad de vídeos"), + "beach": MessageLookupByLibrary.simpleMessage("Arena y mar "), "birthday": MessageLookupByLibrary.simpleMessage("Cumpleaños"), "blackFridaySale": MessageLookupByLibrary.simpleMessage("Oferta del Black Friday"), "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "cLBulkEdit": + MessageLookupByLibrary.simpleMessage("Edición masiva de fechas"), + "cLBulkEditDesc": MessageLookupByLibrary.simpleMessage( + "Ahora puedes seleccionar múltiples fotos y editar la fecha/hora para todas ellas con una acción rápida. También es posible cambiar las fechas."), + "cLFamilyPlan": + MessageLookupByLibrary.simpleMessage("Límites de plan familiar"), + "cLFamilyPlanDesc": MessageLookupByLibrary.simpleMessage( + "Ahora puede establecer límites en cuanto al almacenamiento que los miembros de tu familia pueden utilizar."), + "cLIcon": MessageLookupByLibrary.simpleMessage("Nuevo ícono"), + "cLIconDesc": MessageLookupByLibrary.simpleMessage( + "Por fin, un nuevo icono de la aplicación, que creemos que representa mejor nuestro trabajo. También hemos añadido una opción para que puedas seguir utilizando el icono anterior."), + "cLMemories": MessageLookupByLibrary.simpleMessage("Recuerdos"), + "cLMemoriesDesc": MessageLookupByLibrary.simpleMessage( + "Redescubre tus momentos especiales: enfócate en tu gente favorita, tus viajes y vacaciones, tus mejores clics, y mucho más. Activa el aprendizaje de automático, etiquétate a ti mismo y etiqueta a tus amigos para la mejor experiencia."), + "cLWidgets": MessageLookupByLibrary.simpleMessage("Widgets"), + "cLWidgetsDesc": MessageLookupByLibrary.simpleMessage( + "Ya están disponibles los widgets de pantalla de inicio con tus recuerdos. Podrás ver tus momentos especiales sin abrir la aplicación."), "cachedData": MessageLookupByLibrary.simpleMessage("Datos almacenados en caché"), "calculating": MessageLookupByLibrary.simpleMessage("Calculando..."), @@ -524,10 +589,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Cancelar la recuperación"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "¿Estás seguro de que quieres cancelar la recuperación?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Cancelar suscripción"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( "No se pueden eliminar los archivos compartidos"), "castAlbum": MessageLookupByLibrary.simpleMessage("Enviar álbum"), @@ -552,18 +617,19 @@ class MessageLookup extends MessageLookupByLibrary { "changeYourReferralCode": MessageLookupByLibrary.simpleMessage( "Cambiar tu código de referido"), "checkForUpdates": - MessageLookupByLibrary.simpleMessage("Comprobar actualizaciónes"), + MessageLookupByLibrary.simpleMessage("Comprobar actualizaciones"), "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( "Revisa tu bandeja de entrada (y spam) para completar la verificación"), "checkStatus": MessageLookupByLibrary.simpleMessage("Comprobar estado"), "checking": MessageLookupByLibrary.simpleMessage("Comprobando..."), "checkingModels": MessageLookupByLibrary.simpleMessage("Comprobando modelos..."), + "city": MessageLookupByLibrary.simpleMessage("En la ciudad"), "claimFreeStorage": MessageLookupByLibrary.simpleMessage( "Obtén almacenamiento gratuito"), "claimMore": MessageLookupByLibrary.simpleMessage("¡Obtén más!"), "claimed": MessageLookupByLibrary.simpleMessage("Obtenido"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("Limpiar sin categorizar"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -592,12 +658,12 @@ class MessageLookup extends MessageLookupByLibrary { "Crea un enlace para permitir que otros pueda añadir y ver fotos en tu álbum compartido sin necesitar la aplicación Ente o una cuenta. Genial para recolectar fotos de eventos."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Enlace colaborativo"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Colaborador"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "Colaboradores pueden añadir fotos y videos al álbum compartido."), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("Disposición"), "collageSaved": MessageLookupByLibrary.simpleMessage( "Collage guardado en la galería"), @@ -613,9 +679,9 @@ class MessageLookup extends MessageLookupByLibrary { "confirm": MessageLookupByLibrary.simpleMessage("Confirmar"), "confirm2FADisable": MessageLookupByLibrary.simpleMessage( "¿Estás seguro de que deseas deshabilitar la autenticación de doble factor?"), - "confirmAccountDeletion": - MessageLookupByLibrary.simpleMessage("Confirmar borrado de cuenta"), - "confirmAddingTrustedContact": m24, + "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Confirmar eliminación de cuenta"), + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Sí, quiero eliminar permanentemente esta cuenta y todos sus datos en todas las aplicaciones."), "confirmPassword": @@ -628,10 +694,10 @@ class MessageLookup extends MessageLookupByLibrary { "Confirma tu clave de recuperación"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Conectar a dispositivo"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("Contactar con soporte"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Contactos"), "contents": MessageLookupByLibrary.simpleMessage("Contenidos"), "continueLabel": MessageLookupByLibrary.simpleMessage("Continuar"), @@ -673,11 +739,13 @@ class MessageLookup extends MessageLookupByLibrary { "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( "Actualización crítica disponible"), "crop": MessageLookupByLibrary.simpleMessage("Ajustar encuadre"), + "curatedMemories": + MessageLookupByLibrary.simpleMessage("Memorias revisadas"), "currentUsageIs": MessageLookupByLibrary.simpleMessage("El uso actual es de "), "currentlyRunning": MessageLookupByLibrary.simpleMessage("ejecutando"), "custom": MessageLookupByLibrary.simpleMessage("Personalizado"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Oscuro"), "dayToday": MessageLookupByLibrary.simpleMessage("Hoy"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Ayer"), @@ -715,14 +783,14 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Eliminar del dispositivo"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Eliminar de Ente"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Borrar la ubicación"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Borrar las fotos"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( - "Falta una característica clave que necesito"), + "Falta una función clave que necesito"), "deleteReason2": MessageLookupByLibrary.simpleMessage( "La aplicación o una característica determinada no se comporta como creo que debería"), "deleteReason3": MessageLookupByLibrary.simpleMessage( @@ -761,7 +829,7 @@ class MessageLookup extends MessageLookupByLibrary { "Los espectadores todavía pueden tomar capturas de pantalla o guardar una copia de tus fotos usando herramientas externas"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Por favor, ten en cuenta"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage("Deshabilitar dos factores"), "disablingTwofactorAuthentication": @@ -805,15 +873,16 @@ class MessageLookup extends MessageLookupByLibrary { "downloadFailed": MessageLookupByLibrary.simpleMessage("Descarga fallida"), "downloading": MessageLookupByLibrary.simpleMessage("Descargando..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Editar"), "editLocation": MessageLookupByLibrary.simpleMessage("Editar la ubicación"), "editLocationTagTitle": MessageLookupByLibrary.simpleMessage("Editar la ubicación"), "editPerson": MessageLookupByLibrary.simpleMessage("Editar persona"), + "editTime": MessageLookupByLibrary.simpleMessage("Editar hora"), "editsSaved": MessageLookupByLibrary.simpleMessage("Ediciones guardadas"), "editsToLocationWillOnlyBeSeenWithinEnte": @@ -823,15 +892,16 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("Correo electrónico"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage( "Correo electrónico ya registrado."), - "emailChangedTo": m34, - "emailDoesNotHaveEnteAccount": m35, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage( "Correo electrónico no registrado."), "emailVerificationToggle": MessageLookupByLibrary.simpleMessage( "Verificación por correo electrónico"), "emailYourLogs": MessageLookupByLibrary.simpleMessage( "Envía tus registros por correo electrónico"), + "embracingThem": m30, "emergencyContacts": MessageLookupByLibrary.simpleMessage("Contactos de emergencia"), "empty": MessageLookupByLibrary.simpleMessage("Vaciar"), @@ -913,7 +983,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Exportar tus datos"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage( "Fotos adicionales encontradas"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Cara no agrupada todavía, por favor vuelve más tarde"), "faceRecognition": @@ -952,6 +1022,7 @@ class MessageLookup extends MessageLookupByLibrary { "faq": MessageLookupByLibrary.simpleMessage("Preguntas Frecuentes"), "faqs": MessageLookupByLibrary.simpleMessage("Preguntas frecuentes"), "favorite": MessageLookupByLibrary.simpleMessage("Favorito"), + "feastingWithThem": m32, "feedback": MessageLookupByLibrary.simpleMessage("Sugerencias"), "file": MessageLookupByLibrary.simpleMessage("Archivo"), "fileFailedToSaveToGallery": MessageLookupByLibrary.simpleMessage( @@ -965,8 +1036,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("Tipos de archivos"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("Tipos de archivo y nombres"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("Archivos eliminados"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage( @@ -976,6 +1047,7 @@ class MessageLookup extends MessageLookupByLibrary { "findThemQuickly": MessageLookupByLibrary.simpleMessage("Encuéntralos rápidamente"), "flip": MessageLookupByLibrary.simpleMessage("Voltear"), + "food": MessageLookupByLibrary.simpleMessage("Delicia culinaria"), "forYourMemories": MessageLookupByLibrary.simpleMessage("para tus recuerdos"), "forgotPassword": @@ -983,26 +1055,26 @@ class MessageLookup extends MessageLookupByLibrary { "foundFaces": MessageLookupByLibrary.simpleMessage("Caras encontradas"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage( "Almacenamiento gratuito obtenido"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage( "Almacenamiento libre disponible"), "freeTrial": MessageLookupByLibrary.simpleMessage("Prueba gratuita"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAccessPostDelete": m37, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage( "Liberar espacio del dispositivo"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Ahorra espacio en tu dispositivo limpiando archivos que tienen copia de seguridad."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Liberar espacio"), - "freeUpSpaceSaving": m45, + "freeUpSpaceSaving": m39, "gallery": MessageLookupByLibrary.simpleMessage("Galería"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "Hasta 1000 memorias mostradas en la galería"), "general": MessageLookupByLibrary.simpleMessage("General"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Generando claves de cifrado..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Ir a Ajustes"), "googlePlayId": MessageLookupByLibrary.simpleMessage("ID de Google Play"), @@ -1010,6 +1082,7 @@ class MessageLookup extends MessageLookupByLibrary { "Por favor, permite el acceso a todas las fotos en Ajustes"), "grantPermission": MessageLookupByLibrary.simpleMessage("Conceder permiso"), + "greenery": MessageLookupByLibrary.simpleMessage("La vida verde"), "groupNearbyPhotos": MessageLookupByLibrary.simpleMessage("Agrupar fotos cercanas"), "guestView": MessageLookupByLibrary.simpleMessage("Vista de invitado"), @@ -1031,6 +1104,7 @@ class MessageLookup extends MessageLookupByLibrary { "hideSharedItemsFromHomeGallery": MessageLookupByLibrary.simpleMessage( "Ocultar elementos compartidos de la galería de inicio"), "hiding": MessageLookupByLibrary.simpleMessage("Ocultando..."), + "hikingWithThem": m41, "hostedAtOsmFrance": MessageLookupByLibrary.simpleMessage("Alojado en OSM France"), "howItWorks": MessageLookupByLibrary.simpleMessage("Cómo funciona"), @@ -1087,7 +1161,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Parece que algo salió mal. Por favor, vuelve a intentarlo después de algún tiempo. Si el error persiste, ponte en contacto con nuestro equipo de soporte."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Los artículos muestran el número de días restantes antes de ser borrados permanente"), @@ -1108,8 +1182,11 @@ class MessageLookup extends MessageLookupByLibrary { "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( "Por favor ayúdanos con esta información"), "language": MessageLookupByLibrary.simpleMessage("Idioma"), + "lastTimeWithThem": m43, "lastUpdated": MessageLookupByLibrary.simpleMessage("Última actualización"), + "lastYearsTrip": + MessageLookupByLibrary.simpleMessage("Viaje del año pasado"), "leave": MessageLookupByLibrary.simpleMessage("Abandonar"), "leaveAlbum": MessageLookupByLibrary.simpleMessage("Abandonar álbum"), "leaveFamily": @@ -1120,7 +1197,7 @@ class MessageLookup extends MessageLookupByLibrary { "legacy": MessageLookupByLibrary.simpleMessage("Legado"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Cuentas legadas"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "Legado permite a los contactos de confianza acceder a su cuenta en su ausencia."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1138,7 +1215,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("para compartir más rápido"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Habilitado"), "linkExpired": MessageLookupByLibrary.simpleMessage("Vencido"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Enlace vence"), "linkHasExpired": MessageLookupByLibrary.simpleMessage("El enlace ha caducado"), @@ -1146,8 +1223,8 @@ class MessageLookup extends MessageLookupByLibrary { "linkPerson": MessageLookupByLibrary.simpleMessage("Vincular persona"), "linkPersonCaption": MessageLookupByLibrary.simpleMessage( "para una mejor experiencia compartida"), - "linkPersonToEmail": m52, - "linkPersonToEmailConfirmation": m53, + "linkPersonToEmail": m46, + "linkPersonToEmailConfirmation": m47, "livePhotos": MessageLookupByLibrary.simpleMessage("Foto en vivo"), "loadMessage1": MessageLookupByLibrary.simpleMessage( "Puedes compartir tu suscripción con tu familia"), @@ -1241,7 +1318,7 @@ class MessageLookup extends MessageLookupByLibrary { "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), "me": MessageLookupByLibrary.simpleMessage("Yo"), - "memoryCount": m5, + "memoryCount": m48, "merchandise": MessageLookupByLibrary.simpleMessage("Mercancías"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Combinar con existente"), @@ -1268,14 +1345,18 @@ class MessageLookup extends MessageLookupByLibrary { "moments": MessageLookupByLibrary.simpleMessage("Momentos"), "month": MessageLookupByLibrary.simpleMessage("mes"), "monthly": MessageLookupByLibrary.simpleMessage("Mensualmente"), + "moon": MessageLookupByLibrary.simpleMessage("A la luz de la luna"), "moreDetails": MessageLookupByLibrary.simpleMessage("Más detalles"), "mostRecent": MessageLookupByLibrary.simpleMessage("Más reciente"), "mostRelevant": MessageLookupByLibrary.simpleMessage("Más relevante"), - "moveItem": m54, + "mountains": MessageLookupByLibrary.simpleMessage("Sobre las colinas"), + "moveItem": m49, + "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage( + "Mover las fotos seleccionadas a una fecha"), "moveToAlbum": MessageLookupByLibrary.simpleMessage("Mover al álbum"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Mover al álbum oculto"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("Movido a la papelera"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( @@ -1291,6 +1372,7 @@ class MessageLookup extends MessageLookupByLibrary { "newLocation": MessageLookupByLibrary.simpleMessage("Nueva localización"), "newPerson": MessageLookupByLibrary.simpleMessage("Nueva persona"), + "newRange": MessageLookupByLibrary.simpleMessage("Nuevo rango"), "newToEnte": MessageLookupByLibrary.simpleMessage("Nuevo en Ente"), "newest": MessageLookupByLibrary.simpleMessage("Más reciente"), "next": MessageLookupByLibrary.simpleMessage("Siguiente"), @@ -1328,10 +1410,12 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Sin resultados"), "noResultsFound": MessageLookupByLibrary.simpleMessage( "No se han encontrado resultados"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage( "Bloqueo de sistema no encontrado"), - "notPersonLabel": m57, + "notPersonLabel": m52, + "notThisPerson": + MessageLookupByLibrary.simpleMessage("¿No es esta persona?"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Aún no hay nada compartido contigo"), "nothingToSeeHere": MessageLookupByLibrary.simpleMessage( @@ -1341,7 +1425,9 @@ class MessageLookup extends MessageLookupByLibrary { "onDevice": MessageLookupByLibrary.simpleMessage("En el dispositivo"), "onEnte": MessageLookupByLibrary.simpleMessage( "En ente"), - "onlyFamilyAdminCanChangeCode": m58, + "onTheRoad": + MessageLookupByLibrary.simpleMessage("De nuevo en la carretera"), + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Solo ellos"), "oops": MessageLookupByLibrary.simpleMessage("Ups"), "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( @@ -1372,6 +1458,7 @@ class MessageLookup extends MessageLookupByLibrary { "pairingComplete": MessageLookupByLibrary.simpleMessage("Emparejamiento completo"), "panorama": MessageLookupByLibrary.simpleMessage("Panorama"), + "partyWithThem": m54, "passKeyPendingVerification": MessageLookupByLibrary.simpleMessage( "La verificación aún está pendiente"), "passkey": MessageLookupByLibrary.simpleMessage("Clave de acceso"), @@ -1382,7 +1469,7 @@ class MessageLookup extends MessageLookupByLibrary { "Contraseña cambiada correctamente"), "passwordLock": MessageLookupByLibrary.simpleMessage("Bloqueo con contraseña"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "La fortaleza de la contraseña se calcula teniendo en cuenta la longitud de la contraseña, los caracteres utilizados, y si la contraseña aparece o no en el top 10.000 de contraseñas más usadas"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1392,7 +1479,7 @@ class MessageLookup extends MessageLookupByLibrary { "paymentFailed": MessageLookupByLibrary.simpleMessage("Pago fallido"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Lamentablemente tu pago falló. Por favor, ¡contacta con el soporte técnico y te ayudaremos!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Elementos pendientes"), "pendingSync": @@ -1406,18 +1493,25 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Borrar permanentemente"), "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( "¿Eliminar permanentemente del dispositivo?"), + "personIsAge": m57, "personName": MessageLookupByLibrary.simpleMessage("Nombre de la persona"), + "personTurningAge": m58, + "pets": MessageLookupByLibrary.simpleMessage("Compañeros peludos"), "photoDescriptions": MessageLookupByLibrary.simpleMessage("Descripciones de fotos"), "photoGridSize": MessageLookupByLibrary.simpleMessage( "Tamaño de la cuadrícula de fotos"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("foto"), + "photocountPhotos": m59, "photos": MessageLookupByLibrary.simpleMessage("Fotos"), "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Las fotos añadidas por ti serán removidas del álbum"), - "photosCount": m64, + "photosCount": m60, + "photosKeepRelativeTimeDifference": + MessageLookupByLibrary.simpleMessage( + "Las fotos mantienen una diferencia de tiempo relativa"), "pickCenterPoint": MessageLookupByLibrary.simpleMessage("Elegir punto central"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Fijar álbum"), @@ -1426,7 +1520,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Reproducir álbum en TV"), "playOriginal": MessageLookupByLibrary.simpleMessage("Reproducir original"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playStream": MessageLookupByLibrary.simpleMessage("Reproducir transmisión"), "playstoreSubscription": @@ -1440,14 +1534,14 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Por favor, contacta a soporte técnico si el problema persiste"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("Por favor, concede permiso"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage( "Por favor, vuelve a iniciar sesión"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Por favor, selecciona enlaces rápidos para eliminar"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage( "Por favor, inténtalo nuevamente"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1460,6 +1554,9 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseWaitForSometimeBeforeRetrying": MessageLookupByLibrary.simpleMessage( "Por favor, espera un momento antes de volver a intentarlo"), + "pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage( + "Espera. Esto tardará un poco."), + "posingWithThem": m64, "preparingLogs": MessageLookupByLibrary.simpleMessage("Preparando registros..."), "preserveMore": MessageLookupByLibrary.simpleMessage("Preservar más"), @@ -1467,6 +1564,7 @@ class MessageLookup extends MessageLookupByLibrary { "Presiona y mantén presionado para reproducir el video"), "pressAndHoldToPlayVideoDetailed": MessageLookupByLibrary.simpleMessage( "Mantén pulsada la imagen para reproducir el video"), + "previous": MessageLookupByLibrary.simpleMessage("Anterior"), "privacy": MessageLookupByLibrary.simpleMessage("Privacidad"), "privacyPolicyTitle": MessageLookupByLibrary.simpleMessage("Política de Privacidad"), @@ -1477,7 +1575,7 @@ class MessageLookup extends MessageLookupByLibrary { "proceed": MessageLookupByLibrary.simpleMessage("Continuar"), "processed": MessageLookupByLibrary.simpleMessage("Procesado"), "processing": MessageLookupByLibrary.simpleMessage("Procesando"), - "processingImport": m69, + "processingImport": m65, "processingVideos": MessageLookupByLibrary.simpleMessage("Procesando vídeos"), "publicLinkCreated": @@ -1491,9 +1589,9 @@ class MessageLookup extends MessageLookupByLibrary { "rateTheApp": MessageLookupByLibrary.simpleMessage("Evalúa la aplicación"), "rateUs": MessageLookupByLibrary.simpleMessage("Califícanos"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "reassignMe": MessageLookupByLibrary.simpleMessage("Reasignar \"Yo\""), - "reassignedToName": m71, + "reassignedToName": m67, "reassigningLoading": MessageLookupByLibrary.simpleMessage("Reasignando..."), "recover": MessageLookupByLibrary.simpleMessage("Recuperar"), @@ -1504,7 +1602,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Recuperar cuenta"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("Recuperación iniciada"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Clave de recuperación"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( @@ -1519,12 +1617,12 @@ class MessageLookup extends MessageLookupByLibrary { "Clave de recuperación verificada"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Tu clave de recuperación es la única forma de recuperar tus fotos si olvidas tu contraseña. Puedes encontrar tu clave de recuperación en Ajustes > Cuenta.\n\nPor favor, introduce tu clave de recuperación aquí para verificar que la has guardado correctamente."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("¡Recuperación exitosa!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "Un contacto de confianza está intentando acceder a tu cuenta"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "El dispositivo actual no es lo suficientemente potente para verificar su contraseña, pero podemos regenerarla de una manera que funcione con todos los dispositivos.\n\nPor favor inicie sesión usando su clave de recuperación y regenere su contraseña (puede volver a utilizar la misma si lo desea)."), "recreatePasswordTitle": @@ -1539,7 +1637,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Dale este código a tus amigos"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Se suscriben a un plan de pago"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Referidos"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Las referencias están actualmente en pausa"), @@ -1570,7 +1668,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Eliminar enlace"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Quitar participante"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage( "Eliminar etiqueta de persona"), "removePublicLink": @@ -1590,7 +1688,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Renombrar archivo"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Renovar suscripción"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Reportar un error"), "reportBug": MessageLookupByLibrary.simpleMessage("Reportar error"), "resendEmail": @@ -1616,6 +1714,7 @@ class MessageLookup extends MessageLookupByLibrary { "reviewSuggestions": MessageLookupByLibrary.simpleMessage("Revisar sugerencias"), "right": MessageLookupByLibrary.simpleMessage("Derecha"), + "roadtripWithThem": m74, "rotate": MessageLookupByLibrary.simpleMessage("Girar"), "rotateLeft": MessageLookupByLibrary.simpleMessage("Girar a la izquierda"), @@ -1673,8 +1772,8 @@ class MessageLookup extends MessageLookupByLibrary { "Invita a gente y verás todas las fotos compartidas aquí"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "Las personas se mostrarán aquí cuando se complete el procesado y la sincronización"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Seguridad"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( "Ver enlaces del álbum público en la aplicación"), @@ -1688,6 +1787,7 @@ class MessageLookup extends MessageLookupByLibrary { "selectAllShort": MessageLookupByLibrary.simpleMessage("Todas"), "selectCoverPhoto": MessageLookupByLibrary.simpleMessage("Seleccionar foto de portada"), + "selectDate": MessageLookupByLibrary.simpleMessage("Seleccionar fecha"), "selectFoldersForBackup": MessageLookupByLibrary.simpleMessage( "Seleccionar carpetas para la copia de seguridad"), "selectItemsToAdd": MessageLookupByLibrary.simpleMessage( @@ -1698,10 +1798,17 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Seleccionar app de correo"), "selectMorePhotos": MessageLookupByLibrary.simpleMessage("Seleccionar más fotos"), + "selectOneDateAndTime": + MessageLookupByLibrary.simpleMessage("Seleccionar fecha y hora"), + "selectOneDateAndTimeForAll": MessageLookupByLibrary.simpleMessage( + "Seleccione una fecha y hora para todas"), "selectPersonToLink": MessageLookupByLibrary.simpleMessage( "Selecciona persona a vincular"), "selectReason": MessageLookupByLibrary.simpleMessage("Seleccionar motivo"), + "selectStartOfRange": MessageLookupByLibrary.simpleMessage( + "Seleccionar inicio del rango"), + "selectTime": MessageLookupByLibrary.simpleMessage("Seleccionar hora"), "selectYourFace": MessageLookupByLibrary.simpleMessage("Selecciona tu cara"), "selectYourPlan": @@ -1714,8 +1821,12 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Los archivos seleccionados serán eliminados de todos los álbumes y movidos a la papelera."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, + "selectedItemsWillBeRemovedFromThisPerson": + MessageLookupByLibrary.simpleMessage( + "Los elementos seleccionados se eliminarán de esta persona, pero no se eliminarán de tu biblioteca."), + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "selfiesWithThem": m79, "send": MessageLookupByLibrary.simpleMessage("Enviar"), "sendEmail": MessageLookupByLibrary.simpleMessage("Enviar correo electrónico"), @@ -1749,16 +1860,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Compartir un álbum ahora"), "shareLink": MessageLookupByLibrary.simpleMessage("Compartir enlace"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Comparte sólo con la gente que quieres"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Descarga Ente para que podamos compartir fácilmente fotos y videos en calidad original.\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Compartir con usuarios fuera de Ente"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("Comparte tu primer álbum"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1770,12 +1881,14 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nuevas fotos compartidas"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Recibir notificaciones cuando alguien agrega una foto a un álbum compartido contigo"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Compartido conmigo"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("Compartido contigo"), "sharing": MessageLookupByLibrary.simpleMessage("Compartiendo..."), + "shiftDatesAndTime": + MessageLookupByLibrary.simpleMessage("Cambiar fechas y hora"), "showMemories": MessageLookupByLibrary.simpleMessage("Mostrar recuerdos"), "showPerson": MessageLookupByLibrary.simpleMessage("Mostrar persona"), @@ -1787,11 +1900,11 @@ class MessageLookup extends MessageLookupByLibrary { "Cerrar la sesión de otros dispositivos"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Estoy de acuerdo con los términos del servicio y la política de privacidad"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Se borrará de todos los álbumes."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Omitir"), "social": MessageLookupByLibrary.simpleMessage("Social"), "someItemsAreInBothEnteAndYourDevice": @@ -1827,6 +1940,10 @@ class MessageLookup extends MessageLookupByLibrary { "sortOldestFirst": MessageLookupByLibrary.simpleMessage("Más antiguos primero"), "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Éxito"), + "sportsWithThem": m88, + "spotlightOnThem": m89, + "spotlightOnYourself": + MessageLookupByLibrary.simpleMessage("Enfócate a ti mismo"), "startAccountRecoveryTitle": MessageLookupByLibrary.simpleMessage("Iniciar la recuperación"), "startBackup": @@ -1839,15 +1956,15 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Almacenamiento"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Familia"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Usted"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Límite de datos excedido"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "streamDetails": MessageLookupByLibrary.simpleMessage("Detalles de la transmisión"), "strongStrength": MessageLookupByLibrary.simpleMessage("Segura"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Suscribirse"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Necesitas una suscripción activa de pago para habilitar el compartir."), @@ -1863,8 +1980,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Desocultado con éxito"), "suggestFeatures": MessageLookupByLibrary.simpleMessage("Sugerir una característica"), + "sunrise": MessageLookupByLibrary.simpleMessage("Sobre el horizonte"), "support": MessageLookupByLibrary.simpleMessage("Soporte"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Sincronización detenida"), "syncing": MessageLookupByLibrary.simpleMessage("Sincronizando..."), @@ -1875,7 +1993,7 @@ class MessageLookup extends MessageLookupByLibrary { "tapToUnlock": MessageLookupByLibrary.simpleMessage("Toca para desbloquear"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Toca para subir"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Parece que algo salió mal. Por favor, vuelve a intentarlo después de algún tiempo. Si el error persiste, ponte en contacto con nuestro equipo de soporte."), "terminate": MessageLookupByLibrary.simpleMessage("Terminar"), @@ -1899,7 +2017,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Estos elementos se eliminarán de tu dispositivo."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Se borrarán de todos los álbumes."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1920,14 +2038,21 @@ class MessageLookup extends MessageLookupByLibrary { "thisIsPersonVerificationId": m97, "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( "Esta es tu ID de verificación"), + "thisWeekThroughTheYears": MessageLookupByLibrary.simpleMessage( + "Esta semana a través de los años"), + "thisWeekXYearsAgo": m98, "thisWillLogYouOutOfTheFollowingDevice": MessageLookupByLibrary.simpleMessage( "Esto cerrará la sesión del siguiente dispositivo:"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( "¡Esto cerrará la sesión de este dispositivo!"), + "thisWillMakeTheDateAndTimeOfAllSelected": + MessageLookupByLibrary.simpleMessage( + "Esto hará que la fecha y la hora de todas las fotos seleccionadas sean las mismas."), "thisWillRemovePublicLinksOfAllSelectedQuickLinks": MessageLookupByLibrary.simpleMessage( "Esto eliminará los enlaces públicos de todos los enlaces rápidos seleccionados."), + "throughTheYears": m99, "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": MessageLookupByLibrary.simpleMessage( "Para habilitar el bloqueo de la aplicación, por favor configura el código de acceso del dispositivo o el bloqueo de pantalla en los ajustes del sistema."), @@ -1943,6 +2068,8 @@ class MessageLookup extends MessageLookupByLibrary { "trash": MessageLookupByLibrary.simpleMessage("Papelera"), "trashDaysLeft": m100, "trim": MessageLookupByLibrary.simpleMessage("Ajustar duración"), + "tripInYear": m101, + "tripToLocation": m102, "trustedContacts": MessageLookupByLibrary.simpleMessage("Contactos de confianza"), "trustedInviteBody": m103, @@ -2062,7 +2189,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "No admitimos la edición de fotos y álbumes que aún no son tuyos"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Poco segura"), "welcomeBack": MessageLookupByLibrary.simpleMessage("¡Bienvenido de nuevo!"), @@ -2071,7 +2198,7 @@ class MessageLookup extends MessageLookupByLibrary { "Un contacto de confianza puede ayudar a recuperar sus datos."), "yearShort": MessageLookupByLibrary.simpleMessage("año"), "yearly": MessageLookupByLibrary.simpleMessage("Anualmente"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Sí"), "yesCancel": MessageLookupByLibrary.simpleMessage("Sí, cancelar"), "yesConvertToViewer": @@ -2085,6 +2212,7 @@ class MessageLookup extends MessageLookupByLibrary { "yesResetPerson": MessageLookupByLibrary.simpleMessage("Si, eliminar persona"), "you": MessageLookupByLibrary.simpleMessage("Tu"), + "youAndThem": m112, "youAreOnAFamilyPlan": MessageLookupByLibrary.simpleMessage("¡Estás en un plan familiar!"), "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage( @@ -2103,7 +2231,7 @@ class MessageLookup extends MessageLookupByLibrary { "No puedes compartir contigo mismo"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "No tienes ningún elemento archivado."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("Tu cuenta ha sido eliminada"), "yourMap": MessageLookupByLibrary.simpleMessage("Tu mapa"), diff --git a/mobile/lib/generated/intl/messages_eu.dart b/mobile/lib/generated/intl/messages_eu.dart new file mode 100644 index 0000000000..c053d3cecd --- /dev/null +++ b/mobile/lib/generated/intl/messages_eu.dart @@ -0,0 +1,644 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a eu locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes +// ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'eu'; + + static String m8(count) => + "${Intl.plural(count, zero: 'Parte hartzailerik ez', one: 'Parte hartzaile 1', other: '${count} Parte hartzaile')}"; + + static String m13(user) => + "${user}-(e)k ezin izango du argazki gehiago gehitu album honetan \n\nBaina haiek gehitutako argazkiak kendu ahal izango dituzte"; + + static String m14(isFamilyMember, storageAmountInGb) => + "${Intl.select(isFamilyMember, { + 'true': 'Zure familiak ${storageAmountInGb} GB eskatu du dagoeneko', + 'false': 'Zuk ${storageAmountInGb} GB eskatu duzu dagoeneko', + 'other': 'Zuk ${storageAmountInGb} GB eskatu duzu dagoeneko!', + })}"; + + static String m23(albumName) => + "Honen bidez ${albumName} eskuratzeko esteka publikoa ezabatuko da."; + + static String m24(supportEmail) => + "Mesedez, bidali e-maila ${supportEmail}-era zure erregistratutako e-mail helbidetik"; + + static String m29(email) => + "${email}-(e)k ez du Ente konturik. \n\nBidali gonbidapena argazkiak partekatzeko."; + + static String m35(storageAmountInGB) => + "${storageAmountInGB} GB norbaitek ordainpeko plan batean sartzen denean zure kodea aplikatzen badu"; + + static String m45(expiryTime) => + "Esteka epe honetan iraungiko da: ${expiryTime}"; + + static String m48(count, formattedCount) => + "${Intl.plural(count, zero: 'oroitzapenik ez', one: 'oroitzapen ${formattedCount}', other: '${formattedCount} oroitzapen')}"; + + static String m53(familyAdminEmail) => + "Mesedez, jarri harremanetan ${familyAdminEmail}-(r)ekin zure kodea aldatzeko."; + + static String m55(passwordStrengthValue) => + "Pasahitzaren indarra: ${passwordStrengthValue}"; + + static String m71(storageInGB) => + "3. Bai zuk bai haiek ${storageInGB} GB* dohainik izango duzue"; + + static String m72(userEmail) => + "${userEmail} partekatutako album honetatik ezabatuko da \n\nHaiek gehitutako argazki guztiak ere ezabatuak izango dira albumetik"; + + static String m77(count) => "${count} hautatuta"; + + static String m78(count, yourCount) => + "${count} hautatuta (${yourCount} zureak)"; + + static String m80(verificationID) => + "Hau da nire Egiaztatze IDa: ${verificationID} ente.io-rako."; + + static String m81(verificationID) => + "Ei, baieztatu ahal duzu hau dela zure ente.io Egiaztatze IDa?: ${verificationID}"; + + static String m82(referralCode, referralStorageInGB) => + "Sartu erreferentzia kodea: ${referralCode}\n\nAplikatu hemen: Ezarpenak → Orokorra→ Erreferentziak, ${referralStorageInGB} GB dohainik izateko ordainpeko plan batean \n\nhttps://ente.io"; + + static String m83(numberOfPeople) => + "${Intl.plural(numberOfPeople, zero: 'Partekatu pertsona zehatz batzuekin', one: 'Partekatu pertsona batekin', other: 'Partekatu ${numberOfPeople} pertsonarekin')}"; + + static String m85(fileType) => "${fileType} hau zure gailutik ezabatuko da."; + + static String m86(fileType) => + "${fileType} hau Ente-n eta zure gailuan dago."; + + static String m87(fileType) => "${fileType} hau Ente-tik ezabatuko da."; + + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; + + static String m96(storageAmountInGB) => + "Haiek ere lortuko dute ${storageAmountInGB} GB"; + + static String m97(email) => "Hau da ${email}-(r)en Egiaztatze IDa"; + + static String m108(email) => "Egiaztatu ${email}"; + + static String m110(email) => + "Mezua bidali dugu ${email} helbidera"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("Ongi etorri berriro!"), + "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( + "Nire datuak puntutik puntura zifratuta daudenez, pasahitza ahaztuz gero nire datuak gal ditzakedala ulertzen dut."), + "activeSessions": MessageLookupByLibrary.simpleMessage("Saio aktiboak"), + "addANewEmail": + MessageLookupByLibrary.simpleMessage("Gehitu e-mail berria"), + "addCollaborator": + MessageLookupByLibrary.simpleMessage("Gehitu laguntzailea"), + "addMore": MessageLookupByLibrary.simpleMessage("Gehitu gehiago"), + "addViewer": MessageLookupByLibrary.simpleMessage("Gehitu ikuslea"), + "addedAs": MessageLookupByLibrary.simpleMessage("Honela gehituta:"), + "addingToFavorites": + MessageLookupByLibrary.simpleMessage("Gogokoetan gehitzen..."), + "advancedSettings": MessageLookupByLibrary.simpleMessage("Aurreratuak"), + "after1Day": MessageLookupByLibrary.simpleMessage("Egun bat barru"), + "after1Hour": MessageLookupByLibrary.simpleMessage("Ordubete barru"), + "after1Month": + MessageLookupByLibrary.simpleMessage("Hilabete bat barru"), + "after1Week": MessageLookupByLibrary.simpleMessage("Astebete barru"), + "after1Year": MessageLookupByLibrary.simpleMessage("Urtebete barru"), + "albumOwner": MessageLookupByLibrary.simpleMessage("Jabea"), + "albumParticipantsCount": m8, + "albumUpdated": + MessageLookupByLibrary.simpleMessage("Albuma eguneratuta"), + "albums": MessageLookupByLibrary.simpleMessage("Albumak"), + "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Utzi esteka duen jendeari ere album partekatuan argazkiak gehitzen."), + "allowAddingPhotos": + MessageLookupByLibrary.simpleMessage("Baimendu argazkiak gehitzea"), + "allowDownloads": + MessageLookupByLibrary.simpleMessage("Baimendu jaitsierak"), + "apply": MessageLookupByLibrary.simpleMessage("Aplikatu"), + "applyCodeTitle": + MessageLookupByLibrary.simpleMessage("Aplikatu kodea"), + "archive": MessageLookupByLibrary.simpleMessage("Artxiboa"), + "askDeleteReason": MessageLookupByLibrary.simpleMessage( + "Zein da zure kontua ezabatzeko arrazoi nagusia?"), + "authToChangeEmailVerificationSetting": + MessageLookupByLibrary.simpleMessage( + "Mesedez, autentifikatu emailaren egiaztatzea aldatzeko"), + "authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage( + "Mesedez, autentifikatu pantaila blokeatzeko ezarpenak aldatzeko"), + "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( + "Mesedez, autentifikatu zure emaila aldatzeko"), + "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( + "Mesedez, autentifikatu zure pasahitza aldatzeko"), + "authToConfigureTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Mesedez, autentifikatu faktore biko autentifikazioa konfiguratzeko"), + "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Mesedez, autentifikatu kontu ezabaketa hasteko"), + "authToViewTrashedFiles": MessageLookupByLibrary.simpleMessage( + "Mesedez, autentifikatu paperontzira botatako zure fitxategiak ikusteko"), + "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( + "Mesedez, autentifikatu indarrean dauden zure saioak ikusteko"), + "authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage( + "Mesedez, autentifikatu zure ezkutatutako fitxategiak ikusteko"), + "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Mesedez, autentifikatu zure berreskuratze giltza ikusteko"), + "canNotOpenBody": MessageLookupByLibrary.simpleMessage( + "Sentitzen dugu, album hau ezin da aplikazioan ireki."), + "canNotOpenTitle": + MessageLookupByLibrary.simpleMessage("Ezin dut album hau ireki"), + "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( + "Zure fitxategiak baino ezin duzu ezabatu"), + "cancel": MessageLookupByLibrary.simpleMessage("Utzi"), + "cannotAddMorePhotosAfterBecomingViewer": m13, + "change": MessageLookupByLibrary.simpleMessage("Aldatu"), + "changeEmail": MessageLookupByLibrary.simpleMessage("Aldatu e-maila"), + "changePasswordTitle": + MessageLookupByLibrary.simpleMessage("Aldatu pasahitza"), + "changePermissions": + MessageLookupByLibrary.simpleMessage("Baimenak aldatu nahi?"), + "changeYourReferralCode": MessageLookupByLibrary.simpleMessage( + "Aldatu zure erreferentzia kodea"), + "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( + "Mesedez, aztertu zure inbox (eta spam) karpetak egiaztatzea osotzeko"), + "claimFreeStorage": MessageLookupByLibrary.simpleMessage( + "Eskatu debaldeko biltegiratzea"), + "claimMore": MessageLookupByLibrary.simpleMessage("Eskatu gehiago!"), + "claimed": MessageLookupByLibrary.simpleMessage("Eskatuta"), + "claimedStorageSoFar": m14, + "codeAppliedPageTitle": + MessageLookupByLibrary.simpleMessage("Kodea aplikatuta"), + "codeChangeLimitReached": MessageLookupByLibrary.simpleMessage( + "Sentitzen dugu, zure kode aldaketa muga gainditu duzu."), + "codeCopiedToClipboard": + MessageLookupByLibrary.simpleMessage("Kodea arbelean kopiatuta"), + "codeUsedByYou": + MessageLookupByLibrary.simpleMessage("Zuk erabilitako kodea"), + "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( + "Sortu esteka bat beste pertsona batzuei zure album partekatuan arriskuak gehitu eta ikusten uzteko, naiz eta Ente aplikazio edo kontua ez izan. Oso egokia gertakizun bateko argazkiak biltzeko."), + "collaborativeLink": + MessageLookupByLibrary.simpleMessage("Parte hartzeko esteka"), + "collaborator": MessageLookupByLibrary.simpleMessage("Laguntzailea"), + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": + MessageLookupByLibrary.simpleMessage( + "Laguntzaileek argazkiak eta bideoak gehitu ahal dituzte album partekatuan."), + "collectPhotos": + MessageLookupByLibrary.simpleMessage("Bildu argazkiak"), + "confirm": MessageLookupByLibrary.simpleMessage("Baieztatu"), + "confirm2FADisable": MessageLookupByLibrary.simpleMessage( + "Seguru zaude faktore biko autentifikazioa deuseztatu nahi duzula?"), + "confirmAccountDeletion": + MessageLookupByLibrary.simpleMessage("Baieztatu Kontu Ezabaketa"), + "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( + "Bai, betiko ezabatu nahi dut kontu hau eta berarekiko data aplikazio guztietan zehar."), + "confirmPassword": + MessageLookupByLibrary.simpleMessage("Egiaztatu pasahitza"), + "confirmRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Egiaztatu berreskuratze kodea"), + "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Egiaztatu zure berreskuratze giltza"), + "contactSupport": + MessageLookupByLibrary.simpleMessage("Kontaktatu laguntza"), + "continueLabel": MessageLookupByLibrary.simpleMessage("Jarraitu"), + "copyLink": MessageLookupByLibrary.simpleMessage("Kopiatu esteka"), + "copypasteThisCodentoYourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Kopiatu eta itsatsi kode hau zure autentifikazio aplikaziora"), + "createAccount": MessageLookupByLibrary.simpleMessage("Sortu kontua"), + "createAlbumActionHint": MessageLookupByLibrary.simpleMessage( + "Luze klikatu argazkiak hautatzeko eta klikatu + albuma sortzeko"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("Sortu kontu berria"), + "createPublicLink": + MessageLookupByLibrary.simpleMessage("Sortu esteka publikoa"), + "creatingLink": + MessageLookupByLibrary.simpleMessage("Esteka sortzen..."), + "custom": MessageLookupByLibrary.simpleMessage("Aukeran"), + "decrypting": MessageLookupByLibrary.simpleMessage("Deszifratzen..."), + "deleteAccount": + MessageLookupByLibrary.simpleMessage("Ezabatu zure kontua"), + "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( + "Sentitzen dugu zu joateaz. Mesedez, utziguzu zure feedbacka hobetzen laguntzeko."), + "deleteAccountPermanentlyButton": + MessageLookupByLibrary.simpleMessage("Ezabatu Kontua Betiko"), + "deleteAlbum": MessageLookupByLibrary.simpleMessage("Ezabatu albuma"), + "deleteAlbumDialog": MessageLookupByLibrary.simpleMessage( + "Ezabatu nahi dituzu album honetan dauden argazkiak (eta bideoak) parte diren beste album guztietatik ere?"), + "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( + "Mesedez, bidali e-mail bat account-deletion@ente.io helbidea zure erregistatutako helbidetik."), + "deleteFromBoth": + MessageLookupByLibrary.simpleMessage("Ezabatu bietatik"), + "deleteFromDevice": + MessageLookupByLibrary.simpleMessage("Ezabatu gailutik"), + "deleteFromEnte": + MessageLookupByLibrary.simpleMessage("Ezabatu Ente-tik"), + "deletePhotos": + MessageLookupByLibrary.simpleMessage("Ezabatu argazkiak"), + "deleteReason1": MessageLookupByLibrary.simpleMessage( + "Behar dudan ezaugarre nagusiren bat falta zaio"), + "deleteReason2": MessageLookupByLibrary.simpleMessage( + "Aplikazioak edo ezaugarriren batek ez du funtzionatzen nik espero nuenez"), + "deleteReason3": MessageLookupByLibrary.simpleMessage( + "Gustukoago dudan beste zerbitzu bat aurkitu dut"), + "deleteReason4": MessageLookupByLibrary.simpleMessage( + "Nire arrazoia ez dago zerrendan"), + "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( + "Zure eskaera 72 ordutan prozesatua izango da."), + "deleteSharedAlbum": MessageLookupByLibrary.simpleMessage( + "Partekatutako albuma ezabatu?"), + "deleteSharedAlbumDialogBody": MessageLookupByLibrary.simpleMessage( + "Albuma guztiontzat ezabatuko da \n\nAlbum honetan dauden beste pertsonek partekatutako argazkiak ezin izango dituzu eskuratu"), + "details": MessageLookupByLibrary.simpleMessage("Detaileak"), + "disableDownloadWarningBody": MessageLookupByLibrary.simpleMessage( + "Ikusleek pantaila-irudiak atera ahal dituzte, edo kanpoko tresnen bidez zure argazkien kopiak gorde"), + "disableDownloadWarningTitle": + MessageLookupByLibrary.simpleMessage("Mesedez, ohartu"), + "disableLinkMessage": m23, + "discover": MessageLookupByLibrary.simpleMessage("Aurkitu"), + "discover_babies": MessageLookupByLibrary.simpleMessage("Umeak"), + "discover_celebrations": + MessageLookupByLibrary.simpleMessage("Ospakizunak"), + "discover_food": MessageLookupByLibrary.simpleMessage("Janaria"), + "discover_greenery": MessageLookupByLibrary.simpleMessage("Hostoa"), + "discover_hills": MessageLookupByLibrary.simpleMessage("Muinoak"), + "discover_identity": MessageLookupByLibrary.simpleMessage("Nortasuna"), + "discover_memes": MessageLookupByLibrary.simpleMessage("Memeak"), + "discover_notes": MessageLookupByLibrary.simpleMessage("Oharrak"), + "discover_pets": MessageLookupByLibrary.simpleMessage("Etxe-animaliak"), + "discover_receipts": + MessageLookupByLibrary.simpleMessage("Ordainagiriak"), + "discover_screenshots": + MessageLookupByLibrary.simpleMessage("Pantaila argazkiak"), + "discover_selfies": MessageLookupByLibrary.simpleMessage("Selfiak"), + "discover_sunset": + MessageLookupByLibrary.simpleMessage("Eguzki-sartzea"), + "discover_visiting_cards": + MessageLookupByLibrary.simpleMessage("Bisita txartelak"), + "discover_wallpapers": + MessageLookupByLibrary.simpleMessage("Horma-paperak"), + "doThisLater": MessageLookupByLibrary.simpleMessage("Egin hau geroago"), + "done": MessageLookupByLibrary.simpleMessage("Eginda"), + "dropSupportEmail": m24, + "eligible": MessageLookupByLibrary.simpleMessage("aukerakoak"), + "email": MessageLookupByLibrary.simpleMessage("E-maila"), + "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage( + "Helbide hau badago erregistratuta lehendik."), + "emailNoEnteAccount": m29, + "emailNotRegistered": MessageLookupByLibrary.simpleMessage( + "Helbide hau ez dago erregistratuta."), + "encryption": MessageLookupByLibrary.simpleMessage("Zifratzea"), + "encryptionKeys": + MessageLookupByLibrary.simpleMessage("Zifratze giltzak"), + "entePhotosPerm": MessageLookupByLibrary.simpleMessage( + "Ente-k zure baimena behar du zure argazkiak gordetzeko"), + "enterCode": MessageLookupByLibrary.simpleMessage("Sartu kodea"), + "enterCodeDescription": MessageLookupByLibrary.simpleMessage( + "Sartu zure lagunak emandako kodea, biontzat debaldeko biltegiratzea lortzeko"), + "enterEmail": MessageLookupByLibrary.simpleMessage("Sartu e-maila"), + "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Sartu pasahitz berri bat, zure data zifratu ahal izateko"), + "enterPassword": + MessageLookupByLibrary.simpleMessage("Sartu pasahitza"), + "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Sartu pasahitz bat, zure data deszifratu ahal izateko"), + "enterReferralCode": + MessageLookupByLibrary.simpleMessage("Sartu erreferentzia kodea"), + "enterThe6digitCodeFromnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Sartu 6 digituko kodea zure autentifikazio aplikaziotik"), + "enterValidEmail": MessageLookupByLibrary.simpleMessage( + "Mesedez, sartu zuzena den helbidea."), + "enterYourEmailAddress": MessageLookupByLibrary.simpleMessage( + "Sartu zure helbide elektronikoa"), + "enterYourPassword": + MessageLookupByLibrary.simpleMessage("Sartu zure pasahitza"), + "enterYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Sartu zure berreskuratze giltza"), + "expiredLinkInfo": MessageLookupByLibrary.simpleMessage( + "Esteka hau iraungi da. Mesedez, aukeratu beste epemuga bat edo deuseztatu estekaren epemuga."), + "failedToApplyCode": + MessageLookupByLibrary.simpleMessage("Akatsa kodea aplikatzean"), + "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( + "Ezin dugu zure erreferentziaren detailerik lortu. Mesedez, saiatu berriro geroago."), + "failedToLoadAlbums": + MessageLookupByLibrary.simpleMessage("Errorea albumak kargatzen"), + "faq": MessageLookupByLibrary.simpleMessage("FAQ"), + "feedback": MessageLookupByLibrary.simpleMessage("Feedbacka"), + "forgotPassword": + MessageLookupByLibrary.simpleMessage("Ahaztu pasahitza"), + "freeStorageClaimed": MessageLookupByLibrary.simpleMessage( + "Debaldeko biltegiratzea eskatuta"), + "freeStorageOnReferralSuccess": m35, + "freeStorageUsable": MessageLookupByLibrary.simpleMessage( + "Debaldeko biltegiratzea erabilgarri"), + "generatingEncryptionKeys": + MessageLookupByLibrary.simpleMessage("Zifratze giltzak sortzen..."), + "help": MessageLookupByLibrary.simpleMessage("Laguntza"), + "hidden": MessageLookupByLibrary.simpleMessage("Ezkutatuta"), + "howItWorks": + MessageLookupByLibrary.simpleMessage("Nola funtzionatzen duen"), + "howToViewShareeVerificationID": MessageLookupByLibrary.simpleMessage( + "Mesedez, eska iezaiozu ezarpenen landutako bere e-mail helbidean luze klikatzeko, eta egiaztatu gailu bietako IDak bat direla."), + "iOSLockOut": MessageLookupByLibrary.simpleMessage( + "Autentifikazio biometrikoa deuseztatuta dago. Mesedez, blokeatu eta desblokeatu zure pantaila indarrean jartzeko."), + "importing": MessageLookupByLibrary.simpleMessage("Inportatzen...."), + "incorrectPasswordTitle": + MessageLookupByLibrary.simpleMessage("Pasahitz okerra"), + "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage( + "Sartu duzun berreskuratze giltza ez da zuzena"), + "incorrectRecoveryKeyTitle": MessageLookupByLibrary.simpleMessage( + "Berreskuratze giltza ez da zuzena"), + "insecureDevice": + MessageLookupByLibrary.simpleMessage("Gailua ez da segurua"), + "invalidEmailAddress": + MessageLookupByLibrary.simpleMessage("Helbide hau ez da zuzena"), + "invalidKey": MessageLookupByLibrary.simpleMessage("Kode okerra"), + "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Sartu duzun berreskuratze kodea ez da zuzena. Mesedez, ziurtatu 24 hitz duela, eta egiaztatu hitz bakoitzaren idazkera. \n\nBerreskuratze kode zaharren bat sartu baduzu, ziurtatu 64 karaktere duela, eta egiaztatu horietako bakoitza."), + "inviteToEnte": + MessageLookupByLibrary.simpleMessage("Gonbidatu Ente-ra"), + "inviteYourFriends": + MessageLookupByLibrary.simpleMessage("Gonbidatu zure lagunak"), + "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( + "Hautatutako elementuak album honetatik kenduko dira"), + "keepPhotos": MessageLookupByLibrary.simpleMessage("Gorde Argazkiak"), + "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( + "Mesedez, lagun gaitzazu informazio honekin"), + "linkDeviceLimit": MessageLookupByLibrary.simpleMessage("Gailu muga"), + "linkEnabled": MessageLookupByLibrary.simpleMessage("Indarrean"), + "linkExpired": MessageLookupByLibrary.simpleMessage("Iraungita"), + "linkExpiresOn": m45, + "linkExpiry": MessageLookupByLibrary.simpleMessage("Estekaren epemuga"), + "linkHasExpired": + MessageLookupByLibrary.simpleMessage("Esteka iraungi da"), + "linkNeverExpires": MessageLookupByLibrary.simpleMessage("Inoiz ez"), + "lockButtonLabel": MessageLookupByLibrary.simpleMessage("Blokeatu"), + "logInLabel": MessageLookupByLibrary.simpleMessage("Sartu"), + "loginTerms": MessageLookupByLibrary.simpleMessage( + "Sartzeko klikatuz, zerbitzu baldintzak eta pribatutasun politikak onartzen ditut"), + "lostDevice": + MessageLookupByLibrary.simpleMessage("Gailua galdu duzu?"), + "machineLearning": + MessageLookupByLibrary.simpleMessage("Ikasketa automatikoa"), + "magicSearch": MessageLookupByLibrary.simpleMessage("Bilaketa magikoa"), + "manage": MessageLookupByLibrary.simpleMessage("Kudeatu"), + "manageDeviceStorage": + MessageLookupByLibrary.simpleMessage("Kudeatu gailuaren katxea"), + "manageDeviceStorageDesc": MessageLookupByLibrary.simpleMessage( + "Berrikusi eta garbitu katxe lokalaren biltegiratzea."), + "manageLink": MessageLookupByLibrary.simpleMessage("Kudeatu esteka"), + "manageParticipants": MessageLookupByLibrary.simpleMessage("Kudeatu"), + "memoryCount": m48, + "mlConsent": MessageLookupByLibrary.simpleMessage( + "Aktibatu ikasketa automatikoa"), + "mlConsentConfirmation": MessageLookupByLibrary.simpleMessage( + "Ulertzen dut, eta ikasketa automatikoa aktibatu nahi dut"), + "mlConsentDescription": MessageLookupByLibrary.simpleMessage( + "Ikasketa automatikoa aktibatuz gero, Ente-k fitxategietatik informazioa aterako du (ad. argazkien geometria), zurekin partekatutako argazkietatik ere.\n\nHau zure gailuan gertatuko da, eta sortutako informazio biometrikoa puntutik puntura zifratuta egongo da."), + "mlConsentPrivacy": MessageLookupByLibrary.simpleMessage( + "Mesedez, klikatu hemen gure pribatutasun politikan ezaugarri honi buruz detaile gehiago izateko"), + "mlConsentTitle": MessageLookupByLibrary.simpleMessage( + "Ikasketa automatikoa aktibatuko?"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Ertaina"), + "movedToTrash": MessageLookupByLibrary.simpleMessage("Zarama mugituta"), + "never": MessageLookupByLibrary.simpleMessage("Inoiz ez"), + "newAlbum": MessageLookupByLibrary.simpleMessage("Album berria"), + "noDeviceLimit": MessageLookupByLibrary.simpleMessage("Bat ere ez"), + "noRecoveryKey": + MessageLookupByLibrary.simpleMessage("Berreskuratze giltzarik ez?"), + "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( + "Gure puntutik-puntura zifratze protokoloa dela eta, zure data ezin da deszifratu zure pasahitza edo berreskuratze giltzarik gabe"), + "ok": MessageLookupByLibrary.simpleMessage("Ondo"), + "onlyFamilyAdminCanChangeCode": m53, + "oops": MessageLookupByLibrary.simpleMessage("Ai!"), + "oopsSomethingWentWrong": MessageLookupByLibrary.simpleMessage( + "Oops, zerbait txarto joan da"), + "orPickAnExistingOne": + MessageLookupByLibrary.simpleMessage("Edo aukeratu lehengo bat"), + "password": MessageLookupByLibrary.simpleMessage("Pasahitza"), + "passwordChangedSuccessfully": + MessageLookupByLibrary.simpleMessage("Pasahitza zuzenki aldatuta"), + "passwordLock": + MessageLookupByLibrary.simpleMessage("Pasahitza blokeoa"), + "passwordStrength": m55, + "passwordWarning": MessageLookupByLibrary.simpleMessage( + "Ezin dugu zure pasahitza gorde, beraz, ahazten baduzu, ezin dugu zure data deszifratu"), + "peopleUsingYourCode": MessageLookupByLibrary.simpleMessage( + "Jendea zure kodea erabiltzen"), + "photoGridSize": + MessageLookupByLibrary.simpleMessage("Argazki sarearen tamaina"), + "photoSmallCase": MessageLookupByLibrary.simpleMessage("argazkia"), + "pleaseTryAgain": + MessageLookupByLibrary.simpleMessage("Saiatu berriro, mesedez"), + "pleaseWait": + MessageLookupByLibrary.simpleMessage("Mesedez, itxaron..."), + "privacyPolicyTitle": + MessageLookupByLibrary.simpleMessage("Pribatutasun Politikak"), + "publicLinkEnabled": + MessageLookupByLibrary.simpleMessage("Esteka publikoa indarrean"), + "recover": MessageLookupByLibrary.simpleMessage("Berreskuratu"), + "recoverAccount": + MessageLookupByLibrary.simpleMessage("Berreskuratu kontua"), + "recoverButton": MessageLookupByLibrary.simpleMessage("Berreskuratu"), + "recoveryKey": + MessageLookupByLibrary.simpleMessage("Berreskuratze giltza"), + "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Berreskuratze giltza arbelean kopiatu da"), + "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( + "Zure pasahitza ahazten baduzu, zure datuak berreskuratzeko modu bakarra gailu honen bidez izango da."), + "recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage( + "Guk ez dugu gailu hau gordetzen; mesedez, gorde 24 hitzeko giltza hau lege seguru batean."), + "recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage( + "Primeran! Zure berreskuratze giltza zuzena da. Eskerrik asko egiaztatzeagatik.\n\nMesedez, gogoratu zure berreskuratze giltza leku seguruan gordetzea."), + "recoveryKeyVerified": MessageLookupByLibrary.simpleMessage( + "Berreskuratze giltza egiaztatuta"), + "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( + "Pasahitza ahazten baduzu, zure berreskuratze giltza argazkiak berreskuratzeko modu bakarra da. Berreskuratze giltza hemen aurkitu ahal duzu Ezarpenak > Kontua.\n\nMesedez sartu hemen zure berreskuratze giltza ondo gorde duzula egiaztatzeko."), + "recoverySuccessful": MessageLookupByLibrary.simpleMessage( + "Berreskurapen arrakastatsua!"), + "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( + "Gailu hau ez da zure pasahitza egiaztatzeko bezain indartsua, baina gailu guztietan funtzionatzen duen modu batean birsortu ahal dugu. \n\nMesedez sartu zure berreskuratze giltza erabiliz eta birsortu zure pasahitza (aurreko berbera erabili ahal duzu nahi izanez gero)."), + "recreatePasswordTitle": + MessageLookupByLibrary.simpleMessage("Berrezarri pasahitza"), + "referralStep1": MessageLookupByLibrary.simpleMessage( + "1. Eman kode hau zure lagunei"), + "referralStep2": MessageLookupByLibrary.simpleMessage( + "2. Haiek ordainpeko plan batean sinatu behar dute"), + "referralStep3": m71, + "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( + "Erreferentziak momentuz geldituta daude"), + "remove": MessageLookupByLibrary.simpleMessage("Kendu"), + "removeFromAlbum": + MessageLookupByLibrary.simpleMessage("Kendu albumetik"), + "removeFromAlbumTitle": + MessageLookupByLibrary.simpleMessage("Albumetik kendu?"), + "removeLink": MessageLookupByLibrary.simpleMessage("Ezabatu esteka"), + "removeParticipant": + MessageLookupByLibrary.simpleMessage("Kendu parte hartzailea"), + "removeParticipantBody": m72, + "removePublicLink": + MessageLookupByLibrary.simpleMessage("Ezabatu esteka publikoa"), + "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( + "Kentzen ari zaren elementu batzuk beste pertsona batzuek gehitu zituzten, beraz ezin izango dituzu eskuratu"), + "removeWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Ezabatuko?"), + "removingFromFavorites": + MessageLookupByLibrary.simpleMessage("Gogokoetatik kentzen..."), + "resendEmail": + MessageLookupByLibrary.simpleMessage("Birbidali e-maila"), + "resetPasswordTitle": + MessageLookupByLibrary.simpleMessage("Berrezarri pasahitza"), + "saveKey": MessageLookupByLibrary.simpleMessage("Gorde giltza"), + "saveYourRecoveryKeyIfYouHaventAlready": + MessageLookupByLibrary.simpleMessage( + "Gorde zure berreskuratze giltza ez baduzu oraindik egin"), + "scanCode": MessageLookupByLibrary.simpleMessage("Eskaneatu kodea"), + "scanThisBarcodeWithnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Eskaneatu barra kode hau zure autentifikazio aplikazioaz"), + "selectReason": + MessageLookupByLibrary.simpleMessage("Aukeratu arrazoia"), + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "sendEmail": MessageLookupByLibrary.simpleMessage("Bidali mezua"), + "sendInvite": + MessageLookupByLibrary.simpleMessage("Bidali gonbidapena"), + "sendLink": MessageLookupByLibrary.simpleMessage("Bidali esteka"), + "setAPassword": + MessageLookupByLibrary.simpleMessage("Ezarri pasahitza"), + "setPasswordTitle": + MessageLookupByLibrary.simpleMessage("Ezarri pasahitza"), + "setupComplete": + MessageLookupByLibrary.simpleMessage("Prestaketa burututa"), + "shareALink": MessageLookupByLibrary.simpleMessage("Partekatu esteka"), + "shareMyVerificationID": m80, + "shareTextConfirmOthersVerificationID": m81, + "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( + "Jaitsi Ente argazkiak eta bideoak jatorrizko kalitatean errez partekatu ahal izateko \n\nhttps://ente.io"), + "shareTextReferralCode": m82, + "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( + "Partekatu Ente erabiltzen ez dutenekin"), + "shareWithPeopleSectionTitle": m83, + "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( + "Sortu partekatutako eta parte hartzeko albumak beste Ente erabiltzaileekin, debaldeko planak dituztenak barne."), + "sharing": MessageLookupByLibrary.simpleMessage("Partekatzen..."), + "signUpTerms": MessageLookupByLibrary.simpleMessage( + "Zerbitzu baldintzak eta pribatutasun politikak onartzen ditut"), + "singleFileDeleteFromDevice": m85, + "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( + "Album guztietatik ezabatuko da."), + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, + "someoneSharingAlbumsWithYouShouldSeeTheSameId": + MessageLookupByLibrary.simpleMessage( + "Zurekin albumak partekatzen dituen norbaitek ID berbera ikusi beharko luke bere gailuan."), + "somethingWentWrong": + MessageLookupByLibrary.simpleMessage("Zerbait oker joan da"), + "somethingWentWrongPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Zerbait ez da ondo joan, mesedez, saiatu berriro"), + "sorry": MessageLookupByLibrary.simpleMessage("Barkatu"), + "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( + "Sentitzen dut, ezin izan dugu zure gogokoetan gehitu!"), + "sorryCouldNotRemoveFromFavorites": + MessageLookupByLibrary.simpleMessage( + "Sentitzen dugu, ezin izan dugu zure gogokoetatik kendu!"), + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": + MessageLookupByLibrary.simpleMessage( + "Tamalez, ezin dugu giltza segururik sortu gailu honetan. \n\nMesedez, eman izena beste gailu batetik."), + "storageInGB": m90, + "strongStrength": MessageLookupByLibrary.simpleMessage("Gogorra"), + "subscribe": MessageLookupByLibrary.simpleMessage("Harpidetu"), + "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( + "Ordainpeko harpidetza behar duzu partekatzea aktibatzeko."), + "tapToCopy": MessageLookupByLibrary.simpleMessage("jo kopiatzeko"), + "tapToEnterCode": + MessageLookupByLibrary.simpleMessage("Klikatu kodea sartzeko"), + "terminate": MessageLookupByLibrary.simpleMessage("Bukatu"), + "terminateSession": + MessageLookupByLibrary.simpleMessage("Saioa bukatu?"), + "termsOfServicesTitle": + MessageLookupByLibrary.simpleMessage("Baldintzak"), + "theyAlsoGetXGb": m96, + "thisCanBeUsedToRecoverYourAccountIfYou": + MessageLookupByLibrary.simpleMessage( + "Hau zure kontua berreskuratzeko erabili ahal duzu, zure bigarren faktorea ahaztuz gero"), + "thisDevice": MessageLookupByLibrary.simpleMessage("Gailu hau"), + "thisIsPersonVerificationId": m97, + "thisIsYourVerificationId": + MessageLookupByLibrary.simpleMessage("Hau da zure Egiaztatze IDa"), + "thisWillLogYouOutOfTheFollowingDevice": + MessageLookupByLibrary.simpleMessage( + "Hau egiteak hurrengo gailutik aterako zaitu:"), + "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( + "Hau egiteak gailu honetatik aterako zaitu!"), + "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( + "Zure pasahitza berrezartzeko, mesedez egiaztatu zure e-maila lehenengoz."), + "total": MessageLookupByLibrary.simpleMessage("osotara"), + "trash": MessageLookupByLibrary.simpleMessage("Zarama"), + "tryAgain": MessageLookupByLibrary.simpleMessage("Saiatu berriro"), + "twofactorAuthenticationHasBeenDisabled": + MessageLookupByLibrary.simpleMessage( + "Faktore biko autentifikazioa deuseztatua izan da"), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage( + "Faktore biko autentifikatzea"), + "twofactorSetup": + MessageLookupByLibrary.simpleMessage("Faktore biko ezarpena"), + "unavailableReferralCode": MessageLookupByLibrary.simpleMessage( + "Sentitzen dugu, kode hau ezin da erabili."), + "uncategorized": + MessageLookupByLibrary.simpleMessage("Kategori gabekoa"), + "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( + "Biltegiratze erabilgarria zure oraingo planaren arabera mugatuta dago. Soberan eskatutako biltegiratzea automatikoki erabili ahal izango duzu zure plan gaurkotzen duzunean."), + "useRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Erabili berreskuratze giltza"), + "verificationId": + MessageLookupByLibrary.simpleMessage("Egiaztatze IDa"), + "verify": MessageLookupByLibrary.simpleMessage("Egiaztatu"), + "verifyEmail": + MessageLookupByLibrary.simpleMessage("Egiaztatu e-maila"), + "verifyEmailID": m108, + "verifyPassword": + MessageLookupByLibrary.simpleMessage("Egiaztatu pasahitza"), + "verifyingRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Berreskuratze giltza egiaztatuz..."), + "videoSmallCase": MessageLookupByLibrary.simpleMessage("bideoa"), + "viewRecoveryKey": + MessageLookupByLibrary.simpleMessage("Ikusi berreskuratze kodea"), + "viewer": MessageLookupByLibrary.simpleMessage("Ikuslea"), + "weHaveSendEmailTo": m110, + "weakStrength": MessageLookupByLibrary.simpleMessage("Ahula"), + "welcomeBack": + MessageLookupByLibrary.simpleMessage("Ongi etorri berriro!"), + "yesConvertToViewer": + MessageLookupByLibrary.simpleMessage("Bai, egin ikusle"), + "yesDelete": MessageLookupByLibrary.simpleMessage("Bai, ezabatu"), + "yesRemove": MessageLookupByLibrary.simpleMessage("Bai, ezabatu"), + "you": MessageLookupByLibrary.simpleMessage("Zu"), + "youCanAtMaxDoubleYourStorage": MessageLookupByLibrary.simpleMessage( + "* Gehienez zure biltegiratzea bikoiztu ahal duzu"), + "youCannotShareWithYourself": MessageLookupByLibrary.simpleMessage( + "Ezin duzu zeure buruarekin partekatu"), + "yourAccountHasBeenDeleted": + MessageLookupByLibrary.simpleMessage("Zure kontua ezabatua izan da") + }; +} diff --git a/mobile/lib/generated/intl/messages_fa.dart b/mobile/lib/generated/intl/messages_fa.dart index 3eacf434fa..5139380509 100644 --- a/mobile/lib/generated/intl/messages_fa.dart +++ b/mobile/lib/generated/intl/messages_fa.dart @@ -20,26 +20,26 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'fa'; - static String m18(versionValue) => "نسخه: ${versionValue}"; + static String m9(versionValue) => "نسخه: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} رایگان"; - static String m31(supportEmail) => + static String m24(supportEmail) => "لطفا یک ایمیل از آدرس ایمیلی که ثبت نام کردید به ${supportEmail} ارسال کنید"; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "قدرت رمز عبور: ${passwordStrengthValue}"; - static String m70(storeName) => "به ما در ${storeName} امتیاز دهید"; + static String m66(storeName) => "به ما در ${storeName} امتیاز دهید"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} از ${totalAmount} ${totalStorageUnit} استفاده شده"; static String m108(email) => "تایید ${email}"; - static String m2(email) => + static String m110(email) => "ما یک ایمیل به ${email} ارسال کرده‌ایم"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -75,7 +75,7 @@ class MessageLookup extends MessageLookupByLibrary { "androidCancelButton": MessageLookupByLibrary.simpleMessage("لغو"), "androidIosWebDesktop": MessageLookupByLibrary.simpleMessage( "اندروید، آی‌اواس، وب، رایانه رومیزی"), - "appVersion": m18, + "appVersion": m9, "archive": MessageLookupByLibrary.simpleMessage("بایگانی"), "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( "آیا برای خارج شدن مطمئن هستید؟"), @@ -86,7 +86,7 @@ class MessageLookup extends MessageLookupByLibrary { "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( "لطفاً برای مشاهده دستگاه‌های فعال خود احراز هویت کنید"), "available": MessageLookupByLibrary.simpleMessage("در دسترس"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("پوشه‌های پشتیبان گیری شده"), "backup": MessageLookupByLibrary.simpleMessage("پشتیبان گیری"), @@ -166,7 +166,7 @@ class MessageLookup extends MessageLookupByLibrary { "discord": MessageLookupByLibrary.simpleMessage("دیسکورد"), "doThisLater": MessageLookupByLibrary.simpleMessage("بعداً انجام شود"), "downloading": MessageLookupByLibrary.simpleMessage("در حال دانلود..."), - "dropSupportEmail": m31, + "dropSupportEmail": m24, "editLocationTagTitle": MessageLookupByLibrary.simpleMessage("ویرایش مکان"), "email": MessageLookupByLibrary.simpleMessage("ایمیل"), @@ -272,7 +272,7 @@ class MessageLookup extends MessageLookupByLibrary { "password": MessageLookupByLibrary.simpleMessage("رمز عبور"), "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( "رمز عبور با موفقیت تغییر کرد"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordWarning": MessageLookupByLibrary.simpleMessage( "ما این رمز عبور را ذخیره نمی‌کنیم، بنابراین اگر فراموش کنید، نمی‌توانیم اطلاعات شما را رمزگشایی کنیم"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("عکس"), @@ -292,7 +292,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("پشتیبان گیری خصوصی"), "privateSharing": MessageLookupByLibrary.simpleMessage("اشتراک گذاری خصوصی"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "recover": MessageLookupByLibrary.simpleMessage("بازیابی"), "recoverAccount": MessageLookupByLibrary.simpleMessage("بازیابی حساب کاربری"), @@ -368,7 +368,7 @@ class MessageLookup extends MessageLookupByLibrary { "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("خانوادگی"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("شما"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "strongStrength": MessageLookupByLibrary.simpleMessage("قوی"), "support": MessageLookupByLibrary.simpleMessage("پشتیبانی"), "systemTheme": MessageLookupByLibrary.simpleMessage("سیستم"), @@ -422,7 +422,7 @@ class MessageLookup extends MessageLookupByLibrary { "viewer": MessageLookupByLibrary.simpleMessage("بیننده"), "weAreOpenSource": MessageLookupByLibrary.simpleMessage("ما متن‌باز هستیم!"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("ضعیف"), "welcomeBack": MessageLookupByLibrary.simpleMessage("خوش آمدید!"), "whatsNew": MessageLookupByLibrary.simpleMessage("تغییرات جدید"), diff --git a/mobile/lib/generated/intl/messages_fr.dart b/mobile/lib/generated/intl/messages_fr.dart index ad1baa2128..564d3a1d63 100644 --- a/mobile/lib/generated/intl/messages_fr.dart +++ b/mobile/lib/generated/intl/messages_fr.dart @@ -20,39 +20,34 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'fr'; - static String m9(title) => "${title} (Moi)"; + static String m0(title) => "${title} (Moi)"; - static String m10(count) => - "${Intl.plural(count, zero: 'Ajouter un collaborateur', one: 'Ajouter un collaborateur', other: 'Ajouter des collaborateurs')}"; - - static String m11(count) => - "${Intl.plural(count, one: 'Ajoutez un objet', other: 'Ajoutez des objets')}"; - - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "Votre extension de ${storageAmount} est valable jusqu\'au ${endDate}"; - static String m13(count) => - "${Intl.plural(count, zero: 'Ajouter un observateur', one: 'Ajouter un observateur', other: 'Ajouter des observateurs')}"; + static String m5(emailOrName) => "Ajouté par ${emailOrName}"; - static String m14(emailOrName) => "Ajouté par ${emailOrName}"; + static String m6(albumName) => "Ajouté avec succès à ${albumName}"; - static String m15(albumName) => "Ajouté avec succès à ${albumName}"; + static String m7(name) => "Admirant ${name}"; - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'Aucun Participant', one: '1 Participant', other: '${count} Participants')}"; - static String m18(versionValue) => "Version : ${versionValue}"; + static String m9(versionValue) => "Version : ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} libre"; - static String m20(paymentProvider) => + static String m11(name) => "Magnifiques vues avec ${name}"; + + static String m12(paymentProvider) => "Veuillez d\'abord annuler votre abonnement existant de ${paymentProvider}"; - static String m3(user) => + static String m13(user) => "${user} ne pourra pas ajouter plus de photos à cet album\n\nIl pourra toujours supprimer les photos existantes ajoutées par eux"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Votre famille a obtenu ${storageAmountInGb} Go jusqu\'à présent', @@ -62,195 +57,216 @@ class MessageLookup extends MessageLookupByLibrary { 'Vous avez obtenu ${storageAmountInGb} Go jusqu\'à présent !', })}"; - static String m22(albumName) => "Lien collaboratif créé pour ${albumName}"; + static String m15(albumName) => "Lien collaboratif créé pour ${albumName}"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: '0 collaborateur ajouté', one: '1 collaborateur ajouté', other: '${count} collaborateurs ajoutés')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "Vous êtes sur le point d\'ajouter ${email} en tant que contact sûr. Il pourra récupérer votre compte si vous êtes absent pendant ${numOfDays} jours."; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Veuillez contacter ${familyAdminEmail} pour gérer votre abonnement"; - static String m26(provider) => + static String m19(provider) => "Veuillez nous contacter à support@ente.io pour gérer votre abonnement ${provider}."; - static String m27(endpoint) => "Connecté à ${endpoint}"; + static String m20(endpoint) => "Connecté à ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Supprimer le fichier', other: 'Supprimer ${count} fichiers')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Suppression de ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Cela supprimera le lien public pour accéder à \"${albumName}\"."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Veuillez envoyer un e-mail à ${supportEmail} depuis votre adresse enregistrée"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "Vous avez nettoyé ${Intl.plural(count, one: '${count} fichier dupliqué', other: '${count} fichiers dupliqués')}, en libérant (${storageSaved}!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} fichiers, ${formattedSize} chacun"; - static String m34(newEmail) => "L\'email a été changé par ${newEmail}"; + static String m27(newEmail) => "L\'email a été changé par ${newEmail}"; - static String m35(email) => "${email} n\'a pas de compte Ente."; + static String m28(email) => "${email} n\'a pas de compte Ente."; - static String m36(email) => + static String m29(email) => "${email} n\'a pas de compte Ente.\n\nEnvoyez une invitation pour partager des photos."; - static String m38(text) => "Photos supplémentaires trouvées pour ${text}"; + static String m30(name) => "Embrasse ${name}"; - static String m40(count, formattedNumber) => + static String m31(text) => "Photos supplémentaires trouvées pour ${text}"; + + static String m32(name) => "Fête avec ${name}"; + + static String m33(count, formattedNumber) => "${Intl.plural(count, one: '1 fichier sur cet appareil a été sauvegardé en toute sécurité', other: '${formattedNumber} fichiers sur cet appareil ont été sauvegardés en toute sécurité')}"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "${Intl.plural(count, one: '1 fichier dans cet album a été sauvegardé en toute sécurité', other: '${formattedNumber} fichiers dans cet album ont été sauvegardés en toute sécurité')}"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} Go chaque fois que quelqu\'un s\'inscrit à une offre payante et applique votre code"; - static String m42(endDate) => "Essai gratuit valide jusqu’au ${endDate}"; + static String m36(endDate) => "Essai gratuit valide jusqu’au ${endDate}"; - static String m43(count) => - "Vous pouvez toujours ${Intl.plural(count, one: 'y', other: 'y')} accéder sur Ente tant que vous avez un abonnement actif"; + static String m38(sizeInMBorGB) => "Libérer ${sizeInMBorGB}"; - static String m44(sizeInMBorGB) => "Libérer ${sizeInMBorGB}"; - - static String m45(count, formattedSize) => - "${Intl.plural(count, one: 'Il peut être supprimé de l\'appareil pour libérer ${formattedSize}', other: 'Ils peuvent être supprimés de l\'appareil pour libérer ${formattedSize}')}"; - - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Traitement en cours ${currentlyProcessing} / ${totalCount}"; - static String m48(count) => + static String m41(name) => "Randonnée avec ${name}"; + + static String m42(count) => "${Intl.plural(count, one: '${count} objet', other: '${count} objets')}"; - static String m50(email) => + static String m43(name) => "Dernière fois avec ${name}"; + + static String m44(email) => "${email} vous a invité à être un contact de confiance"; - static String m51(expiryTime) => "Le lien expirera le ${expiryTime}"; + static String m45(expiryTime) => "Le lien expirera le ${expiryTime}"; - static String m52(email) => "Associer la personne à ${email}"; + static String m46(email) => "Associer la personne à ${email}"; - static String m53(personName, email) => + static String m47(personName, email) => "Cela va associer ${personName} à ${email}"; - static String m5(count, formattedCount) => - "${Intl.plural(count, one: '${formattedCount} souvenir', other: '${formattedCount} souvenirs')}"; + static String m50(albumName) => "Déplacé avec succès vers ${albumName}"; - static String m54(count) => - "${Intl.plural(count, one: 'Déplacez l\'objet', other: 'Déplacez des objets')}"; + static String m51(personName) => "Aucune suggestion pour ${personName}"; - static String m55(albumName) => "Déplacé avec succès vers ${albumName}"; + static String m52(name) => "Pas ${name}?"; - static String m56(personName) => "Aucune suggestion pour ${personName}"; - - static String m57(name) => "Pas ${name}?"; - - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Veuillez contacter ${familyAdminEmail} pour modifier votre code."; - static String m0(passwordStrengthValue) => + static String m54(name) => "En soirée avec ${name}"; + + static String m55(passwordStrengthValue) => "Sécurité du mot de passe : ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Veuillez contacter le support ${providerName} si vous avez été facturé"; - static String m64(count) => - "${Intl.plural(count, zero: '0 photo', one: '1 photo', other: '${count} photos')}"; + static String m57(name, age) => "${name} a ${age}!"; - static String m65(endDate) => + static String m58(name, age) => "${name} aura bientôt ${age}"; + + static String m59(count) => + "${Intl.plural(count, zero: 'No photos', one: '1 photo', other: '${count} photos')}"; + + static String m61(endDate) => "Essai gratuit valable jusqu\'à ${endDate}.\nVous pouvez choisir un plan payant par la suite."; - static String m66(toEmail) => "Merci de nous envoyer un email à ${toEmail}"; + static String m62(toEmail) => "Merci de nous envoyer un email à ${toEmail}"; - static String m67(toEmail) => "Envoyez les logs à ${toEmail}"; + static String m63(toEmail) => "Envoyez les logs à ${toEmail}"; - static String m69(folderName) => "Traitement de ${folderName}..."; + static String m64(name) => "Pose avec ${name}"; - static String m70(storeName) => "Laissez une note sur ${storeName}"; + static String m65(folderName) => "Traitement de ${folderName}..."; - static String m71(name) => "Vous a réassigné à ${name}"; + static String m66(storeName) => "Laissez une note sur ${storeName}"; - static String m72(days, email) => + static String m67(name) => "Vous a réassigné à ${name}"; + + static String m68(days, email) => "Vous pourrez accéder au compte d\'ici ${days} jours. Une notification sera envoyée à ${email}."; - static String m73(email) => + static String m69(email) => "Vous pouvez maintenant récupérer le compte de ${email} en définissant un nouveau mot de passe."; - static String m74(email) => "${email} tente de récupérer votre compte."; + static String m70(email) => "${email} tente de récupérer votre compte."; - static String m75(storageInGB) => + static String m71(storageInGB) => "3. Vous recevez tous les deux ${storageInGB} Go* gratuits"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} sera retiré de cet album partagé\n\nToutes les photos ajoutées par eux seront également retirées de l\'album"; - static String m77(endDate) => "Renouvellement le ${endDate}"; + static String m73(endDate) => "Renouvellement le ${endDate}"; - static String m79(count) => + static String m74(name) => "En route avec ${name}"; + + static String m75(count) => "${Intl.plural(count, one: '${count} résultat trouvé', other: '${count} résultats trouvés')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "Incompatibilité de longueur des sections : ${snapshotLength} != ${searchLength}"; - static String m6(count) => "${count} sélectionné(s)"; + static String m77(count) => "${count} sélectionné(s)"; - static String m81(count, yourCount) => + static String m78(count, yourCount) => "${count} sélectionné(s) (${yourCount} à vous)"; - static String m83(verificationID) => + static String m79(name) => "Selfies avec ${name}"; + + static String m80(verificationID) => "Voici mon ID de vérification : ${verificationID} pour ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "Hé, pouvez-vous confirmer qu\'il s\'agit de votre ID de vérification ente.io : ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Code de parrainage Ente : ${referralCode} \n\nValidez le dans Paramètres → Général → Références pour obtenir ${referralStorageInGB} Go gratuitement après votre inscription à un plan payant\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Partagez avec des personnes spécifiques', one: 'Partagé avec 1 personne', other: 'Partagé avec ${numberOfPeople} personnes')}"; - static String m86(emailIDs) => "Partagé avec ${emailIDs}"; + static String m84(emailIDs) => "Partagé avec ${emailIDs}"; - static String m87(fileType) => + static String m85(fileType) => "Elle ${fileType} sera supprimée de votre appareil."; - static String m88(fileType) => + static String m86(fileType) => "Cette ${fileType} est à la fois sur ente et sur votre appareil."; - static String m89(fileType) => "Cette ${fileType} sera supprimée de l\'Ente."; + static String m87(fileType) => "Cette ${fileType} sera supprimée de l\'Ente."; - static String m1(storageAmountInGB) => "${storageAmountInGB} Go"; + static String m88(name) => "Sports avec ${name}"; - static String m92( + static String m89(name) => "Spotlight sur ${name}"; + + static String m90(storageAmountInGB) => "${storageAmountInGB} Go"; + + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} sur ${totalAmount} ${totalStorageUnit} utilisés"; - static String m93(id) => + static String m92(id) => "Votre ${id} est déjà lié à un autre compte Ente.\nSi vous souhaitez utiliser votre ${id} avec ce compte, veuillez contacter notre support"; - static String m94(endDate) => "Votre abonnement sera annulé le ${endDate}"; + static String m93(endDate) => "Votre abonnement sera annulé le ${endDate}"; - static String m95(completed, total) => + static String m94(completed, total) => "${completed}/${total} souvenirs sauvegardés"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Appuyer pour envoyer, l\'envoi est actuellement ignoré en raison de ${ignoreReason}"; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "Ils obtiennent aussi ${storageAmountInGB} Go"; static String m97(email) => "Ceci est l\'ID de vérification de ${email}"; + static String m98(count) => + "${Intl.plural(count, one: 'Cette semaine, ${count} il y a l\'année', other: 'Cette semaine, ${count} il y a des années')}"; + + static String m99(dateFormat) => "${dateFormat} au fil des années"; + static String m100(count) => "${Intl.plural(count, zero: 'Bientôt', one: '1 jour', other: '${count} jours')}"; + static String m101(year) => "Voyage en ${year}"; + + static String m102(location) => "Voyage vers ${location}"; + static String m103(email) => "Vous avez été invité(e) à être un(e) héritier(e) par ${email}."; @@ -266,16 +282,15 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "Vérifier ${email}"; - static String m109(count) => - "${Intl.plural(count, zero: '0 observateur ajouté', one: '1 observateur ajouté', other: '${count} observateurs ajoutés')}"; - - static String m2(email) => + static String m110(email) => "Nous avons envoyé un email à ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: 'il y a ${count} an', other: 'il y a ${count} ans')}"; - static String m112(storageSaved) => + static String m112(name) => "Vous et ${name}"; + + static String m113(storageSaved) => "Vous avez libéré ${storageSaved} avec succès !"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -288,7 +303,7 @@ class MessageLookup extends MessageLookupByLibrary { "account": MessageLookupByLibrary.simpleMessage("Compte"), "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage( "Le compte est déjà configuré."), - "accountOwnerPersonAppbarTitle": m9, + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("Bon retour parmi nous !"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( @@ -301,12 +316,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Ajouter un nouvel email"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Ajouter un collaborateur"), - "addCollaborators": m10, "addFiles": MessageLookupByLibrary.simpleMessage("Ajouter des fichiers"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Ajouter depuis l\'appareil"), - "addItem": m11, "addLocation": MessageLookupByLibrary.simpleMessage("Ajouter la localisation"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Ajouter"), @@ -319,7 +332,7 @@ class MessageLookup extends MessageLookupByLibrary { "Ajouter une nouvelle personne"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage( "Détails des modules complémentaires"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Modules complémentaires"), "addPhotos": MessageLookupByLibrary.simpleMessage("Ajouter des photos"), @@ -334,14 +347,14 @@ class MessageLookup extends MessageLookupByLibrary { "Ajouter un contact de confiance"), "addViewer": MessageLookupByLibrary.simpleMessage("Ajouter un observateur"), - "addViewers": m13, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage( "Ajoutez vos photos maintenant"), "addedAs": MessageLookupByLibrary.simpleMessage("Ajouté comme"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("Ajout aux favoris..."), + "admiringThem": m7, "advanced": MessageLookupByLibrary.simpleMessage("Avancé"), "advancedSettings": MessageLookupByLibrary.simpleMessage("Avancé"), "after1Day": MessageLookupByLibrary.simpleMessage("Après 1 jour"), @@ -350,7 +363,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("Après 1 semaine"), "after1Year": MessageLookupByLibrary.simpleMessage("Après 1 an"), "albumOwner": MessageLookupByLibrary.simpleMessage("Propriétaire"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Titre de l\'album"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Album mis à jour"), @@ -360,6 +373,8 @@ class MessageLookup extends MessageLookupByLibrary { "Tous les souvenirs sont sauvegardés"), "allPersonGroupingWillReset": MessageLookupByLibrary.simpleMessage( "Tous les groupements pour cette personne seront réinitialisés, et vous perdrez toutes les suggestions faites pour cette personne"), + "allWillShiftRangeBasedOnFirst": MessageLookupByLibrary.simpleMessage( + "C\'est la première dans le groupe. Les autres photos sélectionnées se déplaceront automatiquement en fonction de cette nouvelle date"), "allow": MessageLookupByLibrary.simpleMessage("Autoriser"), "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( "Autorisez les personnes ayant le lien à ajouter des photos dans l\'album partagé."), @@ -394,11 +409,12 @@ class MessageLookup extends MessageLookupByLibrary { "Android, iOS, Web, Ordinateur"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("Authentification requise"), + "appIcon": MessageLookupByLibrary.simpleMessage("Icône de l\'appli"), "appLock": MessageLookupByLibrary.simpleMessage( "Verrouillage de l\'application"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Choisissez entre l\'écran de verrouillage par défaut de votre appareil et un écran de verrouillage personnalisé avec un code PIN ou un mot de passe."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Appliquer"), "applyCodeTitle": @@ -485,9 +501,10 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "L\'appairage automatique ne fonctionne qu\'avec les appareils qui prennent en charge Chromecast."), "available": MessageLookupByLibrary.simpleMessage("Disponible"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("Dossiers sauvegardés"), + "backgroundWithThem": m11, "backup": MessageLookupByLibrary.simpleMessage("Sauvegarde"), "backupFailed": MessageLookupByLibrary.simpleMessage("Échec de la sauvegarde"), @@ -503,10 +520,28 @@ class MessageLookup extends MessageLookupByLibrary { "Les éléments qui ont été sauvegardés apparaîtront ici"), "backupVideos": MessageLookupByLibrary.simpleMessage("Sauvegarde des vidéos"), + "beach": MessageLookupByLibrary.simpleMessage("Sable et mer"), "birthday": MessageLookupByLibrary.simpleMessage("Anniversaire"), "blackFridaySale": MessageLookupByLibrary.simpleMessage("Offre Black Friday"), "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "cLBulkEdit": MessageLookupByLibrary.simpleMessage( + "Dates de modification multiples"), + "cLBulkEditDesc": MessageLookupByLibrary.simpleMessage( + "Vous pouvez maintenant sélectionner plusieurs photos et modifier la date/heure pour toutes celles-ci, en une seule action rapide. Les dates de décalage sont également prises en charge."), + "cLFamilyPlan": MessageLookupByLibrary.simpleMessage( + "Limites pour le forfait Famille"), + "cLFamilyPlanDesc": MessageLookupByLibrary.simpleMessage( + "Vous pouvez maintenant fixer des limites sur la quantité de stockage que les membres de votre famille peuvent utiliser."), + "cLIcon": MessageLookupByLibrary.simpleMessage("Nouvel icône"), + "cLIconDesc": MessageLookupByLibrary.simpleMessage( + "Finalement, création d\'un nouvel icône d\'application qui, selon nous, représente au mieux notre travail. Nous avons également ajouté un changeur d\'icône pour que vous puissiez continuer à utiliser l\'ancien."), + "cLMemories": MessageLookupByLibrary.simpleMessage("Souvenirs"), + "cLMemoriesDesc": MessageLookupByLibrary.simpleMessage( + "Redécouvrez vos précieux souvenirs - focus sur vos connaissances préférées, vos voyages et vos vacances, vos meilleurs clics et bien plus encore. Activez l\'apprentissage automatique, taguez-vous et nommez vos amis pour une meilleure expérience."), + "cLWidgets": MessageLookupByLibrary.simpleMessage("Widgets"), + "cLWidgetsDesc": MessageLookupByLibrary.simpleMessage( + "Les widgets (ou gadgets) de l\'écran d\'accueil, qui sont intégrés à des souvenirs, sont maintenant disponibles. Ils montreront vos moments spéciaux sans nécessité d\'ouvrir l\'application."), "cachedData": MessageLookupByLibrary.simpleMessage("Données mises en cache"), "calculating": @@ -527,10 +562,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Annuler la récupération"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "Êtes-vous sûr de vouloir annuler la récupération ?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Annuler l\'abonnement"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( "Les fichiers partagés ne peuvent pas être supprimés"), "castAlbum": MessageLookupByLibrary.simpleMessage("Caster l\'album"), @@ -563,11 +598,12 @@ class MessageLookup extends MessageLookupByLibrary { "checking": MessageLookupByLibrary.simpleMessage("Vérification..."), "checkingModels": MessageLookupByLibrary.simpleMessage("Vérification des modèles..."), + "city": MessageLookupByLibrary.simpleMessage("Dans la ville"), "claimFreeStorage": MessageLookupByLibrary.simpleMessage("Obtenez du stockage gratuit"), "claimMore": MessageLookupByLibrary.simpleMessage("Réclamez plus !"), "claimed": MessageLookupByLibrary.simpleMessage("Obtenu"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage( "Effacer les éléments non classés"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -598,12 +634,12 @@ class MessageLookup extends MessageLookupByLibrary { "Créez un lien pour permettre aux personnes d\'ajouter et de voir des photos dans votre album partagé sans avoir besoin d\'une application Ente ou d\'un compte. Idéal pour récupérer des photos d\'événement."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Lien collaboratif"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Collaborateur"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "Les collaborateurs peuvent ajouter des photos et des vidéos à l\'album partagé."), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("Disposition"), "collageSaved": MessageLookupByLibrary.simpleMessage( "Collage sauvegardé dans la galerie"), @@ -621,7 +657,7 @@ class MessageLookup extends MessageLookupByLibrary { "Voulez-vous vraiment désactiver l\'authentification à deux facteurs ?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage( "Confirmer la suppression du compte"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Oui, je veux supprimer définitivement ce compte et ses données dans toutes les applications."), "confirmPassword": @@ -634,10 +670,10 @@ class MessageLookup extends MessageLookupByLibrary { "Confirmer la clé de récupération"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Connexion à l\'appareil"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("Contacter l\'assistance"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Contacts"), "contents": MessageLookupByLibrary.simpleMessage("Contenus"), "continueLabel": MessageLookupByLibrary.simpleMessage("Continuer"), @@ -680,12 +716,14 @@ class MessageLookup extends MessageLookupByLibrary { "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( "Mise à jour critique disponible"), "crop": MessageLookupByLibrary.simpleMessage("Rogner"), + "curatedMemories": + MessageLookupByLibrary.simpleMessage("Souvenirs conservés"), "currentUsageIs": MessageLookupByLibrary.simpleMessage( "L\'utilisation actuelle est de "), "currentlyRunning": MessageLookupByLibrary.simpleMessage("en cours d\'exécution"), "custom": MessageLookupByLibrary.simpleMessage("Personnaliser"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Sombre"), "dayToday": MessageLookupByLibrary.simpleMessage("Aujourd\'hui"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Hier"), @@ -726,12 +764,12 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Supprimer de l\'appareil"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Supprimer de Ente"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Supprimer la localisation"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Supprimer des photos"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "Il manque une fonction clé dont j\'ai besoin"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -772,7 +810,7 @@ class MessageLookup extends MessageLookupByLibrary { "Les observateurs peuvent toujours prendre des captures d\'écran ou enregistrer une copie de vos photos en utilisant des outils externes"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Veuillez remarquer"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage( "Désactiver l\'authentification à deux facteurs"), "disablingTwofactorAuthentication": @@ -817,9 +855,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Échec du téléchargement"), "downloading": MessageLookupByLibrary.simpleMessage("Téléchargement en cours..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Éditer"), "editLocation": MessageLookupByLibrary.simpleMessage("Modifier l’emplacement"), @@ -827,6 +865,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Modifier l’emplacement"), "editPerson": MessageLookupByLibrary.simpleMessage("Modifier la personne"), + "editTime": MessageLookupByLibrary.simpleMessage("Modifier l\'heure"), "editsSaved": MessageLookupByLibrary.simpleMessage("Modification sauvegardée"), "editsToLocationWillOnlyBeSeenWithinEnte": @@ -836,15 +875,16 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("E-mail"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage("Email déjà enregistré."), - "emailChangedTo": m34, - "emailDoesNotHaveEnteAccount": m35, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, "emailNotRegistered": - MessageLookupByLibrary.simpleMessage("Email inconnu."), + MessageLookupByLibrary.simpleMessage("E-mail non enregistré."), "emailVerificationToggle": MessageLookupByLibrary.simpleMessage( "Authentification à deux facteurs par email"), "emailYourLogs": MessageLookupByLibrary.simpleMessage( "Envoyez vos journaux par email"), + "embracingThem": m30, "emergencyContacts": MessageLookupByLibrary.simpleMessage("Contacts d\'urgence"), "empty": MessageLookupByLibrary.simpleMessage("Vider"), @@ -922,7 +962,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Exportez vos données"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage( "Photos supplémentaires trouvées"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Ce visage n\'a pas encore été regroupé, veuillez revenir plus tard"), "faceRecognition": @@ -961,6 +1001,7 @@ class MessageLookup extends MessageLookupByLibrary { "faq": MessageLookupByLibrary.simpleMessage("FAQ"), "faqs": MessageLookupByLibrary.simpleMessage("FAQ"), "favorite": MessageLookupByLibrary.simpleMessage("Favori"), + "feastingWithThem": m32, "feedback": MessageLookupByLibrary.simpleMessage("Commentaires"), "file": MessageLookupByLibrary.simpleMessage("Fichier"), "fileFailedToSaveToGallery": MessageLookupByLibrary.simpleMessage( @@ -974,8 +1015,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("Types de fichiers"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("Types et noms de fichiers"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("Fichiers supprimés"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage( @@ -985,6 +1026,7 @@ class MessageLookup extends MessageLookupByLibrary { "findThemQuickly": MessageLookupByLibrary.simpleMessage("Trouvez-les rapidement"), "flip": MessageLookupByLibrary.simpleMessage("Retourner"), + "food": MessageLookupByLibrary.simpleMessage("Plaisir culinaire"), "forYourMemories": MessageLookupByLibrary.simpleMessage("pour vos souvenirs"), "forgotPassword": @@ -992,27 +1034,25 @@ class MessageLookup extends MessageLookupByLibrary { "foundFaces": MessageLookupByLibrary.simpleMessage("Visages trouvés"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("Stockage gratuit obtenu"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage("Stockage gratuit disponible"), "freeTrial": MessageLookupByLibrary.simpleMessage("Essai gratuit"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage( "Libérer de l\'espace sur l\'appareil"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Économisez de l\'espace sur votre appareil en effaçant les fichiers qui ont déjà été sauvegardés."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Libérer de l\'espace"), - "freeUpSpaceSaving": m45, "gallery": MessageLookupByLibrary.simpleMessage("Galerie"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "Jusqu\'à 1000 souvenirs affichés dans la galerie"), "general": MessageLookupByLibrary.simpleMessage("Général"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Génération des clés de chiffrement..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Allez aux réglages"), "googlePlayId": @@ -1021,6 +1061,7 @@ class MessageLookup extends MessageLookupByLibrary { "Veuillez autoriser l’accès à toutes les photos dans les paramètres"), "grantPermission": MessageLookupByLibrary.simpleMessage("Accorder la permission"), + "greenery": MessageLookupByLibrary.simpleMessage("La vie au vert"), "groupNearbyPhotos": MessageLookupByLibrary.simpleMessage( "Grouper les photos à proximité"), "guestView": MessageLookupByLibrary.simpleMessage("Vue invité"), @@ -1042,6 +1083,7 @@ class MessageLookup extends MessageLookupByLibrary { "hideSharedItemsFromHomeGallery": MessageLookupByLibrary.simpleMessage( "Masquer les éléments partagés avec vous dans la galerie"), "hiding": MessageLookupByLibrary.simpleMessage("Masquage en cours..."), + "hikingWithThem": m41, "hostedAtOsmFrance": MessageLookupByLibrary.simpleMessage("Hébergé chez OSM France"), "howItWorks": @@ -1101,7 +1143,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Il semble qu\'une erreur s\'est produite. Veuillez réessayer après un certain temps. Si l\'erreur persiste, veuillez contacter notre équipe d\'assistance."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Les éléments montrent le nombre de jours restants avant la suppression définitive"), @@ -1123,8 +1165,11 @@ class MessageLookup extends MessageLookupByLibrary { "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( "Merci de nous aider avec cette information"), "language": MessageLookupByLibrary.simpleMessage("Langue"), + "lastTimeWithThem": m43, "lastUpdated": MessageLookupByLibrary.simpleMessage("Dernière mise à jour"), + "lastYearsTrip": + MessageLookupByLibrary.simpleMessage("Voyage de l\'an dernier"), "leave": MessageLookupByLibrary.simpleMessage("Quitter"), "leaveAlbum": MessageLookupByLibrary.simpleMessage("Quitter l\'album"), "leaveFamily": @@ -1135,7 +1180,7 @@ class MessageLookup extends MessageLookupByLibrary { "legacy": MessageLookupByLibrary.simpleMessage("Héritage"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Comptes hérités"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "L\'héritage permet aux contacts de confiance d\'accéder à votre compte en votre absence."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1152,7 +1197,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("pour un partage plus rapide"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Activé"), "linkExpired": MessageLookupByLibrary.simpleMessage("Expiré"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Expiration du lien"), "linkHasExpired": @@ -1161,8 +1206,8 @@ class MessageLookup extends MessageLookupByLibrary { "linkPerson": MessageLookupByLibrary.simpleMessage("Lier la personne"), "linkPersonCaption": MessageLookupByLibrary.simpleMessage( "pour une meilleure expérience de partage"), - "linkPersonToEmail": m52, - "linkPersonToEmailConfirmation": m53, + "linkPersonToEmail": m46, + "linkPersonToEmailConfirmation": m47, "livePhotos": MessageLookupByLibrary.simpleMessage("Photos en direct"), "loadMessage1": MessageLookupByLibrary.simpleMessage( "Vous pouvez partager votre abonnement avec votre famille"), @@ -1253,7 +1298,6 @@ class MessageLookup extends MessageLookupByLibrary { "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), "me": MessageLookupByLibrary.simpleMessage("Moi"), - "memoryCount": m5, "merchandise": MessageLookupByLibrary.simpleMessage("Boutique"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Fusionner avec existant"), @@ -1280,16 +1324,20 @@ class MessageLookup extends MessageLookupByLibrary { "moments": MessageLookupByLibrary.simpleMessage("Souvenirs"), "month": MessageLookupByLibrary.simpleMessage("mois"), "monthly": MessageLookupByLibrary.simpleMessage("Mensuel"), + "moon": MessageLookupByLibrary.simpleMessage("Au clair de lune"), "moreDetails": MessageLookupByLibrary.simpleMessage("Plus de détails"), "mostRecent": MessageLookupByLibrary.simpleMessage("Les plus récents"), "mostRelevant": MessageLookupByLibrary.simpleMessage("Les plus pertinents"), - "moveItem": m54, + "mountains": + MessageLookupByLibrary.simpleMessage("Au-dessus des collines"), + "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage( + "Déplacer les photos sélectionnées vers une date"), "moveToAlbum": MessageLookupByLibrary.simpleMessage("Déplacer vers l\'album"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage( "Déplacer vers un album masqué"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("Déplacé dans la corbeille"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( @@ -1304,6 +1352,7 @@ class MessageLookup extends MessageLookupByLibrary { "newAlbum": MessageLookupByLibrary.simpleMessage("Nouvel album"), "newLocation": MessageLookupByLibrary.simpleMessage("Nouveau lieu"), "newPerson": MessageLookupByLibrary.simpleMessage("Nouvelle personne"), + "newRange": MessageLookupByLibrary.simpleMessage("Nouvelle plage"), "newToEnte": MessageLookupByLibrary.simpleMessage("Nouveau sur Ente"), "newest": MessageLookupByLibrary.simpleMessage("Le plus récent"), "next": MessageLookupByLibrary.simpleMessage("Suivant"), @@ -1342,10 +1391,12 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Aucun résultat"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Aucun résultat trouvé"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage("Aucun verrou système trouvé"), - "notPersonLabel": m57, + "notPersonLabel": m52, + "notThisPerson": MessageLookupByLibrary.simpleMessage( + "Ce n\'est pas cette personne ?"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Rien n\'a encore été partagé avec vous"), "nothingToSeeHere": MessageLookupByLibrary.simpleMessage( @@ -1355,7 +1406,9 @@ class MessageLookup extends MessageLookupByLibrary { "onDevice": MessageLookupByLibrary.simpleMessage("Sur votre appareil"), "onEnte": MessageLookupByLibrary.simpleMessage( "Sur Ente"), - "onlyFamilyAdminCanChangeCode": m58, + "onTheRoad": + MessageLookupByLibrary.simpleMessage("De nouveau sur la route"), + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Seulement eux"), "oops": MessageLookupByLibrary.simpleMessage("Oups"), "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( @@ -1387,6 +1440,7 @@ class MessageLookup extends MessageLookupByLibrary { "pairingComplete": MessageLookupByLibrary.simpleMessage("Appairage terminé"), "panorama": MessageLookupByLibrary.simpleMessage("Panorama"), + "partyWithThem": m54, "passKeyPendingVerification": MessageLookupByLibrary.simpleMessage( "La vérification est toujours en attente"), "passkey": MessageLookupByLibrary.simpleMessage( @@ -1398,7 +1452,7 @@ class MessageLookup extends MessageLookupByLibrary { "Le mot de passe a été modifié"), "passwordLock": MessageLookupByLibrary.simpleMessage( "Verrouillage par mot de passe"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "La force du mot de passe est calculée en tenant compte de la longueur du mot de passe, des caractères utilisés et du fait que le mot de passe figure ou non parmi les 10 000 mots de passe les plus utilisés"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1409,7 +1463,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Échec du paiement"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Malheureusement votre paiement a échoué. Veuillez contacter le support et nous vous aiderons !"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Éléments en attente"), "pendingSync": @@ -1423,18 +1477,25 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Supprimer définitivement"), "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( "Supprimer définitivement de l\'appareil ?"), + "personIsAge": m57, "personName": MessageLookupByLibrary.simpleMessage("Nom de la personne"), + "personTurningAge": m58, + "pets": + MessageLookupByLibrary.simpleMessage("Compagnons à quatre pattes"), "photoDescriptions": MessageLookupByLibrary.simpleMessage("Descriptions de la photo"), "photoGridSize": MessageLookupByLibrary.simpleMessage("Taille de la grille photo"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("photo"), + "photocountPhotos": m59, "photos": MessageLookupByLibrary.simpleMessage("Photos"), "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Les photos ajoutées par vous seront retirées de l\'album"), - "photosCount": m64, + "photosKeepRelativeTimeDifference": + MessageLookupByLibrary.simpleMessage( + "Les photos gardent une différence de temps relative"), "pickCenterPoint": MessageLookupByLibrary.simpleMessage( "Sélectionner le point central"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Épingler l\'album"), @@ -1444,7 +1505,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Lire l\'album sur la TV"), "playOriginal": MessageLookupByLibrary.simpleMessage("Lire l\'original"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playStream": MessageLookupByLibrary.simpleMessage("Lire le stream"), "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Abonnement au PlayStore"), @@ -1457,14 +1518,14 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Merci de contacter l\'assistance si cette erreur persiste"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( "Veuillez accorder la permission"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Veuillez vous reconnecter"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Veuillez sélectionner les liens rapides à supprimer"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Veuillez réessayer"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1477,6 +1538,9 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseWaitForSometimeBeforeRetrying": MessageLookupByLibrary.simpleMessage( "Veuillez attendre quelque temps avant de réessayer"), + "pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage( + "Veuillez patienter, cela prendra un peu de temps."), + "posingWithThem": m64, "preparingLogs": MessageLookupByLibrary.simpleMessage("Préparation des journaux..."), "preserveMore": MessageLookupByLibrary.simpleMessage("Conserver plus"), @@ -1496,7 +1560,7 @@ class MessageLookup extends MessageLookupByLibrary { "processed": MessageLookupByLibrary.simpleMessage("Appris"), "processing": MessageLookupByLibrary.simpleMessage("Traitement en cours"), - "processingImport": m69, + "processingImport": m65, "processingVideos": MessageLookupByLibrary.simpleMessage("Traitement des vidéos"), "publicLinkCreated": @@ -1510,10 +1574,10 @@ class MessageLookup extends MessageLookupByLibrary { "rateTheApp": MessageLookupByLibrary.simpleMessage("Évaluer l\'application"), "rateUs": MessageLookupByLibrary.simpleMessage("Évaluez-nous"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "reassignMe": MessageLookupByLibrary.simpleMessage("Réassigner \"Moi\""), - "reassignedToName": m71, + "reassignedToName": m67, "reassigningLoading": MessageLookupByLibrary.simpleMessage("Réassignation..."), "recover": MessageLookupByLibrary.simpleMessage("Récupérer"), @@ -1524,7 +1588,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Récupérer un compte"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("Récupération initiée"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Clé de secours"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( "Clé de secours copiée dans le presse-papiers"), @@ -1538,12 +1602,12 @@ class MessageLookup extends MessageLookupByLibrary { "Clé de récupération vérifiée"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Votre clé de récupération est la seule façon de récupérer vos photos si vous oubliez votre mot de passe. Vous pouvez trouver votre clé de récupération dans Paramètres > Compte.\n\nVeuillez saisir votre clé de récupération ici pour vous assurer de l\'avoir enregistré correctement."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("Restauration réussie !"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "Un contact de confiance tente d\'accéder à votre compte"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "L\'appareil actuel n\'est pas assez puissant pour vérifier votre mot de passe, mais nous pouvons le régénérer d\'une manière qui fonctionne avec tous les appareils.\n\nVeuillez vous connecter à l\'aide de votre clé de secours et régénérer votre mot de passe (vous pouvez réutiliser le même si vous le souhaitez)."), "recreatePasswordTitle": @@ -1559,7 +1623,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Donnez ce code à vos ami·e·s"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Ils souscrivent à une offre payante"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Parrainages"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Les recommandations sont actuellement en pause"), @@ -1591,7 +1655,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Supprimer le lien"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Supprimer le participant"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage( "Supprimer le libellé d\'une personne"), "removePublicLink": @@ -1613,7 +1677,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Renommer le fichier"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Renouveler l’abonnement"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Signaler un bogue"), "reportBug": MessageLookupByLibrary.simpleMessage("Signaler un bogue"), "resendEmail": @@ -1639,6 +1703,7 @@ class MessageLookup extends MessageLookupByLibrary { "reviewSuggestions": MessageLookupByLibrary.simpleMessage("Examiner les suggestions"), "right": MessageLookupByLibrary.simpleMessage("Droite"), + "roadtripWithThem": m74, "rotate": MessageLookupByLibrary.simpleMessage("Pivoter"), "rotateLeft": MessageLookupByLibrary.simpleMessage("Pivoter à gauche"), "rotateRight": @@ -1698,8 +1763,8 @@ class MessageLookup extends MessageLookupByLibrary { "Invitez quelqu\'un·e et vous verrez ici toutes les photos partagées"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "Les personnes seront affichées ici une fois le traitement terminé"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Sécurité"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( "Ouvrir les liens des albums publics dans l\'application"), @@ -1725,10 +1790,18 @@ class MessageLookup extends MessageLookupByLibrary { "Sélectionnez l\'application mail"), "selectMorePhotos": MessageLookupByLibrary.simpleMessage("Sélectionner plus de photos"), + "selectOneDateAndTime": MessageLookupByLibrary.simpleMessage( + "Sélectionner une date et une heure"), + "selectOneDateAndTimeForAll": MessageLookupByLibrary.simpleMessage( + "Sélectionnez une date et une heure pour tous"), "selectPersonToLink": MessageLookupByLibrary.simpleMessage( "Sélectionnez la personne à associer"), "selectReason": MessageLookupByLibrary.simpleMessage("Sélectionnez une raison"), + "selectStartOfRange": MessageLookupByLibrary.simpleMessage( + "Sélectionner le début de la plage"), + "selectTime": + MessageLookupByLibrary.simpleMessage("Sélectionner l\'heure"), "selectYourFace": MessageLookupByLibrary.simpleMessage("Sélectionnez votre visage"), "selectYourPlan": @@ -1741,8 +1814,12 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Les éléments sélectionnés seront supprimés de tous les albums et déplacés dans la corbeille."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, + "selectedItemsWillBeRemovedFromThisPerson": + MessageLookupByLibrary.simpleMessage( + "Les éléments sélectionnés seront retirés de cette personne, mais pas supprimés de votre bibliothèque."), + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "selfiesWithThem": m79, "send": MessageLookupByLibrary.simpleMessage("Envoyer"), "sendEmail": MessageLookupByLibrary.simpleMessage("Envoyer un e-mail"), "sendInvite": @@ -1776,16 +1853,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage( "Partagez un album maintenant"), "shareLink": MessageLookupByLibrary.simpleMessage("Partager le lien"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Partagez uniquement avec les personnes que vous souhaitez"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Téléchargez Ente pour pouvoir facilement partager des photos et vidéos en qualité originale\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Partager avec des utilisateurs non-Ente"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage( "Partagez votre premier album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1796,14 +1873,16 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nouvelles photos partagées"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Recevoir des notifications quand quelqu\'un·e ajoute une photo à un album partagé dont vous faites partie"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Partagés avec moi"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("Partagé avec vous"), "sharing": MessageLookupByLibrary.simpleMessage("Partage..."), + "shiftDatesAndTime": + MessageLookupByLibrary.simpleMessage("Dates et heure de décalage"), "showMemories": - MessageLookupByLibrary.simpleMessage("Montrer les souvenirs"), + MessageLookupByLibrary.simpleMessage("Afficher les souvenirs"), "showPerson": MessageLookupByLibrary.simpleMessage("Montrer la personne"), "signOutFromOtherDevices": MessageLookupByLibrary.simpleMessage( @@ -1814,11 +1893,11 @@ class MessageLookup extends MessageLookupByLibrary { "Déconnecter les autres appareils"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "J\'accepte les conditions d\'utilisation et la politique de confidentialité"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Elle sera supprimée de tous les albums."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Ignorer"), "social": MessageLookupByLibrary.simpleMessage("Retrouvez nous"), "someItemsAreInBothEnteAndYourDevice": @@ -1854,6 +1933,10 @@ class MessageLookup extends MessageLookupByLibrary { "sortOldestFirst": MessageLookupByLibrary.simpleMessage("Plus ancien en premier"), "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Succès"), + "sportsWithThem": m88, + "spotlightOnThem": m89, + "spotlightOnYourself": + MessageLookupByLibrary.simpleMessage("Éclairage sur vous-même"), "startAccountRecoveryTitle": MessageLookupByLibrary.simpleMessage("Démarrer la récupération"), "startBackup": @@ -1866,15 +1949,15 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Stockage"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Famille"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Vous"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Limite de stockage atteinte"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "streamDetails": MessageLookupByLibrary.simpleMessage("Détails du stream"), "strongStrength": MessageLookupByLibrary.simpleMessage("Forte"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("S\'abonner"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Vous avez besoin d\'un abonnement payant actif pour activer le partage."), @@ -1890,8 +1973,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Masquage réussi"), "suggestFeatures": MessageLookupByLibrary.simpleMessage("Suggérer une fonctionnalité"), + "sunrise": MessageLookupByLibrary.simpleMessage("À l\'horizon"), "support": MessageLookupByLibrary.simpleMessage("Support"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Synchronisation arrêtée ?"), "syncing": MessageLookupByLibrary.simpleMessage( @@ -1904,7 +1988,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Appuyer pour déverrouiller"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Appuyer pour envoyer"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Il semble qu\'une erreur s\'est produite. Veuillez réessayer après un certain temps. Si l\'erreur persiste, veuillez contacter notre équipe d\'assistance."), "terminate": MessageLookupByLibrary.simpleMessage("Se déconnecter"), @@ -1928,7 +2012,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Ces éléments seront supprimés de votre appareil."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Ils seront supprimés de tous les albums."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1949,14 +2033,21 @@ class MessageLookup extends MessageLookupByLibrary { "thisIsPersonVerificationId": m97, "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( "Ceci est votre ID de vérification"), + "thisWeekThroughTheYears": MessageLookupByLibrary.simpleMessage( + "Cette semaine au fil des années"), + "thisWeekXYearsAgo": m98, "thisWillLogYouOutOfTheFollowingDevice": MessageLookupByLibrary.simpleMessage( "Cela vous déconnectera de l\'appareil suivant :"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( "Cela vous déconnectera de cet appareil !"), + "thisWillMakeTheDateAndTimeOfAllSelected": + MessageLookupByLibrary.simpleMessage( + "Cela rendra la date et l\'heure identique à toutes les photos sélectionnées."), "thisWillRemovePublicLinksOfAllSelectedQuickLinks": MessageLookupByLibrary.simpleMessage( "Ceci supprimera les liens publics de tous les liens rapides sélectionnés."), + "throughTheYears": m99, "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": MessageLookupByLibrary.simpleMessage( "Pour activer le verrouillage de l\'application vous devez configurer le code d\'accès de l\'appareil ou le verrouillage de l\'écran dans les paramètres de votre système."), @@ -1972,6 +2063,8 @@ class MessageLookup extends MessageLookupByLibrary { "trash": MessageLookupByLibrary.simpleMessage("Corbeille"), "trashDaysLeft": m100, "trim": MessageLookupByLibrary.simpleMessage("Recadrer"), + "tripInYear": m101, + "tripToLocation": m102, "trustedContacts": MessageLookupByLibrary.simpleMessage("Contacts de confiance"), "trustedInviteBody": m103, @@ -2083,7 +2176,6 @@ class MessageLookup extends MessageLookupByLibrary { "viewRecoveryKey": MessageLookupByLibrary.simpleMessage("Voir la clé de récupération"), "viewer": MessageLookupByLibrary.simpleMessage("Observateur"), - "viewersSuccessfullyAdded": m109, "visitWebToManage": MessageLookupByLibrary.simpleMessage( "Vous pouvez gérer votre abonnement sur web.ente.io"), "waitingForVerification": MessageLookupByLibrary.simpleMessage( @@ -2096,7 +2188,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Nous ne prenons pas en charge l\'édition des photos et des albums que vous ne possédez pas encore"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Securité Faible"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Bienvenue !"), "whatsNew": MessageLookupByLibrary.simpleMessage("Nouveautés"), @@ -2104,7 +2196,7 @@ class MessageLookup extends MessageLookupByLibrary { "Un contact de confiance peut vous aider à récupérer vos données."), "yearShort": MessageLookupByLibrary.simpleMessage("an"), "yearly": MessageLookupByLibrary.simpleMessage("Annuel"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Oui"), "yesCancel": MessageLookupByLibrary.simpleMessage("Oui, annuler"), "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( @@ -2119,6 +2211,7 @@ class MessageLookup extends MessageLookupByLibrary { "yesResetPerson": MessageLookupByLibrary.simpleMessage( "Oui, réinitialiser la personne"), "you": MessageLookupByLibrary.simpleMessage("Vous"), + "youAndThem": m112, "youAreOnAFamilyPlan": MessageLookupByLibrary.simpleMessage( "Vous êtes sur un plan familial !"), "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage( @@ -2137,7 +2230,7 @@ class MessageLookup extends MessageLookupByLibrary { "Vous ne pouvez pas partager avec vous-même"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "Vous n\'avez aucun élément archivé."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("Votre compte a été supprimé"), "yourMap": MessageLookupByLibrary.simpleMessage("Votre carte"), @@ -2158,6 +2251,9 @@ class MessageLookup extends MessageLookupByLibrary { "Votre abonnement a été mis à jour avec succès"), "yourVerificationCodeHasExpired": MessageLookupByLibrary.simpleMessage( "Votre code de vérification a expiré"), + "youveNoDuplicateFilesThatCanBeCleared": + MessageLookupByLibrary.simpleMessage( + "Vous n\'avez aucun fichier dupliqué pouvant être nettoyé"), "youveNoFilesInThisAlbumThatCanBeDeleted": MessageLookupByLibrary.simpleMessage( "Vous n\'avez pas de fichiers dans cet album qui peuvent être supprimés"), diff --git a/mobile/lib/generated/intl/messages_he.dart b/mobile/lib/generated/intl/messages_he.dart index e885cbc96a..014584079d 100644 --- a/mobile/lib/generated/intl/messages_he.dart +++ b/mobile/lib/generated/intl/messages_he.dart @@ -20,113 +20,104 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'he'; - static String m11(count) => - "${Intl.plural(count, one: 'הוסף פריט', two: 'הוסף פריטים', many: 'הוסף פריטים', other: 'הוסף פריטים')}"; - - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'אין משתתפים', one: '1 משתתף', two: '2 משתתפים', other: '${count} משתתפים')}"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "אנא בטל את המנוי הקיים מ-${paymentProvider} קודם"; - static String m3(user) => + static String m13(user) => "${user} לא יוכל להוסיף עוד תמונות לאלבום זה\n\nהם עדיין יכולו להסיר תמונות קיימות שנוספו על ידיהם"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'קיבלת ${storageAmountInGb} GB עד כה', 'false': 'קיבלת ${storageAmountInGb} GB עד כה', 'other': 'קיבלת ${storageAmountInGb} GB עד כה!', })}"; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "אנא צור קשר עם ${familyAdminEmail} על מנת לנהל את המנוי שלך"; - static String m26(provider) => + static String m19(provider) => "אנא צור איתנו קשר ב-support@ente.io על מנת לנהל את המנוי ${provider}."; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'מחק ${count} פריט', two: 'מחק ${count} פריטים', other: 'מחק ${count} פריטים')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "מוחק ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "זה יסיר את הלינק הפומבי שדרכו ניתן לגשת ל\"${albumName}\"."; - static String m31(supportEmail) => + static String m24(supportEmail) => "אנא תשלח דוא\"ל ל${supportEmail} מהכתובת דוא\"ל שנרשמת איתה"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} קבצים, כל אחד ${formattedSize}"; - static String m36(email) => + static String m29(email) => "לא נמצא חשבון ente ל-${email}.\n\nשלח להם הזמנה על מנת לשתף תמונות."; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB כל פעם שמישהו נרשם עבור תוכנית בתשלום ומחיל את הקוד שלך"; - static String m42(endDate) => "ניסיון חינם בתוקף עד ל-${endDate}"; + static String m36(endDate) => "ניסיון חינם בתוקף עד ל-${endDate}"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} פריט', two: '${count} פריטים', many: '${count} פריטים', other: '${count} פריטים')}"; - static String m51(expiryTime) => "תוקף הקישור יפוג ב-${expiryTime}"; + static String m45(expiryTime) => "תוקף הקישור יפוג ב-${expiryTime}"; - static String m5(count, formattedCount) => - "${Intl.plural(count, one: '${formattedCount} זכרון', two: '${formattedCount} זכרונות', many: '${formattedCount} זכרונות', other: '${formattedCount} זכרונות')}"; - - static String m54(count) => - "${Intl.plural(count, one: 'הזז פריט', two: 'הזז פריטים', many: 'הזז פריטים', other: 'הזז פריטים')}"; - - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "חוזק הסיסמא: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "אנא דבר עם התמיכה של ${providerName} אם אתה חוייבת"; - static String m70(storeName) => "דרג אותנו ב-${storeName}"; + static String m66(storeName) => "דרג אותנו ב-${storeName}"; - static String m75(storageInGB) => "3. שניכים מקבלים ${storageInGB} GB* בחינם"; + static String m71(storageInGB) => "3. שניכים מקבלים ${storageInGB} GB* בחינם"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} יוסר מהאלבום המשותף הזה\n\nגם תמונות שנוספו על ידיהם יוסרו מהאלבום"; - static String m6(count) => "${count} נבחרו"; + static String m77(count) => "${count} נבחרו"; - static String m81(count, yourCount) => "${count} נבחרו (${yourCount} שלך)"; + static String m78(count, yourCount) => "${count} נבחרו (${yourCount} שלך)"; - static String m83(verificationID) => + static String m80(verificationID) => "הנה מזהה האימות שלי: ${verificationID} עבור ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "היי, תוכל לוודא שזה מזהה האימות שלך של ente.io: ${verificationID}"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'שתף עם אנשים ספציפיים', one: 'שותף עם איש 1', two: 'שותף עם 2 אנשים', other: 'שותף עם ${numberOfPeople} אנשים')}"; - static String m86(emailIDs) => "הושתף ע\"י ${emailIDs}"; + static String m84(emailIDs) => "הושתף ע\"י ${emailIDs}"; - static String m87(fileType) => "${fileType} יימחק מהמכשיר שלך."; + static String m85(fileType) => "${fileType} יימחק מהמכשיר שלך."; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m94(endDate) => "המנוי שלך יבוטל ב-${endDate}"; + static String m93(endDate) => "המנוי שלך יבוטל ב-${endDate}"; - static String m95(completed, total) => "${completed}/${total} זכרונות נשמרו"; + static String m94(completed, total) => "${completed}/${total} זכרונות נשמרו"; - static String m8(storageAmountInGB) => "הם גם יקבלו ${storageAmountInGB} GB"; + static String m96(storageAmountInGB) => "הם גם יקבלו ${storageAmountInGB} GB"; static String m97(email) => "זה מזהה האימות של ${email}"; static String m108(email) => "אמת ${email}"; - static String m2(email) => "שלחנו דוא\"ל ל${email}"; + static String m110(email) => "שלחנו דוא\"ל ל${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: 'לפני ${count} שנה', two: 'לפני ${count} שנים', many: 'לפני ${count} שנים', other: 'לפני ${count} שנים')}"; - static String m112(storageSaved) => "הצלחת לפנות ${storageSaved}!"; + static String m113(storageSaved) => "הצלחת לפנות ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -141,7 +132,6 @@ class MessageLookup extends MessageLookupByLibrary { "addANewEmail": MessageLookupByLibrary.simpleMessage("הוסף דוא\"ל חדש"), "addCollaborator": MessageLookupByLibrary.simpleMessage("הוסף משתף פעולה"), - "addItem": m11, "addLocationButton": MessageLookupByLibrary.simpleMessage("הוסף"), "addMore": MessageLookupByLibrary.simpleMessage("הוסף עוד"), "addPhotos": MessageLookupByLibrary.simpleMessage("הוסף תמונות"), @@ -158,7 +148,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("אחרי שבוע 1"), "after1Year": MessageLookupByLibrary.simpleMessage("אחרי שנה 1"), "albumOwner": MessageLookupByLibrary.simpleMessage("בעלים"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("כותרת האלבום"), "albumUpdated": MessageLookupByLibrary.simpleMessage("האלבום עודכן"), "albums": MessageLookupByLibrary.simpleMessage("אלבומים"), @@ -244,9 +234,9 @@ class MessageLookup extends MessageLookupByLibrary { "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( "יכול להסיר רק קבצים שבבעלותך"), "cancel": MessageLookupByLibrary.simpleMessage("בטל"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("בטל מנוי"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( "לא ניתן למחוק את הקבצים המשותפים"), "changeEmail": MessageLookupByLibrary.simpleMessage("שנה דוא\"ל"), @@ -262,7 +252,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("תבע מקום אחסון בחינם"), "claimMore": MessageLookupByLibrary.simpleMessage("תבע עוד!"), "claimed": MessageLookupByLibrary.simpleMessage("נתבע"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "click": MessageLookupByLibrary.simpleMessage("• לחץ"), "close": MessageLookupByLibrary.simpleMessage("סגור"), "clubByCaptureTime": @@ -302,10 +292,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("אמת את מפתח השחזור"), "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage("אמת את מפתח השחזור"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("צור קשר עם התמיכה"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "continueLabel": MessageLookupByLibrary.simpleMessage("המשך"), "continueOnFreeTrial": MessageLookupByLibrary.simpleMessage("המשך עם ניסיון חינמי"), @@ -363,9 +353,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("למחוק אלבומים ריקים?"), "deleteFromBoth": MessageLookupByLibrary.simpleMessage("מחק משניהם"), "deleteFromDevice": MessageLookupByLibrary.simpleMessage("מחק מהמכשיר"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deletePhotos": MessageLookupByLibrary.simpleMessage("מחק תמונות"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage("חסר מאפיין מרכזי שאני צריך"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -390,7 +380,7 @@ class MessageLookup extends MessageLookupByLibrary { "צופים יכולים עדיין לקחת צילומי מסך או לשמור עותק של התמונות שלך בעזרת כלים חיצוניים"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("שים לב"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage("השבת דו-גורמי"), "discord": MessageLookupByLibrary.simpleMessage("Discord"), @@ -401,12 +391,12 @@ class MessageLookup extends MessageLookupByLibrary { "download": MessageLookupByLibrary.simpleMessage("הורד"), "downloadFailed": MessageLookupByLibrary.simpleMessage("ההורדה נכשלה"), "downloading": MessageLookupByLibrary.simpleMessage("מוריד..."), - "dropSupportEmail": m31, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("ערוך"), "eligible": MessageLookupByLibrary.simpleMessage("זכאי"), "email": MessageLookupByLibrary.simpleMessage("דוא\"ל"), - "emailNoEnteAccount": m36, + "emailNoEnteAccount": m29, "emailVerificationToggle": MessageLookupByLibrary.simpleMessage("אימות מייל"), "empty": MessageLookupByLibrary.simpleMessage("ריק"), @@ -475,11 +465,11 @@ class MessageLookup extends MessageLookupByLibrary { "forgotPassword": MessageLookupByLibrary.simpleMessage("שכחתי סיסמה"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("מקום אחסון בחינם נתבע"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage("מקום אחסון שמיש"), "freeTrial": MessageLookupByLibrary.simpleMessage("ניסיון חינמי"), - "freeTrialValidTill": m42, + "freeTrialValidTill": m36, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("פנה אחסון במכשיר"), "freeUpSpace": MessageLookupByLibrary.simpleMessage("פנה מקום"), @@ -517,7 +507,7 @@ class MessageLookup extends MessageLookupByLibrary { "invite": MessageLookupByLibrary.simpleMessage("הזמן"), "inviteYourFriends": MessageLookupByLibrary.simpleMessage("הזמן את חברייך"), - "itemCount": m48, + "itemCount": m42, "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( "הפריטים שנבחרו יוסרו מהאלבום הזה"), "keepPhotos": MessageLookupByLibrary.simpleMessage("השאר תמונות"), @@ -539,7 +529,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("מגבלת כמות מכשירים"), "linkEnabled": MessageLookupByLibrary.simpleMessage("מאופשר"), "linkExpired": MessageLookupByLibrary.simpleMessage("פג תוקף"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("תאריך תפוגה ללינק"), "linkHasExpired": MessageLookupByLibrary.simpleMessage("הקישור פג תוקף"), @@ -565,13 +555,11 @@ class MessageLookup extends MessageLookupByLibrary { "maps": MessageLookupByLibrary.simpleMessage("מפות"), "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), - "memoryCount": m5, "merchandise": MessageLookupByLibrary.simpleMessage("סחורה"), "mobileWebDesktop": MessageLookupByLibrary.simpleMessage("פלאפון, דפדפן, שולחן עבודה"), "moderateStrength": MessageLookupByLibrary.simpleMessage("מתונה"), "monthly": MessageLookupByLibrary.simpleMessage("חודשי"), - "moveItem": m54, "moveToAlbum": MessageLookupByLibrary.simpleMessage("הזז לאלבום"), "movedToTrash": MessageLookupByLibrary.simpleMessage("הועבר לאשפה"), "movingFilesToAlbum": @@ -610,12 +598,12 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage("הססמה הוחלפה בהצלחה"), "passwordLock": MessageLookupByLibrary.simpleMessage("נעילת סיסמא"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordWarning": MessageLookupByLibrary.simpleMessage( "אנחנו לא שומרים את הסיסמא הזו, לכן אם אתה שוכח אותה, אנחנו לא יכולים לפענח את המידע שלך"), "paymentDetails": MessageLookupByLibrary.simpleMessage("פרטי תשלום"), "paymentFailed": MessageLookupByLibrary.simpleMessage("התשלום נכשל"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "peopleUsingYourCode": MessageLookupByLibrary.simpleMessage("אנשים משתמשים בקוד שלך"), "permanentlyDelete": @@ -657,7 +645,7 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("צור ticket"), "rateTheApp": MessageLookupByLibrary.simpleMessage("דרג את האפליקציה"), "rateUs": MessageLookupByLibrary.simpleMessage("דרג אותנו"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "recover": MessageLookupByLibrary.simpleMessage("שחזר"), "recoverAccount": MessageLookupByLibrary.simpleMessage("שחזר חשבון"), "recoverButton": MessageLookupByLibrary.simpleMessage("שחזר"), @@ -683,7 +671,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. תמסור את הקוד הזה לחברייך"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. הם נרשמים עבור תוכנית בתשלום"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("הפניות"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage("הפניות כרגע מושהות"), @@ -699,7 +687,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("הסר מהאלבום?"), "removeLink": MessageLookupByLibrary.simpleMessage("הסרת קישור"), "removeParticipant": MessageLookupByLibrary.simpleMessage("הסר משתתף"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePublicLink": MessageLookupByLibrary.simpleMessage("הסר לינק ציבורי"), "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( @@ -750,8 +738,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedFoldersWillBeEncryptedAndBackedUp": MessageLookupByLibrary.simpleMessage( "התיקיות שנבחרו יוצפנו ויגובו"), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, "send": MessageLookupByLibrary.simpleMessage("שלח"), "sendEmail": MessageLookupByLibrary.simpleMessage("שלח דוא\"ל"), "sendInvite": MessageLookupByLibrary.simpleMessage("שלח הזמנה"), @@ -770,15 +758,15 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("שתף אלבום עכשיו"), "shareLink": MessageLookupByLibrary.simpleMessage("שתף קישור"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage("שתף רק אם אנשים שאתה בוחר"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "הורד את ente על מנת שנוכל לשתף תמונות וסרטונים באיכות המקור באופן קל\n\nhttps://ente.io"), "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "שתף עם משתמשים שהם לא של ente"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("שתף את האלבום הראשון שלך"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -789,13 +777,13 @@ class MessageLookup extends MessageLookupByLibrary { "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "קבל התראות כשמישהו מוסיף תמונה לאלבום משותף שאתה חלק ממנו"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("שותף איתי"), "sharing": MessageLookupByLibrary.simpleMessage("משתף..."), "showMemories": MessageLookupByLibrary.simpleMessage("הצג זכרונות"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "אני מסכים לתנאי שירות ולמדיניות הפרטיות"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage("זה יימחק מכל האלבומים."), "skip": MessageLookupByLibrary.simpleMessage("דלג"), @@ -824,18 +812,18 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("אחסון"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("משפחה"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("אתה"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("גבול מקום האחסון נחרג"), "strongStrength": MessageLookupByLibrary.simpleMessage("חזקה"), - "subWillBeCancelledOn": m94, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("הרשם"), "subscription": MessageLookupByLibrary.simpleMessage("מנוי"), "success": MessageLookupByLibrary.simpleMessage("הצלחה"), "suggestFeatures": MessageLookupByLibrary.simpleMessage("הציעו מאפיינים"), "support": MessageLookupByLibrary.simpleMessage("תמיכה"), - "syncProgress": m95, + "syncProgress": m94, "syncing": MessageLookupByLibrary.simpleMessage("מסנכרן..."), "systemTheme": MessageLookupByLibrary.simpleMessage("מערכת"), "tapToCopy": MessageLookupByLibrary.simpleMessage("הקש כדי להעתיק"), @@ -851,7 +839,7 @@ class MessageLookup extends MessageLookupByLibrary { "theDownloadCouldNotBeCompleted": MessageLookupByLibrary.simpleMessage("לא ניתן להשלים את ההורדה"), "theme": MessageLookupByLibrary.simpleMessage("ערכת נושא"), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "thisCanBeUsedToRecoverYourAccountIfYou": MessageLookupByLibrary.simpleMessage( "זה יכול לשמש לשחזור החשבון שלך במקרה ותאבד את הגורם השני"), @@ -917,11 +905,11 @@ class MessageLookup extends MessageLookupByLibrary { "אנא בקר ב-web.ente.io על מנת לנהל את המנוי שלך"), "weAreOpenSource": MessageLookupByLibrary.simpleMessage("הקוד שלנו פתוח!"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("חלשה"), "welcomeBack": MessageLookupByLibrary.simpleMessage("ברוך שובך!"), "yearly": MessageLookupByLibrary.simpleMessage("שנתי"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("כן"), "yesCancel": MessageLookupByLibrary.simpleMessage("כן, בטל"), "yesConvertToViewer": @@ -944,7 +932,7 @@ class MessageLookup extends MessageLookupByLibrary { "אתה לא יכול לשנמך לתוכנית הזו"), "youCannotShareWithYourself": MessageLookupByLibrary.simpleMessage("אתה לא יכול לשתף עם עצמך"), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("החשבון שלך נמחק"), "yourPlanWasSuccessfullyDowngraded": diff --git a/mobile/lib/generated/intl/messages_id.dart b/mobile/lib/generated/intl/messages_id.dart index 2b412cc4d2..c4bbc2ee29 100644 --- a/mobile/lib/generated/intl/messages_id.dart +++ b/mobile/lib/generated/intl/messages_id.dart @@ -20,33 +20,28 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'id'; - static String m10(count) => - "${Intl.plural(count, other: 'Tambahkan kolaborator')}"; - - static String m11(count) => "${Intl.plural(count, other: 'Tambahkan item')}"; - - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "Add-on ${storageAmount} kamu berlaku sampai ${endDate}"; - static String m14(emailOrName) => "Ditambahkan oleh ${emailOrName}"; + static String m5(emailOrName) => "Ditambahkan oleh ${emailOrName}"; - static String m15(albumName) => "Berhasil ditambahkan ke ${albumName}"; + static String m6(albumName) => "Berhasil ditambahkan ke ${albumName}"; - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: '0 Peserta', one: '1 Peserta', other: '${count} Peserta')}"; - static String m18(versionValue) => "Versi: ${versionValue}"; + static String m9(versionValue) => "Versi: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} tersedia"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "Harap batalkan langganan kamu di ${paymentProvider} terlebih dahulu"; - static String m3(user) => + static String m13(user) => "${user} tidak akan dapat menambahkan foto lagi ke album ini\n\nIa masih dapat menghapus foto yang ditambahkan olehnya sendiri"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Keluargamu saat ini telah memperoleh ${storageAmountInGb} GB', @@ -54,138 +49,127 @@ class MessageLookup extends MessageLookupByLibrary { 'other': 'Kamu saat ini telah memperoleh ${storageAmountInGb} GB!', })}"; - static String m22(albumName) => "Link kolaborasi terbuat untuk ${albumName}"; + static String m15(albumName) => "Link kolaborasi terbuat untuk ${albumName}"; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Silakan hubungi ${familyAdminEmail} untuk mengatur langgananmu"; - static String m26(provider) => + static String m19(provider) => "Silakan hubungi kami di support@ente.io untuk mengatur langganan ${provider} kamu."; - static String m27(endpoint) => "Terhubung ke ${endpoint}"; + static String m20(endpoint) => "Terhubung ke ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Hapus ${count} item', other: 'Hapus ${count} item')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Menghapus ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Ini akan menghapus link publik yang digunakan untuk mengakses \"${albumName}\"."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Silakan kirimkan email ke ${supportEmail} dari alamat email terdaftar kamu"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "Kamu telah menghapus ${Intl.plural(count, other: '${count} file duplikat')} dan membersihkan (${storageSaved}!)"; - static String m34(newEmail) => "Email diubah menjadi ${newEmail}"; + static String m27(newEmail) => "Email diubah menjadi ${newEmail}"; - static String m36(email) => + static String m29(email) => "${email} tidak punya akun Ente.\n\nUndang dia untuk berbagi foto."; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "${Intl.plural(count, other: '${formattedNumber} file')} di perangkat ini telah berhasil dicadangkan"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "${Intl.plural(count, other: '${formattedNumber} file')} dalam album ini telah berhasil dicadangkan"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB setiap kali orang mendaftar dengan paket berbayar lalu menerapkan kode milikmu"; - static String m42(endDate) => "Percobaan gratis berlaku hingga ${endDate}"; + static String m36(endDate) => "Percobaan gratis berlaku hingga ${endDate}"; - static String m43(count) => - "Kamu masih bisa mengakses ${Intl.plural(count, other: 'filenya')} di Ente selama kamu masih berlangganan"; + static String m38(sizeInMBorGB) => "Bersihkan ${sizeInMBorGB}"; - static String m44(sizeInMBorGB) => "Bersihkan ${sizeInMBorGB}"; - - static String m45(count, formattedSize) => - "${Intl.plural(count, other: 'File tersebut bisa dihapus dari perangkat ini untuk membersihkan ${formattedSize}')}"; - - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Memproses ${currentlyProcessing} / ${totalCount}"; - static String m48(count) => "${Intl.plural(count, other: '${count} item')}"; + static String m42(count) => "${Intl.plural(count, other: '${count} item')}"; - static String m51(expiryTime) => "Link akan kedaluwarsa pada ${expiryTime}"; + static String m45(expiryTime) => "Link akan kedaluwarsa pada ${expiryTime}"; - static String m5(count, formattedCount) => - "${Intl.plural(count, zero: 'tiada kenangan', one: '${formattedCount} kenangan', other: '${formattedCount} kenangan')}"; + static String m50(albumName) => "Berhasil dipindahkan ke ${albumName}"; - static String m54(count) => "${Intl.plural(count, other: 'Pindahkan item')}"; - - static String m55(albumName) => "Berhasil dipindahkan ke ${albumName}"; - - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Harap hubungi ${familyAdminEmail} untuk mengubah kode kamu."; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Keamanan sandi: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Harap hubungi dukungan ${providerName} jika kamu dikenai biaya"; - static String m65(endDate) => + static String m61(endDate) => "Percobaan gratis berlaku hingga ${endDate}.\nKamu dapat memilih paket berbayar setelahnya."; - static String m66(toEmail) => "Silakan kirimi kami email di ${toEmail}"; + static String m62(toEmail) => "Silakan kirimi kami email di ${toEmail}"; - static String m67(toEmail) => "Silakan kirim log-nya ke \n${toEmail}"; + static String m63(toEmail) => "Silakan kirim log-nya ke \n${toEmail}"; - static String m70(storeName) => "Beri nilai di ${storeName}"; + static String m66(storeName) => "Beri nilai di ${storeName}"; - static String m75(storageInGB) => + static String m71(storageInGB) => "3. Kalian berdua mendapat ${storageInGB} GB* gratis"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} akan dikeluarkan dari album berbagi ini\n\nSemua foto yang ia tambahkan juga akan dihapus dari album ini"; - static String m77(endDate) => "Langganan akan diperpanjang pada ${endDate}"; + static String m73(endDate) => "Langganan akan diperpanjang pada ${endDate}"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, other: '${count} hasil ditemukan')}"; - static String m6(count) => "${count} terpilih"; + static String m77(count) => "${count} terpilih"; - static String m81(count, yourCount) => + static String m78(count, yourCount) => "${count} dipilih (${yourCount} milikmu)"; - static String m83(verificationID) => + static String m80(verificationID) => "Ini ID Verifikasi saya di ente.io: ${verificationID}."; - static String m7(verificationID) => + static String m81(verificationID) => "Halo, bisakah kamu pastikan bahwa ini adalah ID Verifikasi ente.io milikmu: ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Kode rujukan Ente: ${referralCode} \n\nTerapkan pada Pengaturan → Umum → Rujukan untuk mendapatkan ${referralStorageInGB} GB gratis setelah kamu mendaftar paket berbayar\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Bagikan dengan orang tertentu', one: 'Berbagi dengan 1 orang', other: 'Berbagi dengan ${numberOfPeople} orang')}"; - static String m86(emailIDs) => "Dibagikan dengan ${emailIDs}"; + static String m84(emailIDs) => "Dibagikan dengan ${emailIDs}"; - static String m87(fileType) => + static String m85(fileType) => "${fileType} ini akan dihapus dari perangkat ini."; - static String m88(fileType) => + static String m86(fileType) => "${fileType} ini tersimpan di Ente dan juga di perangkat ini."; - static String m89(fileType) => "${fileType} ini akan dihapus dari Ente."; + static String m87(fileType) => "${fileType} ini akan dihapus dari Ente."; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} dari ${totalAmount} ${totalStorageUnit} terpakai"; - static String m93(id) => + static String m92(id) => "${id} kamu telah terhubung dengan akun Ente lain.\nJika kamu ingin menggunakan ${id} kamu untuk akun ini, silahkan hubungi tim bantuan kami"; - static String m94(endDate) => + static String m93(endDate) => "Langganan kamu akan dibatalkan pada ${endDate}"; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "Ia juga mendapat ${storageAmountInGB} GB"; static String m97(email) => "Ini adalah ID Verifikasi milik ${email}"; @@ -194,13 +178,13 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "Verifikasi ${email}"; - static String m2(email) => + static String m110(email) => "Kami telah mengirimkan email ke ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, other: '${count} tahun lalu')}"; - static String m112(storageSaved) => + static String m113(storageSaved) => "Kamu telah berhasil membersihkan ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -219,14 +203,12 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Tambah email baru"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Tambah kolaborator"), - "addCollaborators": m10, "addFromDevice": MessageLookupByLibrary.simpleMessage("Tambahkan dari perangkat"), - "addItem": m11, "addLocation": MessageLookupByLibrary.simpleMessage("Tambah tempat"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Tambah"), "addMore": MessageLookupByLibrary.simpleMessage("Tambah lagi"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addPhotos": MessageLookupByLibrary.simpleMessage("Tambah foto"), "addSelected": MessageLookupByLibrary.simpleMessage("Tambahkan yang dipilih"), @@ -236,8 +218,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Tambah ke album tersembunyi"), "addViewer": MessageLookupByLibrary.simpleMessage("Tambahkan pemirsa"), "addedAs": MessageLookupByLibrary.simpleMessage("Ditambahkan sebagai"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("Menambahkan ke favorit..."), "advanced": MessageLookupByLibrary.simpleMessage("Lanjutan"), @@ -248,7 +230,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("Setelah 1 minggu"), "after1Year": MessageLookupByLibrary.simpleMessage("Setelah 1 tahun"), "albumOwner": MessageLookupByLibrary.simpleMessage("Pemilik"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Judul album"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Album diperbarui"), @@ -279,7 +261,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Desktop"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("Autentikasi diperlukan"), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("ID Apple"), "apply": MessageLookupByLibrary.simpleMessage("Terapkan"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Terapkan kode"), @@ -345,7 +327,7 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "Taut otomatis hanya tersedia di perangkat yang mendukung Chromecast."), "available": MessageLookupByLibrary.simpleMessage("Tersedia"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("Folder yang dicadangkan"), "backup": MessageLookupByLibrary.simpleMessage("Pencadangan"), @@ -368,10 +350,10 @@ class MessageLookup extends MessageLookupByLibrary { "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( "Hanya dapat menghapus berkas yang dimiliki oleh mu"), "cancel": MessageLookupByLibrary.simpleMessage("Batal"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Batalkan langganan"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( "Tidak dapat menghapus file berbagi"), "castIPMismatchBody": MessageLookupByLibrary.simpleMessage( @@ -401,7 +383,7 @@ class MessageLookup extends MessageLookupByLibrary { "claimMore": MessageLookupByLibrary.simpleMessage("Peroleh lebih banyak!"), "claimed": MessageLookupByLibrary.simpleMessage("Diperoleh"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "clearIndexes": MessageLookupByLibrary.simpleMessage("Hapus indeks"), "click": MessageLookupByLibrary.simpleMessage("• Click"), "close": MessageLookupByLibrary.simpleMessage("Tutup"), @@ -417,7 +399,7 @@ class MessageLookup extends MessageLookupByLibrary { "Buat link untuk memungkinkan orang lain menambahkan dan melihat foto yang ada pada album bersama kamu tanpa memerlukan app atau akun Ente. Ideal untuk mengumpulkan foto pada suatu acara."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Link kolaborasi"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Kolaborator"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( @@ -443,10 +425,10 @@ class MessageLookup extends MessageLookupByLibrary { "Konfirmasi kunci pemulihan kamu"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Hubungkan ke perangkat"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("Hubungi dukungan"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Kontak"), "continueLabel": MessageLookupByLibrary.simpleMessage("Lanjut"), "continueOnFreeTrial": MessageLookupByLibrary.simpleMessage( @@ -487,7 +469,7 @@ class MessageLookup extends MessageLookupByLibrary { "currentUsageIs": MessageLookupByLibrary.simpleMessage("Pemakaian saat ini sebesar "), "custom": MessageLookupByLibrary.simpleMessage("Kustom"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Gelap"), "dayToday": MessageLookupByLibrary.simpleMessage("Hari Ini"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Kemarin"), @@ -516,9 +498,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Hapus dari perangkat ini"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Hapus dari Ente"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deletePhotos": MessageLookupByLibrary.simpleMessage("Hapus foto"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "Fitur penting yang saya perlukan tidak ada"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -554,7 +536,7 @@ class MessageLookup extends MessageLookupByLibrary { "Orang yang melihat masih bisa mengambil tangkapan layar atau menyalin foto kamu menggunakan alat eksternal"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Perlu diketahui"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage( "Nonaktifkan autentikasi dua langkah"), "disablingTwofactorAuthentication": @@ -589,8 +571,8 @@ class MessageLookup extends MessageLookupByLibrary { "downloadFailed": MessageLookupByLibrary.simpleMessage("Gagal mengunduh"), "downloading": MessageLookupByLibrary.simpleMessage("Mengunduh..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, "edit": MessageLookupByLibrary.simpleMessage("Edit"), "editLocation": MessageLookupByLibrary.simpleMessage("Edit lokasi"), "editLocationTagTitle": @@ -602,8 +584,8 @@ class MessageLookup extends MessageLookupByLibrary { "Perubahan lokasi hanya akan terlihat di Ente"), "eligible": MessageLookupByLibrary.simpleMessage("memenuhi syarat"), "email": MessageLookupByLibrary.simpleMessage("Email"), - "emailChangedTo": m34, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailNoEnteAccount": m29, "emailVerificationToggle": MessageLookupByLibrary.simpleMessage("Verifikasi email"), "empty": MessageLookupByLibrary.simpleMessage("Kosongkan"), @@ -700,8 +682,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("Jenis file"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("Nama dan jenis file"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("File terhapus"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage("File tersimpan ke galeri"), @@ -715,23 +697,21 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Wajah yang ditemukan"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("Kuota gratis diperoleh"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage( "Kuota gratis yang dapat digunakan"), "freeTrial": MessageLookupByLibrary.simpleMessage("Percobaan gratis"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage( "Bersihkan penyimpanan perangkat"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Hemat ruang penyimpanan di perangkatmu dengan membersihkan file yang sudah tercadangkan."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Bersihkan ruang"), - "freeUpSpaceSaving": m45, "general": MessageLookupByLibrary.simpleMessage("Umum"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Menghasilkan kunci enkripsi..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Buka pengaturan"), "googlePlayId": MessageLookupByLibrary.simpleMessage("ID Google Play"), "grantFullAccessPrompt": MessageLookupByLibrary.simpleMessage( @@ -791,7 +771,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Sepertinya terjadi kesalahan. Silakan coba lagi setelah beberapa saat. Jika kesalahan terus terjadi, silakan hubungi tim dukungan kami."), - "itemCount": m48, + "itemCount": m42, "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( "Item yang dipilih akan dihapus dari album ini"), "joinDiscord": @@ -818,7 +798,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Batas perangkat"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Aktif"), "linkExpired": MessageLookupByLibrary.simpleMessage("Kedaluwarsa"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Waktu kedaluwarsa link"), "linkHasExpired": @@ -879,7 +859,6 @@ class MessageLookup extends MessageLookupByLibrary { "maps": MessageLookupByLibrary.simpleMessage("Peta"), "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), - "memoryCount": m5, "merchandise": MessageLookupByLibrary.simpleMessage("Merchandise"), "mlConsent": MessageLookupByLibrary.simpleMessage("Aktifkan pemelajaran mesin"), @@ -898,10 +877,9 @@ class MessageLookup extends MessageLookupByLibrary { "moderateStrength": MessageLookupByLibrary.simpleMessage("Sedang"), "moments": MessageLookupByLibrary.simpleMessage("Momen"), "monthly": MessageLookupByLibrary.simpleMessage("Bulanan"), - "moveItem": m54, "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage( "Pindahkan ke album tersembunyi"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("Pindah ke sampah"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( @@ -952,7 +930,7 @@ class MessageLookup extends MessageLookupByLibrary { "onDevice": MessageLookupByLibrary.simpleMessage("Di perangkat ini"), "onEnte": MessageLookupByLibrary.simpleMessage( "Di ente"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "oops": MessageLookupByLibrary.simpleMessage("Aduh"), "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( "Aduh, tidak dapat menyimpan perubahan"), @@ -979,7 +957,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Sandi berhasil diubah"), "passwordLock": MessageLookupByLibrary.simpleMessage("Kunci dengan sandi"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordWarning": MessageLookupByLibrary.simpleMessage( "Kami tidak menyimpan sandi ini, jadi jika kamu melupakannya, kami tidak akan bisa mendekripsi data kamu"), "paymentDetails": @@ -988,7 +966,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Pembayaran gagal"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Sayangnya, pembayaranmu gagal. Silakan hubungi tim bantuan agar dapat kami bantu!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Item menunggu"), "pendingSync": MessageLookupByLibrary.simpleMessage("Sinkronisasi tertunda"), @@ -1011,7 +989,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage( "Foto yang telah kamu tambahkan akan dihapus dari album ini"), "playOnTv": MessageLookupByLibrary.simpleMessage("Putar album di TV"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Langganan PlayStore"), "pleaseCheckYourInternetConnectionAndTryAgain": @@ -1023,12 +1001,12 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Silakan hubungi tim bantuan jika masalah terus terjadi"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("Harap berikan izin"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Silakan masuk akun lagi"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Silakan coba lagi"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1062,7 +1040,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Buat tiket dukungan"), "rateTheApp": MessageLookupByLibrary.simpleMessage("Nilai app ini"), "rateUs": MessageLookupByLibrary.simpleMessage("Beri kami nilai"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "recover": MessageLookupByLibrary.simpleMessage("Pulihkan"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Pulihkan akun"), "recoverButton": MessageLookupByLibrary.simpleMessage("Pulihkan"), @@ -1090,7 +1068,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Berikan kode ini ke teman kamu"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Ia perlu daftar ke paket berbayar"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Referensi"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage("Rujukan sedang dijeda"), @@ -1112,7 +1090,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Hapus link"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Hapus peserta"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Hapus label orang"), "removePublicLink": @@ -1128,7 +1106,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Ubah nama file"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Perpanjang langganan"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Laporkan bug"), "reportBug": MessageLookupByLibrary.simpleMessage("Laporkan bug"), "resendEmail": @@ -1179,7 +1157,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Album, nama dan jenis file"), "searchHint5": MessageLookupByLibrary.simpleMessage( "Segera tiba: Penelusuran wajah & ajaib ✨"), - "searchResultCount": m79, + "searchResultCount": m75, "security": MessageLookupByLibrary.simpleMessage("Keamanan"), "selectALocation": MessageLookupByLibrary.simpleMessage("Pilih lokasi"), "selectALocationFirst": MessageLookupByLibrary.simpleMessage( @@ -1204,8 +1182,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Item terpilih akan dihapus dari semua album dan dipindahkan ke sampah."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, "send": MessageLookupByLibrary.simpleMessage("Kirim"), "sendEmail": MessageLookupByLibrary.simpleMessage("Kirim email"), "sendInvite": MessageLookupByLibrary.simpleMessage("Kirim undangan"), @@ -1226,16 +1204,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Bagikan album sekarang"), "shareLink": MessageLookupByLibrary.simpleMessage("Bagikan link"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Bagikan hanya dengan orang yang kamu inginkan"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Unduh Ente agar kita bisa berbagi foto dan video kualitas asli dengan mudah\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Bagikan ke pengguna non-Ente"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("Bagikan album pertamamu"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1248,7 +1226,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Foto terbagi baru"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Terima notifikasi apabila seseorang menambahkan foto ke album bersama yang kamu ikuti"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Dibagikan dengan saya"), "sharedWithYou": @@ -1263,11 +1241,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Keluar di perangkat lain"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Saya menyetujui ketentuan layanan dan kebijakan privasi Ente"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Ia akan dihapus dari semua album."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Lewati"), "social": MessageLookupByLibrary.simpleMessage("Sosial"), "someItemsAreInBothEnteAndYourDevice": @@ -1309,13 +1287,13 @@ class MessageLookup extends MessageLookupByLibrary { "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Keluarga"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Kamu"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage( "Batas penyimpanan terlampaui"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "strongStrength": MessageLookupByLibrary.simpleMessage("Kuat"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Berlangganan"), "subscription": MessageLookupByLibrary.simpleMessage("Langganan"), "success": MessageLookupByLibrary.simpleMessage("Berhasil"), @@ -1355,7 +1333,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Item ini akan dihapus dari perangkat ini."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( "Tindakan ini tidak dapat dibatalkan"), "thisAlbumAlreadyHDACollaborativeLink": @@ -1472,13 +1450,13 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Menunggu WiFi..."), "weAreOpenSource": MessageLookupByLibrary.simpleMessage("Kode sumber kami terbuka!"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Lemah"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Selamat datang kembali!"), "whatsNew": MessageLookupByLibrary.simpleMessage("Hal yang baru"), "yearly": MessageLookupByLibrary.simpleMessage("Tahunan"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Ya"), "yesCancel": MessageLookupByLibrary.simpleMessage("Ya, batalkan"), "yesConvertToViewer": @@ -1505,7 +1483,7 @@ class MessageLookup extends MessageLookupByLibrary { "Kamu tidak bisa berbagi dengan dirimu sendiri"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "Kamu tidak memiliki item di arsip."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("Akunmu telah dihapus"), "yourMap": MessageLookupByLibrary.simpleMessage("Peta kamu"), diff --git a/mobile/lib/generated/intl/messages_it.dart b/mobile/lib/generated/intl/messages_it.dart index a29cb17665..e98950cc0f 100644 --- a/mobile/lib/generated/intl/messages_it.dart +++ b/mobile/lib/generated/intl/messages_it.dart @@ -20,39 +20,30 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'it'; - static String m9(title) => "${title} (Io)"; + static String m0(title) => "${title} (Io)"; - static String m10(count) => - "${Intl.plural(count, zero: 'Aggiungi collaboratore', one: 'Aggiungi collaboratore', other: 'Aggiungi collaboratori')}"; - - static String m11(count) => - "${Intl.plural(count, one: 'Aggiungi elemento', other: 'Aggiungi elementi')}"; - - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "Il tuo spazio aggiuntivo di ${storageAmount} è valido fino al ${endDate}"; - static String m13(count) => - "${Intl.plural(count, zero: 'Aggiungi visualizzatore', one: 'Aggiungi visualizzatore', other: 'Aggiungi visualizzatori')}"; + static String m5(emailOrName) => "Aggiunto da ${emailOrName}"; - static String m14(emailOrName) => "Aggiunto da ${emailOrName}"; + static String m6(albumName) => "Aggiunto con successo su ${albumName}"; - static String m15(albumName) => "Aggiunto con successo su ${albumName}"; - - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'Nessun partecipante', one: '1 Partecipante', other: '${count} Partecipanti')}"; - static String m18(versionValue) => "Versione: ${versionValue}"; + static String m9(versionValue) => "Versione: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} liberi"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "Annulla prima il tuo abbonamento esistente da ${paymentProvider}"; - static String m3(user) => + static String m13(user) => "${user} non sarà più in grado di aggiungere altre foto a questo album\n\nSarà ancora in grado di rimuovere le foto esistenti aggiunte da lui o lei"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Il tuo piano famiglia ha già richiesto ${storageAmountInGb} GB finora', @@ -60,181 +51,166 @@ class MessageLookup extends MessageLookupByLibrary { 'other': 'Hai già richiesto ${storageAmountInGb} GB finora!', })}"; - static String m22(albumName) => "Link collaborativo creato per ${albumName}"; + static String m15(albumName) => "Link collaborativo creato per ${albumName}"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: 'Aggiunti 0 collaboratori', one: 'Aggiunto 1 collaboratore', other: 'Aggiunti ${count} collaboratori')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "Stai per aggiungere ${email} come contatto fidato. Potranno recuperare il tuo account se sei assente per ${numOfDays} giorni."; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Contatta ${familyAdminEmail} per gestire il tuo abbonamento"; - static String m26(provider) => + static String m19(provider) => "Scrivi all\'indirizzo support@ente.io per gestire il tuo abbonamento ${provider}."; - static String m27(endpoint) => "Connesso a ${endpoint}"; + static String m20(endpoint) => "Connesso a ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Elimina ${count} elemento', other: 'Elimina ${count} elementi')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Eliminazione di ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Questo rimuoverà il link pubblico per accedere a \"${albumName}\"."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Per favore invia un\'email a ${supportEmail} dall\'indirizzo email con cui ti sei registrato"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "Hai ripulito ${Intl.plural(count, one: '${count} doppione', other: '${count} doppioni')}, salvando (${storageSaved}!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} file, ${formattedSize} l\'uno"; - static String m34(newEmail) => "Email cambiata in ${newEmail}"; + static String m27(newEmail) => "Email cambiata in ${newEmail}"; - static String m36(email) => + static String m29(email) => "${email} non ha un account Ente.\n\nInvia un invito per condividere foto."; - static String m38(text) => "Trovate foto aggiuntive per ${text}"; + static String m31(text) => "Trovate foto aggiuntive per ${text}"; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "${Intl.plural(count, one: '1 file', other: '${formattedNumber} file')} di quest\'album sono stati salvati in modo sicuro"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "${Intl.plural(count, one: '1 file', other: '${formattedNumber} file')} di quest\'album sono stati salvati in modo sicuro"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB ogni volta che qualcuno si iscrive a un piano a pagamento e applica il tuo codice"; - static String m42(endDate) => "La prova gratuita termina il ${endDate}"; + static String m36(endDate) => "La prova gratuita termina il ${endDate}"; - static String m43(count) => - "Puoi ancora accedere a ${Intl.plural(count, one: '', other: 'loro')} su ente finché hai un abbonamento attivo"; + static String m38(sizeInMBorGB) => "Libera ${sizeInMBorGB}"; - static String m44(sizeInMBorGB) => "Libera ${sizeInMBorGB}"; - - static String m45(count, formattedSize) => - "${Intl.plural(count, one: 'Può essere cancellata per liberare ${formattedSize}', other: 'Possono essere cancellati per liberare ${formattedSize}')}"; - - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Elaborazione ${currentlyProcessing} / ${totalCount}"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} elemento', other: '${count} elementi')}"; - static String m50(email) => + static String m44(email) => "${email} ti ha invitato a essere un contatto fidato"; - static String m51(expiryTime) => "Il link scadrà il ${expiryTime}"; + static String m45(expiryTime) => "Il link scadrà il ${expiryTime}"; - static String m52(email) => "Collega persona a ${email}"; + static String m46(email) => "Collega persona a ${email}"; - static String m5(count, formattedCount) => - "${Intl.plural(count, one: '${formattedCount} ricordo', other: '${formattedCount} ricordi')}"; + static String m50(albumName) => "Spostato con successo su ${albumName}"; - static String m54(count) => - "${Intl.plural(count, one: 'Sposta elemento', other: 'Sposta elementi')}"; + static String m51(personName) => "Nessun suggerimento per ${personName}"; - static String m55(albumName) => "Spostato con successo su ${albumName}"; + static String m52(name) => "Non è ${name}?"; - static String m56(personName) => "Nessun suggerimento per ${personName}"; - - static String m57(name) => "Non è ${name}?"; - - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Per favore contatta ${familyAdminEmail} per cambiare il tuo codice."; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Sicurezza password: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Si prega di parlare con il supporto di ${providerName} se ti è stato addebitato qualcosa"; - static String m64(count) => - "${Intl.plural(count, zero: '0 foto', one: '1 foto', other: '${count} foto')}"; - - static String m65(endDate) => + static String m61(endDate) => "Prova gratuita valida fino al ${endDate}.\nIn seguito potrai scegliere un piano a pagamento."; - static String m66(toEmail) => "Per favore invia un\'email a ${toEmail}"; + static String m62(toEmail) => "Per favore invia un\'email a ${toEmail}"; - static String m67(toEmail) => "Invia i log a \n${toEmail}"; + static String m63(toEmail) => "Invia i log a \n${toEmail}"; - static String m69(folderName) => "Elaborando ${folderName}..."; + static String m65(folderName) => "Elaborando ${folderName}..."; - static String m70(storeName) => "Valutaci su ${storeName}"; + static String m66(storeName) => "Valutaci su ${storeName}"; - static String m71(name) => "Riassegnato a ${name}"; + static String m67(name) => "Riassegnato a ${name}"; - static String m72(days, email) => + static String m68(days, email) => "Puoi accedere all\'account dopo ${days} giorni. Una notifica verrà inviata a ${email}."; - static String m73(email) => + static String m69(email) => "Ora puoi recuperare l\'account di ${email} impostando una nuova password."; - static String m74(email) => + static String m70(email) => "${email} sta cercando di recuperare il tuo account."; - static String m75(storageInGB) => + static String m71(storageInGB) => "3. Ottenete entrambi ${storageInGB} GB* gratis"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} verrà rimosso da questo album condiviso\n\nQualsiasi foto aggiunta dall\'utente verrà rimossa dall\'album"; - static String m77(endDate) => "Si rinnova il ${endDate}"; + static String m73(endDate) => "Si rinnova il ${endDate}"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: '${count} risultato trovato', other: '${count} risultati trovati')}"; - static String m6(count) => "${count} selezionati"; + static String m77(count) => "${count} selezionati"; - static String m81(count, yourCount) => + static String m78(count, yourCount) => "${count} selezionato (${yourCount} tuoi)"; - static String m83(verificationID) => + static String m80(verificationID) => "Ecco il mio ID di verifica: ${verificationID} per ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "Hey, puoi confermare che questo è il tuo ID di verifica: ${verificationID} su ente.io"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Codice invito Ente: ${referralCode} \n\nInseriscilo in Impostazioni → Generali → Inviti per ottenere ${referralStorageInGB} GB gratis dopo la sottoscrizione a un piano a pagamento\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Condividi con persone specifiche', one: 'Condividi con una persona', other: 'Condividi con ${numberOfPeople} persone')}"; - static String m86(emailIDs) => "Condiviso con ${emailIDs}"; + static String m84(emailIDs) => "Condiviso con ${emailIDs}"; - static String m87(fileType) => + static String m85(fileType) => "Questo ${fileType} verrà eliminato dal tuo dispositivo."; - static String m88(fileType) => + static String m86(fileType) => "Questo ${fileType} è sia su Ente che sul tuo dispositivo."; - static String m89(fileType) => "Questo ${fileType} verrà eliminato da Ente."; + static String m87(fileType) => "Questo ${fileType} verrà eliminato da Ente."; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} di ${totalAmount} ${totalStorageUnit} utilizzati"; - static String m93(id) => + static String m92(id) => "Il tuo ${id} è già collegato a un altro account Ente.\nSe desideri utilizzare il tuo ${id} con questo account, per favore contatta il nostro supporto\'\'"; - static String m94(endDate) => "L\'abbonamento verrà cancellato il ${endDate}"; + static String m93(endDate) => "L\'abbonamento verrà cancellato il ${endDate}"; - static String m95(completed, total) => + static String m94(completed, total) => "${completed}/${total} ricordi conservati"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Tocca per caricare, il caricamento è attualmente ignorato a causa di ${ignoreReason}"; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "Anche loro riceveranno ${storageAmountInGB} GB"; static String m97(email) => "Questo è l\'ID di verifica di ${email}"; @@ -254,16 +230,13 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "Verifica ${email}"; - static String m109(count) => - "${Intl.plural(count, zero: 'Aggiunti 0 visualizzatori', one: 'Aggiunto 1 visualizzatore', other: 'Aggiunti ${count} visualizzatori')}"; - - static String m2(email) => + static String m110(email) => "Abbiamo inviato una mail a ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: '${count} anno fa', other: '${count} anni fa')}"; - static String m112(storageSaved) => + static String m113(storageSaved) => "Hai liberato con successo ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -276,7 +249,7 @@ class MessageLookup extends MessageLookupByLibrary { "account": MessageLookupByLibrary.simpleMessage("Account"), "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage( "L\'account è già configurato."), - "accountOwnerPersonAppbarTitle": m9, + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("Bentornato!"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( @@ -289,11 +262,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Aggiungi una nuova email"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Aggiungi collaboratore"), - "addCollaborators": m10, "addFiles": MessageLookupByLibrary.simpleMessage("Aggiungi File"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Aggiungi dal dispositivo"), - "addItem": m11, "addLocation": MessageLookupByLibrary.simpleMessage("Aggiungi luogo"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Aggiungi"), "addMore": MessageLookupByLibrary.simpleMessage("Aggiungi altri"), @@ -305,7 +276,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Aggiungi nuova persona"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage( "Dettagli dei componenti aggiuntivi"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Componenti aggiuntivi"), "addPhotos": MessageLookupByLibrary.simpleMessage("Aggiungi foto"), "addSelected": @@ -319,12 +290,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Aggiungi contatto fidato"), "addViewer": MessageLookupByLibrary.simpleMessage("Aggiungi in sola lettura"), - "addViewers": m13, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage("Aggiungi le tue foto ora"), "addedAs": MessageLookupByLibrary.simpleMessage("Aggiunto come"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("Aggiunto ai preferiti..."), "advanced": MessageLookupByLibrary.simpleMessage("Avanzate"), @@ -336,7 +306,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Dopo una settimana"), "after1Year": MessageLookupByLibrary.simpleMessage("Dopo un anno"), "albumOwner": MessageLookupByLibrary.simpleMessage("Proprietario"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Titolo album"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Album aggiornato"), @@ -385,7 +355,7 @@ class MessageLookup extends MessageLookupByLibrary { "appLock": MessageLookupByLibrary.simpleMessage("Blocco app"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Scegli tra la schermata di blocco predefinita del dispositivo e una schermata di blocco personalizzata con PIN o password."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Applica"), "applyCodeTitle": @@ -469,7 +439,7 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "L\'associazione automatica funziona solo con i dispositivi che supportano Chromecast."), "available": MessageLookupByLibrary.simpleMessage("Disponibile"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("Cartelle salvate"), "backup": MessageLookupByLibrary.simpleMessage("Backup"), @@ -507,10 +477,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Annulla il recupero"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "Sei sicuro di voler annullare il recupero?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Annulla abbonamento"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( "Impossibile eliminare i file condivisi"), "castAlbum": MessageLookupByLibrary.simpleMessage("Trasmetti album"), @@ -546,7 +516,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Richiedi spazio gratuito"), "claimMore": MessageLookupByLibrary.simpleMessage("Richiedine di più!"), "claimed": MessageLookupByLibrary.simpleMessage("Riscattato"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("Pulisci Senza Categoria"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -575,12 +545,12 @@ class MessageLookup extends MessageLookupByLibrary { "Crea un link per consentire alle persone di aggiungere e visualizzare foto nel tuo album condiviso senza bisogno di un\'applicazione o di un account Ente. Ottimo per raccogliere foto di un evento."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Link collaborativo"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Collaboratore"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "I collaboratori possono aggiungere foto e video all\'album condiviso."), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("Disposizione"), "collageSaved": MessageLookupByLibrary.simpleMessage( "Collage salvato nella galleria"), @@ -598,7 +568,7 @@ class MessageLookup extends MessageLookupByLibrary { "Sei sicuro di voler disattivare l\'autenticazione a due fattori?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage( "Conferma eliminazione account"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Sì, voglio eliminare definitivamente questo account e i dati associati a esso su tutte le applicazioni."), "confirmPassword": @@ -611,10 +581,10 @@ class MessageLookup extends MessageLookupByLibrary { "Conferma la tua chiave di recupero"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Connetti al dispositivo"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("Contatta il supporto"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Contatti"), "contents": MessageLookupByLibrary.simpleMessage("Contenuti"), "continueLabel": MessageLookupByLibrary.simpleMessage("Continua"), @@ -661,7 +631,7 @@ class MessageLookup extends MessageLookupByLibrary { "currentlyRunning": MessageLookupByLibrary.simpleMessage("attualmente in esecuzione"), "custom": MessageLookupByLibrary.simpleMessage("Personalizza"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Scuro"), "dayToday": MessageLookupByLibrary.simpleMessage("Oggi"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Ieri"), @@ -699,11 +669,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Elimina dal dispositivo"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Elimina da Ente"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Elimina posizione"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Elimina foto"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "Manca una caratteristica chiave di cui ho bisogno"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -744,7 +714,7 @@ class MessageLookup extends MessageLookupByLibrary { "I visualizzatori possono scattare screenshot o salvare una copia delle foto utilizzando strumenti esterni"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Nota bene"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage( "Disabilita autenticazione a due fattori"), "disablingTwofactorAuthentication": @@ -788,9 +758,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Scaricamento fallito"), "downloading": MessageLookupByLibrary.simpleMessage("Scaricamento in corso..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Modifica"), "editLocation": MessageLookupByLibrary.simpleMessage("Modifica luogo"), "editLocationTagTitle": @@ -804,8 +774,8 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("Email"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage("Email già registrata."), - "emailChangedTo": m34, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage("Email non registrata."), "emailVerificationToggle": @@ -887,7 +857,7 @@ class MessageLookup extends MessageLookupByLibrary { "exportYourData": MessageLookupByLibrary.simpleMessage("Esporta dati"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage("Trovate foto aggiuntive"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Faccia non ancora raggruppata, per favore torna più tardi"), "faceRecognition": @@ -937,8 +907,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("Tipi di file"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("Tipi e nomi di file"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("File eliminati"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage("File salvati nella galleria"), @@ -954,26 +924,24 @@ class MessageLookup extends MessageLookupByLibrary { "foundFaces": MessageLookupByLibrary.simpleMessage("Volti trovati"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("Spazio gratuito richiesto"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage("Spazio libero utilizzabile"), "freeTrial": MessageLookupByLibrary.simpleMessage("Prova gratuita"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("Libera spazio"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Risparmia spazio sul tuo dispositivo cancellando i file che sono già stati salvati online."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Libera spazio"), - "freeUpSpaceSaving": m45, "gallery": MessageLookupByLibrary.simpleMessage("Galleria"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "Fino a 1000 ricordi mostrati nella galleria"), "general": MessageLookupByLibrary.simpleMessage("Generali"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Generazione delle chiavi di crittografia..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Vai alle impostazioni"), "googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"), @@ -1058,7 +1026,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Sembra che qualcosa sia andato storto. Riprova tra un po\'. Se l\'errore persiste, contatta il nostro team di supporto."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Gli elementi mostrano il numero di giorni rimanenti prima della cancellazione permanente"), @@ -1084,7 +1052,7 @@ class MessageLookup extends MessageLookupByLibrary { "legacy": MessageLookupByLibrary.simpleMessage("Legacy"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Account Legacy"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "Legacy consente ai contatti fidati di accedere al tuo account in tua assenza."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1099,7 +1067,7 @@ class MessageLookup extends MessageLookupByLibrary { "per una condivisione più veloce"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Attivato"), "linkExpired": MessageLookupByLibrary.simpleMessage("Scaduto"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Scadenza del link"), "linkHasExpired": MessageLookupByLibrary.simpleMessage("Il link è scaduto"), @@ -1107,7 +1075,7 @@ class MessageLookup extends MessageLookupByLibrary { "linkPerson": MessageLookupByLibrary.simpleMessage("Collega persona"), "linkPersonCaption": MessageLookupByLibrary.simpleMessage( "per una migliore esperienza di condivisione"), - "linkPersonToEmail": m52, + "linkPersonToEmail": m46, "livePhotos": MessageLookupByLibrary.simpleMessage("Live Photo"), "loadMessage1": MessageLookupByLibrary.simpleMessage( "Puoi condividere il tuo abbonamento con la tua famiglia"), @@ -1198,7 +1166,6 @@ class MessageLookup extends MessageLookupByLibrary { "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), "me": MessageLookupByLibrary.simpleMessage("Io"), - "memoryCount": m5, "merchandise": MessageLookupByLibrary.simpleMessage("Merchandise"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Unisci con esistente"), @@ -1226,12 +1193,11 @@ class MessageLookup extends MessageLookupByLibrary { "moreDetails": MessageLookupByLibrary.simpleMessage("Più dettagli"), "mostRecent": MessageLookupByLibrary.simpleMessage("Più recenti"), "mostRelevant": MessageLookupByLibrary.simpleMessage("Più rilevanti"), - "moveItem": m54, "moveToAlbum": MessageLookupByLibrary.simpleMessage("Sposta nell\'album"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Sposta in album nascosto"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("Spostato nel cestino"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( @@ -1284,10 +1250,10 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Nessun risultato"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Nessun risultato trovato"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage( "Nessun blocco di sistema trovato"), - "notPersonLabel": m57, + "notPersonLabel": m52, "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Ancora nulla di condiviso con te"), "nothingToSeeHere": @@ -1297,7 +1263,7 @@ class MessageLookup extends MessageLookupByLibrary { "onDevice": MessageLookupByLibrary.simpleMessage("Sul dispositivo"), "onEnte": MessageLookupByLibrary.simpleMessage( "Su ente"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Solo loro"), "oops": MessageLookupByLibrary.simpleMessage("Oops"), "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( @@ -1336,7 +1302,7 @@ class MessageLookup extends MessageLookupByLibrary { "Password modificata con successo"), "passwordLock": MessageLookupByLibrary.simpleMessage("Blocco con password"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "La sicurezza della password viene calcolata considerando la lunghezza della password, i caratteri usati e se la password appare o meno nelle prime 10.000 password più usate"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1347,7 +1313,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Pagamento non riuscito"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Purtroppo il tuo pagamento non è riuscito. Contatta l\'assistenza e ti aiuteremo!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Elementi in sospeso"), "pendingSync": @@ -1372,14 +1338,13 @@ class MessageLookup extends MessageLookupByLibrary { "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Le foto aggiunte da te verranno rimosse dall\'album"), - "photosCount": m64, "pickCenterPoint": MessageLookupByLibrary.simpleMessage( "Selezionare il punto centrale"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Fissa l\'album"), "pinLock": MessageLookupByLibrary.simpleMessage("Blocco con PIN"), "playOnTv": MessageLookupByLibrary.simpleMessage("Riproduci album sulla TV"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Abbonamento su PlayStore"), "pleaseCheckYourInternetConnectionAndTryAgain": @@ -1391,14 +1356,14 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Riprova. Se il problema persiste, ti invitiamo a contattare l\'assistenza"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("Concedi i permessi"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage( "Effettua nuovamente l\'accesso"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Si prega di selezionare i link rapidi da rimuovere"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Riprova"), "pleaseVerifyTheCodeYouHaveEntered": MessageLookupByLibrary.simpleMessage( @@ -1423,7 +1388,7 @@ class MessageLookup extends MessageLookupByLibrary { "privateSharing": MessageLookupByLibrary.simpleMessage("Condivisioni private"), "proceed": MessageLookupByLibrary.simpleMessage("Prosegui"), - "processingImport": m69, + "processingImport": m65, "processingVideos": MessageLookupByLibrary.simpleMessage("Elaborando video"), "publicLinkCreated": @@ -1436,9 +1401,9 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("Invia ticket"), "rateTheApp": MessageLookupByLibrary.simpleMessage("Valuta l\'app"), "rateUs": MessageLookupByLibrary.simpleMessage("Lascia una recensione"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "reassignMe": MessageLookupByLibrary.simpleMessage("Riassegna \"Io\""), - "reassignedToName": m71, + "reassignedToName": m67, "reassigningLoading": MessageLookupByLibrary.simpleMessage("Riassegnando..."), "recover": MessageLookupByLibrary.simpleMessage("Recupera"), @@ -1449,7 +1414,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Recupera l\'account"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("Recupero avviato"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Chiave di recupero"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( @@ -1464,12 +1429,12 @@ class MessageLookup extends MessageLookupByLibrary { "Chiave di recupero verificata"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Se hai dimenticato la password, la tua chiave di ripristino è l\'unico modo per recuperare le tue foto. La puoi trovare in Impostazioni > Account.\n\nInserisci la tua chiave di recupero per verificare di averla salvata correttamente."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("Recupero riuscito!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "Un contatto fidato sta tentando di accedere al tuo account"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "Il dispositivo attuale non è abbastanza potente per verificare la tua password, ma la possiamo rigenerare in un modo che funzioni su tutti i dispositivi.\n\nEffettua il login utilizzando la tua chiave di recupero e rigenera la tua password (puoi utilizzare nuovamente la stessa se vuoi)."), "recreatePasswordTitle": @@ -1485,7 +1450,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Condividi questo codice con i tuoi amici"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Si iscrivono per un piano a pagamento"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Invita un Amico"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "I referral code sono attualmente in pausa"), @@ -1514,7 +1479,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Elimina link"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Rimuovi partecipante"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Rimuovi etichetta persona"), "removePublicLink": @@ -1534,7 +1499,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Rinomina file"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Rinnova abbonamento"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Segnala un bug"), "reportBug": MessageLookupByLibrary.simpleMessage("Segnala un bug"), "resendEmail": MessageLookupByLibrary.simpleMessage("Rinvia email"), @@ -1611,7 +1576,7 @@ class MessageLookup extends MessageLookupByLibrary { "Invita persone e vedrai qui tutte le foto condivise da loro"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "Le persone saranno mostrate qui una volta che l\'elaborazione e la sincronizzazione saranno completate"), - "searchResultCount": m79, + "searchResultCount": m75, "security": MessageLookupByLibrary.simpleMessage("Sicurezza"), "selectALocation": MessageLookupByLibrary.simpleMessage("Seleziona un luogo"), @@ -1643,8 +1608,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Gli elementi selezionati verranno eliminati da tutti gli album e spostati nel cestino."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, "send": MessageLookupByLibrary.simpleMessage("Invia"), "sendEmail": MessageLookupByLibrary.simpleMessage("Invia email"), "sendInvite": MessageLookupByLibrary.simpleMessage("Invita"), @@ -1676,16 +1641,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Condividi un album"), "shareLink": MessageLookupByLibrary.simpleMessage("Condividi link"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Condividi solo con le persone che vuoi"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Scarica Ente in modo da poter facilmente condividere foto e video in qualità originale\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Condividi con utenti che non hanno un account Ente"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage( "Condividi il tuo primo album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1696,7 +1661,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nuove foto condivise"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Ricevi notifiche quando qualcuno aggiunge una foto a un album condiviso, di cui fai parte"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Condivisi con me"), "sharedWithYou": @@ -1713,11 +1678,11 @@ class MessageLookup extends MessageLookupByLibrary { "Esci dagli altri dispositivi"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Accetto i termini di servizio e la politica sulla privacy"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Verrà eliminato da tutti gli album."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Salta"), "social": MessageLookupByLibrary.simpleMessage("Social"), "someItemsAreInBothEnteAndYourDevice": @@ -1766,13 +1731,13 @@ class MessageLookup extends MessageLookupByLibrary { "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Famiglia"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Tu"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage( "Limite d\'archiviazione superato"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "strongStrength": MessageLookupByLibrary.simpleMessage("Forte"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Iscriviti"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "È necessario un abbonamento a pagamento attivo per abilitare la condivisione."), @@ -1789,7 +1754,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("Suggerisci una funzionalità"), "support": MessageLookupByLibrary.simpleMessage("Assistenza"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Sincronizzazione interrotta"), "syncing": MessageLookupByLibrary.simpleMessage( @@ -1802,7 +1767,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Tocca per sbloccare"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Premi per caricare"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Sembra che qualcosa sia andato storto. Riprova tra un po\'. Se l\'errore persiste, contatta il nostro team di supporto."), "terminate": MessageLookupByLibrary.simpleMessage("Terminata"), @@ -1823,7 +1788,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Questi file verranno eliminati dal tuo dispositivo."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Verranno eliminati da tutti gli album."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1974,7 +1939,6 @@ class MessageLookup extends MessageLookupByLibrary { "viewRecoveryKey": MessageLookupByLibrary.simpleMessage( "Visualizza chiave di recupero"), "viewer": MessageLookupByLibrary.simpleMessage("Sola lettura"), - "viewersSuccessfullyAdded": m109, "visitWebToManage": MessageLookupByLibrary.simpleMessage( "Visita web.ente.io per gestire il tuo abbonamento"), "waitingForVerification": @@ -1987,7 +1951,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Non puoi modificare foto e album che non possiedi"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Debole"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Bentornato/a!"), "whatsNew": MessageLookupByLibrary.simpleMessage("Novità"), @@ -1995,7 +1959,7 @@ class MessageLookup extends MessageLookupByLibrary { "Un contatto fidato può aiutare a recuperare i tuoi dati."), "yearShort": MessageLookupByLibrary.simpleMessage("anno"), "yearly": MessageLookupByLibrary.simpleMessage("Annuale"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Si"), "yesCancel": MessageLookupByLibrary.simpleMessage("Sì, cancella"), "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( @@ -2027,7 +1991,7 @@ class MessageLookup extends MessageLookupByLibrary { "Non puoi condividere con te stesso"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "Non hai nulla di archiviato."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage( "Il tuo account è stato eliminato"), "yourMap": MessageLookupByLibrary.simpleMessage("La tua mappa"), diff --git a/mobile/lib/generated/intl/messages_ja.dart b/mobile/lib/generated/intl/messages_ja.dart index 0a1de9ed9b..a1ba8ddf73 100644 --- a/mobile/lib/generated/intl/messages_ja.dart +++ b/mobile/lib/generated/intl/messages_ja.dart @@ -20,246 +20,222 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'ja'; - static String m9(title) => "${title} (私)"; + static String m0(title) => "${title} (私)"; - static String m10(count) => - "${Intl.plural(count, zero: '共同編集者を追加', one: '共同編集者を追加', other: '共同編集者を追加')}"; - - static String m11(count) => - "${Intl.plural(count, one: '項目を追加', other: '項目を追加')}"; - - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "あなたの ${storageAmount} アドオンは ${endDate} まで有効です"; - static String m13(count) => - "${Intl.plural(count, zero: 'ビューアーを追加', one: 'ビューアーを追加', other: 'ビューアーを追加')}"; + static String m5(emailOrName) => "${emailOrName} が追加"; - static String m14(emailOrName) => "${emailOrName} が追加"; + static String m6(albumName) => "${albumName} に追加しました"; - static String m15(albumName) => "${albumName} に追加しました"; + static String m7(name) => "${name}に注目!"; - static String m16(name) => "${name}に注目!"; - - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: '参加者なし', one: '1 参加者', other: '${count} 参加者')}"; - static String m18(versionValue) => "バージョン: ${versionValue}"; + static String m9(versionValue) => "バージョン: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} 無料"; - static String m113(name) => "${name}と見た美しい景色!"; + static String m11(name) => "${name}と見た美しい景色!"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "まず${paymentProvider} から既存のサブスクリプションをキャンセルしてください"; - static String m3(user) => + static String m13(user) => "${user} は写真をアルバムに追加できなくなります\n\n※${user} が追加した写真は今後も${user} が削除できます"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': '家族は ${storageAmountInGb} GB 受け取っています', 'false': 'あなたは ${storageAmountInGb} GB 受け取っています', 'other': 'あなたは ${storageAmountInGb} GB受け取っています', })}"; - static String m22(albumName) => "${albumName} のコラボレーションリンクを生成しました"; + static String m15(albumName) => "${albumName} のコラボレーションリンクを生成しました"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: '${count}人のコラボレーターを追加', one: '${count}人のコラボレーターを追加', other: '${count}人のコラボレーターを追加')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "${email} を信頼する連絡先として追加しようとしています。 ${numOfDays} 日間あなたの利用がなくなった場合、アカウントを復旧することができるようになります。"; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "サブスクリプションを管理するには、 ${familyAdminEmail} に連絡してください"; - static String m26(provider) => + static String m19(provider) => "${provider} サブスクリプションを管理するには、support@ente.io までご連絡ください。"; - static String m27(endpoint) => "${endpoint} に接続しました"; + static String m20(endpoint) => "${endpoint} に接続しました"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: '${count} 個の項目を削除', other: '${count} 個の項目を削除')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "${currentlyDeleting} / ${totalCount} を削除中"; - static String m30(albumName) => "\"${albumName}\" にアクセスするための公開リンクが削除されます。"; + static String m23(albumName) => "\"${albumName}\" にアクセスするための公開リンクが削除されます。"; - static String m31(supportEmail) => + static String m24(supportEmail) => "あなたの登録したメールアドレスから${supportEmail} にメールを送ってください"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "お掃除しました ${Intl.plural(count, one: '${count} 個の重複ファイル', other: '${count} 個の重複ファイル')}, (${storageSaved}が開放されます!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} 個のファイル、それぞれ${formattedSize}"; - static String m34(newEmail) => "メールアドレスが ${newEmail} に変更されました"; + static String m27(newEmail) => "メールアドレスが ${newEmail} に変更されました"; - static String m35(email) => "${email} は Ente アカウントを持っていません。"; + static String m28(email) => "${email} は Ente アカウントを持っていません。"; - static String m36(email) => + static String m29(email) => "${email} はEnteアカウントを持っていません。\n\n写真を共有するために「招待」を送信してください。"; - static String m37(name) => "${name}抱きしめて!"; + static String m30(name) => "${name}抱きしめて!"; - static String m38(text) => "${text} の写真が見つかりました"; + static String m31(text) => "${text} の写真が見つかりました"; - static String m39(name) => "${name}とご飯!"; + static String m32(name) => "${name}とご飯!"; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "${Intl.plural(count, other: '${formattedNumber} 個のファイル')} が安全にバックアップされました"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "${Intl.plural(count, other: '${formattedNumber} ファイル')} が安全にバックアップされました"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "誰かが有料プランにサインアップしてコードを適用する度に ${storageAmountInGB} GB"; - static String m42(endDate) => "無料トライアルは${endDate} までです"; + static String m36(endDate) => "無料トライアルは${endDate} までです"; - static String m43(count) => - "あなたが有効なサブスクリプションを持っている限りEnte上の ${Intl.plural(count, other: 'それらに')} アクセスできます"; + static String m38(sizeInMBorGB) => "${sizeInMBorGB} を解放する"; - static String m44(sizeInMBorGB) => "${sizeInMBorGB} を解放する"; - - static String m45(count, formattedSize) => - "${Intl.plural(count, other: 'デバイスから削除して${formattedSize} 解放することができます')}"; - - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "${currentlyProcessing} / ${totalCount} を処理中"; - static String m47(name) => "${name}とハイキング!"; + static String m41(name) => "${name}とハイキング!"; - static String m48(count) => "${Intl.plural(count, other: '${count}個のアイテム')}"; + static String m42(count) => "${Intl.plural(count, other: '${count}個のアイテム')}"; - static String m49(name) => "前回の${name}との時間"; + static String m43(name) => "前回の${name}との時間"; - static String m50(email) => "${email} があなたを信頼する連絡先として招待しました"; + static String m44(email) => "${email} があなたを信頼する連絡先として招待しました"; - static String m51(expiryTime) => "リンクは ${expiryTime} に期限切れになります"; + static String m45(expiryTime) => "リンクは ${expiryTime} に期限切れになります"; - static String m52(email) => "この人物を ${email}に紐づけ"; + static String m46(email) => "この人物を ${email}に紐づけ"; - static String m53(personName, email) => "${personName} を ${email} に紐づけします"; + static String m47(personName, email) => "${personName} を ${email} に紐づけします"; - static String m5(count, formattedCount) => - "${Intl.plural(count, zero: '思い出なし', one: '${formattedCount} 思い出', other: '${formattedCount} 思い出')}"; + static String m50(albumName) => "${albumName} に移動しました"; - static String m54(count) => - "${Intl.plural(count, one: '項目を移動', other: '項目を移動')}"; + static String m51(personName) => "${personName} の候補はありません"; - static String m55(albumName) => "${albumName} に移動しました"; + static String m52(name) => "${name} ではありませんか?"; - static String m56(personName) => "${personName} の候補はありません"; - - static String m57(name) => "${name} ではありませんか?"; - - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "コードを変更するには、 ${familyAdminEmail} までご連絡ください。"; - static String m59(name) => "${name}とパーティー!"; + static String m54(name) => "${name}とパーティー!"; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "パスワードの長さ: ${passwordStrengthValue}"; - static String m60(providerName) => "請求された場合は、 ${providerName} のサポートに連絡してください"; + static String m56(providerName) => "請求された場合は、 ${providerName} のサポートに連絡してください"; - static String m61(name, age) => "${name}が${age}才!"; + static String m57(name, age) => "${name}が${age}才!"; - static String m62(name, age) => "${name}が${age}才になった!"; + static String m58(name, age) => "${name}が${age}才になった!"; - static String m63(count) => + static String m59(count) => "${Intl.plural(count, zero: '0枚の写真', one: '1枚の写真', other: '${count} 枚の写真')}"; - static String m64(count) => - "${Intl.plural(count, zero: '0枚の写真', one: '1枚の写真', other: '${count} 枚の写真')}"; - - static String m65(endDate) => + static String m61(endDate) => "${endDate} まで無料トライアルが有効です。\nその後、有料プランを選択することができます。"; - static String m66(toEmail) => "${toEmail} にメールでご連絡ください"; + static String m62(toEmail) => "${toEmail} にメールでご連絡ください"; - static String m67(toEmail) => "ログを以下のアドレスに送信してください \n${toEmail}"; + static String m63(toEmail) => "ログを以下のアドレスに送信してください \n${toEmail}"; - static String m68(name) => "${name}と一緒にポーズ!"; + static String m64(name) => "${name}と一緒にポーズ!"; - static String m69(folderName) => "${folderName} を処理中..."; + static String m65(folderName) => "${folderName} を処理中..."; - static String m70(storeName) => "${storeName} で評価"; + static String m66(storeName) => "${storeName} で評価"; - static String m71(name) => "あなたを ${name} に紐づけました"; + static String m67(name) => "あなたを ${name} に紐づけました"; - static String m72(days, email) => + static String m68(days, email) => "${days} 日後にアカウントにアクセスできます。通知は ${email}に送信されます。"; - static String m73(email) => "${email}のアカウントを復元できるようになりました。新しいパスワードを設定してください。"; + static String m69(email) => "${email}のアカウントを復元できるようになりました。新しいパスワードを設定してください。"; - static String m74(email) => "${email} はあなたのアカウントを復元しようとしています。"; + static String m70(email) => "${email} はあなたのアカウントを復元しようとしています。"; - static String m75(storageInGB) => "3. お二人とも ${storageInGB} GB*を無料で手に入ります。"; + static String m71(storageInGB) => "3. お二人とも ${storageInGB} GB*を無料で手に入ります。"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} はこの共有アルバムから退出します\n\n${userEmail} が追加した写真もアルバムから削除されます"; - static String m77(endDate) => "サブスクリプションは ${endDate} に更新します"; + static String m73(endDate) => "サブスクリプションは ${endDate} に更新します"; - static String m78(name) => "${name}と車で旅行!"; + static String m74(name) => "${name}と車で旅行!"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: '${count} 個の結果', other: '${count} 個の結果')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "セクションの長さの不一致: ${snapshotLength} != ${searchLength}"; - static String m6(count) => "${count} 個を選択"; + static String m77(count) => "${count} 個を選択"; - static String m81(count, yourCount) => "${count} 個選択中(${yourCount} あなた)"; + static String m78(count, yourCount) => "${count} 個選択中(${yourCount} あなた)"; - static String m82(name) => "${name}とセルフィー!"; + static String m79(name) => "${name}とセルフィー!"; - static String m83(verificationID) => "私の確認ID: ente.ioの ${verificationID}"; + static String m80(verificationID) => "私の確認ID: ente.ioの ${verificationID}"; - static String m7(verificationID) => + static String m81(verificationID) => "これがあなたのente.io確認用IDであることを確認できますか? ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "リフェラルコード: ${referralCode}\n\n設定→一般→リフェラルで使うことで${referralStorageInGB}が無料になります(あなたが有料プランに加入したあと)。\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: '誰かと共有しましょう', one: '1人と共有されています', other: '${numberOfPeople} 人と共有されています')}"; - static String m86(emailIDs) => "${emailIDs} と共有中"; + static String m84(emailIDs) => "${emailIDs} と共有中"; + + static String m85(fileType) => "${fileType} はEnteから削除されます。"; + + static String m86(fileType) => "この ${fileType} はEnteとお使いのデバイスの両方にあります。"; static String m87(fileType) => "${fileType} はEnteから削除されます。"; - static String m88(fileType) => "この ${fileType} はEnteとお使いのデバイスの両方にあります。"; + static String m88(name) => "${name}とスポーツ!"; - static String m89(fileType) => "${fileType} はEnteから削除されます。"; + static String m89(name) => "${name}にスポットライト!"; - static String m90(name) => "${name}とスポーツ!"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m91(name) => "${name}にスポットライト!"; - - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; - - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} / ${totalAmount} ${totalStorageUnit} 使用"; - static String m93(id) => + static String m92(id) => "あなたの ${id} はすでに別のEnteアカウントにリンクされています。\nこのアカウントであなたの ${id} を使用したい場合は、サポートにお問い合わせください。"; - static String m94(endDate) => "サブスクリプションは ${endDate} でキャンセルされます"; + static String m93(endDate) => "サブスクリプションは ${endDate} でキャンセルされます"; - static String m95(completed, total) => "${completed}/${total} のメモリが保存されました"; + static String m94(completed, total) => "${completed}/${total} のメモリが保存されました"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "アップロードするにはタップしてください。 以下の理由のためアップロードは現在無視されています: ${ignoreReason}"; - static String m8(storageAmountInGB) => "紹介者も ${storageAmountInGB} GB を得ます"; + static String m96(storageAmountInGB) => "紹介者も ${storageAmountInGB} GB を得ます"; static String m97(email) => "これは ${email} の確認用ID"; @@ -288,17 +264,14 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "${email} を確認"; - static String m109(count) => - "${Intl.plural(count, zero: '${count}人のビューアーを追加', one: '${count}人のビューアーを追加', other: '${count}人のビューアーを追加')}"; + static String m110(email) => "${email}にメールを送りました"; - static String m2(email) => "${email}にメールを送りました"; - - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: '${count} 年前', other: '${count} 年前')}"; - static String m111(name) => "あなたと${name}"; + static String m112(name) => "あなたと${name}"; - static String m112(storageSaved) => "${storageSaved} を解放しました"; + static String m113(storageSaved) => "${storageSaved} を解放しました"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -309,7 +282,7 @@ class MessageLookup extends MessageLookupByLibrary { "account": MessageLookupByLibrary.simpleMessage("アカウント"), "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage("アカウントが既に設定されています"), - "accountOwnerPersonAppbarTitle": m9, + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("おかえりなさい!"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( "もしパスワードを忘れたら、自身のデータを失うことを理解しました"), @@ -318,10 +291,8 @@ class MessageLookup extends MessageLookupByLibrary { "addAName": MessageLookupByLibrary.simpleMessage("名前を追加"), "addANewEmail": MessageLookupByLibrary.simpleMessage("新しいEメールアドレスを追加"), "addCollaborator": MessageLookupByLibrary.simpleMessage("コラボレーターを追加"), - "addCollaborators": m10, "addFiles": MessageLookupByLibrary.simpleMessage("ファイルを追加"), "addFromDevice": MessageLookupByLibrary.simpleMessage("デバイスから追加"), - "addItem": m11, "addLocation": MessageLookupByLibrary.simpleMessage("位置情報を追加"), "addLocationButton": MessageLookupByLibrary.simpleMessage("追加"), "addMore": MessageLookupByLibrary.simpleMessage("さらに追加"), @@ -331,7 +302,7 @@ class MessageLookup extends MessageLookupByLibrary { "addNew": MessageLookupByLibrary.simpleMessage("新規追加"), "addNewPerson": MessageLookupByLibrary.simpleMessage("新しい人物を追加"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage("アドオンの詳細"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("アドオン"), "addPhotos": MessageLookupByLibrary.simpleMessage("写真を追加"), "addSelected": MessageLookupByLibrary.simpleMessage("選んだものをアルバムに追加"), @@ -340,14 +311,13 @@ class MessageLookup extends MessageLookupByLibrary { "addToHiddenAlbum": MessageLookupByLibrary.simpleMessage("非表示アルバムに追加"), "addTrustedContact": MessageLookupByLibrary.simpleMessage("信頼する連絡先を追加"), "addViewer": MessageLookupByLibrary.simpleMessage("ビューアーを追加"), - "addViewers": m13, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage("写真を今すぐ追加する"), "addedAs": MessageLookupByLibrary.simpleMessage("追加:"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("お気に入りに追加しています..."), - "admiringThem": m16, + "admiringThem": m7, "advanced": MessageLookupByLibrary.simpleMessage("詳細"), "advancedSettings": MessageLookupByLibrary.simpleMessage("高度な設定"), "after1Day": MessageLookupByLibrary.simpleMessage("1日後"), @@ -356,7 +326,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("1週間後"), "after1Year": MessageLookupByLibrary.simpleMessage("1年後"), "albumOwner": MessageLookupByLibrary.simpleMessage("所有者"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("アルバムタイトル"), "albumUpdated": MessageLookupByLibrary.simpleMessage("アルバムが更新されました"), "albums": MessageLookupByLibrary.simpleMessage("アルバム"), @@ -399,7 +369,7 @@ class MessageLookup extends MessageLookupByLibrary { "appLock": MessageLookupByLibrary.simpleMessage("アプリのロック"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "デバイスのデフォルトのロック画面と、カスタムロック画面のどちらを利用しますか?"), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("適用"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("コードを適用"), @@ -473,10 +443,10 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "自動ペアリングは Chromecast に対応しているデバイスでのみ動作します。"), "available": MessageLookupByLibrary.simpleMessage("ご利用可能"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("バックアップされたフォルダ"), - "backgroundWithThem": m113, + "backgroundWithThem": m11, "backup": MessageLookupByLibrary.simpleMessage("バックアップ"), "backupFailed": MessageLookupByLibrary.simpleMessage("バックアップ失敗"), "backupFile": MessageLookupByLibrary.simpleMessage("バックアップファイル"), @@ -522,10 +492,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("リカバリをキャンセル"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage("リカバリをキャンセルしてもよろしいですか?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("サブスクリプションをキャンセル"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage("共有ファイルは削除できません"), "castAlbum": MessageLookupByLibrary.simpleMessage("アルバムをキャスト"), @@ -557,7 +527,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("無料のストレージを受け取る"), "claimMore": MessageLookupByLibrary.simpleMessage("もっと!"), "claimed": MessageLookupByLibrary.simpleMessage("受け取り済"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("未分類のクリーンアップ"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -582,12 +552,12 @@ class MessageLookup extends MessageLookupByLibrary { "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( "Enteアプリやアカウントを持っていない人にも、共有アルバムに写真を追加したり表示したりできるリンクを作成します。"), "collaborativeLink": MessageLookupByLibrary.simpleMessage("共同作業リンク"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("コラボレーター"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "コラボレーターは共有アルバムに写真やビデオを追加できます。"), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("レイアウト"), "collageSaved": MessageLookupByLibrary.simpleMessage("コラージュをギャラリーに保存しました"), @@ -604,7 +574,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("2 要素認証を無効にしてよろしいですか。"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage("アカウント削除の確認"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage("はい、アカウントとすべてのアプリのデータを削除します"), "confirmPassword": MessageLookupByLibrary.simpleMessage("パスワードを確認"), @@ -614,9 +584,9 @@ class MessageLookup extends MessageLookupByLibrary { "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage("リカバリーキーを確認"), "connectToDevice": MessageLookupByLibrary.simpleMessage("デバイスに接続"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("お問い合わせ"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("連絡先"), "contents": MessageLookupByLibrary.simpleMessage("内容"), "continueLabel": MessageLookupByLibrary.simpleMessage("つづける"), @@ -653,7 +623,7 @@ class MessageLookup extends MessageLookupByLibrary { "currentUsageIs": MessageLookupByLibrary.simpleMessage("現在の使用状況 "), "currentlyRunning": MessageLookupByLibrary.simpleMessage("現在実行中"), "custom": MessageLookupByLibrary.simpleMessage("カスタム"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("ダーク"), "dayToday": MessageLookupByLibrary.simpleMessage("今日"), "dayYesterday": MessageLookupByLibrary.simpleMessage("昨日"), @@ -683,10 +653,10 @@ class MessageLookup extends MessageLookupByLibrary { "deleteFromBoth": MessageLookupByLibrary.simpleMessage("両方から削除"), "deleteFromDevice": MessageLookupByLibrary.simpleMessage("デバイスから削除"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Enteから削除"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("位置情報を削除"), "deletePhotos": MessageLookupByLibrary.simpleMessage("写真を削除"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage("いちばん必要な機能がない"), "deleteReason2": MessageLookupByLibrary.simpleMessage("アプリや特定の機能が想定通りに動かない"), @@ -718,7 +688,7 @@ class MessageLookup extends MessageLookupByLibrary { "ビューアーはスクリーンショットを撮ったり、外部ツールを使用して写真のコピーを保存したりすることができます"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("ご注意ください"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage("2段階認証を無効にする"), "disablingTwofactorAuthentication": MessageLookupByLibrary.simpleMessage("2要素認証を無効にしています..."), @@ -754,9 +724,9 @@ class MessageLookup extends MessageLookupByLibrary { "download": MessageLookupByLibrary.simpleMessage("ダウンロード"), "downloadFailed": MessageLookupByLibrary.simpleMessage("ダウンロード失敗"), "downloading": MessageLookupByLibrary.simpleMessage("ダウンロード中…"), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("編集"), "editLocation": MessageLookupByLibrary.simpleMessage("位置情報を編集"), "editLocationTagTitle": MessageLookupByLibrary.simpleMessage("位置情報を編集"), @@ -769,15 +739,15 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("Eメール"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage("このメールアドレスはすでに登録されています。"), - "emailChangedTo": m34, - "emailDoesNotHaveEnteAccount": m35, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage("このメールアドレスはまだ登録されていません。"), "emailVerificationToggle": MessageLookupByLibrary.simpleMessage("メール確認"), "emailYourLogs": MessageLookupByLibrary.simpleMessage("ログをメールで送信"), - "embracingThem": m37, + "embracingThem": m30, "emergencyContacts": MessageLookupByLibrary.simpleMessage("緊急連絡先"), "empty": MessageLookupByLibrary.simpleMessage("空"), "emptyTrash": MessageLookupByLibrary.simpleMessage("ゴミ箱を空にしますか?"), @@ -844,7 +814,7 @@ class MessageLookup extends MessageLookupByLibrary { "exportYourData": MessageLookupByLibrary.simpleMessage("データをエクスポート"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage("追加の写真が見つかりました"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage("顔がまだ集まっていません。後で戻ってきてください"), "faceRecognition": MessageLookupByLibrary.simpleMessage("顔認識"), @@ -877,7 +847,7 @@ class MessageLookup extends MessageLookupByLibrary { "faq": MessageLookupByLibrary.simpleMessage("よくある質問"), "faqs": MessageLookupByLibrary.simpleMessage("よくある質問"), "favorite": MessageLookupByLibrary.simpleMessage("お気に入り"), - "feastingWithThem": m39, + "feastingWithThem": m32, "feedback": MessageLookupByLibrary.simpleMessage("フィードバック"), "file": MessageLookupByLibrary.simpleMessage("ファイル"), "fileFailedToSaveToGallery": @@ -889,8 +859,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("ファイルをギャラリーに保存しました"), "fileTypes": MessageLookupByLibrary.simpleMessage("ファイルの種類"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("ファイルの種類と名前"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("削除されたファイル"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage("写真をダウンロードしました"), @@ -902,26 +872,24 @@ class MessageLookup extends MessageLookupByLibrary { "forgotPassword": MessageLookupByLibrary.simpleMessage("パスワードを忘れた"), "foundFaces": MessageLookupByLibrary.simpleMessage("見つかった顔"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("空き容量を受け取る"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage("無料のストレージが利用可能です"), "freeTrial": MessageLookupByLibrary.simpleMessage("無料トライアル"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("デバイスの空き領域を解放する"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "すでにバックアップされているファイルを消去して、デバイスの容量を空けます。"), "freeUpSpace": MessageLookupByLibrary.simpleMessage("スペースを解放する"), - "freeUpSpaceSaving": m45, "gallery": MessageLookupByLibrary.simpleMessage("ギャラリー"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage("ギャラリーに表示されるメモリは最大1000個までです"), "general": MessageLookupByLibrary.simpleMessage("設定"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage("暗号化鍵を生成しています"), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("設定に移動"), "googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"), "grantFullAccessPrompt": MessageLookupByLibrary.simpleMessage( @@ -948,7 +916,7 @@ class MessageLookup extends MessageLookupByLibrary { "hideSharedItemsFromHomeGallery": MessageLookupByLibrary.simpleMessage("ホームギャラリーから共有された写真等を非表示"), "hiding": MessageLookupByLibrary.simpleMessage("非表示にしています"), - "hikingWithThem": m47, + "hikingWithThem": m41, "hostedAtOsmFrance": MessageLookupByLibrary.simpleMessage("OSM Franceでホスト"), "howItWorks": MessageLookupByLibrary.simpleMessage("仕組みを知る"), @@ -999,7 +967,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "問題が発生したようです。しばらくしてから再試行してください。エラーが解決しない場合は、サポートチームにお問い合わせください。"), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage("完全に削除されるまでの日数が項目に表示されます"), "itemsWillBeRemovedFromAlbum": @@ -1018,7 +986,7 @@ class MessageLookup extends MessageLookupByLibrary { "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage("よければ、情報をお寄せください"), "language": MessageLookupByLibrary.simpleMessage("言語"), - "lastTimeWithThem": m49, + "lastTimeWithThem": m43, "lastUpdated": MessageLookupByLibrary.simpleMessage("更新された順"), "lastYearsTrip": MessageLookupByLibrary.simpleMessage("昨年の旅行"), "leave": MessageLookupByLibrary.simpleMessage("離脱"), @@ -1029,7 +997,7 @@ class MessageLookup extends MessageLookupByLibrary { "left": MessageLookupByLibrary.simpleMessage("左"), "legacy": MessageLookupByLibrary.simpleMessage("レガシー"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("レガシーアカウント"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "レガシーでは、信頼できる連絡先が不在時(あなたが亡くなった時など)にアカウントにアクセスできます。"), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1045,15 +1013,15 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("共有を高速化するために"), "linkEnabled": MessageLookupByLibrary.simpleMessage("有効"), "linkExpired": MessageLookupByLibrary.simpleMessage("期限切れ"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("リンクの期限切れ"), "linkHasExpired": MessageLookupByLibrary.simpleMessage("リンクは期限切れです"), "linkNeverExpires": MessageLookupByLibrary.simpleMessage("なし"), "linkPerson": MessageLookupByLibrary.simpleMessage("人を紐づけ"), "linkPersonCaption": MessageLookupByLibrary.simpleMessage("良い経験を分かち合うために"), - "linkPersonToEmail": m52, - "linkPersonToEmailConfirmation": m53, + "linkPersonToEmail": m46, + "linkPersonToEmailConfirmation": m47, "livePhotos": MessageLookupByLibrary.simpleMessage("ライブフォト"), "loadMessage1": MessageLookupByLibrary.simpleMessage("サブスクリプションを家族と共有できます"), @@ -1133,7 +1101,6 @@ class MessageLookup extends MessageLookupByLibrary { "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), "me": MessageLookupByLibrary.simpleMessage("自分"), - "memoryCount": m5, "merchandise": MessageLookupByLibrary.simpleMessage("グッズ"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("既存の人物とまとめる"), "mergedPhotos": MessageLookupByLibrary.simpleMessage("統合された写真"), @@ -1160,12 +1127,11 @@ class MessageLookup extends MessageLookupByLibrary { "mostRecent": MessageLookupByLibrary.simpleMessage("新しい順"), "mostRelevant": MessageLookupByLibrary.simpleMessage("関連度順"), "mountains": MessageLookupByLibrary.simpleMessage("丘を超えて"), - "moveItem": m54, "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage("選択した写真を1つの日付に移動"), "moveToAlbum": MessageLookupByLibrary.simpleMessage("アルバムに移動"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("隠しアルバムに移動"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("ごみ箱へ移動"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage("アルバムにファイルを移動中"), @@ -1212,10 +1178,10 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("該当なし"), "noResultsFound": MessageLookupByLibrary.simpleMessage("一致する結果が見つかりませんでした"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage("システムロックが見つかりませんでした"), - "notPersonLabel": m57, + "notPersonLabel": m52, "notThisPerson": MessageLookupByLibrary.simpleMessage("この人ではありませんか?"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage("あなたに共有されたものはありません"), @@ -1227,7 +1193,7 @@ class MessageLookup extends MessageLookupByLibrary { "onEnte": MessageLookupByLibrary.simpleMessage( "Enteが保管"), "onTheRoad": MessageLookupByLibrary.simpleMessage("再び道で"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("この人のみ"), "oops": MessageLookupByLibrary.simpleMessage("Oops"), "oopsCouldNotSaveEdits": @@ -1255,7 +1221,7 @@ class MessageLookup extends MessageLookupByLibrary { "pairWithPin": MessageLookupByLibrary.simpleMessage("PINを使ってペアリングする"), "pairingComplete": MessageLookupByLibrary.simpleMessage("ペアリング完了"), "panorama": MessageLookupByLibrary.simpleMessage("パノラマ"), - "partyWithThem": m59, + "partyWithThem": m54, "passKeyPendingVerification": MessageLookupByLibrary.simpleMessage("検証はまだ保留中です"), "passkey": MessageLookupByLibrary.simpleMessage("パスキー"), @@ -1264,7 +1230,7 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage("パスワードの変更に成功しました"), "passwordLock": MessageLookupByLibrary.simpleMessage("パスワード保護"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "パスワードの長さ、使用される文字の種類を考慮してパスワードの強度は計算されます。"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1273,7 +1239,7 @@ class MessageLookup extends MessageLookupByLibrary { "paymentFailed": MessageLookupByLibrary.simpleMessage("支払いに失敗しました"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "残念ながらお支払いに失敗しました。サポートにお問い合わせください。お手伝いします!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("処理待ちの項目"), "pendingSync": MessageLookupByLibrary.simpleMessage("同期を保留中"), "people": MessageLookupByLibrary.simpleMessage("人物"), @@ -1284,18 +1250,17 @@ class MessageLookup extends MessageLookupByLibrary { "permanentlyDelete": MessageLookupByLibrary.simpleMessage("完全に削除"), "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage("デバイスから完全に削除しますか?"), - "personIsAge": m61, + "personIsAge": m57, "personName": MessageLookupByLibrary.simpleMessage("人名名"), - "personTurningAge": m62, + "personTurningAge": m58, "pets": MessageLookupByLibrary.simpleMessage("毛むくじゃらな仲間たち"), "photoDescriptions": MessageLookupByLibrary.simpleMessage("写真の説明"), "photoGridSize": MessageLookupByLibrary.simpleMessage("写真のグリッドサイズ"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("写真"), - "photocountPhotos": m63, + "photocountPhotos": m59, "photos": MessageLookupByLibrary.simpleMessage("写真"), "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage("あなたの追加した写真はこのアルバムから削除されます"), - "photosCount": m64, "photosKeepRelativeTimeDifference": MessageLookupByLibrary.simpleMessage("写真はお互いの相対的な時間差を維持します"), "pickCenterPoint": MessageLookupByLibrary.simpleMessage("中心点を選択"), @@ -1303,7 +1268,7 @@ class MessageLookup extends MessageLookupByLibrary { "pinLock": MessageLookupByLibrary.simpleMessage("PINロック"), "playOnTv": MessageLookupByLibrary.simpleMessage("TVでアルバムを再生"), "playOriginal": MessageLookupByLibrary.simpleMessage("元動画を再生"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playStream": MessageLookupByLibrary.simpleMessage("再生"), "playstoreSubscription": MessageLookupByLibrary.simpleMessage("PlayStoreサブスクリプション"), @@ -1314,13 +1279,13 @@ class MessageLookup extends MessageLookupByLibrary { "Support@ente.ioにお問い合わせください、お手伝いいたします。"), "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage("問題が解決しない場合はサポートにお問い合わせください"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("権限を付与してください"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("もう一度試してください"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage("削除するクイックリンクを選択してください"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("もう一度試してください"), "pleaseVerifyTheCodeYouHaveEntered": MessageLookupByLibrary.simpleMessage("入力したコードを確認してください"), @@ -1331,7 +1296,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("再試行する前にしばらくお待ちください"), "pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage("しばらくお待ちください。時間がかかります。"), - "posingWithThem": m68, + "posingWithThem": m64, "preparingLogs": MessageLookupByLibrary.simpleMessage("ログを準備中..."), "preserveMore": MessageLookupByLibrary.simpleMessage("もっと保存する"), "pressAndHoldToPlayVideo": @@ -1347,7 +1312,7 @@ class MessageLookup extends MessageLookupByLibrary { "proceed": MessageLookupByLibrary.simpleMessage("続行"), "processed": MessageLookupByLibrary.simpleMessage("処理完了"), "processing": MessageLookupByLibrary.simpleMessage("処理中"), - "processingImport": m69, + "processingImport": m65, "processingVideos": MessageLookupByLibrary.simpleMessage("動画を処理中"), "publicLinkCreated": MessageLookupByLibrary.simpleMessage("公開リンクが作成されました"), @@ -1359,9 +1324,9 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("サポートを受ける"), "rateTheApp": MessageLookupByLibrary.simpleMessage("アプリを評価"), "rateUs": MessageLookupByLibrary.simpleMessage("評価して下さい"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "reassignMe": MessageLookupByLibrary.simpleMessage("\"自分\" を再割り当て"), - "reassignedToName": m71, + "reassignedToName": m67, "reassigningLoading": MessageLookupByLibrary.simpleMessage("再割り当て中..."), "recover": MessageLookupByLibrary.simpleMessage("復元"), "recoverAccount": MessageLookupByLibrary.simpleMessage("アカウントを復元"), @@ -1369,7 +1334,7 @@ class MessageLookup extends MessageLookupByLibrary { "recoveryAccount": MessageLookupByLibrary.simpleMessage("アカウントを復元"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("リカバリが開始されました"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("リカバリーキー"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage("リカバリーキーはクリップボードにコピーされました"), @@ -1383,12 +1348,12 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("リカバリキーが確認されました"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "パスワードを忘れた場合、リカバリーキーは写真を復元するための唯一の方法になります。なお、設定 > アカウント でリカバリーキーを確認することができます。\n \n\nここにリカバリーキーを入力して、正しく保存できていることを確認してください。"), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("復元に成功しました!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "信頼する連絡先の持ち主があなたのアカウントにアクセスしようとしています"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "このデバイスではパスワードを確認する能力が足りません。\n\n恐れ入りますが、リカバリーキーを入力してパスワードを再生成する必要があります。"), "recreatePasswordTitle": @@ -1402,7 +1367,7 @@ class MessageLookup extends MessageLookupByLibrary { "referralStep1": MessageLookupByLibrary.simpleMessage("1. このコードを友達に贈りましょう"), "referralStep2": MessageLookupByLibrary.simpleMessage("2. 友達が有料プランに登録"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("リフェラル"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage("リフェラルは現在一時停止しています"), @@ -1427,7 +1392,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeInvite": MessageLookupByLibrary.simpleMessage("招待を削除"), "removeLink": MessageLookupByLibrary.simpleMessage("リンクを削除"), "removeParticipant": MessageLookupByLibrary.simpleMessage("参加者を削除"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("人名を削除"), "removePublicLink": MessageLookupByLibrary.simpleMessage("公開リンクを削除"), "removePublicLinks": MessageLookupByLibrary.simpleMessage("公開リンクを削除"), @@ -1444,7 +1409,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("ファイル名を変更"), "renewSubscription": MessageLookupByLibrary.simpleMessage("サブスクリプションの更新"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("バグを報告"), "reportBug": MessageLookupByLibrary.simpleMessage("バグを報告"), "resendEmail": MessageLookupByLibrary.simpleMessage("メールを再送信"), @@ -1464,7 +1429,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("重複だと思うファイルを確認して削除してください"), "reviewSuggestions": MessageLookupByLibrary.simpleMessage("提案を確認"), "right": MessageLookupByLibrary.simpleMessage("右"), - "roadtripWithThem": m78, + "roadtripWithThem": m74, "rotate": MessageLookupByLibrary.simpleMessage("回転"), "rotateLeft": MessageLookupByLibrary.simpleMessage("左に回転"), "rotateRight": MessageLookupByLibrary.simpleMessage("右に回転"), @@ -1511,8 +1476,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("友達を招待すると、共有される写真はここから閲覧できます"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage("処理と同期が完了すると、ここに人々が表示されます"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("セキュリティ"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage("アプリ内で公開アルバムのリンクを見る"), @@ -1552,9 +1517,9 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeRemovedFromThisPerson": MessageLookupByLibrary.simpleMessage( "選択したアイテムはこの人としての登録が解除されますが、ライブラリからは削除されません。"), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, - "selfiesWithThem": m82, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "selfiesWithThem": m79, "send": MessageLookupByLibrary.simpleMessage("送信"), "sendEmail": MessageLookupByLibrary.simpleMessage("メールを送信する"), "sendInvite": MessageLookupByLibrary.simpleMessage("招待を送る"), @@ -1578,16 +1543,16 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("アルバムを開いて右上のシェアボタンをタップ"), "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("アルバムを共有"), "shareLink": MessageLookupByLibrary.simpleMessage("リンクの共有"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage("選んだ人と共有します"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Enteをダウンロードして、写真や動画の共有を簡単に!\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage("Enteを使っていない人に共有"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("アルバムの共有をしてみましょう"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1598,7 +1563,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("新しい共有写真"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage("誰かが写真を共有アルバムに追加した時に通知を受け取る"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("あなたと共有されたアルバム"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("あなたと共有されています"), "sharing": MessageLookupByLibrary.simpleMessage("共有中..."), @@ -1613,11 +1578,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("他のデバイスからサインアウトする"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "利用規約プライバシーポリシーに同意します"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage("全てのアルバムから削除されます。"), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("スキップ"), "social": MessageLookupByLibrary.simpleMessage("SNS"), "someItemsAreInBothEnteAndYourDevice": @@ -1648,8 +1613,8 @@ class MessageLookup extends MessageLookupByLibrary { "sortNewestFirst": MessageLookupByLibrary.simpleMessage("新しい順"), "sortOldestFirst": MessageLookupByLibrary.simpleMessage("古い順"), "sparkleSuccess": MessageLookupByLibrary.simpleMessage("成功✨"), - "sportsWithThem": m90, - "spotlightOnThem": m91, + "sportsWithThem": m88, + "spotlightOnThem": m89, "spotlightOnYourself": MessageLookupByLibrary.simpleMessage("あなた自身にスポットライト!"), "startAccountRecoveryTitle": @@ -1661,14 +1626,14 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("ストレージ"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("ファミリー"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("あなた"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("ストレージの上限を超えました"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "streamDetails": MessageLookupByLibrary.simpleMessage("動画の詳細"), "strongStrength": MessageLookupByLibrary.simpleMessage("強いパスワード"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("サブスクライブ"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "共有を有効にするには、有料サブスクリプションが必要です。"), @@ -1683,7 +1648,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("機能を提案"), "sunrise": MessageLookupByLibrary.simpleMessage("水平線"), "support": MessageLookupByLibrary.simpleMessage("サポート"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("同期が停止しました"), "syncing": MessageLookupByLibrary.simpleMessage("同期中..."), "systemTheme": MessageLookupByLibrary.simpleMessage("システム"), @@ -1691,7 +1656,7 @@ class MessageLookup extends MessageLookupByLibrary { "tapToEnterCode": MessageLookupByLibrary.simpleMessage("タップしてコードを入力"), "tapToUnlock": MessageLookupByLibrary.simpleMessage("タップして解除"), "tapToUpload": MessageLookupByLibrary.simpleMessage("タップしてアップロード"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "問題が発生したようです。しばらくしてから再試行してください。エラーが解決しない場合は、サポートチームにお問い合わせください。"), "terminate": MessageLookupByLibrary.simpleMessage("終了させる"), @@ -1710,7 +1675,7 @@ class MessageLookup extends MessageLookupByLibrary { "theme": MessageLookupByLibrary.simpleMessage("テーマ"), "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage("これらの項目はデバイスから削除されます。"), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage("全てのアルバムから削除されます。"), "thisActionCannotBeUndone": @@ -1844,7 +1809,6 @@ class MessageLookup extends MessageLookupByLibrary { "viewLogs": MessageLookupByLibrary.simpleMessage("ログを表示"), "viewRecoveryKey": MessageLookupByLibrary.simpleMessage("リカバリキーを表示"), "viewer": MessageLookupByLibrary.simpleMessage("ビューアー"), - "viewersSuccessfullyAdded": m109, "visitWebToManage": MessageLookupByLibrary.simpleMessage( "サブスクリプションを管理するにはweb.ente.ioをご覧ください"), "waitingForVerification": @@ -1856,7 +1820,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "あなたが所有していない写真やアルバムの編集はサポートされていません"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("弱いパスワード"), "welcomeBack": MessageLookupByLibrary.simpleMessage("おかえりなさい!"), "whatsNew": MessageLookupByLibrary.simpleMessage("最新情報"), @@ -1864,7 +1828,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("信頼する連絡先は、データの復旧が必要な際に役立ちます。"), "yearShort": MessageLookupByLibrary.simpleMessage("年"), "yearly": MessageLookupByLibrary.simpleMessage("年額"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("はい"), "yesCancel": MessageLookupByLibrary.simpleMessage("キャンセル"), "yesConvertToViewer": @@ -1877,7 +1841,7 @@ class MessageLookup extends MessageLookupByLibrary { "yesRenew": MessageLookupByLibrary.simpleMessage("はい、更新する"), "yesResetPerson": MessageLookupByLibrary.simpleMessage("リセット"), "you": MessageLookupByLibrary.simpleMessage("あなた"), - "youAndThem": m111, + "youAndThem": m112, "youAreOnAFamilyPlan": MessageLookupByLibrary.simpleMessage("ファミリープランに入会しています!"), "youAreOnTheLatestVersion": @@ -1894,7 +1858,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("自分自身と共有することはできません"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage("アーカイブした項目はありません"), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("アカウントは削除されました"), "yourMap": MessageLookupByLibrary.simpleMessage("あなたの地図"), diff --git a/mobile/lib/generated/intl/messages_lt.dart b/mobile/lib/generated/intl/messages_lt.dart index f9a86c222e..29ebe8e34b 100644 --- a/mobile/lib/generated/intl/messages_lt.dart +++ b/mobile/lib/generated/intl/messages_lt.dart @@ -20,190 +20,204 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'lt'; - static String m9(title) => "${title} (Aš)"; + static String m0(title) => "${title} (Aš)"; - static String m10(count) => - "${Intl.plural(count, one: 'Pridėti bendradarbį', few: 'Pridėti bendradarbius', many: 'Pridėti bendradarbio', other: 'Pridėti bendradarbių')}"; + static String m1(count) => + "${Intl.plural(count, zero: 'Pridėti bendradarbių', one: 'Pridėti bendradarbį', few: 'Pridėti bendradarbius', many: 'Pridėti bendradarbio', other: 'Pridėti bendradarbių')}"; - static String m11(count) => + static String m2(count) => "${Intl.plural(count, one: 'Pridėti elementą', few: 'Pridėti elementus', many: 'Pridėti elemento', other: 'Pridėti elementų')}"; - static String m13(count) => - "${Intl.plural(count, one: 'Pridėti žiūrėtoją', few: 'Pridėti žiūrėtojus', many: 'Pridėti žiūrėtojo', other: 'Pridėti žiūrėtojų')}"; + static String m3(storageAmount, endDate) => + "Jūsų ${storageAmount} priedas galioja iki ${endDate}"; - static String m16(name) => "Žavisi ${name}"; + static String m4(count) => + "${Intl.plural(count, zero: 'Pridėti žiūrėtojų', one: 'Pridėti žiūrėtoją', few: 'Pridėti žiūrėtojus', many: 'Pridėti žiūrėtojo', other: 'Pridėti žiūrėtojų')}"; - static String m17(count) => + static String m7(name) => "Žavisi ${name}"; + + static String m8(count) => "${Intl.plural(count, zero: 'Nėra dalyvių', one: '1 dalyvis', other: '${count} dalyviai')}"; - static String m18(versionValue) => "Versija: ${versionValue}"; + static String m9(versionValue) => "Versija: ${versionValue}"; - static String m113(name) => "Gražūs vaizdai su ${name}"; + static String m11(name) => "Gražūs vaizdai su ${name}"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "Pirmiausia atsisakykite esamos prenumeratos iš ${paymentProvider}"; - static String m3(user) => + static String m13(user) => "${user} negalės pridėti daugiau nuotraukų į šį albumą\n\nJie vis tiek galės pašalinti esamas pridėtas nuotraukas"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Jūsų šeima gavo ${storageAmountInGb} GB iki šiol', 'false': 'Jūs gavote ${storageAmountInGb} GB iki šiol', 'other': 'Jūs gavote ${storageAmountInGb} GB iki šiol.', })}"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: 'Pridėta 0 bendradarbių', one: 'Pridėtas 1 bendradarbis', other: 'Pridėta ${count} bendradarbių')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "Ketinate pridėti ${email} kaip patikimą kontaktą. Jie galės atkurti jūsų paskyrą, jei jūsų nebus ${numOfDays} dienų."; - static String m26(provider) => + static String m18(familyAdminEmail) => + "Susisiekite su ${familyAdminEmail}, kad sutvarkytumėte savo prenumeratą."; + + static String m19(provider) => "Susisiekite su mumis adresu support@ente.io, kad sutvarkytumėte savo ${provider} prenumeratą."; - static String m27(endpoint) => "Prijungta prie ${endpoint}"; + static String m20(endpoint) => "Prijungta prie ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Ištrinti ${count} elementą', few: 'Ištrinti ${count} elementus', many: 'Ištrinti ${count} elemento', other: 'Ištrinti ${count} elementų')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Ištrinama ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Tai pašalins viešą nuorodą, skirtą pasiekti „${albumName}“."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Iš savo registruoto el. pašto adreso atsiųskite el. laišką adresu ${supportEmail}"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "Išvalėte ${Intl.plural(count, one: '${count} dubliuojantį failą', few: '${count} dubliuojančius failus', many: '${count} dubliuojančio failo', other: '${count} dubliuojančių failų')}, išsaugodami (${storageSaved})."; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} failai (-ų), kiekvienas ${formattedSize}"; - static String m34(newEmail) => "El. paštas pakeistas į ${newEmail}"; + static String m27(newEmail) => "El. paštas pakeistas į ${newEmail}"; - static String m35(email) => "${email} neturi „Ente“ paskyros."; + static String m28(email) => "${email} neturi „Ente“ paskyros."; - static String m36(email) => + static String m29(email) => "${email} neturi „Ente“ paskyros.\n\nSiųskite jiems kvietimą bendrinti nuotraukas."; - static String m38(text) => "Rastos papildomos nuotraukos, skirtos ${text}"; + static String m31(text) => "Rastos papildomos nuotraukos, skirtos ${text}"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB kiekvieną kartą, kai kas nors užsiregistruoja mokamam planui ir pritaiko jūsų kodą."; - static String m42(endDate) => + static String m36(endDate) => "Nemokamas bandomasis laikotarpis galioja iki ${endDate}"; - static String m44(sizeInMBorGB) => "Atlaisvinti ${sizeInMBorGB}"; + static String m37(count) => + "Vis dar galite pasiekti ${Intl.plural(count, one: 'jį', few: 'juos', many: 'juos', other: 'jų')} platformoje „Ente“, kol turite aktyvų prenumeratą."; - static String m46(currentlyProcessing, totalCount) => + static String m38(sizeInMBorGB) => "Atlaisvinti ${sizeInMBorGB}"; + + static String m40(currentlyProcessing, totalCount) => "Apdorojama ${currentlyProcessing} / ${totalCount}"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} elementas', few: '${count} elementai', many: '${count} elemento', other: '${count} elementų')}"; - static String m50(email) => "${email} pakvietė jus būti patikimu kontaktu"; + static String m44(email) => "${email} pakvietė jus būti patikimu kontaktu"; - static String m51(expiryTime) => "Nuoroda nebegalios ${expiryTime}"; + static String m45(expiryTime) => "Nuoroda nebegalios ${expiryTime}"; - static String m53(personName, email) => + static String m47(personName, email) => "Tai susies ${personName} su ${email}."; - static String m5(count, formattedCount) => + static String m48(count, formattedCount) => "${Intl.plural(count, zero: 'nėra prisiminimų', one: '${formattedCount} prisiminimas', few: '${formattedCount} prisiminimai', many: '${formattedCount} prisiminimo', other: '${formattedCount} prisiminimų')}"; - static String m54(count) => + static String m49(count) => "${Intl.plural(count, one: 'Perkelti elementą', few: 'Perkelti elementus', many: 'Perkelti elemento', other: 'Perkelti elementų')}"; - static String m56(personName) => "Nėra pasiūlymų asmeniui ${personName}."; + static String m51(personName) => "Nėra pasiūlymų asmeniui ${personName}."; - static String m57(name) => "Ne ${name}?"; + static String m52(name) => "Ne ${name}?"; - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Susisiekite su ${familyAdminEmail}, kad pakeistumėte savo kodą."; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Slaptažodžio stiprumas: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Kreipkitės į ${providerName} palaikymo komandą, jei jums buvo nuskaičiuota."; - static String m63(count) => + static String m59(count) => "${Intl.plural(count, zero: 'Nėra nuotraukų', one: '1 nuotrauka', few: '${count} nuotraukos', many: '${count} nuotraukos', other: '${count} nuotraukų')}"; - static String m65(endDate) => + static String m60(count) => + "${Intl.plural(count, zero: '0 nuotraukų', one: '1 nuotrauka', few: '${count} nuotraukos', many: '${count} nuotraukos', other: '${count} nuotraukų')}"; + + static String m61(endDate) => "Nemokama bandomoji versija galioja iki ${endDate}.\nVėliau galėsite pasirinkti mokamą planą."; - static String m67(toEmail) => "Siųskite žurnalus adresu\n${toEmail}"; + static String m63(toEmail) => "Siųskite žurnalus adresu\n${toEmail}"; - static String m69(folderName) => "Apdorojama ${folderName}..."; + static String m65(folderName) => "Apdorojama ${folderName}..."; - static String m70(storeName) => "Vertinti mus parduotuvėje „${storeName}“"; + static String m66(storeName) => "Vertinti mus parduotuvėje „${storeName}“"; - static String m71(name) => "Perskirstė jus į ${name}"; + static String m67(name) => "Perskirstė jus į ${name}"; - static String m72(days, email) => + static String m68(days, email) => "Paskyrą galėsite pasiekti po ${days} dienų. Pranešimas bus išsiųstas į ${email}."; - static String m73(email) => + static String m69(email) => "Dabar galite atkurti ${email} paskyrą nustatydami naują slaptažodį."; - static String m74(email) => "${email} bando atkurti jūsų paskyrą."; + static String m70(email) => "${email} bando atkurti jūsų paskyrą."; - static String m75(storageInGB) => + static String m71(storageInGB) => "3. Abu gaunate ${storageInGB} GB* nemokamai"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} bus pašalintas iš šio bendrinamo albumo.\n\nVisos jų pridėtos nuotraukos taip pat bus pašalintos iš albumo."; - static String m77(endDate) => "Prenumerata atnaujinama ${endDate}"; + static String m73(endDate) => "Prenumerata pratęsiama ${endDate}"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: 'Rastas ${count} rezultatas', few: 'Rasti ${count} rezultatai', many: 'Rasta ${count} rezultato', other: 'Rasta ${count} rezultatų')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "Sekcijų ilgio neatitikimas: ${snapshotLength} != ${searchLength}"; - static String m6(count) => "${count} pasirinkta"; + static String m77(count) => "${count} pasirinkta"; - static String m81(count, yourCount) => + static String m78(count, yourCount) => "${count} pasirinkta (${yourCount} jūsų)"; - static String m83(verificationID) => + static String m80(verificationID) => "Štai mano patvirtinimo ID: ${verificationID}, skirta ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "Ei, ar galite patvirtinti, kad tai yra jūsų ente.io patvirtinimo ID: ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "„Ente“ rekomendacijos kodas: ${referralCode} \n\nTaikykite jį per Nustatymai → Bendrieji → Rekomendacijos, kad gautumėte ${referralStorageInGB} GB nemokamai po to, kai užsiregistruosite mokamam planui.\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Bendrinti su konkrečiais asmenimis', one: 'Bendrinta su 1 asmeniu', other: 'Bendrinta su ${numberOfPeople} asmenimis')}"; - static String m87(fileType) => + static String m85(fileType) => "Šis ${fileType} bus ištrintas iš jūsų įrenginio."; - static String m88(fileType) => + static String m86(fileType) => "Šis ${fileType} yra ir saugykloje „Ente“ bei įrenginyje."; - static String m89(fileType) => "Šis ${fileType} bus ištrintas iš „Ente“."; + static String m87(fileType) => "Šis ${fileType} bus ištrintas iš „Ente“."; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m93(id) => + static String m92(id) => "Jūsų ${id} jau susietas su kita „Ente“ paskyra.\nJei norite naudoti savo ${id} su šia paskyra, susisiekite su mūsų palaikymo komanda."; - static String m95(completed, total) => + static String m93(endDate) => "Jūsų prenumerata bus atsisakyta ${endDate}"; + + static String m94(completed, total) => "${completed} / ${total} išsaugomi prisiminimai"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Palieskite, kad įkeltumėte. Įkėlimas šiuo metu ignoruojamas dėl ${ignoreReason}."; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "Jie taip pat gauna ${storageAmountInGB} GB"; static String m97(email) => "Tai – ${email} patvirtinimo ID"; @@ -234,14 +248,17 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "Patvirtinti ${email}"; static String m109(count) => - "${Intl.plural(count, zero: 'Pridėta 0 žiūrėtojų', one: 'Pridėtas 1 žiūrėtojas', other: 'Pridėta ${count} žiūrėtojų')}"; + "${Intl.plural(count, zero: 'Pridėta 0 žiūrėtojų', one: 'Pridėtas 1 žiūrėtojas', few: 'Pridėti ${count} žiūrėtojai', many: 'Pridėta ${count} žiūrėtojo', other: 'Pridėta ${count} žiūrėtojų')}"; - static String m2(email) => "Išsiuntėme laišką adresu ${email}"; + static String m110(email) => + "Išsiuntėme laišką adresu ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: 'prieš ${count} metus', few: 'prieš ${count} metus', many: 'prieš ${count} metų', other: 'prieš ${count} metų')}"; - static String m111(name) => "Jūs ir ${name}"; + static String m112(name) => "Jūs ir ${name}"; + + static String m113(storageSaved) => "Sėkmingai atlaisvinote ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -253,7 +270,7 @@ class MessageLookup extends MessageLookupByLibrary { "account": MessageLookupByLibrary.simpleMessage("Paskyra"), "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage("Paskyra jau sukonfigūruota."), - "accountOwnerPersonAppbarTitle": m9, + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("Sveiki sugrįžę!"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( @@ -266,9 +283,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Pridėti naują el. paštą"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Pridėti bendradarbį"), - "addCollaborators": m10, + "addCollaborators": m1, "addFiles": MessageLookupByLibrary.simpleMessage("Pridėti failus"), - "addItem": m11, + "addItem": m2, "addLocation": MessageLookupByLibrary.simpleMessage("Pridėti vietovę"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Pridėti"), "addMore": MessageLookupByLibrary.simpleMessage("Pridėti daugiau"), @@ -280,17 +297,18 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Pridėti naują asmenį"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage( "Išsami informacija apie priedus"), + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Priedai"), "addToAlbum": MessageLookupByLibrary.simpleMessage("Pridėti į albumą"), "addToEnte": MessageLookupByLibrary.simpleMessage("Pridėti į „Ente“"), "addTrustedContact": MessageLookupByLibrary.simpleMessage("Pridėti patikimą kontaktą"), "addViewer": MessageLookupByLibrary.simpleMessage("Pridėti žiūrėtoją"), - "addViewers": m13, + "addViewers": m4, "addedAs": MessageLookupByLibrary.simpleMessage("Pridėta kaip"), "addingToFavorites": MessageLookupByLibrary.simpleMessage("Pridedama prie mėgstamų..."), - "admiringThem": m16, + "admiringThem": m7, "advanced": MessageLookupByLibrary.simpleMessage("Išplėstiniai"), "advancedSettings": MessageLookupByLibrary.simpleMessage("Išplėstiniai"), @@ -300,7 +318,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("Po 1 savaitės"), "after1Year": MessageLookupByLibrary.simpleMessage("Po 1 metų"), "albumOwner": MessageLookupByLibrary.simpleMessage("Savininkas"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Albumo pavadinimas"), "albumUpdated": @@ -349,10 +367,12 @@ class MessageLookup extends MessageLookupByLibrary { "appLock": MessageLookupByLibrary.simpleMessage("Programos užraktas"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Pasirinkite tarp numatytojo įrenginio užrakinimo ekrano ir pasirinktinio užrakinimo ekrano su PIN kodu arba slaptažodžiu."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("„Apple ID“"), "apply": MessageLookupByLibrary.simpleMessage("Taikyti"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Taikyti kodą"), + "appstoreSubscription": + MessageLookupByLibrary.simpleMessage("„App Store“ prenumerata"), "archive": MessageLookupByLibrary.simpleMessage("Archyvas"), "archiveAlbum": MessageLookupByLibrary.simpleMessage("Archyvuoti albumą"), @@ -360,6 +380,8 @@ class MessageLookup extends MessageLookupByLibrary { "areYouSureThatYouWantToLeaveTheFamily": MessageLookupByLibrary.simpleMessage( "Ar tikrai norite palikti šeimos planą?"), + "areYouSureYouWantToCancel": + MessageLookupByLibrary.simpleMessage("Ar tikrai norite atšaukti?"), "areYouSureYouWantToChangeYourPlan": MessageLookupByLibrary.simpleMessage( "Ar tikrai norite keisti planą?"), @@ -367,6 +389,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Ar tikrai norite išeiti?"), "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( "Ar tikrai norite atsijungti?"), + "areYouSureYouWantToRenew": + MessageLookupByLibrary.simpleMessage("Ar tikrai norite pratęsti?"), "areYouSureYouWantToResetThisPerson": MessageLookupByLibrary.simpleMessage( "Ar tikrai norite iš naujo nustatyti šį asmenį?"), @@ -379,10 +403,15 @@ class MessageLookup extends MessageLookupByLibrary { "authToChangeEmailVerificationSetting": MessageLookupByLibrary.simpleMessage( "Nustatykite tapatybę, kad pakeistumėte el. pašto patvirtinimą"), + "authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage( + "Nustatykite tapatybę, kad pakeistumėte užrakinto ekrano nustatymą"), "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( "Nustatykite tapatybę, kad pakeistumėte savo el. paštą"), "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( "Nustatykite tapatybę, kad pakeistumėte slaptažodį"), + "authToConfigureTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Nustatykite tapatybę, kad sukonfigūruotumėte dvigubą tapatybės nustatymą"), "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( "Nustatykite tapatybę, kad pradėtumėte paskyros ištrynimą"), "authToManageLegacy": MessageLookupByLibrary.simpleMessage( @@ -391,6 +420,8 @@ class MessageLookup extends MessageLookupByLibrary { "Nustatykite tapatybę, kad peržiūrėtumėte savo slaptaraktį"), "authToViewTrashedFiles": MessageLookupByLibrary.simpleMessage( "Nustatykite tapatybę, kad peržiūrėtumėte išmestus failus"), + "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( + "Nustatykite tapatybę, kad peržiūrėtumėte savo aktyvius seansus"), "authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage( "Nustatykite tapatybę, kad peržiūrėtumėte paslėptus failus"), "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( @@ -417,7 +448,7 @@ class MessageLookup extends MessageLookupByLibrary { "available": MessageLookupByLibrary.simpleMessage("Prieinama"), "backedUpFolders": MessageLookupByLibrary.simpleMessage( "Sukurtos atsarginės aplankų kopijos"), - "backgroundWithThem": m113, + "backgroundWithThem": m11, "backup": MessageLookupByLibrary.simpleMessage("Kurti atsarginę kopiją"), "backupFile": MessageLookupByLibrary.simpleMessage( @@ -467,10 +498,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Atšaukti atkūrimą"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "Ar tikrai norite atšaukti atkūrimą?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Atsisakyti prenumeratos"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( "Negalima ištrinti bendrinamų failų."), "castAlbum": MessageLookupByLibrary.simpleMessage("Perduoti albumą"), @@ -506,7 +537,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Gaukite nemokamos saugyklos"), "claimMore": MessageLookupByLibrary.simpleMessage("Gaukite daugiau!"), "claimed": MessageLookupByLibrary.simpleMessage("Gauta"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("Valyti nekategorizuotus"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -514,6 +545,8 @@ class MessageLookup extends MessageLookupByLibrary { "clearCaches": MessageLookupByLibrary.simpleMessage("Valyti podėlius"), "clearIndexes": MessageLookupByLibrary.simpleMessage("Valyti indeksavimus"), + "clickOnTheOverflowMenu": MessageLookupByLibrary.simpleMessage( + "• Spustelėkite ant perpildymo meniu"), "close": MessageLookupByLibrary.simpleMessage("Uždaryti"), "clusteringProgress": MessageLookupByLibrary.simpleMessage("Sankaupos vykdymas"), @@ -533,7 +566,7 @@ class MessageLookup extends MessageLookupByLibrary { "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "Bendradarbiai gali pridėti nuotraukų ir vaizdo įrašų į bendrintą albumą."), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collect": MessageLookupByLibrary.simpleMessage("Rinkti"), "collectEventPhotos": MessageLookupByLibrary.simpleMessage("Rinkti įvykių nuotraukas"), @@ -548,7 +581,7 @@ class MessageLookup extends MessageLookupByLibrary { "Ar tikrai norite išjungti dvigubą tapatybės nustatymą?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage( "Patvirtinti paskyros ištrynimą"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Taip, noriu negrįžtamai ištrinti šią paskyrą ir jos duomenis per visas programas"), "confirmPassword": @@ -561,9 +594,10 @@ class MessageLookup extends MessageLookupByLibrary { "Patvirtinkite savo atkūrimo raktą"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Prijungti prie įrenginio"), + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage( "Susisiekti su palaikymo komanda"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Kontaktai"), "continueLabel": MessageLookupByLibrary.simpleMessage("Tęsti"), "continueOnFreeTrial": MessageLookupByLibrary.simpleMessage( @@ -578,12 +612,15 @@ class MessageLookup extends MessageLookupByLibrary { "Nepavyko sukurti atsarginės duomenų kopijos.\nBandysime pakartotinai vėliau."), "couldNotFreeUpSpace": MessageLookupByLibrary.simpleMessage( "Nepavyko atlaisvinti vietos."), + "couldNotUpdateSubscription": MessageLookupByLibrary.simpleMessage( + "Nepavyko atnaujinti prenumeratos"), "create": MessageLookupByLibrary.simpleMessage("Kurti"), "createAccount": MessageLookupByLibrary.simpleMessage("Kurti paskyrą"), "createAlbumActionHint": MessageLookupByLibrary.simpleMessage( "Ilgai paspauskite, kad pasirinktumėte nuotraukas, ir spustelėkite +, kad sukurtumėte albumą"), "createCollaborativeLink": MessageLookupByLibrary.simpleMessage( "Kurti bendradarbiavimo nuorodą"), + "createCollage": MessageLookupByLibrary.simpleMessage("Kurti koliažą"), "createNewAccount": MessageLookupByLibrary.simpleMessage("Kurti naują paskyrą"), "createOrSelectAlbum": MessageLookupByLibrary.simpleMessage( @@ -595,12 +632,14 @@ class MessageLookup extends MessageLookupByLibrary { "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage("Yra kritinis naujinimas"), "crop": MessageLookupByLibrary.simpleMessage("Apkirpti"), + "curatedMemories": + MessageLookupByLibrary.simpleMessage("Kuruoti prisiminimai"), "currentUsageIs": MessageLookupByLibrary.simpleMessage("Dabartinis naudojimas – "), "currentlyRunning": MessageLookupByLibrary.simpleMessage("šiuo metu vykdoma"), "custom": MessageLookupByLibrary.simpleMessage("Pasirinktinis"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Tamsi"), "dayToday": MessageLookupByLibrary.simpleMessage("Šiandien"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Vakar"), @@ -636,12 +675,12 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Ištrinti iš įrenginio"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Ištrinti iš „Ente“"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Ištrinti vietovę"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Ištrinti nuotraukas"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "Trūksta pagrindinės funkcijos, kurios man reikia"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -656,6 +695,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Ištrinti bendrinamą albumą?"), "deleteSharedAlbumDialogBody": MessageLookupByLibrary.simpleMessage( "Albumas bus ištrintas visiems.\n\nPrarasite prieigą prie bendrinamų nuotraukų, esančių šiame albume ir priklausančių kitiems."), + "deselectAll": + MessageLookupByLibrary.simpleMessage("Naikinti visų pasirinkimą"), "designedToOutlive": MessageLookupByLibrary.simpleMessage("Sukurta išgyventi"), "details": MessageLookupByLibrary.simpleMessage("Išsami informacija"), @@ -677,7 +718,7 @@ class MessageLookup extends MessageLookupByLibrary { "Žiūrėtojai vis tiek gali daryti ekrano kopijas arba išsaugoti nuotraukų kopijas naudojant išorinius įrankius"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Atkreipkite dėmesį"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage( "Išjungti dvigubą tapatybės nustatymą"), "disablingTwofactorAuthentication": @@ -716,9 +757,9 @@ class MessageLookup extends MessageLookupByLibrary { "downloadFailed": MessageLookupByLibrary.simpleMessage("Atsisiuntimas nepavyko."), "downloading": MessageLookupByLibrary.simpleMessage("Atsisiunčiama..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Redaguoti"), "editLocation": MessageLookupByLibrary.simpleMessage("Redaguoti vietovę"), @@ -733,9 +774,9 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("El. paštas"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage( "El. paštas jau užregistruotas."), - "emailChangedTo": m34, - "emailDoesNotHaveEnteAccount": m35, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage("El. paštas neregistruotas."), "emailVerificationToggle": @@ -817,7 +858,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Eksportuoti duomenis"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage( "Rastos papildomos nuotraukos"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Veidas dar nesugrupuotas. Grįžkite vėliau."), "faceRecognition": @@ -833,7 +874,7 @@ class MessageLookup extends MessageLookupByLibrary { "failedToFetchOriginalForEdit": MessageLookupByLibrary.simpleMessage( "Nepavyko gauti originalo redagavimui."), "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( - "Nepavyksta gauti rekomendacijos informacijos. Bandykite dar kartą vėliau."), + "Nepavyksta gauti rekomendacijos išsamios informacijos. Bandykite dar kartą vėliau."), "failedToLoadAlbums": MessageLookupByLibrary.simpleMessage("Nepavyko įkelti albumų."), "failedToPlayVideo": MessageLookupByLibrary.simpleMessage( @@ -841,19 +882,30 @@ class MessageLookup extends MessageLookupByLibrary { "failedToRefreshStripeSubscription": MessageLookupByLibrary.simpleMessage( "Nepavyko atnaujinti prenumeratos."), + "failedToRenew": + MessageLookupByLibrary.simpleMessage("Nepavyko pratęsti."), "failedToVerifyPaymentStatus": MessageLookupByLibrary.simpleMessage( "Nepavyko patvirtinti mokėjimo būsenos"), + "familyPlanOverview": MessageLookupByLibrary.simpleMessage( + "Įtraukite 5 šeimos narius į jūsų esamą planą nemokėdami papildomai.\n\nKiekvienas narys gauna savo asmeninę vietą ir negali matyti vienas kito failų, nebent jie bendrinami.\n\nŠeimos planai pasiekiami klientams, kurie turi mokamą „Ente“ prenumeratą.\n\nPrenumeruokite dabar, kad pradėtumėte!"), "familyPlanPortalTitle": MessageLookupByLibrary.simpleMessage("Šeima"), "familyPlans": MessageLookupByLibrary.simpleMessage("Šeimos planai"), "faq": MessageLookupByLibrary.simpleMessage("DUK"), "faqs": MessageLookupByLibrary.simpleMessage("DUK"), + "favorite": MessageLookupByLibrary.simpleMessage("Pamėgti"), "feedback": MessageLookupByLibrary.simpleMessage("Atsiliepimai"), "file": MessageLookupByLibrary.simpleMessage("Failas"), + "fileFailedToSaveToGallery": MessageLookupByLibrary.simpleMessage( + "Nepavyko išsaugoti failo į galeriją"), "fileInfoAddDescHint": MessageLookupByLibrary.simpleMessage("Pridėti aprašymą..."), "fileNotUploadedYet": MessageLookupByLibrary.simpleMessage("Failas dar neįkeltas."), + "fileSavedToGallery": MessageLookupByLibrary.simpleMessage( + "Failas išsaugotas į galeriją"), "fileTypes": MessageLookupByLibrary.simpleMessage("Failų tipai"), + "filesSavedToGallery": + MessageLookupByLibrary.simpleMessage("Failai išsaugoti į galeriją"), "findPeopleByName": MessageLookupByLibrary.simpleMessage( "Greitai suraskite žmones pagal vardą"), "findThemQuickly": @@ -866,24 +918,27 @@ class MessageLookup extends MessageLookupByLibrary { "foundFaces": MessageLookupByLibrary.simpleMessage("Rasti veidai"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("Gauta nemokama saugykla"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage("Naudojama nemokama saugykla"), "freeTrial": MessageLookupByLibrary.simpleMessage( "Nemokamas bandomasis laikotarpis"), - "freeTrialValidTill": m42, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAccessPostDelete": m37, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("Atlaisvinti įrenginio vietą"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Sutaupykite vietos savo įrenginyje išvalydami failus, kurių atsarginės kopijos jau buvo sukurtos."), + "freeUpSpace": + MessageLookupByLibrary.simpleMessage("Atlaisvinti vietos"), "gallery": MessageLookupByLibrary.simpleMessage("Galerija"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "Galerijoje rodoma iki 1000 prisiminimų"), "general": MessageLookupByLibrary.simpleMessage("Bendrieji"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Generuojami šifravimo raktai..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Eiti į nustatymus"), "googlePlayId": @@ -960,7 +1015,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Atrodo, kad kažkas nutiko ne taip. Bandykite pakartotinai po kurio laiko. Jei klaida tęsiasi, susisiekite su mūsų palaikymo komanda."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Elementai rodo likusių dienų skaičių iki visiško ištrynimo."), @@ -982,6 +1037,7 @@ class MessageLookup extends MessageLookupByLibrary { "kiloMeterUnit": MessageLookupByLibrary.simpleMessage("km"), "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( "Maloniai padėkite mums su šia informacija."), + "language": MessageLookupByLibrary.simpleMessage("Kalba"), "lastUpdated": MessageLookupByLibrary.simpleMessage("Paskutinį kartą atnaujintą"), "lastYearsTrip": @@ -995,7 +1051,7 @@ class MessageLookup extends MessageLookupByLibrary { "legacy": MessageLookupByLibrary.simpleMessage("Palikimas"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Palikimo paskyros"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "Palikimas leidžia patikimiems kontaktams pasiekti jūsų paskyrą jums nesant."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1008,7 +1064,7 @@ class MessageLookup extends MessageLookupByLibrary { "linkEmail": MessageLookupByLibrary.simpleMessage("Susieti el. paštą"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Įjungta"), "linkExpired": MessageLookupByLibrary.simpleMessage("Nebegalioja"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Nuorodos galiojimo laikas"), "linkHasExpired": @@ -1017,7 +1073,7 @@ class MessageLookup extends MessageLookupByLibrary { "linkPerson": MessageLookupByLibrary.simpleMessage("Susiekite asmenį,"), "linkPersonCaption": MessageLookupByLibrary.simpleMessage( "kad geriau bendrintumėte patirtį"), - "linkPersonToEmailConfirmation": m53, + "linkPersonToEmailConfirmation": m47, "livePhotos": MessageLookupByLibrary.simpleMessage("Gyvos nuotraukos"), "loadMessage1": MessageLookupByLibrary.simpleMessage( "Galite bendrinti savo prenumeratą su šeima."), @@ -1101,7 +1157,7 @@ class MessageLookup extends MessageLookupByLibrary { "mastodon": MessageLookupByLibrary.simpleMessage("„Mastodon“"), "matrix": MessageLookupByLibrary.simpleMessage("„Matrix“"), "me": MessageLookupByLibrary.simpleMessage("Aš"), - "memoryCount": m5, + "memoryCount": m48, "merchandise": MessageLookupByLibrary.simpleMessage("Atributika"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Sujungti su esamais"), @@ -1131,9 +1187,11 @@ class MessageLookup extends MessageLookupByLibrary { "mostRecent": MessageLookupByLibrary.simpleMessage("Naujausią"), "mostRelevant": MessageLookupByLibrary.simpleMessage("Aktualiausią"), "mountains": MessageLookupByLibrary.simpleMessage("Per kalvas"), - "moveItem": m54, + "moveItem": m49, "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage( "Perkelti pasirinktas nuotraukas į vieną datą"), + "moveToAlbum": + MessageLookupByLibrary.simpleMessage("Perkelti į albumą"), "movedToTrash": MessageLookupByLibrary.simpleMessage("Perkelta į šiukšlinę"), "name": MessageLookupByLibrary.simpleMessage("Pavadinimą"), @@ -1168,6 +1226,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nėra vaizdų su vietove"), "noInternetConnection": MessageLookupByLibrary.simpleMessage("Nėra interneto ryšio"), + "noPhotosAreBeingBackedUpRightNow": + MessageLookupByLibrary.simpleMessage( + "Šiuo metu nekuriamos atsarginės nuotraukų kopijos"), "noQuickLinksSelected": MessageLookupByLibrary.simpleMessage( "Nėra pasirinktų sparčiųjų nuorodų"), "noRecoveryKey": @@ -1177,10 +1238,10 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Rezultatų nėra."), "noResultsFound": MessageLookupByLibrary.simpleMessage("Rezultatų nerasta."), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage("Nerastas sistemos užraktas"), - "notPersonLabel": m57, + "notPersonLabel": m52, "notThisPerson": MessageLookupByLibrary.simpleMessage("Ne šis asmuo?"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Kol kas su jumis niekuo nesibendrinama."), @@ -1192,7 +1253,7 @@ class MessageLookup extends MessageLookupByLibrary { "onEnte": MessageLookupByLibrary.simpleMessage( "Saugykloje ente"), "onTheRoad": MessageLookupByLibrary.simpleMessage("Vėl kelyje"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Tik jiems"), "oops": MessageLookupByLibrary.simpleMessage("Ups"), "oopsSomethingWentWrong": @@ -1202,6 +1263,8 @@ class MessageLookup extends MessageLookupByLibrary { "openAlbumInBrowserTitle": MessageLookupByLibrary.simpleMessage( "Naudokite interneto programą, kad pridėtumėte nuotraukų į šį albumą."), "openFile": MessageLookupByLibrary.simpleMessage("Atverti failą"), + "openTheItem": + MessageLookupByLibrary.simpleMessage("• Atverkite elementą."), "optionalAsShortAsYouLike": MessageLookupByLibrary.simpleMessage( "Nebūtina, trumpai, kaip jums patinka..."), "orMergeWithExistingPerson": @@ -1225,7 +1288,7 @@ class MessageLookup extends MessageLookupByLibrary { "Slaptažodis sėkmingai pakeistas"), "passwordLock": MessageLookupByLibrary.simpleMessage("Slaptažodžio užraktas"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "Slaptažodžio stiprumas apskaičiuojamas atsižvelgiant į slaptažodžio ilgį, naudotus simbolius ir į tai, ar slaptažodis patenka į 10 000 dažniausiai naudojamų slaptažodžių."), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1236,7 +1299,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Mokėjimas nepavyko"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Deja, jūsų mokėjimas nepavyko. Susisiekite su palaikymo komanda ir mes jums padėsime!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Laukiami elementai"), "pendingSync": @@ -1252,11 +1315,12 @@ class MessageLookup extends MessageLookupByLibrary { "photoGridSize": MessageLookupByLibrary.simpleMessage("Nuotraukų tinklelio dydis"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("nuotrauka"), - "photocountPhotos": m63, + "photocountPhotos": m59, "photos": MessageLookupByLibrary.simpleMessage("Nuotraukos"), "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Jūsų pridėtos nuotraukos bus pašalintos iš albumo"), + "photosCount": m60, "photosKeepRelativeTimeDifference": MessageLookupByLibrary.simpleMessage( "Nuotraukos išlaiko santykinį laiko skirtumą"), @@ -1266,7 +1330,7 @@ class MessageLookup extends MessageLookupByLibrary { "Paleisti albumą televizoriuje"), "playOriginal": MessageLookupByLibrary.simpleMessage("Leisti originalą"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playStream": MessageLookupByLibrary.simpleMessage("Leisti srautinį perdavimą"), "playstoreSubscription": @@ -1283,7 +1347,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Prisijunkite iš naujo."), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Pasirinkite sparčiąsias nuorodas, kad pašalintumėte"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Bandykite dar kartą."), "pleaseVerifyTheCodeYouHaveEntered": @@ -1296,6 +1360,8 @@ class MessageLookup extends MessageLookupByLibrary { "Palaukite, tai šiek tiek užtruks."), "preparingLogs": MessageLookupByLibrary.simpleMessage("Ruošiami žurnalai..."), + "preserveMore": + MessageLookupByLibrary.simpleMessage("Išsaugoti daugiau"), "pressAndHoldToPlayVideo": MessageLookupByLibrary.simpleMessage( "Paspauskite ir palaikykite, kad paleistumėte vaizdo įrašą"), "pressAndHoldToPlayVideoDetailed": MessageLookupByLibrary.simpleMessage( @@ -1311,7 +1377,7 @@ class MessageLookup extends MessageLookupByLibrary { "proceed": MessageLookupByLibrary.simpleMessage("Tęsti"), "processed": MessageLookupByLibrary.simpleMessage("Apdorota"), "processing": MessageLookupByLibrary.simpleMessage("Apdorojama"), - "processingImport": m69, + "processingImport": m65, "processingVideos": MessageLookupByLibrary.simpleMessage("Apdorojami vaizdo įrašai"), "publicLinkEnabled": @@ -1320,8 +1386,8 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("Sukurti paraišką"), "rateTheApp": MessageLookupByLibrary.simpleMessage("Vertinti programą"), "rateUs": MessageLookupByLibrary.simpleMessage("Vertinti mus"), - "rateUsOnStore": m70, - "reassignedToName": m71, + "rateUsOnStore": m66, + "reassignedToName": m67, "recover": MessageLookupByLibrary.simpleMessage("Atkurti"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Atkurti paskyrą"), @@ -1330,7 +1396,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Atkurti paskyrą"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("Pradėtas atkūrimas"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Atkūrimo raktas"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( "Nukopijuotas atkūrimo raktas į iškarpinę"), @@ -1344,12 +1410,12 @@ class MessageLookup extends MessageLookupByLibrary { "Patvirtintas atkūrimo raktas"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Atkūrimo raktas – vienintelis būdas atkurti nuotraukas, jei pamiršote slaptažodį. Atkūrimo raktą galite rasti Nustatymose > Paskyra.\n\nĮveskite savo atkūrimo raktą čia, kad patvirtintumėte, ar teisingai jį išsaugojote."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("Atkūrimas sėkmingas."), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "Patikimas kontaktas bando pasiekti jūsų paskyrą."), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "Dabartinis įrenginys nėra pakankamai galingas, kad patvirtintų jūsų slaptažodį, bet mes galime iš naujo sugeneruoti taip, kad jis veiktų su visais įrenginiais.\n\nPrisijunkite naudojant atkūrimo raktą ir sugeneruokite iš naujo slaptažodį (jei norite, galite vėl naudoti tą patį)."), "recreatePasswordTitle": @@ -1365,7 +1431,8 @@ class MessageLookup extends MessageLookupByLibrary { "1. Duokite šį kodą savo draugams"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Jie užsiregistruoja mokamą planą"), - "referralStep3": m75, + "referralStep3": m71, + "referrals": MessageLookupByLibrary.simpleMessage("Rekomendacijos"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Šiuo metu rekomendacijos yra pristabdytos"), "rejectRecovery": @@ -1396,7 +1463,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Šalinti nuorodą"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Šalinti dalyvį"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Šalinti asmens žymą"), "removePublicLink": @@ -1414,8 +1481,8 @@ class MessageLookup extends MessageLookupByLibrary { "rename": MessageLookupByLibrary.simpleMessage("Pervadinti"), "renameFile": MessageLookupByLibrary.simpleMessage("Pervadinti failą"), "renewSubscription": - MessageLookupByLibrary.simpleMessage("Atnaujinti prenumeratą"), - "renewsOn": m77, + MessageLookupByLibrary.simpleMessage("Pratęsti prenumeratą"), + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Pranešti apie riktą"), "reportBug": @@ -1442,6 +1509,8 @@ class MessageLookup extends MessageLookupByLibrary { "saveChangesBeforeLeavingQuestion": MessageLookupByLibrary.simpleMessage( "Išsaugoti pakeitimus prieš išeinant?"), + "saveCollage": + MessageLookupByLibrary.simpleMessage("Išsaugoti koliažą"), "saveKey": MessageLookupByLibrary.simpleMessage("Išsaugoti raktą"), "savePerson": MessageLookupByLibrary.simpleMessage("Išsaugoti asmenį"), "saveYourRecoveryKeyIfYouHaventAlready": @@ -1473,8 +1542,8 @@ class MessageLookup extends MessageLookupByLibrary { "Pakvieskite asmenis ir čia matysite visas jų bendrinamas nuotraukas."), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "Asmenys bus rodomi čia, kai bus užbaigtas apdorojimas ir sinchronizavimas."), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Saugumas"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( "Žiūrėti viešų albumų nuorodas programoje"), @@ -1512,8 +1581,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeRemovedFromThisPerson": MessageLookupByLibrary.simpleMessage( "Pasirinkti elementai bus pašalinti iš šio asmens, bet nebus ištrinti iš jūsų bibliotekos."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, "send": MessageLookupByLibrary.simpleMessage("Siųsti"), "sendEmail": MessageLookupByLibrary.simpleMessage("Siųsti el. laišką"), "sendInvite": MessageLookupByLibrary.simpleMessage("Siųsti kvietimą"), @@ -1544,16 +1613,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Bendrinti albumą dabar"), "shareLink": MessageLookupByLibrary.simpleMessage("Bendrinti nuorodą"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Bendrinkite tik su tais asmenimis, su kuriais norite"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Atsisiųskite „Ente“, kad galėtume lengvai bendrinti originalios kokybės nuotraukas ir vaizdo įrašus.\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Bendrinkite su ne „Ente“ naudotojais."), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( "Sukurkite bendrinamus ir bendradarbiaujamus albumus su kitais „Ente“ naudotojais, įskaitant naudotojus nemokamuose planuose."), "sharedByYou": @@ -1576,11 +1645,11 @@ class MessageLookup extends MessageLookupByLibrary { "Jei manote, kad kas nors gali žinoti jūsų slaptažodį, galite priverstinai atsijungti iš visų kitų įrenginių, naudojančių jūsų paskyrą."), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Sutinku su paslaugų sąlygomis ir privatumo politika"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Jis bus ištrintas iš visų albumų."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Praleisti"), "social": MessageLookupByLibrary.simpleMessage("Socialinės"), "someOfTheFilesYouAreTryingToDeleteAre": @@ -1621,13 +1690,14 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Stabdyti perdavimą"), "storage": MessageLookupByLibrary.simpleMessage("Saugykla"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Jūs"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Viršyta saugyklos riba."), "streamDetails": MessageLookupByLibrary.simpleMessage( "Srautinio perdavimo išsami informacija"), "strongStrength": MessageLookupByLibrary.simpleMessage("Stipri"), - "subAlreadyLinkedErrMessage": m93, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Prenumeruoti"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Kad įjungtumėte bendrinimą, reikia aktyvios mokamos prenumeratos."), @@ -1641,7 +1711,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Siūlyti funkcijas"), "sunrise": MessageLookupByLibrary.simpleMessage("Akiratyje"), "support": MessageLookupByLibrary.simpleMessage("Pagalba"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage( "Sinchronizavimas sustabdytas"), "syncing": MessageLookupByLibrary.simpleMessage("Sinchronizuojama..."), @@ -1654,7 +1724,7 @@ class MessageLookup extends MessageLookupByLibrary { "Palieskite, kad atrakintumėte"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Palieskite, kad įkeltumėte"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Atrodo, kad kažkas nutiko ne taip. Bandykite dar kartą po kurio laiko. Jei klaida tęsiasi, susisiekite su mūsų palaikymo komanda."), "terminate": MessageLookupByLibrary.simpleMessage("Baigti"), @@ -1663,6 +1733,8 @@ class MessageLookup extends MessageLookupByLibrary { "terms": MessageLookupByLibrary.simpleMessage("Sąlygos"), "termsOfServicesTitle": MessageLookupByLibrary.simpleMessage("Sąlygos"), "thankYou": MessageLookupByLibrary.simpleMessage("Dėkojame"), + "thankYouForSubscribing": MessageLookupByLibrary.simpleMessage( + "Dėkojame, kad užsiprenumeravote!"), "theDownloadCouldNotBeCompleted": MessageLookupByLibrary.simpleMessage( "Atsisiuntimas negalėjo būti baigtas."), "theLinkYouAreTryingToAccessHasExpired": @@ -1672,7 +1744,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage( "Įvestas atkūrimo raktas yra neteisingas."), "theme": MessageLookupByLibrary.simpleMessage("Tema"), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "thisCanBeUsedToRecoverYourAccountIfYou": MessageLookupByLibrary.simpleMessage( "Tai gali būti naudojama paskyrai atkurti, jei prarandate dvigubo tapatybės nustatymą"), @@ -1703,6 +1775,8 @@ class MessageLookup extends MessageLookupByLibrary { "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": MessageLookupByLibrary.simpleMessage( "Kad įjungtumėte programos užraktą, sistemos nustatymuose nustatykite įrenginio prieigos kodą arba ekrano užraktą."), + "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage( + "Kad paslėptumėte nuotrauką ar vaizdo įrašą"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( "Kad iš naujo nustatytumėte slaptažodį, pirmiausia patvirtinkite savo el. paštą."), "todaysLogs": @@ -1727,6 +1801,9 @@ class MessageLookup extends MessageLookupByLibrary { "twofactorAuthenticationPageTitle": MessageLookupByLibrary.simpleMessage( "Dvigubas tapatybės nustatymas"), + "twofactorAuthenticationSuccessfullyReset": + MessageLookupByLibrary.simpleMessage( + "Dvigubas tapatybės nustatymas sėkmingai iš naujo nustatytas."), "twofactorSetup": MessageLookupByLibrary.simpleMessage( "Dvigubo tapatybės nustatymo sąranka"), "typeOfGallerGallerytypeIsNotSupportedForRename": m104, @@ -1739,6 +1816,7 @@ class MessageLookup extends MessageLookupByLibrary { "Atsiprašome, šis kodas nepasiekiamas."), "uncategorized": MessageLookupByLibrary.simpleMessage("Nekategorizuoti"), + "unhide": MessageLookupByLibrary.simpleMessage("Rodyti"), "unlock": MessageLookupByLibrary.simpleMessage("Atrakinti"), "unpinAlbum": MessageLookupByLibrary.simpleMessage("Atsegti albumą"), "unselectAll": MessageLookupByLibrary.simpleMessage("Nesirinkti visų"), @@ -1791,7 +1869,11 @@ class MessageLookup extends MessageLookupByLibrary { "viewAddOnButton": MessageLookupByLibrary.simpleMessage("Peržiūrėti priedus"), "viewAll": MessageLookupByLibrary.simpleMessage("Peržiūrėti viską"), + "viewAllExifData": MessageLookupByLibrary.simpleMessage( + "Peržiūrėti visus EXIF duomenis"), "viewLargeFiles": MessageLookupByLibrary.simpleMessage("Dideli failai"), + "viewLargeFilesDesc": MessageLookupByLibrary.simpleMessage( + "Peržiūrėkite failus, kurie užima daugiausiai saugyklos vietos."), "viewLogs": MessageLookupByLibrary.simpleMessage("Peržiūrėti žurnalus"), "viewRecoveryKey": MessageLookupByLibrary.simpleMessage("Peržiūrėti atkūrimo raktą"), @@ -1809,7 +1891,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Nepalaikome nuotraukų ir albumų redagavimo, kurių dar neturite."), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Silpna"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Sveiki sugrįžę!"), "whatsNew": MessageLookupByLibrary.simpleMessage("Kas naujo"), @@ -1817,7 +1899,7 @@ class MessageLookup extends MessageLookupByLibrary { "Patikimas kontaktas gali padėti atkurti jūsų duomenis."), "yearShort": MessageLookupByLibrary.simpleMessage("m."), "yearly": MessageLookupByLibrary.simpleMessage("Metinis"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Taip"), "yesCancel": MessageLookupByLibrary.simpleMessage("Taip, atsisakyti"), "yesConvertToViewer": @@ -1825,10 +1907,13 @@ class MessageLookup extends MessageLookupByLibrary { "yesDelete": MessageLookupByLibrary.simpleMessage("Taip, ištrinti"), "yesLogout": MessageLookupByLibrary.simpleMessage("Taip, atsijungti"), "yesRemove": MessageLookupByLibrary.simpleMessage("Taip, šalinti"), + "yesRenew": MessageLookupByLibrary.simpleMessage("Taip, pratęsti"), "yesResetPerson": MessageLookupByLibrary.simpleMessage( "Taip, nustatyti asmenį iš naujo"), "you": MessageLookupByLibrary.simpleMessage("Jūs"), - "youAndThem": m111, + "youAndThem": m112, + "youAreOnAFamilyPlan": + MessageLookupByLibrary.simpleMessage("Esate šeimos plane!"), "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage("Esate naujausioje versijoje"), "youCanAtMaxDoubleYourStorage": MessageLookupByLibrary.simpleMessage( @@ -1839,14 +1924,25 @@ class MessageLookup extends MessageLookupByLibrary { "Negalite bendrinti su savimi."), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "Neturite jokių archyvuotų elementų."), + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("Jūsų paskyra ištrinta"), "yourMap": MessageLookupByLibrary.simpleMessage("Jūsų žemėlapis"), + "yourPlanWasSuccessfullyDowngraded": + MessageLookupByLibrary.simpleMessage( + "Jūsų planas sėkmingai pakeistas į žemesnį"), + "yourPlanWasSuccessfullyUpgraded": MessageLookupByLibrary.simpleMessage( + "Jūsų planas sėkmingai pakeistas"), + "yourPurchaseWasSuccessful": MessageLookupByLibrary.simpleMessage( + "Jūsų pirkimas buvo sėkmingas"), "yourStorageDetailsCouldNotBeFetched": MessageLookupByLibrary.simpleMessage( "Nepavyko gauti jūsų saugyklos duomenų."), "yourSubscriptionHasExpired": MessageLookupByLibrary.simpleMessage("Jūsų prenumerata baigėsi."), + "yourSubscriptionWasUpdatedSuccessfully": + MessageLookupByLibrary.simpleMessage( + "Jūsų prenumerata buvo sėkmingai atnaujinta"), "yourVerificationCodeHasExpired": MessageLookupByLibrary.simpleMessage( "Jūsų patvirtinimo kodas nebegaliojantis."), "youveNoDuplicateFilesThatCanBeCleared": diff --git a/mobile/lib/generated/intl/messages_nl.dart b/mobile/lib/generated/intl/messages_nl.dart index d0b9659160..0112bfe4fd 100644 --- a/mobile/lib/generated/intl/messages_nl.dart +++ b/mobile/lib/generated/intl/messages_nl.dart @@ -20,43 +20,34 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'nl'; - static String m9(title) => "${title} (Ik)"; + static String m0(title) => "${title} (Ik)"; - static String m10(count) => - "${Intl.plural(count, zero: 'Voeg samenwerker toe', one: 'Voeg samenwerker toe', other: 'Voeg samenwerkers toe')}"; - - static String m11(count) => - "${Intl.plural(count, one: 'Bestand toevoegen', other: 'Bestanden toevoegen')}"; - - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "Jouw ${storageAmount} add-on is geldig tot ${endDate}"; - static String m13(count) => - "${Intl.plural(count, one: 'Voeg kijker toe', other: 'Voeg kijkers toe')}"; + static String m5(emailOrName) => "Toegevoegd door ${emailOrName}"; - static String m14(emailOrName) => "Toegevoegd door ${emailOrName}"; + static String m6(albumName) => "Succesvol toegevoegd aan ${albumName}"; - static String m15(albumName) => "Succesvol toegevoegd aan ${albumName}"; + static String m7(name) => "${name} bewonderen"; - static String m16(name) => "${name} bewonderen"; - - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'Geen deelnemers', one: '1 deelnemer', other: '${count} deelnemers')}"; - static String m18(versionValue) => "Versie: ${versionValue}"; + static String m9(versionValue) => "Versie: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} vrij"; - static String m113(name) => "Prachtige uitzichten met ${name}"; + static String m11(name) => "Prachtige uitzichten met ${name}"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "Annuleer eerst uw bestaande abonnement bij ${paymentProvider}"; - static String m3(user) => + static String m13(user) => "${user} zal geen foto\'s meer kunnen toevoegen aan dit album\n\nDe gebruiker zal nog steeds bestaande foto\'s kunnen verwijderen die door hen zijn toegevoegd"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Jouw familie heeft ${storageAmountInGb} GB geclaimd tot nu toe', @@ -64,218 +55,203 @@ class MessageLookup extends MessageLookupByLibrary { 'other': 'Je hebt ${storageAmountInGb} GB geclaimd tot nu toe!', })}"; - static String m22(albumName) => + static String m15(albumName) => "Gezamenlijke link aangemaakt voor ${albumName}"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: '0 samenwerkers toegevoegd', one: '1 samenwerker toegevoegd', other: '${count} samenwerkers toegevoegd')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "Je staat op het punt ${email} toe te voegen als vertrouwde contactpersoon. Ze kunnen je account herstellen als je ${numOfDays} dagen afwezig bent."; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Neem contact op met ${familyAdminEmail} om uw abonnement te beheren"; - static String m26(provider) => + static String m19(provider) => "Neem contact met ons op via support@ente.io om uw ${provider} abonnement te beheren."; - static String m27(endpoint) => "Verbonden met ${endpoint}"; + static String m20(endpoint) => "Verbonden met ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Verwijder ${count} bestand', other: 'Verwijder ${count} bestanden')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Verwijderen van ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Dit verwijdert de openbare link voor toegang tot \"${albumName}\"."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Stuur een e-mail naar ${supportEmail} vanaf het door jou geregistreerde e-mailadres"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "Je hebt ${Intl.plural(count, one: '${count} dubbel bestand', other: '${count} dubbele bestanden')} opgeruimd, totaal (${storageSaved}!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} bestanden, elk ${formattedSize}"; - static String m34(newEmail) => "E-mailadres gewijzigd naar ${newEmail}"; + static String m27(newEmail) => "E-mailadres gewijzigd naar ${newEmail}"; - static String m35(email) => "${email} heeft geen Ente account."; + static String m28(email) => "${email} heeft geen Ente account."; - static String m36(email) => + static String m29(email) => "${email} heeft geen Ente account.\n\nStuur ze een uitnodiging om foto\'s te delen."; - static String m37(name) => "${name} omarmen"; + static String m30(name) => "${name} omarmen"; - static String m38(text) => "Extra foto\'s gevonden voor ${text}"; + static String m31(text) => "Extra foto\'s gevonden voor ${text}"; - static String m39(name) => "Feestmaal met ${name}"; + static String m32(name) => "Feestmaal met ${name}"; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "${Intl.plural(count, one: '1 bestand', other: '${formattedNumber} bestanden')} in dit album zijn veilig geback-upt"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "${Intl.plural(count, one: '1 bestand', other: '${formattedNumber} bestanden')} in dit album is veilig geback-upt"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB telkens als iemand zich aanmeldt voor een betaald abonnement en je code toepast"; - static String m42(endDate) => "Gratis proefversie geldig tot ${endDate}"; + static String m36(endDate) => "Gratis proefversie geldig tot ${endDate}"; - static String m43(count) => - "Je hebt nog steeds toegang tot ${Intl.plural(count, one: 'het', other: 'ze')} op Ente zolang je een actief abonnement hebt"; + static String m38(sizeInMBorGB) => "Maak ${sizeInMBorGB} vrij"; - static String m44(sizeInMBorGB) => "Maak ${sizeInMBorGB} vrij"; - - static String m45(count, formattedSize) => - "${Intl.plural(count, one: 'Het kan verwijderd worden van het apparaat om ${formattedSize} vrij te maken', other: 'Ze kunnen verwijderd worden van het apparaat om ${formattedSize} vrij te maken')}"; - - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Verwerken van ${currentlyProcessing} / ${totalCount}"; - static String m47(name) => "Wandelen met ${name}"; + static String m41(name) => "Wandelen met ${name}"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} item', other: '${count} items')}"; - static String m49(name) => "Laatste keer met ${name}"; + static String m43(name) => "Laatste keer met ${name}"; - static String m50(email) => + static String m44(email) => "${email} heeft je uitgenodigd om een vertrouwd contact te zijn"; - static String m51(expiryTime) => "Link vervalt op ${expiryTime}"; + static String m45(expiryTime) => "Link vervalt op ${expiryTime}"; - static String m52(email) => "Link persoon aan ${email}"; + static String m46(email) => "Link persoon aan ${email}"; - static String m53(personName, email) => + static String m47(personName, email) => "Dit linkt ${personName} aan ${email}"; - static String m5(count, formattedCount) => - "${Intl.plural(count, zero: 'geen herinneringen', one: '${formattedCount} herinnering', other: '${formattedCount} herinneringen')}"; + static String m50(albumName) => "Succesvol verplaatst naar ${albumName}"; - static String m54(count) => - "${Intl.plural(count, one: 'Bestand verplaatsen', other: 'Bestanden verplaatsen')}"; + static String m51(personName) => "Geen suggesties voor ${personName}"; - static String m55(albumName) => "Succesvol verplaatst naar ${albumName}"; + static String m52(name) => "Niet ${name}?"; - static String m56(personName) => "Geen suggesties voor ${personName}"; - - static String m57(name) => "Niet ${name}?"; - - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Neem contact op met ${familyAdminEmail} om uw code te wijzigen."; - static String m59(name) => "Feest met ${name}"; + static String m54(name) => "Feest met ${name}"; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Wachtwoord sterkte: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Praat met ${providerName} klantenservice als u in rekening bent gebracht"; - static String m61(name, age) => "${name} is ${age}!"; + static String m57(name, age) => "${name} is ${age}!"; - static String m62(name, age) => "${name} wordt binnenkort ${age}"; + static String m58(name, age) => "${name} wordt binnenkort ${age}"; - static String m63(count) => + static String m59(count) => "${Intl.plural(count, zero: 'Geen foto\'s', one: '1 foto', other: '${count} foto\'s')}"; - static String m64(count) => - "${Intl.plural(count, zero: '0 foto\'s', one: '1 foto', other: '${count} foto\'s')}"; - - static String m65(endDate) => + static String m61(endDate) => "Gratis proefperiode geldig tot ${endDate}.\nU kunt naderhand een betaald abonnement kiezen."; - static String m66(toEmail) => "Stuur ons een e-mail op ${toEmail}"; + static String m62(toEmail) => "Stuur ons een e-mail op ${toEmail}"; - static String m67(toEmail) => + static String m63(toEmail) => "Verstuur de logboeken alstublieft naar ${toEmail}"; - static String m68(name) => "Poseren met ${name}"; + static String m64(name) => "Poseren met ${name}"; - static String m69(folderName) => "Verwerken van ${folderName}..."; + static String m65(folderName) => "Verwerken van ${folderName}..."; - static String m70(storeName) => "Beoordeel ons op ${storeName}"; + static String m66(storeName) => "Beoordeel ons op ${storeName}"; - static String m71(name) => "Toegewezen aan ${name}"; + static String m67(name) => "Toegewezen aan ${name}"; - static String m72(days, email) => + static String m68(days, email) => "U krijgt toegang tot het account na ${days} dagen. Een melding zal worden verzonden naar ${email}."; - static String m73(email) => + static String m69(email) => "U kunt nu het account van ${email} herstellen door een nieuw wachtwoord in te stellen."; - static String m74(email) => "${email} probeert je account te herstellen."; + static String m70(email) => "${email} probeert je account te herstellen."; - static String m75(storageInGB) => + static String m71(storageInGB) => "Jullie krijgen allebei ${storageInGB} GB* gratis"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} zal worden verwijderd uit dit gedeelde album\n\nAlle door hen toegevoegde foto\'s worden ook uit het album verwijderd"; - static String m77(endDate) => "Wordt verlengd op ${endDate}"; + static String m73(endDate) => "Wordt verlengd op ${endDate}"; - static String m78(name) => "Roadtrip met ${name}"; + static String m74(name) => "Roadtrip met ${name}"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: '${count} resultaat gevonden', other: '${count} resultaten gevonden')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "Lengte van secties komt niet overeen: ${snapshotLength} != ${searchLength}"; - static String m6(count) => "${count} geselecteerd"; + static String m77(count) => "${count} geselecteerd"; - static String m81(count, yourCount) => + static String m78(count, yourCount) => "${count} geselecteerd (${yourCount} van jou)"; - static String m82(name) => "Selfies met ${name}"; + static String m79(name) => "Selfies met ${name}"; - static String m83(verificationID) => + static String m80(verificationID) => "Hier is mijn verificatie-ID: ${verificationID} voor ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "Hey, kunt u bevestigen dat dit uw ente.io verificatie-ID is: ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Ente verwijzingscode: ${referralCode} \n\nPas het toe bij Instellingen → Algemeen → Verwijzingen om ${referralStorageInGB} GB gratis te krijgen nadat je je hebt aangemeld voor een betaald abonnement\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Deel met specifieke mensen', one: 'Gedeeld met 1 persoon', other: 'Gedeeld met ${numberOfPeople} mensen')}"; - static String m86(emailIDs) => "Gedeeld met ${emailIDs}"; + static String m84(emailIDs) => "Gedeeld met ${emailIDs}"; - static String m87(fileType) => + static String m85(fileType) => "Deze ${fileType} zal worden verwijderd van jouw apparaat."; - static String m88(fileType) => + static String m86(fileType) => "Deze ${fileType} staat zowel in Ente als op jouw apparaat."; - static String m89(fileType) => + static String m87(fileType) => "Deze ${fileType} zal worden verwijderd uit Ente."; - static String m90(name) => "Sporten met ${name}"; + static String m88(name) => "Sporten met ${name}"; - static String m91(name) => "Spotlicht op ${name}"; + static String m89(name) => "Spotlicht op ${name}"; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} van ${totalAmount} ${totalStorageUnit} gebruikt"; - static String m93(id) => + static String m92(id) => "Jouw ${id} is al aan een ander Ente account gekoppeld.\nAls je jouw ${id} wilt gebruiken met dit account, neem dan contact op met onze klantenservice"; - static String m94(endDate) => "Uw abonnement loopt af op ${endDate}"; + static String m93(endDate) => "Uw abonnement loopt af op ${endDate}"; - static String m95(completed, total) => + static String m94(completed, total) => "${completed}/${total} herinneringen bewaard"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Tik om te uploaden, upload wordt momenteel genegeerd vanwege ${ignoreReason}"; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "Zij krijgen ook ${storageAmountInGB} GB"; static String m97(email) => "Dit is de verificatie-ID van ${email}"; @@ -307,18 +283,15 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "Verifieer ${email}"; - static String m109(count) => - "${Intl.plural(count, zero: '0 kijkers toegevoegd', one: '1 kijker toegevoegd', other: '${count} kijkers toegevoegd')}"; - - static String m2(email) => + static String m110(email) => "We hebben een e-mail gestuurd naar ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: '${count} jaar geleden', other: '${count} jaar geleden')}"; - static String m111(name) => "Jij en ${name}"; + static String m112(name) => "Jij en ${name}"; - static String m112(storageSaved) => + static String m113(storageSaved) => "Je hebt ${storageSaved} succesvol vrijgemaakt!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -331,7 +304,7 @@ class MessageLookup extends MessageLookupByLibrary { "account": MessageLookupByLibrary.simpleMessage("Account"), "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage( "Account is al geconfigureerd."), - "accountOwnerPersonAppbarTitle": m9, + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("Welkom terug!"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( @@ -344,11 +317,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nieuw e-mailadres toevoegen"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Samenwerker toevoegen"), - "addCollaborators": m10, "addFiles": MessageLookupByLibrary.simpleMessage("Bestanden toevoegen"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Toevoegen vanaf apparaat"), - "addItem": m11, "addLocation": MessageLookupByLibrary.simpleMessage("Locatie toevoegen"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Toevoegen"), @@ -361,7 +332,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nieuw persoon toevoegen"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage("Details van add-ons"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Add-ons"), "addPhotos": MessageLookupByLibrary.simpleMessage("Foto\'s toevoegen"), "addSelected": @@ -374,15 +345,14 @@ class MessageLookup extends MessageLookupByLibrary { "addTrustedContact": MessageLookupByLibrary.simpleMessage("Vertrouwd contact toevoegen"), "addViewer": MessageLookupByLibrary.simpleMessage("Voeg kijker toe"), - "addViewers": m13, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage("Voeg nu je foto\'s toe"), "addedAs": MessageLookupByLibrary.simpleMessage("Toegevoegd als"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("Toevoegen aan favorieten..."), - "admiringThem": m16, + "admiringThem": m7, "advanced": MessageLookupByLibrary.simpleMessage("Geavanceerd"), "advancedSettings": MessageLookupByLibrary.simpleMessage("Geavanceerd"), "after1Day": MessageLookupByLibrary.simpleMessage("Na 1 dag"), @@ -391,7 +361,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("Na 1 week"), "after1Year": MessageLookupByLibrary.simpleMessage("Na 1 jaar"), "albumOwner": MessageLookupByLibrary.simpleMessage("Eigenaar"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Albumtitel"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Album bijgewerkt"), @@ -442,7 +412,7 @@ class MessageLookup extends MessageLookupByLibrary { "appLock": MessageLookupByLibrary.simpleMessage("App-vergrendeling"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Kies tussen het standaard vergrendelscherm van uw apparaat en een aangepast vergrendelscherm met een pincode of wachtwoord."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Toepassen"), "applyCodeTitle": @@ -527,10 +497,10 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "Automatisch koppelen werkt alleen met apparaten die Chromecast ondersteunen."), "available": MessageLookupByLibrary.simpleMessage("Beschikbaar"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("Back-up mappen"), - "backgroundWithThem": m113, + "backgroundWithThem": m11, "backup": MessageLookupByLibrary.simpleMessage("Back-up"), "backupFailed": MessageLookupByLibrary.simpleMessage("Back-up mislukt"), "backupFile": MessageLookupByLibrary.simpleMessage("Back-up bestand"), @@ -548,8 +518,14 @@ class MessageLookup extends MessageLookupByLibrary { "blackFridaySale": MessageLookupByLibrary.simpleMessage("Black Friday-aanbieding"), "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "cLBulkEdit": + MessageLookupByLibrary.simpleMessage("Bulk datums wijzigen"), + "cLBulkEditDesc": MessageLookupByLibrary.simpleMessage( + "Je kunt nu meerdere foto\'s selecteren en de datum/tijd van ze allemaal bewerken met één snelle actie. Verschuiven van datums wordt ook ondersteund."), "cLFamilyPlan": MessageLookupByLibrary.simpleMessage("Familieplan limieten"), + "cLFamilyPlanDesc": MessageLookupByLibrary.simpleMessage( + "Je kunt nu limieten instellen voor hoeveel opslag je familieleden kunnen gebruiken."), "cLIcon": MessageLookupByLibrary.simpleMessage("Nieuw icoon"), "cLIconDesc": MessageLookupByLibrary.simpleMessage( "Tot slot, een nieuwe app icoon waarvan we denken dat het ons werk het beste weergeeft. We hebben ook een icon-switcher toegevoegd zodat je het oude icoon kunt blijven gebruiken."), @@ -578,10 +554,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Herstel annuleren"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "Weet je zeker dat je het herstel wilt annuleren?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Abonnement opzeggen"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( "Kan gedeelde bestanden niet verwijderen"), "castAlbum": MessageLookupByLibrary.simpleMessage("Album casten"), @@ -618,7 +594,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Claim gratis opslag"), "claimMore": MessageLookupByLibrary.simpleMessage("Claim meer!"), "claimed": MessageLookupByLibrary.simpleMessage("Geclaimd"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("Ongecategoriseerd opschonen"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -647,12 +623,12 @@ class MessageLookup extends MessageLookupByLibrary { "Maak een link waarmee mensen foto\'s in jouw gedeelde album kunnen toevoegen en bekijken zonder dat ze daarvoor een Ente app of account nodig hebben. Handig voor het verzamelen van foto\'s van evenementen."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Gezamenlijke link"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Samenwerker"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "Samenwerkers kunnen foto\'s en video\'s toevoegen aan het gedeelde album."), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("Layout"), "collageSaved": MessageLookupByLibrary.simpleMessage( "Collage opgeslagen in gallerij"), @@ -670,7 +646,7 @@ class MessageLookup extends MessageLookupByLibrary { "Weet u zeker dat u tweestapsverificatie wilt uitschakelen?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage( "Account verwijderen bevestigen"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Ja, ik wil mijn account en de bijbehorende gegevens verspreid over alle apps permanent verwijderen."), "confirmPassword": @@ -683,10 +659,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Bevestig herstelsleutel"), "connectToDevice": MessageLookupByLibrary.simpleMessage( "Verbinding maken met apparaat"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("Contacteer klantenservice"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Contacten"), "contents": MessageLookupByLibrary.simpleMessage("Inhoud"), "continueLabel": MessageLookupByLibrary.simpleMessage("Doorgaan"), @@ -733,7 +709,7 @@ class MessageLookup extends MessageLookupByLibrary { "currentlyRunning": MessageLookupByLibrary.simpleMessage("momenteel bezig"), "custom": MessageLookupByLibrary.simpleMessage("Aangepast"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Donker"), "dayToday": MessageLookupByLibrary.simpleMessage("Vandaag"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Gisteren"), @@ -771,12 +747,12 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Verwijder van apparaat"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Verwijder van Ente"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Verwijder locatie"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Foto\'s verwijderen"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "Ik mis een belangrijke functie"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -817,7 +793,7 @@ class MessageLookup extends MessageLookupByLibrary { "Kijkers kunnen nog steeds screenshots maken of een kopie van je foto\'s opslaan met behulp van externe tools"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Let op"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage( "Tweestapsverificatie uitschakelen"), "disablingTwofactorAuthentication": @@ -860,9 +836,9 @@ class MessageLookup extends MessageLookupByLibrary { "downloadFailed": MessageLookupByLibrary.simpleMessage("Download mislukt"), "downloading": MessageLookupByLibrary.simpleMessage("Downloaden..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Bewerken"), "editLocation": MessageLookupByLibrary.simpleMessage("Locatie bewerken"), @@ -879,16 +855,16 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("E-mail"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage("E-mail is al geregistreerd."), - "emailChangedTo": m34, - "emailDoesNotHaveEnteAccount": m35, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage("E-mail niet geregistreerd."), "emailVerificationToggle": MessageLookupByLibrary.simpleMessage("E-mailverificatie"), "emailYourLogs": MessageLookupByLibrary.simpleMessage("E-mail uw logboeken"), - "embracingThem": m37, + "embracingThem": m30, "emergencyContacts": MessageLookupByLibrary.simpleMessage("Noodcontacten"), "empty": MessageLookupByLibrary.simpleMessage("Leeg"), @@ -969,7 +945,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Exporteer je gegevens"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage("Extra foto\'s gevonden"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Gezicht nog niet geclusterd, kom later terug"), "faceRecognition": @@ -1009,7 +985,7 @@ class MessageLookup extends MessageLookupByLibrary { "faqs": MessageLookupByLibrary.simpleMessage("Veelgestelde vragen"), "favorite": MessageLookupByLibrary.simpleMessage("Toevoegen aan favorieten"), - "feastingWithThem": m39, + "feastingWithThem": m32, "feedback": MessageLookupByLibrary.simpleMessage("Feedback"), "file": MessageLookupByLibrary.simpleMessage("Bestand"), "fileFailedToSaveToGallery": MessageLookupByLibrary.simpleMessage( @@ -1023,8 +999,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("Bestandstype"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("Bestandstypen en namen"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("Bestanden verwijderd"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage( @@ -1042,26 +1018,24 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Gezichten gevonden"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("Gratis opslag geclaimd"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage("Gratis opslag bruikbaar"), "freeTrial": MessageLookupByLibrary.simpleMessage("Gratis proefversie"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("Apparaatruimte vrijmaken"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Bespaar ruimte op je apparaat door bestanden die al geback-upt zijn te wissen."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Ruimte vrijmaken"), - "freeUpSpaceSaving": m45, "gallery": MessageLookupByLibrary.simpleMessage("Galerij"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "Tot 1000 herinneringen getoond in de galerij"), "general": MessageLookupByLibrary.simpleMessage("Algemeen"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Encryptiesleutels genereren..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Ga naar instellingen"), "googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"), @@ -1090,7 +1064,7 @@ class MessageLookup extends MessageLookupByLibrary { "hideSharedItemsFromHomeGallery": MessageLookupByLibrary.simpleMessage( "Verberg gedeelde bestanden uit de galerij"), "hiding": MessageLookupByLibrary.simpleMessage("Verbergen..."), - "hikingWithThem": m47, + "hikingWithThem": m41, "hostedAtOsmFrance": MessageLookupByLibrary.simpleMessage("Gehost bij OSM France"), "howItWorks": MessageLookupByLibrary.simpleMessage("Hoe het werkt"), @@ -1147,7 +1121,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Het lijkt erop dat er iets fout is gegaan. Probeer het later opnieuw. Als de fout zich blijft voordoen, neem dan contact op met ons supportteam."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Bestanden tonen het aantal resterende dagen voordat ze permanent worden verwijderd"), @@ -1168,7 +1142,7 @@ class MessageLookup extends MessageLookupByLibrary { "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( "Help ons alsjeblieft met deze informatie"), "language": MessageLookupByLibrary.simpleMessage("Taal"), - "lastTimeWithThem": m49, + "lastTimeWithThem": m43, "lastUpdated": MessageLookupByLibrary.simpleMessage("Laatst gewijzigd"), "lastYearsTrip": MessageLookupByLibrary.simpleMessage("Reis van vorig jaar"), @@ -1182,7 +1156,7 @@ class MessageLookup extends MessageLookupByLibrary { "legacy": MessageLookupByLibrary.simpleMessage("Legacy"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Legacy accounts"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "Legacy geeft vertrouwde contacten toegang tot je account bij afwezigheid."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1199,7 +1173,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("voor sneller delen"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Ingeschakeld"), "linkExpired": MessageLookupByLibrary.simpleMessage("Verlopen"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Vervaldatum"), "linkHasExpired": MessageLookupByLibrary.simpleMessage("Link is vervallen"), @@ -1207,8 +1181,8 @@ class MessageLookup extends MessageLookupByLibrary { "linkPerson": MessageLookupByLibrary.simpleMessage("Link persoon"), "linkPersonCaption": MessageLookupByLibrary.simpleMessage( "voor een betere ervaring met delen"), - "linkPersonToEmail": m52, - "linkPersonToEmailConfirmation": m53, + "linkPersonToEmail": m46, + "linkPersonToEmailConfirmation": m47, "livePhotos": MessageLookupByLibrary.simpleMessage("Live foto"), "loadMessage1": MessageLookupByLibrary.simpleMessage( "U kunt uw abonnement met uw familie delen"), @@ -1298,7 +1272,6 @@ class MessageLookup extends MessageLookupByLibrary { "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), "me": MessageLookupByLibrary.simpleMessage("Ik"), - "memoryCount": m5, "merchandise": MessageLookupByLibrary.simpleMessage("Merchandise"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Samenvoegen met bestaand"), @@ -1330,14 +1303,13 @@ class MessageLookup extends MessageLookupByLibrary { "mostRecent": MessageLookupByLibrary.simpleMessage("Meest recent"), "mostRelevant": MessageLookupByLibrary.simpleMessage("Meest relevant"), "mountains": MessageLookupByLibrary.simpleMessage("Over de heuvels"), - "moveItem": m54, "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage( "Verplaats de geselecteerde foto\'s naar één datum"), "moveToAlbum": MessageLookupByLibrary.simpleMessage("Verplaats naar album"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage( "Verplaatsen naar verborgen album"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("Naar prullenbak verplaatst"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( @@ -1392,10 +1364,10 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Geen resultaten"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Geen resultaten gevonden"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage( "Geen systeemvergrendeling gevonden"), - "notPersonLabel": m57, + "notPersonLabel": m52, "notThisPerson": MessageLookupByLibrary.simpleMessage("Niet dezelfde persoon?"), "nothingSharedWithYouYet": @@ -1408,7 +1380,7 @@ class MessageLookup extends MessageLookupByLibrary { "onEnte": MessageLookupByLibrary.simpleMessage( "Op ente"), "onTheRoad": MessageLookupByLibrary.simpleMessage("Onderweg"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Alleen hen"), "oops": MessageLookupByLibrary.simpleMessage("Oeps"), "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( @@ -1438,7 +1410,7 @@ class MessageLookup extends MessageLookupByLibrary { "pairingComplete": MessageLookupByLibrary.simpleMessage("Koppeling voltooid"), "panorama": MessageLookupByLibrary.simpleMessage("Panorama"), - "partyWithThem": m59, + "partyWithThem": m54, "passKeyPendingVerification": MessageLookupByLibrary.simpleMessage( "Verificatie is nog in behandeling"), "passkey": MessageLookupByLibrary.simpleMessage("Passkey"), @@ -1448,7 +1420,7 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( "Wachtwoord succesvol aangepast"), "passwordLock": MessageLookupByLibrary.simpleMessage("Wachtwoord slot"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "De wachtwoordsterkte wordt berekend aan de hand van de lengte van het wachtwoord, de gebruikte tekens en of het wachtwoord al dan niet in de top 10.000 van meest gebruikte wachtwoorden staat"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1459,7 +1431,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Betaling mislukt"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Helaas is je betaling mislukt. Neem contact op met support zodat we je kunnen helpen!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Bestanden in behandeling"), "pendingSync": MessageLookupByLibrary.simpleMessage( @@ -1473,21 +1445,20 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Permanent verwijderen"), "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( "Permanent verwijderen van apparaat?"), - "personIsAge": m61, + "personIsAge": m57, "personName": MessageLookupByLibrary.simpleMessage("Naam van persoon"), - "personTurningAge": m62, + "personTurningAge": m58, "pets": MessageLookupByLibrary.simpleMessage("Harige kameraden"), "photoDescriptions": MessageLookupByLibrary.simpleMessage("Foto beschrijvingen"), "photoGridSize": MessageLookupByLibrary.simpleMessage("Foto raster grootte"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("foto"), - "photocountPhotos": m63, + "photocountPhotos": m59, "photos": MessageLookupByLibrary.simpleMessage("Foto\'s"), "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Foto\'s toegevoegd door u zullen worden verwijderd uit het album"), - "photosCount": m64, "photosKeepRelativeTimeDifference": MessageLookupByLibrary.simpleMessage( "Foto\'s behouden relatief tijdsverschil"), @@ -1500,7 +1471,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Album afspelen op TV"), "playOriginal": MessageLookupByLibrary.simpleMessage("Origineel afspelen"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playStream": MessageLookupByLibrary.simpleMessage("Stream afspelen"), "playstoreSubscription": MessageLookupByLibrary.simpleMessage("PlayStore abonnement"), @@ -1513,14 +1484,14 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Neem contact op met klantenservice als het probleem aanhoudt"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( "Geef alstublieft toestemming"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Log opnieuw in"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Selecteer snelle links om te verwijderen"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Probeer het nog eens"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1535,7 +1506,7 @@ class MessageLookup extends MessageLookupByLibrary { "Gelieve even te wachten voordat u opnieuw probeert"), "pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage( "Een ogenblik geduld, dit zal even duren."), - "posingWithThem": m68, + "posingWithThem": m64, "preparingLogs": MessageLookupByLibrary.simpleMessage("Logboeken voorbereiden..."), "preserveMore": MessageLookupByLibrary.simpleMessage("Meer bewaren"), @@ -1553,7 +1524,7 @@ class MessageLookup extends MessageLookupByLibrary { "proceed": MessageLookupByLibrary.simpleMessage("Verder"), "processed": MessageLookupByLibrary.simpleMessage("Verwerkt"), "processing": MessageLookupByLibrary.simpleMessage("Verwerken"), - "processingImport": m69, + "processingImport": m65, "processingVideos": MessageLookupByLibrary.simpleMessage("Video\'s verwerken"), "publicLinkCreated": @@ -1566,10 +1537,10 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("Meld probleem"), "rateTheApp": MessageLookupByLibrary.simpleMessage("Beoordeel de app"), "rateUs": MessageLookupByLibrary.simpleMessage("Beoordeel ons"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "reassignMe": MessageLookupByLibrary.simpleMessage("\"Ik\" opnieuw toewijzen"), - "reassignedToName": m71, + "reassignedToName": m67, "reassigningLoading": MessageLookupByLibrary.simpleMessage("Opnieuw toewijzen..."), "recover": MessageLookupByLibrary.simpleMessage("Herstellen"), @@ -1580,7 +1551,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Account herstellen"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("Herstel gestart"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Herstelsleutel"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( "Herstelsleutel gekopieerd naar klembord"), @@ -1594,12 +1565,12 @@ class MessageLookup extends MessageLookupByLibrary { "Herstel sleutel geverifieerd"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Je herstelsleutel is de enige manier om je foto\'s te herstellen als je je wachtwoord bent vergeten. Je vindt je herstelsleutel in Instellingen > Account.\n\nVoer hier je herstelsleutel in om te controleren of je hem correct hebt opgeslagen."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("Herstel succesvol!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "Een vertrouwd contact probeert toegang te krijgen tot je account"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "Het huidige apparaat is niet krachtig genoeg om je wachtwoord te verifiëren, dus moeten we de code een keer opnieuw genereren op een manier die met alle apparaten werkt.\n\nLog in met behulp van uw herstelcode en genereer opnieuw uw wachtwoord (je kunt dezelfde indien gewenst opnieuw gebruiken)."), "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage( @@ -1615,7 +1586,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Geef deze code aan je vrienden"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Ze registreren voor een betaald plan"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Referenties"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Verwijzingen zijn momenteel gepauzeerd"), @@ -1647,7 +1618,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Verwijder link"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Deelnemer verwijderen"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Verwijder persoonslabel"), "removePublicLink": @@ -1669,7 +1640,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Bestandsnaam wijzigen"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Abonnement verlengen"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Een fout melden"), "reportBug": MessageLookupByLibrary.simpleMessage("Fout melden"), "resendEmail": @@ -1695,7 +1666,7 @@ class MessageLookup extends MessageLookupByLibrary { "reviewSuggestions": MessageLookupByLibrary.simpleMessage("Suggesties beoordelen"), "right": MessageLookupByLibrary.simpleMessage("Rechts"), - "roadtripWithThem": m78, + "roadtripWithThem": m74, "rotate": MessageLookupByLibrary.simpleMessage("Roteren"), "rotateLeft": MessageLookupByLibrary.simpleMessage("Roteer links"), "rotateRight": MessageLookupByLibrary.simpleMessage("Rechtsom draaien"), @@ -1751,8 +1722,8 @@ class MessageLookup extends MessageLookupByLibrary { "Nodig mensen uit, en je ziet alle foto\'s die door hen worden gedeeld hier"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "Personen worden hier getoond zodra verwerking en synchroniseren voltooid is"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Beveiliging"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( "Bekijk publieke album links in de app"), @@ -1801,9 +1772,9 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeRemovedFromThisPerson": MessageLookupByLibrary.simpleMessage( "Geselecteerde bestanden worden van deze persoon verwijderd, maar niet uit uw bibliotheek verwijderd."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, - "selfiesWithThem": m82, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "selfiesWithThem": m79, "send": MessageLookupByLibrary.simpleMessage("Verzenden"), "sendEmail": MessageLookupByLibrary.simpleMessage("E-mail versturen"), "sendInvite": @@ -1835,16 +1806,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Deel nu een album"), "shareLink": MessageLookupByLibrary.simpleMessage("Link delen"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Deel alleen met de mensen die u wilt"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Download Ente zodat we gemakkelijk foto\'s en video\'s in originele kwaliteit kunnen delen\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Delen met niet-Ente gebruikers"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("Deel jouw eerste album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1855,7 +1826,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nieuwe gedeelde foto\'s"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Ontvang meldingen wanneer iemand een foto toevoegt aan een gedeeld album waar je deel van uitmaakt"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Gedeeld met mij"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("Gedeeld met jou"), @@ -1873,11 +1844,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Log uit op andere apparaten"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Ik ga akkoord met de gebruiksvoorwaarden en privacybeleid"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Het wordt uit alle albums verwijderd."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Overslaan"), "social": MessageLookupByLibrary.simpleMessage("Sociale media"), "someItemsAreInBothEnteAndYourDevice": MessageLookupByLibrary.simpleMessage( @@ -1911,8 +1882,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nieuwste eerst"), "sortOldestFirst": MessageLookupByLibrary.simpleMessage("Oudste eerst"), "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Succes"), - "sportsWithThem": m90, - "spotlightOnThem": m91, + "sportsWithThem": m88, + "spotlightOnThem": m89, "spotlightOnYourself": MessageLookupByLibrary.simpleMessage("Spotlicht op jezelf"), "startAccountRecoveryTitle": @@ -1926,14 +1897,14 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Opslagruimte"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Familie"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Jij"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Opslaglimiet overschreden"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "streamDetails": MessageLookupByLibrary.simpleMessage("Stream details"), "strongStrength": MessageLookupByLibrary.simpleMessage("Sterk"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Abonneer"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Je hebt een actief betaald abonnement nodig om delen mogelijk te maken."), @@ -1951,7 +1922,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Features voorstellen"), "sunrise": MessageLookupByLibrary.simpleMessage("Aan de horizon"), "support": MessageLookupByLibrary.simpleMessage("Ondersteuning"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Synchronisatie gestopt"), "syncing": MessageLookupByLibrary.simpleMessage("Synchroniseren..."), @@ -1963,7 +1934,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Tik om te ontgrendelen"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Tik om te uploaden"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Het lijkt erop dat er iets fout is gegaan. Probeer het later opnieuw. Als de fout zich blijft voordoen, neem dan contact op met ons supportteam."), "terminate": MessageLookupByLibrary.simpleMessage("Beëindigen"), @@ -1987,7 +1958,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Deze bestanden zullen worden verwijderd van uw apparaat."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Ze zullen uit alle albums worden verwijderd."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -2146,7 +2117,6 @@ class MessageLookup extends MessageLookupByLibrary { "viewRecoveryKey": MessageLookupByLibrary.simpleMessage("Toon herstelsleutel"), "viewer": MessageLookupByLibrary.simpleMessage("Kijker"), - "viewersSuccessfullyAdded": m109, "visitWebToManage": MessageLookupByLibrary.simpleMessage( "Bezoek alstublieft web.ente.io om uw abonnement te beheren"), "waitingForVerification": @@ -2159,7 +2129,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "We ondersteunen het bewerken van foto\'s en albums waar je niet de eigenaar van bent nog niet"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Zwak"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Welkom terug!"), "whatsNew": MessageLookupByLibrary.simpleMessage("Nieuw"), @@ -2167,7 +2137,7 @@ class MessageLookup extends MessageLookupByLibrary { "Vertrouwde contacten kunnen helpen bij het herstellen van je data."), "yearShort": MessageLookupByLibrary.simpleMessage("jr"), "yearly": MessageLookupByLibrary.simpleMessage("Jaarlijks"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Ja"), "yesCancel": MessageLookupByLibrary.simpleMessage("Ja, opzeggen"), "yesConvertToViewer": @@ -2181,7 +2151,7 @@ class MessageLookup extends MessageLookupByLibrary { "yesResetPerson": MessageLookupByLibrary.simpleMessage("Ja, reset persoon"), "you": MessageLookupByLibrary.simpleMessage("Jij"), - "youAndThem": m111, + "youAndThem": m112, "youAreOnAFamilyPlan": MessageLookupByLibrary.simpleMessage( "U bent onderdeel van een familie abonnement!"), "youAreOnTheLatestVersion": @@ -2200,7 +2170,7 @@ class MessageLookup extends MessageLookupByLibrary { "Je kunt niet met jezelf delen"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "U heeft geen gearchiveerde bestanden."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("Je account is verwijderd"), "yourMap": MessageLookupByLibrary.simpleMessage("Jouw kaart"), diff --git a/mobile/lib/generated/intl/messages_no.dart b/mobile/lib/generated/intl/messages_no.dart index de147a31f4..ecaf53160b 100644 --- a/mobile/lib/generated/intl/messages_no.dart +++ b/mobile/lib/generated/intl/messages_no.dart @@ -20,43 +20,37 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'no'; - static String m9(title) => "${title} (Me)"; + static String m0(title) => "${title} (Me)"; - static String m10(count) => - "${Intl.plural(count, one: 'Legg til samarbeidspartner', other: 'Legg til samarbeidspartnere')}"; - - static String m11(count) => + static String m2(count) => "${Intl.plural(count, one: 'Legg til element', other: 'Legg til elementene')}"; - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "Tillegget på ${storageAmount} er gyldig til ${endDate}"; - static String m13(count) => - "${Intl.plural(count, zero: 'Legg til seer', one: 'Legg til seer', other: 'Legg til seere')}"; + static String m5(emailOrName) => "Lagt til av ${emailOrName}"; - static String m14(emailOrName) => "Lagt til av ${emailOrName}"; + static String m6(albumName) => "Lagt til ${albumName}"; - static String m15(albumName) => "Lagt til ${albumName}"; + static String m7(name) => "Beundrer ${name}"; - static String m16(name) => "Beundrer ${name}"; - - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'Ingen deltakere', one: '1 deltaker', other: '${count} deltakere')}"; - static String m18(versionValue) => "Versjon: ${versionValue}"; + static String m9(versionValue) => "Versjon: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} ledig"; - static String m113(name) => "Vakker utsikt med ${name}"; + static String m11(name) => "Vakker utsikt med ${name}"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "Vennlist avslutt ditt eksisterende abonnement fra ${paymentProvider} først"; - static String m3(user) => + static String m13(user) => "${user} vil ikke kunne legge til flere bilder til dette albumet\n\nDe vil fortsatt kunne fjerne eksisterende bilder lagt til av dem"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Familien din har gjort krav på ${storageAmountInGb} GB så langt', @@ -64,216 +58,207 @@ class MessageLookup extends MessageLookupByLibrary { 'other': 'Du har gjort krav på ${storageAmountInGb} GB så langt!', })}\n"; - static String m22(albumName) => + static String m15(albumName) => "Samarbeidslenke er opprettet for ${albumName}"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: 'La til 0 samarbeidspartner', one: 'La til 1 samarbeidspartner', other: 'Lagt til ${count} samarbeidspartnere')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "Du er i ferd med å legge til ${email} som en betrodd kontakt. De vil kunne gjenopprette kontoen din hvis du er fraværende i ${numOfDays} dager."; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Vennligst kontakt ${familyAdminEmail} for å administrere abonnementet"; - static String m26(provider) => + static String m19(provider) => "Kontakt oss på support@ente.io for å administrere ditt ${provider} abonnement."; - static String m27(endpoint) => "Koblet til ${endpoint}"; + static String m20(endpoint) => "Koblet til ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Slett ${count} element', other: 'Slett ${count} elementer')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Sletter ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Dette fjerner den offentlige lenken for tilgang til \"${albumName}\"."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Vennligst send en e-post til ${supportEmail} fra din registrerte e-postadresse"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "Du har ryddet bort ${Intl.plural(count, one: '${count} duplikatfil', other: '${count} duplikatfiler')}, som frigjør (${storageSaved}!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} filer, ${formattedSize} hver"; - static String m34(newEmail) => "E-postadressen er endret til ${newEmail}"; + static String m27(newEmail) => "E-postadressen er endret til ${newEmail}"; - static String m35(email) => "${email} har ikke en Ente-konto."; + static String m28(email) => "${email} har ikke en Ente-konto."; - static String m36(email) => + static String m29(email) => "${email} har ikke en Ente-konto.\n\nsender dem en invitasjon til å dele bilder."; - static String m37(name) => "Omfavner ${name}"; + static String m30(name) => "Omfavner ${name}"; - static String m38(text) => "Ekstra bilder funnet for ${text}"; + static String m31(text) => "Ekstra bilder funnet for ${text}"; - static String m39(name) => "Festing med ${name}"; + static String m32(name) => "Festing med ${name}"; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "${Intl.plural(count, one: '1 fil', other: '${formattedNumber} filer')} på denne enheten har blitt sikkerhetskopiert"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "${Intl.plural(count, one: '1 fil', other: '${formattedNumber} filer')} I dette albumet har blitt sikkerhetskopiert"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB hver gang noen melder seg på en betalt plan og bruker koden din"; - static String m42(endDate) => "Prøveperioden varer til ${endDate}"; + static String m36(endDate) => "Prøveperioden varer til ${endDate}"; - static String m43(count) => - "Du kan fortsatt få tilgang til ${Intl.plural(count, one: 'det', other: 'dem')} på Ente så lenge du har et aktivt abonnement"; + static String m38(sizeInMBorGB) => "Frigjør ${sizeInMBorGB}"; - static String m44(sizeInMBorGB) => "Frigjør ${sizeInMBorGB}"; - - static String m45(count, formattedSize) => - "${Intl.plural(count, one: 'Det kan slettes fra enheten for å frigi ${formattedSize}', other: 'De kan slettes fra enheten for å frigjøre ${formattedSize}')}"; - - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Behandler ${currentlyProcessing} / ${totalCount}"; - static String m47(name) => "Tur med ${name}"; + static String m41(name) => "Tur med ${name}"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} element', other: '${count} elementer')}"; - static String m49(name) => "Siste gang med ${name}"; + static String m43(name) => "Siste gang med ${name}"; - static String m50(email) => + static String m44(email) => "${email} har invitert deg til å være en betrodd kontakt"; - static String m51(expiryTime) => "Lenken utløper på ${expiryTime}"; + static String m45(expiryTime) => "Lenken utløper på ${expiryTime}"; - static String m52(email) => "Knytt personen til ${email}"; + static String m46(email) => "Knytt personen til ${email}"; - static String m53(personName, email) => + static String m47(personName, email) => "Dette knytter ${personName} til ${email}"; - static String m5(count, formattedCount) => + static String m48(count, formattedCount) => "${Intl.plural(count, zero: 'ingen minner', one: '${formattedCount} minne', other: '${formattedCount} minner')}"; - static String m54(count) => + static String m49(count) => "${Intl.plural(count, one: 'Flytt elementet', other: 'Flytt elementene')}"; - static String m55(albumName) => "Flyttet til ${albumName}"; + static String m50(albumName) => "Flyttet til ${albumName}"; - static String m56(personName) => "Ingen forslag for ${personName}"; + static String m51(personName) => "Ingen forslag for ${personName}"; - static String m57(name) => "Ikke ${name}?"; + static String m52(name) => "Ikke ${name}?"; - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Vennligst kontakt ${familyAdminEmail} for å endre koden din."; - static String m59(name) => "Fest med ${name}"; + static String m54(name) => "Fest med ${name}"; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Passordstyrke: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Snakk med ${providerName} kundestøtte hvis du ble belastet"; - static String m61(name, age) => "${name} er ${age}!"; + static String m57(name, age) => "${name} er ${age}!"; - static String m62(name, age) => "${name} fyller ${age} snart"; + static String m58(name, age) => "${name} fyller ${age} snart"; - static String m63(count) => + static String m59(count) => "${Intl.plural(count, zero: 'Ingen bilder', one: '1 bilde', other: '${count} bilder')}"; - static String m64(count) => - "${Intl.plural(count, zero: '0 bilder', one: '1 bilde', other: '${count} bilder')}"; - - static String m65(endDate) => + static String m61(endDate) => "Prøveperioden varer til ${endDate}.\nDu kan velge en betalt plan etterpå."; - static String m66(toEmail) => "Vennligst send oss en e-post på ${toEmail}"; + static String m62(toEmail) => "Vennligst send oss en e-post på ${toEmail}"; - static String m67(toEmail) => "Vennligst send loggene til \n${toEmail}"; + static String m63(toEmail) => "Vennligst send loggene til \n${toEmail}"; - static String m68(name) => "Poseringer med ${name}"; + static String m64(name) => "Poseringer med ${name}"; - static String m69(folderName) => "Behandler ${folderName}..."; + static String m65(folderName) => "Behandler ${folderName}..."; - static String m70(storeName) => "Vurder oss på ${storeName}"; + static String m66(storeName) => "Vurder oss på ${storeName}"; - static String m71(name) => + static String m67(name) => "Tildeler deg til ${name}${name}${name}${name}${name}"; - static String m72(days, email) => + static String m68(days, email) => "Du kan få tilgang til kontoen etter ${days} dager. En varsling vil bli sendt til ${email}."; - static String m73(email) => + static String m69(email) => "Du kan nå gjenopprette ${email} sin konto ved å sette et nytt passord."; - static String m74(email) => "${email} prøver å gjenopprette kontoen din."; + static String m70(email) => "${email} prøver å gjenopprette kontoen din."; - static String m75(storageInGB) => + static String m71(storageInGB) => "3. Begge dere får ${storageInGB} GB* gratis"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} vil bli fjernet fra dette delte albumet\n\nAlle bilder lagt til av dem vil også bli fjernet fra albumet"; - static String m77(endDate) => "Abonnement fornyes på ${endDate}"; + static String m73(endDate) => "Abonnement fornyes på ${endDate}"; - static String m78(name) => "Biltur med ${name}"; + static String m74(name) => "Biltur med ${name}"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: '${count} resultat funnet', other: '${count} resultater funnet')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "Uoverensstemmelse i seksjonslengde: ${snapshotLength} != ${searchLength}"; - static String m6(count) => "${count} valgt"; + static String m77(count) => "${count} valgt"; - static String m81(count, yourCount) => "${count} valgt (${yourCount} dine)"; + static String m78(count, yourCount) => "${count} valgt (${yourCount} dine)"; - static String m82(name) => "Selfier med ${name}"; + static String m79(name) => "Selfier med ${name}"; - static String m83(verificationID) => + static String m80(verificationID) => "Her er min verifiserings-ID: ${verificationID} for ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "Hei, kan du bekrefte at dette er din ente.io verifiserings-ID: ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Gi vervekode: ${referralCode} \n\nBruk den i Innstillinger → General → Verving for å få ${referralStorageInGB} GB gratis etter at du har registrert deg for en betalt plan\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Del med bestemte personer', one: 'Delt med 1 person', other: 'Delt med ${numberOfPeople} personer')}"; - static String m86(emailIDs) => "Delt med ${emailIDs}"; + static String m84(emailIDs) => "Delt med ${emailIDs}"; - static String m87(fileType) => + static String m85(fileType) => "Denne ${fileType} vil bli slettet fra enheten din."; - static String m88(fileType) => + static String m86(fileType) => "Denne ${fileType} er både i Ente og på enheten din."; - static String m89(fileType) => "Denne ${fileType} vil bli slettet fra Ente."; + static String m87(fileType) => "Denne ${fileType} vil bli slettet fra Ente."; - static String m90(name) => "Sport med ${name}"; + static String m88(name) => "Sport med ${name}"; - static String m91(name) => "Fremhev ${name}"; + static String m89(name) => "Fremhev ${name}"; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} av ${totalAmount} ${totalStorageUnit} brukt"; - static String m93(id) => + static String m92(id) => "Din ${id} er allerede koblet til en annen Ente-konto.\nHvis du ønsker å bruke din ${id} med denne kontoen, vennligst kontakt vår brukerstøtte\'\'"; - static String m94(endDate) => + static String m93(endDate) => "Abonnementet ditt blir avsluttet den ${endDate}"; - static String m95(completed, total) => "${completed}/${total} minner bevart"; + static String m94(completed, total) => "${completed}/${total} minner bevart"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Trykk for å laste opp, opplasting er ignorert nå på grunn av ${ignoreReason}"; - static String m8(storageAmountInGB) => "De får også ${storageAmountInGB} GB"; + static String m96(storageAmountInGB) => "De får også ${storageAmountInGB} GB"; static String m97(email) => "Dette er ${email} sin verifiserings-ID"; @@ -304,18 +289,15 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "Verifiser ${email}"; - static String m109(count) => - "${Intl.plural(count, zero: 'La til 0 seere', one: 'La til 1 seer', other: 'La til ${count} seere')}"; - - static String m2(email) => + static String m110(email) => "Vi har sendt en e-post til ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: '${count} år siden', other: '${count} år siden')}"; - static String m111(name) => "Du og ${name}"; + static String m112(name) => "Du og ${name}"; - static String m112(storageSaved) => "Du har frigjort ${storageSaved}!"; + static String m113(storageSaved) => "Du har frigjort ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -327,7 +309,7 @@ class MessageLookup extends MessageLookupByLibrary { "account": MessageLookupByLibrary.simpleMessage("Konto"), "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage( "Kontoen er allerede konfigurert."), - "accountOwnerPersonAppbarTitle": m9, + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("Velkommen tilbake!"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( @@ -339,11 +321,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Legg til ny e-post"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Legg til samarbeidspartner"), - "addCollaborators": m10, "addFiles": MessageLookupByLibrary.simpleMessage("Legg til filer"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Legg til fra enhet"), - "addItem": m11, + "addItem": m2, "addLocation": MessageLookupByLibrary.simpleMessage("Legg til sted"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Legg til"), "addMore": MessageLookupByLibrary.simpleMessage("Legg til flere"), @@ -355,7 +336,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Legg til ny person"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage("Detaljer om tillegg"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Tillegg"), "addPhotos": MessageLookupByLibrary.simpleMessage("Legg til bilder"), "addSelected": MessageLookupByLibrary.simpleMessage("Legg til valgte"), @@ -366,15 +347,14 @@ class MessageLookup extends MessageLookupByLibrary { "addTrustedContact": MessageLookupByLibrary.simpleMessage("Legg til betrodd kontakt"), "addViewer": MessageLookupByLibrary.simpleMessage("Legg til seer"), - "addViewers": m13, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage("Legg til bildene dine nå"), "addedAs": MessageLookupByLibrary.simpleMessage("Lagt til som"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("Legger til i favoritter..."), - "admiringThem": m16, + "admiringThem": m7, "advanced": MessageLookupByLibrary.simpleMessage("Avansert"), "advancedSettings": MessageLookupByLibrary.simpleMessage("Avansert"), "after1Day": MessageLookupByLibrary.simpleMessage("Etter 1 dag"), @@ -383,7 +363,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("Etter 1 uke"), "after1Year": MessageLookupByLibrary.simpleMessage("Etter 1 år"), "albumOwner": MessageLookupByLibrary.simpleMessage("Eier"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Albumtittel"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Album oppdatert"), "albums": MessageLookupByLibrary.simpleMessage("Album"), @@ -434,7 +414,7 @@ class MessageLookup extends MessageLookupByLibrary { "appLock": MessageLookupByLibrary.simpleMessage("Applås"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Velg mellom enhetens standard låseskjerm og en egendefinert låseskjerm med en PIN-kode eller passord."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Anvend"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Bruk kode"), @@ -517,10 +497,10 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "Automatisk par fungerer kun med enheter som støtter Chromecast."), "available": MessageLookupByLibrary.simpleMessage("Tilgjengelig"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("Sikkerhetskopierte mapper"), - "backgroundWithThem": m113, + "backgroundWithThem": m11, "backup": MessageLookupByLibrary.simpleMessage("Sikkerhetskopi"), "backupFailed": MessageLookupByLibrary.simpleMessage( "Sikkerhetskopiering mislyktes"), @@ -577,10 +557,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Avbryt gjenoppretting"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "Er du sikker på at du vil avbryte gjenoppretting?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Avslutt abonnement"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage("Kan ikke slette delte filer"), "castAlbum": MessageLookupByLibrary.simpleMessage("Cast album"), @@ -617,7 +597,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Få gratis lagring"), "claimMore": MessageLookupByLibrary.simpleMessage("Løs inn mer!"), "claimed": MessageLookupByLibrary.simpleMessage("Løst inn"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("Tøm ukategorisert"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -646,13 +626,13 @@ class MessageLookup extends MessageLookupByLibrary { "Opprett en lenke slik at folk kan legge til og se bilder i det delte albumet ditt uten å trenge Ente-appen eller en konto. Perfekt for å samle bilder fra arrangementer."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Samarbeidslenke"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Samarbeidspartner"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "Samarbeidspartnere kan legge til bilder og videoer i det delte albumet."), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("Utforming"), "collageSaved": MessageLookupByLibrary.simpleMessage("Kollasje lagret i galleriet"), @@ -669,7 +649,7 @@ class MessageLookup extends MessageLookupByLibrary { "Er du sikker på at du vil deaktivere tofaktorautentisering?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage("Bekreft sletting av konto"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Ja, jeg ønsker å slette denne kontoen og all dataen dens permanent."), "confirmPassword": @@ -682,10 +662,10 @@ class MessageLookup extends MessageLookupByLibrary { "Bekreft din gjenopprettingsnøkkel"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Koble til enheten"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("Kontakt kundestøtte"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Kontakter"), "contents": MessageLookupByLibrary.simpleMessage("Innhold"), "continueLabel": MessageLookupByLibrary.simpleMessage("Fortsett"), @@ -731,7 +711,7 @@ class MessageLookup extends MessageLookupByLibrary { "currentlyRunning": MessageLookupByLibrary.simpleMessage("Kjører for øyeblikket"), "custom": MessageLookupByLibrary.simpleMessage("Egendefinert"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Mørk"), "dayToday": MessageLookupByLibrary.simpleMessage("I dag"), "dayYesterday": MessageLookupByLibrary.simpleMessage("I går"), @@ -768,10 +748,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Slett fra enhet"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Slett fra Ente"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Slett sted"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Slett bilder"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "Det mangler en hovedfunksjon jeg trenger"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -810,7 +790,7 @@ class MessageLookup extends MessageLookupByLibrary { "Seere kan fremdeles ta skjermbilder eller lagre en kopi av bildene dine ved bruk av eksterne verktøy"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Vær oppmerksom på"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage("Deaktiver tofaktor"), "disablingTwofactorAuthentication": @@ -855,9 +835,9 @@ class MessageLookup extends MessageLookupByLibrary { "downloadFailed": MessageLookupByLibrary.simpleMessage("Nedlasting mislyktes"), "downloading": MessageLookupByLibrary.simpleMessage("Laster ned..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Rediger"), "editLocation": MessageLookupByLibrary.simpleMessage("Rediger plassering"), @@ -873,16 +853,16 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("E-post"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage( "E-postadressen er allerede registrert."), - "emailChangedTo": m34, - "emailDoesNotHaveEnteAccount": m35, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage( "E-postadressen er ikke registrert."), "emailVerificationToggle": MessageLookupByLibrary.simpleMessage("E-postbekreftelse"), "emailYourLogs": MessageLookupByLibrary.simpleMessage("Send loggene dine på e-post"), - "embracingThem": m37, + "embracingThem": m30, "emergencyContacts": MessageLookupByLibrary.simpleMessage("Nødkontakter"), "empty": MessageLookupByLibrary.simpleMessage("Tom"), @@ -958,7 +938,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Eksporter dine data"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage("Ekstra bilder funnet"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Ansikt ikke gruppert ennå, vennligst kom tilbake senere"), "faceRecognition": @@ -997,7 +977,7 @@ class MessageLookup extends MessageLookupByLibrary { "faq": MessageLookupByLibrary.simpleMessage("Ofte stilte spørsmål"), "faqs": MessageLookupByLibrary.simpleMessage("Ofte stilte spørsmål"), "favorite": MessageLookupByLibrary.simpleMessage("Favoritt"), - "feastingWithThem": m39, + "feastingWithThem": m32, "feedback": MessageLookupByLibrary.simpleMessage("Tilbakemelding"), "file": MessageLookupByLibrary.simpleMessage("Fil"), "fileFailedToSaveToGallery": MessageLookupByLibrary.simpleMessage( @@ -1011,8 +991,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("Filtyper"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("Filtyper og navn"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("Filene er slettet"), "filesSavedToGallery": @@ -1029,28 +1009,26 @@ class MessageLookup extends MessageLookupByLibrary { "foundFaces": MessageLookupByLibrary.simpleMessage("Fant ansikter"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage( "Gratis lagringplass aktivert"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage( "Gratis lagringsplass som kan brukes"), "freeTrial": MessageLookupByLibrary.simpleMessage("Gratis prøveversjon"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("Frigjør plass på enheten"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Spar plass på enheten ved å fjerne filer som allerede er sikkerhetskopiert."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Frigjør lagringsplass"), - "freeUpSpaceSaving": m45, "gallery": MessageLookupByLibrary.simpleMessage("Galleri"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "Opptil 1000 minner vist i galleriet"), "general": MessageLookupByLibrary.simpleMessage("Generelt"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Genererer krypteringsnøkler..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Gå til innstillinger"), "googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"), @@ -1079,7 +1057,7 @@ class MessageLookup extends MessageLookupByLibrary { "hideSharedItemsFromHomeGallery": MessageLookupByLibrary.simpleMessage( "Skjul delte elementer fra hjemgalleriet"), "hiding": MessageLookupByLibrary.simpleMessage("Skjuler..."), - "hikingWithThem": m47, + "hikingWithThem": m41, "hostedAtOsmFrance": MessageLookupByLibrary.simpleMessage("Hostet på OSM France"), "howItWorks": @@ -1136,7 +1114,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Det ser ut til at noe gikk galt. Prøv på nytt etter en stund. Hvis feilen vedvarer, kan du kontakte kundestøtte."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Elementer viser gjenværende dager før de slettes for godt"), @@ -1157,7 +1135,7 @@ class MessageLookup extends MessageLookupByLibrary { "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( "Vær vennlig og hjelp oss med denne informasjonen"), "language": MessageLookupByLibrary.simpleMessage("Språk"), - "lastTimeWithThem": m49, + "lastTimeWithThem": m43, "lastUpdated": MessageLookupByLibrary.simpleMessage("Sist oppdatert"), "lastYearsTrip": MessageLookupByLibrary.simpleMessage("Fjorårets tur"), "leave": MessageLookupByLibrary.simpleMessage("Forlat"), @@ -1168,7 +1146,7 @@ class MessageLookup extends MessageLookupByLibrary { "left": MessageLookupByLibrary.simpleMessage("Venstre"), "legacy": MessageLookupByLibrary.simpleMessage("Arv"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Eldre kontoer"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "Arv-funksjonen lar betrodde kontakter få tilgang til kontoen din i ditt fravær."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1184,7 +1162,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("for raskere deling"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Aktivert"), "linkExpired": MessageLookupByLibrary.simpleMessage("Utløpt"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Lenkeutløp"), "linkHasExpired": MessageLookupByLibrary.simpleMessage("Lenken har utløpt"), @@ -1192,8 +1170,8 @@ class MessageLookup extends MessageLookupByLibrary { "linkPerson": MessageLookupByLibrary.simpleMessage("Knytt til person"), "linkPersonCaption": MessageLookupByLibrary.simpleMessage("for bedre delingsopplevelse"), - "linkPersonToEmail": m52, - "linkPersonToEmailConfirmation": m53, + "linkPersonToEmail": m46, + "linkPersonToEmailConfirmation": m47, "livePhotos": MessageLookupByLibrary.simpleMessage("Live-bilder"), "loadMessage1": MessageLookupByLibrary.simpleMessage( "Du kan dele abonnementet med familien din"), @@ -1280,7 +1258,7 @@ class MessageLookup extends MessageLookupByLibrary { "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), "me": MessageLookupByLibrary.simpleMessage("Meg"), - "memoryCount": m5, + "memoryCount": m48, "merchandise": MessageLookupByLibrary.simpleMessage("Varer"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Slå sammen med eksisterende"), @@ -1312,13 +1290,13 @@ class MessageLookup extends MessageLookupByLibrary { "mostRecent": MessageLookupByLibrary.simpleMessage("Nyeste"), "mostRelevant": MessageLookupByLibrary.simpleMessage("Mest relevant"), "mountains": MessageLookupByLibrary.simpleMessage("Over åsene"), - "moveItem": m54, + "moveItem": m49, "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage( "Flytt valgte bilder til en dato"), "moveToAlbum": MessageLookupByLibrary.simpleMessage("Flytt til album"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Flytt til skjult album"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("Flyttet til papirkurven"), "movingFilesToAlbum": @@ -1372,10 +1350,10 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Ingen resultater"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Ingen resultater funnet"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage("Ingen systemlås funnet"), - "notPersonLabel": m57, + "notPersonLabel": m52, "notThisPerson": MessageLookupByLibrary.simpleMessage("Ikke denne personen?"), "nothingSharedWithYouYet": @@ -1388,7 +1366,7 @@ class MessageLookup extends MessageLookupByLibrary { "onEnte": MessageLookupByLibrary.simpleMessage( "På ente"), "onTheRoad": MessageLookupByLibrary.simpleMessage("På veien igjen"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Bare de"), "oops": MessageLookupByLibrary.simpleMessage("Oisann"), "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( @@ -1419,7 +1397,7 @@ class MessageLookup extends MessageLookupByLibrary { "pairingComplete": MessageLookupByLibrary.simpleMessage("Sammenkobling fullført"), "panorama": MessageLookupByLibrary.simpleMessage("Panora"), - "partyWithThem": m59, + "partyWithThem": m54, "passKeyPendingVerification": MessageLookupByLibrary.simpleMessage("Bekreftelse venter fortsatt"), "passkey": MessageLookupByLibrary.simpleMessage("Tilgangsnøkkel"), @@ -1429,7 +1407,7 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage("Passordet ble endret"), "passwordLock": MessageLookupByLibrary.simpleMessage("Passordlås"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "Passordstyrken beregnes basert på passordets lengde, brukte tegn, og om passordet finnes blant de 10 000 mest brukte passordene"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1440,7 +1418,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Betaling feilet"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Betalingen din mislyktes. Kontakt kundestøtte og vi vil hjelpe deg!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Ventende elementer"), "pendingSync": @@ -1454,21 +1432,20 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Slette for godt"), "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage("Slett permanent fra enhet?"), - "personIsAge": m61, + "personIsAge": m57, "personName": MessageLookupByLibrary.simpleMessage("Personnavn"), - "personTurningAge": m62, + "personTurningAge": m58, "pets": MessageLookupByLibrary.simpleMessage("Pelsvenner"), "photoDescriptions": MessageLookupByLibrary.simpleMessage("Bildebeskrivelser"), "photoGridSize": MessageLookupByLibrary.simpleMessage("Bilderutenettstørrelse"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("bilde"), - "photocountPhotos": m63, + "photocountPhotos": m59, "photos": MessageLookupByLibrary.simpleMessage("Bilder"), "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Bilder lagt til av deg vil bli fjernet fra albumet"), - "photosCount": m64, "photosKeepRelativeTimeDifference": MessageLookupByLibrary.simpleMessage( "Bilder holder relativ tidsforskjell"), @@ -1480,7 +1457,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Spill av album på TV"), "playOriginal": MessageLookupByLibrary.simpleMessage("Spill av original"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playStream": MessageLookupByLibrary.simpleMessage("Spill av strøm"), "playstoreSubscription": MessageLookupByLibrary.simpleMessage("PlayStore abonnement"), @@ -1493,14 +1470,14 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Vennligst kontakt kundestøtte hvis problemet vedvarer"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("Vennligst gi tillatelser"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Vennligst logg inn igjen"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage("Velg hurtiglenker å fjerne"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Vennligst prøv igjen"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1514,7 +1491,7 @@ class MessageLookup extends MessageLookupByLibrary { "Vennligst vent en stund før du prøver på nytt"), "pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage( "Vennligst vent, dette vil ta litt tid."), - "posingWithThem": m68, + "posingWithThem": m64, "preparingLogs": MessageLookupByLibrary.simpleMessage("Forbereder logger..."), "preserveMore": MessageLookupByLibrary.simpleMessage("Behold mer"), @@ -1532,7 +1509,7 @@ class MessageLookup extends MessageLookupByLibrary { "proceed": MessageLookupByLibrary.simpleMessage("Fortsett"), "processed": MessageLookupByLibrary.simpleMessage("Behandlet"), "processing": MessageLookupByLibrary.simpleMessage("Behandler"), - "processingImport": m69, + "processingImport": m65, "processingVideos": MessageLookupByLibrary.simpleMessage("Behandler videoer"), "publicLinkCreated": @@ -1545,9 +1522,9 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("Opprett sak"), "rateTheApp": MessageLookupByLibrary.simpleMessage("Vurder appen"), "rateUs": MessageLookupByLibrary.simpleMessage("Vurder oss"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "reassignMe": MessageLookupByLibrary.simpleMessage("Tildel \"Meg\""), - "reassignedToName": m71, + "reassignedToName": m67, "reassigningLoading": MessageLookupByLibrary.simpleMessage("Tildeler..."), "recover": MessageLookupByLibrary.simpleMessage("Gjenopprett"), @@ -1558,7 +1535,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Gjenopprett konto"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("Gjenoppretting startet"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Gjenopprettingsnøkkel"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( @@ -1573,12 +1550,12 @@ class MessageLookup extends MessageLookupByLibrary { "Gjenopprettingsnøkkel bekreftet"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Gjenopprettingsnøkkelen er den eneste måten å gjenopprette bildene dine på hvis du glemmer passordet ditt. Du finner gjenopprettingsnøkkelen din i Innstillinger > Konto.\n\nVennligst skriv inn gjenopprettingsnøkkelen din her for å bekrefte at du har lagret den riktig."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage( "Gjenopprettingen var vellykket!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "En betrodd kontakt prøver å få tilgang til kontoen din"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "Den gjeldende enheten er ikke kraftig nok til å verifisere passordet ditt, men vi kan regenerere på en måte som fungerer på alle enheter.\n\nVennligst logg inn med gjenopprettingsnøkkelen og regenerer passordet (du kan bruke den samme igjen om du vil)."), "recreatePasswordTitle": @@ -1594,7 +1571,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Gi denne koden til vennene dine"), "referralStep2": MessageLookupByLibrary.simpleMessage( "De registrerer seg for en betalt plan"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Vervinger"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Vervinger er for øyeblikket satt på pause"), @@ -1625,7 +1602,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Fjern lenke"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Fjern deltaker"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Fjern etikett for person"), "removePublicLink": @@ -1646,7 +1623,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Gi nytt filnavn"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Forny abonnement"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Rapporter en feil"), "reportBug": MessageLookupByLibrary.simpleMessage("Rapporter feil"), "resendEmail": @@ -1672,7 +1649,7 @@ class MessageLookup extends MessageLookupByLibrary { "reviewSuggestions": MessageLookupByLibrary.simpleMessage("Gjennomgå forslag"), "right": MessageLookupByLibrary.simpleMessage("Høyre"), - "roadtripWithThem": m78, + "roadtripWithThem": m74, "rotate": MessageLookupByLibrary.simpleMessage("Roter"), "rotateLeft": MessageLookupByLibrary.simpleMessage("Roter mot venstre"), "rotateRight": MessageLookupByLibrary.simpleMessage("Roter mot høyre"), @@ -1727,8 +1704,8 @@ class MessageLookup extends MessageLookupByLibrary { "Inviter folk, og du vil se alle bilder som deles av dem her"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "Folk vil vises her når behandling og synkronisering er fullført"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Sikkerhet"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( "Se offentlige albumlenker i appen"), @@ -1776,9 +1753,9 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeRemovedFromThisPerson": MessageLookupByLibrary.simpleMessage( "Valgte elementer fjernes fra denne personen, men blir ikke slettet fra biblioteket ditt."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, - "selfiesWithThem": m82, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "selfiesWithThem": m79, "send": MessageLookupByLibrary.simpleMessage("Send"), "sendEmail": MessageLookupByLibrary.simpleMessage("Send e-post"), "sendInvite": MessageLookupByLibrary.simpleMessage("Send invitasjon"), @@ -1808,16 +1785,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Del et album nå"), "shareLink": MessageLookupByLibrary.simpleMessage("Del link"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage("Del bare med de du vil"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Last ned Ente slik at vi lett kan dele bilder og videoer av original kvalitet\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Del med brukere som ikke har Ente"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("Del ditt første album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1828,7 +1805,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nye delte bilder"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Motta varsler når noen legger til et bilde i et delt album som du er en del av"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Delt med meg"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("Delt med deg"), "sharing": MessageLookupByLibrary.simpleMessage("Deler..."), @@ -1844,11 +1821,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Logg ut andre enheter"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Jeg godtar bruksvilkårene og personvernreglene"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Den vil bli slettet fra alle album."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Hopp over"), "social": MessageLookupByLibrary.simpleMessage("Sosial"), "someItemsAreInBothEnteAndYourDevice": @@ -1882,8 +1859,8 @@ class MessageLookup extends MessageLookupByLibrary { "sortNewestFirst": MessageLookupByLibrary.simpleMessage("Nyeste først"), "sortOldestFirst": MessageLookupByLibrary.simpleMessage("Eldste først"), "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Suksess"), - "sportsWithThem": m90, - "spotlightOnThem": m91, + "sportsWithThem": m88, + "spotlightOnThem": m89, "spotlightOnYourself": MessageLookupByLibrary.simpleMessage("Fremhev deg selv"), "startAccountRecoveryTitle": @@ -1898,15 +1875,15 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Lagring"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Familie"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Deg"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Lagringsplassen er full"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "streamDetails": MessageLookupByLibrary.simpleMessage("Strømmedetaljer"), "strongStrength": MessageLookupByLibrary.simpleMessage("Sterkt"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Abonner"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Du trenger et aktivt betalt abonnement for å aktivere deling."), @@ -1924,7 +1901,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Foreslå funksjoner"), "sunrise": MessageLookupByLibrary.simpleMessage("På horisonten"), "support": MessageLookupByLibrary.simpleMessage("Brukerstøtte"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Synkronisering stoppet"), "syncing": MessageLookupByLibrary.simpleMessage("Synkroniserer..."), @@ -1937,7 +1914,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Trykk for å låse opp"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Trykk for å laste opp"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Det ser ut som noe gikk galt. Prøv på nytt etter en stund. Hvis feilen vedvarer, kontakt kundestøtte."), "terminate": MessageLookupByLibrary.simpleMessage("Avslutte"), @@ -1960,7 +1937,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Disse elementene vil bli slettet fra enheten din."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "De vil bli slettet fra alle album."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -2116,7 +2093,6 @@ class MessageLookup extends MessageLookupByLibrary { "viewRecoveryKey": MessageLookupByLibrary.simpleMessage("Vis gjenopprettingsnøkkel"), "viewer": MessageLookupByLibrary.simpleMessage("Seer"), - "viewersSuccessfullyAdded": m109, "visitWebToManage": MessageLookupByLibrary.simpleMessage( "Vennligst besøk web.ente.io for å administrere abonnementet"), "waitingForVerification": @@ -2129,7 +2105,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Vi støtter ikke redigering av bilder og album som du ikke eier ennå"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Svakt"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Velkommen tilbake!"), @@ -2138,7 +2114,7 @@ class MessageLookup extends MessageLookupByLibrary { "Betrodd kontakt kan hjelpe til med å gjenopprette dine data."), "yearShort": MessageLookupByLibrary.simpleMessage("år"), "yearly": MessageLookupByLibrary.simpleMessage("Årlig"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Ja"), "yesCancel": MessageLookupByLibrary.simpleMessage("Ja, avslutt"), "yesConvertToViewer": @@ -2152,7 +2128,7 @@ class MessageLookup extends MessageLookupByLibrary { "yesResetPerson": MessageLookupByLibrary.simpleMessage("Ja, tilbakestill person"), "you": MessageLookupByLibrary.simpleMessage("Deg"), - "youAndThem": m111, + "youAndThem": m112, "youAreOnAFamilyPlan": MessageLookupByLibrary.simpleMessage( "Du har et familieabonnement!"), "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage( @@ -2171,7 +2147,7 @@ class MessageLookup extends MessageLookupByLibrary { "Du kan ikke dele med deg selv"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "Du har ingen arkiverte elementer."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage( "Brukeren din har blitt slettet"), "yourMap": MessageLookupByLibrary.simpleMessage("Ditt kart"), diff --git a/mobile/lib/generated/intl/messages_or.dart b/mobile/lib/generated/intl/messages_or.dart new file mode 100644 index 0000000000..2bbc1c314c --- /dev/null +++ b/mobile/lib/generated/intl/messages_or.dart @@ -0,0 +1,25 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a or locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes +// ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'or'; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => {}; +} diff --git a/mobile/lib/generated/intl/messages_pl.dart b/mobile/lib/generated/intl/messages_pl.dart index 57763c150b..1832388d88 100644 --- a/mobile/lib/generated/intl/messages_pl.dart +++ b/mobile/lib/generated/intl/messages_pl.dart @@ -20,37 +20,28 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'pl'; - static String m10(count) => - "${Intl.plural(count, one: 'Dodaj współuczestnika', few: 'Dodaj współuczestników', many: 'Dodaj współuczestników', other: 'Dodaj współuczestników')}"; - - static String m11(count) => - "${Intl.plural(count, one: 'Dodaj element', few: 'Dodaj elementy', other: 'Dodaj elementów')}"; - - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "Twój dodatek ${storageAmount} jest ważny do ${endDate}"; - static String m13(count) => - "${Intl.plural(count, one: 'Dodaj widza', few: 'Dodaj widzów', many: 'Dodaj widzów', other: 'Dodaj widzów')}"; + static String m5(emailOrName) => "Dodane przez ${emailOrName}"; - static String m14(emailOrName) => "Dodane przez ${emailOrName}"; + static String m6(albumName) => "Pomyślnie dodano do ${albumName}"; - static String m15(albumName) => "Pomyślnie dodano do ${albumName}"; - - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'Brak Uczestników', one: '1 Uczestnik', other: '${count} Uczestników')}"; - static String m18(versionValue) => "Wersja: ${versionValue}"; + static String m9(versionValue) => "Wersja: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} wolne"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "Prosimy najpierw anulować istniejącą subskrypcję z ${paymentProvider}"; - static String m3(user) => + static String m13(user) => "${user} nie będzie mógł dodać więcej zdjęć do tego albumu\n\nJednak nadal będą mogli usunąć istniejące zdjęcia, które dodali"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Twoja rodzina odebrała ${storageAmountInGb} GB do tej pory', @@ -58,181 +49,166 @@ class MessageLookup extends MessageLookupByLibrary { 'other': 'Odebrałeś ${storageAmountInGb} GB do tej pory!', })}"; - static String m22(albumName) => "Utworzono link współpracy dla ${albumName}"; + static String m15(albumName) => "Utworzono link współpracy dla ${albumName}"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: 'Dodano 0 współuczestników', one: 'Dodano 1 współuczestnika', other: 'Dodano ${count} współuczestników')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "Zamierzasz dodać ${email} jako zaufany kontakt. Będą mogli odzyskać Twoje konto, jeśli jesteś nieobecny przez ${numOfDays} dni."; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Prosimy skontaktować się z ${familyAdminEmail}, by zarzadząć swoją subskrypcją"; - static String m26(provider) => + static String m19(provider) => "Skontaktuj się z nami pod adresem support@ente.io, aby zarządzać subskrypcją ${provider}."; - static String m27(endpoint) => "Połączono z ${endpoint}"; + static String m20(endpoint) => "Połączono z ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Usuń ${count} element', few: 'Usuń ${count} elementy', many: 'Usuń ${count} elementów', other: 'Usuń ${count} elementu')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Usuwanie ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Spowoduje to usunięcie publicznego linku dostępu do \"${albumName}\"."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Wyślij wiadomość e-mail na ${supportEmail} z zarejestrowanego adresu e-mail"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "Wyczyszczono ${Intl.plural(count, one: '${count} zdduplikowany plik', other: '${count} zdduplikowane pliki')}, oszczędzając (${storageSaved}!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} plików, każdy po ${formattedSize}"; - static String m34(newEmail) => "Adres e-mail został zmieniony na ${newEmail}"; + static String m27(newEmail) => "Adres e-mail został zmieniony na ${newEmail}"; - static String m36(email) => + static String m29(email) => "${email} nie posiada konta Ente.\n\nWyślij im zaproszenie do udostępniania zdjęć."; - static String m38(text) => "Znaleziono dodatkowe zdjęcia dla ${text}"; + static String m31(text) => "Znaleziono dodatkowe zdjęcia dla ${text}"; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "${Intl.plural(count, one: '1 plikowi', other: '${formattedNumber} plikom')} na tym urządzeniu została bezpiecznie utworzona kopia zapasowa"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "${Intl.plural(count, one: '1 plikowi', other: '${formattedNumber} plikom')} w tym albumie została bezpiecznie utworzona kopia zapasowa"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB za każdym razem, gdy ktoś zarejestruje się w płatnym planie i użyje twojego kodu"; - static String m42(endDate) => "Okres próbny ważny do ${endDate}"; + static String m36(endDate) => "Okres próbny ważny do ${endDate}"; - static String m43(count) => - "Nadal możesz mieć dostęp ${Intl.plural(count, one: 'do tego', other: 'do tych')} na Ente tak długo, jak masz aktywną subskrypcję"; + static String m38(sizeInMBorGB) => "Zwolnij ${sizeInMBorGB}"; - static String m44(sizeInMBorGB) => "Zwolnij ${sizeInMBorGB}"; - - static String m45(count, formattedSize) => - "${Intl.plural(count, one: 'Można to usunąć z urządzenia, aby zwolnić ${formattedSize}', other: 'Można je usunąć z urządzenia, aby zwolnić ${formattedSize}')}"; - - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Przetwarzanie ${currentlyProcessing} / ${totalCount}"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} element', few: '${count} elementy', many: '${count} elementów', other: '${count} elementu')}"; - static String m50(email) => + static String m44(email) => "${email} zaprosił Cię do zostania zaufanym kontaktem"; - static String m51(expiryTime) => "Link wygaśnie ${expiryTime}"; + static String m45(expiryTime) => "Link wygaśnie ${expiryTime}"; - static String m5(count, formattedCount) => - "${Intl.plural(count, zero: 'brak wspomnień', one: '${formattedCount} wspomnienie', few: '${formattedCount} wspomnienia', other: '${formattedCount} wspomnień')}"; + static String m50(albumName) => "Pomyślnie przeniesiono do ${albumName}"; - static String m54(count) => - "${Intl.plural(count, one: 'Przenieś element', few: 'Przenieś elementy', other: 'Przenieś elementów')}"; + static String m51(personName) => "Brak sugestii dla ${personName}"; - static String m55(albumName) => "Pomyślnie przeniesiono do ${albumName}"; + static String m52(name) => "Nie ${name}?"; - static String m56(personName) => "Brak sugestii dla ${personName}"; - - static String m57(name) => "Nie ${name}?"; - - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Skontaktuj się z ${familyAdminEmail}, aby zmienić swój kod."; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Siła hasła: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Porozmawiaj ze wsparciem ${providerName} jeśli zostałeś obciążony"; - static String m64(count) => - "${Intl.plural(count, zero: '0 zdjęć', one: '1 zdjęcie', few: '${count} zdjęcia', other: '${count} zdjęć')}"; - - static String m65(endDate) => + static String m61(endDate) => "Bezpłatny okres próbny ważny do ${endDate}.\nNastępnie możesz wybrać płatny plan."; - static String m66(toEmail) => + static String m62(toEmail) => "Prosimy o kontakt mailowy pod adresem ${toEmail}"; - static String m67(toEmail) => "Prosimy wysłać logi do ${toEmail}"; + static String m63(toEmail) => "Prosimy wysłać logi do ${toEmail}"; - static String m69(folderName) => "Przetwarzanie ${folderName}..."; + static String m65(folderName) => "Przetwarzanie ${folderName}..."; - static String m70(storeName) => "Oceń nas na ${storeName}"; + static String m66(storeName) => "Oceń nas na ${storeName}"; - static String m72(days, email) => + static String m68(days, email) => "Możesz uzyskać dostęp do konta po dniu ${days} dni. Powiadomienie zostanie wysłane na ${email}."; - static String m73(email) => + static String m69(email) => "Możesz teraz odzyskać konto ${email} poprzez ustawienie nowego hasła."; - static String m74(email) => "${email} próbuje odzyskać Twoje konto."; + static String m70(email) => "${email} próbuje odzyskać Twoje konto."; - static String m75(storageInGB) => + static String m71(storageInGB) => "3. Oboje otrzymujecie ${storageInGB} GB* za darmo"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} zostanie usunięty z tego udostępnionego albumu\n\nWszelkie dodane przez nich zdjęcia zostaną usunięte z albumu"; - static String m77(endDate) => "Subskrypcja odnowi się ${endDate}"; + static String m73(endDate) => "Subskrypcja odnowi się ${endDate}"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: 'Znaleziono ${count} wynik', few: 'Znaleziono ${count} wyniki', other: 'Znaleziono ${count} wyników')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "Niezgodność długości sekcji: ${snapshotLength} != ${searchLength}"; - static String m6(count) => "Wybrano ${count}"; + static String m77(count) => "Wybrano ${count}"; - static String m81(count, yourCount) => + static String m78(count, yourCount) => "Wybrano ${count} (twoich ${yourCount})"; - static String m83(verificationID) => + static String m80(verificationID) => "Oto mój identyfikator weryfikacyjny: ${verificationID} dla ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "Hej, czy możesz potwierdzić, że to jest Twój identyfikator weryfikacyjny ente.io: ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Kod polecający: ${referralCode} \n\nZastosuj go w: Ustawienia → Ogólne → Polecanie, aby otrzymać ${referralStorageInGB} GB za darmo po zarejestrowaniu się w płatnym planie\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Udostępnione określonym osobom', one: 'Udostępnione 1 osobie', other: 'Udostępnione ${numberOfPeople} osobom')}"; - static String m86(emailIDs) => "Udostępnione z ${emailIDs}"; + static String m84(emailIDs) => "Udostępnione z ${emailIDs}"; - static String m87(fileType) => + static String m85(fileType) => "Ten ${fileType} zostanie usunięty z Twojego urządzenia."; - static String m88(fileType) => + static String m86(fileType) => "Ten ${fileType} jest zarówno w Ente, jak i na twoim urządzeniu."; - static String m89(fileType) => "Ten ${fileType} zostanie usunięty z Ente."; + static String m87(fileType) => "Ten ${fileType} zostanie usunięty z Ente."; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "Użyto ${usedAmount} ${usedStorageUnit} z ${totalAmount} ${totalStorageUnit}"; - static String m93(id) => + static String m92(id) => "Twoje ${id} jest już połączony z innym kontem Ente.\nJeśli chcesz użyć swojego ${id} za pomocą tego konta, skontaktuj się z naszym wsparciem technicznym"; - static String m94(endDate) => + static String m93(endDate) => "Twoja subskrypcja zostanie anulowana dnia ${endDate}"; - static String m95(completed, total) => + static String m94(completed, total) => "Zachowano ${completed}/${total} wspomnień"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Naciśnij, aby przesłać, przesyłanie jest obecnie ignorowane z powodu ${ignoreReason}"; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "Oni również otrzymują ${storageAmountInGB} GB"; static String m97(email) => "To jest identyfikator weryfikacyjny ${email}"; @@ -255,16 +231,13 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "Zweryfikuj ${email}"; - static String m109(count) => - "${Intl.plural(count, zero: 'Dodano 0 widzów', one: 'Dodano 1 widza', other: 'Dodano ${count} widzów')}"; - - static String m2(email) => + static String m110(email) => "Wysłaliśmy wiadomość na adres ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: '${count} rok temu', few: '${count} lata temu', many: '${count} lat temu', other: '${count} lata temu')}"; - static String m112(storageSaved) => "Pomyślnie zwolniłeś/aś ${storageSaved}!"; + static String m113(storageSaved) => "Pomyślnie zwolniłeś/aś ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -287,11 +260,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Dodaj nowy adres e-mail"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Dodaj współuczestnika"), - "addCollaborators": m10, "addFiles": MessageLookupByLibrary.simpleMessage("Dodaj Pliki"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Dodaj z urządzenia"), - "addItem": m11, "addLocation": MessageLookupByLibrary.simpleMessage("Dodaj lokalizację"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Dodaj"), @@ -304,7 +275,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Dodaj nową osobę"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage("Szczegóły dodatków"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Dodatki"), "addPhotos": MessageLookupByLibrary.simpleMessage("Dodaj zdjęcia"), "addSelected": MessageLookupByLibrary.simpleMessage("Dodaj zaznaczone"), @@ -315,12 +286,11 @@ class MessageLookup extends MessageLookupByLibrary { "addTrustedContact": MessageLookupByLibrary.simpleMessage("Dodaj Zaufany Kontakt"), "addViewer": MessageLookupByLibrary.simpleMessage("Dodaj widza"), - "addViewers": m13, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage("Dodaj swoje zdjęcia teraz"), "addedAs": MessageLookupByLibrary.simpleMessage("Dodano jako"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("Dodawanie do ulubionych..."), "advanced": MessageLookupByLibrary.simpleMessage("Zaawansowane"), @@ -332,7 +302,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("Po 1 tygodniu"), "after1Year": MessageLookupByLibrary.simpleMessage("Po 1 roku"), "albumOwner": MessageLookupByLibrary.simpleMessage("Właściciel"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Tytuł albumu"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Album został zaktualizowany"), @@ -383,7 +353,7 @@ class MessageLookup extends MessageLookupByLibrary { "Blokada dostępu do aplikacji"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Wybierz między domyślnym ekranem blokady urządzenia a niestandardowym ekranem blokady z kodem PIN lub hasłem."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Zastosuj"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Użyj kodu"), @@ -467,7 +437,7 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "Automatyczne parowanie działa tylko z urządzeniami obsługującymi Chromecast."), "available": MessageLookupByLibrary.simpleMessage("Dostępne"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("Foldery kopii zapasowej"), "backup": MessageLookupByLibrary.simpleMessage("Kopia zapasowa"), @@ -509,10 +479,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Anuluj odzyskiwanie"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "Czy na pewno chcesz anulować odzyskiwanie?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Anuluj subskrypcję"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( "Nie można usunąć udostępnionych plików"), "castAlbum": MessageLookupByLibrary.simpleMessage("Odtwórz album"), @@ -547,7 +517,7 @@ class MessageLookup extends MessageLookupByLibrary { "Odbierz bezpłatną przestrzeń dyskową"), "claimMore": MessageLookupByLibrary.simpleMessage("Zdobądź więcej!"), "claimed": MessageLookupByLibrary.simpleMessage("Odebrano"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("Wyczyść Nieskategoryzowane"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -577,12 +547,12 @@ class MessageLookup extends MessageLookupByLibrary { "Utwórz link, aby umożliwić innym dodawanie i przeglądanie zdjęć w udostępnionym albumie bez konieczności korzystania z aplikacji lub konta Ente. Świetne rozwiązanie do gromadzenia zdjęć ze wspólnych wydarzeń."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Link do współpracy"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Współuczestnik"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "Współuczestnicy mogą dodawać zdjęcia i wideo do udostępnionego albumu."), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("Układ"), "collageSaved": MessageLookupByLibrary.simpleMessage("Kolaż zapisano w galerii"), @@ -599,7 +569,7 @@ class MessageLookup extends MessageLookupByLibrary { "Czy na pewno chcesz wyłączyć uwierzytelnianie dwustopniowe?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage("Potwierdź usunięcie konta"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Tak, chcę trwale usunąć to konto i jego dane ze wszystkich aplikacji."), "confirmPassword": @@ -612,10 +582,10 @@ class MessageLookup extends MessageLookupByLibrary { "Potwierdź klucz odzyskiwania"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Połącz z urządzeniem"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage( "Skontaktuj się z pomocą techniczną"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Kontakty"), "contents": MessageLookupByLibrary.simpleMessage("Zawartość"), "continueLabel": MessageLookupByLibrary.simpleMessage("Kontynuuj"), @@ -661,7 +631,7 @@ class MessageLookup extends MessageLookupByLibrary { "currentlyRunning": MessageLookupByLibrary.simpleMessage("aktualnie uruchomiony"), "custom": MessageLookupByLibrary.simpleMessage("Niestandardowy"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Ciemny"), "dayToday": MessageLookupByLibrary.simpleMessage("Dzisiaj"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Wczoraj"), @@ -696,11 +666,11 @@ class MessageLookup extends MessageLookupByLibrary { "deleteFromDevice": MessageLookupByLibrary.simpleMessage("Usuń z urządzenia"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Usuń z Ente"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Usuń lokalizację"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Usuń zdjęcia"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "Brakuje kluczowej funkcji, której potrzebuję"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -740,7 +710,7 @@ class MessageLookup extends MessageLookupByLibrary { "Widzowie mogą nadal robić zrzuty ekranu lub zapisywać kopie zdjęć za pomocą programów trzecich"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Uwaga"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage( "Wyłącz uwierzytelnianie dwustopniowe"), "disablingTwofactorAuthentication": @@ -783,9 +753,9 @@ class MessageLookup extends MessageLookupByLibrary { "downloadFailed": MessageLookupByLibrary.simpleMessage("Pobieranie nie powiodło się"), "downloading": MessageLookupByLibrary.simpleMessage("Pobieranie..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Edytuj"), "editLocation": MessageLookupByLibrary.simpleMessage("Edytuj lokalizację"), @@ -800,8 +770,8 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("Adres e-mail"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage( "Adres e-mail jest już zarejestrowany."), - "emailChangedTo": m34, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage( "Adres e-mail nie jest zarejestrowany."), "emailVerificationToggle": @@ -884,7 +854,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Eksportuj swoje dane"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage( "Znaleziono dodatkowe zdjęcia"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Twarz jeszcze nie zgrupowana, prosimy wrócić później"), "faceRecognition": @@ -936,8 +906,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("Rodzaje plików"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("Typy plików i nazwy"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("Pliki usunięto"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage("Pliki zapisane do galerii"), @@ -953,27 +923,25 @@ class MessageLookup extends MessageLookupByLibrary { "foundFaces": MessageLookupByLibrary.simpleMessage("Znaleziono twarze"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage( "Bezpłatna pamięć, którą odebrano"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage("Darmowa pamięć użyteczna"), "freeTrial": MessageLookupByLibrary.simpleMessage("Darmowy okres próbny"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage( "Zwolnij miejsce na urządzeniu"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Oszczędzaj miejsce na urządzeniu poprzez wyczyszczenie plików, które zostały już przesłane."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Zwolnij miejsce"), - "freeUpSpaceSaving": m45, "gallery": MessageLookupByLibrary.simpleMessage("Galeria"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "W galerii wyświetlane jest do 1000 pamięci"), "general": MessageLookupByLibrary.simpleMessage("Ogólne"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Generowanie kluczy szyfrujących..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Przejdź do ustawień"), "googlePlayId": @@ -1056,7 +1024,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Wygląda na to, że coś poszło nie tak. Spróbuj ponownie po pewnym czasie. Jeśli błąd będzie się powtarzał, skontaktuj się z naszym zespołem pomocy technicznej."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Elementy pokazują liczbę dni pozostałych przed trwałym usunięciem"), @@ -1086,7 +1054,7 @@ class MessageLookup extends MessageLookupByLibrary { "legacy": MessageLookupByLibrary.simpleMessage("Dziedzictwo"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Odziedziczone konta"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "Dziedzictwo pozwala zaufanym kontaktom na dostęp do Twojego konta w razie Twojej nieobecności."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1101,7 +1069,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Połącz adres e-mail"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Aktywny"), "linkExpired": MessageLookupByLibrary.simpleMessage("Wygasł"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Wygaśnięcie linku"), "linkHasExpired": MessageLookupByLibrary.simpleMessage("Link wygasł"), "linkNeverExpires": MessageLookupByLibrary.simpleMessage("Nigdy"), @@ -1196,7 +1164,6 @@ class MessageLookup extends MessageLookupByLibrary { "maps": MessageLookupByLibrary.simpleMessage("Mapy"), "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), - "memoryCount": m5, "merchandise": MessageLookupByLibrary.simpleMessage("Sklep"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Scal z istniejącym"), @@ -1227,12 +1194,11 @@ class MessageLookup extends MessageLookupByLibrary { "mostRecent": MessageLookupByLibrary.simpleMessage("Od najnowszych"), "mostRelevant": MessageLookupByLibrary.simpleMessage("Najbardziej trafne"), - "moveItem": m54, "moveToAlbum": MessageLookupByLibrary.simpleMessage("Przenieś do albumu"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Przenieś do ukrytego albumu"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("Przeniesiono do kosza"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( @@ -1285,10 +1251,10 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Brak wyników"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Nie znaleziono wyników"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage( "Nie znaleziono blokady systemowej"), - "notPersonLabel": m57, + "notPersonLabel": m52, "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Nic Ci jeszcze nie udostępniono"), "nothingToSeeHere": MessageLookupByLibrary.simpleMessage( @@ -1298,7 +1264,7 @@ class MessageLookup extends MessageLookupByLibrary { "onDevice": MessageLookupByLibrary.simpleMessage("Na urządzeniu"), "onEnte": MessageLookupByLibrary.simpleMessage("W ente"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Tylko te"), "oops": MessageLookupByLibrary.simpleMessage("Ups"), "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( @@ -1335,7 +1301,7 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( "Hasło zostało pomyślnie zmienione"), "passwordLock": MessageLookupByLibrary.simpleMessage("Blokada hasłem"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "Siła hasła jest obliczana, biorąc pod uwagę długość hasła, użyte znaki, i czy hasło pojawi się w 10 000 najczęściej używanych haseł"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1346,7 +1312,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Płatność się nie powiodła"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Niestety Twoja płatność nie powiodła się. Skontaktuj się z pomocą techniczną, a my Ci pomożemy!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Oczekujące elementy"), "pendingSync": @@ -1370,14 +1336,13 @@ class MessageLookup extends MessageLookupByLibrary { "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Zdjęcia dodane przez Ciebie zostaną usunięte z albumu"), - "photosCount": m64, "pickCenterPoint": MessageLookupByLibrary.simpleMessage("Wybierz punkt środkowy"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Przypnij album"), "pinLock": MessageLookupByLibrary.simpleMessage("Blokada PIN"), "playOnTv": MessageLookupByLibrary.simpleMessage( "Odtwórz album na telewizorze"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Subskrypcja PlayStore"), "pleaseCheckYourInternetConnectionAndTryAgain": @@ -1389,14 +1354,14 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Skontaktuj się z pomocą techniczną, jeśli problem będzie się powtarzał"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( "Prosimy przyznać uprawnienia"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Zaloguj się ponownie"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Prosimy wybrać szybkie linki do usunięcia"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Spróbuj ponownie"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1424,7 +1389,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Udostępnianie prywatne"), "proceed": MessageLookupByLibrary.simpleMessage("Kontynuuj"), "processed": MessageLookupByLibrary.simpleMessage("Przetworzone"), - "processingImport": m69, + "processingImport": m65, "publicLinkCreated": MessageLookupByLibrary.simpleMessage("Utworzono publiczny link"), "publicLinkEnabled": @@ -1434,7 +1399,7 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("Zgłoś"), "rateTheApp": MessageLookupByLibrary.simpleMessage("Oceń aplikację"), "rateUs": MessageLookupByLibrary.simpleMessage("Oceń nas"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "recover": MessageLookupByLibrary.simpleMessage("Odzyskaj"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Odzyskaj konto"), @@ -1443,7 +1408,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Odzyskaj konto"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("Odzyskiwanie rozpoczęte"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Klucz odzyskiwania"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( @@ -1458,12 +1423,12 @@ class MessageLookup extends MessageLookupByLibrary { "Klucz odzyskiwania zweryfikowany"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Twój klucz odzyskiwania jest jedynym sposobem na odzyskanie zdjęć, jeśli zapomnisz hasła. Klucz odzyskiwania można znaleźć w Ustawieniach > Konto.\n\nWprowadź tutaj swój klucz odzyskiwania, aby sprawdzić, czy został zapisany poprawnie."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("Odzyskano pomyślnie!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "Zaufany kontakt próbuje uzyskać dostęp do Twojego konta"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "Obecne urządzenie nie jest wystarczająco wydajne, aby zweryfikować hasło, ale możemy je wygenerować w sposób działający na wszystkich urządzeniach.\n\nZaloguj się przy użyciu klucza odzyskiwania i wygeneruj nowe hasło (jeśli chcesz, możesz ponownie użyć tego samego)."), "recreatePasswordTitle": @@ -1479,7 +1444,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Przekaż ten kod swoim znajomym"), "referralStep2": MessageLookupByLibrary.simpleMessage("2. Wykupują płatny plan"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Polecenia"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Wysyłanie poleceń jest obecnie wstrzymane"), @@ -1509,7 +1474,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Usuń link"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Usuń użytkownika"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Usuń etykietę osoby"), "removePublicLink": @@ -1530,7 +1495,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Zmień nazwę pliku"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Odnów subskrypcję"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Zgłoś błąd"), "reportBug": MessageLookupByLibrary.simpleMessage("Zgłoś błąd"), "resendEmail": @@ -1608,8 +1573,8 @@ class MessageLookup extends MessageLookupByLibrary { "Zaproś ludzi, a zobaczysz tutaj wszystkie udostępnione przez nich zdjęcia"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "Osoby będą wyświetlane tutaj po zakończeniu przetwarzania i synchronizacji"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Bezpieczeństwo"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( "Zobacz publiczne linki do albumów w aplikacji"), @@ -1642,8 +1607,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Wybrane elementy zostaną usunięte ze wszystkich albumów i przeniesione do kosza."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, "send": MessageLookupByLibrary.simpleMessage("Wyślij"), "sendEmail": MessageLookupByLibrary.simpleMessage("Wyślij e-mail"), "sendInvite": @@ -1672,16 +1637,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Udostępnij teraz album"), "shareLink": MessageLookupByLibrary.simpleMessage("Udostępnij link"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Udostępnij tylko ludziom, którym chcesz"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Pobierz Ente, abyśmy mogli łatwo udostępniać zdjęcia i wideo w oryginalnej jakości\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Udostępnij użytkownikom bez konta Ente"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage( "Udostępnij swój pierwszy album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1694,7 +1659,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Nowe udostępnione zdjęcia"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Otrzymuj powiadomienia, gdy ktoś doda zdjęcie do udostępnionego albumu, którego jesteś częścią"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Udostępnione ze mną"), "sharedWithYou": @@ -1711,11 +1676,11 @@ class MessageLookup extends MessageLookupByLibrary { "Wyloguj z pozostałych urządzeń"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Akceptuję warunki korzystania z usługi i politykę prywatności"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "To zostanie usunięte ze wszystkich albumów."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Pomiń"), "social": MessageLookupByLibrary.simpleMessage("Społeczność"), "someItemsAreInBothEnteAndYourDevice": @@ -1763,13 +1728,13 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Pamięć"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Rodzina"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Ty"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Przekroczono limit pamięci"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "strongStrength": MessageLookupByLibrary.simpleMessage("Silne"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Subskrybuj"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Potrzebujesz aktywnej płatnej subskrypcji, aby włączyć udostępnianie."), @@ -1786,7 +1751,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("Zaproponuj funkcje"), "support": MessageLookupByLibrary.simpleMessage("Wsparcie techniczne"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Synchronizacja zatrzymana"), "syncing": MessageLookupByLibrary.simpleMessage("Synchronizowanie..."), @@ -1799,7 +1764,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Naciśnij, aby odblokować"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Naciśnij, aby przesłać"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Wygląda na to, że coś poszło nie tak. Spróbuj ponownie po pewnym czasie. Jeśli błąd będzie się powtarzał, skontaktuj się z naszym zespołem pomocy technicznej."), "terminate": MessageLookupByLibrary.simpleMessage("Zakończ"), @@ -1823,7 +1788,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Te elementy zostaną usunięte z Twojego urządzenia."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Zostaną one usunięte ze wszystkich albumów."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1968,7 +1933,6 @@ class MessageLookup extends MessageLookupByLibrary { "viewRecoveryKey": MessageLookupByLibrary.simpleMessage("Zobacz klucz odzyskiwania"), "viewer": MessageLookupByLibrary.simpleMessage("Widz"), - "viewersSuccessfullyAdded": m109, "visitWebToManage": MessageLookupByLibrary.simpleMessage( "Odwiedź stronę web.ente.io, aby zarządzać subskrypcją"), "waitingForVerification": MessageLookupByLibrary.simpleMessage( @@ -1981,7 +1945,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Nie wspieramy edycji zdjęć i albumów, których jeszcze nie posiadasz"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Słabe"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Witaj ponownie!"), "whatsNew": MessageLookupByLibrary.simpleMessage("Co nowego"), @@ -1989,7 +1953,7 @@ class MessageLookup extends MessageLookupByLibrary { "Zaufany kontakt może pomóc w odzyskaniu Twoich danych."), "yearShort": MessageLookupByLibrary.simpleMessage("r"), "yearly": MessageLookupByLibrary.simpleMessage("Rocznie"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Tak"), "yesCancel": MessageLookupByLibrary.simpleMessage("Tak, anuluj"), "yesConvertToViewer": @@ -2021,7 +1985,7 @@ class MessageLookup extends MessageLookupByLibrary { "Nie możesz udostępnić samemu sobie"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "Nie masz żadnych zarchiwizowanych elementów."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage( "Twoje konto zostało usunięte"), "yourMap": MessageLookupByLibrary.simpleMessage("Twoja mapa"), diff --git a/mobile/lib/generated/intl/messages_pt.dart b/mobile/lib/generated/intl/messages_pt.dart index b501c817cb..179e745e90 100644 --- a/mobile/lib/generated/intl/messages_pt.dart +++ b/mobile/lib/generated/intl/messages_pt.dart @@ -20,258 +20,258 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'pt'; - static String m9(title) => "${title} (Eu)"; + static String m0(title) => "${title} (Eu)"; - static String m10(count) => + static String m1(count) => "${Intl.plural(count, one: 'Adicionar colaborador', other: 'Adicionar colaboradores')}"; - static String m11(count) => + static String m2(count) => "${Intl.plural(count, one: 'Adicionar item', other: 'Adicionar itens')}"; - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "Seu complemento ${storageAmount} é válido até ${endDate}"; - static String m13(count) => + static String m4(count) => "${Intl.plural(count, one: 'Adicionar visualizador', other: 'Adicionar visualizadores')}"; - static String m14(emailOrName) => "Adicionado por ${emailOrName}"; + static String m5(emailOrName) => "Adicionado por ${emailOrName}"; - static String m15(albumName) => "Adicionado com sucesso a ${albumName}"; + static String m6(albumName) => "Adicionado com sucesso a ${albumName}"; - static String m16(name) => "Admirando ${name}"; + static String m7(name) => "Admirando ${name}"; - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'Nenhum participante', one: '1 participante', other: '${count} participantes')}"; - static String m18(versionValue) => "Versão: ${versionValue}"; + static String m9(versionValue) => "Versão: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} livre"; - static String m113(name) => "Vistas bonitas com ${name}"; + static String m11(name) => "Vistas bonitas com ${name}"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "Primeiramente cancele sua assinatura existente do ${paymentProvider}"; - static String m3(user) => + static String m13(user) => "${user} Não poderá adicionar mais fotos a este álbum\n\nEles ainda conseguirão remover fotos existentes adicionadas por eles"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Sua família reinvidicou ${storageAmountInGb} GB até então', 'false': 'Você reinvindicou ${storageAmountInGb} GB até então', 'other': 'Você reinvindicou ${storageAmountInGb} GB até então!', })}"; - static String m22(albumName) => "Link colaborativo criado para ${albumName}"; + static String m15(albumName) => "Link colaborativo criado para ${albumName}"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: 'Adicionado 0 colaboradores', one: 'Adicionado 1 colaborador', other: 'Adicionado ${count} colaboradores')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "Você está prestes a adicionar ${email} como contato confiável. Eles poderão recuperar sua conta se você estiver ausente por ${numOfDays} dias."; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Entre em contato com ${familyAdminEmail} para gerenciar sua assinatura"; - static String m26(provider) => + static String m19(provider) => "Entre em contato conosco em support@ente.io para gerenciar sua assinatura ${provider}."; - static String m27(endpoint) => "Conectado à ${endpoint}"; + static String m20(endpoint) => "Conectado à ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Excluir ${count} item', other: 'Excluir ${count} itens')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Excluindo ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Isso removerá o link público para acessar \"${albumName}\"."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Envie um e-mail para ${supportEmail} a partir do seu endereço de e-mail registrado"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "Você limpou ${Intl.plural(count, one: '${count} arquivo duplicado', other: '${count} arquivos duplicados')}, salvando (${storageSaved}!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} arquivos, ${formattedSize} cada"; - static String m34(newEmail) => "E-mail alterado para ${newEmail}"; + static String m27(newEmail) => "E-mail alterado para ${newEmail}"; - static String m35(email) => "${email} não possui uma conta Ente."; + static String m28(email) => "${email} não possui uma conta Ente."; - static String m36(email) => + static String m29(email) => "${email} não tem uma conta Ente.\n\nEnvie-os um convite para compartilhar fotos."; - static String m37(name) => "Abraçando ${name}"; + static String m30(name) => "Abraçando ${name}"; - static String m38(text) => "Fotos adicionais encontradas para ${text}"; + static String m31(text) => "Fotos adicionais encontradas para ${text}"; - static String m39(name) => "Tendo banquete com ${name}"; + static String m32(name) => "Tendo banquete com ${name}"; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "${Intl.plural(count, one: '1 arquivo', other: '${formattedNumber} arquivos')} deste dispositivo foi copiado com segurança"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "${Intl.plural(count, one: '1 arquivo', other: '${formattedNumber} arquivos')} deste álbum foi copiado com segurança"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB cada vez que alguém se inscrever a um plano pago e aplicar seu código"; - static String m42(endDate) => "A avaliação grátis acaba em ${endDate}"; + static String m36(endDate) => "A avaliação grátis acaba em ${endDate}"; - static String m43(count) => + static String m37(count) => "Você ainda pode acessá-${Intl.plural(count, one: 'lo', other: 'los')} no Ente, contanto que você tenha uma assinatura ativa"; - static String m44(sizeInMBorGB) => "Liberar ${sizeInMBorGB}"; + static String m38(sizeInMBorGB) => "Liberar ${sizeInMBorGB}"; - static String m45(count, formattedSize) => + static String m39(count, formattedSize) => "${Intl.plural(count, one: 'Ele pode ser excluído do dispositivo para liberar ${formattedSize}', other: 'Eles podem ser excluídos do dispositivo para liberar ${formattedSize}')}"; - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Processando ${currentlyProcessing} / ${totalCount}"; - static String m47(name) => "Caminhando com ${name}"; + static String m41(name) => "Caminhando com ${name}"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} item', other: '${count} itens')}"; - static String m49(name) => "Últimos momentos com ${name}"; + static String m43(name) => "Últimos momentos com ${name}"; - static String m50(email) => + static String m44(email) => "${email} convidou você para ser um contato confiável"; - static String m51(expiryTime) => "O link expirará em ${expiryTime}"; + static String m45(expiryTime) => "O link expirará em ${expiryTime}"; - static String m52(email) => "Vincular pessoa a ${email}"; + static String m46(email) => "Vincular pessoa a ${email}"; - static String m53(personName, email) => + static String m47(personName, email) => "Isso vinculará ${personName} a ${email}"; - static String m5(count, formattedCount) => + static String m48(count, formattedCount) => "${Intl.plural(count, zero: 'sem memórias', one: '${formattedCount} memória', other: '${formattedCount} memórias')}"; - static String m54(count) => + static String m49(count) => "${Intl.plural(count, one: 'Mover item', other: 'Mover itens')}"; - static String m55(albumName) => "Movido com sucesso para ${albumName}"; + static String m50(albumName) => "Movido com sucesso para ${albumName}"; - static String m56(personName) => "Sem sugestões para ${personName}"; + static String m51(personName) => "Sem sugestões para ${personName}"; - static String m57(name) => "Não é ${name}?"; + static String m52(name) => "Não é ${name}?"; - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Entre em contato com ${familyAdminEmail} para alterar o seu código."; - static String m59(name) => "Festejando com ${name}"; + static String m54(name) => "Festejando com ${name}"; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Força da senha: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Fale com o suporte ${providerName} se você foi cobrado"; - static String m61(name, age) => "${name} está com ${age}!"; + static String m57(name, age) => "${name} está com ${age}!"; - static String m62(name, age) => "${name} terá ${age} em breve"; + static String m58(name, age) => "${name} terá ${age} em breve"; - static String m63(count) => + static String m59(count) => "${Intl.plural(count, zero: 'Sem fotos', one: '1 foto', other: '${count} fotos')}"; - static String m64(count) => + static String m60(count) => "${Intl.plural(count, zero: '0 fotos', one: '1 foto', other: '${count} fotos')}"; - static String m65(endDate) => + static String m61(endDate) => "Avaliação grátis válida até ${endDate}.\nVocê pode alterar para um plano pago depois."; - static String m66(toEmail) => "Envie-nos um e-mail para ${toEmail}"; + static String m62(toEmail) => "Envie-nos um e-mail para ${toEmail}"; - static String m67(toEmail) => "Envie os registros para \n${toEmail}"; + static String m63(toEmail) => "Envie os registros para \n${toEmail}"; - static String m68(name) => "Fazendo pose com ${name}"; + static String m64(name) => "Fazendo pose com ${name}"; - static String m69(folderName) => "Processando ${folderName}..."; + static String m65(folderName) => "Processando ${folderName}..."; - static String m70(storeName) => "Avalie-nos no ${storeName}"; + static String m66(storeName) => "Avalie-nos no ${storeName}"; - static String m71(name) => "Atribuído a ${name}"; + static String m67(name) => "Atribuído a ${name}"; - static String m72(days, email) => + static String m68(days, email) => "Você poderá acessar a conta após ${days} dias. Uma notificação será enviada para ${email}."; - static String m73(email) => + static String m69(email) => "Você pode recuperar a conta com e-mail ${email} por definir uma nova senha."; - static String m74(email) => "${email} está tentando recuperar sua conta."; + static String m70(email) => "${email} está tentando recuperar sua conta."; - static String m75(storageInGB) => + static String m71(storageInGB) => "3. Ambos os dois ganham ${storageInGB} GB* grátis"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} será removido deste álbum compartilhado\n\nQuaisquer fotos adicionadas por eles também serão removidas do álbum"; - static String m77(endDate) => "Renovação de assinatura em ${endDate}"; + static String m73(endDate) => "Renovação de assinatura em ${endDate}"; - static String m78(name) => "Viajando de carro com ${name}"; + static String m74(name) => "Viajando de carro com ${name}"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: '${count} resultado encontrado', other: '${count} resultados encontrados')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "Incompatibilidade de comprimento de seções: ${snapshotLength} != ${searchLength}"; - static String m6(count) => "${count} selecionado(s)"; + static String m77(count) => "${count} selecionado(s)"; - static String m81(count, yourCount) => + static String m78(count, yourCount) => "${count} selecionado(s) (${yourCount} seus)"; - static String m82(name) => "Tirando selfies com ${name}"; + static String m79(name) => "Tirando selfies com ${name}"; - static String m83(verificationID) => + static String m80(verificationID) => "Aqui está meu ID de verificação para o ente.io: ${verificationID}"; - static String m7(verificationID) => + static String m81(verificationID) => "Ei, você pode confirmar se este ID de verificação do ente.io é seu?: ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Código de referência do Ente: ${referralCode} \n\nAplique-o em Configurações → Geral → Referências para obter ${referralStorageInGB} GB grátis após a sua inscrição num plano pago\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Compartilhe com pessoas específicas', one: 'Compartilhado com 1 pessoa', other: 'Compartilhado com ${numberOfPeople} pessoas')}"; - static String m86(emailIDs) => "Compartilhado com ${emailIDs}"; + static String m84(emailIDs) => "Compartilhado com ${emailIDs}"; - static String m87(fileType) => + static String m85(fileType) => "Este ${fileType} será excluído do dispositivo."; - static String m88(fileType) => + static String m86(fileType) => "Este ${fileType} está no Ente e em seu dispositivo."; - static String m89(fileType) => "Este ${fileType} será excluído do Ente."; + static String m87(fileType) => "Este ${fileType} será excluído do Ente."; - static String m90(name) => "Jogando esportes com ${name}"; + static String m88(name) => "Jogando esportes com ${name}"; - static String m91(name) => "Destacar ${name}"; + static String m89(name) => "Destacar ${name}"; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} de ${totalAmount} ${totalStorageUnit} usado"; - static String m93(id) => + static String m92(id) => "Seu ${id} já está vinculado a outra conta Ente. Se você gostaria de usar seu ${id} com esta conta, entre em contato conosco\""; - static String m94(endDate) => "Sua assinatura será cancelada em ${endDate}"; + static String m93(endDate) => "Sua assinatura será cancelada em ${endDate}"; - static String m95(completed, total) => + static String m94(completed, total) => "${completed}/${total} memórias preservadas"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Toque para enviar, atualmente o envio é ignorado devido a ${ignoreReason}"; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "Eles também recebem ${storageAmountInGB} GB"; static String m97(email) => "Este é o ID de verificação de ${email}"; @@ -306,14 +306,14 @@ class MessageLookup extends MessageLookupByLibrary { static String m109(count) => "${Intl.plural(count, zero: 'Adicionado 0 visualizadores', one: 'Adicionado 1 visualizador', other: 'Adicionado ${count} visualizadores')}"; - static String m2(email) => "Enviamos um e-mail à ${email}"; + static String m110(email) => "Enviamos um e-mail à ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: '${count} ano atrás', other: '${count} anos atrás')}"; - static String m111(name) => "Você e ${name}"; + static String m112(name) => "Você e ${name}"; - static String m112(storageSaved) => + static String m113(storageSaved) => "Você liberou ${storageSaved} com sucesso!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -326,7 +326,7 @@ class MessageLookup extends MessageLookupByLibrary { "account": MessageLookupByLibrary.simpleMessage("Conta"), "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage( "A conta já está configurada."), - "accountOwnerPersonAppbarTitle": m9, + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("Bem-vindo(a) de volta!"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( @@ -339,11 +339,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Adicionar um novo e-mail"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Adicionar colaborador"), - "addCollaborators": m10, + "addCollaborators": m1, "addFiles": MessageLookupByLibrary.simpleMessage("Adicionar arquivos"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Adicionar do dispositivo"), - "addItem": m11, + "addItem": m2, "addLocation": MessageLookupByLibrary.simpleMessage("Adicionar localização"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Adicionar"), @@ -356,7 +356,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Adicionar nova pessoa"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage("Detalhes dos complementos"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Complementos"), "addPhotos": MessageLookupByLibrary.simpleMessage("Adicionar fotos"), "addSelected": @@ -370,15 +370,15 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Adicionar contato confiável"), "addViewer": MessageLookupByLibrary.simpleMessage("Adicionar visualizador"), - "addViewers": m13, + "addViewers": m4, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage("Adicione suas fotos agora"), "addedAs": MessageLookupByLibrary.simpleMessage("Adicionado como"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage( "Adicionando aos favoritos..."), - "admiringThem": m16, + "admiringThem": m7, "advanced": MessageLookupByLibrary.simpleMessage("Avançado"), "advancedSettings": MessageLookupByLibrary.simpleMessage("Avançado"), "after1Day": MessageLookupByLibrary.simpleMessage("Após 1 dia"), @@ -387,7 +387,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("Após 1 semana"), "after1Year": MessageLookupByLibrary.simpleMessage("Após 1 ano"), "albumOwner": MessageLookupByLibrary.simpleMessage("Proprietário"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Título do álbum"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Álbum atualizado"), @@ -438,7 +438,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Bloqueio do aplicativo"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Escolha entre a tela de bloqueio padrão do seu dispositivo e uma tela de bloqueio personalizada com PIN ou senha."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("ID da Apple"), "apply": MessageLookupByLibrary.simpleMessage("Aplicar"), "applyCodeTitle": @@ -521,10 +521,10 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "O pareamento automático só funciona com dispositivos que suportam o Chromecast."), "available": MessageLookupByLibrary.simpleMessage("Disponível"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage( "Pastas copiadas com segurança"), - "backgroundWithThem": m113, + "backgroundWithThem": m11, "backup": MessageLookupByLibrary.simpleMessage("Cópia de segurança"), "backupFailed": MessageLookupByLibrary.simpleMessage( "Falhou ao copiar com segurança"), @@ -582,10 +582,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Cancelar recuperação"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "Deseja mesmo cancelar a recuperação de conta?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Cancelar assinatura"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( "Não é possível excluir arquivos compartilhados"), "castAlbum": MessageLookupByLibrary.simpleMessage("Transferir álbum"), @@ -620,7 +620,7 @@ class MessageLookup extends MessageLookupByLibrary { "Reivindicar armazenamento grátis"), "claimMore": MessageLookupByLibrary.simpleMessage("Reivindique mais!"), "claimed": MessageLookupByLibrary.simpleMessage("Reivindicado"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("Limpar não categorizado"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -649,12 +649,12 @@ class MessageLookup extends MessageLookupByLibrary { "Crie um link para permitir que as pessoas adicionem e vejam fotos no seu álbum compartilhado sem a necessidade do aplicativo ou uma conta Ente. Ótimo para colecionar fotos de eventos."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Link colaborativo"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Colaborador"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "Os colaboradores podem adicionar fotos e vídeos ao álbum compartilhado."), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("Layout"), "collageSaved": MessageLookupByLibrary.simpleMessage("Colagem salva na galeria"), @@ -671,7 +671,7 @@ class MessageLookup extends MessageLookupByLibrary { "Você tem certeza que queira desativar a autenticação de dois fatores?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage("Confirmar exclusão da conta"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Sim, eu quero permanentemente excluir esta conta e os dados em todos os aplicativos."), "confirmPassword": @@ -684,10 +684,10 @@ class MessageLookup extends MessageLookupByLibrary { "Confirme sua chave de recuperação"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Conectar ao dispositivo"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("Contatar suporte"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Contatos"), "contents": MessageLookupByLibrary.simpleMessage("Conteúdos"), "continueLabel": MessageLookupByLibrary.simpleMessage("Continuar"), @@ -727,12 +727,14 @@ class MessageLookup extends MessageLookupByLibrary { "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( "Atualização crítica disponível"), "crop": MessageLookupByLibrary.simpleMessage("Cortar"), + "curatedMemories": + MessageLookupByLibrary.simpleMessage("Curated memories"), "currentUsageIs": MessageLookupByLibrary.simpleMessage("O uso atual é "), "currentlyRunning": MessageLookupByLibrary.simpleMessage("Atualmente executando"), "custom": MessageLookupByLibrary.simpleMessage("Personalizado"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Escuro"), "dayToday": MessageLookupByLibrary.simpleMessage("Hoje"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Ontem"), @@ -770,11 +772,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Excluir do dispositivo"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Excluir do Ente"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Excluir localização"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Excluir fotos"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "Está faltando um recurso-chave que eu preciso"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -815,7 +817,7 @@ class MessageLookup extends MessageLookupByLibrary { "Os visualizadores podem fazer capturas de tela ou salvar uma cópia de suas fotos usando ferramentas externas"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Por favor, saiba que"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage( "Desativar autenticação de dois fatores"), "disablingTwofactorAuthentication": @@ -859,9 +861,9 @@ class MessageLookup extends MessageLookupByLibrary { "downloadFailed": MessageLookupByLibrary.simpleMessage("Falhou ao baixar"), "downloading": MessageLookupByLibrary.simpleMessage("Baixando..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Editar"), "editLocation": MessageLookupByLibrary.simpleMessage("Editar localização"), @@ -877,16 +879,16 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("E-mail"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage("E-mail já registrado."), - "emailChangedTo": m34, - "emailDoesNotHaveEnteAccount": m35, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage("E-mail não registrado."), "emailVerificationToggle": MessageLookupByLibrary.simpleMessage("Verificação por e-mail"), "emailYourLogs": MessageLookupByLibrary.simpleMessage("Enviar registros por e-mail"), - "embracingThem": m37, + "embracingThem": m30, "emergencyContacts": MessageLookupByLibrary.simpleMessage("Contatos de emergência"), "empty": MessageLookupByLibrary.simpleMessage("Esvaziar"), @@ -965,7 +967,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Exportar dados"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage( "Fotos adicionais encontradas"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Rosto não agrupado ainda, volte aqui mais tarde"), "faceRecognition": @@ -1004,7 +1006,7 @@ class MessageLookup extends MessageLookupByLibrary { "faq": MessageLookupByLibrary.simpleMessage("Perguntas frequentes"), "faqs": MessageLookupByLibrary.simpleMessage("Perguntas frequentes"), "favorite": MessageLookupByLibrary.simpleMessage("Favorito"), - "feastingWithThem": m39, + "feastingWithThem": m32, "feedback": MessageLookupByLibrary.simpleMessage("Feedback"), "file": MessageLookupByLibrary.simpleMessage("Arquivo"), "fileFailedToSaveToGallery": MessageLookupByLibrary.simpleMessage( @@ -1018,8 +1020,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("Tipos de arquivo"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("Tipos de arquivo e nomes"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("Arquivos excluídos"), "filesSavedToGallery": @@ -1038,26 +1040,26 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Rostos encontrados"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage( "Armazenamento grátis reivindicado"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage("Armazenamento disponível"), "freeTrial": MessageLookupByLibrary.simpleMessage("Avaliação grátis"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAccessPostDelete": m37, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage( "Liberar espaço no dispositivo"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Economize espaço em seu dispositivo por limpar arquivos já salvos com segurança."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Liberar espaço"), - "freeUpSpaceSaving": m45, + "freeUpSpaceSaving": m39, "gallery": MessageLookupByLibrary.simpleMessage("Galeria"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "Até 1.000 memórias exibidas na galeria"), "general": MessageLookupByLibrary.simpleMessage("Geral"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Gerando chaves de criptografia..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Ir às opções"), "googlePlayId": MessageLookupByLibrary.simpleMessage("ID do Google Play"), @@ -1086,7 +1088,7 @@ class MessageLookup extends MessageLookupByLibrary { "hideSharedItemsFromHomeGallery": MessageLookupByLibrary.simpleMessage( "Ocultar itens compartilhados da galeria inicial"), "hiding": MessageLookupByLibrary.simpleMessage("Ocultando..."), - "hikingWithThem": m47, + "hikingWithThem": m41, "hostedAtOsmFrance": MessageLookupByLibrary.simpleMessage("Hospedado em OSM France"), "howItWorks": MessageLookupByLibrary.simpleMessage("Como funciona"), @@ -1143,7 +1145,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Parece que algo deu errado. Tente novamente mais tarde. Caso o erro persistir, por favor, entre em contato com nossa equipe."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Os itens exibem o número de dias restantes antes da exclusão permanente"), @@ -1164,7 +1166,7 @@ class MessageLookup extends MessageLookupByLibrary { "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( "Ajude-nos com esta informação"), "language": MessageLookupByLibrary.simpleMessage("Idioma"), - "lastTimeWithThem": m49, + "lastTimeWithThem": m43, "lastUpdated": MessageLookupByLibrary.simpleMessage("Última atualização"), "lastYearsTrip": @@ -1179,7 +1181,7 @@ class MessageLookup extends MessageLookupByLibrary { "legacy": MessageLookupByLibrary.simpleMessage("Legado"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Contas legadas"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "O legado permite que contatos confiáveis acessem sua conta em sua ausência."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1196,7 +1198,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("para compartilhar rápido"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Ativado"), "linkExpired": MessageLookupByLibrary.simpleMessage("Expirado"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Expiração do link"), "linkHasExpired": MessageLookupByLibrary.simpleMessage("O link expirou"), @@ -1204,8 +1206,8 @@ class MessageLookup extends MessageLookupByLibrary { "linkPerson": MessageLookupByLibrary.simpleMessage("Vincular pessoa"), "linkPersonCaption": MessageLookupByLibrary.simpleMessage( "para melhor experiência de compartilhamento"), - "linkPersonToEmail": m52, - "linkPersonToEmailConfirmation": m53, + "linkPersonToEmail": m46, + "linkPersonToEmailConfirmation": m47, "livePhotos": MessageLookupByLibrary.simpleMessage("Fotos animadas"), "loadMessage1": MessageLookupByLibrary.simpleMessage( "Você pode compartilhar sua assinatura com seus familiares"), @@ -1296,7 +1298,7 @@ class MessageLookup extends MessageLookupByLibrary { "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), "me": MessageLookupByLibrary.simpleMessage("Eu"), - "memoryCount": m5, + "memoryCount": m48, "merchandise": MessageLookupByLibrary.simpleMessage("Produtos"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Juntar com o existente"), @@ -1327,14 +1329,14 @@ class MessageLookup extends MessageLookupByLibrary { "mostRecent": MessageLookupByLibrary.simpleMessage("Mais recente"), "mostRelevant": MessageLookupByLibrary.simpleMessage("Mais relevante"), "mountains": MessageLookupByLibrary.simpleMessage("Sob as montanhas"), - "moveItem": m54, + "moveItem": m49, "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage( "Mover fotos selecionadas para uma data"), "moveToAlbum": MessageLookupByLibrary.simpleMessage("Mover para o álbum"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Mover ao álbum oculto"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("Movido para a lixeira"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( @@ -1388,10 +1390,10 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Nenhum resultado"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Nenhum resultado encontrado"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage( "Nenhum bloqueio do sistema encontrado"), - "notPersonLabel": m57, + "notPersonLabel": m52, "notThisPerson": MessageLookupByLibrary.simpleMessage("Não é esta pessoa?"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( @@ -1404,7 +1406,7 @@ class MessageLookup extends MessageLookupByLibrary { "onEnte": MessageLookupByLibrary.simpleMessage( "No ente"), "onTheRoad": MessageLookupByLibrary.simpleMessage("Na estrada de novo"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Apenas eles"), "oops": MessageLookupByLibrary.simpleMessage("Ops"), "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( @@ -1434,7 +1436,7 @@ class MessageLookup extends MessageLookupByLibrary { "pairingComplete": MessageLookupByLibrary.simpleMessage("Pareamento concluído"), "panorama": MessageLookupByLibrary.simpleMessage("Panorama"), - "partyWithThem": m59, + "partyWithThem": m54, "passKeyPendingVerification": MessageLookupByLibrary.simpleMessage("Verificação pendente"), "passkey": MessageLookupByLibrary.simpleMessage("Chave de acesso"), @@ -1445,7 +1447,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Senha alterada com sucesso"), "passwordLock": MessageLookupByLibrary.simpleMessage("Bloqueio por senha"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "A força da senha é calculada considerando o comprimento dos dígitos, carácteres usados, e se ou não a senha aparece nas 10.000 senhas usadas."), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1456,7 +1458,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("O pagamento falhou"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Infelizmente o pagamento falhou. Entre em contato com o suporte e nós ajudaremos você!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Itens pendentes"), "pendingSync": MessageLookupByLibrary.simpleMessage("Sincronização pendente"), @@ -1469,21 +1471,21 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Excluir permanentemente"), "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( "Excluir permanentemente do dispositivo?"), - "personIsAge": m61, + "personIsAge": m57, "personName": MessageLookupByLibrary.simpleMessage("Nome da pessoa"), - "personTurningAge": m62, + "personTurningAge": m58, "pets": MessageLookupByLibrary.simpleMessage("Companhia de pelos"), "photoDescriptions": MessageLookupByLibrary.simpleMessage("Descrições das fotos"), "photoGridSize": MessageLookupByLibrary.simpleMessage("Tamanho da grade de fotos"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("foto"), - "photocountPhotos": m63, + "photocountPhotos": m59, "photos": MessageLookupByLibrary.simpleMessage("Fotos"), "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Suas fotos adicionadas serão removidas do álbum"), - "photosCount": m64, + "photosCount": m60, "photosKeepRelativeTimeDifference": MessageLookupByLibrary.simpleMessage( "As fotos mantêm a diferença de tempo relativo"), @@ -1495,7 +1497,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Reproduzir álbum na TV"), "playOriginal": MessageLookupByLibrary.simpleMessage("Reproduzir original"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playStream": MessageLookupByLibrary.simpleMessage("Reproduzir transmissão"), "playstoreSubscription": @@ -1509,14 +1511,14 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Por favor, contate o suporte se o problema persistir"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( "Por favor, conceda as permissões"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Registre-se novamente"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Selecione links rápidos para remover"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Tente novamente"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1529,7 +1531,7 @@ class MessageLookup extends MessageLookupByLibrary { "Por favor, aguarde mais algum tempo antes de tentar novamente"), "pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage( "Aguarde um pouco, isso talvez leve um tempo."), - "posingWithThem": m68, + "posingWithThem": m64, "preparingLogs": MessageLookupByLibrary.simpleMessage("Preparando registros..."), "preserveMore": MessageLookupByLibrary.simpleMessage("Preservar mais"), @@ -1548,7 +1550,7 @@ class MessageLookup extends MessageLookupByLibrary { "proceed": MessageLookupByLibrary.simpleMessage("Continuar"), "processed": MessageLookupByLibrary.simpleMessage("Processado"), "processing": MessageLookupByLibrary.simpleMessage("Processando"), - "processingImport": m69, + "processingImport": m65, "processingVideos": MessageLookupByLibrary.simpleMessage("Processando vídeos"), "publicLinkCreated": @@ -1562,9 +1564,9 @@ class MessageLookup extends MessageLookupByLibrary { "rateTheApp": MessageLookupByLibrary.simpleMessage("Avalie o aplicativo"), "rateUs": MessageLookupByLibrary.simpleMessage("Avaliar"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "reassignMe": MessageLookupByLibrary.simpleMessage("Reatribuir \"Eu\""), - "reassignedToName": m71, + "reassignedToName": m67, "reassigningLoading": MessageLookupByLibrary.simpleMessage("Reatribuindo..."), "recover": MessageLookupByLibrary.simpleMessage("Recuperar"), @@ -1575,7 +1577,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Recuperar conta"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("A recuperação iniciou"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Chave de recuperação"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( @@ -1590,12 +1592,12 @@ class MessageLookup extends MessageLookupByLibrary { "Chave de recuperação verificada"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Sua chave de recuperação é a única maneira de recuperar suas fotos se você esqueceu sua senha. Você pode encontrar sua chave de recuperação em Opções > Conta.\n\nInsira sua chave de recuperação aqui para verificar se você a salvou corretamente."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("Recuperação com sucesso!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "Um contato confiável está tentando acessar sua conta"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "O dispositivo atual não é poderoso o suficiente para verificar sua senha, no entanto, nós podemos regenerar numa maneira que funciona em todos os dispositivos.\n\nEntre usando a chave de recuperação e regenere sua senha (você pode usar a mesma novamente se desejar)."), "recreatePasswordTitle": @@ -1610,7 +1612,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Envie este código aos seus amigos"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Eles então se inscrevem num plano pago"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Referências"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "As referências estão atualmente pausadas"), @@ -1639,7 +1641,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Remover link"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Remover participante"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Remover etiqueta da pessoa"), "removePublicLink": @@ -1659,7 +1661,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Renomear arquivo"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Renovar assinatura"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Informar um erro"), "reportBug": MessageLookupByLibrary.simpleMessage("Informar erro"), "resendEmail": MessageLookupByLibrary.simpleMessage("Reenviar e-mail"), @@ -1684,7 +1686,7 @@ class MessageLookup extends MessageLookupByLibrary { "reviewSuggestions": MessageLookupByLibrary.simpleMessage("Revisar sugestões"), "right": MessageLookupByLibrary.simpleMessage("Direita"), - "roadtripWithThem": m78, + "roadtripWithThem": m74, "rotate": MessageLookupByLibrary.simpleMessage("Girar"), "rotateLeft": MessageLookupByLibrary.simpleMessage("Girar para a esquerda"), @@ -1742,8 +1744,8 @@ class MessageLookup extends MessageLookupByLibrary { "Convide pessoas e você verá todas as fotos compartilhadas por elas aqui"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "As pessoas serão exibidas aqui quando o processamento e sincronização for concluído"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Segurança"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( "Ver links de álbum compartilhado no aplicativo"), @@ -1792,9 +1794,9 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeRemovedFromThisPerson": MessageLookupByLibrary.simpleMessage( "Os itens selecionados serão removidos desta pessoa, entretanto não serão excluídos da sua biblioteca."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, - "selfiesWithThem": m82, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "selfiesWithThem": m79, "send": MessageLookupByLibrary.simpleMessage("Enviar"), "sendEmail": MessageLookupByLibrary.simpleMessage("Enviar e-mail"), "sendInvite": MessageLookupByLibrary.simpleMessage("Enviar convite"), @@ -1824,16 +1826,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Compartilhar um álbum agora"), "shareLink": MessageLookupByLibrary.simpleMessage("Compartilhar link"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Compartilhar apenas com as pessoas que você quiser"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Baixe o Ente para que nós possamos compartilhar com facilidade fotos e vídeos de qualidade original\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Compartilhar com usuários não ente"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage( "Compartilhar seu primeiro álbum"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1846,7 +1848,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Novas fotos compartilhadas"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Receber notificações quando alguém adicionar uma foto a um álbum compartilhado que você faz parte"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Compartilhado comigo"), "sharedWithYou": @@ -1865,11 +1867,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Sair em outros dispositivos"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Eu concordo com os termos de serviço e a política de privacidade"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Ele será excluído de todos os álbuns."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Pular"), "social": MessageLookupByLibrary.simpleMessage("Redes sociais"), "someItemsAreInBothEnteAndYourDevice": @@ -1905,8 +1907,8 @@ class MessageLookup extends MessageLookupByLibrary { "sortOldestFirst": MessageLookupByLibrary.simpleMessage("Antigos primeiro"), "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Sucesso"), - "sportsWithThem": m90, - "spotlightOnThem": m91, + "sportsWithThem": m88, + "spotlightOnThem": m89, "spotlightOnYourself": MessageLookupByLibrary.simpleMessage("Destacar si mesmo"), "startAccountRecoveryTitle": @@ -1921,15 +1923,15 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Armazenamento"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Família"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Você"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage( "Limite de armazenamento excedido"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "streamDetails": MessageLookupByLibrary.simpleMessage("Detalhes da transmissão"), "strongStrength": MessageLookupByLibrary.simpleMessage("Forte"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Inscrever-se"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Você precisa de uma inscrição paga ativa para ativar o compartilhamento."), @@ -1947,7 +1949,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Sugerir recurso"), "sunrise": MessageLookupByLibrary.simpleMessage("No horizonte"), "support": MessageLookupByLibrary.simpleMessage("Suporte"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Sincronização interrompida"), "syncing": MessageLookupByLibrary.simpleMessage("Sincronizando..."), @@ -1959,7 +1961,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Toque para desbloquear"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Toque para enviar"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Parece que algo deu errado. Tente novamente mais tarde. Caso o erro persistir, por favor, entre em contato com nossa equipe."), "terminate": MessageLookupByLibrary.simpleMessage("Encerrar"), @@ -1981,7 +1983,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Estes itens serão excluídos do seu dispositivo."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Eles serão excluídos de todos os álbuns."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -2150,7 +2152,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Não suportamos a edição de fotos e álbuns que você ainda não possui"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Fraca"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Bem-vindo(a) de volta!"), @@ -2159,7 +2161,7 @@ class MessageLookup extends MessageLookupByLibrary { "Um contato confiável pode ajudá-lo em recuperar seus dados."), "yearShort": MessageLookupByLibrary.simpleMessage("ano"), "yearly": MessageLookupByLibrary.simpleMessage("Anual"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Sim"), "yesCancel": MessageLookupByLibrary.simpleMessage("Sim"), "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( @@ -2174,7 +2176,7 @@ class MessageLookup extends MessageLookupByLibrary { "yesResetPerson": MessageLookupByLibrary.simpleMessage("Sim, redefinir pessoa"), "you": MessageLookupByLibrary.simpleMessage("Você"), - "youAndThem": m111, + "youAndThem": m112, "youAreOnAFamilyPlan": MessageLookupByLibrary.simpleMessage( "Você está em um plano familiar!"), "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage( @@ -2193,7 +2195,7 @@ class MessageLookup extends MessageLookupByLibrary { "Você não pode compartilhar consigo mesmo"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "Você não tem nenhum item arquivado."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("Sua conta foi excluída"), "yourMap": MessageLookupByLibrary.simpleMessage("Seu mapa"), diff --git a/mobile/lib/generated/intl/messages_pt_BR.dart b/mobile/lib/generated/intl/messages_pt_BR.dart new file mode 100644 index 0000000000..1b31d3ccc0 --- /dev/null +++ b/mobile/lib/generated/intl/messages_pt_BR.dart @@ -0,0 +1,2231 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a pt_BR locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes +// ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'pt_BR'; + + static String m0(title) => "${title} (Eu)"; + + static String m1(count) => + "${Intl.plural(count, zero: 'Adicionar colaborador', one: 'Adicionar colaborador', other: 'Adicionar colaboradores')}"; + + static String m2(count) => + "${Intl.plural(count, one: 'Adicionar item', other: 'Adicionar itens')}"; + + static String m3(storageAmount, endDate) => + "Seu complemento ${storageAmount} é válido até ${endDate}"; + + static String m4(count) => + "${Intl.plural(count, zero: 'Adicionar visualizador', one: 'Adicionar visualizador', other: 'Adicionar vizualizadores')}"; + + static String m5(emailOrName) => "Adicionado por ${emailOrName}"; + + static String m6(albumName) => "Adicionado com sucesso a ${albumName}"; + + static String m7(name) => "Admirando ${name}"; + + static String m8(count) => + "${Intl.plural(count, zero: 'Nenhum participante', one: '1 participante', other: '${count} participantes')}"; + + static String m9(versionValue) => "Versão: ${versionValue}"; + + static String m10(freeAmount, storageUnit) => + "${freeAmount} ${storageUnit} livre"; + + static String m11(name) => "Vistas bonitas com ${name}"; + + static String m12(paymentProvider) => + "Primeiramente cancele sua assinatura existente do ${paymentProvider}"; + + static String m13(user) => + "${user} Não poderá adicionar mais fotos a este álbum\n\nEles ainda conseguirão remover fotos existentes adicionadas por eles"; + + static String m14(isFamilyMember, storageAmountInGb) => + "${Intl.select(isFamilyMember, { + 'true': 'Sua família reinvidicou ${storageAmountInGb} GB até então', + 'false': 'Você reinvindicou ${storageAmountInGb} GB até então', + 'other': 'Você reinvindicou ${storageAmountInGb} GB até então!', + })}"; + + static String m15(albumName) => "Link colaborativo criado para ${albumName}"; + + static String m16(count) => + "${Intl.plural(count, zero: 'Adicionado 0 colaboradores', one: 'Adicionado 1 colaborador', other: 'Adicionado ${count} colaboradores')}"; + + static String m17(email, numOfDays) => + "Você está prestes a adicionar ${email} como contato confiável. Eles poderão recuperar sua conta se você estiver ausente por ${numOfDays} dias."; + + static String m18(familyAdminEmail) => + "Entre em contato com ${familyAdminEmail} para gerenciar sua assinatura"; + + static String m19(provider) => + "Entre em contato conosco em support@ente.io para gerenciar sua assinatura ${provider}."; + + static String m20(endpoint) => "Conectado à ${endpoint}"; + + static String m21(count) => + "${Intl.plural(count, one: 'Excluir ${count} item', other: 'Excluir ${count} itens')}"; + + static String m22(currentlyDeleting, totalCount) => + "Excluindo ${currentlyDeleting} / ${totalCount}"; + + static String m23(albumName) => + "Isso removerá o link público para acessar \"${albumName}\"."; + + static String m24(supportEmail) => + "Envie um e-mail para ${supportEmail} a partir do seu endereço de e-mail registrado"; + + static String m25(count, storageSaved) => + "Você limpou ${Intl.plural(count, one: '${count} arquivo duplicado', other: '${count} arquivos duplicados')}, salvando (${storageSaved}!)"; + + static String m26(count, formattedSize) => + "${count} arquivos, ${formattedSize} cada"; + + static String m27(newEmail) => "E-mail alterado para ${newEmail}"; + + static String m28(email) => "${email} não possui uma conta Ente."; + + static String m29(email) => + "${email} não tem uma conta Ente.\n\nEnvie-os um convite para compartilhar fotos."; + + static String m30(name) => "Abraçando ${name}"; + + static String m31(text) => "Fotos adicionais encontradas para ${text}"; + + static String m32(name) => "Tendo banquete com ${name}"; + + static String m33(count, formattedNumber) => + "${Intl.plural(count, one: '1 arquivo', other: '${formattedNumber} arquivos')} deste dispositivo foi copiado com segurança"; + + static String m34(count, formattedNumber) => + "${Intl.plural(count, one: '1 arquivo', other: '${formattedNumber} arquivos')} deste álbum foi copiado com segurança"; + + static String m35(storageAmountInGB) => + "${storageAmountInGB} GB cada vez que alguém se inscrever a um plano pago e aplicar seu código"; + + static String m36(endDate) => "A avaliação grátis acaba em ${endDate}"; + + static String m37(count) => + "Você ainda pode acessá${Intl.plural(count, one: '-lo', other: '-los')} no Ente se você tiver uma assinatura ativa"; + + static String m38(sizeInMBorGB) => "Liberar ${sizeInMBorGB}"; + + static String m39(count, formattedSize) => + "${Intl.plural(count, one: 'Ele pode excluído para liberar ${formattedSize}', other: 'Eles podem ser excluídos do dispositivo para liberar ${formattedSize}')}"; + + static String m40(currentlyProcessing, totalCount) => + "Processando ${currentlyProcessing} / ${totalCount}"; + + static String m41(name) => "Caminhando com ${name}"; + + static String m42(count) => + "${Intl.plural(count, one: '${count} item', other: '${count} itens')}"; + + static String m43(name) => "Últimos momentos com ${name}"; + + static String m44(email) => + "${email} convidou você para ser um contato confiável"; + + static String m45(expiryTime) => "O link expirará em ${expiryTime}"; + + static String m46(email) => "Vincular pessoa a ${email}"; + + static String m47(personName, email) => + "Isso vinculará ${personName} a ${email}"; + + static String m48(count, formattedCount) => + "${Intl.plural(count, zero: 'sem memórias', one: '${formattedCount} memória', other: '${formattedCount} memórias')}"; + + static String m49(count) => + "${Intl.plural(count, one: 'Mover item', other: 'Mover itens')}"; + + static String m50(albumName) => "Movido com sucesso para ${albumName}"; + + static String m51(personName) => "Sem sugestões para ${personName}"; + + static String m52(name) => "Não é ${name}?"; + + static String m53(familyAdminEmail) => + "Entre em contato com ${familyAdminEmail} para alterar o seu código."; + + static String m54(name) => "Festejando com ${name}"; + + static String m55(passwordStrengthValue) => + "Força da senha: ${passwordStrengthValue}"; + + static String m56(providerName) => + "Fale com o suporte ${providerName} se você foi cobrado"; + + static String m57(name, age) => "${name} tem ${age} anos!"; + + static String m58(name, age) => "${name} terá ${age} em breve"; + + static String m59(count) => + "${Intl.plural(count, zero: 'Sem fotos', one: '1 foto', other: '${count} fotos')}"; + + static String m60(count) => + "${Intl.plural(count, zero: '0 fotos', one: '1 foto', other: '${count} fotos')}"; + + static String m61(endDate) => + "Avaliação grátis válida até ${endDate}.\nVocê pode alterar para um plano pago depois."; + + static String m62(toEmail) => "Envie-nos um e-mail para ${toEmail}"; + + static String m63(toEmail) => "Envie os registros para \n${toEmail}"; + + static String m64(name) => "Fazendo pose com ${name}"; + + static String m65(folderName) => "Processando ${folderName}..."; + + static String m66(storeName) => "Avalie-nos no ${storeName}"; + + static String m67(name) => "Atribuído a ${name}"; + + static String m68(days, email) => + "Você poderá acessar a conta após ${days} dias. Uma notificação será enviada para ${email}."; + + static String m69(email) => + "Você pode recuperar a conta com e-mail ${email} por definir uma nova senha."; + + static String m70(email) => "${email} está tentando recuperar sua conta."; + + static String m71(storageInGB) => + "3. Ambos os dois ganham ${storageInGB} GB* grátis"; + + static String m72(userEmail) => + "${userEmail} será removido do álbum compartilhado\n\nQualquer foto adicionada por ele será removida."; + + static String m73(endDate) => "Renovação de assinatura em ${endDate}"; + + static String m74(name) => "Viajando de carro com ${name}"; + + static String m75(count) => + "${Intl.plural(count, one: '${count} resultado encontrado', other: '${count} resultados encontrados')}"; + + static String m76(snapshotLength, searchLength) => + "Incompatibilidade de comprimento de seções: ${snapshotLength} != ${searchLength}"; + + static String m77(count) => "${count} selecionado(s)"; + + static String m78(count, yourCount) => + "${count} selecionado(s) (${yourCount} seus)"; + + static String m79(name) => "Tirando selfies com ${name}"; + + static String m80(verificationID) => + "Aqui está meu ID de verificação para o ente.io: ${verificationID}"; + + static String m81(verificationID) => + "Ei, você pode confirmar se este ID de verificação do ente.io é seu?: ${verificationID}"; + + static String m82(referralCode, referralStorageInGB) => + "Código de referência do Ente: ${referralCode} \n\nAplique-o em Configurações → Geral → Referências para obter ${referralStorageInGB} GB grátis após a sua inscrição num plano pago\n\nhttps://ente.io"; + + static String m83(numberOfPeople) => + "${Intl.plural(numberOfPeople, zero: 'Compartilhe com pessoas específicas', one: 'Compartilhado com 1 pessoa', other: 'Compartilhado com ${numberOfPeople} pessoas')}"; + + static String m84(emailIDs) => "Compartilhado com ${emailIDs}"; + + static String m85(fileType) => + "Este ${fileType} será excluído do dispositivo."; + + static String m86(fileType) => + "Este ${fileType} está no Ente e em seu dispositivo."; + + static String m87(fileType) => "Este ${fileType} será excluído do Ente."; + + static String m88(name) => "Jogando esportes com ${name}"; + + static String m89(name) => "Destacar ${name}"; + + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; + + static String m91( + usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => + "${usedAmount} ${usedStorageUnit} de ${totalAmount} ${totalStorageUnit} usado"; + + static String m92(id) => + "Seu ${id} já está vinculado a outra conta Ente. Se você gostaria de usar seu ${id} com esta conta, entre em contato conosco\""; + + static String m93(endDate) => "Sua assinatura será cancelada em ${endDate}"; + + static String m94(completed, total) => + "${completed}/${total} memórias preservadas"; + + static String m95(ignoreReason) => + "Toque para enviar, atualmente o envio é ignorado devido a ${ignoreReason}"; + + static String m96(storageAmountInGB) => + "Eles também recebem ${storageAmountInGB} GB"; + + static String m97(email) => "Este é o ID de verificação de ${email}"; + + static String m98(count) => + "${Intl.plural(count, one: 'Esta semana, ${count} ano atrás', other: 'Esta semana, ${count} anos atrás')}"; + + static String m99(dateFormat) => "${dateFormat} com o passar dos anos"; + + static String m100(count) => + "${Intl.plural(count, zero: 'Em breve', one: '1 dia', other: '${count} dias')}"; + + static String m101(year) => "Viajem em ${year}"; + + static String m102(location) => "Viajem à ${location}"; + + static String m103(email) => + "Você foi convidado para ser um contato legado por ${email}."; + + static String m104(galleryType) => + "O tipo de galeria ${galleryType} não é suportado para renomear"; + + static String m105(ignoreReason) => + "O envio é ignorado devido a ${ignoreReason}"; + + static String m106(count) => "Preservando ${count} memórias..."; + + static String m107(endDate) => "Válido até ${endDate}"; + + static String m108(email) => "Verificar ${email}"; + + static String m109(count) => + "${Intl.plural(count, zero: 'Adicionado 0 vizualizadores', one: 'Adicionado 1 visualizador', other: 'Adicionado ${count} visualizadores')}"; + + static String m110(email) => "Enviamos um e-mail à ${email}"; + + static String m111(count) => + "${Intl.plural(count, one: '${count} ano atrás', other: '${count} anos atrás')}"; + + static String m112(name) => "Você e ${name}"; + + static String m113(storageSaved) => + "Você liberou ${storageSaved} com sucesso!"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "aNewVersionOfEnteIsAvailable": MessageLookupByLibrary.simpleMessage( + "Uma nova versão do Ente está disponível."), + "about": MessageLookupByLibrary.simpleMessage("Sobre"), + "acceptTrustInvite": + MessageLookupByLibrary.simpleMessage("Aceitar convite"), + "account": MessageLookupByLibrary.simpleMessage("Conta"), + "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage( + "A conta já está configurada."), + "accountOwnerPersonAppbarTitle": m0, + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("Bem-vindo(a) de volta!"), + "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( + "Eu entendo que se eu perder minha senha, posso perder meus dados, já que meus dados são criptografados de ponta a ponta."), + "activeSessions": + MessageLookupByLibrary.simpleMessage("Sessões ativas"), + "add": MessageLookupByLibrary.simpleMessage("Adicionar"), + "addAName": MessageLookupByLibrary.simpleMessage("Adicione um nome"), + "addANewEmail": + MessageLookupByLibrary.simpleMessage("Adicionar um novo e-mail"), + "addCollaborator": + MessageLookupByLibrary.simpleMessage("Adicionar colaborador"), + "addCollaborators": m1, + "addFiles": MessageLookupByLibrary.simpleMessage("Adicionar arquivos"), + "addFromDevice": + MessageLookupByLibrary.simpleMessage("Adicionar do dispositivo"), + "addItem": m2, + "addLocation": + MessageLookupByLibrary.simpleMessage("Adicionar localização"), + "addLocationButton": MessageLookupByLibrary.simpleMessage("Adicionar"), + "addMore": MessageLookupByLibrary.simpleMessage("Adicionar mais"), + "addName": MessageLookupByLibrary.simpleMessage("Adicionar pessoa"), + "addNameOrMerge": + MessageLookupByLibrary.simpleMessage("Adicionar nome ou juntar"), + "addNew": MessageLookupByLibrary.simpleMessage("Adicionar novo"), + "addNewPerson": + MessageLookupByLibrary.simpleMessage("Adicionar nova pessoa"), + "addOnPageSubtitle": + MessageLookupByLibrary.simpleMessage("Detalhes dos complementos"), + "addOnValidTill": m3, + "addOns": MessageLookupByLibrary.simpleMessage("Complementos"), + "addPhotos": MessageLookupByLibrary.simpleMessage("Adicionar fotos"), + "addSelected": + MessageLookupByLibrary.simpleMessage("Adicionar selecionado"), + "addToAlbum": + MessageLookupByLibrary.simpleMessage("Adicionar ao álbum"), + "addToEnte": MessageLookupByLibrary.simpleMessage("Adicionar ao Ente"), + "addToHiddenAlbum": + MessageLookupByLibrary.simpleMessage("Adicionar ao álbum oculto"), + "addTrustedContact": + MessageLookupByLibrary.simpleMessage("Adicionar contato confiável"), + "addViewer": + MessageLookupByLibrary.simpleMessage("Adicionar visualizador"), + "addViewers": m4, + "addYourPhotosNow": + MessageLookupByLibrary.simpleMessage("Adicione suas fotos agora"), + "addedAs": MessageLookupByLibrary.simpleMessage("Adicionado como"), + "addedBy": m5, + "addedSuccessfullyTo": m6, + "addingToFavorites": MessageLookupByLibrary.simpleMessage( + "Adicionando aos favoritos..."), + "admiringThem": m7, + "advanced": MessageLookupByLibrary.simpleMessage("Avançado"), + "advancedSettings": MessageLookupByLibrary.simpleMessage("Avançado"), + "after1Day": MessageLookupByLibrary.simpleMessage("Após 1 dia"), + "after1Hour": MessageLookupByLibrary.simpleMessage("Após 1 hora"), + "after1Month": MessageLookupByLibrary.simpleMessage("Após 1 mês"), + "after1Week": MessageLookupByLibrary.simpleMessage("Após 1 semana"), + "after1Year": MessageLookupByLibrary.simpleMessage("Após 1 ano"), + "albumOwner": MessageLookupByLibrary.simpleMessage("Proprietário"), + "albumParticipantsCount": m8, + "albumTitle": MessageLookupByLibrary.simpleMessage("Título do álbum"), + "albumUpdated": + MessageLookupByLibrary.simpleMessage("Álbum atualizado"), + "albums": MessageLookupByLibrary.simpleMessage("Álbuns"), + "allClear": MessageLookupByLibrary.simpleMessage("✨ Tudo limpo"), + "allMemoriesPreserved": MessageLookupByLibrary.simpleMessage( + "Todas as memórias preservadas"), + "allPersonGroupingWillReset": MessageLookupByLibrary.simpleMessage( + "Todos os agrupamentos dessa pessoa serão redefinidos, e você perderá todas as sugestões feitas por essa pessoa."), + "allWillShiftRangeBasedOnFirst": MessageLookupByLibrary.simpleMessage( + "Este é o primeiro do grupo. As outras fotos selecionadas serão automaticamente alteradas para esta nova data"), + "allow": MessageLookupByLibrary.simpleMessage("Permitir"), + "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Permitir que as pessoas com link também adicionem fotos ao álbum compartilhado."), + "allowAddingPhotos": + MessageLookupByLibrary.simpleMessage("Permitir adicionar fotos"), + "allowAppToOpenSharedAlbumLinks": MessageLookupByLibrary.simpleMessage( + "Permitir aplicativo abrir links de álbum compartilhado"), + "allowDownloads": + MessageLookupByLibrary.simpleMessage("Permitir downloads"), + "allowPeopleToAddPhotos": MessageLookupByLibrary.simpleMessage( + "Permitir que pessoas adicionem fotos"), + "allowPermBody": MessageLookupByLibrary.simpleMessage( + "Permita o acesso a suas fotos das Configurações para que Ente possa exibir e copiar com segurança sua biblioteca."), + "allowPermTitle": + MessageLookupByLibrary.simpleMessage("Permita acesso às Fotos"), + "androidBiometricHint": + MessageLookupByLibrary.simpleMessage("Verificar identidade"), + "androidBiometricNotRecognized": MessageLookupByLibrary.simpleMessage( + "Não reconhecido. Tente novamente."), + "androidBiometricRequiredTitle": + MessageLookupByLibrary.simpleMessage("Biométrica necessária"), + "androidBiometricSuccess": + MessageLookupByLibrary.simpleMessage("Sucesso"), + "androidCancelButton": MessageLookupByLibrary.simpleMessage("Cancelar"), + "androidDeviceCredentialsRequiredTitle": + MessageLookupByLibrary.simpleMessage("Credenciais necessários"), + "androidDeviceCredentialsSetupDescription": + MessageLookupByLibrary.simpleMessage("Credenciais necessários"), + "androidGoToSettingsDescription": MessageLookupByLibrary.simpleMessage( + "A autenticação biométrica não está definida no dispositivo. Vá em \'Opções > Segurança\' para adicionar a autenticação biométrica."), + "androidIosWebDesktop": MessageLookupByLibrary.simpleMessage( + "Android, iOS, Web, Computador"), + "androidSignInTitle": + MessageLookupByLibrary.simpleMessage("Autenticação necessária"), + "appIcon": MessageLookupByLibrary.simpleMessage("Ícone do aplicativo"), + "appLock": + MessageLookupByLibrary.simpleMessage("Bloqueio do aplicativo"), + "appLockDescriptions": MessageLookupByLibrary.simpleMessage( + "Escolha entre a tela de bloqueio padrão do seu dispositivo e uma tela de bloqueio personalizada com PIN ou senha."), + "appVersion": m9, + "appleId": MessageLookupByLibrary.simpleMessage("ID da Apple"), + "apply": MessageLookupByLibrary.simpleMessage("Aplicar"), + "applyCodeTitle": + MessageLookupByLibrary.simpleMessage("Aplicar código"), + "appstoreSubscription": + MessageLookupByLibrary.simpleMessage("Assinatura da AppStore"), + "archive": MessageLookupByLibrary.simpleMessage("Arquive"), + "archiveAlbum": MessageLookupByLibrary.simpleMessage("Arquivar álbum"), + "archiving": MessageLookupByLibrary.simpleMessage("Arquivando..."), + "areYouSureThatYouWantToLeaveTheFamily": + MessageLookupByLibrary.simpleMessage( + "Você tem certeza que queira sair do plano familiar?"), + "areYouSureYouWantToCancel": + MessageLookupByLibrary.simpleMessage("Deseja cancelar?"), + "areYouSureYouWantToChangeYourPlan": + MessageLookupByLibrary.simpleMessage("Deseja trocar de plano?"), + "areYouSureYouWantToExit": MessageLookupByLibrary.simpleMessage( + "Tem certeza de que queira sair?"), + "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( + "Você tem certeza que quer encerrar sessão?"), + "areYouSureYouWantToRenew": + MessageLookupByLibrary.simpleMessage("Deseja renovar?"), + "areYouSureYouWantToResetThisPerson": + MessageLookupByLibrary.simpleMessage( + "Deseja redefinir esta pessoa?"), + "askCancelReason": MessageLookupByLibrary.simpleMessage( + "Sua assinatura foi cancelada. Deseja compartilhar o motivo?"), + "askDeleteReason": MessageLookupByLibrary.simpleMessage( + "Por que você quer excluir sua conta?"), + "askYourLovedOnesToShare": MessageLookupByLibrary.simpleMessage( + "Peça que seus entes queridos compartilhem"), + "atAFalloutShelter": + MessageLookupByLibrary.simpleMessage("em um abrigo avançado"), + "authToChangeEmailVerificationSetting": + MessageLookupByLibrary.simpleMessage( + "Autentique-se para alterar o e-mail de verificação"), + "authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage( + "Autentique para alterar a configuração da tela de bloqueio"), + "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( + "Por favor, autentique-se para alterar o seu e-mail"), + "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( + "Autentique para alterar sua senha"), + "authToConfigureTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Autentique para configurar a autenticação de dois fatores"), + "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Autentique para iniciar a exclusão de conta"), + "authToManageLegacy": MessageLookupByLibrary.simpleMessage( + "Autentique-se para gerenciar seus contatos confiáveis"), + "authToViewPasskey": MessageLookupByLibrary.simpleMessage( + "Autentique-se para ver sua chave de acesso"), + "authToViewTrashedFiles": MessageLookupByLibrary.simpleMessage( + "Autentique-se para ver seus arquivos excluídos"), + "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( + "Autentique para ver as sessões ativas"), + "authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage( + "Autentique-se para visualizar seus arquivos ocultos"), + "authToViewYourMemories": MessageLookupByLibrary.simpleMessage( + "Autentique-se para ver suas memórias"), + "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Autentique para ver sua chave de recuperação"), + "authenticating": + MessageLookupByLibrary.simpleMessage("Autenticando..."), + "authenticationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Falha na autenticação. Tente novamente"), + "authenticationSuccessful": + MessageLookupByLibrary.simpleMessage("Autenticado com sucesso!"), + "autoCastDialogBody": MessageLookupByLibrary.simpleMessage( + "Você verá dispositivos de transmissão disponível aqui."), + "autoCastiOSPermission": MessageLookupByLibrary.simpleMessage( + "Certifique-se que as permissões da internet local estejam ligadas para o Ente Photos App, em opções."), + "autoLock": MessageLookupByLibrary.simpleMessage("Bloqueio automático"), + "autoLockFeatureDescription": MessageLookupByLibrary.simpleMessage( + "Tempo após o qual o aplicativo bloqueia após ser colocado em segundo plano"), + "autoLogoutMessage": MessageLookupByLibrary.simpleMessage( + "Devido ao ocorrido de erros técnicos, você foi desconectado. Pedimos desculpas pela inconveniência."), + "autoPair": + MessageLookupByLibrary.simpleMessage("Pareamento automático"), + "autoPairDesc": MessageLookupByLibrary.simpleMessage( + "O pareamento automático só funciona com dispositivos que suportam o Chromecast."), + "available": MessageLookupByLibrary.simpleMessage("Disponível"), + "availableStorageSpace": m10, + "backedUpFolders": MessageLookupByLibrary.simpleMessage( + "Pastas copiadas com segurança"), + "backgroundWithThem": m11, + "backup": MessageLookupByLibrary.simpleMessage("Cópia de segurança"), + "backupFailed": MessageLookupByLibrary.simpleMessage( + "Falhou ao copiar com segurança"), + "backupFile": MessageLookupByLibrary.simpleMessage( + "Copiar arquivo com segurança"), + "backupOverMobileData": MessageLookupByLibrary.simpleMessage( + "Salvamento com segurança usando dados móveis"), + "backupSettings": MessageLookupByLibrary.simpleMessage( + "Opções de cópia de segurança"), + "backupStatus": MessageLookupByLibrary.simpleMessage( + "Status da cópia de segurança"), + "backupStatusDescription": MessageLookupByLibrary.simpleMessage( + "Os itens que foram salvos com segurança aparecerão aqui"), + "backupVideos": MessageLookupByLibrary.simpleMessage( + "Cópia de segurança de vídeos"), + "beach": MessageLookupByLibrary.simpleMessage("Areia e o mar"), + "birthday": MessageLookupByLibrary.simpleMessage("Aniversário"), + "blackFridaySale": + MessageLookupByLibrary.simpleMessage("Promoção Black Friday"), + "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "cLBulkEdit": + MessageLookupByLibrary.simpleMessage("Editar todas as datas"), + "cLBulkEditDesc": MessageLookupByLibrary.simpleMessage( + "Agora você pode selecionar várias fotos, editar data e hora de todos com um só clique. Alternar datas também são suportados."), + "cLFamilyPlan": MessageLookupByLibrary.simpleMessage( + "Limites de planos familiares"), + "cLFamilyPlanDesc": MessageLookupByLibrary.simpleMessage( + "Agora você pode definir um limite de quanto armazenamento os seus entes queridos podem usar."), + "cLIcon": MessageLookupByLibrary.simpleMessage("Novo Ícone"), + "cLIconDesc": MessageLookupByLibrary.simpleMessage( + "Finalmente, um novo ícone para o ente que acreditamos que represente melhor nosso trabalho. Também, adicionamos um alterador de ícone para que você ainda consiga utilizar o ícone antigo."), + "cLMemories": MessageLookupByLibrary.simpleMessage("Memórias"), + "cLMemoriesDesc": MessageLookupByLibrary.simpleMessage( + "Relembre momentos especiais - destaque pessoas favoritas, suas viagens e feriados, melhores fotos, e muito mais. Ative o aprendizado automático, marque-se e nomeie seus amigos para melhorar a experiência."), + "cLWidgets": MessageLookupByLibrary.simpleMessage("Widgets"), + "cLWidgetsDesc": MessageLookupByLibrary.simpleMessage( + "Widgets integrados com memórias já estão disponíveis. Eles apareceram com seus melhores momentos sem precisar abrir o ente."), + "cachedData": + MessageLookupByLibrary.simpleMessage("Dados armazenados em cache"), + "calculating": MessageLookupByLibrary.simpleMessage("Calculando..."), + "canNotOpenBody": MessageLookupByLibrary.simpleMessage( + "Desculpe, este álbum não pode ser aberto no aplicativo."), + "canNotOpenTitle": + MessageLookupByLibrary.simpleMessage("Não pôde abrir este álbum"), + "canNotUploadToAlbumsOwnedByOthers": + MessageLookupByLibrary.simpleMessage( + "Não é possível enviar para álbuns pertencentes a outros"), + "canOnlyCreateLinkForFilesOwnedByYou": + MessageLookupByLibrary.simpleMessage( + "Só é possível criar um link para arquivos pertencentes a você"), + "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( + "Só pode remover arquivos de sua propriedade"), + "cancel": MessageLookupByLibrary.simpleMessage("Cancelar"), + "cancelAccountRecovery": + MessageLookupByLibrary.simpleMessage("Cancelar recuperação"), + "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( + "Deseja mesmo cancelar a recuperação de conta?"), + "cancelOtherSubscription": m12, + "cancelSubscription": + MessageLookupByLibrary.simpleMessage("Cancelar assinatura"), + "cannotAddMorePhotosAfterBecomingViewer": m13, + "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( + "Não é possível excluir arquivos compartilhados"), + "castAlbum": MessageLookupByLibrary.simpleMessage("Transferir álbum"), + "castIPMismatchBody": MessageLookupByLibrary.simpleMessage( + "Certifique-se de estar na mesma internet que a TV."), + "castIPMismatchTitle": + MessageLookupByLibrary.simpleMessage("Falhou ao transmitir álbum"), + "castInstruction": MessageLookupByLibrary.simpleMessage( + "Acesse cast.ente.io no dispositivo desejado para parear.\n\nInsira o código abaixo para reproduzir o álbum na sua TV."), + "centerPoint": MessageLookupByLibrary.simpleMessage("Ponto central"), + "change": MessageLookupByLibrary.simpleMessage("Alterar"), + "changeEmail": MessageLookupByLibrary.simpleMessage("Alterar e-mail"), + "changeLocationOfSelectedItems": MessageLookupByLibrary.simpleMessage( + "Alterar a localização dos itens selecionados?"), + "changePassword": MessageLookupByLibrary.simpleMessage("Alterar senha"), + "changePasswordTitle": + MessageLookupByLibrary.simpleMessage("Alterar senha"), + "changePermissions": + MessageLookupByLibrary.simpleMessage("Alterar permissões?"), + "changeYourReferralCode": MessageLookupByLibrary.simpleMessage( + "Alterar código de referência"), + "checkForUpdates": + MessageLookupByLibrary.simpleMessage("Buscar atualizações"), + "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( + "Verifique sua caixa de entrada (e spam) para concluir a verificação"), + "checkStatus": MessageLookupByLibrary.simpleMessage("Verificar estado"), + "checking": MessageLookupByLibrary.simpleMessage("Verificando..."), + "checkingModels": + MessageLookupByLibrary.simpleMessage("Verificando modelos..."), + "city": MessageLookupByLibrary.simpleMessage("Na cidade"), + "claimFreeStorage": + MessageLookupByLibrary.simpleMessage("Reivindique armaz. grátis"), + "claimMore": MessageLookupByLibrary.simpleMessage("Reivindique mais!"), + "claimed": MessageLookupByLibrary.simpleMessage("Reivindicado"), + "claimedStorageSoFar": m14, + "cleanUncategorized": + MessageLookupByLibrary.simpleMessage("Limpar não categorizado"), + "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( + "Remover todos os arquivos não categorizados que estão presentes em outros álbuns"), + "clearCaches": MessageLookupByLibrary.simpleMessage("Limpar cache"), + "clearIndexes": MessageLookupByLibrary.simpleMessage("Limpar índices"), + "click": MessageLookupByLibrary.simpleMessage("• Clique"), + "clickOnTheOverflowMenu": + MessageLookupByLibrary.simpleMessage("• Clique no menu adicional"), + "close": MessageLookupByLibrary.simpleMessage("Fechar"), + "clubByCaptureTime": MessageLookupByLibrary.simpleMessage( + "Agrupar por tempo de captura"), + "clubByFileName": + MessageLookupByLibrary.simpleMessage("Agrupar por nome do arquivo"), + "clusteringProgress": + MessageLookupByLibrary.simpleMessage("Progresso de agrupamento"), + "codeAppliedPageTitle": + MessageLookupByLibrary.simpleMessage("Código aplicado"), + "codeChangeLimitReached": MessageLookupByLibrary.simpleMessage( + "Desculpe, você atingiu o limite de mudanças de código."), + "codeCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Código copiado para a área de transferência"), + "codeUsedByYou": + MessageLookupByLibrary.simpleMessage("Código usado por você"), + "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( + "Crie um link para permitir que as pessoas adicionem e vejam fotos no seu álbum compartilhado sem a necessidade do aplicativo ou uma conta Ente. Ótimo para colecionar fotos de eventos."), + "collaborativeLink": + MessageLookupByLibrary.simpleMessage("Link colaborativo"), + "collaborativeLinkCreatedFor": m15, + "collaborator": MessageLookupByLibrary.simpleMessage("Colaborador"), + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": + MessageLookupByLibrary.simpleMessage( + "Colaboradores podem adicionar fotos e vídeos ao álbum compartilhado."), + "collaboratorsSuccessfullyAdded": m16, + "collageLayout": MessageLookupByLibrary.simpleMessage("Layout"), + "collageSaved": + MessageLookupByLibrary.simpleMessage("Colagem salva na galeria"), + "collect": MessageLookupByLibrary.simpleMessage("Coletar"), + "collectEventPhotos": + MessageLookupByLibrary.simpleMessage("Coletar fotos de evento"), + "collectPhotos": MessageLookupByLibrary.simpleMessage("Coletar fotos"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Crie um link onde seus amigos podem enviar fotos na qualidade original."), + "color": MessageLookupByLibrary.simpleMessage("Cor"), + "configuration": MessageLookupByLibrary.simpleMessage("Configuração"), + "confirm": MessageLookupByLibrary.simpleMessage("Confirmar"), + "confirm2FADisable": MessageLookupByLibrary.simpleMessage( + "Você tem certeza que queira desativar a autenticação de dois fatores?"), + "confirmAccountDeletion": + MessageLookupByLibrary.simpleMessage("Confirmar exclusão da conta"), + "confirmAddingTrustedContact": m17, + "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( + "Sim, eu quero permanentemente excluir esta conta e os dados em todos os aplicativos."), + "confirmPassword": + MessageLookupByLibrary.simpleMessage("Confirmar senha"), + "confirmPlanChange": + MessageLookupByLibrary.simpleMessage("Confirmar mudança de plano"), + "confirmRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Confirmar chave de recuperação"), + "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Confirme sua chave de recuperação"), + "connectToDevice": + MessageLookupByLibrary.simpleMessage("Conectar ao dispositivo"), + "contactFamilyAdmin": m18, + "contactSupport": + MessageLookupByLibrary.simpleMessage("Contatar suporte"), + "contactToManageSubscription": m19, + "contacts": MessageLookupByLibrary.simpleMessage("Contatos"), + "contents": MessageLookupByLibrary.simpleMessage("Conteúdos"), + "continueLabel": MessageLookupByLibrary.simpleMessage("Continuar"), + "continueOnFreeTrial": MessageLookupByLibrary.simpleMessage( + "Continuar com a avaliação grátis"), + "convertToAlbum": + MessageLookupByLibrary.simpleMessage("Converter para álbum"), + "copyEmailAddress": + MessageLookupByLibrary.simpleMessage("Copiar endereço de e-mail"), + "copyLink": MessageLookupByLibrary.simpleMessage("Copiar link"), + "copypasteThisCodentoYourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Copie e cole este código\npara o aplicativo autenticador"), + "couldNotBackUpTryLater": MessageLookupByLibrary.simpleMessage( + "Nós não podemos copiar com segurança seus dados.\nNós tentaremos novamente mais tarde."), + "couldNotFreeUpSpace": MessageLookupByLibrary.simpleMessage( + "Não foi possível liberar espaço"), + "couldNotUpdateSubscription": MessageLookupByLibrary.simpleMessage( + "Não foi possível atualizar a assinatura"), + "count": MessageLookupByLibrary.simpleMessage("Contagem"), + "crashReporting": + MessageLookupByLibrary.simpleMessage("Relatório de erros"), + "create": MessageLookupByLibrary.simpleMessage("Criar"), + "createAccount": MessageLookupByLibrary.simpleMessage("Criar conta"), + "createAlbumActionHint": MessageLookupByLibrary.simpleMessage( + "Pressione para selecionar fotos e clique em + para criar um álbum"), + "createCollaborativeLink": + MessageLookupByLibrary.simpleMessage("Criar link colaborativo"), + "createCollage": MessageLookupByLibrary.simpleMessage("Criar colagem"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("Criar nova conta"), + "createOrSelectAlbum": + MessageLookupByLibrary.simpleMessage("Criar ou selecionar álbum"), + "createPublicLink": + MessageLookupByLibrary.simpleMessage("Criar link público"), + "creatingLink": MessageLookupByLibrary.simpleMessage("Criando link..."), + "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( + "Atualização crítica disponível"), + "crop": MessageLookupByLibrary.simpleMessage("Cortar"), + "curatedMemories": + MessageLookupByLibrary.simpleMessage("Memórias restauradas"), + "currentUsageIs": + MessageLookupByLibrary.simpleMessage("O uso atual é "), + "currentlyRunning": + MessageLookupByLibrary.simpleMessage("Atualmente executando"), + "custom": MessageLookupByLibrary.simpleMessage("Personalizado"), + "customEndpoint": m20, + "darkTheme": MessageLookupByLibrary.simpleMessage("Escuro"), + "dayToday": MessageLookupByLibrary.simpleMessage("Hoje"), + "dayYesterday": MessageLookupByLibrary.simpleMessage("Ontem"), + "declineTrustInvite": + MessageLookupByLibrary.simpleMessage("Recusar convite"), + "decrypting": + MessageLookupByLibrary.simpleMessage("Descriptografando..."), + "decryptingVideo": + MessageLookupByLibrary.simpleMessage("Descriptografando vídeo..."), + "deduplicateFiles": + MessageLookupByLibrary.simpleMessage("Arquivos duplicados"), + "delete": MessageLookupByLibrary.simpleMessage("Excluir"), + "deleteAccount": MessageLookupByLibrary.simpleMessage("Excluir conta"), + "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( + "Lamentamos você ir. Compartilhe seu feedback para ajudar-nos a melhorar."), + "deleteAccountPermanentlyButton": MessageLookupByLibrary.simpleMessage( + "Excluir conta permanentemente"), + "deleteAlbum": MessageLookupByLibrary.simpleMessage("Excluir álbum"), + "deleteAlbumDialog": MessageLookupByLibrary.simpleMessage( + "Também excluir as fotos (e vídeos) presentes neste álbum de todos os outros álbuns que eles fazem parte?"), + "deleteAlbumsDialogBody": MessageLookupByLibrary.simpleMessage( + "Isso excluirá todos os álbuns vazios. Isso é útil quando você quiser reduzir a desordem no seu álbum."), + "deleteAll": MessageLookupByLibrary.simpleMessage("Excluir tudo"), + "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( + "Esta conta está vinculada aos outros aplicativos do Ente, se você usar algum. Seus dados baixados, entre todos os aplicativos do Ente, serão programados para exclusão, e sua conta será permanentemente excluída."), + "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( + "Por favor, envie um e-mail a account-deletion@ente.io do seu endereço de e-mail registrado."), + "deleteEmptyAlbums": + MessageLookupByLibrary.simpleMessage("Excluir álbuns vazios"), + "deleteEmptyAlbumsWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Excluir álbuns vazios?"), + "deleteFromBoth": + MessageLookupByLibrary.simpleMessage("Excluir de ambos"), + "deleteFromDevice": + MessageLookupByLibrary.simpleMessage("Excluir do dispositivo"), + "deleteFromEnte": + MessageLookupByLibrary.simpleMessage("Excluir do Ente"), + "deleteItemCount": m21, + "deleteLocation": + MessageLookupByLibrary.simpleMessage("Excluir localização"), + "deletePhotos": MessageLookupByLibrary.simpleMessage("Excluir fotos"), + "deleteProgress": m22, + "deleteReason1": MessageLookupByLibrary.simpleMessage( + "Está faltando um recurso-chave que eu preciso"), + "deleteReason2": MessageLookupByLibrary.simpleMessage( + "O aplicativo ou um certo recurso não funciona da maneira que eu acredito que deveria funcionar"), + "deleteReason3": MessageLookupByLibrary.simpleMessage( + "Encontrei outro serviço que considero melhor"), + "deleteReason4": + MessageLookupByLibrary.simpleMessage("Meu motivo não está listado"), + "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( + "Sua solicitação será revisada em até 72 horas."), + "deleteSharedAlbum": MessageLookupByLibrary.simpleMessage( + "Excluir álbum compartilhado?"), + "deleteSharedAlbumDialogBody": MessageLookupByLibrary.simpleMessage( + "O álbum será apagado para todos\n\nVocê perderá o acesso a fotos compartilhadas neste álbum que pertencem aos outros"), + "deselectAll": + MessageLookupByLibrary.simpleMessage("Deselecionar tudo"), + "designedToOutlive": + MessageLookupByLibrary.simpleMessage("Feito para ter longevidade"), + "details": MessageLookupByLibrary.simpleMessage("Detalhes"), + "developerSettings": + MessageLookupByLibrary.simpleMessage("Opções de desenvolvedor"), + "developerSettingsWarning": MessageLookupByLibrary.simpleMessage( + "Deseja modificar as Opções de Desenvolvedor?"), + "deviceCodeHint": + MessageLookupByLibrary.simpleMessage("Insira o código"), + "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( + "Arquivos adicionados ao álbum do dispositivo serão automaticamente enviados para o Ente."), + "deviceLock": + MessageLookupByLibrary.simpleMessage("Bloqueio do dispositivo"), + "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( + "Desativa o bloqueio de tela quando o Ente está de fundo e têm uma cópia de segurança sendo feita. Isso normalmente não é necessário, no entanto, ajuda a envios grandes e importações iniciais de bibliotecas maiores concluírem mais rápido."), + "deviceNotFound": + MessageLookupByLibrary.simpleMessage("Dispositivo não encontrado"), + "didYouKnow": MessageLookupByLibrary.simpleMessage("Você sabia?"), + "disableAutoLock": MessageLookupByLibrary.simpleMessage( + "Desativar bloqueio automático"), + "disableDownloadWarningBody": MessageLookupByLibrary.simpleMessage( + "Os visualizadores podem fazer capturas de tela ou salvar uma cópia de suas fotos usando ferramentas externas"), + "disableDownloadWarningTitle": + MessageLookupByLibrary.simpleMessage("Por favor, saiba que"), + "disableLinkMessage": m23, + "disableTwofactor": MessageLookupByLibrary.simpleMessage( + "Desativar autenticação de dois fatores"), + "disablingTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Desativando a autenticação de dois fatores..."), + "discord": MessageLookupByLibrary.simpleMessage("Discord"), + "discover": MessageLookupByLibrary.simpleMessage("Explorar"), + "discover_babies": MessageLookupByLibrary.simpleMessage("Bebês"), + "discover_celebrations": + MessageLookupByLibrary.simpleMessage("Comemorações"), + "discover_food": MessageLookupByLibrary.simpleMessage("Comida"), + "discover_greenery": MessageLookupByLibrary.simpleMessage("Vegetação"), + "discover_hills": MessageLookupByLibrary.simpleMessage("Colinas"), + "discover_identity": MessageLookupByLibrary.simpleMessage("Identidade"), + "discover_memes": MessageLookupByLibrary.simpleMessage("Memes"), + "discover_notes": MessageLookupByLibrary.simpleMessage("Notas"), + "discover_pets": + MessageLookupByLibrary.simpleMessage("Animais de estimação"), + "discover_receipts": MessageLookupByLibrary.simpleMessage("Recibos"), + "discover_screenshots": + MessageLookupByLibrary.simpleMessage("Capturas de tela"), + "discover_selfies": MessageLookupByLibrary.simpleMessage("Selfies"), + "discover_sunset": MessageLookupByLibrary.simpleMessage("Pôr do sol"), + "discover_visiting_cards": + MessageLookupByLibrary.simpleMessage("Cartões de visita"), + "discover_wallpapers": + MessageLookupByLibrary.simpleMessage("Papéis de parede"), + "dismiss": MessageLookupByLibrary.simpleMessage("Descartar"), + "distanceInKMUnit": MessageLookupByLibrary.simpleMessage("km"), + "doNotSignOut": MessageLookupByLibrary.simpleMessage("Não sair"), + "doThisLater": + MessageLookupByLibrary.simpleMessage("Fazer isso depois"), + "doYouWantToDiscardTheEditsYouHaveMade": + MessageLookupByLibrary.simpleMessage( + "Você quer descartar as edições que você fez?"), + "done": MessageLookupByLibrary.simpleMessage("Concluído"), + "dontSave": MessageLookupByLibrary.simpleMessage("Não salvar"), + "doubleYourStorage": + MessageLookupByLibrary.simpleMessage("Duplique seu armazenamento"), + "download": MessageLookupByLibrary.simpleMessage("Baixar"), + "downloadFailed": + MessageLookupByLibrary.simpleMessage("Falhou ao baixar"), + "downloading": MessageLookupByLibrary.simpleMessage("Baixando..."), + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, + "edit": MessageLookupByLibrary.simpleMessage("Editar"), + "editLocation": + MessageLookupByLibrary.simpleMessage("Editar localização"), + "editLocationTagTitle": + MessageLookupByLibrary.simpleMessage("Editar localização"), + "editPerson": MessageLookupByLibrary.simpleMessage("Editar pessoa"), + "editTime": MessageLookupByLibrary.simpleMessage("Editar tempo"), + "editsSaved": MessageLookupByLibrary.simpleMessage("Edições salvas"), + "editsToLocationWillOnlyBeSeenWithinEnte": + MessageLookupByLibrary.simpleMessage( + "Edições à localização serão apenas vistos no Ente"), + "eligible": MessageLookupByLibrary.simpleMessage("elegível"), + "email": MessageLookupByLibrary.simpleMessage("E-mail"), + "emailAlreadyRegistered": + MessageLookupByLibrary.simpleMessage("E-mail já registrado."), + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, + "emailNotRegistered": + MessageLookupByLibrary.simpleMessage("E-mail não registrado."), + "emailVerificationToggle": + MessageLookupByLibrary.simpleMessage("Verificação por e-mail"), + "emailYourLogs": + MessageLookupByLibrary.simpleMessage("Enviar registros por e-mail"), + "embracingThem": m30, + "emergencyContacts": + MessageLookupByLibrary.simpleMessage("Contatos de emergência"), + "empty": MessageLookupByLibrary.simpleMessage("Esvaziar"), + "emptyTrash": + MessageLookupByLibrary.simpleMessage("Esvaziar a lixeira?"), + "enable": MessageLookupByLibrary.simpleMessage("Ativar"), + "enableMLIndexingDesc": MessageLookupByLibrary.simpleMessage( + "Ente fornece aprendizado automático no dispositivo para reconhecimento facial, busca mágica e outros recursos de busca avançados."), + "enableMachineLearningBanner": MessageLookupByLibrary.simpleMessage( + "Ativar o aprendizado automático para busca mágica e reconhecimento facial"), + "enableMaps": MessageLookupByLibrary.simpleMessage("Ativar mapas"), + "enableMapsDesc": MessageLookupByLibrary.simpleMessage( + "Isso exibirá suas fotos em um mapa mundial.\n\nEste mapa é hospedado por Open Street Map, e as exatas localizações das fotos nunca serão compartilhadas.\n\nVocê pode desativar esta função a qualquer momento em Opções."), + "enabled": MessageLookupByLibrary.simpleMessage("Ativado"), + "encryptingBackup": MessageLookupByLibrary.simpleMessage( + "Criptografando cópia de segurança..."), + "encryption": MessageLookupByLibrary.simpleMessage("Criptografia"), + "encryptionKeys": + MessageLookupByLibrary.simpleMessage("Chaves de criptografia"), + "endpointUpdatedMessage": MessageLookupByLibrary.simpleMessage( + "Ponto final atualizado com sucesso"), + "endtoendEncryptedByDefault": MessageLookupByLibrary.simpleMessage( + "Criptografado de ponta a ponta por padrão"), + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": + MessageLookupByLibrary.simpleMessage( + "Ente pode criptografar e preservar arquivos apenas se você conceder acesso a eles"), + "entePhotosPerm": MessageLookupByLibrary.simpleMessage( + "Ente precisa de permissão para preservar suas fotos"), + "enteSubscriptionPitch": MessageLookupByLibrary.simpleMessage( + "O Ente preserva suas memórias, então eles sempre estão disponíveis para você, mesmo se você perder o dispositivo."), + "enteSubscriptionShareWithFamily": MessageLookupByLibrary.simpleMessage( + "Sua família também poderá ser adicionada ao seu plano."), + "enterAlbumName": + MessageLookupByLibrary.simpleMessage("Inserir nome do álbum"), + "enterCode": MessageLookupByLibrary.simpleMessage("Insira o código"), + "enterCodeDescription": MessageLookupByLibrary.simpleMessage( + "Insira o código fornecido pelo seu amigo para reivindicar o armazenamento grátis para os dois"), + "enterDateOfBirth": + MessageLookupByLibrary.simpleMessage("Aniversário (opcional)"), + "enterEmail": MessageLookupByLibrary.simpleMessage("Inserir e-mail"), + "enterFileName": + MessageLookupByLibrary.simpleMessage("Inserir nome do arquivo"), + "enterName": MessageLookupByLibrary.simpleMessage("Inserir nome"), + "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Insira uma senha nova para criptografar seus dados"), + "enterPassword": MessageLookupByLibrary.simpleMessage("Inserir senha"), + "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Insira uma senha que podemos usar para criptografar seus dados"), + "enterPersonName": + MessageLookupByLibrary.simpleMessage("Inserir nome da pessoa"), + "enterPin": MessageLookupByLibrary.simpleMessage("Inserir PIN"), + "enterReferralCode": MessageLookupByLibrary.simpleMessage( + "Inserir código de referência"), + "enterThe6digitCodeFromnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Digite o código de 6 dígitos do\naplicativo de autenticador"), + "enterValidEmail": MessageLookupByLibrary.simpleMessage( + "Insira um endereço de e-mail válido."), + "enterYourEmailAddress": MessageLookupByLibrary.simpleMessage( + "Insira seu endereço de e-mail"), + "enterYourPassword": + MessageLookupByLibrary.simpleMessage("Insira sua senha"), + "enterYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Insira sua chave de recuperação"), + "error": MessageLookupByLibrary.simpleMessage("Erro"), + "everywhere": + MessageLookupByLibrary.simpleMessage("em todas as partes"), + "exif": MessageLookupByLibrary.simpleMessage("EXIF"), + "existingUser": + MessageLookupByLibrary.simpleMessage("Usuário existente"), + "expiredLinkInfo": MessageLookupByLibrary.simpleMessage( + "O link expirou. Selecione um novo tempo de expiração ou desative a expiração do link."), + "exportLogs": + MessageLookupByLibrary.simpleMessage("Exportar registros"), + "exportYourData": + MessageLookupByLibrary.simpleMessage("Exportar dados"), + "extraPhotosFound": MessageLookupByLibrary.simpleMessage( + "Fotos adicionais encontradas"), + "extraPhotosFoundFor": m31, + "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( + "Rosto não agrupado ainda, volte aqui mais tarde"), + "faceRecognition": + MessageLookupByLibrary.simpleMessage("Reconhecimento facial"), + "faces": MessageLookupByLibrary.simpleMessage("Rostos"), + "failed": MessageLookupByLibrary.simpleMessage("Falhou"), + "failedToApplyCode": + MessageLookupByLibrary.simpleMessage("Falhou ao aplicar código"), + "failedToCancel": + MessageLookupByLibrary.simpleMessage("Falhou ao cancelar"), + "failedToDownloadVideo": + MessageLookupByLibrary.simpleMessage("Falhou ao baixar vídeo"), + "failedToFetchActiveSessions": MessageLookupByLibrary.simpleMessage( + "Falhou ao obter sessões ativas"), + "failedToFetchOriginalForEdit": MessageLookupByLibrary.simpleMessage( + "Falhou ao obter original para edição"), + "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( + "Não foi possível buscar os detalhes de referência. Tente novamente mais tarde."), + "failedToLoadAlbums": + MessageLookupByLibrary.simpleMessage("Falhou ao carregar álbuns"), + "failedToPlayVideo": + MessageLookupByLibrary.simpleMessage("Falhou ao reproduzir vídeo"), + "failedToRefreshStripeSubscription": + MessageLookupByLibrary.simpleMessage( + "Falhou ao atualizar assinatura"), + "failedToRenew": + MessageLookupByLibrary.simpleMessage("Falhou ao renovar"), + "failedToVerifyPaymentStatus": MessageLookupByLibrary.simpleMessage( + "Falhou ao verificar estado do pagamento"), + "familyPlanOverview": MessageLookupByLibrary.simpleMessage( + "Adicione 5 familiares para seu plano existente sem pagar nenhum custo adicional.\n\nCada membro ganha seu espaço privado, significando que eles não podem ver os arquivos dos outros a menos que eles sejam compartilhados.\n\nOs planos familiares estão disponíveis para clientes que já tem uma assinatura paga do Ente.\n\nAssine agora para iniciar!"), + "familyPlanPortalTitle": + MessageLookupByLibrary.simpleMessage("Família"), + "familyPlans": + MessageLookupByLibrary.simpleMessage("Planos familiares"), + "faq": MessageLookupByLibrary.simpleMessage("Perguntas frequentes"), + "faqs": MessageLookupByLibrary.simpleMessage("Perguntas frequentes"), + "favorite": MessageLookupByLibrary.simpleMessage("Favorito"), + "feastingWithThem": m32, + "feedback": MessageLookupByLibrary.simpleMessage("Feedback"), + "file": MessageLookupByLibrary.simpleMessage("Arquivo"), + "fileFailedToSaveToGallery": MessageLookupByLibrary.simpleMessage( + "Falhou ao salvar arquivo na galeria"), + "fileInfoAddDescHint": + MessageLookupByLibrary.simpleMessage("Adicionar descrição..."), + "fileNotUploadedYet": + MessageLookupByLibrary.simpleMessage("Arquivo ainda não enviado"), + "fileSavedToGallery": + MessageLookupByLibrary.simpleMessage("Arquivo salvo na galeria"), + "fileTypes": MessageLookupByLibrary.simpleMessage("Tipos de arquivo"), + "fileTypesAndNames": + MessageLookupByLibrary.simpleMessage("Tipos de arquivo e nomes"), + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, + "filesDeleted": + MessageLookupByLibrary.simpleMessage("Arquivos excluídos"), + "filesSavedToGallery": + MessageLookupByLibrary.simpleMessage("Arquivos salvos na galeria"), + "findPeopleByName": MessageLookupByLibrary.simpleMessage( + "Busque pessoas facilmente pelo nome"), + "findThemQuickly": + MessageLookupByLibrary.simpleMessage("Busque-os rapidamente"), + "flip": MessageLookupByLibrary.simpleMessage("Inverter"), + "food": MessageLookupByLibrary.simpleMessage("Amor por culinária"), + "forYourMemories": + MessageLookupByLibrary.simpleMessage("para suas memórias"), + "forgotPassword": + MessageLookupByLibrary.simpleMessage("Esqueci a senha"), + "foundFaces": + MessageLookupByLibrary.simpleMessage("Rostos encontrados"), + "freeStorageClaimed": + MessageLookupByLibrary.simpleMessage("Armaz. grátis reivindicado"), + "freeStorageOnReferralSuccess": m35, + "freeStorageUsable": + MessageLookupByLibrary.simpleMessage("Armazenamento disponível"), + "freeTrial": MessageLookupByLibrary.simpleMessage("Avaliação grátis"), + "freeTrialValidTill": m36, + "freeUpAccessPostDelete": m37, + "freeUpAmount": m38, + "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage( + "Liberar espaço no dispositivo"), + "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( + "Economize espaço em seu dispositivo por limpar arquivos já salvos com segurança."), + "freeUpSpace": MessageLookupByLibrary.simpleMessage("Liberar espaço"), + "freeUpSpaceSaving": m39, + "gallery": MessageLookupByLibrary.simpleMessage("Galeria"), + "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( + "Até 1.000 memórias exibidas na galeria"), + "general": MessageLookupByLibrary.simpleMessage("Geral"), + "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( + "Gerando chaves de criptografia..."), + "genericProgress": m40, + "goToSettings": MessageLookupByLibrary.simpleMessage("Ir às opções"), + "googlePlayId": + MessageLookupByLibrary.simpleMessage("ID do Google Play"), + "grantFullAccessPrompt": MessageLookupByLibrary.simpleMessage( + "Permita o acesso a todas as fotos nas opções do aplicativo"), + "grantPermission": + MessageLookupByLibrary.simpleMessage("Conceder permissões"), + "greenery": MessageLookupByLibrary.simpleMessage("A vegetação verde"), + "groupNearbyPhotos": + MessageLookupByLibrary.simpleMessage("Agrupar fotos próximas"), + "guestView": MessageLookupByLibrary.simpleMessage("Vista do convidado"), + "guestViewEnablePreSteps": MessageLookupByLibrary.simpleMessage( + "Para ativar a vista do convidado, defina uma senha de acesso no dispositivo ou bloqueie sua tela nas opções do sistema."), + "hearUsExplanation": MessageLookupByLibrary.simpleMessage( + "Não rastreamos instalações de aplicativo. Seria útil se você contasse onde nos encontrou!"), + "hearUsWhereTitle": MessageLookupByLibrary.simpleMessage( + "Como você soube do Ente? (opcional)"), + "help": MessageLookupByLibrary.simpleMessage("Ajuda"), + "hidden": MessageLookupByLibrary.simpleMessage("Oculto"), + "hide": MessageLookupByLibrary.simpleMessage("Ocultar"), + "hideContent": MessageLookupByLibrary.simpleMessage("Ocultar conteúdo"), + "hideContentDescriptionAndroid": MessageLookupByLibrary.simpleMessage( + "Oculta os conteúdos do aplicativo no seletor de aplicativos e desativa capturas de tela"), + "hideContentDescriptionIos": MessageLookupByLibrary.simpleMessage( + "Oculta o conteúdo no seletor de aplicativos"), + "hideSharedItemsFromHomeGallery": MessageLookupByLibrary.simpleMessage( + "Ocultar itens compartilhados da galeria inicial"), + "hiding": MessageLookupByLibrary.simpleMessage("Ocultando..."), + "hikingWithThem": m41, + "hostedAtOsmFrance": + MessageLookupByLibrary.simpleMessage("Hospedado em OSM France"), + "howItWorks": MessageLookupByLibrary.simpleMessage("Como funciona"), + "howToViewShareeVerificationID": MessageLookupByLibrary.simpleMessage( + "Peça-os para manterem pressionado no endereço de e-mail na tela de opções, e verifique-se os IDs de ambos os dispositivos correspondem."), + "iOSGoToSettingsDescription": MessageLookupByLibrary.simpleMessage( + "A autenticação biométrica não está definida no dispositivo. Ative o Touch ID ou Face ID no dispositivo."), + "iOSLockOut": MessageLookupByLibrary.simpleMessage( + "A autenticação biométrica está desativada. Bloqueie e desbloqueie sua tela para ativá-la."), + "iOSOkButton": MessageLookupByLibrary.simpleMessage("OK"), + "ignoreUpdate": MessageLookupByLibrary.simpleMessage("Ignorar"), + "ignored": MessageLookupByLibrary.simpleMessage("ignorado"), + "ignoredFolderUploadReason": MessageLookupByLibrary.simpleMessage( + "Alguns arquivos neste álbum são ignorados do envio porque eles foram anteriormente excluídos do Ente."), + "imageNotAnalyzed": + MessageLookupByLibrary.simpleMessage("Imagem não analisada"), + "immediately": MessageLookupByLibrary.simpleMessage("Imediatamente"), + "importing": MessageLookupByLibrary.simpleMessage("Importando...."), + "incorrectCode": + MessageLookupByLibrary.simpleMessage("Código incorreto"), + "incorrectPasswordTitle": + MessageLookupByLibrary.simpleMessage("Senha incorreta"), + "incorrectRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Chave de recuperação incorreta"), + "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage( + "A chave de recuperação inserida está incorreta"), + "incorrectRecoveryKeyTitle": MessageLookupByLibrary.simpleMessage( + "Chave de recuperação incorreta"), + "indexedItems": MessageLookupByLibrary.simpleMessage("Itens indexados"), + "indexingIsPaused": MessageLookupByLibrary.simpleMessage( + "A indexação parou, ela será retomada automaticamente quando o dispositivo estiver pronto."), + "ineligible": MessageLookupByLibrary.simpleMessage("Inelegível"), + "info": MessageLookupByLibrary.simpleMessage("Info"), + "insecureDevice": + MessageLookupByLibrary.simpleMessage("Dispositivo inseguro"), + "installManually": + MessageLookupByLibrary.simpleMessage("Instalar manualmente"), + "invalidEmailAddress": + MessageLookupByLibrary.simpleMessage("Endereço de e-mail inválido"), + "invalidEndpoint": + MessageLookupByLibrary.simpleMessage("Ponto final inválido"), + "invalidEndpointMessage": MessageLookupByLibrary.simpleMessage( + "Desculpe, o ponto final inserido é inválido. Insira um ponto final válido e tente novamente."), + "invalidKey": MessageLookupByLibrary.simpleMessage("Chave inválida"), + "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( + "A chave de recuperação que você inseriu não é válida. Certifique-se de conter 24 caracteres, e verifique a ortografia de cada um deles.\n\nSe você inseriu um código de recuperação mais antigo, verifique se ele tem 64 caracteres e verifique cada um deles."), + "invite": MessageLookupByLibrary.simpleMessage("Convidar"), + "inviteToEnte": + MessageLookupByLibrary.simpleMessage("Convidar ao Ente"), + "inviteYourFriends": + MessageLookupByLibrary.simpleMessage("Convide seus amigos"), + "inviteYourFriendsToEnte": + MessageLookupByLibrary.simpleMessage("Convide seus amigos ao Ente"), + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": + MessageLookupByLibrary.simpleMessage( + "Parece que algo deu errado. Tente novamente mais tarde. Caso o erro persistir, por favor, entre em contato com nossa equipe."), + "itemCount": m42, + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": + MessageLookupByLibrary.simpleMessage( + "Os itens exibem o número de dias restantes antes da exclusão permanente"), + "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( + "Os itens selecionados serão removidos deste álbum"), + "join": MessageLookupByLibrary.simpleMessage("Unir-se"), + "joinAlbum": MessageLookupByLibrary.simpleMessage("Unir-se ao álbum"), + "joinAlbumConfirmationDialogBody": MessageLookupByLibrary.simpleMessage( + "Unir-se ao álbum fará que seu e-mail seja visível a todos do álbum."), + "joinAlbumSubtext": MessageLookupByLibrary.simpleMessage( + "para visualizar e adicionar suas fotos"), + "joinAlbumSubtextViewer": MessageLookupByLibrary.simpleMessage( + "para adicionar isso aos álbuns compartilhados"), + "joinDiscord": + MessageLookupByLibrary.simpleMessage("Junte-se ao Discord"), + "keepPhotos": MessageLookupByLibrary.simpleMessage("Manter fotos"), + "kiloMeterUnit": MessageLookupByLibrary.simpleMessage("km"), + "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( + "Ajude-nos com esta informação"), + "language": MessageLookupByLibrary.simpleMessage("Idioma"), + "lastTimeWithThem": m43, + "lastUpdated": + MessageLookupByLibrary.simpleMessage("Última atualização"), + "lastYearsTrip": + MessageLookupByLibrary.simpleMessage("Viajem do ano passado"), + "leave": MessageLookupByLibrary.simpleMessage("Sair"), + "leaveAlbum": MessageLookupByLibrary.simpleMessage("Sair do álbum"), + "leaveFamily": + MessageLookupByLibrary.simpleMessage("Sair do plano familiar"), + "leaveSharedAlbum": MessageLookupByLibrary.simpleMessage( + "Sair do álbum compartilhado?"), + "left": MessageLookupByLibrary.simpleMessage("Esquerda"), + "legacy": MessageLookupByLibrary.simpleMessage("Legado"), + "legacyAccounts": + MessageLookupByLibrary.simpleMessage("Contas legadas"), + "legacyInvite": m44, + "legacyPageDesc": MessageLookupByLibrary.simpleMessage( + "O legado permite que contatos confiáveis acessem sua conta em sua ausência."), + "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( + "Contatos confiáveis podem iniciar recuperação de conta. Se não cancelado dentro de 30 dias, redefina sua senha e acesse sua conta."), + "light": MessageLookupByLibrary.simpleMessage("Brilho"), + "lightTheme": MessageLookupByLibrary.simpleMessage("Claro"), + "link": MessageLookupByLibrary.simpleMessage("Vincular"), + "linkCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Link copiado para a área de transferência"), + "linkDeviceLimit": + MessageLookupByLibrary.simpleMessage("Limite do dispositivo"), + "linkEmail": MessageLookupByLibrary.simpleMessage("Vincular e-mail"), + "linkEmailToContactBannerCaption": + MessageLookupByLibrary.simpleMessage("para compartilhar rápido"), + "linkEnabled": MessageLookupByLibrary.simpleMessage("Ativado"), + "linkExpired": MessageLookupByLibrary.simpleMessage("Expirado"), + "linkExpiresOn": m45, + "linkExpiry": MessageLookupByLibrary.simpleMessage("Expiração do link"), + "linkHasExpired": + MessageLookupByLibrary.simpleMessage("O link expirou"), + "linkNeverExpires": MessageLookupByLibrary.simpleMessage("Nunca"), + "linkPerson": MessageLookupByLibrary.simpleMessage("Vincular pessoa"), + "linkPersonCaption": MessageLookupByLibrary.simpleMessage( + "para melhorar o compartilhamento"), + "linkPersonToEmail": m46, + "linkPersonToEmailConfirmation": m47, + "livePhotos": MessageLookupByLibrary.simpleMessage("Fotos animadas"), + "loadMessage1": MessageLookupByLibrary.simpleMessage( + "Você pode compartilhar sua assinatura com seus familiares"), + "loadMessage2": MessageLookupByLibrary.simpleMessage( + "Nós preservamos mais de 30 milhões de memórias até então"), + "loadMessage3": MessageLookupByLibrary.simpleMessage( + "Mantemos 3 cópias dos seus dados, uma em um abrigo subterrâneo"), + "loadMessage4": MessageLookupByLibrary.simpleMessage( + "Todos os nossos aplicativos são de código aberto"), + "loadMessage5": MessageLookupByLibrary.simpleMessage( + "Nosso código-fonte e criptografia foram auditadas externamente"), + "loadMessage6": MessageLookupByLibrary.simpleMessage( + "Você pode compartilhar links para seus álbuns com seus entes queridos"), + "loadMessage7": MessageLookupByLibrary.simpleMessage( + "Nossos aplicativos móveis são executados em segundo plano para criptografar e copiar com segurança quaisquer fotos novas que você acessar"), + "loadMessage8": MessageLookupByLibrary.simpleMessage( + "web.ente.io tem um enviador mais rápido"), + "loadMessage9": MessageLookupByLibrary.simpleMessage( + "Nós usamos Xchacha20Poly1305 para criptografar seus dados com segurança"), + "loadingExifData": + MessageLookupByLibrary.simpleMessage("Carregando dados EXIF..."), + "loadingGallery": + MessageLookupByLibrary.simpleMessage("Carregando galeria..."), + "loadingMessage": + MessageLookupByLibrary.simpleMessage("Carregando suas fotos..."), + "loadingModel": + MessageLookupByLibrary.simpleMessage("Baixando modelos..."), + "loadingYourPhotos": + MessageLookupByLibrary.simpleMessage("Carregando suas fotos..."), + "localGallery": MessageLookupByLibrary.simpleMessage("Galeria local"), + "localIndexing": + MessageLookupByLibrary.simpleMessage("Indexação local"), + "localSyncErrorMessage": MessageLookupByLibrary.simpleMessage( + "Ocorreu um erro devido à sincronização de localização das fotos estar levando mais tempo que o esperado. Entre em contato conosco."), + "location": MessageLookupByLibrary.simpleMessage("Localização"), + "locationName": + MessageLookupByLibrary.simpleMessage("Nome da localização"), + "locationTagFeatureDescription": MessageLookupByLibrary.simpleMessage( + "Uma etiqueta de localização agrupa todas as fotos fotografadas em algum raio de uma foto"), + "locations": MessageLookupByLibrary.simpleMessage("Localizações"), + "lockButtonLabel": MessageLookupByLibrary.simpleMessage("Bloquear"), + "lockscreen": MessageLookupByLibrary.simpleMessage("Tela de bloqueio"), + "logInLabel": MessageLookupByLibrary.simpleMessage("Entrar"), + "loggingOut": MessageLookupByLibrary.simpleMessage("Desconectando..."), + "loginSessionExpired": + MessageLookupByLibrary.simpleMessage("Sessão expirada"), + "loginSessionExpiredDetails": MessageLookupByLibrary.simpleMessage( + "Sua sessão expirou. Registre-se novamente."), + "loginTerms": MessageLookupByLibrary.simpleMessage( + "Ao clicar em entrar, eu concordo com os termos de serviço e a política de privacidade"), + "loginWithTOTP": + MessageLookupByLibrary.simpleMessage("Registrar com TOTP"), + "logout": MessageLookupByLibrary.simpleMessage("Encerrar sessão"), + "logsDialogBody": MessageLookupByLibrary.simpleMessage( + "Isso enviará através dos registros para ajudar-nos a resolver seu problema. Saiba que, nome de arquivos serão incluídos para ajudar a buscar problemas com arquivos específicos."), + "longPressAnEmailToVerifyEndToEndEncryption": + MessageLookupByLibrary.simpleMessage( + "Pressione um e-mail para verificar a criptografia ponta a ponta."), + "longpressOnAnItemToViewInFullscreen": + MessageLookupByLibrary.simpleMessage( + "Mantenha pressionado em um item para visualizá-lo em tela cheia"), + "loopVideoOff": + MessageLookupByLibrary.simpleMessage("Repetir vídeo desativado"), + "loopVideoOn": + MessageLookupByLibrary.simpleMessage("Repetir vídeo ativado"), + "lostDevice": + MessageLookupByLibrary.simpleMessage("Perdeu o dispositivo?"), + "machineLearning": + MessageLookupByLibrary.simpleMessage("Aprendizado automático"), + "magicSearch": MessageLookupByLibrary.simpleMessage("Busca mágica"), + "magicSearchHint": MessageLookupByLibrary.simpleMessage( + "A busca mágica permite buscar fotos pelo conteúdo, p. e.x. \'flor\', \'carro vermelho\', \'identidade\'"), + "manage": MessageLookupByLibrary.simpleMessage("Gerenciar"), + "manageDeviceStorage": MessageLookupByLibrary.simpleMessage( + "Gerenciar cache do dispositivo"), + "manageDeviceStorageDesc": MessageLookupByLibrary.simpleMessage( + "Reveja e limpe o armazenamento de cache local."), + "manageFamily": + MessageLookupByLibrary.simpleMessage("Gerenciar família"), + "manageLink": MessageLookupByLibrary.simpleMessage("Gerenciar link"), + "manageParticipants": MessageLookupByLibrary.simpleMessage("Gerenciar"), + "manageSubscription": + MessageLookupByLibrary.simpleMessage("Gerenciar assinatura"), + "manualPairDesc": MessageLookupByLibrary.simpleMessage( + "Parear com PIN funciona com qualquer tela que queira visualizar seu álbum."), + "map": MessageLookupByLibrary.simpleMessage("Mapa"), + "maps": MessageLookupByLibrary.simpleMessage("Mapas"), + "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), + "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), + "me": MessageLookupByLibrary.simpleMessage("Eu"), + "memoryCount": m48, + "merchandise": MessageLookupByLibrary.simpleMessage("Produtos"), + "mergeWithExisting": + MessageLookupByLibrary.simpleMessage("Juntar com o existente"), + "mergedPhotos": MessageLookupByLibrary.simpleMessage("Fotos mescladas"), + "mlConsent": MessageLookupByLibrary.simpleMessage( + "Ativar o aprendizado automático"), + "mlConsentConfirmation": + MessageLookupByLibrary.simpleMessage("Concordo e desejo ativá-lo"), + "mlConsentDescription": MessageLookupByLibrary.simpleMessage( + "Se ativar o aprendizado automático, Ente extrairá informações de geometria facial dos arquivos, incluindo aqueles compartilhados consigo.\n\nIsso acontecerá em seu dispositivo, e qualquer informação biométrica gerada será criptografada de ponta a ponta."), + "mlConsentPrivacy": MessageLookupByLibrary.simpleMessage( + "Clique aqui para mais detalhes sobre este recurso na política de privacidade"), + "mlConsentTitle": MessageLookupByLibrary.simpleMessage( + "Ativar aprendizado automático?"), + "mlIndexingDescription": MessageLookupByLibrary.simpleMessage( + "Saiba que o aprendizado automático afetará a bateria do dispositivo negativamente até todos os itens serem indexados. Utilize a versão para computadores para melhor indexação, todos os resultados se auto-sincronizaram."), + "mobileWebDesktop": + MessageLookupByLibrary.simpleMessage("Celular, Web, Computador"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Moderado"), + "modifyYourQueryOrTrySearchingFor": + MessageLookupByLibrary.simpleMessage( + "Altere o termo de busca ou tente consultar"), + "moments": MessageLookupByLibrary.simpleMessage("Momentos"), + "month": MessageLookupByLibrary.simpleMessage("mês"), + "monthly": MessageLookupByLibrary.simpleMessage("Mensal"), + "moon": MessageLookupByLibrary.simpleMessage("Na luz do luar"), + "moreDetails": MessageLookupByLibrary.simpleMessage("Mais detalhes"), + "mostRecent": MessageLookupByLibrary.simpleMessage("Mais recente"), + "mostRelevant": MessageLookupByLibrary.simpleMessage("Mais relevante"), + "mountains": MessageLookupByLibrary.simpleMessage("Sob as montanhas"), + "moveItem": m49, + "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage( + "Mover fotos selecionadas para uma data"), + "moveToAlbum": + MessageLookupByLibrary.simpleMessage("Mover para o álbum"), + "moveToHiddenAlbum": + MessageLookupByLibrary.simpleMessage("Mover ao álbum oculto"), + "movedSuccessfullyTo": m50, + "movedToTrash": + MessageLookupByLibrary.simpleMessage("Movido para a lixeira"), + "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Movendo arquivos para o álbum..."), + "name": MessageLookupByLibrary.simpleMessage("Nome"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Nomear álbum"), + "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( + "Não foi possível conectar ao Ente, tente novamente mais tarde. Se o erro persistir, entre em contato com o suporte."), + "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( + "Não foi possível conectar-se ao Ente, verifique suas configurações de rede e entre em contato com o suporte se o erro persistir."), + "never": MessageLookupByLibrary.simpleMessage("Nunca"), + "newAlbum": MessageLookupByLibrary.simpleMessage("Novo álbum"), + "newLocation": MessageLookupByLibrary.simpleMessage("Nova localização"), + "newPerson": MessageLookupByLibrary.simpleMessage("Nova pessoa"), + "newRange": MessageLookupByLibrary.simpleMessage("Novo intervalo"), + "newToEnte": MessageLookupByLibrary.simpleMessage("Novo no Ente"), + "newest": MessageLookupByLibrary.simpleMessage("Mais recente"), + "next": MessageLookupByLibrary.simpleMessage("Próximo"), + "no": MessageLookupByLibrary.simpleMessage("Não"), + "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( + "Nenhum álbum compartilhado por você ainda"), + "noDeviceFound": MessageLookupByLibrary.simpleMessage( + "Nenhum dispositivo encontrado"), + "noDeviceLimit": MessageLookupByLibrary.simpleMessage("Nenhum"), + "noDeviceThatCanBeDeleted": MessageLookupByLibrary.simpleMessage( + "Você não tem arquivos neste dispositivo que possam ser excluídos"), + "noDuplicates": + MessageLookupByLibrary.simpleMessage("✨ Sem duplicatas"), + "noEnteAccountExclamation": + MessageLookupByLibrary.simpleMessage("Nenhuma conta Ente!"), + "noExifData": MessageLookupByLibrary.simpleMessage("Sem dados EXIF"), + "noFacesFound": + MessageLookupByLibrary.simpleMessage("Nenhum rosto encontrado"), + "noHiddenPhotosOrVideos": + MessageLookupByLibrary.simpleMessage("Sem fotos ou vídeos ocultos"), + "noImagesWithLocation": MessageLookupByLibrary.simpleMessage( + "Nenhuma imagem com localização"), + "noInternetConnection": + MessageLookupByLibrary.simpleMessage("Sem conexão à internet"), + "noPhotosAreBeingBackedUpRightNow": + MessageLookupByLibrary.simpleMessage( + "No momento não há fotos sendo copiadas com segurança"), + "noPhotosFoundHere": MessageLookupByLibrary.simpleMessage( + "Nenhuma foto encontrada aqui"), + "noQuickLinksSelected": MessageLookupByLibrary.simpleMessage( + "Nenhum link rápido selecionado"), + "noRecoveryKey": + MessageLookupByLibrary.simpleMessage("Sem chave de recuperação?"), + "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( + "Devido à natureza do nosso protocolo de criptografia de ponta a ponta, seus dados não podem ser descriptografados sem sua senha ou chave de recuperação"), + "noResults": MessageLookupByLibrary.simpleMessage("Nenhum resultado"), + "noResultsFound": + MessageLookupByLibrary.simpleMessage("Nenhum resultado encontrado"), + "noSuggestionsForPerson": m51, + "noSystemLockFound": MessageLookupByLibrary.simpleMessage( + "Nenhum bloqueio do sistema encontrado"), + "notPersonLabel": m52, + "notThisPerson": + MessageLookupByLibrary.simpleMessage("Não é esta pessoa?"), + "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( + "Nada compartilhado com você ainda"), + "nothingToSeeHere": + MessageLookupByLibrary.simpleMessage("Nada para ver aqui! 👀"), + "notifications": MessageLookupByLibrary.simpleMessage("Notificações"), + "ok": MessageLookupByLibrary.simpleMessage("OK"), + "onDevice": MessageLookupByLibrary.simpleMessage("No dispositivo"), + "onEnte": MessageLookupByLibrary.simpleMessage( + "No ente"), + "onTheRoad": + MessageLookupByLibrary.simpleMessage("Na estrada novamente"), + "onlyFamilyAdminCanChangeCode": m53, + "onlyThem": MessageLookupByLibrary.simpleMessage("Apenas eles"), + "oops": MessageLookupByLibrary.simpleMessage("Ops"), + "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( + "Opa! Não foi possível salvar as edições"), + "oopsSomethingWentWrong": + MessageLookupByLibrary.simpleMessage("Ops, algo deu errado"), + "openAlbumInBrowser": + MessageLookupByLibrary.simpleMessage("Abrir álbum no navegador"), + "openAlbumInBrowserTitle": MessageLookupByLibrary.simpleMessage( + "Use o aplicativo da web para adicionar fotos a este álbum"), + "openFile": MessageLookupByLibrary.simpleMessage("Abrir arquivo"), + "openSettings": MessageLookupByLibrary.simpleMessage("Abrir opções"), + "openTheItem": + MessageLookupByLibrary.simpleMessage("• Abra a foto ou vídeo"), + "openstreetmapContributors": MessageLookupByLibrary.simpleMessage( + "Contribuidores do OpenStreetMap"), + "optionalAsShortAsYouLike": MessageLookupByLibrary.simpleMessage( + "Opcional, tão curto como quiser..."), + "orMergeWithExistingPerson": + MessageLookupByLibrary.simpleMessage("Ou mesclar com existente"), + "orPickAnExistingOne": + MessageLookupByLibrary.simpleMessage("Ou escolha um existente"), + "orPickFromYourContacts": MessageLookupByLibrary.simpleMessage( + "ou escolher dos seus contatos"), + "pair": MessageLookupByLibrary.simpleMessage("Parear"), + "pairWithPin": MessageLookupByLibrary.simpleMessage("Parear com PIN"), + "pairingComplete": + MessageLookupByLibrary.simpleMessage("Pareamento concluído"), + "panorama": MessageLookupByLibrary.simpleMessage("Panorama"), + "partyWithThem": m54, + "passKeyPendingVerification": + MessageLookupByLibrary.simpleMessage("Verificação pendente"), + "passkey": MessageLookupByLibrary.simpleMessage("Chave de acesso"), + "passkeyAuthTitle": MessageLookupByLibrary.simpleMessage( + "Verificação de chave de acesso"), + "password": MessageLookupByLibrary.simpleMessage("Senha"), + "passwordChangedSuccessfully": + MessageLookupByLibrary.simpleMessage("Senha alterada com sucesso"), + "passwordLock": + MessageLookupByLibrary.simpleMessage("Bloqueio por senha"), + "passwordStrength": m55, + "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( + "A força da senha é calculada considerando o comprimento dos dígitos, carácteres usados, e se ou não a senha aparece nas 10.000 senhas usadas."), + "passwordWarning": MessageLookupByLibrary.simpleMessage( + "Nós não armazenamos esta senha, se você esquecer, nós não poderemos descriptografar seus dados"), + "paymentDetails": + MessageLookupByLibrary.simpleMessage("Detalhes de pagamento"), + "paymentFailed": + MessageLookupByLibrary.simpleMessage("O pagamento falhou"), + "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( + "Infelizmente o pagamento falhou. Entre em contato com o suporte e nós ajudaremos você!"), + "paymentFailedTalkToProvider": m56, + "pendingItems": MessageLookupByLibrary.simpleMessage("Itens pendentes"), + "pendingSync": + MessageLookupByLibrary.simpleMessage("Sincronização pendente"), + "people": MessageLookupByLibrary.simpleMessage("Pessoas"), + "peopleUsingYourCode": + MessageLookupByLibrary.simpleMessage("Pessoas que usam seu código"), + "permDeleteWarning": MessageLookupByLibrary.simpleMessage( + "Todos os itens na lixeira serão excluídos permanentemente\n\nEsta ação não pode ser desfeita"), + "permanentlyDelete": + MessageLookupByLibrary.simpleMessage("Excluir permanentemente"), + "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( + "Excluir permanentemente do dispositivo?"), + "personIsAge": m57, + "personName": MessageLookupByLibrary.simpleMessage("Nome da pessoa"), + "personTurningAge": m58, + "pets": MessageLookupByLibrary.simpleMessage("Companhias peludas"), + "photoDescriptions": + MessageLookupByLibrary.simpleMessage("Descrições das fotos"), + "photoGridSize": + MessageLookupByLibrary.simpleMessage("Tamanho da grade de fotos"), + "photoSmallCase": MessageLookupByLibrary.simpleMessage("foto"), + "photocountPhotos": m59, + "photos": MessageLookupByLibrary.simpleMessage("Fotos"), + "photosAddedByYouWillBeRemovedFromTheAlbum": + MessageLookupByLibrary.simpleMessage( + "Suas fotos adicionadas serão removidas do álbum"), + "photosCount": m60, + "photosKeepRelativeTimeDifference": + MessageLookupByLibrary.simpleMessage( + "As fotos mantêm a diferença de tempo relativo"), + "pickCenterPoint": + MessageLookupByLibrary.simpleMessage("Escolha o ponto central"), + "pinAlbum": MessageLookupByLibrary.simpleMessage("Fixar álbum"), + "pinLock": MessageLookupByLibrary.simpleMessage("Bloqueio por PIN"), + "playOnTv": + MessageLookupByLibrary.simpleMessage("Reproduzir álbum na TV"), + "playOriginal": + MessageLookupByLibrary.simpleMessage("Reproduzir original"), + "playStoreFreeTrialValidTill": m61, + "playStream": + MessageLookupByLibrary.simpleMessage("Reproduzir transmissão"), + "playstoreSubscription": + MessageLookupByLibrary.simpleMessage("Assinatura da PlayStore"), + "pleaseCheckYourInternetConnectionAndTryAgain": + MessageLookupByLibrary.simpleMessage( + "Verifique sua conexão com a internet e tente novamente."), + "pleaseContactSupportAndWeWillBeHappyToHelp": + MessageLookupByLibrary.simpleMessage( + "Entre em contato com support@ente.io e nós ficaremos felizes em ajudar!"), + "pleaseContactSupportIfTheProblemPersists": + MessageLookupByLibrary.simpleMessage( + "Por favor, contate o suporte se o problema persistir"), + "pleaseEmailUsAt": m62, + "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( + "Por favor, conceda as permissões"), + "pleaseLoginAgain": + MessageLookupByLibrary.simpleMessage("Registre-se novamente"), + "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( + "Selecione links rápidos para remover"), + "pleaseSendTheLogsTo": m63, + "pleaseTryAgain": + MessageLookupByLibrary.simpleMessage("Tente novamente"), + "pleaseVerifyTheCodeYouHaveEntered": + MessageLookupByLibrary.simpleMessage("Verifique o código inserido"), + "pleaseWait": MessageLookupByLibrary.simpleMessage("Aguarde..."), + "pleaseWaitDeletingAlbum": + MessageLookupByLibrary.simpleMessage("Aguarde, excluindo álbum"), + "pleaseWaitForSometimeBeforeRetrying": + MessageLookupByLibrary.simpleMessage( + "Por favor, aguarde mais algum tempo antes de tentar novamente"), + "pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage( + "Aguarde um pouco, isso talvez leve um tempo."), + "posingWithThem": m64, + "preparingLogs": + MessageLookupByLibrary.simpleMessage("Preparando registros..."), + "preserveMore": MessageLookupByLibrary.simpleMessage("Preservar mais"), + "pressAndHoldToPlayVideo": MessageLookupByLibrary.simpleMessage( + "Pressione e segure para reproduzir o vídeo"), + "pressAndHoldToPlayVideoDetailed": MessageLookupByLibrary.simpleMessage( + "Pressione e segure na imagem para reproduzir o vídeo"), + "previous": MessageLookupByLibrary.simpleMessage("Anterior"), + "privacy": MessageLookupByLibrary.simpleMessage("Privacidade"), + "privacyPolicyTitle": + MessageLookupByLibrary.simpleMessage("Política de Privacidade"), + "privateBackups": + MessageLookupByLibrary.simpleMessage("Cópias privadas"), + "privateSharing": + MessageLookupByLibrary.simpleMessage("Compartilha privada"), + "proceed": MessageLookupByLibrary.simpleMessage("Continuar"), + "processed": MessageLookupByLibrary.simpleMessage("Processado"), + "processing": MessageLookupByLibrary.simpleMessage("Processando"), + "processingImport": m65, + "processingVideos": + MessageLookupByLibrary.simpleMessage("Processando vídeos"), + "publicLinkCreated": + MessageLookupByLibrary.simpleMessage("Link público criado"), + "publicLinkEnabled": + MessageLookupByLibrary.simpleMessage("Link público ativo"), + "queued": MessageLookupByLibrary.simpleMessage("Na fila"), + "quickLinks": MessageLookupByLibrary.simpleMessage("Links rápidos"), + "radius": MessageLookupByLibrary.simpleMessage("Raio"), + "raiseTicket": MessageLookupByLibrary.simpleMessage("Abrir ticket"), + "rateTheApp": + MessageLookupByLibrary.simpleMessage("Avalie o aplicativo"), + "rateUs": MessageLookupByLibrary.simpleMessage("Avaliar"), + "rateUsOnStore": m66, + "reassignMe": MessageLookupByLibrary.simpleMessage("Reatribuir \"Eu\""), + "reassignedToName": m67, + "reassigningLoading": + MessageLookupByLibrary.simpleMessage("Reatribuindo..."), + "recover": MessageLookupByLibrary.simpleMessage("Recuperar"), + "recoverAccount": + MessageLookupByLibrary.simpleMessage("Recuperar conta"), + "recoverButton": MessageLookupByLibrary.simpleMessage("Recuperar"), + "recoveryAccount": + MessageLookupByLibrary.simpleMessage("Recuperar conta"), + "recoveryInitiated": + MessageLookupByLibrary.simpleMessage("A recuperação iniciou"), + "recoveryInitiatedDesc": m68, + "recoveryKey": + MessageLookupByLibrary.simpleMessage("Chave de recuperação"), + "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Chave de recuperação copiada para a área de transferência"), + "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( + "Caso você esqueça sua senha, a única maneira de recuperar seus dados é com esta chave."), + "recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage( + "Não armazenamos esta chave, salve esta chave de 24 palavras em um lugar seguro."), + "recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage( + "Ótimo! Sua chave de recuperação é válida. Obrigada por verificar.\n\nLembre-se de manter sua chave de recuperação copiada com segurança."), + "recoveryKeyVerified": MessageLookupByLibrary.simpleMessage( + "Chave de recuperação verificada"), + "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( + "Sua chave de recuperação é a única maneira de recuperar suas fotos se você esqueceu sua senha. Você pode encontrar sua chave de recuperação em Opções > Conta.\n\nInsira sua chave de recuperação aqui para verificar se você a salvou corretamente."), + "recoveryReady": m69, + "recoverySuccessful": + MessageLookupByLibrary.simpleMessage("Recuperação com sucesso!"), + "recoveryWarning": MessageLookupByLibrary.simpleMessage( + "Um contato confiável está tentando acessar sua conta"), + "recoveryWarningBody": m70, + "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( + "O dispositivo atual não é poderoso o suficiente para verificar sua senha, no entanto, nós podemos regenerar numa maneira que funciona em todos os dispositivos.\n\nEntre usando a chave de recuperação e regenere sua senha (você pode usar a mesma novamente se desejar)."), + "recreatePasswordTitle": + MessageLookupByLibrary.simpleMessage("Redefinir senha"), + "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "reenterPassword": + MessageLookupByLibrary.simpleMessage("Reinserir senha"), + "reenterPin": MessageLookupByLibrary.simpleMessage("Reinserir PIN"), + "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( + "Recomende seus amigos e duplique seu plano"), + "referralStep1": MessageLookupByLibrary.simpleMessage( + "1. Envie este código aos seus amigos"), + "referralStep2": MessageLookupByLibrary.simpleMessage( + "2. Eles então se inscrevem num plano pago"), + "referralStep3": m71, + "referrals": MessageLookupByLibrary.simpleMessage("Referências"), + "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( + "As referências estão atualmente pausadas"), + "rejectRecovery": + MessageLookupByLibrary.simpleMessage("Rejeitar recuperação"), + "remindToEmptyDeviceTrash": MessageLookupByLibrary.simpleMessage( + "Também vazio \"Excluído recentemente\" de \"Opções\" -> \"Armazenamento\" para reivindicar espaço liberado"), + "remindToEmptyEnteTrash": MessageLookupByLibrary.simpleMessage( + "Também esvazie sua \"Lixeira\" para reivindicar o espaço liberado"), + "remoteImages": MessageLookupByLibrary.simpleMessage("Imagens remotas"), + "remoteThumbnails": + MessageLookupByLibrary.simpleMessage("Miniaturas remotas"), + "remoteVideos": MessageLookupByLibrary.simpleMessage("Vídeos remotos"), + "remove": MessageLookupByLibrary.simpleMessage("Remover"), + "removeDuplicates": + MessageLookupByLibrary.simpleMessage("Excluir duplicatas"), + "removeDuplicatesDesc": MessageLookupByLibrary.simpleMessage( + "Revise e remova arquivos que são duplicatas exatas."), + "removeFromAlbum": + MessageLookupByLibrary.simpleMessage("Remover do álbum"), + "removeFromAlbumTitle": + MessageLookupByLibrary.simpleMessage("Remover do álbum?"), + "removeFromFavorite": + MessageLookupByLibrary.simpleMessage("Desfavoritar"), + "removeInvite": MessageLookupByLibrary.simpleMessage("Remover convite"), + "removeLink": MessageLookupByLibrary.simpleMessage("Remover link"), + "removeParticipant": + MessageLookupByLibrary.simpleMessage("Remover participante"), + "removeParticipantBody": m72, + "removePersonLabel": + MessageLookupByLibrary.simpleMessage("Remover etiqueta da pessoa"), + "removePublicLink": + MessageLookupByLibrary.simpleMessage("Remover link público"), + "removePublicLinks": + MessageLookupByLibrary.simpleMessage("Remover link público"), + "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( + "Alguns dos itens que você está removendo foram adicionados por outras pessoas, e você perderá o acesso a eles"), + "removeWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Remover?"), + "removeYourselfAsTrustedContact": MessageLookupByLibrary.simpleMessage( + "Remover si mesmo dos contatos confiáveis"), + "removingFromFavorites": + MessageLookupByLibrary.simpleMessage("Removendo dos favoritos..."), + "rename": MessageLookupByLibrary.simpleMessage("Renomear"), + "renameAlbum": MessageLookupByLibrary.simpleMessage("Renomear álbum"), + "renameFile": MessageLookupByLibrary.simpleMessage("Renomear arquivo"), + "renewSubscription": + MessageLookupByLibrary.simpleMessage("Renovar assinatura"), + "renewsOn": m73, + "reportABug": MessageLookupByLibrary.simpleMessage("Informar um erro"), + "reportBug": MessageLookupByLibrary.simpleMessage("Informar erro"), + "resendEmail": MessageLookupByLibrary.simpleMessage("Reenviar e-mail"), + "resetIgnoredFiles": MessageLookupByLibrary.simpleMessage( + "Redefinir arquivos ignorados"), + "resetPasswordTitle": + MessageLookupByLibrary.simpleMessage("Redefinir senha"), + "resetPerson": MessageLookupByLibrary.simpleMessage("Remover"), + "resetToDefault": + MessageLookupByLibrary.simpleMessage("Redefinir para o padrão"), + "restore": MessageLookupByLibrary.simpleMessage("Restaurar"), + "restoreToAlbum": + MessageLookupByLibrary.simpleMessage("Restaurar para álbum"), + "restoringFiles": + MessageLookupByLibrary.simpleMessage("Restaurando arquivos..."), + "resumableUploads": + MessageLookupByLibrary.simpleMessage("Envios retomáveis"), + "retry": MessageLookupByLibrary.simpleMessage("Tentar novamente"), + "review": MessageLookupByLibrary.simpleMessage("Revisar"), + "reviewDeduplicateItems": MessageLookupByLibrary.simpleMessage( + "Reveja e exclua os itens que você acredita serem duplicados."), + "reviewSuggestions": + MessageLookupByLibrary.simpleMessage("Revisar sugestões"), + "right": MessageLookupByLibrary.simpleMessage("Direita"), + "roadtripWithThem": m74, + "rotate": MessageLookupByLibrary.simpleMessage("Girar"), + "rotateLeft": + MessageLookupByLibrary.simpleMessage("Girar para a esquerda"), + "rotateRight": + MessageLookupByLibrary.simpleMessage("Girar para a direita"), + "safelyStored": + MessageLookupByLibrary.simpleMessage("Armazenado com segurança"), + "save": MessageLookupByLibrary.simpleMessage("Salvar"), + "saveChangesBeforeLeavingQuestion": + MessageLookupByLibrary.simpleMessage( + "Salvar mudanças antes de sair?"), + "saveCollage": MessageLookupByLibrary.simpleMessage("Salvar colagem"), + "saveCopy": MessageLookupByLibrary.simpleMessage("Salvar cópia"), + "saveKey": MessageLookupByLibrary.simpleMessage("Salvar chave"), + "savePerson": MessageLookupByLibrary.simpleMessage("Salvar pessoa"), + "saveYourRecoveryKeyIfYouHaventAlready": + MessageLookupByLibrary.simpleMessage( + "Salve sua chave de recuperação, se você ainda não fez"), + "saving": MessageLookupByLibrary.simpleMessage("Salvando..."), + "savingEdits": + MessageLookupByLibrary.simpleMessage("Salvando edições..."), + "scanCode": MessageLookupByLibrary.simpleMessage("Escanear código"), + "scanThisBarcodeWithnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Escaneie este código de barras com\no aplicativo autenticador"), + "search": MessageLookupByLibrary.simpleMessage("Buscar"), + "searchAlbumsEmptySection": + MessageLookupByLibrary.simpleMessage("Álbuns"), + "searchByAlbumNameHint": + MessageLookupByLibrary.simpleMessage("Nome do álbum"), + "searchByExamples": MessageLookupByLibrary.simpleMessage( + "• Nomes de álbuns (ex: \"Câmera\")\n• Tipos de arquivos (ex.: \"Vídeos\", \".gif\")\n• Anos e meses (ex.: \"2022\", \"Janeiro\")\n• Temporadas (ex.: \"Natal\")\n• Tags (ex.: \"#divertido\")"), + "searchCaptionEmptySection": MessageLookupByLibrary.simpleMessage( + "Adicione marcações como \"#viagem\" nas informações das fotos para encontrá-las aqui com facilidade"), + "searchDatesEmptySection": + MessageLookupByLibrary.simpleMessage("Buscar por data, mês ou ano"), + "searchDiscoverEmptySection": MessageLookupByLibrary.simpleMessage( + "As imagens serão exibidas aqui quando o processamento e sincronização for concluído"), + "searchFaceEmptySection": MessageLookupByLibrary.simpleMessage( + "As pessoas apareceram aqui quando a indexação for concluída"), + "searchFileTypesAndNamesEmptySection": + MessageLookupByLibrary.simpleMessage("Tipos de arquivo e nomes"), + "searchHint1": + MessageLookupByLibrary.simpleMessage("busca rápida no dispositivo"), + "searchHint2": + MessageLookupByLibrary.simpleMessage("Descrições e data das fotos"), + "searchHint3": MessageLookupByLibrary.simpleMessage( + "Álbuns, nomes de arquivos e tipos"), + "searchHint4": MessageLookupByLibrary.simpleMessage("Localização"), + "searchHint5": MessageLookupByLibrary.simpleMessage( + "Em breve: Busca mágica e rostos ✨"), + "searchLocationEmptySection": MessageLookupByLibrary.simpleMessage( + "Fotos de grupo que estão sendo tiradas em algum raio da foto"), + "searchPeopleEmptySection": MessageLookupByLibrary.simpleMessage( + "Convide pessoas e você verá todas as fotos compartilhadas por elas aqui"), + "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( + "As pessoas serão exibidas aqui quando o processamento e sincronização for concluído"), + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, + "security": MessageLookupByLibrary.simpleMessage("Segurança"), + "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( + "Ver links de álbum compartilhado no aplicativo"), + "selectALocation": + MessageLookupByLibrary.simpleMessage("Selecionar localização"), + "selectALocationFirst": MessageLookupByLibrary.simpleMessage( + "Primeiramente selecione uma localização"), + "selectAlbum": MessageLookupByLibrary.simpleMessage("Selecionar álbum"), + "selectAll": MessageLookupByLibrary.simpleMessage("Selecionar tudo"), + "selectAllShort": MessageLookupByLibrary.simpleMessage("Tudo"), + "selectCoverPhoto": + MessageLookupByLibrary.simpleMessage("Selecionar foto da capa"), + "selectDate": MessageLookupByLibrary.simpleMessage("Selecionar data"), + "selectFoldersForBackup": MessageLookupByLibrary.simpleMessage( + "Selecionar pastas para copiar com segurança"), + "selectItemsToAdd": MessageLookupByLibrary.simpleMessage( + "Selecionar itens para adicionar"), + "selectLanguage": + MessageLookupByLibrary.simpleMessage("Selecionar idioma"), + "selectMailApp": MessageLookupByLibrary.simpleMessage( + "Selecionar aplicativo de e-mail"), + "selectMorePhotos": + MessageLookupByLibrary.simpleMessage("Selecionar mais fotos"), + "selectOneDateAndTime": + MessageLookupByLibrary.simpleMessage("Selecionar data e hora"), + "selectOneDateAndTimeForAll": MessageLookupByLibrary.simpleMessage( + "Selecione uma data e hora para todos"), + "selectPersonToLink": MessageLookupByLibrary.simpleMessage( + "Selecione a pessoa para vincular"), + "selectReason": MessageLookupByLibrary.simpleMessage("Diga o motivo"), + "selectStartOfRange": MessageLookupByLibrary.simpleMessage( + "Selecionar início de intervalo"), + "selectTime": MessageLookupByLibrary.simpleMessage("Selecionar tempo"), + "selectYourFace": + MessageLookupByLibrary.simpleMessage("Selecione seu rosto"), + "selectYourPlan": + MessageLookupByLibrary.simpleMessage("Selecione seu plano"), + "selectedFilesAreNotOnEnte": MessageLookupByLibrary.simpleMessage( + "Os arquivos selecionados não estão no Ente"), + "selectedFoldersWillBeEncryptedAndBackedUp": + MessageLookupByLibrary.simpleMessage( + "As pastas selecionadas serão criptografadas e armazenadas em copiadas com segurança"), + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": + MessageLookupByLibrary.simpleMessage( + "Os itens selecionados serão excluídos de todos os álbuns e movidos para a lixeira."), + "selectedItemsWillBeRemovedFromThisPerson": + MessageLookupByLibrary.simpleMessage( + "Os itens selecionados serão removidos desta pessoa, entretanto não serão excluídos da sua biblioteca."), + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "selfiesWithThem": m79, + "send": MessageLookupByLibrary.simpleMessage("Enviar"), + "sendEmail": MessageLookupByLibrary.simpleMessage("Enviar e-mail"), + "sendInvite": MessageLookupByLibrary.simpleMessage("Enviar convite"), + "sendLink": MessageLookupByLibrary.simpleMessage("Enviar link"), + "serverEndpoint": + MessageLookupByLibrary.simpleMessage("Ponto final do servidor"), + "sessionExpired": + MessageLookupByLibrary.simpleMessage("Sessão expirada"), + "sessionIdMismatch": MessageLookupByLibrary.simpleMessage( + "Incompatibilidade de ID de sessão"), + "setAPassword": MessageLookupByLibrary.simpleMessage("Definir senha"), + "setAs": MessageLookupByLibrary.simpleMessage("Definir como"), + "setCover": MessageLookupByLibrary.simpleMessage("Definir capa"), + "setLabel": MessageLookupByLibrary.simpleMessage("Definir"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Definir nova senha"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Definir PIN novo"), + "setPasswordTitle": + MessageLookupByLibrary.simpleMessage("Definir senha"), + "setRadius": MessageLookupByLibrary.simpleMessage("Definir raio"), + "setupComplete": + MessageLookupByLibrary.simpleMessage("Configuração concluída"), + "share": MessageLookupByLibrary.simpleMessage("Compartilhar"), + "shareALink": MessageLookupByLibrary.simpleMessage("Compartilhar link"), + "shareAlbumHint": MessageLookupByLibrary.simpleMessage( + "Abra um álbum e toque no botão compartilhar no canto superior direito para compartilhar."), + "shareAnAlbumNow": + MessageLookupByLibrary.simpleMessage("Compartilhar um álbum agora"), + "shareLink": MessageLookupByLibrary.simpleMessage("Compartilhar link"), + "shareMyVerificationID": m80, + "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( + "Compartilhar apenas com as pessoas que você quiser"), + "shareTextConfirmOthersVerificationID": m81, + "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( + "Baixe o Ente para que nós possamos compartilhar com facilidade fotos e vídeos de qualidade original\n\nhttps://ente.io"), + "shareTextReferralCode": m82, + "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( + "Compartilhar com usuários não ente"), + "shareWithPeopleSectionTitle": m83, + "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage( + "Compartilhar seu primeiro álbum"), + "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( + "Criar álbuns compartilhados e colaborativos com outros usuários Ente, incluindo usuários em planos gratuitos."), + "sharedByMe": + MessageLookupByLibrary.simpleMessage("Compartilhada por mim"), + "sharedByYou": + MessageLookupByLibrary.simpleMessage("Compartilhado por você"), + "sharedPhotoNotifications": + MessageLookupByLibrary.simpleMessage("Novas fotos compartilhadas"), + "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( + "Receber notificações quando alguém adicionar uma foto a um álbum compartilhado que você faz parte"), + "sharedWith": m84, + "sharedWithMe": + MessageLookupByLibrary.simpleMessage("Compartilhado comigo"), + "sharedWithYou": + MessageLookupByLibrary.simpleMessage("Compartilhado com você"), + "sharing": MessageLookupByLibrary.simpleMessage("Compartilhando..."), + "shiftDatesAndTime": + MessageLookupByLibrary.simpleMessage("Alterar as datas e horas"), + "showMemories": + MessageLookupByLibrary.simpleMessage("Mostrar memórias"), + "showPerson": MessageLookupByLibrary.simpleMessage("Mostrar pessoa"), + "signOutFromOtherDevices": MessageLookupByLibrary.simpleMessage( + "Sair da conta em outros dispositivos"), + "signOutOtherBody": MessageLookupByLibrary.simpleMessage( + "Se você acha que alguém possa saber da sua senha, você pode forçar desconectar sua conta de outros dispositivos."), + "signOutOtherDevices": + MessageLookupByLibrary.simpleMessage("Sair em outros dispositivos"), + "signUpTerms": MessageLookupByLibrary.simpleMessage( + "Eu concordo com os termos de serviço e a política de privacidade"), + "singleFileDeleteFromDevice": m85, + "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( + "Ele será excluído de todos os álbuns."), + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, + "skip": MessageLookupByLibrary.simpleMessage("Pular"), + "social": MessageLookupByLibrary.simpleMessage("Redes sociais"), + "someItemsAreInBothEnteAndYourDevice": + MessageLookupByLibrary.simpleMessage( + "Alguns itens estão em ambos o Ente quanto no seu dispositivo."), + "someOfTheFilesYouAreTryingToDeleteAre": + MessageLookupByLibrary.simpleMessage( + "Alguns dos arquivos que você está tentando excluir só estão disponíveis no seu dispositivo e não podem ser recuperados se forem excluídos"), + "someoneSharingAlbumsWithYouShouldSeeTheSameId": + MessageLookupByLibrary.simpleMessage( + "Alguém compartilhando álbuns com você deve ver o mesmo ID no dispositivo."), + "somethingWentWrong": + MessageLookupByLibrary.simpleMessage("Algo deu errado"), + "somethingWentWrongPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Algo deu errado. Tente outra vez"), + "sorry": MessageLookupByLibrary.simpleMessage("Desculpe"), + "sorryBackupFailedDesc": MessageLookupByLibrary.simpleMessage( + "Desculpe, não podemos fazer cópia de segurança deste arquivo no momento, nós tentaremos mais tarde."), + "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( + "Desculpe, não foi possível adicionar aos favoritos!"), + "sorryCouldNotRemoveFromFavorites": + MessageLookupByLibrary.simpleMessage( + "Desculpe, não foi possível remover dos favoritos!"), + "sorryTheCodeYouveEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "O código inserido está incorreto"), + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": + MessageLookupByLibrary.simpleMessage( + "Desculpe, não foi possível gerar chaves seguras neste dispositivo.\n\ninicie sessão com um dispositivo diferente."), + "sort": MessageLookupByLibrary.simpleMessage("Ordenar"), + "sortAlbumsBy": MessageLookupByLibrary.simpleMessage("Ordenar por"), + "sortNewestFirst": + MessageLookupByLibrary.simpleMessage("Recentes primeiro"), + "sortOldestFirst": + MessageLookupByLibrary.simpleMessage("Antigos primeiro"), + "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Sucesso"), + "sportsWithThem": m88, + "spotlightOnThem": m89, + "spotlightOnYourself": + MessageLookupByLibrary.simpleMessage("Destacar si mesmo"), + "startAccountRecoveryTitle": + MessageLookupByLibrary.simpleMessage("Iniciar recuperação"), + "startBackup": + MessageLookupByLibrary.simpleMessage("Iniciar cópia de segurança"), + "status": MessageLookupByLibrary.simpleMessage("Estado"), + "stopCastingBody": + MessageLookupByLibrary.simpleMessage("Deseja parar a transmissão?"), + "stopCastingTitle": + MessageLookupByLibrary.simpleMessage("Parar transmissão"), + "storage": MessageLookupByLibrary.simpleMessage("Armazenamento"), + "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Família"), + "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Você"), + "storageInGB": m90, + "storageLimitExceeded": MessageLookupByLibrary.simpleMessage( + "Limite de armazenamento excedido"), + "storageUsageInfo": m91, + "streamDetails": + MessageLookupByLibrary.simpleMessage("Detalhes da transmissão"), + "strongStrength": MessageLookupByLibrary.simpleMessage("Forte"), + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, + "subscribe": MessageLookupByLibrary.simpleMessage("Inscrever-se"), + "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( + "Você precisa de uma inscrição paga ativa para ativar o compartilhamento."), + "subscription": MessageLookupByLibrary.simpleMessage("Assinatura"), + "success": MessageLookupByLibrary.simpleMessage("Sucesso"), + "successfullyArchived": + MessageLookupByLibrary.simpleMessage("Arquivado com sucesso"), + "successfullyHid": + MessageLookupByLibrary.simpleMessage("Ocultado com sucesso"), + "successfullyUnarchived": + MessageLookupByLibrary.simpleMessage("Desarquivado com sucesso"), + "successfullyUnhid": + MessageLookupByLibrary.simpleMessage("Desocultado com sucesso"), + "suggestFeatures": + MessageLookupByLibrary.simpleMessage("Sugerir recurso"), + "sunrise": MessageLookupByLibrary.simpleMessage("No horizonte"), + "support": MessageLookupByLibrary.simpleMessage("Suporte"), + "syncProgress": m94, + "syncStopped": + MessageLookupByLibrary.simpleMessage("Sincronização interrompida"), + "syncing": MessageLookupByLibrary.simpleMessage("Sincronizando..."), + "systemTheme": MessageLookupByLibrary.simpleMessage("Sistema"), + "tapToCopy": MessageLookupByLibrary.simpleMessage("toque para copiar"), + "tapToEnterCode": + MessageLookupByLibrary.simpleMessage("Toque para inserir código"), + "tapToUnlock": + MessageLookupByLibrary.simpleMessage("Toque para desbloquear"), + "tapToUpload": + MessageLookupByLibrary.simpleMessage("Toque para enviar"), + "tapToUploadIsIgnoredDue": m95, + "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( + "Parece que algo deu errado. Tente novamente mais tarde. Caso o erro persistir, por favor, entre em contato com nossa equipe."), + "terminate": MessageLookupByLibrary.simpleMessage("Encerrar"), + "terminateSession": MessageLookupByLibrary.simpleMessage("Sair?"), + "terms": MessageLookupByLibrary.simpleMessage("Termos"), + "termsOfServicesTitle": MessageLookupByLibrary.simpleMessage("Termos"), + "thankYou": MessageLookupByLibrary.simpleMessage("Obrigado"), + "thankYouForSubscribing": + MessageLookupByLibrary.simpleMessage("Obrigado por assinar!"), + "theDownloadCouldNotBeCompleted": MessageLookupByLibrary.simpleMessage( + "A instalação não pôde ser concluída"), + "theLinkYouAreTryingToAccessHasExpired": + MessageLookupByLibrary.simpleMessage( + "O link que você está tentando acessar já expirou."), + "theRecoveryKeyYouEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "A chave de recuperação inserida está incorreta"), + "theme": MessageLookupByLibrary.simpleMessage("Tema"), + "theseItemsWillBeDeletedFromYourDevice": + MessageLookupByLibrary.simpleMessage( + "Estes itens serão excluídos do seu dispositivo."), + "theyAlsoGetXGb": m96, + "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( + "Eles serão excluídos de todos os álbuns."), + "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( + "Esta ação não pode ser desfeita"), + "thisAlbumAlreadyHDACollaborativeLink": + MessageLookupByLibrary.simpleMessage( + "Este álbum já tem um link colaborativo"), + "thisCanBeUsedToRecoverYourAccountIfYou": + MessageLookupByLibrary.simpleMessage( + "Isso pode ser usado para recuperar sua conta se você perder seu segundo fator"), + "thisDevice": MessageLookupByLibrary.simpleMessage("Este dispositivo"), + "thisEmailIsAlreadyInUse": MessageLookupByLibrary.simpleMessage( + "Este e-mail já está sendo usado"), + "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( + "Esta imagem não possui dados EXIF"), + "thisIsMeExclamation": + MessageLookupByLibrary.simpleMessage("Este é você!"), + "thisIsPersonVerificationId": m97, + "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( + "Este é o seu ID de verificação"), + "thisWeekThroughTheYears": MessageLookupByLibrary.simpleMessage( + "Esta semana com o passar dos anos"), + "thisWeekXYearsAgo": m98, + "thisWillLogYouOutOfTheFollowingDevice": + MessageLookupByLibrary.simpleMessage( + "Isso fará você sair do dispositivo a seguir:"), + "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( + "Isso fará você sair deste dispositivo!"), + "thisWillMakeTheDateAndTimeOfAllSelected": + MessageLookupByLibrary.simpleMessage( + "Isso fará que a data e hora de todas as fotos selecionadas fiquem iguais."), + "thisWillRemovePublicLinksOfAllSelectedQuickLinks": + MessageLookupByLibrary.simpleMessage( + "Isto removerá links públicos de todos os links rápidos selecionados."), + "throughTheYears": m99, + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "Para ativar o bloqueio do aplicativo, defina uma senha de acesso no dispositivo ou bloqueie sua tela nas opções do sistema."), + "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage( + "Para ocultar uma foto ou vídeo"), + "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( + "Para redefinir sua senha, verifique seu e-mail primeiramente."), + "todaysLogs": MessageLookupByLibrary.simpleMessage("Registros de hoje"), + "tooManyIncorrectAttempts": MessageLookupByLibrary.simpleMessage( + "Muitas tentativas incorretas"), + "total": MessageLookupByLibrary.simpleMessage("total"), + "totalSize": MessageLookupByLibrary.simpleMessage("Tamanho total"), + "trash": MessageLookupByLibrary.simpleMessage("Lixeira"), + "trashDaysLeft": m100, + "trim": MessageLookupByLibrary.simpleMessage("Recortar"), + "tripInYear": m101, + "tripToLocation": m102, + "trustedContacts": + MessageLookupByLibrary.simpleMessage("Contatos confiáveis"), + "trustedInviteBody": m103, + "tryAgain": MessageLookupByLibrary.simpleMessage("Tente novamente"), + "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( + "Ative a cópia de segurança para automaticamente enviar arquivos adicionados à pasta do dispositivo para o Ente."), + "twitter": MessageLookupByLibrary.simpleMessage("Twitter/X"), + "twoMonthsFreeOnYearlyPlans": MessageLookupByLibrary.simpleMessage( + "2 meses grátis em planos anuais"), + "twofactor": MessageLookupByLibrary.simpleMessage("Dois fatores"), + "twofactorAuthenticationHasBeenDisabled": + MessageLookupByLibrary.simpleMessage( + "A autenticação de dois fatores foi desativada"), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage( + "Autenticação de dois fatores"), + "twofactorAuthenticationSuccessfullyReset": + MessageLookupByLibrary.simpleMessage( + "Autenticação de dois fatores redefinida com sucesso"), + "twofactorSetup": MessageLookupByLibrary.simpleMessage( + "Configuração de dois fatores"), + "typeOfGallerGallerytypeIsNotSupportedForRename": m104, + "unarchive": MessageLookupByLibrary.simpleMessage("Desarquivar"), + "unarchiveAlbum": + MessageLookupByLibrary.simpleMessage("Desarquivar álbum"), + "unarchiving": MessageLookupByLibrary.simpleMessage("Desarquivando..."), + "unavailableReferralCode": MessageLookupByLibrary.simpleMessage( + "Desculpe, este código está indisponível."), + "uncategorized": MessageLookupByLibrary.simpleMessage("Sem categoria"), + "unhide": MessageLookupByLibrary.simpleMessage("Desocultar"), + "unhideToAlbum": + MessageLookupByLibrary.simpleMessage("Desocultar para o álbum"), + "unhiding": MessageLookupByLibrary.simpleMessage("Reexibindo..."), + "unhidingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Desocultando arquivos para o álbum"), + "unlock": MessageLookupByLibrary.simpleMessage("Desbloquear"), + "unpinAlbum": MessageLookupByLibrary.simpleMessage("Desafixar álbum"), + "unselectAll": MessageLookupByLibrary.simpleMessage("Desmarcar tudo"), + "update": MessageLookupByLibrary.simpleMessage("Atualizar"), + "updateAvailable": + MessageLookupByLibrary.simpleMessage("Atualização disponível"), + "updatingFolderSelection": MessageLookupByLibrary.simpleMessage( + "Atualizando seleção de pasta..."), + "upgrade": MessageLookupByLibrary.simpleMessage("Atualizar"), + "uploadIsIgnoredDueToIgnorereason": m105, + "uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Enviando arquivos para o álbum..."), + "uploadingMultipleMemories": m106, + "uploadingSingleMemory": + MessageLookupByLibrary.simpleMessage("Preservando 1 memória..."), + "upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage( + "Com 50% de desconto, até 4 de dezembro"), + "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( + "O armazenamento disponível é limitado pelo seu plano atual. O excesso de armazenamento reivindicado tornará automaticamente útil quando você atualizar seu plano."), + "useAsCover": MessageLookupByLibrary.simpleMessage("Usar como capa"), + "useDifferentPlayerInfo": MessageLookupByLibrary.simpleMessage( + "Enfrentando problemas ao reproduzir este vídeo? Mantenha pressionado aqui ou tente outro reprodutor de vídeo"), + "usePublicLinksForPeopleNotOnEnte": + MessageLookupByLibrary.simpleMessage( + "Usar links públicos para pessoas que não estão no Ente"), + "useRecoveryKey": + MessageLookupByLibrary.simpleMessage("Usar chave de recuperação"), + "useSelectedPhoto": + MessageLookupByLibrary.simpleMessage("Usar foto selecionada"), + "usedSpace": MessageLookupByLibrary.simpleMessage("Espaço usado"), + "validTill": m107, + "verificationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Falha na verificação. Tente novamente"), + "verificationId": + MessageLookupByLibrary.simpleMessage("ID de verificação"), + "verify": MessageLookupByLibrary.simpleMessage("Verificar"), + "verifyEmail": MessageLookupByLibrary.simpleMessage("Verificar e-mail"), + "verifyEmailID": m108, + "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verificar"), + "verifyPasskey": + MessageLookupByLibrary.simpleMessage("Verificar chave de acesso"), + "verifyPassword": + MessageLookupByLibrary.simpleMessage("Verificar senha"), + "verifying": MessageLookupByLibrary.simpleMessage("Verificando..."), + "verifyingRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Verificando chave de recuperação..."), + "videoInfo": + MessageLookupByLibrary.simpleMessage("Informações do vídeo"), + "videoSmallCase": MessageLookupByLibrary.simpleMessage("vídeo"), + "videoStreaming": + MessageLookupByLibrary.simpleMessage("Transmissão de vídeo"), + "videos": MessageLookupByLibrary.simpleMessage("Vídeos"), + "viewActiveSessions": + MessageLookupByLibrary.simpleMessage("Ver sessões ativas"), + "viewAddOnButton": + MessageLookupByLibrary.simpleMessage("Ver complementos"), + "viewAll": MessageLookupByLibrary.simpleMessage("Ver tudo"), + "viewAllExifData": + MessageLookupByLibrary.simpleMessage("Ver todos os dados EXIF"), + "viewLargeFiles": + MessageLookupByLibrary.simpleMessage("Arquivos grandes"), + "viewLargeFilesDesc": MessageLookupByLibrary.simpleMessage( + "Ver arquivos que consumem a maior parte do armazenamento."), + "viewLogs": MessageLookupByLibrary.simpleMessage("Ver registros"), + "viewRecoveryKey": + MessageLookupByLibrary.simpleMessage("Ver chave de recuperação"), + "viewer": MessageLookupByLibrary.simpleMessage("Visualizador"), + "viewersSuccessfullyAdded": m109, + "visitWebToManage": MessageLookupByLibrary.simpleMessage( + "Visite o web.ente.io para gerenciar sua assinatura"), + "waitingForVerification": + MessageLookupByLibrary.simpleMessage("Esperando verificação..."), + "waitingForWifi": + MessageLookupByLibrary.simpleMessage("Aguardando Wi-Fi..."), + "warning": MessageLookupByLibrary.simpleMessage("Aviso"), + "weAreOpenSource": + MessageLookupByLibrary.simpleMessage("Nós somos de código aberto!"), + "weDontSupportEditingPhotosAndAlbumsThatYouDont": + MessageLookupByLibrary.simpleMessage( + "Não suportamos a edição de fotos e álbuns que você ainda não possui"), + "weHaveSendEmailTo": m110, + "weakStrength": MessageLookupByLibrary.simpleMessage("Fraca"), + "welcomeBack": + MessageLookupByLibrary.simpleMessage("Bem-vindo(a) de volta!"), + "whatsNew": MessageLookupByLibrary.simpleMessage("O que há de novo"), + "whyAddTrustContact": MessageLookupByLibrary.simpleMessage( + "Um contato confiável pode ajudá-lo em recuperar seus dados."), + "yearShort": MessageLookupByLibrary.simpleMessage("ano"), + "yearly": MessageLookupByLibrary.simpleMessage("Anual"), + "yearsAgo": m111, + "yes": MessageLookupByLibrary.simpleMessage("Sim"), + "yesCancel": MessageLookupByLibrary.simpleMessage("Sim"), + "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( + "Sim, converter para visualizador"), + "yesDelete": MessageLookupByLibrary.simpleMessage("Sim, excluir"), + "yesDiscardChanges": + MessageLookupByLibrary.simpleMessage("Sim, descartar alterações"), + "yesLogout": + MessageLookupByLibrary.simpleMessage("Sim, encerrar sessão"), + "yesRemove": MessageLookupByLibrary.simpleMessage("Sim, excluir"), + "yesRenew": MessageLookupByLibrary.simpleMessage("Sim"), + "yesResetPerson": + MessageLookupByLibrary.simpleMessage("Sim, redefinir pessoa"), + "you": MessageLookupByLibrary.simpleMessage("Você"), + "youAndThem": m112, + "youAreOnAFamilyPlan": MessageLookupByLibrary.simpleMessage( + "Você está em um plano familiar!"), + "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage( + "Você está na versão mais recente"), + "youCanAtMaxDoubleYourStorage": MessageLookupByLibrary.simpleMessage( + "* Você pode duplicar seu armazenamento ao máximo"), + "youCanManageYourLinksInTheShareTab": + MessageLookupByLibrary.simpleMessage( + "Você pode gerenciar seus links na aba de compartilhamento."), + "youCanTrySearchingForADifferentQuery": + MessageLookupByLibrary.simpleMessage( + "Você pode tentar buscar por outra consulta."), + "youCannotDowngradeToThisPlan": MessageLookupByLibrary.simpleMessage( + "Você não pode rebaixar para este plano"), + "youCannotShareWithYourself": MessageLookupByLibrary.simpleMessage( + "Não é possível compartilhar consigo mesmo"), + "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( + "Você não tem nenhum item arquivado."), + "youHaveSuccessfullyFreedUp": m113, + "yourAccountHasBeenDeleted": + MessageLookupByLibrary.simpleMessage("Sua conta foi excluída"), + "yourMap": MessageLookupByLibrary.simpleMessage("Seu mapa"), + "yourPlanWasSuccessfullyDowngraded": + MessageLookupByLibrary.simpleMessage( + "Seu plano foi rebaixado com sucesso"), + "yourPlanWasSuccessfullyUpgraded": MessageLookupByLibrary.simpleMessage( + "Seu plano foi atualizado com sucesso"), + "yourPurchaseWasSuccessful": MessageLookupByLibrary.simpleMessage( + "Sua compra foi efetuada com sucesso"), + "yourStorageDetailsCouldNotBeFetched": + MessageLookupByLibrary.simpleMessage( + "Seus detalhes de armazenamento não puderam ser obtidos"), + "yourSubscriptionHasExpired": + MessageLookupByLibrary.simpleMessage("A sua assinatura expirou"), + "yourSubscriptionWasUpdatedSuccessfully": + MessageLookupByLibrary.simpleMessage( + "Sua assinatura foi atualizada com sucesso"), + "yourVerificationCodeHasExpired": MessageLookupByLibrary.simpleMessage( + "O código de verificação expirou"), + "youveNoDuplicateFilesThatCanBeCleared": + MessageLookupByLibrary.simpleMessage( + "Você não possui nenhum arquivo duplicado que possa ser excluído"), + "youveNoFilesInThisAlbumThatCanBeDeleted": + MessageLookupByLibrary.simpleMessage( + "Você não tem arquivos neste álbum que possam ser excluídos"), + "zoomOutToSeePhotos": MessageLookupByLibrary.simpleMessage( + "Reduzir ampliação para ver as fotos") + }; +} diff --git a/mobile/lib/generated/intl/messages_pt_PT.dart b/mobile/lib/generated/intl/messages_pt_PT.dart new file mode 100644 index 0000000000..a0bd0878cc --- /dev/null +++ b/mobile/lib/generated/intl/messages_pt_PT.dart @@ -0,0 +1,1866 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a pt_PT locale. All the +// messages from the main program should be duplicated here with the same +// function name. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new +// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering +// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases +// ignore_for_file:unused_import, file_names, avoid_escaping_inner_quotes +// ignore_for_file:unnecessary_string_interpolations, unnecessary_string_escapes + +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; + +final messages = new MessageLookup(); + +typedef String MessageIfAbsent(String messageStr, List args); + +class MessageLookup extends MessageLookupByLibrary { + String get localeName => 'pt_PT'; + + static String m3(storageAmount, endDate) => + "Seu addon ${storageAmount} é válido até o momento ${endDate}"; + + static String m5(emailOrName) => "Adicionado por ${emailOrName}"; + + static String m6(albumName) => "Adicionado com sucesso a ${albumName}"; + + static String m8(count) => + "${Intl.plural(count, zero: 'Nenhum participante', one: '1 participante', other: '${count} participantes')}"; + + static String m9(versionValue) => "Versão: ${versionValue}"; + + static String m10(freeAmount, storageUnit) => + "${freeAmount} ${storageUnit} grátis"; + + static String m12(paymentProvider) => + "Por favor, cancele primeiro a sua subscrição existente de ${paymentProvider}"; + + static String m13(user) => + "${user} não será capaz de adicionar mais fotos a este álbum\n\nEles ainda serão capazes de remover fotos existentes adicionadas por eles"; + + static String m14(isFamilyMember, storageAmountInGb) => + "${Intl.select(isFamilyMember, { + 'true': 'Sua família reinvidicou ${storageAmountInGb} GB até então', + 'false': 'Você reinvindicou ${storageAmountInGb} GB até então', + 'other': 'Você reinvindicou ${storageAmountInGb} GB até então!', + })}"; + + static String m15(albumName) => "Link colaborativo criado para ${albumName}"; + + static String m16(count) => + "${Intl.plural(count, zero: 'Adicionado 0 colaboradores', one: 'Adicionado 1 colaborador', other: 'Adicionado ${count} colaboradores')}"; + + static String m18(familyAdminEmail) => + "Contacte ${familyAdminEmail} para gerir a sua subscrição"; + + static String m19(provider) => + "Contacte-nos em support@ente.io para gerir a sua subscrição ${provider}"; + + static String m20(endpoint) => "Conectado a ${endpoint}"; + + static String m21(count) => + "${Intl.plural(count, one: 'Apagar ${count} item', other: 'Apagar ${count} itens')}"; + + static String m22(currentlyDeleting, totalCount) => + "Apagar ${currentlyDeleting} / ${totalCount}"; + + static String m23(albumName) => + "Isto removerá o link público para acessar \"${albumName}\"."; + + static String m24(supportEmail) => + "Envie um e-mail para ${supportEmail} a partir do seu endereço de e-mail registado"; + + static String m25(count, storageSaved) => + "Você limpou ${Intl.plural(count, one: '${count} arquivo duplicado', other: '${count} arquivos duplicados')}, guardando (${storageSaved}!)"; + + static String m26(count, formattedSize) => + "${count} arquivos, ${formattedSize} cada"; + + static String m27(newEmail) => "Email alterado para ${newEmail}"; + + static String m29(email) => + "${email} não possui uma conta Ente.\n\nEnvie um convite para compartilhar fotos."; + + static String m31(text) => "Fotos extras encontradas para ${text}"; + + static String m33(count, formattedNumber) => + "${Intl.plural(count, one: '1 arquivo', other: '${formattedNumber} arquivos')} neste dispositivo teve um backup seguro"; + + static String m34(count, formattedNumber) => + "${Intl.plural(count, one: '1 arquivo', other: '${formattedNumber} arquivos')} neste álbum teve um backup seguro"; + + static String m35(storageAmountInGB) => + "${storageAmountInGB} GB sempre que alguém se inscreve num plano pago e aplica o seu código"; + + static String m36(endDate) => "Teste gratuito válido até ${endDate}"; + + static String m38(sizeInMBorGB) => "Libertar ${sizeInMBorGB}"; + + static String m40(currentlyProcessing, totalCount) => + "Processando ${currentlyProcessing} / ${totalCount}"; + + static String m42(count) => + "${Intl.plural(count, one: '${count} item', other: '${count} itens')}"; + + static String m45(expiryTime) => "O link expirará em ${expiryTime}"; + + static String m50(albumName) => "Movido com sucesso para ${albumName}"; + + static String m52(name) => "Não é ${name}?"; + + static String m53(familyAdminEmail) => + "Entre em contato com ${familyAdminEmail} para alterar o seu código."; + + static String m55(passwordStrengthValue) => + "Força da palavra-passe: ${passwordStrengthValue}"; + + static String m56(providerName) => + "Por favor, fale com o suporte ${providerName} se você foi cobrado"; + + static String m61(endDate) => + "Teste gratuito válido até ${endDate}.\nVocê pode escolher um plano pago depois."; + + static String m62(toEmail) => + "Por favor, envie-nos um e-mail para ${toEmail}"; + + static String m63(toEmail) => "Por favor, envie os logs para \n${toEmail}"; + + static String m65(folderName) => "Processando ${folderName}..."; + + static String m66(storeName) => "Avalie-nos em ${storeName}"; + + static String m71(storageInGB) => "3. Ambos ganham ${storageInGB} GB* grátis"; + + static String m72(userEmail) => + "${userEmail} será removido deste álbum compartilhado\n\nQuaisquer fotos adicionadas por elas também serão removidas do álbum"; + + static String m73(endDate) => "A subscrição é renovada em ${endDate}"; + + static String m75(count) => + "${Intl.plural(count, one: '${count} ano atrás', other: '${count} anos atrás')}"; + + static String m77(count) => "${count} selecionado(s)"; + + static String m78(count, yourCount) => + "${count} selecionado(s) (${yourCount} seus)"; + + static String m80(verificationID) => + "Aqui está o meu ID de verificação: ${verificationID} para ente.io."; + + static String m81(verificationID) => + "Ei, você pode confirmar que este é seu ID de verificação do ente.io: ${verificationID}"; + + static String m82(referralCode, referralStorageInGB) => + "Insira o código de referência: ${referralCode} \n\nAplique-o em Configurações → Geral → Indicações para obter ${referralStorageInGB} GB gratuitamente após a sua inscrição para um plano pago\n\nhttps://ente.io"; + + static String m83(numberOfPeople) => + "${Intl.plural(numberOfPeople, zero: 'Compartilhe com pessoas específicas', one: 'Compartilhado com 1 pessoa', other: 'Compartilhado com ${numberOfPeople} pessoas')}"; + + static String m84(emailIDs) => "Partilhado com ${emailIDs}"; + + static String m85(fileType) => + "Este ${fileType} será eliminado do seu dispositivo."; + + static String m86(fileType) => + "Este ${fileType} encontra-se tanto no Ente como no seu dispositivo."; + + static String m87(fileType) => "Este ${fileType} será eliminado do Ente."; + + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; + + static String m91( + usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => + "${usedAmount} ${usedStorageUnit} de ${totalAmount} ${totalStorageUnit} usado"; + + static String m92(id) => + "Seu ${id} já está vinculado a outra conta Ente.\nSe você gostaria de usar seu ${id} com esta conta, por favor contate nosso suporte\'\'"; + + static String m93(endDate) => "A sua subscrição será cancelada em ${endDate}"; + + static String m94(completed, total) => + "${completed}/${total} memórias preservadas"; + + static String m96(storageAmountInGB) => + "Eles também recebem ${storageAmountInGB} GB"; + + static String m97(email) => "Este é o ID de verificação de ${email}"; + + static String m100(count) => + "${Intl.plural(count, zero: 'Brevemente', one: '1 dia', other: '${count} dias')}"; + + static String m104(galleryType) => + "Tipo de galeria ${galleryType} não é permitido para renomear"; + + static String m105(ignoreReason) => "Envio ignorado devido à ${ignoreReason}"; + + static String m106(count) => "Preservar ${count} memórias..."; + + static String m107(endDate) => "Válido até ${endDate}"; + + static String m108(email) => "Verificar e-mail"; + + static String m110(email) => + "Enviamos um e-mail para ${email}"; + + static String m111(count) => + "${Intl.plural(count, one: '${count} ano atrás', other: '${count} anos atrás')}"; + + static String m113(storageSaved) => + "Você liberou ${storageSaved} com sucesso!"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "aNewVersionOfEnteIsAvailable": MessageLookupByLibrary.simpleMessage( + "Está disponível uma nova versão do Ente."), + "about": MessageLookupByLibrary.simpleMessage("Sobre"), + "account": MessageLookupByLibrary.simpleMessage("Conta"), + "accountIsAlreadyConfigured": + MessageLookupByLibrary.simpleMessage("A conta já está ajustada."), + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("Bem-vindo de volta!"), + "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( + "Eu entendo que se eu perder a minha palavra-passe, posso perder os meus dados já que esses dados são encriptados de ponta a ponta."), + "activeSessions": + MessageLookupByLibrary.simpleMessage("Sessões ativas"), + "add": MessageLookupByLibrary.simpleMessage("Adicionar"), + "addAName": MessageLookupByLibrary.simpleMessage("Adiciona um nome"), + "addANewEmail": + MessageLookupByLibrary.simpleMessage("Adicionar um novo e-mail"), + "addCollaborator": + MessageLookupByLibrary.simpleMessage("Adicionar colaborador"), + "addFromDevice": MessageLookupByLibrary.simpleMessage( + "Adicionar a partir do dispositivo"), + "addLocation": + MessageLookupByLibrary.simpleMessage("Adicionar localização"), + "addLocationButton": MessageLookupByLibrary.simpleMessage("Adicionar"), + "addMore": MessageLookupByLibrary.simpleMessage("Adicionar mais"), + "addName": MessageLookupByLibrary.simpleMessage("Adicionar pessoa"), + "addNameOrMerge": + MessageLookupByLibrary.simpleMessage("Adicionar nome ou juntar"), + "addNew": MessageLookupByLibrary.simpleMessage("Adicionar novo"), + "addNewPerson": + MessageLookupByLibrary.simpleMessage("Adicionar nova pessoa"), + "addOnPageSubtitle": + MessageLookupByLibrary.simpleMessage("Detalhes dos addons"), + "addOnValidTill": m3, + "addOns": MessageLookupByLibrary.simpleMessage("addons"), + "addPhotos": MessageLookupByLibrary.simpleMessage("Adicionar fotos"), + "addSelected": + MessageLookupByLibrary.simpleMessage("Adicionar selecionados"), + "addToAlbum": + MessageLookupByLibrary.simpleMessage("Adicionar ao álbum"), + "addToEnte": MessageLookupByLibrary.simpleMessage("Adicionar ao Ente"), + "addToHiddenAlbum": + MessageLookupByLibrary.simpleMessage("Adicionar a álbum oculto"), + "addViewer": + MessageLookupByLibrary.simpleMessage("Adicionar visualizador"), + "addYourPhotosNow": + MessageLookupByLibrary.simpleMessage("Adicione suas fotos agora"), + "addedAs": MessageLookupByLibrary.simpleMessage("Adicionado como"), + "addedBy": m5, + "addedSuccessfullyTo": m6, + "addingToFavorites": MessageLookupByLibrary.simpleMessage( + "Adicionando aos favoritos..."), + "advanced": MessageLookupByLibrary.simpleMessage("Avançado"), + "advancedSettings": + MessageLookupByLibrary.simpleMessage("Definições avançadas"), + "after1Day": MessageLookupByLibrary.simpleMessage("Depois de 1 dia"), + "after1Hour": MessageLookupByLibrary.simpleMessage("Depois de 1 Hora"), + "after1Month": MessageLookupByLibrary.simpleMessage("Depois de 1 mês"), + "after1Week": + MessageLookupByLibrary.simpleMessage("Depois de 1 semana"), + "after1Year": MessageLookupByLibrary.simpleMessage("Depois de 1 ano"), + "albumOwner": MessageLookupByLibrary.simpleMessage("Dono"), + "albumParticipantsCount": m8, + "albumTitle": MessageLookupByLibrary.simpleMessage("Título do álbum"), + "albumUpdated": + MessageLookupByLibrary.simpleMessage("Álbum atualizado"), + "albums": MessageLookupByLibrary.simpleMessage("Álbuns"), + "allClear": MessageLookupByLibrary.simpleMessage("✨ Tudo limpo"), + "allMemoriesPreserved": MessageLookupByLibrary.simpleMessage( + "Todas as memórias preservadas"), + "allPersonGroupingWillReset": MessageLookupByLibrary.simpleMessage( + "Todos os agrupamentos para esta pessoa serão reiniciados e perderá todas as sugestões feitas para esta pessoa"), + "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Permitir que pessoas com o link também adicionem fotos ao álbum compartilhado."), + "allowAddingPhotos": + MessageLookupByLibrary.simpleMessage("Permitir adicionar fotos"), + "allowDownloads": + MessageLookupByLibrary.simpleMessage("Permitir downloads"), + "allowPeopleToAddPhotos": MessageLookupByLibrary.simpleMessage( + "Permitir que as pessoas adicionem fotos"), + "androidBiometricHint": + MessageLookupByLibrary.simpleMessage("Verificar identidade"), + "androidBiometricNotRecognized": MessageLookupByLibrary.simpleMessage( + "Não reconhecido. Tente novamente."), + "androidBiometricRequiredTitle": + MessageLookupByLibrary.simpleMessage("Biometria necessária"), + "androidBiometricSuccess": + MessageLookupByLibrary.simpleMessage("Sucesso"), + "androidCancelButton": MessageLookupByLibrary.simpleMessage("Cancelar"), + "androidDeviceCredentialsRequiredTitle": + MessageLookupByLibrary.simpleMessage( + "Credenciais do dispositivo são necessárias"), + "androidDeviceCredentialsSetupDescription": + MessageLookupByLibrary.simpleMessage( + "Credenciais do dispositivo necessárias"), + "androidGoToSettingsDescription": MessageLookupByLibrary.simpleMessage( + "A autenticação biométrica não está configurada no seu dispositivo. Vá a “Definições > Segurança” para adicionar a autenticação biométrica."), + "androidIosWebDesktop": + MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Desktop"), + "androidSignInTitle": + MessageLookupByLibrary.simpleMessage("Autenticação necessária"), + "appLock": MessageLookupByLibrary.simpleMessage("Bloqueio de app"), + "appLockDescriptions": MessageLookupByLibrary.simpleMessage( + "Escolha entre o ecrã de bloqueio predefinido do seu dispositivo e um ecrã de bloqueio personalizado com um PIN ou uma palavra-passe."), + "appVersion": m9, + "appleId": MessageLookupByLibrary.simpleMessage("ID da Apple"), + "apply": MessageLookupByLibrary.simpleMessage("Aplicar"), + "applyCodeTitle": + MessageLookupByLibrary.simpleMessage("Aplicar código"), + "appstoreSubscription": + MessageLookupByLibrary.simpleMessage("Subscrição da AppStore"), + "archive": MessageLookupByLibrary.simpleMessage("............"), + "archiveAlbum": MessageLookupByLibrary.simpleMessage("Arquivar álbum"), + "archiving": MessageLookupByLibrary.simpleMessage("Arquivar..."), + "areYouSureThatYouWantToLeaveTheFamily": + MessageLookupByLibrary.simpleMessage( + "Tem certeza que deseja sair do plano familiar?"), + "areYouSureYouWantToCancel": MessageLookupByLibrary.simpleMessage( + "Tem a certeza de que quer cancelar?"), + "areYouSureYouWantToChangeYourPlan": + MessageLookupByLibrary.simpleMessage( + "Tem a certeza de que pretende alterar o seu plano?"), + "areYouSureYouWantToExit": MessageLookupByLibrary.simpleMessage( + "Tem certeza de que deseja sair?"), + "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( + "Tem certeza que deseja terminar a sessão?"), + "areYouSureYouWantToRenew": MessageLookupByLibrary.simpleMessage( + "Tem a certeza de que pretende renovar?"), + "areYouSureYouWantToResetThisPerson": + MessageLookupByLibrary.simpleMessage( + "Tens a certeza de que queres repor esta pessoa?"), + "askCancelReason": MessageLookupByLibrary.simpleMessage( + "A sua subscrição foi cancelada. Gostaria de partilhar o motivo?"), + "askDeleteReason": MessageLookupByLibrary.simpleMessage( + "Qual o principal motivo pelo qual está a eliminar a conta?"), + "askYourLovedOnesToShare": MessageLookupByLibrary.simpleMessage( + "Peça aos seus entes queridos para partilharem"), + "atAFalloutShelter": + MessageLookupByLibrary.simpleMessage("em um abrigo avançado"), + "authToChangeEmailVerificationSetting": + MessageLookupByLibrary.simpleMessage( + "Por favor, autentique-se para alterar a verificação de e-mail"), + "authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage( + "Por favor, autentique-se para alterar a configuração da tela do ecrã de bloqueio"), + "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( + "Por favor, autentique-se para alterar o seu e-mail"), + "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( + "Por favor, autentique-se para alterar a palavra-passe"), + "authToConfigureTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Por favor, autentique para configurar a autenticação de dois fatores"), + "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Autentique-se para iniciar a eliminação da conta"), + "authToViewPasskey": MessageLookupByLibrary.simpleMessage( + "Autentique-se para ver a sua chave de acesso"), + "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( + "Por favor, autentique-se para ver as suas sessões ativas"), + "authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage( + "Por favor, autentique para ver seus arquivos ocultos"), + "authToViewYourMemories": MessageLookupByLibrary.simpleMessage( + "Por favor, autentique-se para ver suas memórias"), + "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Por favor, autentique-se para ver a chave de recuperação"), + "authenticating": + MessageLookupByLibrary.simpleMessage("A Autenticar..."), + "authenticationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Falha na autenticação, por favor tente novamente"), + "authenticationSuccessful": + MessageLookupByLibrary.simpleMessage("Autenticação bem sucedida!"), + "autoCastDialogBody": MessageLookupByLibrary.simpleMessage( + "Verá os dispositivos Cast disponíveis aqui."), + "autoCastiOSPermission": MessageLookupByLibrary.simpleMessage( + "Certifique-se de que as permissões de Rede local estão activadas para a aplicação Ente Photos, nas Definições."), + "autoLock": MessageLookupByLibrary.simpleMessage("Bloqueio automático"), + "autoLockFeatureDescription": MessageLookupByLibrary.simpleMessage( + "Tempo após o qual a aplicação bloqueia depois de ser colocada em segundo plano"), + "autoLogoutMessage": MessageLookupByLibrary.simpleMessage( + "Devido a uma falha técnica, a sua sessão foi encerrada. Pedimos desculpas pelo incómodo."), + "autoPair": + MessageLookupByLibrary.simpleMessage("Emparelhamento automático"), + "autoPairDesc": MessageLookupByLibrary.simpleMessage( + "O pareamento automático funciona apenas com dispositivos que suportam o Chromecast."), + "available": MessageLookupByLibrary.simpleMessage("Disponível"), + "availableStorageSpace": m10, + "backedUpFolders": MessageLookupByLibrary.simpleMessage( + "Pastas com cópia de segurança"), + "backup": MessageLookupByLibrary.simpleMessage("Cópia de segurança"), + "backupFailed": MessageLookupByLibrary.simpleMessage("Backup falhou"), + "backupOverMobileData": MessageLookupByLibrary.simpleMessage( + "Cópia de segurança através dos dados móveis"), + "backupSettings": MessageLookupByLibrary.simpleMessage( + "Definições da cópia de segurança"), + "backupStatus": MessageLookupByLibrary.simpleMessage( + "Status da cópia de segurança"), + "backupStatusDescription": MessageLookupByLibrary.simpleMessage( + "Os itens que foram salvos com segurança aparecerão aqui"), + "backupVideos": MessageLookupByLibrary.simpleMessage( + "Cópia de segurança de vídeos"), + "birthday": MessageLookupByLibrary.simpleMessage("Aniversário"), + "blackFridaySale": + MessageLookupByLibrary.simpleMessage("Promoção Black Friday"), + "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "cachedData": MessageLookupByLibrary.simpleMessage("Dados em cache"), + "calculating": MessageLookupByLibrary.simpleMessage("Calcular..."), + "canNotUploadToAlbumsOwnedByOthers": + MessageLookupByLibrary.simpleMessage( + "Não é possível fazer upload para álbuns pertencentes a outros"), + "canOnlyCreateLinkForFilesOwnedByYou": + MessageLookupByLibrary.simpleMessage( + "Só pode criar um link para arquivos pertencentes a você"), + "canOnlyRemoveFilesOwnedByYou": + MessageLookupByLibrary.simpleMessage(""), + "cancel": MessageLookupByLibrary.simpleMessage("Cancelar"), + "cancelOtherSubscription": m12, + "cancelSubscription": + MessageLookupByLibrary.simpleMessage("Cancelar subscrição"), + "cannotAddMorePhotosAfterBecomingViewer": m13, + "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( + "Não é possível eliminar ficheiros partilhados"), + "castIPMismatchBody": MessageLookupByLibrary.simpleMessage( + "Certifique-se de estar na mesma rede que a TV."), + "castIPMismatchTitle": + MessageLookupByLibrary.simpleMessage("Falha ao transmitir álbum"), + "castInstruction": MessageLookupByLibrary.simpleMessage( + "Visite cast.ente.io no dispositivo que pretende emparelhar.\n\n\nIntroduza o código abaixo para reproduzir o álbum na sua TV."), + "centerPoint": MessageLookupByLibrary.simpleMessage("Ponto central"), + "change": MessageLookupByLibrary.simpleMessage("Alterar"), + "changeEmail": MessageLookupByLibrary.simpleMessage("Alterar e-mail"), + "changeLocationOfSelectedItems": MessageLookupByLibrary.simpleMessage( + "Alterar a localização dos itens selecionados?"), + "changePassword": + MessageLookupByLibrary.simpleMessage("Alterar palavra-passe"), + "changePasswordTitle": + MessageLookupByLibrary.simpleMessage("Alterar palavra-passe"), + "changePermissions": + MessageLookupByLibrary.simpleMessage("Alterar permissões"), + "changeYourReferralCode": MessageLookupByLibrary.simpleMessage( + "Alterar o código de referência"), + "checkForUpdates": + MessageLookupByLibrary.simpleMessage("Procurar atualizações"), + "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( + "Verifique a sua caixa de entrada (e spam) para concluir a verificação"), + "checkStatus": MessageLookupByLibrary.simpleMessage("Verificar status"), + "checking": MessageLookupByLibrary.simpleMessage("A verificar..."), + "checkingModels": + MessageLookupByLibrary.simpleMessage("A verificar modelos..."), + "claimFreeStorage": MessageLookupByLibrary.simpleMessage( + "Solicitar armazenamento gratuito"), + "claimMore": MessageLookupByLibrary.simpleMessage("Reclamar mais!"), + "claimed": MessageLookupByLibrary.simpleMessage("Reclamado"), + "claimedStorageSoFar": m14, + "cleanUncategorized": + MessageLookupByLibrary.simpleMessage("Limpar sem categoria"), + "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( + "Remover todos os arquivos da Não Categorizados que estão presentes em outros álbuns"), + "clearCaches": MessageLookupByLibrary.simpleMessage("Limpar cache"), + "clearIndexes": MessageLookupByLibrary.simpleMessage("Limpar índices"), + "click": MessageLookupByLibrary.simpleMessage("Clique"), + "clickOnTheOverflowMenu": + MessageLookupByLibrary.simpleMessage("• Clique no menu adicional"), + "close": MessageLookupByLibrary.simpleMessage("Fechar"), + "clubByCaptureTime": MessageLookupByLibrary.simpleMessage( + "Agrupar por tempo de captura"), + "clubByFileName": MessageLookupByLibrary.simpleMessage( + "Agrupar pelo nome de arquivo"), + "clusteringProgress": + MessageLookupByLibrary.simpleMessage("Progresso de agrupamento"), + "codeAppliedPageTitle": + MessageLookupByLibrary.simpleMessage("Código aplicado"), + "codeChangeLimitReached": MessageLookupByLibrary.simpleMessage( + "Desculpe, você atingiu o limite de alterações de código."), + "codeCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Código copiado para área de transferência"), + "codeUsedByYou": + MessageLookupByLibrary.simpleMessage("Código usado por você"), + "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( + "Criar um link para permitir que as pessoas adicionem e visualizem fotos em seu álbum compartilhado sem precisar de um aplicativo Ente ou conta. Ótimo para coletar fotos do evento."), + "collaborativeLink": + MessageLookupByLibrary.simpleMessage("Link colaborativo"), + "collaborativeLinkCreatedFor": m15, + "collaborator": MessageLookupByLibrary.simpleMessage("Colaborador"), + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": + MessageLookupByLibrary.simpleMessage( + "Os colaboradores podem adicionar fotos e vídeos ao álbum compartilhado."), + "collaboratorsSuccessfullyAdded": m16, + "collageLayout": MessageLookupByLibrary.simpleMessage("Layout"), + "collageSaved": + MessageLookupByLibrary.simpleMessage("Colagem guardada na galeria"), + "collect": MessageLookupByLibrary.simpleMessage("Recolher"), + "collectEventPhotos": + MessageLookupByLibrary.simpleMessage("Coletar fotos do evento"), + "collectPhotos": MessageLookupByLibrary.simpleMessage("Coletar fotos"), + "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Crie um link onde seus amigos podem enviar fotos na qualidade original."), + "color": MessageLookupByLibrary.simpleMessage("Cor"), + "configuration": MessageLookupByLibrary.simpleMessage("Configuração"), + "confirm": MessageLookupByLibrary.simpleMessage("Confirmar"), + "confirm2FADisable": MessageLookupByLibrary.simpleMessage( + "Tem a certeza de que pretende desativar a autenticação de dois fatores?"), + "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Confirmar eliminação de conta"), + "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( + "Sim, pretendo apagar permanentemente esta conta e os respetivos dados em todas as aplicações."), + "confirmPassword": + MessageLookupByLibrary.simpleMessage("Confirmar palavra-passe"), + "confirmPlanChange": MessageLookupByLibrary.simpleMessage( + "Confirmar alteração de plano"), + "confirmRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Confirmar chave de recuperação"), + "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Confirmar chave de recuperação"), + "connectToDevice": + MessageLookupByLibrary.simpleMessage("Ligar ao dispositivo"), + "contactFamilyAdmin": m18, + "contactSupport": + MessageLookupByLibrary.simpleMessage("Contactar o suporte"), + "contactToManageSubscription": m19, + "contacts": MessageLookupByLibrary.simpleMessage("Contactos"), + "contents": MessageLookupByLibrary.simpleMessage("Conteúdos"), + "continueLabel": MessageLookupByLibrary.simpleMessage("Continuar"), + "continueOnFreeTrial": + MessageLookupByLibrary.simpleMessage("Continuar em teste gratuito"), + "convertToAlbum": + MessageLookupByLibrary.simpleMessage("Converter para álbum"), + "copyEmailAddress": + MessageLookupByLibrary.simpleMessage("Copiar endereço de email"), + "copyLink": MessageLookupByLibrary.simpleMessage("Copiar link"), + "copypasteThisCodentoYourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Copie e cole este código\nno seu aplicativo de autenticação"), + "couldNotBackUpTryLater": MessageLookupByLibrary.simpleMessage( + "Não foi possível fazer o backup de seus dados.\nTentaremos novamente mais tarde."), + "couldNotFreeUpSpace": MessageLookupByLibrary.simpleMessage( + "Não foi possível libertar espaço"), + "couldNotUpdateSubscription": MessageLookupByLibrary.simpleMessage( + "Não foi possível atualizar a subscrição"), + "count": MessageLookupByLibrary.simpleMessage("Contagem"), + "crashReporting": + MessageLookupByLibrary.simpleMessage("Relatório de falhas"), + "create": MessageLookupByLibrary.simpleMessage("Criar"), + "createAccount": MessageLookupByLibrary.simpleMessage("Criar conta"), + "createAlbumActionHint": MessageLookupByLibrary.simpleMessage( + "Pressione e segure para selecionar fotos e clique em + para criar um álbum"), + "createCollaborativeLink": + MessageLookupByLibrary.simpleMessage("Criar link colaborativo"), + "createCollage": MessageLookupByLibrary.simpleMessage("Criar coleção"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("Criar nova conta"), + "createOrSelectAlbum": + MessageLookupByLibrary.simpleMessage("Criar ou selecionar álbum"), + "createPublicLink": + MessageLookupByLibrary.simpleMessage("Criar link público"), + "creatingLink": MessageLookupByLibrary.simpleMessage("Criar link..."), + "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( + "Atualização crítica disponível"), + "crop": MessageLookupByLibrary.simpleMessage("Recortar"), + "currentUsageIs": + MessageLookupByLibrary.simpleMessage("O uso atual é "), + "custom": MessageLookupByLibrary.simpleMessage("Personalizado"), + "customEndpoint": m20, + "darkTheme": MessageLookupByLibrary.simpleMessage("Escuro"), + "dayToday": MessageLookupByLibrary.simpleMessage("Hoje"), + "dayYesterday": MessageLookupByLibrary.simpleMessage("Ontem"), + "decrypting": MessageLookupByLibrary.simpleMessage("A desencriptar…"), + "decryptingVideo": + MessageLookupByLibrary.simpleMessage("Descriptografando vídeo..."), + "deduplicateFiles": + MessageLookupByLibrary.simpleMessage("Arquivos duplicados"), + "delete": MessageLookupByLibrary.simpleMessage("Apagar"), + "deleteAccount": MessageLookupByLibrary.simpleMessage("Eliminar conta"), + "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( + "Lamentamos a sua partida. Indique-nos a razão para podermos melhorar o serviço."), + "deleteAccountPermanentlyButton": MessageLookupByLibrary.simpleMessage( + "Excluir conta permanentemente"), + "deleteAlbum": MessageLookupByLibrary.simpleMessage("Apagar álbum"), + "deleteAlbumDialog": MessageLookupByLibrary.simpleMessage( + "Eliminar também as fotos (e vídeos) presentes neste álbum de all os outros álbuns de que fazem parte?"), + "deleteAlbumsDialogBody": MessageLookupByLibrary.simpleMessage( + "Esta ação elimina todos os álbuns vazios. Isto é útil quando pretende reduzir a confusão na sua lista de álbuns."), + "deleteAll": MessageLookupByLibrary.simpleMessage("Apagar tudo"), + "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( + "Esta conta está ligada a outras aplicações Ente, se utilizar alguma. Os seus dados carregados, em todas as aplicações Ente, serão agendados para eliminação e a sua conta será permanentemente eliminada."), + "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( + "Envie um e-mail para accountt-deletion@ente.io a partir do seu endereço de email registrado."), + "deleteEmptyAlbums": + MessageLookupByLibrary.simpleMessage("Apagar álbuns vazios"), + "deleteEmptyAlbumsWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Apagar álbuns vazios?"), + "deleteFromBoth": + MessageLookupByLibrary.simpleMessage("Apagar de ambos"), + "deleteFromDevice": + MessageLookupByLibrary.simpleMessage("Apagar do dispositivo"), + "deleteFromEnte": + MessageLookupByLibrary.simpleMessage("Apagar do Ente"), + "deleteItemCount": m21, + "deleteLocation": + MessageLookupByLibrary.simpleMessage("Apagar localização"), + "deletePhotos": MessageLookupByLibrary.simpleMessage("Apagar fotos"), + "deleteProgress": m22, + "deleteReason1": MessageLookupByLibrary.simpleMessage( + "Falta uma funcionalidade-chave de que eu necessito"), + "deleteReason2": MessageLookupByLibrary.simpleMessage( + "O aplicativo ou um determinado recurso não se comportou como era suposto"), + "deleteReason3": MessageLookupByLibrary.simpleMessage( + "Encontrei outro serviço de que gosto mais"), + "deleteReason4": + MessageLookupByLibrary.simpleMessage("O motivo não está na lista"), + "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( + "O seu pedido será processado dentro de 72 horas."), + "deleteSharedAlbum": MessageLookupByLibrary.simpleMessage( + "Excluir álbum compartilhado?"), + "deleteSharedAlbumDialogBody": MessageLookupByLibrary.simpleMessage( + "O álbum será apagado para todos\n\nVocê perderá o acesso a fotos compartilhadas neste álbum que são propriedade de outros"), + "deselectAll": MessageLookupByLibrary.simpleMessage("Desmarcar tudo"), + "designedToOutlive": + MessageLookupByLibrary.simpleMessage("Feito para ter longevidade"), + "details": MessageLookupByLibrary.simpleMessage("Detalhes"), + "developerSettings": + MessageLookupByLibrary.simpleMessage("Definições do programador"), + "developerSettingsWarning": MessageLookupByLibrary.simpleMessage( + "Tem a certeza de que pretende modificar as definições de programador?"), + "deviceCodeHint": + MessageLookupByLibrary.simpleMessage("Introduza o código"), + "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( + "Os ficheiros adicionados a este álbum de dispositivo serão automaticamente transferidos para o Ente."), + "deviceLock": + MessageLookupByLibrary.simpleMessage("Bloqueio do dispositivo"), + "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( + "Desativar o bloqueio do ecrã do dispositivo quando o Ente estiver em primeiro plano e houver uma cópia de segurança em curso. Normalmente, isto não é necessário, mas pode ajudar a que os grandes carregamentos e as importações iniciais de grandes bibliotecas sejam concluídos mais rapidamente."), + "deviceNotFound": + MessageLookupByLibrary.simpleMessage("Dispositivo não encontrado"), + "didYouKnow": MessageLookupByLibrary.simpleMessage("Você sabia?"), + "disableAutoLock": MessageLookupByLibrary.simpleMessage( + "Desativar bloqueio automático"), + "disableDownloadWarningBody": MessageLookupByLibrary.simpleMessage( + "Visualizadores ainda podem fazer capturas de tela ou salvar uma cópia das suas fotos usando ferramentas externas"), + "disableDownloadWarningTitle": + MessageLookupByLibrary.simpleMessage("Por favor, observe"), + "disableLinkMessage": m23, + "disableTwofactor": MessageLookupByLibrary.simpleMessage( + "Desativar autenticação de dois fatores"), + "disablingTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Desativar a autenticação de dois factores..."), + "discord": MessageLookupByLibrary.simpleMessage("Discord"), + "discover": MessageLookupByLibrary.simpleMessage("Descobrir"), + "discover_babies": MessageLookupByLibrary.simpleMessage("Bebés"), + "discover_celebrations": + MessageLookupByLibrary.simpleMessage("Comemorações"), + "discover_food": MessageLookupByLibrary.simpleMessage("Comida"), + "discover_greenery": MessageLookupByLibrary.simpleMessage("Vegetação"), + "discover_hills": MessageLookupByLibrary.simpleMessage("Colinas"), + "discover_identity": MessageLookupByLibrary.simpleMessage("Identidade"), + "discover_memes": MessageLookupByLibrary.simpleMessage("Memes"), + "discover_notes": MessageLookupByLibrary.simpleMessage("Notas"), + "discover_pets": + MessageLookupByLibrary.simpleMessage("Animais de estimação"), + "discover_receipts": MessageLookupByLibrary.simpleMessage("Recibos"), + "discover_screenshots": + MessageLookupByLibrary.simpleMessage("Capturas de ecrã"), + "discover_selfies": MessageLookupByLibrary.simpleMessage("Selfies"), + "discover_sunset": MessageLookupByLibrary.simpleMessage("Pôr do sol"), + "discover_visiting_cards": + MessageLookupByLibrary.simpleMessage("Cartões de visita"), + "discover_wallpapers": + MessageLookupByLibrary.simpleMessage("Papéis de parede"), + "dismiss": MessageLookupByLibrary.simpleMessage("Rejeitar"), + "distanceInKMUnit": MessageLookupByLibrary.simpleMessage("km"), + "doNotSignOut": + MessageLookupByLibrary.simpleMessage("Não terminar a sessão"), + "doThisLater": + MessageLookupByLibrary.simpleMessage("Fazer isto mais tarde"), + "doYouWantToDiscardTheEditsYouHaveMade": + MessageLookupByLibrary.simpleMessage( + "Pretende eliminar as edições que efectuou?"), + "done": MessageLookupByLibrary.simpleMessage("Concluído"), + "doubleYourStorage": MessageLookupByLibrary.simpleMessage( + "Duplicar o seu armazenamento"), + "download": MessageLookupByLibrary.simpleMessage("Download"), + "downloadFailed": + MessageLookupByLibrary.simpleMessage("Falha no download"), + "downloading": MessageLookupByLibrary.simpleMessage("A transferir..."), + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, + "edit": MessageLookupByLibrary.simpleMessage("Editar"), + "editLocation": + MessageLookupByLibrary.simpleMessage("Editar localização"), + "editLocationTagTitle": + MessageLookupByLibrary.simpleMessage("Editar localização"), + "editPerson": MessageLookupByLibrary.simpleMessage("Editar pessoa"), + "editsSaved": MessageLookupByLibrary.simpleMessage("Edição guardada"), + "editsToLocationWillOnlyBeSeenWithinEnte": + MessageLookupByLibrary.simpleMessage( + "Edições para localização só serão vistas dentro do Ente"), + "eligible": MessageLookupByLibrary.simpleMessage("elegível"), + "email": MessageLookupByLibrary.simpleMessage("Email"), + "emailChangedTo": m27, + "emailNoEnteAccount": m29, + "emailVerificationToggle": + MessageLookupByLibrary.simpleMessage("Verificação por e-mail"), + "emailYourLogs": + MessageLookupByLibrary.simpleMessage("Enviar logs por e-mail"), + "empty": MessageLookupByLibrary.simpleMessage("Esvaziar"), + "emptyTrash": MessageLookupByLibrary.simpleMessage("Esvaziar lixo?"), + "enable": MessageLookupByLibrary.simpleMessage("Ativar"), + "enableMLIndexingDesc": MessageLookupByLibrary.simpleMessage( + "O Ente suporta a aprendizagem automática no dispositivo para reconhecimento facial, pesquisa mágica e outras funcionalidades de pesquisa avançadas"), + "enableMachineLearningBanner": MessageLookupByLibrary.simpleMessage( + "Habilitar aprendizagem automática para pesquisa mágica e reconhecimento de rosto"), + "enableMaps": MessageLookupByLibrary.simpleMessage("Ativar mapas"), + "enableMapsDesc": MessageLookupByLibrary.simpleMessage( + "Esta opção mostra as suas fotografias num mapa do mundo.\n\n\nEste mapa é alojado pelo Open Street Map e as localizações exactas das suas fotografias nunca são partilhadas.\n\n\nPode desativar esta funcionalidade em qualquer altura nas Definições."), + "enabled": MessageLookupByLibrary.simpleMessage("Ativado"), + "encryptingBackup": + MessageLookupByLibrary.simpleMessage("Criptografando backup..."), + "encryption": MessageLookupByLibrary.simpleMessage("Encriptação"), + "encryptionKeys": + MessageLookupByLibrary.simpleMessage("Chaves de encriptação"), + "endpointUpdatedMessage": MessageLookupByLibrary.simpleMessage( + "Endpoint atualizado com sucesso"), + "endtoendEncryptedByDefault": MessageLookupByLibrary.simpleMessage( + "Criptografia de ponta a ponta por padrão"), + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": + MessageLookupByLibrary.simpleMessage( + "Ente pode criptografar e preservar arquivos apenas se você conceder acesso a eles"), + "entePhotosPerm": MessageLookupByLibrary.simpleMessage( + "Ente precisa de permissão para preservar suas fotos"), + "enteSubscriptionPitch": MessageLookupByLibrary.simpleMessage( + "O Ente preserva as suas memórias, para que estejam sempre disponíveis, mesmo que perca o seu dispositivo."), + "enteSubscriptionShareWithFamily": MessageLookupByLibrary.simpleMessage( + "Sua família também pode ser adicionada ao seu plano."), + "enterAlbumName": + MessageLookupByLibrary.simpleMessage("Introduzir nome do álbum"), + "enterCode": MessageLookupByLibrary.simpleMessage("Insira o código"), + "enterCodeDescription": MessageLookupByLibrary.simpleMessage( + "Introduza o código fornecido pelo seu amigo para obter armazenamento gratuito para ambos"), + "enterDateOfBirth": + MessageLookupByLibrary.simpleMessage("Aniversário (opcional)"), + "enterEmail": MessageLookupByLibrary.simpleMessage("Digite o e-mail"), + "enterFileName": + MessageLookupByLibrary.simpleMessage("Inserir nome do arquivo"), + "enterName": MessageLookupByLibrary.simpleMessage("Inserir nome"), + "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Inserir uma nova palavra-passe para encriptar os seus dados"), + "enterPassword": + MessageLookupByLibrary.simpleMessage("Introduzir palavra-passe"), + "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Inserir uma palavra-passe para encriptar os seus dados"), + "enterPersonName": + MessageLookupByLibrary.simpleMessage("Inserir nome da pessoa"), + "enterPin": MessageLookupByLibrary.simpleMessage("Introduzir PIN"), + "enterReferralCode": MessageLookupByLibrary.simpleMessage( + "Insira o código de referência"), + "enterThe6digitCodeFromnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Introduzir o código de 6 dígitos da\nsua aplicação de autenticação"), + "enterValidEmail": MessageLookupByLibrary.simpleMessage( + "Por favor, insira um endereço de email válido."), + "enterYourEmailAddress": MessageLookupByLibrary.simpleMessage( + "Insira o seu endereço de email"), + "enterYourPassword": MessageLookupByLibrary.simpleMessage( + "Introduza a sua palavra-passe"), + "enterYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Insira a sua chave de recuperação"), + "error": MessageLookupByLibrary.simpleMessage("Erro"), + "everywhere": MessageLookupByLibrary.simpleMessage("em todo o lado"), + "exif": MessageLookupByLibrary.simpleMessage("EXIF"), + "existingUser": + MessageLookupByLibrary.simpleMessage("Utilizador existente"), + "expiredLinkInfo": MessageLookupByLibrary.simpleMessage( + "Este link expirou. Por favor, selecione um novo tempo de expiração ou desabilite a expiração do link."), + "exportLogs": MessageLookupByLibrary.simpleMessage("Exportar logs"), + "exportYourData": + MessageLookupByLibrary.simpleMessage("Exportar os seus dados"), + "extraPhotosFound": MessageLookupByLibrary.simpleMessage( + "Fotos adicionais encontradas"), + "extraPhotosFoundFor": m31, + "faceRecognition": + MessageLookupByLibrary.simpleMessage("Reconhecimento facial"), + "faces": MessageLookupByLibrary.simpleMessage("Rostos"), + "failedToApplyCode": + MessageLookupByLibrary.simpleMessage("Falha ao aplicar código"), + "failedToCancel": + MessageLookupByLibrary.simpleMessage("Falhou ao cancelar"), + "failedToDownloadVideo": MessageLookupByLibrary.simpleMessage( + "Falha ao fazer o download do vídeo"), + "failedToFetchActiveSessions": MessageLookupByLibrary.simpleMessage( + "Falha ao obter sessões em atividade"), + "failedToFetchOriginalForEdit": MessageLookupByLibrary.simpleMessage( + "Falha ao obter original para edição"), + "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( + "Não foi possível obter detalhes de indicação. Por favor, tente novamente mais tarde."), + "failedToLoadAlbums": + MessageLookupByLibrary.simpleMessage("Falha ao carregar álbuns"), + "failedToPlayVideo": MessageLookupByLibrary.simpleMessage( + "Falha ao reproduzir multimédia"), + "failedToRefreshStripeSubscription": + MessageLookupByLibrary.simpleMessage( + "Falha ao atualizar subscrição"), + "failedToRenew": + MessageLookupByLibrary.simpleMessage("Falhou ao renovar"), + "failedToVerifyPaymentStatus": MessageLookupByLibrary.simpleMessage( + "Falha ao verificar status do pagamento"), + "familyPlanOverview": MessageLookupByLibrary.simpleMessage( + "Adicione 5 membros da família ao seu plano existente sem pagar mais.\n\n\nCada membro tem o seu próprio espaço privado e não pode ver os ficheiros dos outros, a menos que sejam partilhados.\n\n\nOs planos familiares estão disponíveis para clientes que tenham uma subscrição paga do Ente.\n\n\nSubscreva agora para começar!"), + "familyPlanPortalTitle": + MessageLookupByLibrary.simpleMessage("Família"), + "familyPlans": + MessageLookupByLibrary.simpleMessage("Planos familiares"), + "faq": MessageLookupByLibrary.simpleMessage("Perguntas Frequentes"), + "faqs": MessageLookupByLibrary.simpleMessage("Perguntas frequentes"), + "favorite": MessageLookupByLibrary.simpleMessage("Favorito"), + "feedback": MessageLookupByLibrary.simpleMessage("Opinião"), + "fileFailedToSaveToGallery": MessageLookupByLibrary.simpleMessage( + "Falha ao guardar o ficheiro na galeria"), + "fileInfoAddDescHint": + MessageLookupByLibrary.simpleMessage("Acrescente uma descrição..."), + "fileSavedToGallery": + MessageLookupByLibrary.simpleMessage("Arquivo guardado na galeria"), + "fileTypes": MessageLookupByLibrary.simpleMessage("Tipos de arquivo"), + "fileTypesAndNames": + MessageLookupByLibrary.simpleMessage("Tipos de arquivo e nomes"), + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, + "filesDeleted": + MessageLookupByLibrary.simpleMessage("Arquivos apagados"), + "filesSavedToGallery": MessageLookupByLibrary.simpleMessage( + "Arquivos guardados na galeria"), + "findPeopleByName": MessageLookupByLibrary.simpleMessage( + "Encontrar pessoas rapidamente pelo nome"), + "findThemQuickly": + MessageLookupByLibrary.simpleMessage("Ache-os rapidamente"), + "flip": MessageLookupByLibrary.simpleMessage("Inverter"), + "forYourMemories": + MessageLookupByLibrary.simpleMessage("para suas memórias"), + "forgotPassword": MessageLookupByLibrary.simpleMessage( + "Esqueceu-se da palavra-passe"), + "foundFaces": + MessageLookupByLibrary.simpleMessage("Rostos encontrados"), + "freeStorageClaimed": MessageLookupByLibrary.simpleMessage( + "Armazenamento gratuito reclamado"), + "freeStorageOnReferralSuccess": m35, + "freeStorageUsable": MessageLookupByLibrary.simpleMessage( + "Armazenamento livre utilizável"), + "freeTrial": MessageLookupByLibrary.simpleMessage("Teste grátis"), + "freeTrialValidTill": m36, + "freeUpAmount": m38, + "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage( + "Libertar espaço no dispositivo"), + "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( + "Poupe espaço no seu dispositivo limpando ficheiros dos quais já foi feita uma cópia de segurança."), + "freeUpSpace": MessageLookupByLibrary.simpleMessage("Libertar espaço"), + "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( + "Até 1000 memórias mostradas na galeria"), + "general": MessageLookupByLibrary.simpleMessage("Geral"), + "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( + "Gerando chaves de encriptação..."), + "genericProgress": m40, + "goToSettings": + MessageLookupByLibrary.simpleMessage("Ir para as definições"), + "googlePlayId": + MessageLookupByLibrary.simpleMessage("ID do Google Play"), + "grantFullAccessPrompt": MessageLookupByLibrary.simpleMessage( + "Por favor, permita o acesso a todas as fotos nas definições do aplicativo"), + "grantPermission": + MessageLookupByLibrary.simpleMessage("Conceder permissão"), + "groupNearbyPhotos": + MessageLookupByLibrary.simpleMessage("Agrupar fotos próximas"), + "guestView": MessageLookupByLibrary.simpleMessage("Visão de convidado"), + "guestViewEnablePreSteps": MessageLookupByLibrary.simpleMessage( + "Para ativar a vista de convidado, configure o código de acesso do dispositivo ou o bloqueio do ecrã nas definições do sistema."), + "hearUsExplanation": MessageLookupByLibrary.simpleMessage( + "Não monitorizamos as instalações de aplicações. Ajudaria se nos dissesse onde nos encontrou!"), + "hearUsWhereTitle": MessageLookupByLibrary.simpleMessage( + "Como é que soube do Ente? (opcional)"), + "help": MessageLookupByLibrary.simpleMessage("Ajuda"), + "hidden": MessageLookupByLibrary.simpleMessage("Oculto"), + "hide": MessageLookupByLibrary.simpleMessage("Ocultar"), + "hideContent": MessageLookupByLibrary.simpleMessage("Ocultar conteúdo"), + "hideContentDescriptionAndroid": MessageLookupByLibrary.simpleMessage( + "Oculta o conteúdo da aplicação no alternador de aplicações e desactiva as capturas de ecrã"), + "hideContentDescriptionIos": MessageLookupByLibrary.simpleMessage( + "Oculta o conteúdo da aplicação no alternador de aplicações"), + "hiding": MessageLookupByLibrary.simpleMessage("Ocultando..."), + "hostedAtOsmFrance": + MessageLookupByLibrary.simpleMessage("Hospedado na OSM France"), + "howItWorks": MessageLookupByLibrary.simpleMessage("Como funciona"), + "howToViewShareeVerificationID": MessageLookupByLibrary.simpleMessage( + "Por favor, peça-lhes para pressionar longamente o endereço de e-mail na tela de configurações e verifique se os IDs de ambos os dispositivos coincidem."), + "iOSGoToSettingsDescription": MessageLookupByLibrary.simpleMessage( + "A autenticação biométrica não está configurada no seu dispositivo. Active o Touch ID ou o Face ID no seu telemóvel."), + "iOSLockOut": MessageLookupByLibrary.simpleMessage( + "A autenticação biométrica está desativada. Por favor, bloqueie e desbloqueie o ecrã para ativá-la."), + "iOSOkButton": MessageLookupByLibrary.simpleMessage("OK"), + "ignoreUpdate": MessageLookupByLibrary.simpleMessage("Ignorar"), + "ignoredFolderUploadReason": MessageLookupByLibrary.simpleMessage( + "Alguns ficheiros deste álbum não podem ser carregados porque foram anteriormente eliminados do Ente."), + "immediately": MessageLookupByLibrary.simpleMessage("Imediatamente"), + "importing": MessageLookupByLibrary.simpleMessage("A importar..."), + "incorrectCode": + MessageLookupByLibrary.simpleMessage("Código incorrecto"), + "incorrectPasswordTitle": + MessageLookupByLibrary.simpleMessage("Palavra-passe incorreta"), + "incorrectRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Chave de recuperação incorreta"), + "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage( + "A chave de recuperação inserida está incorreta"), + "incorrectRecoveryKeyTitle": MessageLookupByLibrary.simpleMessage( + "Chave de recuperação incorreta"), + "indexedItems": MessageLookupByLibrary.simpleMessage("Itens indexados"), + "indexingIsPaused": MessageLookupByLibrary.simpleMessage( + "A indexação está pausada, será retomada automaticamente quando o dispositivo estiver pronto."), + "insecureDevice": + MessageLookupByLibrary.simpleMessage("Dispositivo inseguro"), + "installManually": + MessageLookupByLibrary.simpleMessage("Instalar manualmente"), + "invalidEmailAddress": + MessageLookupByLibrary.simpleMessage("Endereço de email inválido"), + "invalidEndpoint": + MessageLookupByLibrary.simpleMessage("Endpoint inválido"), + "invalidEndpointMessage": MessageLookupByLibrary.simpleMessage( + "Desculpe, o endpoint que introduziu é inválido. Introduza um ponto final válido e tente novamente."), + "invalidKey": MessageLookupByLibrary.simpleMessage("Chave inválida"), + "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( + "A chave de recuperação que inseriu não é válida. Por favor, certifique-se que ela contém 24 palavras e verifique a ortografia de cada uma.\n\nSe inseriu um código de recuperação mais antigo, certifique-se de que tem 64 caracteres e verifique cada um deles."), + "invite": MessageLookupByLibrary.simpleMessage("Convidar"), + "inviteToEnte": + MessageLookupByLibrary.simpleMessage("Convidar para Ente"), + "inviteYourFriends": + MessageLookupByLibrary.simpleMessage("Convide os seus amigos"), + "inviteYourFriendsToEnte": MessageLookupByLibrary.simpleMessage( + "Convide seus amigos para o Ente"), + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": + MessageLookupByLibrary.simpleMessage( + "Parece que algo correu mal. Por favor, tente novamente após algum tempo. Se o erro persistir, contacte a nossa equipa de apoio."), + "itemCount": m42, + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": + MessageLookupByLibrary.simpleMessage( + "Os itens mostram o número de dias restantes antes da eliminação permanente"), + "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( + "Os itens selecionados serão removidos deste álbum"), + "joinDiscord": + MessageLookupByLibrary.simpleMessage("Juntar-se ao Discord"), + "keepPhotos": MessageLookupByLibrary.simpleMessage("Manter fotos"), + "kiloMeterUnit": MessageLookupByLibrary.simpleMessage("km"), + "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( + "Por favor, ajude-nos com esta informação"), + "language": MessageLookupByLibrary.simpleMessage("Idioma"), + "lastUpdated": + MessageLookupByLibrary.simpleMessage("Última atualização"), + "leave": MessageLookupByLibrary.simpleMessage("Sair"), + "leaveAlbum": MessageLookupByLibrary.simpleMessage("Sair do álbum"), + "leaveFamily": + MessageLookupByLibrary.simpleMessage("Deixar plano famíliar"), + "leaveSharedAlbum": MessageLookupByLibrary.simpleMessage( + "Sair do álbum compartilhado?"), + "left": MessageLookupByLibrary.simpleMessage("Esquerda"), + "light": MessageLookupByLibrary.simpleMessage("Claro"), + "lightTheme": MessageLookupByLibrary.simpleMessage("Claro"), + "linkCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Link copiado para a área de transferência"), + "linkDeviceLimit": + MessageLookupByLibrary.simpleMessage("Limite de dispositivo"), + "linkEnabled": MessageLookupByLibrary.simpleMessage("Ativado"), + "linkExpired": MessageLookupByLibrary.simpleMessage("Expirado"), + "linkExpiresOn": m45, + "linkExpiry": MessageLookupByLibrary.simpleMessage("Link expirado"), + "linkHasExpired": + MessageLookupByLibrary.simpleMessage("O link expirou"), + "linkNeverExpires": MessageLookupByLibrary.simpleMessage("Nunca"), + "livePhotos": + MessageLookupByLibrary.simpleMessage("Fotos Em Tempo Real"), + "loadMessage1": MessageLookupByLibrary.simpleMessage( + "Pode partilhar a sua subscrição com a sua família"), + "loadMessage2": MessageLookupByLibrary.simpleMessage( + "Nós preservamos mais de 30 milhões de memórias até agora"), + "loadMessage3": MessageLookupByLibrary.simpleMessage( + "Mantemos 3 cópias dos seus dados, uma em um abrigo subterrâneo"), + "loadMessage4": MessageLookupByLibrary.simpleMessage( + "Todos os nossos aplicativos são de código aberto"), + "loadMessage5": MessageLookupByLibrary.simpleMessage( + "Nosso código-fonte e criptografia foram auditadas externamente"), + "loadMessage6": + MessageLookupByLibrary.simpleMessage("Deixar o álbum partilhado?"), + "loadMessage7": MessageLookupByLibrary.simpleMessage( + "Nossos aplicativos móveis são executados em segundo plano para criptografar e fazer backup de quaisquer novas fotos que você clique"), + "loadMessage8": MessageLookupByLibrary.simpleMessage( + "web.ente.io tem um envio mais rápido"), + "loadMessage9": MessageLookupByLibrary.simpleMessage( + "Nós usamos Xchacha20Poly1305 para criptografar seus dados com segurança"), + "loadingExifData": + MessageLookupByLibrary.simpleMessage("Carregando dados EXIF..."), + "loadingGallery": + MessageLookupByLibrary.simpleMessage("Carregando galeria..."), + "loadingMessage": + MessageLookupByLibrary.simpleMessage("Carregar as suas fotos..."), + "loadingModel": + MessageLookupByLibrary.simpleMessage("Transferindo modelos..."), + "loadingYourPhotos": + MessageLookupByLibrary.simpleMessage("Carregar as suas fotos..."), + "localGallery": MessageLookupByLibrary.simpleMessage("Galeria local"), + "localIndexing": + MessageLookupByLibrary.simpleMessage("Indexação local"), + "localSyncErrorMessage": MessageLookupByLibrary.simpleMessage( + "Parece que algo correu mal, uma vez que a sincronização de fotografias locais está a demorar mais tempo do que o esperado. Contacte a nossa equipa de apoio"), + "location": MessageLookupByLibrary.simpleMessage("Localização"), + "locationName": + MessageLookupByLibrary.simpleMessage("Nome da localização"), + "locationTagFeatureDescription": MessageLookupByLibrary.simpleMessage( + "Uma etiqueta de localização agrupa todas as fotos que foram tiradas num determinado raio de uma fotografia"), + "locations": MessageLookupByLibrary.simpleMessage("Localizações"), + "lockButtonLabel": MessageLookupByLibrary.simpleMessage("Bloquear"), + "lockscreen": MessageLookupByLibrary.simpleMessage("Ecrã de bloqueio"), + "logInLabel": MessageLookupByLibrary.simpleMessage("Iniciar sessão"), + "loggingOut": + MessageLookupByLibrary.simpleMessage("Terminar a sessão..."), + "loginSessionExpired": + MessageLookupByLibrary.simpleMessage("Sessão expirada"), + "loginSessionExpiredDetails": MessageLookupByLibrary.simpleMessage( + "A sua sessão expirou. Por favor, inicie sessão novamente."), + "loginTerms": MessageLookupByLibrary.simpleMessage( + "Ao clicar em iniciar sessão, eu concordo com os termos de serviço e política de privacidade"), + "loginWithTOTP": + MessageLookupByLibrary.simpleMessage("Iniciar sessão com TOTP"), + "logout": MessageLookupByLibrary.simpleMessage("Terminar sessão"), + "logsDialogBody": MessageLookupByLibrary.simpleMessage( + "Isto enviará os registos para nos ajudar a resolver o problema. Tenha em atenção que os nomes dos ficheiros serão incluídos para ajudar a localizar problemas com ficheiros específicos."), + "longPressAnEmailToVerifyEndToEndEncryption": + MessageLookupByLibrary.simpleMessage( + "Pressione e segure um e-mail para verificar a criptografia de ponta a ponta."), + "longpressOnAnItemToViewInFullscreen": + MessageLookupByLibrary.simpleMessage( + "Pressione e segure em um item para ver em tela cheia"), + "loopVideoOff": + MessageLookupByLibrary.simpleMessage("Repetir vídeo desligado"), + "loopVideoOn": + MessageLookupByLibrary.simpleMessage("Repetir vídeo ligado"), + "lostDevice": + MessageLookupByLibrary.simpleMessage("Perdeu o seu dispositívo?"), + "machineLearning": + MessageLookupByLibrary.simpleMessage("Aprendizagem automática"), + "magicSearch": MessageLookupByLibrary.simpleMessage("Pesquisa mágica"), + "magicSearchHint": MessageLookupByLibrary.simpleMessage( + "A pesquisa mágica permite pesquisar fotos por seu conteúdo, por exemplo, \'flor\', \'carro vermelho\', \'documentos de identidade\'"), + "manage": MessageLookupByLibrary.simpleMessage("Gerir"), + "manageDeviceStorageDesc": MessageLookupByLibrary.simpleMessage( + "Reveja e limpe o armazenamento de cache local."), + "manageFamily": MessageLookupByLibrary.simpleMessage("Gerir família"), + "manageLink": MessageLookupByLibrary.simpleMessage("Gerir link"), + "manageParticipants": MessageLookupByLibrary.simpleMessage("Gerir"), + "manageSubscription": + MessageLookupByLibrary.simpleMessage("Gerir subscrição"), + "manualPairDesc": MessageLookupByLibrary.simpleMessage( + "Emparelhar com PIN funciona com qualquer ecrã onde pretenda ver o seu álbum."), + "map": MessageLookupByLibrary.simpleMessage("Mapa"), + "maps": MessageLookupByLibrary.simpleMessage("Mapas"), + "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), + "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), + "merchandise": MessageLookupByLibrary.simpleMessage("Produtos"), + "mergeWithExisting": + MessageLookupByLibrary.simpleMessage("Juntar com o existente"), + "mergedPhotos": + MessageLookupByLibrary.simpleMessage("Fotos combinadas"), + "mlConsent": MessageLookupByLibrary.simpleMessage( + "Ativar aprendizagem automática"), + "mlConsentConfirmation": MessageLookupByLibrary.simpleMessage( + "Eu entendo, e desejo ativar a aprendizagem automática"), + "mlConsentDescription": MessageLookupByLibrary.simpleMessage( + "Se ativar a aprendizagem automática, o Ente extrairá informações como a geometria do rosto de ficheiros, incluindo os partilhados consigo.\n\n\nIsto acontecerá no seu dispositivo e todas as informações biométricas geradas serão encriptadas de ponta a ponta."), + "mlConsentPrivacy": MessageLookupByLibrary.simpleMessage( + "Por favor, clique aqui para mais detalhes sobre este recurso na nossa política de privacidade"), + "mlConsentTitle": MessageLookupByLibrary.simpleMessage( + "Ativar aprendizagem automática?"), + "mlIndexingDescription": MessageLookupByLibrary.simpleMessage( + "Tenha em atenção que a aprendizagem automática resultará numa maior utilização da largura de banda e da bateria até que todos os itens sejam indexados. Considere utilizar a aplicação de ambiente de trabalho para uma indexação mais rápida, todos os resultados serão sincronizados automaticamente."), + "mobileWebDesktop": + MessageLookupByLibrary.simpleMessage("Mobile, Web, Desktop"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Moderada"), + "modifyYourQueryOrTrySearchingFor": + MessageLookupByLibrary.simpleMessage( + "Modifique a sua consulta ou tente pesquisar por"), + "moments": MessageLookupByLibrary.simpleMessage("Momentos"), + "monthly": MessageLookupByLibrary.simpleMessage("Mensal"), + "moreDetails": MessageLookupByLibrary.simpleMessage("Mais detalhes"), + "mostRecent": MessageLookupByLibrary.simpleMessage("Mais recente"), + "mostRelevant": MessageLookupByLibrary.simpleMessage("Mais relevante"), + "moveToAlbum": MessageLookupByLibrary.simpleMessage("Mover para álbum"), + "moveToHiddenAlbum": + MessageLookupByLibrary.simpleMessage("Mover para álbum oculto"), + "movedSuccessfullyTo": m50, + "movedToTrash": + MessageLookupByLibrary.simpleMessage("Mover para o lixo"), + "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Mover arquivos para o álbum..."), + "name": MessageLookupByLibrary.simpleMessage("Nome"), + "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Nomear o álbum"), + "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( + "Não foi possível conectar ao Ente, tente novamente após algum tempo. Se o erro persistir, entre em contato com o suporte."), + "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( + "Não foi possível estabelecer ligação ao Ente. Verifique as definições de rede e contacte o serviço de apoio se o erro persistir."), + "never": MessageLookupByLibrary.simpleMessage("Nunca"), + "newAlbum": MessageLookupByLibrary.simpleMessage("Novo álbum"), + "newPerson": MessageLookupByLibrary.simpleMessage("Nova pessoa"), + "newToEnte": MessageLookupByLibrary.simpleMessage("Novo no Ente"), + "newest": MessageLookupByLibrary.simpleMessage("Recentes"), + "next": MessageLookupByLibrary.simpleMessage("Seguinte"), + "no": MessageLookupByLibrary.simpleMessage("Não"), + "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( + "Ainda não há álbuns partilhados por si"), + "noDeviceFound": MessageLookupByLibrary.simpleMessage( + "Nenhum dispositivo encontrado"), + "noDeviceLimit": MessageLookupByLibrary.simpleMessage("Nenhum"), + "noDeviceThatCanBeDeleted": MessageLookupByLibrary.simpleMessage( + "Você não tem arquivos neste dispositivo que possam ser apagados"), + "noDuplicates": + MessageLookupByLibrary.simpleMessage("✨ Sem duplicados"), + "noExifData": MessageLookupByLibrary.simpleMessage("Sem dados EXIF"), + "noHiddenPhotosOrVideos": + MessageLookupByLibrary.simpleMessage("Sem fotos ou vídeos ocultos"), + "noImagesWithLocation": MessageLookupByLibrary.simpleMessage( + "Nenhuma imagem com localização"), + "noInternetConnection": + MessageLookupByLibrary.simpleMessage("Sem ligação à internet"), + "noPhotosAreBeingBackedUpRightNow": + MessageLookupByLibrary.simpleMessage( + "No momento não há backup de fotos sendo feito"), + "noPhotosFoundHere": MessageLookupByLibrary.simpleMessage( + "Nenhuma foto encontrada aqui"), + "noQuickLinksSelected": MessageLookupByLibrary.simpleMessage( + "Nenhum link rápido selecionado"), + "noRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Não tem chave de recuperação?"), + "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( + "Devido à natureza do nosso protocolo de criptografia de ponta a ponta, os seus dados não podem ser descriptografados sem a sua palavra-passe ou a sua chave de recuperação"), + "noResults": MessageLookupByLibrary.simpleMessage("Nenhum resultado"), + "noResultsFound": MessageLookupByLibrary.simpleMessage( + "Não foram encontrados resultados"), + "noSystemLockFound": MessageLookupByLibrary.simpleMessage( + "Nenhum bloqueio de sistema encontrado"), + "notPersonLabel": m52, + "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( + "Ainda nada partilhado consigo"), + "nothingToSeeHere": + MessageLookupByLibrary.simpleMessage("Nada para ver aqui! 👀"), + "notifications": MessageLookupByLibrary.simpleMessage("Notificações"), + "ok": MessageLookupByLibrary.simpleMessage("Ok"), + "onDevice": MessageLookupByLibrary.simpleMessage("No dispositivo"), + "onEnte": MessageLookupByLibrary.simpleMessage( + "Em ente"), + "onlyFamilyAdminCanChangeCode": m53, + "onlyThem": MessageLookupByLibrary.simpleMessage("Apenas eles"), + "oops": MessageLookupByLibrary.simpleMessage("Oops"), + "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( + "Oops, não foi possível guardar as edições"), + "oopsSomethingWentWrong": + MessageLookupByLibrary.simpleMessage("Ops, algo deu errado"), + "openSettings": + MessageLookupByLibrary.simpleMessage("Abrir Definições"), + "openTheItem": MessageLookupByLibrary.simpleMessage("• Abra o item"), + "openstreetmapContributors": MessageLookupByLibrary.simpleMessage( + "Contribuidores do OpenStreetMap"), + "optionalAsShortAsYouLike": MessageLookupByLibrary.simpleMessage( + "Opcional, o mais breve que quiser..."), + "orMergeWithExistingPerson": MessageLookupByLibrary.simpleMessage( + "Ou combinar com já existente"), + "orPickAnExistingOne": + MessageLookupByLibrary.simpleMessage("Ou escolha um já existente"), + "pair": MessageLookupByLibrary.simpleMessage("Emparelhar"), + "pairWithPin": + MessageLookupByLibrary.simpleMessage("Emparelhar com PIN"), + "pairingComplete": + MessageLookupByLibrary.simpleMessage("Emparelhamento concluído"), + "panorama": MessageLookupByLibrary.simpleMessage("Panorama"), + "passKeyPendingVerification": MessageLookupByLibrary.simpleMessage( + "A verificação ainda está pendente"), + "passkey": MessageLookupByLibrary.simpleMessage("Chave de acesso"), + "passkeyAuthTitle": MessageLookupByLibrary.simpleMessage( + "Verificação da chave de acesso"), + "password": MessageLookupByLibrary.simpleMessage("Palavra-passe"), + "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( + "Palavra-passe alterada com sucesso"), + "passwordLock": + MessageLookupByLibrary.simpleMessage("Bloqueio da palavra-passe"), + "passwordStrength": m55, + "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( + "A força da palavra-passe é calculada tendo em conta o comprimento da palavra-passe, os caracteres utilizados e se a palavra-passe aparece ou não nas 10.000 palavras-passe mais utilizadas"), + "passwordWarning": MessageLookupByLibrary.simpleMessage( + "Não armazenamos esta palavra-passe, se você a esquecer, não podemos desencriptar os seus dados"), + "paymentDetails": + MessageLookupByLibrary.simpleMessage("Detalhes de pagamento"), + "paymentFailed": + MessageLookupByLibrary.simpleMessage("O pagamento falhou"), + "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( + "Infelizmente o seu pagamento falhou. Entre em contato com o suporte e nós ajudaremos você!"), + "paymentFailedTalkToProvider": m56, + "pendingItems": MessageLookupByLibrary.simpleMessage("Itens pendentes"), + "pendingSync": + MessageLookupByLibrary.simpleMessage("Sincronização pendente"), + "people": MessageLookupByLibrary.simpleMessage("Pessoas"), + "peopleUsingYourCode": MessageLookupByLibrary.simpleMessage( + "Pessoas que utilizam seu código"), + "permDeleteWarning": MessageLookupByLibrary.simpleMessage( + "Todos os itens no lixo serão permanentemente eliminados\n\n\nEsta ação não pode ser anulada"), + "permanentlyDelete": + MessageLookupByLibrary.simpleMessage("Eliminar permanentemente"), + "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( + "Apagar permanentemente do dispositivo?"), + "personName": MessageLookupByLibrary.simpleMessage("Nome da pessoa"), + "photoDescriptions": + MessageLookupByLibrary.simpleMessage("Descrições das fotos"), + "photoGridSize": + MessageLookupByLibrary.simpleMessage("Tamanho da grelha de fotos"), + "photoSmallCase": MessageLookupByLibrary.simpleMessage("foto"), + "photos": MessageLookupByLibrary.simpleMessage("Fotos"), + "photosAddedByYouWillBeRemovedFromTheAlbum": + MessageLookupByLibrary.simpleMessage( + "As fotos adicionadas por si serão removidas do álbum"), + "pickCenterPoint": + MessageLookupByLibrary.simpleMessage("Escolha o ponto central"), + "pinAlbum": MessageLookupByLibrary.simpleMessage("Fixar álbum"), + "pinLock": MessageLookupByLibrary.simpleMessage("Bloqueio por PIN"), + "playOnTv": + MessageLookupByLibrary.simpleMessage("Reproduzir álbum na TV"), + "playStoreFreeTrialValidTill": m61, + "playstoreSubscription": + MessageLookupByLibrary.simpleMessage("Subscrição da PlayStore"), + "pleaseCheckYourInternetConnectionAndTryAgain": + MessageLookupByLibrary.simpleMessage( + "Por favor, verifique a sua ligação à Internet e tente novamente."), + "pleaseContactSupportAndWeWillBeHappyToHelp": + MessageLookupByLibrary.simpleMessage( + "Por favor, entre em contato com support@ente.io e nós ficaremos felizes em ajudar!"), + "pleaseContactSupportIfTheProblemPersists": + MessageLookupByLibrary.simpleMessage( + "Por favor, contate o suporte se o problema persistir"), + "pleaseEmailUsAt": m62, + "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( + "Por favor, conceda as permissões"), + "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage( + "Por favor, inicie sessão novamente"), + "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( + "Selecione links rápidos para remover"), + "pleaseSendTheLogsTo": m63, + "pleaseTryAgain": + MessageLookupByLibrary.simpleMessage("Por favor, tente novamente"), + "pleaseVerifyTheCodeYouHaveEntered": + MessageLookupByLibrary.simpleMessage( + "Por favor, verifique se o código que você inseriu"), + "pleaseWait": + MessageLookupByLibrary.simpleMessage("Por favor, aguarde ..."), + "pleaseWaitDeletingAlbum": MessageLookupByLibrary.simpleMessage( + "Por favor aguarde, apagar o álbum"), + "pleaseWaitForSometimeBeforeRetrying": + MessageLookupByLibrary.simpleMessage( + "Por favor, aguarde algum tempo antes de tentar novamente"), + "preparingLogs": + MessageLookupByLibrary.simpleMessage("Preparando logs..."), + "preserveMore": MessageLookupByLibrary.simpleMessage("Preservar mais"), + "pressAndHoldToPlayVideo": MessageLookupByLibrary.simpleMessage( + "Pressione e segure para reproduzir o vídeo"), + "pressAndHoldToPlayVideoDetailed": MessageLookupByLibrary.simpleMessage( + "Pressione e segure na imagem para reproduzir o vídeo"), + "privacy": MessageLookupByLibrary.simpleMessage("Privacidade"), + "privacyPolicyTitle": + MessageLookupByLibrary.simpleMessage("Política de privacidade"), + "privateBackups": + MessageLookupByLibrary.simpleMessage("Backups privados"), + "privateSharing": + MessageLookupByLibrary.simpleMessage("Partilha privada"), + "processingImport": m65, + "publicLinkCreated": + MessageLookupByLibrary.simpleMessage("Link público criado"), + "publicLinkEnabled": + MessageLookupByLibrary.simpleMessage("Link público ativado"), + "quickLinks": MessageLookupByLibrary.simpleMessage("Links rápidos"), + "radius": MessageLookupByLibrary.simpleMessage("Raio"), + "raiseTicket": MessageLookupByLibrary.simpleMessage("Abrir ticket"), + "rateTheApp": MessageLookupByLibrary.simpleMessage("Avaliar aplicação"), + "rateUs": MessageLookupByLibrary.simpleMessage("Avalie-nos"), + "rateUsOnStore": m66, + "recover": MessageLookupByLibrary.simpleMessage("Recuperar"), + "recoverAccount": + MessageLookupByLibrary.simpleMessage("Recuperar conta"), + "recoverButton": MessageLookupByLibrary.simpleMessage("Recuperar"), + "recoveryKey": + MessageLookupByLibrary.simpleMessage("Chave de recuperação"), + "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Chave de recuperação copiada para a área de transferência"), + "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( + "Se esquecer sua palavra-passe, a única maneira de recuperar os seus dados é com esta chave."), + "recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage( + "Não armazenamos essa chave, por favor, guarde esta chave de 24 palavras num lugar seguro."), + "recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage( + "Ótimo! A sua chave de recuperação é válida. Obrigado por verificar.\n\nLembre-se de manter cópia de segurança da sua chave de recuperação."), + "recoveryKeyVerified": MessageLookupByLibrary.simpleMessage( + "Chave de recuperação verificada"), + "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( + "A sua chave de recuperação é a única forma de recuperar as suas fotografias se se esquecer da sua palavra-passe. Pode encontrar a sua chave de recuperação em Definições > Conta.\n\n\nIntroduza aqui a sua chave de recuperação para verificar se a guardou corretamente."), + "recoverySuccessful": + MessageLookupByLibrary.simpleMessage("Recuperação bem sucedida!"), + "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( + "O dispositivo atual não é suficientemente poderoso para verificar a palavra-passe, mas podemos regenerar novamente de uma maneira que funcione no seu dispositivo.\n\nPor favor, iniciar sessão utilizando código de recuperação e gerar novamente a sua palavra-passe (pode utilizar a mesma se quiser)."), + "recreatePasswordTitle": + MessageLookupByLibrary.simpleMessage("Recriar palavra-passe"), + "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "reenterPassword": MessageLookupByLibrary.simpleMessage( + "Insira novamente a palavra-passe"), + "reenterPin": + MessageLookupByLibrary.simpleMessage("Inserir PIN novamente"), + "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( + "Recomende amigos e duplique o seu plano"), + "referralStep1": MessageLookupByLibrary.simpleMessage( + "1. Envie este código aos seus amigos"), + "referralStep2": MessageLookupByLibrary.simpleMessage( + "2. Eles se inscrevem em um plano pago"), + "referralStep3": m71, + "referrals": MessageLookupByLibrary.simpleMessage("Referências"), + "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( + "As referências estão atualmente em pausa"), + "remindToEmptyDeviceTrash": MessageLookupByLibrary.simpleMessage( + "Esvazie também a opção “Eliminados recentemente” em “Definições” -> “Armazenamento” para reclamar o espaço libertado"), + "remindToEmptyEnteTrash": MessageLookupByLibrary.simpleMessage( + "Esvazie também o seu “Lixo” para reivindicar o espaço libertado"), + "remoteImages": MessageLookupByLibrary.simpleMessage("Imagens remotas"), + "remoteThumbnails": + MessageLookupByLibrary.simpleMessage("Miniaturas remotas"), + "remoteVideos": MessageLookupByLibrary.simpleMessage("Vídeos remotos"), + "remove": MessageLookupByLibrary.simpleMessage("Remover"), + "removeDuplicates": + MessageLookupByLibrary.simpleMessage("Remover duplicados"), + "removeDuplicatesDesc": MessageLookupByLibrary.simpleMessage( + "Rever e remover ficheiros que sejam duplicados exatos."), + "removeFromAlbum": + MessageLookupByLibrary.simpleMessage("Remover do álbum"), + "removeFromAlbumTitle": + MessageLookupByLibrary.simpleMessage("Remover do álbum"), + "removeFromFavorite": + MessageLookupByLibrary.simpleMessage("Remover dos favoritos"), + "removeLink": MessageLookupByLibrary.simpleMessage("Remover link"), + "removeParticipant": + MessageLookupByLibrary.simpleMessage("Remover participante"), + "removeParticipantBody": m72, + "removePersonLabel": + MessageLookupByLibrary.simpleMessage("Remover etiqueta da pessoa"), + "removePublicLink": + MessageLookupByLibrary.simpleMessage("Remover link público"), + "removePublicLinks": + MessageLookupByLibrary.simpleMessage("Remover link público"), + "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( + "Alguns dos itens que você está removendo foram adicionados por outras pessoas, e você perderá o acesso a eles"), + "removeWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Remover?"), + "removingFromFavorites": + MessageLookupByLibrary.simpleMessage("Removendo dos favoritos..."), + "rename": MessageLookupByLibrary.simpleMessage("Renomear"), + "renameAlbum": MessageLookupByLibrary.simpleMessage("Renomear álbum"), + "renameFile": MessageLookupByLibrary.simpleMessage("Renomear arquivo"), + "renewSubscription": + MessageLookupByLibrary.simpleMessage("Renovar subscrição"), + "renewsOn": m73, + "reportABug": MessageLookupByLibrary.simpleMessage("Reporte um bug"), + "reportBug": MessageLookupByLibrary.simpleMessage("Reportar bug"), + "resendEmail": MessageLookupByLibrary.simpleMessage("Reenviar e-mail"), + "resetIgnoredFiles": + MessageLookupByLibrary.simpleMessage("Repor ficheiros ignorados"), + "resetPasswordTitle": + MessageLookupByLibrary.simpleMessage("Redefinir palavra-passe"), + "resetPerson": MessageLookupByLibrary.simpleMessage("Remover"), + "resetToDefault": + MessageLookupByLibrary.simpleMessage("Redefinir para o padrão"), + "restore": MessageLookupByLibrary.simpleMessage("Restaurar"), + "restoreToAlbum": + MessageLookupByLibrary.simpleMessage("Restaurar para álbum"), + "restoringFiles": + MessageLookupByLibrary.simpleMessage("Restaurar arquivos..."), + "resumableUploads": + MessageLookupByLibrary.simpleMessage("Uploads reenviados"), + "retry": MessageLookupByLibrary.simpleMessage("Tentar novamente"), + "review": MessageLookupByLibrary.simpleMessage("Rever"), + "reviewDeduplicateItems": MessageLookupByLibrary.simpleMessage( + "Reveja e elimine os itens que considera serem duplicados."), + "reviewSuggestions": + MessageLookupByLibrary.simpleMessage("Revisar sugestões"), + "right": MessageLookupByLibrary.simpleMessage("Direita"), + "rotate": MessageLookupByLibrary.simpleMessage("Rodar"), + "rotateLeft": + MessageLookupByLibrary.simpleMessage("Rodar para a esquerda"), + "rotateRight": + MessageLookupByLibrary.simpleMessage("Rodar para a direita"), + "safelyStored": + MessageLookupByLibrary.simpleMessage("Armazenado com segurança"), + "save": MessageLookupByLibrary.simpleMessage("Guardar"), + "saveCollage": MessageLookupByLibrary.simpleMessage("Guardar colagem"), + "saveCopy": MessageLookupByLibrary.simpleMessage("Guardar cópia"), + "saveKey": MessageLookupByLibrary.simpleMessage("Guardar chave"), + "savePerson": MessageLookupByLibrary.simpleMessage("Guardar pessoa"), + "saveYourRecoveryKeyIfYouHaventAlready": + MessageLookupByLibrary.simpleMessage( + "Guarde a sua chave de recuperação, caso ainda não o tenha feito"), + "saving": MessageLookupByLibrary.simpleMessage("A gravar..."), + "savingEdits": + MessageLookupByLibrary.simpleMessage("Gravando edições..."), + "scanCode": MessageLookupByLibrary.simpleMessage("Ler código Qr"), + "scanThisBarcodeWithnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Leia este código com a sua aplicação dois fatores."), + "search": MessageLookupByLibrary.simpleMessage("Pesquisar"), + "searchAlbumsEmptySection": + MessageLookupByLibrary.simpleMessage("Álbuns"), + "searchByAlbumNameHint": + MessageLookupByLibrary.simpleMessage("Nome do álbum"), + "searchByExamples": MessageLookupByLibrary.simpleMessage( + "• Nomes de álbuns (ex: \"Câmera\")\n• Tipos de arquivos (ex.: \"Vídeos\", \".gif\")\n• Anos e meses (e.. \"2022\", \"Janeiro\")\n• Feriados (por exemplo, \"Natal\")\n• Descrições de fotos (por exemplo, \"#divertido\")"), + "searchCaptionEmptySection": MessageLookupByLibrary.simpleMessage( + "Adicione descrições como \"#trip\" nas informações das fotos para encontrá-las aqui rapidamente"), + "searchDatesEmptySection": MessageLookupByLibrary.simpleMessage( + "Pesquisar por data, mês ou ano"), + "searchFaceEmptySection": MessageLookupByLibrary.simpleMessage( + "As pessoas serão mostradas aqui quando a indexação estiver concluída"), + "searchFileTypesAndNamesEmptySection": + MessageLookupByLibrary.simpleMessage("Tipos de arquivo e nomes"), + "searchHint1": MessageLookupByLibrary.simpleMessage( + "Pesquisa rápida no dispositivo"), + "searchHint2": + MessageLookupByLibrary.simpleMessage("Datas das fotos, descrições"), + "searchHint3": MessageLookupByLibrary.simpleMessage( + "Álbuns, nomes de arquivos e tipos"), + "searchHint4": MessageLookupByLibrary.simpleMessage("Local"), + "searchHint5": MessageLookupByLibrary.simpleMessage( + "Em breve: Rostos e pesquisa mágica ✨"), + "searchLocationEmptySection": MessageLookupByLibrary.simpleMessage( + "Fotos de grupo que estão sendo tiradas em algum raio da foto"), + "searchPeopleEmptySection": MessageLookupByLibrary.simpleMessage( + "Convide pessoas e verá todas as fotos partilhadas por elas aqui"), + "searchResultCount": m75, + "security": MessageLookupByLibrary.simpleMessage("Segurança"), + "selectALocation": + MessageLookupByLibrary.simpleMessage("Selecione uma localização"), + "selectALocationFirst": MessageLookupByLibrary.simpleMessage( + "Selecione uma localização primeiro"), + "selectAlbum": MessageLookupByLibrary.simpleMessage("Selecionar álbum"), + "selectAll": MessageLookupByLibrary.simpleMessage("Selecionar tudo"), + "selectFoldersForBackup": MessageLookupByLibrary.simpleMessage( + "Selecionar pastas para cópia de segurança"), + "selectItemsToAdd": MessageLookupByLibrary.simpleMessage( + "Selecionar itens para adicionar"), + "selectLanguage": + MessageLookupByLibrary.simpleMessage("Selecionar Idioma"), + "selectMorePhotos": + MessageLookupByLibrary.simpleMessage("Selecionar mais fotos"), + "selectReason": + MessageLookupByLibrary.simpleMessage("Selecionar motivo"), + "selectYourPlan": + MessageLookupByLibrary.simpleMessage("Selecione o seu plano"), + "selectedFilesAreNotOnEnte": MessageLookupByLibrary.simpleMessage( + "Os arquivos selecionados não estão no Ente"), + "selectedFoldersWillBeEncryptedAndBackedUp": + MessageLookupByLibrary.simpleMessage( + "As pastas selecionadas serão encriptadas e guardadas como cópia de segurança"), + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": + MessageLookupByLibrary.simpleMessage( + "Os itens selecionados serão eliminados de todos os álbuns e movidos para o lixo."), + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "send": MessageLookupByLibrary.simpleMessage("Enviar"), + "sendEmail": MessageLookupByLibrary.simpleMessage("Enviar email"), + "sendInvite": MessageLookupByLibrary.simpleMessage("Enviar convite"), + "sendLink": MessageLookupByLibrary.simpleMessage("Enviar link"), + "serverEndpoint": + MessageLookupByLibrary.simpleMessage("Endpoint do servidor"), + "sessionExpired": + MessageLookupByLibrary.simpleMessage("Sessão expirada"), + "sessionIdMismatch": MessageLookupByLibrary.simpleMessage( + "Incompatibilidade de ID de sessão"), + "setAPassword": + MessageLookupByLibrary.simpleMessage("Definir uma palavra-passe"), + "setAs": MessageLookupByLibrary.simpleMessage("Definir como"), + "setCover": MessageLookupByLibrary.simpleMessage("Definir capa"), + "setLabel": MessageLookupByLibrary.simpleMessage("Definir"), + "setNewPassword": + MessageLookupByLibrary.simpleMessage("Definir nova palavra-passe"), + "setNewPin": MessageLookupByLibrary.simpleMessage("Definir novo PIN"), + "setPasswordTitle": + MessageLookupByLibrary.simpleMessage("Definir palavra-passe"), + "setRadius": MessageLookupByLibrary.simpleMessage("Definir raio"), + "setupComplete": + MessageLookupByLibrary.simpleMessage("Configuração concluída"), + "share": MessageLookupByLibrary.simpleMessage("Partilhar"), + "shareALink": MessageLookupByLibrary.simpleMessage("Partilhar um link"), + "shareAlbumHint": MessageLookupByLibrary.simpleMessage( + "Abra um álbum e toque no botão de partilha no canto superior direito para partilhar"), + "shareAnAlbumNow": + MessageLookupByLibrary.simpleMessage("Partilhar um álbum"), + "shareLink": MessageLookupByLibrary.simpleMessage("Partilhar link"), + "shareMyVerificationID": m80, + "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( + "Partilhar apenas com as pessoas que deseja"), + "shareTextConfirmOthersVerificationID": m81, + "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( + "Descarregue o Ente para poder partilhar facilmente fotografias e vídeos de qualidade original\n\n\nhttps://ente.io"), + "shareTextReferralCode": m82, + "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( + "Compartilhar com usuários que não usam Ente"), + "shareWithPeopleSectionTitle": m83, + "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage( + "Partilhe o seu primeiro álbum"), + "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( + "Criar álbuns compartilhados e colaborativos com outros usuários da Ente, incluindo usuários em planos gratuitos."), + "sharedByMe": + MessageLookupByLibrary.simpleMessage("Partilhado por mim"), + "sharedByYou": + MessageLookupByLibrary.simpleMessage("Partilhado por si"), + "sharedPhotoNotifications": + MessageLookupByLibrary.simpleMessage("Novas fotos partilhadas"), + "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( + "Receber notificações quando alguém adiciona uma foto a um álbum partilhado do qual faz parte"), + "sharedWith": m84, + "sharedWithMe": + MessageLookupByLibrary.simpleMessage("Partilhado comigo"), + "sharedWithYou": + MessageLookupByLibrary.simpleMessage("Partilhado consigo"), + "sharing": MessageLookupByLibrary.simpleMessage("Partilhar..."), + "showMemories": + MessageLookupByLibrary.simpleMessage("Mostrar memórias"), + "showPerson": MessageLookupByLibrary.simpleMessage("Mostrar pessoa"), + "signOutFromOtherDevices": MessageLookupByLibrary.simpleMessage( + "Terminar sessão noutros dispositivos"), + "signOutOtherBody": MessageLookupByLibrary.simpleMessage( + "Se pensa que alguém pode saber a sua palavra-passe, pode forçar todos os outros dispositivos que utilizam a sua conta a terminar a sessão."), + "signOutOtherDevices": MessageLookupByLibrary.simpleMessage( + "Terminar a sessão noutros dispositivos"), + "signUpTerms": MessageLookupByLibrary.simpleMessage( + "Eu concordo com os termos de serviço e política de privacidade"), + "singleFileDeleteFromDevice": m85, + "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( + "Será eliminado de todos os álbuns."), + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, + "skip": MessageLookupByLibrary.simpleMessage("Pular"), + "social": MessageLookupByLibrary.simpleMessage("Social"), + "someItemsAreInBothEnteAndYourDevice": + MessageLookupByLibrary.simpleMessage( + "Alguns itens estão tanto no Ente como no seu dispositivo."), + "someOfTheFilesYouAreTryingToDeleteAre": + MessageLookupByLibrary.simpleMessage( + "Alguns dos ficheiros que está a tentar eliminar só estão disponíveis no seu dispositivo e não podem ser recuperados se forem eliminados"), + "someoneSharingAlbumsWithYouShouldSeeTheSameId": + MessageLookupByLibrary.simpleMessage( + "Alguém compartilhando álbuns com você deve ver o mesmo ID no seu dispositivo."), + "somethingWentWrong": + MessageLookupByLibrary.simpleMessage("Ocorreu um erro"), + "somethingWentWrongPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Ocorreu um erro. Tente novamente"), + "sorry": MessageLookupByLibrary.simpleMessage("Desculpe"), + "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( + "Desculpe, não foi possível adicionar aos favoritos!"), + "sorryCouldNotRemoveFromFavorites": + MessageLookupByLibrary.simpleMessage( + "Desculpe, não foi possível remover dos favoritos!"), + "sorryTheCodeYouveEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "Desculpe, o código inserido está incorreto"), + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": + MessageLookupByLibrary.simpleMessage( + "Desculpe, não foi possível gerar chaves seguras neste dispositivo.\n\npor favor iniciar sessão com um dispositivo diferente."), + "sort": MessageLookupByLibrary.simpleMessage("Ordenar"), + "sortAlbumsBy": MessageLookupByLibrary.simpleMessage("Ordenar por"), + "sortNewestFirst": + MessageLookupByLibrary.simpleMessage("Mais recentes primeiro"), + "sortOldestFirst": + MessageLookupByLibrary.simpleMessage("Mais antigos primeiro"), + "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Sucesso"), + "startBackup": + MessageLookupByLibrary.simpleMessage("Iniciar cópia de segurança"), + "status": MessageLookupByLibrary.simpleMessage("Status"), + "stopCastingBody": MessageLookupByLibrary.simpleMessage( + "Queres parar de fazer transmissão?"), + "stopCastingTitle": + MessageLookupByLibrary.simpleMessage("Parar transmissão"), + "storage": MessageLookupByLibrary.simpleMessage("Armazenamento"), + "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Família"), + "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Tu"), + "storageInGB": m90, + "storageLimitExceeded": MessageLookupByLibrary.simpleMessage( + "Limite de armazenamento excedido"), + "storageUsageInfo": m91, + "strongStrength": MessageLookupByLibrary.simpleMessage("Forte"), + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, + "subscribe": MessageLookupByLibrary.simpleMessage("Subscrever"), + "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( + "Você precisa de uma assinatura paga ativa para ativar o compartilhamento."), + "subscription": MessageLookupByLibrary.simpleMessage("Subscrição"), + "success": MessageLookupByLibrary.simpleMessage("Sucesso"), + "successfullyArchived": + MessageLookupByLibrary.simpleMessage("Arquivado com sucesso"), + "successfullyHid": + MessageLookupByLibrary.simpleMessage("Ocultado com sucesso"), + "successfullyUnarchived": + MessageLookupByLibrary.simpleMessage("Desarquivado com sucesso"), + "successfullyUnhid": + MessageLookupByLibrary.simpleMessage("Reexibido com sucesso"), + "suggestFeatures": + MessageLookupByLibrary.simpleMessage("Sugerir recursos"), + "support": MessageLookupByLibrary.simpleMessage("Suporte"), + "syncProgress": m94, + "syncStopped": + MessageLookupByLibrary.simpleMessage("Sincronização interrompida"), + "syncing": MessageLookupByLibrary.simpleMessage("Sincronizando..."), + "systemTheme": MessageLookupByLibrary.simpleMessage("Sistema"), + "tapToCopy": MessageLookupByLibrary.simpleMessage("toque para copiar"), + "tapToEnterCode": + MessageLookupByLibrary.simpleMessage("Toque para inserir código"), + "tapToUnlock": + MessageLookupByLibrary.simpleMessage("Toque para desbloquear"), + "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( + "Parece que algo correu mal. Por favor, tente novamente mais tarde. Se o erro persistir, entre em contacto com a nossa equipa de suporte."), + "terminate": MessageLookupByLibrary.simpleMessage("Terminar"), + "terminateSession": + MessageLookupByLibrary.simpleMessage("Terminar sessão?"), + "terms": MessageLookupByLibrary.simpleMessage("Termos"), + "termsOfServicesTitle": MessageLookupByLibrary.simpleMessage("Termos"), + "thankYou": MessageLookupByLibrary.simpleMessage("Obrigado"), + "thankYouForSubscribing": MessageLookupByLibrary.simpleMessage( + "Obrigado pela sua subscrição!"), + "theDownloadCouldNotBeCompleted": MessageLookupByLibrary.simpleMessage( + "Não foi possível concluir o download."), + "theRecoveryKeyYouEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "A chave de recuperação inserida está incorreta"), + "theme": MessageLookupByLibrary.simpleMessage("Tema"), + "theseItemsWillBeDeletedFromYourDevice": + MessageLookupByLibrary.simpleMessage( + "Estes itens serão eliminados do seu dispositivo."), + "theyAlsoGetXGb": m96, + "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( + "Serão eliminados de todos os álbuns."), + "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( + "Esta ação não pode ser desfeita"), + "thisAlbumAlreadyHDACollaborativeLink": + MessageLookupByLibrary.simpleMessage( + "Este álbum já tem um link colaborativo"), + "thisCanBeUsedToRecoverYourAccountIfYou": + MessageLookupByLibrary.simpleMessage( + "Isto pode ser usado para recuperar sua conta se você perder seu segundo fator"), + "thisDevice": MessageLookupByLibrary.simpleMessage("Este dispositivo"), + "thisEmailIsAlreadyInUse": + MessageLookupByLibrary.simpleMessage("Este email já está em uso"), + "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( + "Esta imagem não tem dados exif"), + "thisIsPersonVerificationId": m97, + "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( + "Este é o seu ID de verificação"), + "thisWillLogYouOutOfTheFollowingDevice": + MessageLookupByLibrary.simpleMessage( + "Irá desconectar a sua conta do seguinte dispositivo:"), + "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( + "Irá desconectar a sua conta do seu dispositivo!"), + "thisWillRemovePublicLinksOfAllSelectedQuickLinks": + MessageLookupByLibrary.simpleMessage( + "Isto removerá links públicos de todos os links rápidos selecionados."), + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": + MessageLookupByLibrary.simpleMessage( + "Para ativar o bloqueio de aplicações, configure o código de acesso do dispositivo ou o bloqueio de ecrã nas definições do sistema."), + "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage( + "Para ocultar uma foto ou um vídeo"), + "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( + "Para redefinir a sua palavra-passe, verifique primeiro o seu e-mail."), + "todaysLogs": MessageLookupByLibrary.simpleMessage("Logs de hoje"), + "tooManyIncorrectAttempts": MessageLookupByLibrary.simpleMessage( + "Muitas tentativas incorretas"), + "total": MessageLookupByLibrary.simpleMessage("total"), + "totalSize": MessageLookupByLibrary.simpleMessage("Tamanho total"), + "trash": MessageLookupByLibrary.simpleMessage("Lixo"), + "trashDaysLeft": m100, + "trim": MessageLookupByLibrary.simpleMessage("Cortar"), + "tryAgain": MessageLookupByLibrary.simpleMessage("Tente novamente"), + "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( + "Ative o backup para enviar automaticamente arquivos adicionados a esta pasta do dispositivo para o Ente."), + "twitter": MessageLookupByLibrary.simpleMessage("Twitter"), + "twoMonthsFreeOnYearlyPlans": MessageLookupByLibrary.simpleMessage( + "2 meses grátis em planos anuais"), + "twofactor": MessageLookupByLibrary.simpleMessage("Dois fatores"), + "twofactorAuthenticationHasBeenDisabled": + MessageLookupByLibrary.simpleMessage( + "A autenticação de dois fatores foi desativada"), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage( + "Autenticação de dois fatores"), + "twofactorAuthenticationSuccessfullyReset": + MessageLookupByLibrary.simpleMessage( + "Autenticação de dois fatores redefinida com êxito"), + "twofactorSetup": MessageLookupByLibrary.simpleMessage( + "Configuração de dois fatores"), + "typeOfGallerGallerytypeIsNotSupportedForRename": m104, + "unarchive": MessageLookupByLibrary.simpleMessage("Desarquivar"), + "unarchiveAlbum": + MessageLookupByLibrary.simpleMessage("Desarquivar álbum"), + "unarchiving": MessageLookupByLibrary.simpleMessage("Desarquivar..."), + "unavailableReferralCode": MessageLookupByLibrary.simpleMessage( + "Desculpe, este código não está disponível."), + "uncategorized": MessageLookupByLibrary.simpleMessage("Sem categoria"), + "unhide": MessageLookupByLibrary.simpleMessage("Mostrar"), + "unhideToAlbum": + MessageLookupByLibrary.simpleMessage("Mostrar para o álbum"), + "unhiding": MessageLookupByLibrary.simpleMessage("Reexibindo..."), + "unhidingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Desocultar ficheiros para o álbum"), + "unlock": MessageLookupByLibrary.simpleMessage("Desbloquear"), + "unpinAlbum": MessageLookupByLibrary.simpleMessage("Desafixar álbum"), + "unselectAll": MessageLookupByLibrary.simpleMessage("Desmarcar tudo"), + "update": MessageLookupByLibrary.simpleMessage("Atualizar"), + "updateAvailable": + MessageLookupByLibrary.simpleMessage("Atualização disponível"), + "updatingFolderSelection": MessageLookupByLibrary.simpleMessage( + "Atualizando seleção de pasta..."), + "upgrade": MessageLookupByLibrary.simpleMessage("Atualizar"), + "uploadIsIgnoredDueToIgnorereason": m105, + "uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Enviar ficheiros para o álbum..."), + "uploadingMultipleMemories": m106, + "uploadingSingleMemory": + MessageLookupByLibrary.simpleMessage("Preservar 1 memória..."), + "upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage( + "Até 50% de desconto, até 4 de dezembro."), + "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( + "O armazenamento disponível é limitado pelo seu plano atual. O excesso de armazenamento reivindicado tornará automaticamente útil quando você atualizar seu plano."), + "useAsCover": MessageLookupByLibrary.simpleMessage("Usar como capa"), + "usePublicLinksForPeopleNotOnEnte": + MessageLookupByLibrary.simpleMessage( + "Usar links públicos para pessoas que não estão no Ente"), + "useRecoveryKey": + MessageLookupByLibrary.simpleMessage("Usar chave de recuperação"), + "useSelectedPhoto": + MessageLookupByLibrary.simpleMessage("Utilizar foto selecionada"), + "usedSpace": MessageLookupByLibrary.simpleMessage("Espaço utilizado"), + "validTill": m107, + "verificationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Falha na verificação, por favor tente novamente"), + "verificationId": + MessageLookupByLibrary.simpleMessage("ID de Verificação"), + "verify": MessageLookupByLibrary.simpleMessage("Verificar"), + "verifyEmail": MessageLookupByLibrary.simpleMessage("Verificar email"), + "verifyEmailID": m108, + "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Verificar"), + "verifyPasskey": + MessageLookupByLibrary.simpleMessage("Verificar chave de acesso"), + "verifyPassword": + MessageLookupByLibrary.simpleMessage("Verificar palavra-passe"), + "verifying": MessageLookupByLibrary.simpleMessage("A verificar…"), + "verifyingRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Verificando chave de recuperação..."), + "videoInfo": + MessageLookupByLibrary.simpleMessage("Informação de Vídeo"), + "videoSmallCase": MessageLookupByLibrary.simpleMessage("vídeo"), + "videos": MessageLookupByLibrary.simpleMessage("Vídeos"), + "viewActiveSessions": + MessageLookupByLibrary.simpleMessage("Ver sessões ativas"), + "viewAddOnButton": MessageLookupByLibrary.simpleMessage("Ver addons"), + "viewAll": MessageLookupByLibrary.simpleMessage("Ver tudo"), + "viewAllExifData": + MessageLookupByLibrary.simpleMessage("Ver todos os dados EXIF"), + "viewLargeFiles": + MessageLookupByLibrary.simpleMessage("Ficheiros grandes"), + "viewLargeFilesDesc": MessageLookupByLibrary.simpleMessage( + "Ver os ficheiros que estão a consumir a maior quantidade de armazenamento."), + "viewLogs": MessageLookupByLibrary.simpleMessage("Ver logs"), + "viewRecoveryKey": + MessageLookupByLibrary.simpleMessage("Ver chave de recuperação"), + "viewer": MessageLookupByLibrary.simpleMessage("Visualizador"), + "visitWebToManage": MessageLookupByLibrary.simpleMessage( + "Visite web.ente.io para gerir a sua subscrição"), + "waitingForVerification": + MessageLookupByLibrary.simpleMessage("Aguardando verificação..."), + "waitingForWifi": + MessageLookupByLibrary.simpleMessage("Aguardando Wi-Fi..."), + "weAreOpenSource": + MessageLookupByLibrary.simpleMessage("Nós somos de código aberto!"), + "weDontSupportEditingPhotosAndAlbumsThatYouDont": + MessageLookupByLibrary.simpleMessage( + "Não suportamos a edição de fotos e álbuns que ainda não possui"), + "weHaveSendEmailTo": m110, + "weakStrength": MessageLookupByLibrary.simpleMessage("Fraca"), + "welcomeBack": + MessageLookupByLibrary.simpleMessage("Bem-vindo(a) de volta!"), + "whatsNew": MessageLookupByLibrary.simpleMessage("O que há de novo"), + "yearly": MessageLookupByLibrary.simpleMessage("Anual"), + "yearsAgo": m111, + "yes": MessageLookupByLibrary.simpleMessage("Sim"), + "yesCancel": MessageLookupByLibrary.simpleMessage("Sim, cancelar"), + "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( + "Sim, converter para visualizador"), + "yesDelete": MessageLookupByLibrary.simpleMessage("Sim, apagar"), + "yesDiscardChanges": + MessageLookupByLibrary.simpleMessage("Sim, rejeitar alterações"), + "yesLogout": + MessageLookupByLibrary.simpleMessage("Sim, terminar sessão"), + "yesRemove": MessageLookupByLibrary.simpleMessage("Sim, remover"), + "yesRenew": MessageLookupByLibrary.simpleMessage("Sim, Renovar"), + "yesResetPerson": + MessageLookupByLibrary.simpleMessage("Sim, repor pessoa"), + "you": MessageLookupByLibrary.simpleMessage("Tu"), + "youAreOnAFamilyPlan": MessageLookupByLibrary.simpleMessage( + "Você está em um plano familiar!"), + "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage( + "Está a utilizar a versão mais recente"), + "youCanAtMaxDoubleYourStorage": MessageLookupByLibrary.simpleMessage( + "* Você pode duplicar seu armazenamento no máximo"), + "youCanManageYourLinksInTheShareTab": + MessageLookupByLibrary.simpleMessage( + "Pode gerir as suas ligações no separador partilhar."), + "youCanTrySearchingForADifferentQuery": + MessageLookupByLibrary.simpleMessage( + "Pode tentar pesquisar uma consulta diferente."), + "youCannotDowngradeToThisPlan": MessageLookupByLibrary.simpleMessage( + "Não é possível fazer o downgrade para este plano"), + "youCannotShareWithYourself": MessageLookupByLibrary.simpleMessage( + "Não podes partilhar contigo mesmo"), + "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( + "Não tem nenhum item arquivado."), + "youHaveSuccessfullyFreedUp": m113, + "yourAccountHasBeenDeleted": + MessageLookupByLibrary.simpleMessage("A sua conta foi eliminada"), + "yourMap": MessageLookupByLibrary.simpleMessage("Seu mapa"), + "yourPlanWasSuccessfullyDowngraded": + MessageLookupByLibrary.simpleMessage( + "O seu plano foi rebaixado com sucesso"), + "yourPlanWasSuccessfullyUpgraded": MessageLookupByLibrary.simpleMessage( + "O seu plano foi atualizado com sucesso"), + "yourPurchaseWasSuccessful": MessageLookupByLibrary.simpleMessage( + "Sua compra foi realizada com sucesso"), + "yourStorageDetailsCouldNotBeFetched": + MessageLookupByLibrary.simpleMessage( + "Não foi possível obter os seus dados de armazenamento"), + "yourSubscriptionHasExpired": + MessageLookupByLibrary.simpleMessage("A sua subscrição expirou"), + "yourSubscriptionWasUpdatedSuccessfully": + MessageLookupByLibrary.simpleMessage( + "A sua subscrição foi actualizada com sucesso"), + "yourVerificationCodeHasExpired": MessageLookupByLibrary.simpleMessage( + "O seu código de verificação expirou"), + "youveNoFilesInThisAlbumThatCanBeDeleted": + MessageLookupByLibrary.simpleMessage( + "Não existem ficheiros neste álbum que possam ser eliminados"), + "zoomOutToSeePhotos": MessageLookupByLibrary.simpleMessage( + "Diminuir o zoom para ver fotos") + }; +} diff --git a/mobile/lib/generated/intl/messages_ro.dart b/mobile/lib/generated/intl/messages_ro.dart index 1a12a59805..20f086cd2a 100644 --- a/mobile/lib/generated/intl/messages_ro.dart +++ b/mobile/lib/generated/intl/messages_ro.dart @@ -20,37 +20,28 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'ro'; - static String m10(count) => - "${Intl.plural(count, one: 'Adăugați un colaborator', few: 'Adăugați colaboratori', other: 'Adăugați colaboratori')}"; - - static String m11(count) => - "${Intl.plural(count, one: 'Adăugați articolul', few: 'Adăugați articolele', other: 'Adăugați articolele')}"; - - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "Suplimentul de ${storageAmount} este valabil până pe ${endDate}"; - static String m13(count) => - "${Intl.plural(count, one: 'Adăugați observator', few: 'Adăugați observatori', other: 'Adăugați observatori')}"; + static String m5(emailOrName) => "Adăugat de ${emailOrName}"; - static String m14(emailOrName) => "Adăugat de ${emailOrName}"; + static String m6(albumName) => "S-au adăugat cu succes la ${albumName}"; - static String m15(albumName) => "S-au adăugat cu succes la ${albumName}"; - - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'Fără participanți', one: '1 participant', other: '${count} de participanți')}"; - static String m18(versionValue) => "Versiune: ${versionValue}"; + static String m9(versionValue) => "Versiune: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} liber"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "Vă rugăm să vă anulați mai întâi abonamentul existent de la ${paymentProvider}"; - static String m3(user) => + static String m13(user) => "${user} nu va putea să mai adauge fotografii la acest album\n\nVa putea să elimine fotografii existente adăugate de el/ea"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Familia dvs. a revendicat ${storageAmountInGb} GB până acum', @@ -58,180 +49,165 @@ class MessageLookup extends MessageLookupByLibrary { 'other': 'Ați revendicat ${storageAmountInGb} de GB până acum!', })}"; - static String m22(albumName) => "Link colaborativ creat pentru ${albumName}"; + static String m15(albumName) => "Link colaborativ creat pentru ${albumName}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "Sunteți pe cale să adăugați ${email} ca persoană de contact de încredere. Acesta va putea să vă recupereze contul dacă lipsiți timp de ${numOfDays} de zile."; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Vă rugăm să contactați ${familyAdminEmail} pentru a gestiona abonamentul"; - static String m26(provider) => + static String m19(provider) => "Vă rugăm să ne contactați la support@ente.io pentru a vă gestiona abonamentul ${provider}."; - static String m27(endpoint) => "Conectat la ${endpoint}"; + static String m20(endpoint) => "Conectat la ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Ștergeți ${count} articol', other: 'Ștergeți ${count} de articole')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Se șterg ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Urmează să eliminați linkul public pentru accesarea „${albumName}”."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Vă rugăm să trimiteți un e-mail la ${supportEmail} de pe adresa de e-mail înregistrată"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "Ați curățat ${Intl.plural(count, one: '${count} dublură', few: '${count} dubluri', other: '${count} de dubluri')}, economisind (${storageSaved}!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} fișiere, ${formattedSize} fiecare"; - static String m34(newEmail) => "E-mail modificat în ${newEmail}"; + static String m27(newEmail) => "E-mail modificat în ${newEmail}"; - static String m36(email) => + static String m29(email) => "${email} nu are un cont Ente.\n\nTrimiteți-le o invitație pentru a distribui fotografii."; - static String m38(text) => "S-au găsit fotografii extra pentru ${text}"; + static String m31(text) => "S-au găsit fotografii extra pentru ${text}"; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "${Intl.plural(count, one: 'Un fișier de pe acest dispozitiv a fost deja salvat în siguranță', few: '${formattedNumber} fișiere de pe acest dispozitiv au fost deja salvate în siguranță', other: '${formattedNumber} de fișiere de pe acest dispozitiv fost deja salvate în siguranță')}"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "${Intl.plural(count, one: 'Un fișier din acest album a fost deja salvat în siguranță', few: '${formattedNumber} fișiere din acest album au fost deja salvate în siguranță', other: '${formattedNumber} de fișiere din acest album au fost deja salvate în siguranță')}"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB de fiecare dată când cineva se înscrie pentru un plan plătit și aplică codul dvs."; - static String m42(endDate) => + static String m36(endDate) => "Perioadă de încercare valabilă până pe ${endDate}"; - static String m43(count) => - "Încă ${Intl.plural(count, one: 'îl puteți', few: 'le puteți', other: 'le puteți')} accesa pe Ente cât timp aveți un abonament activ"; + static String m38(sizeInMBorGB) => "Eliberați ${sizeInMBorGB}"; - static String m44(sizeInMBorGB) => "Eliberați ${sizeInMBorGB}"; - - static String m45(count, formattedSize) => - "${Intl.plural(count, one: 'Poate fi șters de pe dispozitiv pentru a elibera ${formattedSize}', few: 'Pot fi șterse de pe dispozitiv pentru a elibera ${formattedSize}', other: 'Pot fi șterse de pe dispozitiv pentru a elibera ${formattedSize}')}"; - - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Se procesează ${currentlyProcessing} / ${totalCount}"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} articol', few: '${count} articole', other: '${count} de articole')}"; - static String m50(email) => + static String m44(email) => "${email} v-a invitat să fiți un contact de încredere"; - static String m51(expiryTime) => "Linkul va expira pe ${expiryTime}"; + static String m45(expiryTime) => "Linkul va expira pe ${expiryTime}"; - static String m5(count, formattedCount) => - "${Intl.plural(count, one: '${formattedCount} amintire', few: '${formattedCount} amintiri', other: '${formattedCount} de amintiri')}"; + static String m50(albumName) => "S-au mutat cu succes în ${albumName}"; - static String m54(count) => - "${Intl.plural(count, one: 'Mutați articolul', few: 'Mutați articole', other: 'Mutați articolele')}"; + static String m51(personName) => "Nicio sugestie pentru ${personName}"; - static String m55(albumName) => "S-au mutat cu succes în ${albumName}"; + static String m52(name) => "Nu este ${name}?"; - static String m56(personName) => "Nicio sugestie pentru ${personName}"; - - static String m57(name) => "Nu este ${name}?"; - - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Vă rugăm să contactați ${familyAdminEmail} pentru a vă schimba codul."; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Complexitatea parolei: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Vă rugăm să vorbiți cu asistența ${providerName} dacă ați fost taxat"; - static String m64(count) => - "${Intl.plural(count, zero: 'Curând', one: 'O zi', other: '${count} de zile')}"; - - static String m65(endDate) => + static String m61(endDate) => "Perioada de încercare gratuită valabilă până pe ${endDate}.\nUlterior, puteți opta pentru un plan plătit."; - static String m66(toEmail) => + static String m62(toEmail) => "Vă rugăm să ne trimiteți un e-mail la ${toEmail}"; - static String m67(toEmail) => + static String m63(toEmail) => "Vă rugăm să trimiteți jurnalele la \n${toEmail}"; - static String m69(folderName) => "Se procesează ${folderName}..."; + static String m65(folderName) => "Se procesează ${folderName}..."; - static String m70(storeName) => "Evaluați-ne pe ${storeName}"; + static String m66(storeName) => "Evaluați-ne pe ${storeName}"; - static String m72(days, email) => + static String m68(days, email) => "Puteți accesa contul după ${days} zile. O notificare va fi trimisă la ${email}."; - static String m73(email) => + static String m69(email) => "Acum puteți recupera contul ${email} setând o nouă parolă."; - static String m74(email) => "${email} încearcă să vă recupereze contul."; + static String m70(email) => "${email} încearcă să vă recupereze contul."; - static String m75(storageInGB) => + static String m71(storageInGB) => "3. Amândoi primiți ${storageInGB} GB* gratuit"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} va fi eliminat din acest album distribuit\n\nOrice fotografii adăugate de acesta vor fi, de asemenea, eliminate din album"; - static String m77(endDate) => "Abonamentul se reînnoiește pe ${endDate}"; + static String m73(endDate) => "Abonamentul se reînnoiește pe ${endDate}"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: '${count} rezultat găsit', few: '${count} rezultate găsite', other: '${count} de rezultate găsite')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "Lungimea secțiunilor nu se potrivesc: ${snapshotLength} != ${searchLength}"; - static String m6(count) => "${count} selectate"; + static String m77(count) => "${count} selectate"; - static String m81(count, yourCount) => + static String m78(count, yourCount) => "${count} selectate (${yourCount} ale dvs.)"; - static String m83(verificationID) => + static String m80(verificationID) => "Acesta este ID-ul meu de verificare: ${verificationID} pentru ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "Poți confirma că acesta este ID-ul tău de verificare ente.io: ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Codul de recomandare Ente: ${referralCode}\n\nAplică-l în Setări → General → Recomandări pentru a obține ${referralStorageInGB} GB gratuit după ce te înscrii pentru un plan plătit\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Distribuiți cu anumite persoane', one: 'Distribuit cu o persoană', other: 'Distribuit cu ${numberOfPeople} de persoane')}"; - static String m86(emailIDs) => "Distribuit cu ${emailIDs}"; + static String m84(emailIDs) => "Distribuit cu ${emailIDs}"; - static String m87(fileType) => + static String m85(fileType) => "Fișierul de tip ${fileType} va fi șters din dispozitivul dvs."; - static String m88(fileType) => + static String m86(fileType) => "Fișierul de tip ${fileType} este atât în Ente, cât și în dispozitivul dvs."; - static String m89(fileType) => + static String m87(fileType) => "Fișierul de tip ${fileType} va fi șters din Ente."; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} din ${totalAmount} ${totalStorageUnit} utilizat"; - static String m93(id) => + static String m92(id) => "${id} este deja legat la un alt cont Ente.\nDacă doriți să folosiți ${id} cu acest cont, vă rugăm să contactați asistența noastră"; - static String m94(endDate) => "Abonamentul dvs. va fi anulat pe ${endDate}"; + static String m93(endDate) => "Abonamentul dvs. va fi anulat pe ${endDate}"; - static String m95(completed, total) => + static String m94(completed, total) => "${completed}/${total} amintiri salvate"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Atingeți pentru a încărca, încărcarea este ignorată în prezent datorită ${ignoreReason}"; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "De asemenea, va primii ${storageAmountInGB} GB"; static String m97(email) => "Acesta este ID-ul de verificare al ${email}"; @@ -254,12 +230,12 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "Verificare ${email}"; - static String m2(email) => "Am trimis un e-mail la ${email}"; + static String m110(email) => "Am trimis un e-mail la ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: 'acum ${count} an', few: 'acum ${count} ani', other: 'acum ${count} de ani')}"; - static String m112(storageSaved) => "Ați eliberat cu succes ${storageSaved}!"; + static String m113(storageSaved) => "Ați eliberat cu succes ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -283,11 +259,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Adăugați un e-mail nou"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Adăugare colaborator"), - "addCollaborators": m10, "addFiles": MessageLookupByLibrary.simpleMessage("Adăugați fișiere"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Adăugați de pe dispozitiv"), - "addItem": m11, "addLocation": MessageLookupByLibrary.simpleMessage("Adăugare locație"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Adăugare"), "addMore": MessageLookupByLibrary.simpleMessage("Adăugați mai mulți"), @@ -299,7 +273,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Adăugare persoană nouă"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage("Detaliile suplimentelor"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Suplimente"), "addPhotos": MessageLookupByLibrary.simpleMessage("Adăugați fotografii"), @@ -313,12 +287,11 @@ class MessageLookup extends MessageLookupByLibrary { "Adăugare contact de încredere"), "addViewer": MessageLookupByLibrary.simpleMessage("Adăugare observator"), - "addViewers": m13, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage( "Adăugați-vă fotografiile acum"), "addedAs": MessageLookupByLibrary.simpleMessage("Adăugat ca"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("Se adaugă la favorite..."), "advanced": MessageLookupByLibrary.simpleMessage("Avansat"), @@ -329,7 +302,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("După o săptămâna"), "after1Year": MessageLookupByLibrary.simpleMessage("După un an"), "albumOwner": MessageLookupByLibrary.simpleMessage("Proprietar"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Titlu album"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Album actualizat"), @@ -378,7 +351,7 @@ class MessageLookup extends MessageLookupByLibrary { "appLock": MessageLookupByLibrary.simpleMessage("Blocare aplicație"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Alegeți între ecranul de blocare implicit al dispozitivului dvs. și un ecran de blocare personalizat cu PIN sau parolă."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Aplicare"), "applyCodeTitle": @@ -461,7 +434,7 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "Asocierea automată funcționează numai cu dispozitive care acceptă Chromecast."), "available": MessageLookupByLibrary.simpleMessage("Disponibil"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("Foldere salvate"), "backup": MessageLookupByLibrary.simpleMessage("Copie de rezervă"), @@ -502,10 +475,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Anulare recuperare"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "Sunteți sigur că doriți să anulați recuperarea?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Anulare abonament"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( "Nu se pot șterge fișierele distribuite"), "castAlbum": MessageLookupByLibrary.simpleMessage("Difuzați albumul"), @@ -543,7 +516,7 @@ class MessageLookup extends MessageLookupByLibrary { "claimMore": MessageLookupByLibrary.simpleMessage("Revendicați mai multe!"), "claimed": MessageLookupByLibrary.simpleMessage("Revendicat"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("Curățare Necategorisite"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -574,7 +547,7 @@ class MessageLookup extends MessageLookupByLibrary { "Creați un link pentru a permite oamenilor să adauge și să vizualizeze fotografii în albumul dvs. distribuit, fără a avea nevoie de o aplicație sau un cont Ente. Excelent pentru colectarea fotografiilor de la evenimente."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Link colaborativ"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Colaborator"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( @@ -596,7 +569,7 @@ class MessageLookup extends MessageLookupByLibrary { "Sigur doriți dezactivarea autentificării cu doi factori?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage( "Confirmați ștergerea contului"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Da, doresc să șterg definitiv acest cont și toate datele sale din toate aplicațiile."), "confirmPassword": @@ -609,10 +582,10 @@ class MessageLookup extends MessageLookupByLibrary { "Confirmați cheia de recuperare"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Conectați-vă la dispozitiv"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage( "Contactați serviciul de asistență"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Contacte"), "contents": MessageLookupByLibrary.simpleMessage("Conținuturi"), "continueLabel": MessageLookupByLibrary.simpleMessage("Continuare"), @@ -658,7 +631,7 @@ class MessageLookup extends MessageLookupByLibrary { "currentlyRunning": MessageLookupByLibrary.simpleMessage("rulează în prezent"), "custom": MessageLookupByLibrary.simpleMessage("Particularizat"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Întunecată"), "dayToday": MessageLookupByLibrary.simpleMessage("Astăzi"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Ieri"), @@ -695,12 +668,12 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Ștergeți de pe dispozitiv"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Ștergeți din Ente"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Ștergeți locația"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Ștergeți fotografiile"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "Lipsește o funcție cheie de care am nevoie"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -741,7 +714,7 @@ class MessageLookup extends MessageLookupByLibrary { "Observatorii pot să facă capturi de ecran sau să salveze o copie a fotografiilor dvs. folosind instrumente externe"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Rețineți"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage( "Dezactivați al doilea factor"), "disablingTwofactorAuthentication": @@ -782,9 +755,9 @@ class MessageLookup extends MessageLookupByLibrary { "downloadFailed": MessageLookupByLibrary.simpleMessage("Descărcarea nu a reușit"), "downloading": MessageLookupByLibrary.simpleMessage("Se descarcă..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Editare"), "editLocation": MessageLookupByLibrary.simpleMessage("Editare locaţie"), "editLocationTagTitle": @@ -798,8 +771,8 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("E-mail"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage("E-mail deja înregistrat."), - "emailChangedTo": m34, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage( "E-mailul nu este înregistrat."), "emailVerificationToggle": MessageLookupByLibrary.simpleMessage( @@ -886,7 +859,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Export de date"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage("S-au găsit fotografii extra"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Fața nu este încă grupată, vă rugăm să reveniți mai târziu"), "faceRecognition": @@ -937,8 +910,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("Tipuri de fișiere"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage( "Tipuri de fișiere și denumiri"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("Fișiere șterse"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage("Fișiere salvate în galerie"), @@ -953,27 +926,25 @@ class MessageLookup extends MessageLookupByLibrary { "foundFaces": MessageLookupByLibrary.simpleMessage("S-au găsit fețe"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("Spațiu gratuit revendicat"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage("Spațiu gratuit utilizabil"), "freeTrial": MessageLookupByLibrary.simpleMessage( "Perioadă de încercare gratuită"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage( "Eliberați spațiu pe dispozitiv"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Economisiți spațiu pe dispozitivul dvs. prin ștergerea fișierelor cărora li s-a făcut copie de rezervă."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Eliberați spațiu"), - "freeUpSpaceSaving": m45, "gallery": MessageLookupByLibrary.simpleMessage("Galerie"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "Până la 1000 de amintiri afișate în galerie"), "general": MessageLookupByLibrary.simpleMessage("General"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Se generează cheile de criptare..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Mergeți la setări"), "googlePlayId": MessageLookupByLibrary.simpleMessage("ID Google Play"), @@ -1057,7 +1028,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Se pare că ceva nu a mers bine. Vă rugăm să încercați din nou după ceva timp. Dacă eroarea persistă, vă rugăm să contactați echipa noastră de asistență."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Articolele afișează numărul de zile rămase până la ștergerea definitivă"), @@ -1089,7 +1060,7 @@ class MessageLookup extends MessageLookupByLibrary { "legacy": MessageLookupByLibrary.simpleMessage("Moștenire"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Conturi de moștenire"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "Moștenirea permite contactelor de încredere să vă acceseze contul în absența dvs."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1102,7 +1073,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Limită de dispozitive"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Activat"), "linkExpired": MessageLookupByLibrary.simpleMessage("Expirat"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Expirarea linkului"), "linkHasExpired": @@ -1198,7 +1169,6 @@ class MessageLookup extends MessageLookupByLibrary { "maps": MessageLookupByLibrary.simpleMessage("Hărţi"), "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), - "memoryCount": m5, "merchandise": MessageLookupByLibrary.simpleMessage("Produse"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Îmbinare cu unul existent"), @@ -1230,11 +1200,10 @@ class MessageLookup extends MessageLookupByLibrary { "mostRecent": MessageLookupByLibrary.simpleMessage("Cele mai recente"), "mostRelevant": MessageLookupByLibrary.simpleMessage("Cele mai relevante"), - "moveItem": m54, "moveToAlbum": MessageLookupByLibrary.simpleMessage("Mutare în album"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Mutați în albumul ascuns"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("S-a mutat în coșul de gunoi"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( @@ -1286,10 +1255,10 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Niciun rezultat"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Nu s-au găsit rezultate"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage( "Nu s-a găsit nicio blocare de sistem"), - "notPersonLabel": m57, + "notPersonLabel": m52, "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Nimic distribuit cu dvs. încă"), "nothingToSeeHere": @@ -1299,7 +1268,7 @@ class MessageLookup extends MessageLookupByLibrary { "onDevice": MessageLookupByLibrary.simpleMessage("Pe dispozitiv"), "onEnte": MessageLookupByLibrary.simpleMessage( "Pe ente"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Numai el/ea"), "oops": MessageLookupByLibrary.simpleMessage("Ups"), "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( @@ -1338,7 +1307,7 @@ class MessageLookup extends MessageLookupByLibrary { "Parola a fost schimbată cu succes"), "passwordLock": MessageLookupByLibrary.simpleMessage("Blocare cu parolă"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "Puterea parolei este calculată luând în considerare lungimea parolei, caracterele utilizate și dacă parola apare sau nu în top 10.000 cele mai utilizate parole"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1349,7 +1318,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Plata nu a reușit"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Din păcate, plata dvs. nu a reușit. Vă rugăm să contactați asistență și vom fi bucuroși să vă ajutăm!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Elemente în așteptare"), "pendingSync": @@ -1373,13 +1342,12 @@ class MessageLookup extends MessageLookupByLibrary { "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Fotografiile adăugate de dvs. vor fi eliminate din album"), - "photosCount": m64, "pickCenterPoint": MessageLookupByLibrary.simpleMessage("Alegeți punctul central"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Fixați albumul"), "pinLock": MessageLookupByLibrary.simpleMessage("Blocare PIN"), "playOnTv": MessageLookupByLibrary.simpleMessage("Redare album pe TV"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Abonament PlayStore"), "pleaseCheckYourInternetConnectionAndTryAgain": @@ -1391,14 +1359,14 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Vă rugăm să contactați asistența dacă problema persistă"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( "Vă rugăm să acordați permisiuni"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage( "Vă rugăm, autentificați-vă din nou"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Vă rugăm să selectați linkurile rapide de eliminat"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage( "Vă rugăm să încercați din nou"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1428,7 +1396,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Distribuire privată"), "proceed": MessageLookupByLibrary.simpleMessage("Continuați"), "processed": MessageLookupByLibrary.simpleMessage("Procesate"), - "processingImport": m69, + "processingImport": m65, "publicLinkCreated": MessageLookupByLibrary.simpleMessage("Link public creat"), "publicLinkEnabled": @@ -1440,7 +1408,7 @@ class MessageLookup extends MessageLookupByLibrary { "rateTheApp": MessageLookupByLibrary.simpleMessage("Evaluați aplicația"), "rateUs": MessageLookupByLibrary.simpleMessage("Evaluați-ne"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "recover": MessageLookupByLibrary.simpleMessage("Recuperare"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Recuperare cont"), @@ -1449,7 +1417,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Recuperare cont"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("Recuperare inițiată"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Cheie de recuperare"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( @@ -1464,12 +1432,12 @@ class MessageLookup extends MessageLookupByLibrary { "Cheie de recuperare verificată"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Cheia dvs. de recuperare este singura modalitate de a vă recupera fotografiile dacă uitați parola. Puteți găsi cheia dvs. de recuperare în Setări > Cont.\n\nVă rugăm să introduceți aici cheia de recuperare pentru a verifica dacă ați salvat-o corect."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("Recuperare reușită!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "Un contact de încredere încearcă să vă acceseze contul"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "Dispozitivul actual nu este suficient de puternic pentru a vă verifica parola, dar o putem regenera într-un mod care să funcționeze cu toate dispozitivele.\n\nVă rugăm să vă conectați utilizând cheia de recuperare și să vă regenerați parola (dacă doriți, o puteți utiliza din nou pe aceeași)."), "recreatePasswordTitle": @@ -1485,7 +1453,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Dați acest cod prietenilor"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Aceștia se înscriu la un plan cu plată"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Recomandări"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Recomandările sunt momentan întrerupte"), @@ -1517,7 +1485,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Eliminați linkul"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Eliminați participantul"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage( "Eliminați eticheta persoanei"), "removePublicLink": @@ -1538,7 +1506,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Redenumiți fișierul"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Reînnoire abonament"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Raportați o eroare"), "reportBug": MessageLookupByLibrary.simpleMessage("Raportare eroare"), @@ -1619,8 +1587,8 @@ class MessageLookup extends MessageLookupByLibrary { "Invitați persoane și veți vedea aici toate fotografiile distribuite de acestea"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "Persoanele vor fi afișate aici odată ce procesarea și sincronizarea este completă"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Securitate"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( "Vedeți linkurile albumelor publice în aplicație"), @@ -1655,8 +1623,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Articolele selectate vor fi șterse din toate albumele și mutate în coșul de gunoi."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, "send": MessageLookupByLibrary.simpleMessage("Trimitere"), "sendEmail": MessageLookupByLibrary.simpleMessage("Trimiteți e-mail"), "sendInvite": @@ -1689,16 +1657,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Distribuiți un album acum"), "shareLink": MessageLookupByLibrary.simpleMessage("Distribuiți linkul"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Distribuiți numai cu persoanele pe care le doriți"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Descarcă Ente pentru a putea distribui cu ușurință fotografii și videoclipuri în calitate originală\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Distribuiți cu utilizatori din afara Ente"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("Distribuiți primul album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1711,7 +1679,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Fotografii partajate noi"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Primiți notificări atunci când cineva adaugă o fotografie la un album distribuit din care faceți parte"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Distribuit mie"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("Distribuite cu dvs."), @@ -1727,11 +1695,11 @@ class MessageLookup extends MessageLookupByLibrary { "Deconectați alte dispozitive"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Sunt de acord cu termenii de prestare ai serviciului și politica de confidențialitate"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Acesta va fi șters din toate albumele."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Omiteți"), "social": MessageLookupByLibrary.simpleMessage("Rețele socializare"), "someItemsAreInBothEnteAndYourDevice": @@ -1779,13 +1747,13 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Spațiu"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Familie"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Dvs."), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Limita de spațiu depășită"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "strongStrength": MessageLookupByLibrary.simpleMessage("Puternică"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Abonare"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Aveți nevoie de un abonament plătit activ pentru a activa distribuirea."), @@ -1802,7 +1770,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("Sugerați funcționalități"), "support": MessageLookupByLibrary.simpleMessage("Asistență"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Sincronizare oprită"), "syncing": MessageLookupByLibrary.simpleMessage("Sincronizare..."), @@ -1815,7 +1783,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Atingeți pentru a debloca"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Atingeți pentru a încărca"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Se pare că ceva nu a mers bine. Vă rugăm să încercați din nou după ceva timp. Dacă eroarea persistă, vă rugăm să contactați echipa noastră de asistență."), "terminate": MessageLookupByLibrary.simpleMessage("Terminare"), @@ -1838,7 +1806,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Aceste articole vor fi șterse din dispozitivul dvs."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Acestea vor fi șterse din toate albumele."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1996,7 +1964,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Nu se acceptă editarea fotografiilor sau albumelor pe care nu le dețineți încă"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Slabă"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Bine ați revenit!"), @@ -2005,7 +1973,7 @@ class MessageLookup extends MessageLookupByLibrary { "Contactul de încredere vă poate ajuta la recuperarea datelor."), "yearShort": MessageLookupByLibrary.simpleMessage("an"), "yearly": MessageLookupByLibrary.simpleMessage("Anual"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Da"), "yesCancel": MessageLookupByLibrary.simpleMessage("Da, anulează"), "yesConvertToViewer": @@ -2037,7 +2005,7 @@ class MessageLookup extends MessageLookupByLibrary { "Nu poți distribui cu tine însuți"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage("Nu aveți articole arhivate."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("Contul dvs. a fost șters"), "yourMap": MessageLookupByLibrary.simpleMessage("Harta dvs."), diff --git a/mobile/lib/generated/intl/messages_ru.dart b/mobile/lib/generated/intl/messages_ru.dart index 2ce45b2913..6efef20e28 100644 --- a/mobile/lib/generated/intl/messages_ru.dart +++ b/mobile/lib/generated/intl/messages_ru.dart @@ -20,217 +20,301 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'ru'; - static String m10(count) => - "${Intl.plural(count, one: 'Добавьте соавтора', few: 'Добавьте соавторов', many: 'Добавьте соавторов', other: 'Добавьте соавторов')}"; + static String m0(title) => "${title} (Я)"; - static String m11(count) => + static String m1(count) => + "${Intl.plural(count, zero: 'Добавить соавтора', one: 'Добавить соавтора', other: 'Добавить соавторов')}"; + + static String m2(count) => "${Intl.plural(count, one: 'Добавить элемент', other: 'Добавить элементы')}"; - static String m12(storageAmount, endDate) => - "Ваше дополнение ${storageAmount} действительно по ${endDate}"; + static String m3(storageAmount, endDate) => + "Ваше дополнение на ${storageAmount} действительно до ${endDate}"; - static String m13(count) => - "${Intl.plural(count, one: 'Добавьте зрителя', few: 'Добавьте зрителей', many: 'Добавьте зрителей', other: 'Добавьте зрителей')}"; + static String m4(count) => + "${Intl.plural(count, zero: 'Добавить зрителя', one: 'Добавить зрителя', other: 'Добавить зрителей')}"; - static String m14(emailOrName) => "Добавлено ${emailOrName}"; + static String m5(emailOrName) => "Добавлено ${emailOrName}"; - static String m15(albumName) => "Успешно добавлено в ${albumName}"; + static String m6(albumName) => "Успешно добавлено в ${albumName}"; - static String m17(count) => - "${Intl.plural(count, zero: 'Нет Участников', one: '1 Участник', other: '${count} Участника')}"; + static String m7(name) => "Любуясь ${name}"; - static String m18(versionValue) => "Версия: ${versionValue}"; + static String m8(count) => + "${Intl.plural(count, zero: 'Нет участников', one: '${count} участник', few: '${count} участника', other: '${count} участников')}"; - static String m19(freeAmount, storageUnit) => - "${freeAmount} ${storageUnit} свободно"; + static String m9(versionValue) => "Версия: ${versionValue}"; - static String m20(paymentProvider) => - "Пожалуйста, сначала отмените вашу существующую подписку от ${paymentProvider}"; + static String m10(freeAmount, storageUnit) => + "Свободно ${freeAmount} ${storageUnit}"; - static String m3(user) => - "${user} больше не сможет добавлять фотографии в этот альбом\n\nОни все еще смогут удалять существующие фотографии, добавленные ими"; + static String m11(name) => "Красивые виды с ${name}"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m12(paymentProvider) => + "Пожалуйста, сначала отмените существующую подписку через ${paymentProvider}"; + + static String m13(user) => + "${user} не сможет добавлять новые фото в этот альбом\n\nЭтот пользователь всё ещё сможет удалять существующие фото, добавленные им"; + + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { - 'true': 'Ваша семья получила ${storageAmountInGb} ГБ', - 'false': 'Вы уже получили ${storageAmountInGb} ГБ', - 'other': 'Вы уже получили ${storageAmountInGb} ГБ!', + 'true': + 'Ваша семья получила ${storageAmountInGb} ГБ на данный момент', + 'false': 'Вы получили ${storageAmountInGb} ГБ на данный момент', + 'other': 'Вы получили ${storageAmountInGb} ГБ на данный момент!', })}"; - static String m22(albumName) => "Совместная ссылка создана для ${albumName}"; + static String m15(albumName) => "Совместная ссылка создана для ${albumName}"; - static String m23(count) => - "${Intl.plural(count, zero: 'Добавлено 0 соавторов', one: 'Добавлен 1 соавтор', other: 'Добавлено ${count} соавторов')}"; + static String m16(count) => + "${Intl.plural(count, zero: 'Добавлено 0 соавторов', one: 'Добавлен 1 соавтор', few: 'Добавлено ${count} соавтора', other: 'Добавлено ${count} соавторов')}"; - static String m25(familyAdminEmail) => + static String m17(email, numOfDays) => + "Вы собираетесь добавить ${email} в качестве доверенного контакта. Доверенный контакт сможет восстановить ваш аккаунт, если вы будете отсутствовать ${numOfDays} дней."; + + static String m18(familyAdminEmail) => "Пожалуйста, свяжитесь с ${familyAdminEmail} для управления подпиской"; - static String m26(provider) => - "Пожалуйста, свяжитесь с нами по адресу support@ente.io для управления подпиской ${provider}."; + static String m19(provider) => + "Пожалуйста, свяжитесь с нами по адресу support@ente.io для управления вашей подпиской ${provider}."; - static String m27(endpoint) => "Подключено к ${endpoint}"; + static String m20(endpoint) => "Подключено к ${endpoint}"; - static String m28(count) => - "${Intl.plural(count, one: 'Удалена ${count} штука', other: 'Удалено ${count} штук')}"; + static String m21(count) => + "${Intl.plural(count, one: 'Удалить ${count} элемент', few: 'Удалить ${count} элемента', other: 'Удалить ${count} элементов')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Удаление ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Это удалит публичную ссылку для доступа к \"${albumName}\"."; - static String m31(supportEmail) => - "Пожалуйста, отправьте электронное письмо на адрес ${supportEmail} с вашего зарегистрированного адреса электронной почты"; + static String m24(supportEmail) => + "Пожалуйста, отправьте письмо на ${supportEmail} с вашего зарегистрированного адреса электронной почты"; - static String m32(count, storageSaved) => - "Вы привели себя в порядок ${Intl.plural(count, one: '${count} duplicate file', other: '${count} duplicate files')}, экономия (${storageSaved}!)\n"; + static String m25(count, storageSaved) => + "Вы удалили ${Intl.plural(count, one: '${count} дубликат', few: '${count} дубликата', other: '${count} дубликатов')}, освободив (${storageSaved}!)"; - static String m33(count, formattedSize) => - "${count} файлов, ${formattedSize}"; + static String m26(count, formattedSize) => + "${count} файлов, по ${formattedSize} каждый"; - static String m34(newEmail) => - "Адрес электронной почты изменен на ${newEmail}"; + static String m27(newEmail) => "Электронная почта изменена на ${newEmail}"; - static String m36(email) => - "У ${email} нет учетной записи Ente.\n\nОтправьте им приглашение для обмена фотографиями."; + static String m28(email) => "${email} не имеет аккаунта Ente."; - static String m38(text) => "Дополнительные фотографии найдены для ${text}"; + static String m29(email) => + "У ${email} нет аккаунта Ente.\n\nОтправьте ему приглашение для обмена фото."; - static String m40(count, formattedNumber) => - "${Intl.plural(count, one: 'для 1 файла было создан бекап', other: 'для ${formattedNumber} файлов были созданы бекапы')}"; + static String m30(name) => "Обнимая ${name}"; - static String m41(count, formattedNumber) => - "${Intl.plural(count, one: 'для 1 файла было создан бекап', other: 'для ${formattedNumber} файлов были созданы бекапы')}"; + static String m31(text) => "Дополнительные фото найдены для ${text}"; - static String m4(storageAmountInGB) => - "${storageAmountInGB} Гигабайт каждый раз когда кто-то подписывается на платный план и применяет ваш код"; + static String m32(name) => "Пир с ${name}"; - static String m42(endDate) => - "Бесплатная пробная версия действительна до ${endDate}"; + static String m33(count, formattedNumber) => + "${Intl.plural(count, one: '${formattedNumber} файл на этом устройстве был успешно сохранён', few: '${formattedNumber} файла на этом устройстве были успешно сохранены', other: '${formattedNumber} файлов на этом устройстве были успешно сохранены')}"; - static String m43(count) => - "Вы все еще можете получить доступ к ${Intl.plural(count, one: 'ниму', other: 'ним')} на Ente, пока у вас есть активная подписка"; + static String m34(count, formattedNumber) => + "${Intl.plural(count, one: '${formattedNumber} файл в этом альбоме был успешно сохранён', few: '${formattedNumber} файла в этом альбоме были успешно сохранены', other: '${formattedNumber} файлов в этом альбоме были успешно сохранены')}"; - static String m44(sizeInMBorGB) => "Освободите ${sizeInMBorGB}"; + static String m35(storageAmountInGB) => + "${storageAmountInGB} ГБ каждый раз, когда кто-то подписывается на платный тариф и применяет ваш код"; - static String m45(count, formattedSize) => - "${Intl.plural(count, one: 'Это можно удалить с устройства, чтобы освободить ${formattedSize}', other: 'Их можно удалить с устройства, чтобы освободить ${formattedSize}')}"; + static String m36(endDate) => + "Бесплатный пробный период действителен до ${endDate}"; - static String m46(currentlyProcessing, totalCount) => + static String m37(count) => + "Вы всё ещё сможете получить доступ к ${Intl.plural(count, one: 'нему', other: 'ним')} в Ente, пока у вас активна подписка"; + + static String m38(sizeInMBorGB) => "Освободить ${sizeInMBorGB}"; + + static String m39(count, formattedSize) => + "${Intl.plural(count, one: 'Его можно удалить с устройства, чтобы освободить ${formattedSize}', other: 'Их можно удалить с устройства, чтобы освободить ${formattedSize}')}"; + + static String m40(currentlyProcessing, totalCount) => "Обработка ${currentlyProcessing} / ${totalCount}"; - static String m48(count) => - "${Intl.plural(count, one: '${count} штука', other: '${count} штук')}"; + static String m41(name) => "Поход с ${name}"; - static String m51(expiryTime) => "Ссылка истечёт через ${expiryTime}"; + static String m42(count) => + "${Intl.plural(count, one: '${count} элемент', few: '${count} элемента', other: '${count} элементов')}"; - static String m5(count, formattedCount) => - "${Intl.plural(count, zero: 'нет воспоминаний', one: '${formattedCount} воспоминание', other: '${formattedCount} воспоминаний')}"; + static String m43(name) => "В последний раз с ${name}"; - static String m54(count) => + static String m44(email) => + "${email} пригласил вас стать доверенным контактом"; + + static String m45(expiryTime) => "Ссылка истечёт ${expiryTime}"; + + static String m46(email) => "Связать человека с ${email}"; + + static String m47(personName, email) => "Это свяжет ${personName} с ${email}"; + + static String m48(count, formattedCount) => + "${Intl.plural(count, zero: 'нет воспоминаний', one: '${formattedCount} воспоминание', few: '${formattedCount} воспоминания', other: '${formattedCount} воспоминаний')}"; + + static String m49(count) => "${Intl.plural(count, one: 'Переместить элемент', other: 'Переместить элементы')}"; - static String m55(albumName) => "Успешно перемещено в ${albumName}"; + static String m50(albumName) => "Успешно перемещено в ${albumName}"; - static String m56(personName) => "Нет предложений для ${personName}"; + static String m51(personName) => "Нет предложений для ${personName}"; - static String m57(name) => "Не ${name}?"; + static String m52(name) => "Не ${name}?"; - static String m0(passwordStrengthValue) => - "Мощность пароля: ${passwordStrengthValue}"; + static String m53(familyAdminEmail) => + "Пожалуйста, свяжитесь с ${familyAdminEmail} для изменения кода."; - static String m60(providerName) => - "Если с вас сняли оплату, обратитесь в службу поддержки ${providerName}"; + static String m54(name) => "Вечеринка с ${name}"; - static String m64(count) => - "${Intl.plural(count, zero: '0 photo', one: '1 photo', other: '${count} photos')}"; + static String m55(passwordStrengthValue) => + "Надёжность пароля: ${passwordStrengthValue}"; - static String m65(endDate) => - "Бесплатный пробный период до ${endDate}.\nПосле, вы сможете выбрать платный план."; + static String m56(providerName) => + "Пожалуйста, обратитесь в поддержку ${providerName}, если с вас сняли деньги"; - static String m66(toEmail) => "Пожалуйста, напишите нам на ${toEmail}"; + static String m57(name, age) => "${name} исполнилось ${age}!"; - static String m67(toEmail) => "Пожалуйста, отправьте логи на \n${toEmail}"; + static String m58(name, age) => "${name} скоро исполнится ${age}"; - static String m69(folderName) => "Обработка ${folderName}..."; + static String m59(count) => + "${Intl.plural(count, zero: 'Нет фото', one: '1 фото', other: '${count} фото')}"; - static String m70(storeName) => "Оцените нас в ${storeName}"; + static String m60(count) => + "${Intl.plural(count, zero: '0 фотографий', one: '1 фотография', few: '${count} фотографии', other: '${count} фотографий')}"; - static String m75(storageInGB) => - "3. Вы оба получаете ${storageInGB} Гигабайт* бесплатно"; + static String m61(endDate) => + "Бесплатный пробный период действителен до ${endDate}.\nПосле этого вы можете выбрать платный тариф."; - static String m76(userEmail) => - "${userEmail} будет удален из этого общего альбома\n\nВсе добавленные им фотографии также будут удалены из альбома"; + static String m62(toEmail) => "Пожалуйста, напишите нам на ${toEmail}"; - static String m77(endDate) => "Обновление подписки на ${endDate}"; + static String m63(toEmail) => "Пожалуйста, отправьте логи на \n${toEmail}"; - static String m79(count) => - "${Intl.plural(count, one: '${count} результат найден', other: '${count} результатов найдено')}"; + static String m64(name) => "Позируя с ${name}"; - static String m6(count) => "${count} выбрано"; + static String m65(folderName) => "Обработка ${folderName}..."; - static String m81(count, yourCount) => "${count} выбрано (${yourCount} ваши)"; + static String m66(storeName) => "Оцените нас в ${storeName}"; - static String m83(verificationID) => - "Вот мой проверочный ID: ${verificationID} для ente.io."; + static String m67(name) => "Вы переназначены на ${name}"; - static String m7(verificationID) => - "Эй, вы можете подтвердить, что это ваш идентификатор подтверждения ente.io: ${verificationID}"; + static String m68(days, email) => + "Вы сможете получить доступ к аккаунту через ${days} дней. Уведомление будет отправлено на ${email}."; - static String m84(referralCode, referralStorageInGB) => - "Реферальный код Ente: ${referralCode} \n\nПримените его в разделе «Настройки» → «Основные» → «Рефералы», чтобы получить ${referralStorageInGB} Гигабайт бесплатно после того как вы подпишетесь на платный план"; + static String m69(email) => + "Теперь вы можете восстановить аккаунт ${email}, установив новый пароль."; - static String m85(numberOfPeople) => - "${Intl.plural(numberOfPeople, zero: 'Поделится с конкретными людьми', one: 'Поделено с 1 человеком', other: 'Поделено с ${numberOfPeople} людьми')}"; + static String m70(email) => "${email} пытается восстановить ваш аккаунт."; - static String m86(emailIDs) => "Поделиться с ${emailIDs}"; + static String m71(storageInGB) => + "3. Вы оба получаете ${storageInGB} ГБ* бесплатно"; - static String m87(fileType) => + static String m72(userEmail) => + "${userEmail} будет удалён из этого общего альбома\n\nВсе фото, добавленные этим пользователем, также будут удалены из альбома"; + + static String m73(endDate) => "Подписка будет продлена ${endDate}"; + + static String m74(name) => "Путешествие с ${name}"; + + static String m75(count) => + "${Intl.plural(count, one: '${count} результат найден', few: '${count} результата найдено', other: '${count} результатов найдено')}"; + + static String m76(snapshotLength, searchLength) => + "Несоответствие длины разделов: ${snapshotLength} != ${searchLength}"; + + static String m77(count) => "${count} выбрано"; + + static String m78(count, yourCount) => + "${count} выбрано (${yourCount} ваших)"; + + static String m79(name) => "Селфи с ${name}"; + + static String m80(verificationID) => + "Вот мой идентификатор подтверждения: ${verificationID} для ente.io."; + + static String m81(verificationID) => + "Привет, можешь подтвердить, что это твой идентификатор подтверждения ente.io: ${verificationID}"; + + static String m82(referralCode, referralStorageInGB) => + "Реферальный код Ente: ${referralCode} \n\nПримените его в разделе «Настройки» → «Общие» → «Рефералы», чтобы получить ${referralStorageInGB} ГБ бесплатно после подписки на платный тариф\n\nhttps://ente.io"; + + static String m83(numberOfPeople) => + "${Intl.plural(numberOfPeople, zero: 'Поделиться с конкретными людьми', one: 'Доступно 1 человеку', other: 'Доступно ${numberOfPeople} людям')}"; + + static String m84(emailIDs) => "Доступен для ${emailIDs}"; + + static String m85(fileType) => "Это ${fileType} будет удалено с вашего устройства."; - static String m88(fileType) => - "Этот ${fileType} есть и в Ente, и на вашем устройстве."; + static String m86(fileType) => + "Это ${fileType} есть и в Ente, и на вашем устройстве."; - static String m89(fileType) => "Этот ${fileType} будет удалён из Ente."; + static String m87(fileType) => "Это ${fileType} будет удалено из Ente."; - static String m1(storageAmountInGB) => "${storageAmountInGB} Гигабайт"; + static String m88(name) => "Спорт с ${name}"; - static String m92( + static String m89(name) => "В центре внимания ${name}"; + + static String m90(storageAmountInGB) => "${storageAmountInGB} ГБ"; + + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => - "${usedAmount} ${usedStorageUnit} из ${totalAmount} ${totalStorageUnit} использовано"; + "Использовано ${usedAmount} ${usedStorageUnit} из ${totalAmount} ${totalStorageUnit}"; - static String m93(id) => - "Ваш ${id} уже связан с другой учетной записью Ente.\nЕсли вы хотите использовать ${id} с этой учетной записью, пожалуйста, свяжитесь с нашей службой поддержки"; + static String m92(id) => + "Ваш ${id} уже связан с другим аккаунтом Ente.\nЕсли вы хотите использовать ${id} с этим аккаунтом, пожалуйста, свяжитесь с нашей службой поддержки"; - static String m94(endDate) => "Ваша подписка будет отменена ${endDate}"; + static String m93(endDate) => "Ваша подписка будет отменена ${endDate}"; - static String m95(completed, total) => "${completed}/${total} сохранено"; + static String m94(completed, total) => + "${completed}/${total} воспоминаний сохранено"; - static String m8(storageAmountInGB) => - "Они тоже получат ${storageAmountInGB} Гигабайт"; + static String m95(ignoreReason) => + "Нажмите для загрузки. Загрузка игнорируется из-за ${ignoreReason}"; - static String m97(email) => - "Этот идентификатор подтверждения пользователя ${email}"; + static String m96(storageAmountInGB) => + "Они тоже получат ${storageAmountInGB} ГБ"; + + static String m97(email) => "Это идентификатор подтверждения ${email}"; + + static String m98(count) => + "${Intl.plural(count, one: 'Эта неделя, ${count} год назад', few: 'Эта неделя, ${count} года назад', other: 'Эта неделя, ${count} лет назад')}"; + + static String m99(dateFormat) => "${dateFormat} сквозь годы"; + + static String m100(count) => + "${Intl.plural(count, zero: 'Скоро', one: '1 день', few: '${count} дня', other: '${count} дней')}"; + + static String m101(year) => "Поездка в ${year}"; + + static String m102(location) => "Поездка в ${location}"; + + static String m103(email) => + "Вы приглашены стать доверенным контактом ${email}."; static String m104(galleryType) => - "Тип галереи ${galleryType} не поддерживается для переименования"; + "Тип галереи ${galleryType} не поддерживает переименование"; static String m105(ignoreReason) => "Загрузка игнорируется из-за ${ignoreReason}"; - static String m107(endDate) => "Действителен по ${endDate}"; + static String m106(count) => "Сохранение ${count} воспоминаний..."; + + static String m107(endDate) => "Действительно до ${endDate}"; static String m108(email) => "Подтвердить ${email}"; static String m109(count) => "${Intl.plural(count, zero: 'Добавлено 0 зрителей', one: 'Добавлен 1 зритель', other: 'Добавлено ${count} зрителей')}"; - static String m2(email) => "Мы отправили письмо на ${email}"; + static String m110(email) => "Мы отправили письмо на ${email}"; - static String m110(count) => - "${Intl.plural(count, one: '${count} год назад', other: '${count} лет назад')}"; + static String m111(count) => + "${Intl.plural(count, one: '${count} год назад', few: '${count} года назад', other: '${count} лет назад')}"; - static String m112(storageSaved) => "Вы успешно освободили ${storageSaved}!"; + static String m112(name) => "Вы и ${name}"; + + static String m113(storageSaved) => "Вы успешно освободили ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -242,38 +326,39 @@ class MessageLookup extends MessageLookupByLibrary { "account": MessageLookupByLibrary.simpleMessage("Аккаунт"), "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage("Аккаунт уже настроен."), + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("С возвращением!"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( - "Я понимаю, что если я потеряю свой пароль, я могу потерять свои данные, так как мои данные в сквозном шифровании."), + "Я понимаю, что если я потеряю пароль, я могу потерять свои данные, так как они защищены сквозным шифрованием."), "activeSessions": MessageLookupByLibrary.simpleMessage("Активные сеансы"), "add": MessageLookupByLibrary.simpleMessage("Добавить"), "addAName": MessageLookupByLibrary.simpleMessage("Добавить имя"), "addANewEmail": MessageLookupByLibrary.simpleMessage( - "Добавить новый адрес эл. почты"), + "Добавьте новую электронную почту"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Добавить соавтора"), - "addCollaborators": m10, + "addCollaborators": m1, "addFiles": MessageLookupByLibrary.simpleMessage("Добавить файлы"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Добавить с устройства"), - "addItem": m11, - "addLocation": MessageLookupByLibrary.simpleMessage("Добавить место"), + "addItem": m2, + "addLocation": + MessageLookupByLibrary.simpleMessage("Добавить местоположение"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Добавить"), - "addMore": MessageLookupByLibrary.simpleMessage("Добавить еще"), + "addMore": MessageLookupByLibrary.simpleMessage("Добавить ещё"), "addName": MessageLookupByLibrary.simpleMessage("Добавить имя"), "addNameOrMerge": MessageLookupByLibrary.simpleMessage("Добавить имя или объединить"), "addNew": MessageLookupByLibrary.simpleMessage("Добавить новое"), "addNewPerson": - MessageLookupByLibrary.simpleMessage("Добавить новую персону"), + MessageLookupByLibrary.simpleMessage("Добавить нового человека"), "addOnPageSubtitle": - MessageLookupByLibrary.simpleMessage("Подробнее о расширениях"), - "addOnValidTill": m12, - "addOns": MessageLookupByLibrary.simpleMessage("Расширения"), - "addPhotos": - MessageLookupByLibrary.simpleMessage("Добавить фотографии"), + MessageLookupByLibrary.simpleMessage("Подробности дополнений"), + "addOnValidTill": m3, + "addOns": MessageLookupByLibrary.simpleMessage("Дополнения"), + "addPhotos": MessageLookupByLibrary.simpleMessage("Добавить фото"), "addSelected": MessageLookupByLibrary.simpleMessage("Добавить выбранные"), "addToAlbum": MessageLookupByLibrary.simpleMessage("Добавить в альбом"), @@ -282,88 +367,94 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Добавить в скрытый альбом"), "addTrustedContact": MessageLookupByLibrary.simpleMessage("Добавить доверенный контакт"), - "addViewer": - MessageLookupByLibrary.simpleMessage("Добавить наблюдателя"), - "addViewers": m13, + "addViewer": MessageLookupByLibrary.simpleMessage("Добавить зрителя"), + "addViewers": m4, "addYourPhotosNow": - MessageLookupByLibrary.simpleMessage("Добавьте ваши фотографии"), - "addedAs": MessageLookupByLibrary.simpleMessage("Добавлено как"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + MessageLookupByLibrary.simpleMessage("Добавьте ваши фото"), + "addedAs": MessageLookupByLibrary.simpleMessage("Добавлен как"), + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("Добавление в избранное..."), - "advanced": MessageLookupByLibrary.simpleMessage("Дополнительно"), - "advancedSettings": - MessageLookupByLibrary.simpleMessage("Дополнительно"), + "admiringThem": m7, + "advanced": MessageLookupByLibrary.simpleMessage("Расширенные"), + "advancedSettings": MessageLookupByLibrary.simpleMessage("Расширенные"), "after1Day": MessageLookupByLibrary.simpleMessage("Через 1 день"), "after1Hour": MessageLookupByLibrary.simpleMessage("Через 1 час"), "after1Month": MessageLookupByLibrary.simpleMessage("Через 1 месяц"), - "after1Week": MessageLookupByLibrary.simpleMessage("Через неделю"), + "after1Week": MessageLookupByLibrary.simpleMessage("Через 1 неделю"), "after1Year": MessageLookupByLibrary.simpleMessage("Через 1 год"), "albumOwner": MessageLookupByLibrary.simpleMessage("Владелец"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Название альбома"), - "albumUpdated": MessageLookupByLibrary.simpleMessage("Альбом обновлен"), + "albumUpdated": MessageLookupByLibrary.simpleMessage("Альбом обновлён"), "albums": MessageLookupByLibrary.simpleMessage("Альбомы"), - "allClear": MessageLookupByLibrary.simpleMessage("✨ Все чисто"), + "allClear": MessageLookupByLibrary.simpleMessage("✨ Всё чисто"), "allMemoriesPreserved": MessageLookupByLibrary.simpleMessage("Все воспоминания сохранены"), "allPersonGroupingWillReset": MessageLookupByLibrary.simpleMessage( - "Все группы этого человека будут сброшены, и вы потеряете все предложения, сделанные для этого человека"), + "Все группы этого человека будут сброшены, и вы потеряете все предложения для него"), + "allWillShiftRangeBasedOnFirst": MessageLookupByLibrary.simpleMessage( + "Это первое фото в группе. Остальные выбранные фото автоматически сместятся на основе новой даты"), "allow": MessageLookupByLibrary.simpleMessage("Разрешить"), "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( - "Разрешить пользователям со ссылкой также добавлять фотографии в общий альбом."), + "Разрешить людям с этой ссылкой добавлять фото в общий альбом."), "allowAddingPhotos": MessageLookupByLibrary.simpleMessage("Разрешить добавление фото"), "allowAppToOpenSharedAlbumLinks": MessageLookupByLibrary.simpleMessage( - "Разрешить приложению открывать общие ссылки на альбомы"), + "Разрешить приложению открывать ссылки на общие альбомы"), "allowDownloads": - MessageLookupByLibrary.simpleMessage("Разрешить загрузку"), + MessageLookupByLibrary.simpleMessage("Разрешить скачивание"), "allowPeopleToAddPhotos": MessageLookupByLibrary.simpleMessage( - "Разрешить пользователям добавлять фотографии"), + "Разрешить людям добавлять фото"), + "allowPermBody": MessageLookupByLibrary.simpleMessage( + "Пожалуйста, разрешите доступ к вашим фото через настройки устройства, чтобы Ente мог отображать и сохранять вашу библиотеку."), + "allowPermTitle": + MessageLookupByLibrary.simpleMessage("Разрешить доступ к фото"), "androidBiometricHint": - MessageLookupByLibrary.simpleMessage("Верификация личности"), + MessageLookupByLibrary.simpleMessage("Подтвердите личность"), "androidBiometricNotRecognized": MessageLookupByLibrary.simpleMessage( - "Не распознано. Попробуйте еще раз."), + "Не распознано. Попробуйте снова."), "androidBiometricRequiredTitle": MessageLookupByLibrary.simpleMessage("Требуется биометрия"), "androidBiometricSuccess": MessageLookupByLibrary.simpleMessage("Успешно"), - "androidCancelButton": MessageLookupByLibrary.simpleMessage("Отменить"), + "androidCancelButton": MessageLookupByLibrary.simpleMessage("Отмена"), "androidDeviceCredentialsRequiredTitle": MessageLookupByLibrary.simpleMessage( - "Требуются учетные данные устройства"), + "Требуются учётные данные устройства"), "androidDeviceCredentialsSetupDescription": MessageLookupByLibrary.simpleMessage( - "Требуются учетные данные устройства"), + "Требуются учётные данные устройства"), "androidGoToSettingsDescription": MessageLookupByLibrary.simpleMessage( - "На вашем устройстве не настроена биометрия. Перейдите в «Настройки > Безопасность», чтобы добавить биометрическую аутентификацию."), - "androidIosWebDesktop": - MessageLookupByLibrary.simpleMessage("Android, iOS, Web, ПК"), + "Биометрическая аутентификация не настроена. Перейдите в «Настройки» → «Безопасность», чтобы добавить её."), + "androidIosWebDesktop": MessageLookupByLibrary.simpleMessage( + "Android, iOS, браузер, компьютер"), "androidSignInTitle": MessageLookupByLibrary.simpleMessage("Требуется аутентификация"), + "appIcon": MessageLookupByLibrary.simpleMessage("Иконка приложения"), "appLock": MessageLookupByLibrary.simpleMessage("Блокировка приложения"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( - "Выберите между экраном блокировки вашего устройства и пользовательским экраном блокировки с PIN-кодом или паролем."), - "appVersion": m18, - "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), + "Выберите между экраном блокировки устройства и пользовательским с PIN-кодом или паролем."), + "appVersion": m9, + "appleId": MessageLookupByLibrary.simpleMessage("Идентификатор Apple"), "apply": MessageLookupByLibrary.simpleMessage("Применить"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Применить код"), "appstoreSubscription": - MessageLookupByLibrary.simpleMessage("Подписка на AppStore"), - "archive": MessageLookupByLibrary.simpleMessage("Архивировать"), + MessageLookupByLibrary.simpleMessage("Подписка AppStore"), + "archive": MessageLookupByLibrary.simpleMessage("Архив"), "archiveAlbum": MessageLookupByLibrary.simpleMessage("Архивировать альбом"), "archiving": MessageLookupByLibrary.simpleMessage("Архивация..."), "areYouSureThatYouWantToLeaveTheFamily": MessageLookupByLibrary.simpleMessage( - "Вы уверены, что хотите покинуть семейный план?"), + "Вы уверены, что хотите покинуть семейный тариф?"), "areYouSureYouWantToCancel": MessageLookupByLibrary.simpleMessage( "Вы уверены, что хотите отменить?"), "areYouSureYouWantToChangeYourPlan": MessageLookupByLibrary.simpleMessage( - "Хотите сменить текущий план?"), + "Вы уверены, что хотите сменить тариф?"), "areYouSureYouWantToExit": MessageLookupByLibrary.simpleMessage( "Вы уверены, что хотите выйти?"), "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( @@ -372,30 +463,34 @@ class MessageLookup extends MessageLookupByLibrary { "Вы уверены, что хотите продлить?"), "areYouSureYouWantToResetThisPerson": MessageLookupByLibrary.simpleMessage( - "Вы уверены, что хотите сбросить этого человека?"), + "Вы уверены, что хотите сбросить данные этого человека?"), "askCancelReason": MessageLookupByLibrary.simpleMessage( - "Ваша подписка была отменена. Хотите рассказать почему?"), + "Ваша подписка была отменена. Не хотели бы вы поделиться причиной?"), "askDeleteReason": MessageLookupByLibrary.simpleMessage( - "Какова основная причина, по которой вы удаляете свой аккаунт?"), + "Какова основная причина удаления вашего аккаунта?"), "askYourLovedOnesToShare": MessageLookupByLibrary.simpleMessage( - "Попросите ваших близких поделиться"), + "Попросите близких поделиться"), "atAFalloutShelter": MessageLookupByLibrary.simpleMessage("в бункере"), "authToChangeEmailVerificationSetting": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, войдите, чтобы изменить настройку подтверждения электронной почты"), + "Пожалуйста, авторизуйтесь для изменения настроек подтверждения электронной почты"), "authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, авторизуйтесь, чтобы изменить настройки экрана блокировки"), + "Пожалуйста, авторизуйтесь для изменения настроек экрана блокировки"), "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, авторизуйтесь, чтобы изменить адрес электронной почты"), + "Пожалуйста, авторизуйтесь для смены электронной почты"), "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, авторизуйтесь, чтобы изменить пароль"), + "Пожалуйста, авторизуйтесь для смены пароля"), "authToConfigureTwofactorAuthentication": MessageLookupByLibrary.simpleMessage( "Пожалуйста, авторизуйтесь для настройки двухфакторной аутентификации"), "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, авторизуйтесь, чтобы начать удаление аккаунта"), + "Пожалуйста, авторизуйтесь для начала процедуры удаления аккаунта"), + "authToManageLegacy": MessageLookupByLibrary.simpleMessage( + "Пожалуйста, авторизуйтесь для управления доверенными контактами"), "authToViewPasskey": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, авторизуйтесь, чтобы просмотреть ваш пароль"), + "Пожалуйста, авторизуйтесь для просмотра ключа доступа"), + "authToViewTrashedFiles": MessageLookupByLibrary.simpleMessage( + "Пожалуйста, авторизуйтесь для просмотра удалённых файлов"), "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( "Пожалуйста, авторизуйтесь для просмотра активных сессий"), "authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage( @@ -403,72 +498,102 @@ class MessageLookup extends MessageLookupByLibrary { "authToViewYourMemories": MessageLookupByLibrary.simpleMessage( "Пожалуйста, авторизуйтесь для просмотра воспоминаний"), "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, авторизуйтесь для просмотра вашего ключа восстановления"), + "Пожалуйста, авторизуйтесь для просмотра ключа восстановления"), "authenticating": MessageLookupByLibrary.simpleMessage("Аутентификация..."), "authenticationFailedPleaseTryAgain": MessageLookupByLibrary.simpleMessage( - "Аутентификация не удалась, попробуйте еще раз"), + "Аутентификация не удалась, пожалуйста, попробуйте снова"), "authenticationSuccessful": MessageLookupByLibrary.simpleMessage( "Аутентификация прошла успешно!"), "autoCastDialogBody": MessageLookupByLibrary.simpleMessage( "Здесь вы увидите доступные устройства."), "autoCastiOSPermission": MessageLookupByLibrary.simpleMessage( - "Убедитесь, что для приложения Ente Photos включены права доступа к локальной сети в настройках."), + "Убедитесь, что для приложения Ente Photos включены разрешения локальной сети в настройках."), "autoLock": MessageLookupByLibrary.simpleMessage("Автоблокировка"), "autoLockFeatureDescription": MessageLookupByLibrary.simpleMessage( - "Время в фоне, после которого приложение блокируется"), + "Спустя какое время приложение блокируется после перехода в фоновый режим"), "autoLogoutMessage": MessageLookupByLibrary.simpleMessage( - "В связи с технической ошибкой вы вышли из системы. Приносим свои извинения."), - "autoPair": - MessageLookupByLibrary.simpleMessage("Автоматическое сопряжение"), + "Из-за технического сбоя вы были выведены из системы. Приносим извинения за неудобства."), + "autoPair": MessageLookupByLibrary.simpleMessage("Автоподключение"), "autoPairDesc": MessageLookupByLibrary.simpleMessage( - "Автоматическое подключение работает только с устройствами, поддерживающими Chromecast."), + "Автоподключение работает только с устройствами, поддерживающими Chromecast."), "available": MessageLookupByLibrary.simpleMessage("Доступно"), - "availableStorageSpace": m19, - "backedUpFolders": - MessageLookupByLibrary.simpleMessage("Резервное копирование папок"), + "availableStorageSpace": m10, + "backedUpFolders": MessageLookupByLibrary.simpleMessage( + "Папки для резервного копирования"), + "backgroundWithThem": m11, "backup": MessageLookupByLibrary.simpleMessage("Резервное копирование"), "backupFailed": MessageLookupByLibrary.simpleMessage( - "Ошибка резервного копирования"), - "backupFile": MessageLookupByLibrary.simpleMessage("Резервный файл"), + "Резервное копирование не удалось"), + "backupFile": + MessageLookupByLibrary.simpleMessage("Резервное копирование файла"), "backupOverMobileData": MessageLookupByLibrary.simpleMessage( - "Резервное копирование через мобильную сеть"), + "Резервное копирование через мобильный интернет"), "backupSettings": MessageLookupByLibrary.simpleMessage( "Настройки резервного копирования"), + "backupStatus": MessageLookupByLibrary.simpleMessage( + "Статус резервного копирования"), "backupStatusDescription": MessageLookupByLibrary.simpleMessage( - "Здесь будут сохранены резервные копии"), + "Элементы, сохранённые в резервной копии, появятся здесь"), "backupVideos": MessageLookupByLibrary.simpleMessage("Резервное копирование видео"), + "beach": MessageLookupByLibrary.simpleMessage("Песок и море"), "birthday": MessageLookupByLibrary.simpleMessage("День рождения"), "blackFridaySale": MessageLookupByLibrary.simpleMessage( "Распродажа в \"Черную пятницу\""), "blog": MessageLookupByLibrary.simpleMessage("Блог"), + "cLBulkEdit": + MessageLookupByLibrary.simpleMessage("Массовое редактирование дат"), + "cLBulkEditDesc": MessageLookupByLibrary.simpleMessage( + "Теперь вы можете выбрать несколько фото и отредактировать дату/время быстро и сразу для всех. Также поддерживается смещение дат."), + "cLFamilyPlan": MessageLookupByLibrary.simpleMessage( + "Ограничения семейного тарифа"), + "cLFamilyPlanDesc": MessageLookupByLibrary.simpleMessage( + "Теперь вы можете установить ограничения на объём хранилища, которое могут использовать члены вашей семьи."), + "cLIcon": MessageLookupByLibrary.simpleMessage("Новая иконка"), + "cLIconDesc": MessageLookupByLibrary.simpleMessage( + "Наконец-то новая иконка приложения, которая, как мы считаем, лучше всего отражает нашу работу. Мы также добавили переключатель иконок, чтобы вы могли продолжать использовать старую иконку."), + "cLMemories": MessageLookupByLibrary.simpleMessage("Воспоминания"), + "cLMemoriesDesc": MessageLookupByLibrary.simpleMessage( + "Откройте заново свои особенные моменты — в центре внимания ваши любимые люди, поездки и праздники, лучшие снимки и многое другое. Для наилучших впечатлений включите машинное обучение и отметьте себя и своих друзей."), + "cLWidgets": MessageLookupByLibrary.simpleMessage("Виджеты"), + "cLWidgetsDesc": MessageLookupByLibrary.simpleMessage( + "Теперь доступны виджеты домашнего экрана, интегрированные с воспоминаниями. Они покажут ваши особенные моменты, не открывая приложения."), "cachedData": MessageLookupByLibrary.simpleMessage("Кэшированные данные"), - "calculating": MessageLookupByLibrary.simpleMessage("Расчёт..."), + "calculating": MessageLookupByLibrary.simpleMessage("Подсчёт..."), + "canNotOpenBody": MessageLookupByLibrary.simpleMessage( + "Извините, этот альбом не может быть открыт в приложении."), + "canNotOpenTitle": MessageLookupByLibrary.simpleMessage( + "Не удаётся открыть этот альбом"), "canNotUploadToAlbumsOwnedByOthers": MessageLookupByLibrary.simpleMessage( - "Невозможно загрузить в альбомы других людей"), + "Нельзя загружать в альбомы, принадлежащие другим"), "canOnlyCreateLinkForFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( "Можно создать ссылку только для ваших файлов"), "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( "Можно удалять только файлы, принадлежащие вам"), "cancel": MessageLookupByLibrary.simpleMessage("Отменить"), - "cancelOtherSubscription": m20, + "cancelAccountRecovery": + MessageLookupByLibrary.simpleMessage("Отменить восстановление"), + "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( + "Вы уверены, что хотите отменить восстановление?"), + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Отменить подписку"), - "cannotAddMorePhotosAfterBecomingViewer": m3, - "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( - "Невозможно удалить общие файлы"), - "castAlbum": MessageLookupByLibrary.simpleMessage("Трансляция альбома"), + "cannotAddMorePhotosAfterBecomingViewer": m13, + "cannotDeleteSharedFiles": + MessageLookupByLibrary.simpleMessage("Нельзя удалить общие файлы"), + "castAlbum": + MessageLookupByLibrary.simpleMessage("Транслировать альбом"), "castIPMismatchBody": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, убедитесь, что вы находитесь в той же сети, что и ТВ."), + "Пожалуйста, убедитесь, что вы находитесь в одной сети с телевизором."), "castIPMismatchTitle": MessageLookupByLibrary.simpleMessage( "Не удалось транслировать альбом"), "castInstruction": MessageLookupByLibrary.simpleMessage( - "Посетите cast.ente.io на устройстве, которое вы хотите подключить.\n\nВведите код ниже, чтобы воспроизвести альбом на телевизоре."), + "Посетите cast.ente.io на устройстве, которое хотите подключить.\n\nВведите код ниже, чтобы воспроизвести альбом на телевизоре."), "centerPoint": MessageLookupByLibrary.simpleMessage("Центральная точка"), "change": MessageLookupByLibrary.simpleMessage("Изменить"), @@ -477,7 +602,7 @@ class MessageLookup extends MessageLookupByLibrary { "changeLocationOfSelectedItems": MessageLookupByLibrary.simpleMessage( "Изменить местоположение выбранных элементов?"), "changePassword": - MessageLookupByLibrary.simpleMessage("Изменить пароль"), + MessageLookupByLibrary.simpleMessage("Сменить пароль"), "changePasswordTitle": MessageLookupByLibrary.simpleMessage("Изменить пароль"), "changePermissions": @@ -487,59 +612,60 @@ class MessageLookup extends MessageLookupByLibrary { "checkForUpdates": MessageLookupByLibrary.simpleMessage("Проверить обновления"), "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, проверьте свой почтовый ящик (и спам) для завершения верификации"), + "Пожалуйста, проверьте ваш почтовый ящик (и спам) для завершения верификации"), "checkStatus": MessageLookupByLibrary.simpleMessage("Проверить статус"), "checking": MessageLookupByLibrary.simpleMessage("Проверка..."), "checkingModels": MessageLookupByLibrary.simpleMessage("Проверка моделей..."), + "city": MessageLookupByLibrary.simpleMessage("В городе"), "claimFreeStorage": MessageLookupByLibrary.simpleMessage( "Получить бесплатное хранилище"), "claimMore": MessageLookupByLibrary.simpleMessage("Получите больше!"), "claimed": MessageLookupByLibrary.simpleMessage("Получено"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": - MessageLookupByLibrary.simpleMessage("Очистить \"Без Категории\""), + MessageLookupByLibrary.simpleMessage("Очистить «Без категории»"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( - "Удалить все файлы из \"Без Категории\", которые присутствуют в других альбомах"), + "Удалить из «Без категории» все файлы, присутствующие в других альбомах"), "clearCaches": MessageLookupByLibrary.simpleMessage("Очистить кэш"), - "clearIndexes": - MessageLookupByLibrary.simpleMessage("Очистить индексы"), - "click": MessageLookupByLibrary.simpleMessage("• Клик"), + "clearIndexes": MessageLookupByLibrary.simpleMessage("Удалить индексы"), + "click": MessageLookupByLibrary.simpleMessage("• Нажмите"), "clickOnTheOverflowMenu": MessageLookupByLibrary.simpleMessage( - "• Нажмите на дополнительное меню"), + "• Нажмите на меню дополнительных действий"), "close": MessageLookupByLibrary.simpleMessage("Закрыть"), - "clubByCaptureTime": - MessageLookupByLibrary.simpleMessage("Клуб по времени захвата"), + "clubByCaptureTime": MessageLookupByLibrary.simpleMessage( + "Группировать по времени съёмки"), "clubByFileName": - MessageLookupByLibrary.simpleMessage("Клуб по имени файла"), + MessageLookupByLibrary.simpleMessage("Группировать по имени файла"), "clusteringProgress": MessageLookupByLibrary.simpleMessage("Прогресс кластеризации"), "codeAppliedPageTitle": MessageLookupByLibrary.simpleMessage("Код применён"), + "codeChangeLimitReached": MessageLookupByLibrary.simpleMessage( + "Извините, вы достигли лимита изменений кода."), "codeCopiedToClipboard": MessageLookupByLibrary.simpleMessage( "Код скопирован в буфер обмена"), "codeUsedByYou": - MessageLookupByLibrary.simpleMessage("Код использованный вами"), + MessageLookupByLibrary.simpleMessage("Код, использованный вами"), "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( - "Создайте ссылку, чтобы позволить людям добавлять и просматривать фотографии в вашем общем альбоме без приложения или учетной записи Ente. Отлично подходит для сбора фотографий событий."), + "Создайте ссылку, чтобы люди могли добавлять и просматривать фото в вашем общем альбоме без использования приложения или аккаунта Ente. Это отлично подходит для сбора фото с мероприятий."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Совместная ссылка"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Соавтор"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( - "Соавторы могут добавлять фотографии и видео в общий альбом."), - "collaboratorsSuccessfullyAdded": m23, - "collageLayout": MessageLookupByLibrary.simpleMessage("Разметка"), + "Соавторы могут добавлять фото и видео в общий альбом."), + "collaboratorsSuccessfullyAdded": m16, + "collageLayout": MessageLookupByLibrary.simpleMessage("Макет"), "collageSaved": - MessageLookupByLibrary.simpleMessage("Коллаж сохранен в галерее"), + MessageLookupByLibrary.simpleMessage("Коллаж сохранён в галерее"), "collect": MessageLookupByLibrary.simpleMessage("Собрать"), "collectEventPhotos": - MessageLookupByLibrary.simpleMessage("Собрать фото события"), - "collectPhotos": - MessageLookupByLibrary.simpleMessage("Собрать фотографии"), + MessageLookupByLibrary.simpleMessage("Собрать фото с мероприятия"), + "collectPhotos": MessageLookupByLibrary.simpleMessage("Сбор фото"), "collectPhotosDescription": MessageLookupByLibrary.simpleMessage( - "Создайте ссылку, где ваши друзья смогут загружать фото в оригинальном качестве."), + "Создайте ссылку, по которой ваши друзья смогут загружать фото в оригинальном качестве."), "color": MessageLookupByLibrary.simpleMessage("Цвет"), "configuration": MessageLookupByLibrary.simpleMessage("Настройки"), "confirm": MessageLookupByLibrary.simpleMessage("Подтвердить"), @@ -547,32 +673,33 @@ class MessageLookup extends MessageLookupByLibrary { "Вы уверены, что хотите отключить двухфакторную аутентификацию?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage( "Подтвердить удаление аккаунта"), + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( - "Да, я хочу навсегда удалить эту учётную запись и все её данные во всех приложениях Ente."), + "Да, я хочу навсегда удалить этот аккаунт и все его данные во всех приложениях."), "confirmPassword": MessageLookupByLibrary.simpleMessage("Подтвердите пароль"), "confirmPlanChange": - MessageLookupByLibrary.simpleMessage("Подтвердить изменение плана"), + MessageLookupByLibrary.simpleMessage("Подтвердить смену тарифа"), "confirmRecoveryKey": MessageLookupByLibrary.simpleMessage( - "Подтвердите ключ восстановления"), + "Подтвердить ключ восстановления"), "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage( "Подтвердите ваш ключ восстановления"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Подключиться к устройству"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("Связаться с поддержкой"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Контакты"), "contents": MessageLookupByLibrary.simpleMessage("Содержимое"), - "continueLabel": MessageLookupByLibrary.simpleMessage("Далее"), + "continueLabel": MessageLookupByLibrary.simpleMessage("Продолжить"), "continueOnFreeTrial": MessageLookupByLibrary.simpleMessage( - "Продолжить на пробной версии"), + "Продолжить с бесплатным пробным периодом"), "convertToAlbum": MessageLookupByLibrary.simpleMessage("Преобразовать в альбом"), "copyEmailAddress": MessageLookupByLibrary.simpleMessage( - "Копировать адрес электронной почты"), - "copyLink": MessageLookupByLibrary.simpleMessage("Копировать ссылку"), + "Скопировать адрес электронной почты"), + "copyLink": MessageLookupByLibrary.simpleMessage("Скопировать ссылку"), "copypasteThisCodentoYourAuthenticatorApp": MessageLookupByLibrary.simpleMessage( "Скопируйте этот код\nв ваше приложение для аутентификации"), @@ -584,33 +711,32 @@ class MessageLookup extends MessageLookupByLibrary { "Не удалось обновить подписку"), "count": MessageLookupByLibrary.simpleMessage("Количество"), "crashReporting": - MessageLookupByLibrary.simpleMessage("Отчеты об ошибках"), + MessageLookupByLibrary.simpleMessage("Отчёты об ошибках"), "create": MessageLookupByLibrary.simpleMessage("Создать"), "createAccount": - MessageLookupByLibrary.simpleMessage("Создать учетную запись"), + MessageLookupByLibrary.simpleMessage("Создать аккаунт"), "createAlbumActionHint": MessageLookupByLibrary.simpleMessage( - "Нажмите и удерживайте, чтобы выбрать фотографии, и нажмите +, чтобы создать альбом"), + "Нажмите и удерживайте, чтобы выбрать фото, и нажмите «+», чтобы создать альбом"), "createCollaborativeLink": MessageLookupByLibrary.simpleMessage("Создать совместную ссылку"), "createCollage": MessageLookupByLibrary.simpleMessage("Создать коллаж"), - "createNewAccount": MessageLookupByLibrary.simpleMessage( - "Создать новую учетную запись"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("Создать новый аккаунт"), "createOrSelectAlbum": MessageLookupByLibrary.simpleMessage("Создать или выбрать альбом"), "createPublicLink": MessageLookupByLibrary.simpleMessage("Создать публичную ссылку"), "creatingLink": MessageLookupByLibrary.simpleMessage("Создание ссылки..."), - "criticalUpdateAvailable": - MessageLookupByLibrary.simpleMessage("Доступно важное обновление"), + "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( + "Доступно критическое обновление"), "crop": MessageLookupByLibrary.simpleMessage("Обрезать"), - "currentUsageIs": - MessageLookupByLibrary.simpleMessage("Текущее использование "), - "currentlyRunning": - MessageLookupByLibrary.simpleMessage("сейчас запущено"), - "custom": MessageLookupByLibrary.simpleMessage("Свой"), - "customEndpoint": m27, - "darkTheme": MessageLookupByLibrary.simpleMessage("Темная тема"), + "currentUsageIs": MessageLookupByLibrary.simpleMessage( + "Текущее использование составляет "), + "currentlyRunning": MessageLookupByLibrary.simpleMessage("выполняется"), + "custom": MessageLookupByLibrary.simpleMessage("Пользовательский"), + "customEndpoint": m20, + "darkTheme": MessageLookupByLibrary.simpleMessage("Тёмная"), "dayToday": MessageLookupByLibrary.simpleMessage("Сегодня"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Вчера"), "declineTrustInvite": @@ -619,22 +745,22 @@ class MessageLookup extends MessageLookupByLibrary { "decryptingVideo": MessageLookupByLibrary.simpleMessage("Расшифровка видео..."), "deduplicateFiles": - MessageLookupByLibrary.simpleMessage("Дедуплицировать файлы"), + MessageLookupByLibrary.simpleMessage("Удалить дубликаты файлов"), "delete": MessageLookupByLibrary.simpleMessage("Удалить"), "deleteAccount": MessageLookupByLibrary.simpleMessage("Удалить аккаунт"), "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( - "Сожалеем, что вы уходите. Пожалуйста, поделитесь своим отзывом, чтобы помочь нам улучшиться."), + "Нам жаль, что вы уходите. Пожалуйста, поделитесь мнением о том, как мы могли бы стать лучше."), "deleteAccountPermanentlyButton": MessageLookupByLibrary.simpleMessage("Удалить аккаунт навсегда"), "deleteAlbum": MessageLookupByLibrary.simpleMessage("Удалить альбом"), "deleteAlbumDialog": MessageLookupByLibrary.simpleMessage( - "Также удалить фотографии (и видео), которые есть в этом альбоме из всех других альбомов, где они есть?"), + "Также удалить фото (и видео), находящиеся в этом альбоме, из всех других альбомов, частью которых они являются?"), "deleteAlbumsDialogBody": MessageLookupByLibrary.simpleMessage( - "Это удалит все пустые альбомы. Это полезно, если вы хотите меньше беспорядка в списке альбомов."), + "Это удалит все пустые альбомы. Это может быть полезно, если вы хотите навести порядок в списке альбомов."), "deleteAll": MessageLookupByLibrary.simpleMessage("Удалить всё"), "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( - "Эта учетная запись связана с другими приложениями Ente, если вы ими пользуетесь. Загруженные вами данные во всех приложениях Ente будут запланированы к удалению, а ваша учетная запись будет удалена без возможности восстановления."), + "Этот аккаунт связан с другими приложениями Ente, если вы их используете. Все загруженные данные во всех приложениях Ente будут поставлены в очередь на удаление, а ваш аккаунт будет удален навсегда."), "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( "Пожалуйста, отправьте письмо на account-deletion@ente.io с вашего зарегистрированного адреса электронной почты."), "deleteEmptyAlbums": @@ -642,33 +768,34 @@ class MessageLookup extends MessageLookupByLibrary { "deleteEmptyAlbumsWithQuestionMark": MessageLookupByLibrary.simpleMessage("Удалить пустые альбомы?"), "deleteFromBoth": - MessageLookupByLibrary.simpleMessage("Удалить отовсюду"), + MessageLookupByLibrary.simpleMessage("Удалить из обоих мест"), "deleteFromDevice": MessageLookupByLibrary.simpleMessage("Удалить с устройства"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Удалить из Ente"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Удалить местоположение"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Удалить фото"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( - "У вас отсутствует важная функция, которая мне нужна"), + "Отсутствует необходимая функция"), "deleteReason2": MessageLookupByLibrary.simpleMessage( - "Приложение или его некоторые функции не ведут себя так, как я думаю"), + "Приложение или определённая функция работают не так, как я ожидал"), "deleteReason3": MessageLookupByLibrary.simpleMessage( - "Я нашел другой сервис, который мне нравится больше"), - "deleteReason4": MessageLookupByLibrary.simpleMessage( - "Моя причина не указана в списке"), + "Я нашёл другой сервис, который мне больше нравится"), + "deleteReason4": + MessageLookupByLibrary.simpleMessage("Моя причина не указана"), "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( "Ваш запрос будет обработан в течение 72 часов."), "deleteSharedAlbum": MessageLookupByLibrary.simpleMessage("Удалить общий альбом?"), "deleteSharedAlbumDialogBody": MessageLookupByLibrary.simpleMessage( - "Альбом будет удален для всех\n\nВы потеряете доступ к общим фотографиям других людей в этом альбоме"), - "deselectAll": MessageLookupByLibrary.simpleMessage("Снять выделение"), + "Альбом будет удалён для всех\n\nВы потеряете доступ к общим фото в этом альбоме, принадлежащим другим"), + "deselectAll": + MessageLookupByLibrary.simpleMessage("Отменить выделение"), "designedToOutlive": - MessageLookupByLibrary.simpleMessage("Создан для вечной жизни"), + MessageLookupByLibrary.simpleMessage("Создано на века"), "details": MessageLookupByLibrary.simpleMessage("Подробности"), "developerSettings": MessageLookupByLibrary.simpleMessage("Настройки для разработчиков"), @@ -680,84 +807,100 @@ class MessageLookup extends MessageLookupByLibrary { "deviceLock": MessageLookupByLibrary.simpleMessage("Блокировка устройства"), "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( - "Отключить блокировку экрана, когда Ente находится на переднем плане и выполняется резервное копирование. Обычно это не нужно, но это может ускорить загрузку и первоначальный импорт больших библиотек."), + "Отключить блокировку экрана устройства, когда Ente на экране, и выполняется резервное копирование. Обычно это не требуется, но это может ускорить завершение больших загрузок и первоначального импортирования крупных библиотек."), "deviceNotFound": MessageLookupByLibrary.simpleMessage("Устройство не найдено"), - "didYouKnow": MessageLookupByLibrary.simpleMessage("А вы знали?"), + "didYouKnow": MessageLookupByLibrary.simpleMessage("Знаете ли вы?"), "disableAutoLock": MessageLookupByLibrary.simpleMessage("Отключить автоблокировку"), "disableDownloadWarningBody": MessageLookupByLibrary.simpleMessage( - "Наблюдатели все еще могут делать скриншоты или копировать ваши фотографии с помощью других инструментов"), + "Зрители всё ещё могут делать скриншоты или сохранять копии ваших фото с помощью внешних инструментов"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Обратите внимание"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage( "Отключить двухфакторную аутентификацию"), "disablingTwofactorAuthentication": MessageLookupByLibrary.simpleMessage( "Отключение двухфакторной аутентификации..."), "discord": MessageLookupByLibrary.simpleMessage("Discord"), - "discover_babies": MessageLookupByLibrary.simpleMessage("Дети"), + "discover": MessageLookupByLibrary.simpleMessage("Откройте для себя"), + "discover_babies": MessageLookupByLibrary.simpleMessage("Малыши"), "discover_celebrations": - MessageLookupByLibrary.simpleMessage("Поздравления"), + MessageLookupByLibrary.simpleMessage("Праздники"), "discover_food": MessageLookupByLibrary.simpleMessage("Еда"), "discover_greenery": MessageLookupByLibrary.simpleMessage("Зелень"), - "discover_hills": MessageLookupByLibrary.simpleMessage("Горы"), + "discover_hills": MessageLookupByLibrary.simpleMessage("Холмы"), + "discover_identity": MessageLookupByLibrary.simpleMessage("Документы"), "discover_memes": MessageLookupByLibrary.simpleMessage("Мемы"), "discover_notes": MessageLookupByLibrary.simpleMessage("Заметки"), "discover_pets": MessageLookupByLibrary.simpleMessage("Питомцы"), + "discover_receipts": MessageLookupByLibrary.simpleMessage("Чеки"), + "discover_screenshots": + MessageLookupByLibrary.simpleMessage("Скриншоты"), "discover_selfies": MessageLookupByLibrary.simpleMessage("Селфи"), "discover_sunset": MessageLookupByLibrary.simpleMessage("Закат"), + "discover_visiting_cards": + MessageLookupByLibrary.simpleMessage("Визитки"), "discover_wallpapers": MessageLookupByLibrary.simpleMessage("Обои"), - "dismiss": MessageLookupByLibrary.simpleMessage("Отменить"), + "dismiss": MessageLookupByLibrary.simpleMessage("Отклонить"), "distanceInKMUnit": MessageLookupByLibrary.simpleMessage("км"), "doNotSignOut": MessageLookupByLibrary.simpleMessage("Не выходить"), - "doThisLater": MessageLookupByLibrary.simpleMessage("Сделать позже"), + "doThisLater": + MessageLookupByLibrary.simpleMessage("Сделать это позже"), "doYouWantToDiscardTheEditsYouHaveMade": MessageLookupByLibrary.simpleMessage( - "Вы хотите отменить сделанные изменения?"), + "Хотите отменить сделанные изменения?"), "done": MessageLookupByLibrary.simpleMessage("Готово"), + "dontSave": MessageLookupByLibrary.simpleMessage("Не сохранять"), "doubleYourStorage": - MessageLookupByLibrary.simpleMessage("Удвой своё хранилище"), + MessageLookupByLibrary.simpleMessage("Удвойте своё хранилище"), "download": MessageLookupByLibrary.simpleMessage("Скачать"), "downloadFailed": - MessageLookupByLibrary.simpleMessage("Загрузка не удалась"), + MessageLookupByLibrary.simpleMessage("Скачивание не удалось"), "downloading": MessageLookupByLibrary.simpleMessage("Скачивание..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Редактировать"), "editLocation": MessageLookupByLibrary.simpleMessage("Изменить местоположение"), "editLocationTagTitle": MessageLookupByLibrary.simpleMessage("Изменить местоположение"), "editPerson": - MessageLookupByLibrary.simpleMessage("Отредактировать человека"), + MessageLookupByLibrary.simpleMessage("Редактировать человека"), + "editTime": MessageLookupByLibrary.simpleMessage("Изменить время"), "editsSaved": MessageLookupByLibrary.simpleMessage("Изменения сохранены"), "editsToLocationWillOnlyBeSeenWithinEnte": MessageLookupByLibrary.simpleMessage( - "Редактирования в местоположении будут видны только внутри Ente"), - "eligible": MessageLookupByLibrary.simpleMessage("подходящий"), + "Изменения в местоположении будут видны только в Ente"), + "eligible": MessageLookupByLibrary.simpleMessage("доступно"), "email": MessageLookupByLibrary.simpleMessage("Электронная почта"), - "emailChangedTo": m34, - "emailNoEnteAccount": m36, - "emailVerificationToggle": - MessageLookupByLibrary.simpleMessage("Вход с кодом на почту"), + "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage( + "Электронная почта уже зарегистрирована."), + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, + "emailNotRegistered": MessageLookupByLibrary.simpleMessage( + "Электронная почта не зарегистрирована."), + "emailVerificationToggle": MessageLookupByLibrary.simpleMessage( + "Подтверждение входа по почте"), "emailYourLogs": MessageLookupByLibrary.simpleMessage( "Отправить логи по электронной почте"), + "embracingThem": m30, "emergencyContacts": MessageLookupByLibrary.simpleMessage("Экстренные контакты"), "empty": MessageLookupByLibrary.simpleMessage("Очистить"), "emptyTrash": MessageLookupByLibrary.simpleMessage("Очистить корзину?"), "enable": MessageLookupByLibrary.simpleMessage("Включить"), "enableMLIndexingDesc": MessageLookupByLibrary.simpleMessage( - "Ente поддерживает машинное обучение на устройстве для распознавания лиц, умного поиска и других расширенных функций поиска"), + "Ente поддерживает машинное обучение прямо на устройстве для распознавания лиц, магического поиска и других поисковых функций"), "enableMachineLearningBanner": MessageLookupByLibrary.simpleMessage( - "Включить автоматическое обучение для Магического Поиска и распознавания лица"), - "enableMaps": MessageLookupByLibrary.simpleMessage("Включить карты"), + "Включите машинное обучение для магического поиска и распознавания лиц"), + "enableMaps": MessageLookupByLibrary.simpleMessage("Включить Карты"), "enableMapsDesc": MessageLookupByLibrary.simpleMessage( - "Ваши фотографии будут показаны на карте мира.\n\nЭта карта размещена на Open Street Map, и точное местоположение ваших фотографий никогда не разглашается.\n\nВы можете отключить эту функцию в любое время в настройках."), + "Ваши фото будут отображены на карте мира.\n\nЭта карта размещена на OpenStreetMap, и точное местоположение ваших фото никогда не разглашается.\n\nВы можете отключить эту функцию в любое время в настройках."), "enabled": MessageLookupByLibrary.simpleMessage("Включено"), "encryptingBackup": MessageLookupByLibrary.simpleMessage( "Шифрование резервной копии..."), @@ -770,63 +913,66 @@ class MessageLookup extends MessageLookupByLibrary { "Сквозное шифрование по умолчанию"), "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": MessageLookupByLibrary.simpleMessage( - "Ente может шифровать и сохранять файлы только в том случае, если вы предоставите к ним доступ"), + "Ente может шифровать и сохранять файлы, только если вы предоставите к ним доступ"), "entePhotosPerm": MessageLookupByLibrary.simpleMessage( - "Ente требуется разрешение для сохранения ваших фотографий"), + "Ente требуется разрешение для сохранения ваших фото"), "enteSubscriptionPitch": MessageLookupByLibrary.simpleMessage( - "Ente сохраняет ваши воспоминания, так что они всегда доступны для вас, даже если вы потеряете доступ к устройству."), + "Ente сохраняет ваши воспоминания, чтобы они всегда были доступны вам, даже если вы потеряете устройство."), "enteSubscriptionShareWithFamily": MessageLookupByLibrary.simpleMessage( - "Ваша семья может быть добавлена в ваш план."), + "Ваша семья также может быть включена в ваш тариф."), "enterAlbumName": - MessageLookupByLibrary.simpleMessage("Введите имя альбома"), + MessageLookupByLibrary.simpleMessage("Введите название альбома"), "enterCode": MessageLookupByLibrary.simpleMessage("Введите код"), "enterCodeDescription": MessageLookupByLibrary.simpleMessage( - "Введите код, предоставленный вашим другом что бы получить бесплатное хранилище для вас обоих"), + "Введите код, предоставленный вашим другом, чтобы вы оба могли получить бесплатное хранилище"), "enterDateOfBirth": MessageLookupByLibrary.simpleMessage( "Дата рождения (необязательно)"), "enterEmail": - MessageLookupByLibrary.simpleMessage("Введите адрес эл. почты"), + MessageLookupByLibrary.simpleMessage("Введите электронную почту"), "enterFileName": - MessageLookupByLibrary.simpleMessage("Введите имя файла"), + MessageLookupByLibrary.simpleMessage("Введите название файла"), "enterName": MessageLookupByLibrary.simpleMessage("Введите имя"), "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( - "Введите новый пароль, который мы можем использовать для шифрования ваших данных"), + "Введите новый пароль для шифрования ваших данных"), "enterPassword": MessageLookupByLibrary.simpleMessage("Введите пароль"), "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( - "Введите пароль, который мы можем использовать для шифрования ваших данных"), - "enterPersonName": MessageLookupByLibrary.simpleMessage("Введите имя"), - "enterPin": MessageLookupByLibrary.simpleMessage("Введите PIN"), + "Введите пароль для шифрования ваших данных"), + "enterPersonName": + MessageLookupByLibrary.simpleMessage("Введите имя человека"), + "enterPin": MessageLookupByLibrary.simpleMessage("Введите PIN-код"), "enterReferralCode": MessageLookupByLibrary.simpleMessage("Введите реферальный код"), "enterThe6digitCodeFromnyourAuthenticatorApp": MessageLookupByLibrary.simpleMessage( - "Введите 6-значный код из вашего приложения для аутентификации"), + "Введите 6-значный код из\nвашего приложения для аутентификации"), "enterValidEmail": MessageLookupByLibrary.simpleMessage( "Пожалуйста, введите действительный адрес электронной почты."), "enterYourEmailAddress": MessageLookupByLibrary.simpleMessage( - "Введите свою электронную почту"), + "Введите адрес вашей электронной почты"), "enterYourPassword": - MessageLookupByLibrary.simpleMessage("Введите пароль"), + MessageLookupByLibrary.simpleMessage("Введите ваш пароль"), "enterYourRecoveryKey": MessageLookupByLibrary.simpleMessage( - "Введите свой ключ восстановления"), + "Введите ваш ключ восстановления"), "error": MessageLookupByLibrary.simpleMessage("Ошибка"), "everywhere": MessageLookupByLibrary.simpleMessage("везде"), "exif": MessageLookupByLibrary.simpleMessage("EXIF"), "existingUser": MessageLookupByLibrary.simpleMessage("Существующий пользователь"), "expiredLinkInfo": MessageLookupByLibrary.simpleMessage( - "Срок действия этой ссылки истек. Пожалуйста, выберите новое время действия или отключите истечение срока действия ссылки."), - "exportLogs": MessageLookupByLibrary.simpleMessage("Экспорт логов"), + "Срок действия этой ссылки истёк. Пожалуйста, выберите новый срок или отключите его."), + "exportLogs": + MessageLookupByLibrary.simpleMessage("Экспортировать логи"), "exportYourData": - MessageLookupByLibrary.simpleMessage("Экспорт данных"), - "extraPhotosFound": MessageLookupByLibrary.simpleMessage( - "Найдены дополнительные фотографии"), - "extraPhotosFoundFor": m38, + MessageLookupByLibrary.simpleMessage("Экспортировать ваши данные"), + "extraPhotosFound": + MessageLookupByLibrary.simpleMessage("Найдены дополнительные фото"), + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( - "Лицо еще не кластеризовано, пожалуйста, вернитесь позже"), + "Лицо ещё не кластеризовано. Пожалуйста, попробуйте позже"), "faceRecognition": MessageLookupByLibrary.simpleMessage("Распознавание лиц"), "faces": MessageLookupByLibrary.simpleMessage("Лица"), + "failed": MessageLookupByLibrary.simpleMessage("Не удалось"), "failedToApplyCode": MessageLookupByLibrary.simpleMessage("Не удалось применить код"), "failedToCancel": @@ -834,11 +980,11 @@ class MessageLookup extends MessageLookupByLibrary { "failedToDownloadVideo": MessageLookupByLibrary.simpleMessage("Не удалось скачать видео"), "failedToFetchActiveSessions": MessageLookupByLibrary.simpleMessage( - "Не удалось получить активные сеансы"), + "Не удалось получить активные сессии"), "failedToFetchOriginalForEdit": MessageLookupByLibrary.simpleMessage( - "Не удалось получить оригинал для редактирования"), + "Не удалось скачать оригинал для редактирования"), "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( - "Не удалось получить информацию о реферале. Пожалуйста, повторите попытку позже."), + "Не удалось получить данные о рефералах. Пожалуйста, попробуйте позже."), "failedToLoadAlbums": MessageLookupByLibrary.simpleMessage( "Не удалось загрузить альбомы"), "failedToPlayVideo": MessageLookupByLibrary.simpleMessage( @@ -849,15 +995,16 @@ class MessageLookup extends MessageLookupByLibrary { "failedToRenew": MessageLookupByLibrary.simpleMessage("Не удалось продлить"), "failedToVerifyPaymentStatus": MessageLookupByLibrary.simpleMessage( - "Не удалось подтвердить статус платежа"), + "Не удалось проверить статус платежа"), "familyPlanOverview": MessageLookupByLibrary.simpleMessage( - "Добавьте 5 членов семьи к существующему плану без дополнительной оплаты.\n\nКаждый участник получает свое личное пространство и не может видеть файлы друг друга, если к ним не предоставлен общий доступ.\n\nСемейные планы доступны клиентам, имеющим платную подписку на Ente.\n\nПодпишитесь сейчас, чтобы начать!"), + "Добавьте 5 членов семьи к существующему тарифу без дополнительной оплаты.\n\nКаждый участник получает своё личное пространство и не может видеть файлы других, если они не общедоступны.\n\nСемейные тарифы доступны клиентам с платной подпиской на Ente.\n\nПодпишитесь сейчас, чтобы начать!"), "familyPlanPortalTitle": MessageLookupByLibrary.simpleMessage("Семья"), - "familyPlans": MessageLookupByLibrary.simpleMessage("Семейные планы"), - "faq": MessageLookupByLibrary.simpleMessage("Ответы на ваши вопросы"), + "familyPlans": MessageLookupByLibrary.simpleMessage("Семейные тарифы"), + "faq": MessageLookupByLibrary.simpleMessage("Часто задаваемые вопросы"), "faqs": MessageLookupByLibrary.simpleMessage("Часто задаваемые вопросы"), "favorite": MessageLookupByLibrary.simpleMessage("В избранное"), + "feastingWithThem": m32, "feedback": MessageLookupByLibrary.simpleMessage("Обратная связь"), "file": MessageLookupByLibrary.simpleMessage("Файл"), "fileFailedToSaveToGallery": MessageLookupByLibrary.simpleMessage( @@ -870,129 +1017,148 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Файл сохранён в галерею"), "fileTypes": MessageLookupByLibrary.simpleMessage("Типы файлов"), "fileTypesAndNames": - MessageLookupByLibrary.simpleMessage("Типы файлов и имена"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + MessageLookupByLibrary.simpleMessage("Типы и названия файлов"), + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("Файлы удалены"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage("Файлы сохранены в галерею"), "findPeopleByName": MessageLookupByLibrary.simpleMessage( - "Быстрый поиск людей по имени"), - "flip": MessageLookupByLibrary.simpleMessage("Перевернуть"), + "С лёгкостью находите людей по имени"), + "findThemQuickly": + MessageLookupByLibrary.simpleMessage("С лёгкостью находите его"), + "flip": MessageLookupByLibrary.simpleMessage("Отразить"), + "food": MessageLookupByLibrary.simpleMessage("Кулинарное наслаждение"), "forYourMemories": - MessageLookupByLibrary.simpleMessage("для Ваших воспоминаний"), + MessageLookupByLibrary.simpleMessage("для ваших воспоминаний"), "forgotPassword": MessageLookupByLibrary.simpleMessage("Забыл пароль"), "foundFaces": MessageLookupByLibrary.simpleMessage("Найденные лица"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage( - "Бесплатного хранилища получено"), - "freeStorageOnReferralSuccess": m4, + "Полученное бесплатное хранилище"), + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage( - "Бесплатного хранилища можно использовать"), + "Доступное бесплатное хранилище"), "freeTrial": MessageLookupByLibrary.simpleMessage("Бесплатный пробный период"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAccessPostDelete": m37, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage( - "Освободите место на устройстве"), + "Освободить место на устройстве"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( - "Сохраните место на вашем устройстве, очистив уже сохраненные файлы."), + "Освободите место на устройстве, удалив файлы, которые уже сохранены в резервной копии."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Освободить место"), - "freeUpSpaceSaving": m45, + "freeUpSpaceSaving": m39, + "gallery": MessageLookupByLibrary.simpleMessage("Галерея"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( - "До 1000 воспоминаний, отображаемых в галерее"), - "general": MessageLookupByLibrary.simpleMessage("Общее"), + "В галерее отображается до 1000 воспоминаний"), + "general": MessageLookupByLibrary.simpleMessage("Общие"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( - "Генерируем ключи шифрования..."), - "genericProgress": m46, + "Генерация ключей шифрования..."), + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Перейти в настройки"), - "googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"), + "googlePlayId": + MessageLookupByLibrary.simpleMessage("Идентификатор Google Play"), "grantFullAccessPrompt": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, разрешите доступ к вашим фотографиям в Настройках приложения"), + "Пожалуйста, разрешите доступ ко всем фото в настройках устройства"), "grantPermission": MessageLookupByLibrary.simpleMessage("Предоставить разрешение"), - "groupNearbyPhotos": MessageLookupByLibrary.simpleMessage( - "Группировать фотографии рядом"), - "guestView": MessageLookupByLibrary.simpleMessage("Гостевой вид"), + "greenery": MessageLookupByLibrary.simpleMessage("Зелёная жизнь"), + "groupNearbyPhotos": + MessageLookupByLibrary.simpleMessage("Группировать ближайшие фото"), + "guestView": MessageLookupByLibrary.simpleMessage("Гостевой просмотр"), "guestViewEnablePreSteps": MessageLookupByLibrary.simpleMessage( - "Чтобы включить гостевой вид, настройте пароль устройства или блокировку экрана в настройках системы."), + "Для включения гостевого просмотра, пожалуйста, настройте код или блокировку экрана в настройках устройства."), "hearUsExplanation": MessageLookupByLibrary.simpleMessage( - "Будет полезно, если вы укажете, где нашли нас, так как мы не отслеживаем установки приложения!"), + "Мы не отслеживаем установки приложений. Нам поможет, если скажете, как вы нас нашли!"), "hearUsWhereTitle": MessageLookupByLibrary.simpleMessage( - "Как вы узнали о Ente? (необязательно)"), + "Как вы узнали об Ente? (необязательно)"), "help": MessageLookupByLibrary.simpleMessage("Помощь"), - "hidden": MessageLookupByLibrary.simpleMessage("Скрыто"), + "hidden": MessageLookupByLibrary.simpleMessage("Скрытые"), "hide": MessageLookupByLibrary.simpleMessage("Скрыть"), "hideContent": MessageLookupByLibrary.simpleMessage("Скрыть содержимое"), "hideContentDescriptionAndroid": MessageLookupByLibrary.simpleMessage( - "Скрывает содержимое приложения в переключателе приложений и отключает скриншоты"), + "Скрывает содержимое приложения при переключении между приложениями и отключает скриншоты"), "hideContentDescriptionIos": MessageLookupByLibrary.simpleMessage( - "Скрывает содержимое приложения в переключателе приложений"), + "Скрывает содержимое приложения при переключении между приложениями"), + "hideSharedItemsFromHomeGallery": MessageLookupByLibrary.simpleMessage( + "Скрыть общие элементы из основной галереи"), "hiding": MessageLookupByLibrary.simpleMessage("Скрытие..."), + "hikingWithThem": m41, "hostedAtOsmFrance": MessageLookupByLibrary.simpleMessage("Размещено на OSM France"), "howItWorks": MessageLookupByLibrary.simpleMessage("Как это работает"), "howToViewShareeVerificationID": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, попросите их задержать палец на адресе электронной почты на экране настроек и убедитесь, что идентификаторы на обоих устройствах совпадают."), + "Попросите их нажать с удержанием на адрес электронной почты на экране настроек и убедиться, что идентификаторы на обоих устройствах совпадают."), "iOSGoToSettingsDescription": MessageLookupByLibrary.simpleMessage( - "Биометрическая аутентификация не настроена на вашем устройстве. Пожалуйста, включите Touch ID или Face ID на вашем телефоне."), + "Биометрическая аутентификация не настроена. Пожалуйста, включите Touch ID или Face ID на вашем устройстве."), "iOSLockOut": MessageLookupByLibrary.simpleMessage( - "Биометрическая аутентификация отключена. Пожалуйста, заблокируйте и разблокируйте экран, чтобы включить ее."), - "iOSOkButton": MessageLookupByLibrary.simpleMessage("ОК"), - "ignoreUpdate": - MessageLookupByLibrary.simpleMessage("Ничего не делать"), - "ignored": MessageLookupByLibrary.simpleMessage("игнорировать"), + "Биометрическая аутентификация отключена. Пожалуйста, заблокируйте и разблокируйте экран, чтобы включить её."), + "iOSOkButton": MessageLookupByLibrary.simpleMessage("Хорошо"), + "ignoreUpdate": MessageLookupByLibrary.simpleMessage("Игнорировать"), + "ignored": MessageLookupByLibrary.simpleMessage("игнорируется"), "ignoredFolderUploadReason": MessageLookupByLibrary.simpleMessage( - "Некоторые файлы в этом альбоме пропущены, потому что они ранее были удалены из Ente."), + "Некоторые файлы в этом альбоме игнорируются, так как ранее они были удалены из Ente."), "imageNotAnalyzed": MessageLookupByLibrary.simpleMessage( - "Изображение не анализировано"), + "Изображение не проанализировано"), "immediately": MessageLookupByLibrary.simpleMessage("Немедленно"), - "importing": MessageLookupByLibrary.simpleMessage("Импорт...."), + "importing": MessageLookupByLibrary.simpleMessage("Импортирование..."), "incorrectCode": MessageLookupByLibrary.simpleMessage("Неверный код"), "incorrectPasswordTitle": MessageLookupByLibrary.simpleMessage("Неверный пароль"), "incorrectRecoveryKey": MessageLookupByLibrary.simpleMessage( - "Неправильный ключ восстановления"), + "Неверный ключ восстановления"), "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage( - "Введенный вами ключ восстановления неверен"), + "Введённый вами ключ восстановления неверен"), "incorrectRecoveryKeyTitle": MessageLookupByLibrary.simpleMessage( - "Неправильный ключ восстановления"), + "Неверный ключ восстановления"), "indexedItems": - MessageLookupByLibrary.simpleMessage("Индексированные элементы"), + MessageLookupByLibrary.simpleMessage("Проиндексированные элементы"), "indexingIsPaused": MessageLookupByLibrary.simpleMessage( "Индексация приостановлена. Она автоматически возобновится, когда устройство будет готово."), + "ineligible": MessageLookupByLibrary.simpleMessage("Неподходящий"), "info": MessageLookupByLibrary.simpleMessage("Информация"), "insecureDevice": MessageLookupByLibrary.simpleMessage("Небезопасное устройство"), "installManually": - MessageLookupByLibrary.simpleMessage("Установка вручную"), + MessageLookupByLibrary.simpleMessage("Установить вручную"), "invalidEmailAddress": MessageLookupByLibrary.simpleMessage( - "Неверный адрес электронной почты"), - "invalidEndpoint": - MessageLookupByLibrary.simpleMessage("Неверная конечная точка"), + "Недействительный адрес электронной почты"), + "invalidEndpoint": MessageLookupByLibrary.simpleMessage( + "Недействительная конечная точка"), "invalidEndpointMessage": MessageLookupByLibrary.simpleMessage( - "Извините, введенная вами конечная точка неверна. Пожалуйста, введите корректную конечную точку и повторите попытку."), - "invalidKey": MessageLookupByLibrary.simpleMessage("Неверный ключ"), + "Извините, введённая вами конечная точка недействительна. Пожалуйста, введите корректную точку и попробуйте снова."), + "invalidKey": + MessageLookupByLibrary.simpleMessage("Недействительный ключ"), "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( - "Введенный ключ восстановления недействителен. Убедитесь, что он содержит 24 слова и проверьте написание каждого из них.\n\nЕсли вы ввели старый код восстановления, убедитесь, что он содержит 64 символа и проверьте каждый из них."), + "Введённый вами ключ восстановления недействителен. Убедитесь, что он содержит 24 слова, и проверьте правописание каждого из них.\n\nЕсли вы ввели старый код восстановления, убедитесь, что он состоит из 64 символов, и проверьте каждый из них."), "invite": MessageLookupByLibrary.simpleMessage("Пригласить"), "inviteToEnte": MessageLookupByLibrary.simpleMessage("Пригласить в Ente"), "inviteYourFriends": - MessageLookupByLibrary.simpleMessage("Пригласить своих друзей"), - "inviteYourFriendsToEnte": MessageLookupByLibrary.simpleMessage( - "Пригласите своих друзей в Ente"), + MessageLookupByLibrary.simpleMessage("Пригласите своих друзей"), + "inviteYourFriendsToEnte": + MessageLookupByLibrary.simpleMessage("Пригласите друзей в Ente"), "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( - "Похоже, что-то пошло не так. Пожалуйста, повторите попытку через некоторое время. Если ошибка повторится, обратитесь в нашу службу поддержки."), - "itemCount": m48, + "Похоже, что-то пошло не так. Пожалуйста, повторите попытку через некоторое время. Если ошибка сохраняется, обратитесь в нашу службу поддержки."), + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( - "Элементы показывают количество дней, оставшихся до окончательного удаления"), + "На элементах отображается количество дней, оставшихся до их безвозвратного удаления"), "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( "Выбранные элементы будут удалены из этого альбома"), + "join": MessageLookupByLibrary.simpleMessage("Присоединиться"), + "joinAlbum": + MessageLookupByLibrary.simpleMessage("Присоединиться к альбому"), + "joinAlbumConfirmationDialogBody": MessageLookupByLibrary.simpleMessage( + "Если вы присоединитесь к альбому, ваша электронная почта станет видимой для его участников."), + "joinAlbumSubtext": MessageLookupByLibrary.simpleMessage( + "чтобы просматривать и добавлять свои фото"), + "joinAlbumSubtextViewer": MessageLookupByLibrary.simpleMessage( + "чтобы добавить это в общие альбомы"), "joinDiscord": MessageLookupByLibrary.simpleMessage("Присоединиться в Discord"), "keepPhotos": MessageLookupByLibrary.simpleMessage("Оставить фото"), @@ -1000,327 +1166,379 @@ class MessageLookup extends MessageLookupByLibrary { "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( "Пожалуйста, помогите нам с этой информацией"), "language": MessageLookupByLibrary.simpleMessage("Язык"), + "lastTimeWithThem": m43, "lastUpdated": MessageLookupByLibrary.simpleMessage("Последнее обновление"), - "leave": MessageLookupByLibrary.simpleMessage("Выйти"), + "lastYearsTrip": + MessageLookupByLibrary.simpleMessage("Прошлогодняя поездка"), + "leave": MessageLookupByLibrary.simpleMessage("Покинуть"), "leaveAlbum": MessageLookupByLibrary.simpleMessage("Покинуть альбом"), "leaveFamily": MessageLookupByLibrary.simpleMessage("Покинуть семью"), "leaveSharedAlbum": MessageLookupByLibrary.simpleMessage("Покинуть общий альбом?"), "left": MessageLookupByLibrary.simpleMessage("Влево"), + "legacy": MessageLookupByLibrary.simpleMessage("Наследие"), + "legacyAccounts": + MessageLookupByLibrary.simpleMessage("Наследуемые аккаунты"), + "legacyInvite": m44, + "legacyPageDesc": MessageLookupByLibrary.simpleMessage( + "Наследие позволяет доверенным контактам получить доступ к вашему аккаунту в ваше отсутствие."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( - "Доверенные контакты могут инициировать восстановление учетной записи, если они не будут заблокированы в течение 30 дней, сбросить пароль и получить доступ к вашей учетной записи."), - "light": MessageLookupByLibrary.simpleMessage("Светлая тема"), - "lightTheme": MessageLookupByLibrary.simpleMessage("Светлая тема"), + "Доверенные контакты могут начать восстановление аккаунта. Если не отменить это в течение 30 дней, то они смогут сбросить пароль и получить доступ."), + "light": MessageLookupByLibrary.simpleMessage("Яркость"), + "lightTheme": MessageLookupByLibrary.simpleMessage("Светлая"), + "link": MessageLookupByLibrary.simpleMessage("Привязать"), "linkCopiedToClipboard": MessageLookupByLibrary.simpleMessage( "Ссылка скопирована в буфер обмена"), - "linkDeviceLimit": - MessageLookupByLibrary.simpleMessage("Лимит устройств"), - "linkEnabled": MessageLookupByLibrary.simpleMessage("Разрешён"), - "linkExpired": MessageLookupByLibrary.simpleMessage("Истекшая"), - "linkExpiresOn": m51, + "linkDeviceLimit": MessageLookupByLibrary.simpleMessage( + "Ограничение по количеству устройств"), + "linkEmail": + MessageLookupByLibrary.simpleMessage("Привязать электронную почту"), + "linkEmailToContactBannerCaption": + MessageLookupByLibrary.simpleMessage("чтобы быстрее делиться"), + "linkEnabled": MessageLookupByLibrary.simpleMessage("Включена"), + "linkExpired": MessageLookupByLibrary.simpleMessage("Истекла"), + "linkExpiresOn": m45, "linkExpiry": - MessageLookupByLibrary.simpleMessage("Срок действия ссылки истек"), + MessageLookupByLibrary.simpleMessage("Срок действия ссылки"), "linkHasExpired": - MessageLookupByLibrary.simpleMessage("Ссылка устарела"), + MessageLookupByLibrary.simpleMessage("Срок действия ссылки истёк"), "linkNeverExpires": MessageLookupByLibrary.simpleMessage("Никогда"), - "livePhotos": MessageLookupByLibrary.simpleMessage("Живые Фото"), + "linkPerson": MessageLookupByLibrary.simpleMessage("Связать человека"), + "linkPersonCaption": + MessageLookupByLibrary.simpleMessage("чтобы было удобнее делиться"), + "linkPersonToEmail": m46, + "linkPersonToEmailConfirmation": m47, + "livePhotos": MessageLookupByLibrary.simpleMessage("Живые фото"), "loadMessage1": MessageLookupByLibrary.simpleMessage( - "Вы можете поделиться своей подпиской со своей семьей"), + "Вы можете поделиться подпиской с вашей семьёй"), "loadMessage2": MessageLookupByLibrary.simpleMessage( - "На данный момент мы сохранили более 30 миллионов воспоминаний"), + "Мы сохранили уже более 30 миллионов воспоминаний"), "loadMessage3": MessageLookupByLibrary.simpleMessage( - "Мы храним 3 копии ваших данных, одну из них в подземном бункере"), + "Мы храним 3 копии ваших данных, одну из них — в бункере"), "loadMessage4": MessageLookupByLibrary.simpleMessage( - "Все наши приложения с открытым исходным кодом"), + "Все наши приложения имеют открытый исходный код"), "loadMessage5": MessageLookupByLibrary.simpleMessage( - "Наш исходный код и шифрование прошли проверку обществом"), + "Наш исходный код и криптография прошли внешний аудит"), "loadMessage6": MessageLookupByLibrary.simpleMessage( - "Вы можете делиться ссылками на ваши альбомы со своими близкими"), + "Вы можете делиться ссылками на свои альбомы с близкими"), "loadMessage7": MessageLookupByLibrary.simpleMessage( - "Наши мобильные приложения работают в фоновом режиме для шифрования и резервного копирования новых фотографий, которые вы выберите"), + "Наши мобильные приложения работают в фоновом режиме, чтобы шифровать и сохранять все новые фото, которые вы снимаете"), "loadMessage8": MessageLookupByLibrary.simpleMessage( - "В web.ente.io есть удобный загрузчик"), + "На web.ente.io есть удобный загрузчик"), "loadMessage9": MessageLookupByLibrary.simpleMessage( - "Мы используем Xchacha20Poly1305 для шифрования ваших данных"), + "Мы используем Xchacha20Poly1305 для безопасного шифрования ваших данных"), "loadingExifData": - MessageLookupByLibrary.simpleMessage("Загрузка EXIF данных..."), + MessageLookupByLibrary.simpleMessage("Загрузка данных EXIF..."), "loadingGallery": MessageLookupByLibrary.simpleMessage("Загрузка галереи..."), "loadingMessage": - MessageLookupByLibrary.simpleMessage("Загрузка фотографий..."), + MessageLookupByLibrary.simpleMessage("Загрузка ваших фото..."), "loadingModel": MessageLookupByLibrary.simpleMessage("Загрузка моделей..."), "loadingYourPhotos": - MessageLookupByLibrary.simpleMessage("Загрузка фотографий..."), + MessageLookupByLibrary.simpleMessage("Загрузка ваших фото..."), "localGallery": MessageLookupByLibrary.simpleMessage("Локальная галерея"), "localIndexing": - MessageLookupByLibrary.simpleMessage("Локальное индексирование"), + MessageLookupByLibrary.simpleMessage("Локальная индексация"), "localSyncErrorMessage": MessageLookupByLibrary.simpleMessage( - "Похоже, что-то пошло не так, так как локальная синхронизация фото занимает больше времени, чем ожидалось. Пожалуйста, свяжитесь с нашей службой поддержки"), + "Похоже, что-то пошло не так: синхронизация фото занимает больше времени, чем ожидалось. Пожалуйста, обратитесь в поддержку"), "location": MessageLookupByLibrary.simpleMessage("Местоположение"), "locationName": - MessageLookupByLibrary.simpleMessage("Название локации"), + MessageLookupByLibrary.simpleMessage("Название местоположения"), "locationTagFeatureDescription": MessageLookupByLibrary.simpleMessage( - "Тег местоположения группирует все фотографии, сделанные в определенном радиусе от фотографии"), - "locations": MessageLookupByLibrary.simpleMessage("Локации"), + "Тег местоположения группирует все фото, снятые в определённом радиусе от фото"), + "locations": MessageLookupByLibrary.simpleMessage("Местоположения"), "lockButtonLabel": MessageLookupByLibrary.simpleMessage("Заблокировать"), "lockscreen": MessageLookupByLibrary.simpleMessage("Экран блокировки"), "logInLabel": MessageLookupByLibrary.simpleMessage("Войти"), "loggingOut": MessageLookupByLibrary.simpleMessage("Выход..."), "loginSessionExpired": - MessageLookupByLibrary.simpleMessage("Сессия недействительная"), + MessageLookupByLibrary.simpleMessage("Сессия истекла"), "loginSessionExpiredDetails": MessageLookupByLibrary.simpleMessage( - "Сессия истекла. Зайдите снова."), + "Ваша сессия истекла. Пожалуйста, войдите снова."), "loginTerms": MessageLookupByLibrary.simpleMessage( - "Нажимая Войти, я принимаю условия использования и политику конфиденциальности"), + "Нажимая \"Войти\", я соглашаюсь с условиями предоставления услуг и политикой конфиденциальности"), + "loginWithTOTP": + MessageLookupByLibrary.simpleMessage("Войти с одноразовым кодом"), "logout": MessageLookupByLibrary.simpleMessage("Выйти"), "logsDialogBody": MessageLookupByLibrary.simpleMessage( - "Журналы будут отправлены, что поможет нам устранить вашу проблему. Обратите внимание, что имена файлов будут включены, чтобы помочь отслеживать проблемы с конкретными файлами."), + "Это отправит нам логи, чтобы помочь разобраться с вашей проблемой. Обратите внимание, что имена файлов будут включены для отслеживания проблем с конкретными файлами."), "longPressAnEmailToVerifyEndToEndEncryption": MessageLookupByLibrary.simpleMessage( - "Длительное нажатие на email для подтверждения сквозного шифрования."), + "Нажмите с удержанием на электронную почту для подтверждения сквозного шифрования."), "longpressOnAnItemToViewInFullscreen": MessageLookupByLibrary.simpleMessage( - "Удерживайте нажатие на элемент для просмотра в полноэкранном режиме"), + "Нажмите с удержанием на элемент для просмотра в полноэкранном режиме"), "loopVideoOff": - MessageLookupByLibrary.simpleMessage("Цикл видео выключен"), - "loopVideoOn": - MessageLookupByLibrary.simpleMessage("Цикл видео включен"), + MessageLookupByLibrary.simpleMessage("Видео не зациклено"), + "loopVideoOn": MessageLookupByLibrary.simpleMessage("Видео зациклено"), "lostDevice": - MessageLookupByLibrary.simpleMessage("Потеряли свое устройство?"), + MessageLookupByLibrary.simpleMessage("Потеряли устройство?"), "machineLearning": - MessageLookupByLibrary.simpleMessage("Machine learning"), - "magicSearch": MessageLookupByLibrary.simpleMessage("Волшебный поиск"), + MessageLookupByLibrary.simpleMessage("Машинное обучение"), + "magicSearch": MessageLookupByLibrary.simpleMessage("Магический поиск"), "magicSearchHint": MessageLookupByLibrary.simpleMessage( - "Умный поиск позволяет искать фотографии по их содержимому, например, \'цветок\', \'красная машина\', \'паспорт\', \'документы\'"), - "manage": MessageLookupByLibrary.simpleMessage("Управление"), + "Магический поиск позволяет искать фото по содержимому, например, «цветок», «красная машина», «документы»"), + "manage": MessageLookupByLibrary.simpleMessage("Управлять"), + "manageDeviceStorage": + MessageLookupByLibrary.simpleMessage("Управление кэшем устройства"), + "manageDeviceStorageDesc": MessageLookupByLibrary.simpleMessage( + "Ознакомиться и очистить локальный кэш."), "manageFamily": MessageLookupByLibrary.simpleMessage("Управление семьёй"), "manageLink": MessageLookupByLibrary.simpleMessage("Управлять ссылкой"), - "manageParticipants": - MessageLookupByLibrary.simpleMessage("Управление"), + "manageParticipants": MessageLookupByLibrary.simpleMessage("Управлять"), "manageSubscription": MessageLookupByLibrary.simpleMessage("Управление подпиской"), "manualPairDesc": MessageLookupByLibrary.simpleMessage( - "Пара с PIN-кодом работает с любым экраном, на котором вы хотите посмотреть ваш альбом."), + "Подключение с PIN-кодом работает с любым устройством, на котором вы хотите просматривать альбом."), "map": MessageLookupByLibrary.simpleMessage("Карта"), "maps": MessageLookupByLibrary.simpleMessage("Карты"), "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), - "memoryCount": m5, - "merchandise": MessageLookupByLibrary.simpleMessage("Товары"), + "me": MessageLookupByLibrary.simpleMessage("Я"), + "memoryCount": m48, + "merchandise": MessageLookupByLibrary.simpleMessage("Мерч"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Объединить с существующим"), "mergedPhotos": - MessageLookupByLibrary.simpleMessage("Объединенные фото"), + MessageLookupByLibrary.simpleMessage("Объединённые фото"), "mlConsent": MessageLookupByLibrary.simpleMessage("Включить машинное обучение"), "mlConsentConfirmation": MessageLookupByLibrary.simpleMessage( "Я понимаю и хочу включить машинное обучение"), "mlConsentDescription": MessageLookupByLibrary.simpleMessage( - "Если вы включите машинное обучение, Ente будет извлекать информацию из файлов (например, геометрию лица), включая те, которыми с вами поделились.\n\nЭто будет происходить на вашем устройстве, и любая сгенерированная биометрическая информация будет зашифрована с использованием сквозного (End-to-End) шифрования между вашим устройством и сервером."), + "Если вы включите машинное обучение, Ente будет извлекать информацию такую, как геометрия лица, из файлов, включая те, которыми с вами поделились.\n\nЭтот процесс будет происходить на вашем устройстве, и любая сгенерированная биометрическая информация будет защищена сквозным шифрованием."), "mlConsentPrivacy": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, нажмите здесь, чтобы узнать больше об этой функции в нашей политике конфиденциальности"), + "Пожалуйста, нажмите здесь для получения подробностей об этой функции в нашей политике конфиденциальности"), "mlConsentTitle": MessageLookupByLibrary.simpleMessage("Включить машинное обучение?"), "mlIndexingDescription": MessageLookupByLibrary.simpleMessage( - "Обратите внимание, что машинное обучение приведёт к повышенному потреблению трафика и батареи, пока все элементы не будут проиндексированы. Рекомендуем использовать ПК версию для более быстрого индексирования. Полученные результаты будут синхронизированы автоматически между устройствами."), - "mobileWebDesktop": - MessageLookupByLibrary.simpleMessage("Телефон, Web, ПК"), - "moderateStrength": MessageLookupByLibrary.simpleMessage("Средний"), + "Обратите внимание, что машинное обучение увеличит использование трафика и батареи, пока все элементы не будут проиндексированы. Рассмотрите использование приложения для компьютера для более быстрой индексации. Результаты будут автоматически синхронизированы."), + "mobileWebDesktop": MessageLookupByLibrary.simpleMessage( + "Смартфон, браузер, компьютер"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Средняя"), "modifyYourQueryOrTrySearchingFor": MessageLookupByLibrary.simpleMessage( - "Измените свой запрос или попробуйте поискать"), - "moments": MessageLookupByLibrary.simpleMessage("Мгновения"), + "Измените запрос или попробуйте поискать"), + "moments": MessageLookupByLibrary.simpleMessage("Моменты"), "month": MessageLookupByLibrary.simpleMessage("месяц"), "monthly": MessageLookupByLibrary.simpleMessage("Ежемесячно"), + "moon": MessageLookupByLibrary.simpleMessage("В лунном свете"), "moreDetails": MessageLookupByLibrary.simpleMessage("Подробнее"), - "mostRecent": MessageLookupByLibrary.simpleMessage("Недавние"), + "mostRecent": MessageLookupByLibrary.simpleMessage("Самые последние"), "mostRelevant": - MessageLookupByLibrary.simpleMessage("Сначала актуальные"), - "moveItem": m54, + MessageLookupByLibrary.simpleMessage("Самые актуальные"), + "mountains": MessageLookupByLibrary.simpleMessage("За холмами"), + "moveItem": m49, + "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage( + "Переместите выбранные фото на одну дату"), "moveToAlbum": MessageLookupByLibrary.simpleMessage("Переместить в альбом"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage( "Переместить в скрытый альбом"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("Перемещено в корзину"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( "Перемещение файлов в альбом..."), "name": MessageLookupByLibrary.simpleMessage("Имя"), - "nameTheAlbum": MessageLookupByLibrary.simpleMessage("Назовите альбом"), + "nameTheAlbum": + MessageLookupByLibrary.simpleMessage("Дайте название альбому"), "networkConnectionRefusedErr": MessageLookupByLibrary.simpleMessage( - "Не удается подключиться к Ente, пожалуйста, повторите попытку через некоторое время. Если ошибка не устраняется, обратитесь в службу поддержки."), + "Не удалось подключиться к Ente. Повторите попытку через некоторое время. Если ошибка сохраняется, обратитесь в поддержку."), "networkHostLookUpErr": MessageLookupByLibrary.simpleMessage( - "Не удается подключиться к Ente, пожалуйста, проверьте настройки своей сети и обратитесь в службу поддержки, если ошибка повторится."), + "Не удалось подключиться к Ente. Проверьте настройки сети и обратитесь в поддержку, если ошибка сохраняется."), "never": MessageLookupByLibrary.simpleMessage("Никогда"), "newAlbum": MessageLookupByLibrary.simpleMessage("Новый альбом"), "newLocation": MessageLookupByLibrary.simpleMessage("Новое местоположение"), - "newPerson": MessageLookupByLibrary.simpleMessage("Новое лицо"), + "newPerson": MessageLookupByLibrary.simpleMessage("Новый человек"), + "newRange": MessageLookupByLibrary.simpleMessage("Новый диапазон"), "newToEnte": MessageLookupByLibrary.simpleMessage("Впервые в Ente"), - "newest": MessageLookupByLibrary.simpleMessage("Самые новые"), + "newest": MessageLookupByLibrary.simpleMessage("Недавние"), "next": MessageLookupByLibrary.simpleMessage("Далее"), "no": MessageLookupByLibrary.simpleMessage("Нет"), - "noAlbumsSharedByYouYet": - MessageLookupByLibrary.simpleMessage("У вас пока нет альбомов"), + "noAlbumsSharedByYouYet": MessageLookupByLibrary.simpleMessage( + "Вы пока не делились альбомами"), "noDeviceFound": MessageLookupByLibrary.simpleMessage("Устройства не обнаружены"), - "noDeviceLimit": - MessageLookupByLibrary.simpleMessage("Нет ограничений"), + "noDeviceLimit": MessageLookupByLibrary.simpleMessage("Нет"), "noDeviceThatCanBeDeleted": MessageLookupByLibrary.simpleMessage( - "У вас нет файлов на этом устройстве, которые могут быть удалены"), + "На этом устройстве нет файлов, которые можно удалить"), "noDuplicates": MessageLookupByLibrary.simpleMessage("✨ Дубликатов нет"), + "noEnteAccountExclamation": + MessageLookupByLibrary.simpleMessage("Нет аккаунта Ente!"), "noExifData": MessageLookupByLibrary.simpleMessage("Нет данных EXIF"), "noFacesFound": MessageLookupByLibrary.simpleMessage("Лица не найдены"), "noHiddenPhotosOrVideos": MessageLookupByLibrary.simpleMessage("Нет скрытых фото или видео"), - "noImagesWithLocation": MessageLookupByLibrary.simpleMessage( - "Нет изображений с местоположением"), + "noImagesWithLocation": + MessageLookupByLibrary.simpleMessage("Нет фото с местоположением"), "noInternetConnection": MessageLookupByLibrary.simpleMessage("Нет подключения к Интернету"), "noPhotosAreBeingBackedUpRightNow": MessageLookupByLibrary.simpleMessage( - "На данный момент резервных копий нет"), + "В данный момент фото не копируются"), "noPhotosFoundHere": - MessageLookupByLibrary.simpleMessage("Здесь нет фотографий"), + MessageLookupByLibrary.simpleMessage("Здесь фото не найдены"), "noQuickLinksSelected": - MessageLookupByLibrary.simpleMessage("Не выбрано быстрых ссылок"), + MessageLookupByLibrary.simpleMessage("Быстрые ссылки не выбраны"), "noRecoveryKey": MessageLookupByLibrary.simpleMessage("Нет ключа восстановления?"), "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( - "Из-за природы нашего сквозного протокола шифрования ваши данные не могут быть расшифрованы без вашего пароля или ключа восстановления"), - "noResults": MessageLookupByLibrary.simpleMessage("Ничего не найденo"), + "Из-за особенностей нашего протокола сквозного шифрования ваши данные не могут быть расшифрованы без пароля или ключа восстановления"), + "noResults": MessageLookupByLibrary.simpleMessage("Нет результатов"), "noResultsFound": - MessageLookupByLibrary.simpleMessage("Ничего не найдено"), - "noSuggestionsForPerson": m56, + MessageLookupByLibrary.simpleMessage("Нет результатов"), + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage( "Системная блокировка не найдена"), - "notPersonLabel": m57, + "notPersonLabel": m52, + "notThisPerson": + MessageLookupByLibrary.simpleMessage("Не этот человек?"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( - "Пока никто не поделился с вами"), + "С вами пока ничем не поделились"), "nothingToSeeHere": - MessageLookupByLibrary.simpleMessage("Здесь нечего смотреть! 👀"), + MessageLookupByLibrary.simpleMessage("Здесь ничего нет! 👀"), "notifications": MessageLookupByLibrary.simpleMessage("Уведомления"), "ok": MessageLookupByLibrary.simpleMessage("Хорошо"), "onDevice": MessageLookupByLibrary.simpleMessage("На устройстве"), "onEnte": MessageLookupByLibrary.simpleMessage("В ente"), - "onlyThem": MessageLookupByLibrary.simpleMessage("Только их"), + "onTheRoad": MessageLookupByLibrary.simpleMessage("Снова в пути"), + "onlyFamilyAdminCanChangeCode": m53, + "onlyThem": MessageLookupByLibrary.simpleMessage("Только он(а)"), "oops": MessageLookupByLibrary.simpleMessage("Ой"), "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( - "К сожалению, изменения не сохранены"), + "Ой, не удалось сохранить изменения"), "oopsSomethingWentWrong": - MessageLookupByLibrary.simpleMessage("Ой! Что-то пошло не так"), + MessageLookupByLibrary.simpleMessage("Ой, что-то пошло не так"), "openAlbumInBrowser": MessageLookupByLibrary.simpleMessage("Открыть альбом в браузере"), "openAlbumInBrowserTitle": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, используйте веб-приложение, чтобы добавить фотографии в этот альбом"), + "Пожалуйста, используйте веб-версию, чтобы добавить фото в этот альбом"), "openFile": MessageLookupByLibrary.simpleMessage("Открыть файл"), "openSettings": MessageLookupByLibrary.simpleMessage("Открыть настройки"), "openTheItem": - MessageLookupByLibrary.simpleMessage("• Открыть элемент"), + MessageLookupByLibrary.simpleMessage("• Откройте элемент"), "openstreetmapContributors": - MessageLookupByLibrary.simpleMessage("Авторы OpenStreetMap"), + MessageLookupByLibrary.simpleMessage("Участники OpenStreetMap"), "optionalAsShortAsYouLike": MessageLookupByLibrary.simpleMessage( - "Необязательно, как вам нравится..."), + "Необязательно, насколько коротко пожелаете..."), "orMergeWithExistingPerson": MessageLookupByLibrary.simpleMessage( - "Или объединить с существующими"), - "orPickAnExistingOne": MessageLookupByLibrary.simpleMessage( - "Или выберите уже существующий"), - "pair": MessageLookupByLibrary.simpleMessage("Спарить"), - "pairWithPin": MessageLookupByLibrary.simpleMessage("Соединить с PIN"), + "Или объединить с существующим"), + "orPickAnExistingOne": + MessageLookupByLibrary.simpleMessage("Или выберите существующую"), + "orPickFromYourContacts": MessageLookupByLibrary.simpleMessage( + "или выберите из ваших контактов"), + "pair": MessageLookupByLibrary.simpleMessage("Подключить"), + "pairWithPin": MessageLookupByLibrary.simpleMessage("Подключить с PIN"), "pairingComplete": - MessageLookupByLibrary.simpleMessage("Сопряжение завершено"), + MessageLookupByLibrary.simpleMessage("Подключение завершено"), "panorama": MessageLookupByLibrary.simpleMessage("Панорама"), - "passKeyPendingVerification": MessageLookupByLibrary.simpleMessage( - "Верификация еще не завершена"), - "passkey": MessageLookupByLibrary.simpleMessage("Ключ"), + "partyWithThem": m54, + "passKeyPendingVerification": + MessageLookupByLibrary.simpleMessage("Проверка всё ещё ожидается"), + "passkey": MessageLookupByLibrary.simpleMessage("Ключ доступа"), "passkeyAuthTitle": - MessageLookupByLibrary.simpleMessage("Проверка с помощью ключа"), + MessageLookupByLibrary.simpleMessage("Проверка ключа доступа"), "password": MessageLookupByLibrary.simpleMessage("Пароль"), "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage("Пароль успешно изменён"), - "passwordLock": - MessageLookupByLibrary.simpleMessage("Блокировка паролем"), - "passwordStrength": m0, + "passwordLock": MessageLookupByLibrary.simpleMessage("Защита паролем"), + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( - "Надежность пароля рассчитывается с учетом длины пароля, используемых символов, и появлением пароля в 10 000 наиболее используемых"), + "Надёжность пароля определяется его длиной, используемыми символами и присутствием среди 10000 самых популярных паролей"), "passwordWarning": MessageLookupByLibrary.simpleMessage( - "Мы не храним этот пароль, поэтому если вы забудете его, мы не сможем расшифровать ваши данные"), + "Мы не храним этот пароль, поэтому, если вы его забудете, мы не сможем расшифровать ваши данные"), "paymentDetails": - MessageLookupByLibrary.simpleMessage("Детали платежа"), - "paymentFailed": MessageLookupByLibrary.simpleMessage("Сбой платежа"), + MessageLookupByLibrary.simpleMessage("Платёжные данные"), + "paymentFailed": + MessageLookupByLibrary.simpleMessage("Платёж не удался"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( - "К сожалению, ваш платеж не был выполнен. Пожалуйста, свяжитесь со службой поддержки, и мы вам поможем!"), - "paymentFailedTalkToProvider": m60, + "К сожалению, ваш платёж не удался. Пожалуйста, свяжитесь с поддержкой, и мы вам поможем!"), + "paymentFailedTalkToProvider": m56, "pendingItems": - MessageLookupByLibrary.simpleMessage("Отложенные элементы"), + MessageLookupByLibrary.simpleMessage("Элементы в очереди"), "pendingSync": MessageLookupByLibrary.simpleMessage("Ожидание синхронизации"), "people": MessageLookupByLibrary.simpleMessage("Люди"), "peopleUsingYourCode": - MessageLookupByLibrary.simpleMessage("Люди использующие ваш код"), + MessageLookupByLibrary.simpleMessage("Люди, использующие ваш код"), "permDeleteWarning": MessageLookupByLibrary.simpleMessage( - "Все элементы в корзине будут удалены навсегда\n\nЭто действие не может быть отменено"), + "Все элементы в корзине будут удалены навсегда\n\nЭто действие нельзя отменить"), "permanentlyDelete": MessageLookupByLibrary.simpleMessage("Удалить безвозвратно"), "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( - "Удалить с устройства навсегда?"), + "Удалить с устройства безвозвратно?"), + "personIsAge": m57, "personName": MessageLookupByLibrary.simpleMessage("Имя человека"), + "personTurningAge": m58, + "pets": MessageLookupByLibrary.simpleMessage("Пушистые спутники"), "photoDescriptions": - MessageLookupByLibrary.simpleMessage("Описание фотографии"), + MessageLookupByLibrary.simpleMessage("Описания фото"), "photoGridSize": - MessageLookupByLibrary.simpleMessage("Размер сетки фотографий"), + MessageLookupByLibrary.simpleMessage("Размер сетки фото"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("фото"), - "photos": MessageLookupByLibrary.simpleMessage("Фотографии"), + "photocountPhotos": m59, + "photos": MessageLookupByLibrary.simpleMessage("Фото"), "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( - "Добавленные вами фотографии будут удалены из альбома"), - "photosCount": m64, + "Добавленные вами фото будут удалены из альбома"), + "photosCount": m60, + "photosKeepRelativeTimeDifference": + MessageLookupByLibrary.simpleMessage( + "Фото сохранят относительную разницу во времени"), "pickCenterPoint": - MessageLookupByLibrary.simpleMessage("Указать центральную точку"), + MessageLookupByLibrary.simpleMessage("Выбрать центральную точку"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Закрепить альбом"), "pinLock": MessageLookupByLibrary.simpleMessage("Блокировка PIN-кодом"), "playOnTv": MessageLookupByLibrary.simpleMessage("Воспроизвести альбом на ТВ"), - "playStoreFreeTrialValidTill": m65, + "playOriginal": + MessageLookupByLibrary.simpleMessage("Воспроизвести оригинал"), + "playStoreFreeTrialValidTill": m61, + "playStream": + MessageLookupByLibrary.simpleMessage("Воспроизвести поток"), "playstoreSubscription": - MessageLookupByLibrary.simpleMessage("Подписка на PlayStore"), + MessageLookupByLibrary.simpleMessage("Подписка PlayStore"), "pleaseCheckYourInternetConnectionAndTryAgain": MessageLookupByLibrary.simpleMessage( - "Проверьте подключение к Интернету и повторите попытку."), + "Пожалуйста, проверьте подключение к Интернету и попробуйте снова."), "pleaseContactSupportAndWeWillBeHappyToHelp": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, свяжитесь с support@ente.io и мы Вам поможем!"), + "Пожалуйста, свяжитесь с support@ente.io, и мы будем рады помочь!"), "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( - "Если проблема не устранена, обратитесь в службу поддержки"), - "pleaseEmailUsAt": m66, - "pleaseGrantPermissions": - MessageLookupByLibrary.simpleMessage("Предоставьте разрешение"), + "Пожалуйста, обратитесь в поддержку, если проблема сохраняется"), + "pleaseEmailUsAt": m62, + "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( + "Пожалуйста, предоставьте разрешения"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Пожалуйста, войдите снова"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Пожалуйста, выберите быстрые ссылки для удаления"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, попробуйте ещё раз"), + "Пожалуйста, попробуйте снова"), "pleaseVerifyTheCodeYouHaveEntered": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, подтвердите введенный код"), + "Пожалуйста, проверьте введённый вами код"), "pleaseWait": MessageLookupByLibrary.simpleMessage("Пожалуйста, подождите..."), "pleaseWaitDeletingAlbum": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, подождите. Удаление альбома"), + "Пожалуйста, подождите, альбом удаляется"), "pleaseWaitForSometimeBeforeRetrying": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, подождите немного перед повторной попыткой"), + "Пожалуйста, подождите некоторое время перед повторной попыткой"), + "pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage( + "Пожалуйста, подождите, это займёт некоторое время."), + "posingWithThem": m64, "preparingLogs": MessageLookupByLibrary.simpleMessage("Подготовка логов..."), "preserveMore": @@ -1328,94 +1546,115 @@ class MessageLookup extends MessageLookupByLibrary { "pressAndHoldToPlayVideo": MessageLookupByLibrary.simpleMessage( "Нажмите и удерживайте для воспроизведения видео"), "pressAndHoldToPlayVideoDetailed": MessageLookupByLibrary.simpleMessage( - "Нажмите и удерживайте изображение для воспроизведения видео"), + "Нажмите с удержанием на изображение для воспроизведения видео"), + "previous": MessageLookupByLibrary.simpleMessage("Предыдущий"), "privacy": MessageLookupByLibrary.simpleMessage("Конфиденциальность"), "privacyPolicyTitle": MessageLookupByLibrary.simpleMessage("Политика конфиденциальности"), "privateBackups": - MessageLookupByLibrary.simpleMessage("Приватные резервные копии"), - "privateSharing": MessageLookupByLibrary.simpleMessage("Личный доступ"), - "processingImport": m69, + MessageLookupByLibrary.simpleMessage("Защищённые резервные копии"), + "privateSharing": + MessageLookupByLibrary.simpleMessage("Защищённый обмен"), + "proceed": MessageLookupByLibrary.simpleMessage("Продолжить"), + "processed": MessageLookupByLibrary.simpleMessage("Обработано"), + "processing": MessageLookupByLibrary.simpleMessage("Обработка"), + "processingImport": m65, + "processingVideos": + MessageLookupByLibrary.simpleMessage("Обработка видео"), "publicLinkCreated": MessageLookupByLibrary.simpleMessage("Публичная ссылка создана"), "publicLinkEnabled": MessageLookupByLibrary.simpleMessage("Публичная ссылка включена"), - "quickLinks": MessageLookupByLibrary.simpleMessage("Ссылки"), + "queued": MessageLookupByLibrary.simpleMessage("В очереди"), + "quickLinks": MessageLookupByLibrary.simpleMessage("Быстрые ссылки"), "radius": MessageLookupByLibrary.simpleMessage("Радиус"), - "raiseTicket": MessageLookupByLibrary.simpleMessage("Подать заявку"), + "raiseTicket": MessageLookupByLibrary.simpleMessage("Создать запрос"), "rateTheApp": MessageLookupByLibrary.simpleMessage("Оценить приложение"), "rateUs": MessageLookupByLibrary.simpleMessage("Оцените нас"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, + "reassignMe": + MessageLookupByLibrary.simpleMessage("Переназначить \"Меня\""), + "reassignedToName": m67, + "reassigningLoading": + MessageLookupByLibrary.simpleMessage("Переназначение..."), "recover": MessageLookupByLibrary.simpleMessage("Восстановить"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Восстановить аккаунт"), "recoverButton": MessageLookupByLibrary.simpleMessage("Восстановить"), + "recoveryAccount": + MessageLookupByLibrary.simpleMessage("Восстановить аккаунт"), "recoveryInitiated": - MessageLookupByLibrary.simpleMessage("Восстановление запущено"), + MessageLookupByLibrary.simpleMessage("Восстановление начато"), + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Ключ восстановления"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( "Ключ восстановления скопирован в буфер обмена"), "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( - "Если вы забыли свой пароль, то восстановить данные можно только с помощью этого ключа."), + "Если вы забудете пароль, единственный способ восстановить ваши данные — это использовать этот ключ."), "recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage( - "Мы не храним этот ключ, пожалуйста, сохраните этот ключ в безопасном месте."), + "Мы не храним этот ключ. Пожалуйста, сохраните этот ключ из 24 слов в безопасном месте."), "recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage( "Отлично! Ваш ключ восстановления действителен. Спасибо за проверку.\n\nПожалуйста, не забудьте сохранить ключ восстановления в безопасном месте."), "recoveryKeyVerified": MessageLookupByLibrary.simpleMessage( - "Ключ восстановления подтвержден"), - "recoverySuccessful": MessageLookupByLibrary.simpleMessage( - "Восстановление прошло успешно!"), + "Ключ восстановления подтверждён"), + "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( + "Ваш ключ восстановления — единственный способ восстановить ваши фото, если вы забудете пароль. Вы можете найти ключ восстановления в разделе «Настройки» → «Аккаунт».\n\nПожалуйста, введите ваш ключ восстановления здесь, чтобы убедиться, что вы сохранили его правильно."), + "recoveryReady": m69, + "recoverySuccessful": + MessageLookupByLibrary.simpleMessage("Успешное восстановление!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( - "Доверенный контакт пытается получить доступ к вашей учетной записи"), + "Доверенный контакт пытается получить доступ к вашему аккаунту"), + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( - "Текущее устройство недостаточно мощно для верификации пароля, но мы можем восстановить так, как это работает со всеми устройствами.\n\nПожалуйста, войдите, используя ваш ключ восстановления и сгенерируйте ваш пароль (вы можете использовать тот же пароль, если пожелаете)."), + "Текущее устройство недостаточно мощное для проверки вашего пароля, но мы можем сгенерировать его снова так, чтобы он работал на всех устройствах.\n\nПожалуйста, войдите, используя ваш ключ восстановления, и сгенерируйте пароль (при желании вы можете использовать тот же самый)."), "recreatePasswordTitle": - MessageLookupByLibrary.simpleMessage("Сбросить пароль"), + MessageLookupByLibrary.simpleMessage("Пересоздать пароль"), "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), "reenterPassword": MessageLookupByLibrary.simpleMessage("Подтвердите пароль"), "reenterPin": MessageLookupByLibrary.simpleMessage("Введите PIN-код ещё раз"), "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( - "Пригласите друзей и удвойте свой план"), + "Пригласите друзей и удвойте свой тариф"), "referralStep1": MessageLookupByLibrary.simpleMessage( - "1. Дайте этот код своим друзьям"), + "1. Даёте этот код своим друзьям"), "referralStep2": MessageLookupByLibrary.simpleMessage( - "2. Они подписываются на платный план"), - "referralStep3": m75, + "2. Они подписываются на платный тариф"), + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Рефералы"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( - "Рефералы в настоящее время приостановлены"), + "Реферальная программа временно приостановлена"), "rejectRecovery": MessageLookupByLibrary.simpleMessage("Отклонить восстановление"), "remindToEmptyDeviceTrash": MessageLookupByLibrary.simpleMessage( - "Также очистите \"Недавно удалённые\" из \"Настройки\" -> \"Хранилище\", чтобы получить больше свободного места"), + "Также очистите «Недавно удалённые» в «Настройки» → «Хранилище», чтобы освободить место"), "remindToEmptyEnteTrash": MessageLookupByLibrary.simpleMessage( - "Также очистите корзину для освобождения места"), + "Также очистите «Корзину», чтобы освободить место"), "remoteImages": - MessageLookupByLibrary.simpleMessage("Удалённые изображения"), + MessageLookupByLibrary.simpleMessage("Изображения вне устройства"), "remoteThumbnails": - MessageLookupByLibrary.simpleMessage("Удалённые миниатюры"), - "remoteVideos": MessageLookupByLibrary.simpleMessage("Удалённые видео"), - "remove": MessageLookupByLibrary.simpleMessage("Убрать"), + MessageLookupByLibrary.simpleMessage("Миниатюры вне устройства"), + "remoteVideos": + MessageLookupByLibrary.simpleMessage("Видео вне устройства"), + "remove": MessageLookupByLibrary.simpleMessage("Удалить"), "removeDuplicates": - MessageLookupByLibrary.simpleMessage("Удаление дубликатов"), + MessageLookupByLibrary.simpleMessage("Удалить дубликаты"), "removeDuplicatesDesc": MessageLookupByLibrary.simpleMessage( - "Просмотрите и удалите точные дубликаты."), + "Проверьте и удалите файлы, которые являются точными дубликатами."), "removeFromAlbum": MessageLookupByLibrary.simpleMessage("Удалить из альбома"), "removeFromAlbumTitle": MessageLookupByLibrary.simpleMessage("Удалить из альбома?"), "removeFromFavorite": - MessageLookupByLibrary.simpleMessage("Удалить из избранного"), + MessageLookupByLibrary.simpleMessage("Убрать из избранного"), "removeInvite": MessageLookupByLibrary.simpleMessage("Удалить приглашение"), "removeLink": MessageLookupByLibrary.simpleMessage("Удалить ссылку"), "removeParticipant": - MessageLookupByLibrary.simpleMessage("Исключить участника"), - "removeParticipantBody": m76, + MessageLookupByLibrary.simpleMessage("Удалить участника"), + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Удалить метку человека"), "removePublicLink": @@ -1423,11 +1662,11 @@ class MessageLookup extends MessageLookupByLibrary { "removePublicLinks": MessageLookupByLibrary.simpleMessage("Удалить публичные ссылки"), "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( - "Некоторые элементы, которые вы удаляете, были добавлены другими людьми, и вы потеряете к ним доступ"), + "Некоторые из удаляемых вами элементов были добавлены другими людьми, и вы потеряете к ним доступ"), "removeWithQuestionMark": MessageLookupByLibrary.simpleMessage("Удалить?"), "removeYourselfAsTrustedContact": MessageLookupByLibrary.simpleMessage( - "Удалить себя как доверенный контакт"), + "Удалить себя из доверенных контактов"), "removingFromFavorites": MessageLookupByLibrary.simpleMessage("Удаление из избранного..."), "rename": MessageLookupByLibrary.simpleMessage("Переименовать"), @@ -1437,39 +1676,43 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Переименовать файл"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Продлить подписку"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Сообщить об ошибке"), "reportBug": MessageLookupByLibrary.simpleMessage("Сообщить об ошибке"), "resendEmail": - MessageLookupByLibrary.simpleMessage("Отправить письмо еще раз"), + MessageLookupByLibrary.simpleMessage("Отправить письмо повторно"), "resetIgnoredFiles": MessageLookupByLibrary.simpleMessage("Сбросить игнорируемые файлы"), "resetPasswordTitle": MessageLookupByLibrary.simpleMessage("Сбросить пароль"), - "resetPerson": MessageLookupByLibrary.simpleMessage("Убрать"), + "resetPerson": MessageLookupByLibrary.simpleMessage("Удалить"), "resetToDefault": - MessageLookupByLibrary.simpleMessage("Сброс по умолчанию"), + MessageLookupByLibrary.simpleMessage("Вернуть стандартную"), "restore": MessageLookupByLibrary.simpleMessage("Восстановить"), "restoreToAlbum": - MessageLookupByLibrary.simpleMessage("Восстановить в альбоме"), + MessageLookupByLibrary.simpleMessage("Восстановить в альбом"), "restoringFiles": MessageLookupByLibrary.simpleMessage("Восстановление файлов..."), - "resumableUploads": MessageLookupByLibrary.simpleMessage( - "Поддержка дозагрузки файл(а/ов) при разрыве связи"), + "resumableUploads": + MessageLookupByLibrary.simpleMessage("Возобновляемые загрузки"), "retry": MessageLookupByLibrary.simpleMessage("Повторить"), - "review": MessageLookupByLibrary.simpleMessage("Отзыв"), + "review": MessageLookupByLibrary.simpleMessage("Предложения"), "reviewDeduplicateItems": MessageLookupByLibrary.simpleMessage( - "Пожалуйста, проверьте и удалите те элементы, которые вы считаете что это дубликаты."), + "Пожалуйста, проверьте и удалите элементы, которые считаете дубликатами."), "reviewSuggestions": MessageLookupByLibrary.simpleMessage("Посмотреть предложения"), "right": MessageLookupByLibrary.simpleMessage("Вправо"), + "roadtripWithThem": m74, "rotate": MessageLookupByLibrary.simpleMessage("Повернуть"), "rotateLeft": MessageLookupByLibrary.simpleMessage("Повернуть влево"), "rotateRight": MessageLookupByLibrary.simpleMessage("Повернуть вправо"), "safelyStored": - MessageLookupByLibrary.simpleMessage("Безопасное хранение"), + MessageLookupByLibrary.simpleMessage("Надёжно сохранены"), "save": MessageLookupByLibrary.simpleMessage("Сохранить"), + "saveChangesBeforeLeavingQuestion": + MessageLookupByLibrary.simpleMessage( + "Сохранить изменения перед выходом?"), "saveCollage": MessageLookupByLibrary.simpleMessage("Сохранить коллаж"), "saveCopy": MessageLookupByLibrary.simpleMessage("Сохранить копию"), "saveKey": MessageLookupByLibrary.simpleMessage("Сохранить ключ"), @@ -1477,77 +1720,99 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Сохранить человека"), "saveYourRecoveryKeyIfYouHaventAlready": MessageLookupByLibrary.simpleMessage( - "Сохраните ваш ключ восстановления, если вы еще не сделали этого"), + "Сохраните ваш ключ восстановления, если вы ещё этого не сделали"), "saving": MessageLookupByLibrary.simpleMessage("Сохранение..."), "savingEdits": MessageLookupByLibrary.simpleMessage("Сохранение изменений..."), "scanCode": MessageLookupByLibrary.simpleMessage("Сканировать код"), "scanThisBarcodeWithnyourAuthenticatorApp": MessageLookupByLibrary.simpleMessage( - "Просканируйте этот Qr-код вашим приложением для аутентификации"), + "Отсканируйте этот штрих-код\nс помощью вашего приложения для аутентификации"), "search": MessageLookupByLibrary.simpleMessage("Поиск"), "searchAlbumsEmptySection": MessageLookupByLibrary.simpleMessage("Альбомы"), "searchByAlbumNameHint": MessageLookupByLibrary.simpleMessage("Название альбома"), "searchByExamples": MessageLookupByLibrary.simpleMessage( - "• Названия альбомов («Камера», ...)\n• Типы файлов («Видео», «.gif», ...)\n• Годы и месяцы («2022», «Январь», ...)\n• Праздники («Рождество», ...)\n• Описания фотографий («#fun», ...)"), + "• Названия альбомов (например, «Камера»)\n• Типы файлов (например, «Видео», «.gif»)\n• Годы и месяцы (например, «2022», «Январь»)\n• Праздники (например, «Рождество»)\n• Описания фото (например, «#веселье»)"), "searchCaptionEmptySection": MessageLookupByLibrary.simpleMessage( - "Добавьте описания типа \"#поездка\" в информацию о фото и быстро найдите их здесь"), + "Добавляйте описания вроде «#поездка» в информацию о фото, чтобы быстро находить их здесь"), "searchDatesEmptySection": MessageLookupByLibrary.simpleMessage( - "Поиск по дате, месяцу или году"), + "Ищите по дате, месяцу или году"), + "searchDiscoverEmptySection": MessageLookupByLibrary.simpleMessage( + "Изображения появятся здесь после завершения обработки и синхронизации"), "searchFaceEmptySection": MessageLookupByLibrary.simpleMessage( - "Люди будут показаны здесь, как только будет выполнено индексирование"), + "Люди появятся здесь после завершения индексации"), "searchFileTypesAndNamesEmptySection": - MessageLookupByLibrary.simpleMessage("Типы файлов и имена"), - "searchHint1": - MessageLookupByLibrary.simpleMessage("Быстрый поиск на устройстве"), + MessageLookupByLibrary.simpleMessage("Типы и названия файлов"), + "searchHint1": MessageLookupByLibrary.simpleMessage( + "Быстрый поиск прямо на устройстве"), "searchHint2": MessageLookupByLibrary.simpleMessage("Даты, описания фото"), "searchHint3": MessageLookupByLibrary.simpleMessage( "Альбомы, названия и типы файлов"), "searchHint4": MessageLookupByLibrary.simpleMessage("Местоположение"), "searchHint5": MessageLookupByLibrary.simpleMessage( - "Скоро: Лица & магический поиск ✨"), + "Скоро: Лица и магический поиск ✨"), "searchLocationEmptySection": MessageLookupByLibrary.simpleMessage( - "Групповые фотографии, сделанные в некотором радиусе от фотографии"), + "Группируйте фото, снятые в определённом радиусе от фото"), "searchPeopleEmptySection": MessageLookupByLibrary.simpleMessage( - "Пригласите людей, и вы увидите все фотографии, которыми они поделились здесь"), - "searchResultCount": m79, + "Приглашайте людей, и здесь появятся все фото, которыми они поделились"), + "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( + "Люди появятся здесь после завершения обработки и синхронизации"), + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Безопасность"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( - "Смотреть ссылки публичного альбома в приложении"), + "Просматривать публичные ссылки на альбомы в приложении"), "selectALocation": - MessageLookupByLibrary.simpleMessage("Выбрать место"), - "selectALocationFirst": - MessageLookupByLibrary.simpleMessage("Сначала выберите место"), + MessageLookupByLibrary.simpleMessage("Выбрать местоположение"), + "selectALocationFirst": MessageLookupByLibrary.simpleMessage( + "Сначала выберите местоположение"), "selectAlbum": MessageLookupByLibrary.simpleMessage("Выбрать альбом"), "selectAll": MessageLookupByLibrary.simpleMessage("Выбрать все"), "selectAllShort": MessageLookupByLibrary.simpleMessage("Все"), "selectCoverPhoto": MessageLookupByLibrary.simpleMessage("Выберите обложку"), + "selectDate": MessageLookupByLibrary.simpleMessage("Выбрать дату"), "selectFoldersForBackup": MessageLookupByLibrary.simpleMessage( "Выберите папки для резервного копирования"), "selectItemsToAdd": MessageLookupByLibrary.simpleMessage( - "Выберите предметы для добавления"), + "Выберите элементы для добавления"), "selectLanguage": MessageLookupByLibrary.simpleMessage("Выбрать язык"), - "selectMailApp": - MessageLookupByLibrary.simpleMessage("Выберите приложение почты"), + "selectMailApp": MessageLookupByLibrary.simpleMessage( + "Выберите почтовое приложение"), "selectMorePhotos": - MessageLookupByLibrary.simpleMessage("Выбрать больше фотографий"), + MessageLookupByLibrary.simpleMessage("Выбрать больше фото"), + "selectOneDateAndTime": + MessageLookupByLibrary.simpleMessage("Выбрать одну дату и время"), + "selectOneDateAndTimeForAll": MessageLookupByLibrary.simpleMessage( + "Выберите одну дату и время для всех"), + "selectPersonToLink": MessageLookupByLibrary.simpleMessage( + "Выберите человека для привязки"), "selectReason": MessageLookupByLibrary.simpleMessage("Выберите причину"), - "selectYourPlan": MessageLookupByLibrary.simpleMessage("Выберете план"), - "selectedFilesAreNotOnEnte": - MessageLookupByLibrary.simpleMessage("Выбранные файлы не на Ente"), + "selectStartOfRange": + MessageLookupByLibrary.simpleMessage("Выберите начало диапазона"), + "selectTime": MessageLookupByLibrary.simpleMessage("Выбрать время"), + "selectYourFace": + MessageLookupByLibrary.simpleMessage("Выберите своё лицо"), + "selectYourPlan": + MessageLookupByLibrary.simpleMessage("Выберите тариф"), + "selectedFilesAreNotOnEnte": MessageLookupByLibrary.simpleMessage( + "Выбранные файлы отсутствуют в Ente"), "selectedFoldersWillBeEncryptedAndBackedUp": MessageLookupByLibrary.simpleMessage( "Выбранные папки будут зашифрованы и сохранены в резервной копии"), "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Выбранные элементы будут удалены из всех альбомов и перемещены в корзину."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, + "selectedItemsWillBeRemovedFromThisPerson": + MessageLookupByLibrary.simpleMessage( + "Выбранные элементы будут отвязаны от этого человека, но не удалены из вашей библиотеки."), + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "selfiesWithThem": m79, "send": MessageLookupByLibrary.simpleMessage("Отправить"), "sendEmail": MessageLookupByLibrary.simpleMessage( "Отправить электронное письмо"), @@ -1557,88 +1822,90 @@ class MessageLookup extends MessageLookupByLibrary { "serverEndpoint": MessageLookupByLibrary.simpleMessage("Конечная точка сервера"), "sessionExpired": - MessageLookupByLibrary.simpleMessage("Сессия недействительная"), + MessageLookupByLibrary.simpleMessage("Сессия истекла"), "sessionIdMismatch": - MessageLookupByLibrary.simpleMessage("Несоответствие ID сеанса"), + MessageLookupByLibrary.simpleMessage("Несоответствие ID сессии"), "setAPassword": MessageLookupByLibrary.simpleMessage("Установить пароль"), "setAs": MessageLookupByLibrary.simpleMessage("Установить как"), "setCover": MessageLookupByLibrary.simpleMessage("Установить обложку"), "setLabel": MessageLookupByLibrary.simpleMessage("Установить"), "setNewPassword": - MessageLookupByLibrary.simpleMessage("Задать новый пароль"), + MessageLookupByLibrary.simpleMessage("Установить новый пароль"), "setNewPin": - MessageLookupByLibrary.simpleMessage("Установите новый PIN"), + MessageLookupByLibrary.simpleMessage("Установите новый PIN-код"), "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Установить пароль"), "setRadius": MessageLookupByLibrary.simpleMessage("Установить радиус"), "setupComplete": - MessageLookupByLibrary.simpleMessage("Установка завершена"), + MessageLookupByLibrary.simpleMessage("Настройка завершена"), "share": MessageLookupByLibrary.simpleMessage("Поделиться"), "shareALink": MessageLookupByLibrary.simpleMessage("Поделиться ссылкой"), "shareAlbumHint": MessageLookupByLibrary.simpleMessage( - "Откройте альбом и нажмите кнопку \"Поделиться\" в правом верхнем углу экрана."), + "Откройте альбом и нажмите кнопку «Поделиться» в правом верхнем углу, чтобы поделиться."), "shareAnAlbumNow": - MessageLookupByLibrary.simpleMessage("Поделиться альбомом сейчас"), + MessageLookupByLibrary.simpleMessage("Поделиться альбомом"), "shareLink": MessageLookupByLibrary.simpleMessage("Поделиться ссылкой"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( - "Поделитесь только с теми людьми, с которыми вы хотите"), - "shareTextConfirmOthersVerificationID": m7, + "Делитесь только с теми, с кем хотите"), + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( - "Скачай Ente, чтобы мы могли легко поделиться фотографиями и видео без сжатия\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "Скачай Ente, чтобы мы могли легко делиться фото и видео в оригинальном качестве\n\nhttps://ente.io"), + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( - "Поделится с пользователями без Ente"), - "shareWithPeopleSectionTitle": m85, - "shareYourFirstAlbum": - MessageLookupByLibrary.simpleMessage("Поделиться первым альбомом"), + "Поделиться с пользователями, не использующими Ente"), + "shareWithPeopleSectionTitle": m83, + "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage( + "Поделитесь своим первым альбомом"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( - "Создавайте общие и совместные альбомы с другими пользователями Ente, в том числе с пользователями бесплатных планов."), - "sharedByMe": MessageLookupByLibrary.simpleMessage("Поделился мной"), - "sharedByYou": MessageLookupByLibrary.simpleMessage("Поделились вами"), + "Создавайте общие и совместные альбомы с другими пользователями Ente, включая пользователей на бесплатных тарифах."), + "sharedByMe": MessageLookupByLibrary.simpleMessage("Я поделился"), + "sharedByYou": MessageLookupByLibrary.simpleMessage("Вы поделились"), "sharedPhotoNotifications": - MessageLookupByLibrary.simpleMessage("Новые общие фотографии"), + MessageLookupByLibrary.simpleMessage("Новые общие фото"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Получать уведомления, когда кто-то добавляет фото в общий альбом, в котором вы состоите"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": - MessageLookupByLibrary.simpleMessage("Поделиться со мной"), + MessageLookupByLibrary.simpleMessage("Со мной поделились"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("Поделились с вами"), "sharing": MessageLookupByLibrary.simpleMessage("Отправка..."), + "shiftDatesAndTime": + MessageLookupByLibrary.simpleMessage("Сместить даты и время"), "showMemories": MessageLookupByLibrary.simpleMessage("Показать воспоминания"), "showPerson": MessageLookupByLibrary.simpleMessage("Показать человека"), "signOutFromOtherDevices": - MessageLookupByLibrary.simpleMessage("Выйти из других устройств"), + MessageLookupByLibrary.simpleMessage("Выйти с других устройств"), "signOutOtherBody": MessageLookupByLibrary.simpleMessage( - "Если вы думаете, что кто-то может знать ваш пароль, вы можете принудительно выйти из всех устройств."), + "Если вы считаете, что кто-то может знать ваш пароль, вы можете принудительно выйти с других устройств, использующих ваш аккаунт."), "signOutOtherDevices": - MessageLookupByLibrary.simpleMessage("Выйти из других устройств"), + MessageLookupByLibrary.simpleMessage("Выйти с других устройств"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Я согласен с условиями предоставления услуг и политикой конфиденциальности"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( - "Он будет удален из всех альбомов."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "Оно будет удалено из всех альбомов."), + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Пропустить"), - "social": MessageLookupByLibrary.simpleMessage("Соцсети"), + "social": MessageLookupByLibrary.simpleMessage("Социальные сети"), "someItemsAreInBothEnteAndYourDevice": MessageLookupByLibrary.simpleMessage( - "Некоторые элементы находятся как на Ente, так и в вашем устройстве."), + "Некоторые элементы находятся как в Ente, так и на вашем устройстве."), "someOfTheFilesYouAreTryingToDeleteAre": MessageLookupByLibrary.simpleMessage( - "Некоторые файлы, которые вы пытаетесь удалить, доступны только на вашем устройстве и не могут быть восстановлены при удалении"), + "Некоторые файлы, которые вы пытаетесь удалить, доступны только на вашем устройстве и не могут быть восстановлены после удаления"), "someoneSharingAlbumsWithYouShouldSeeTheSameId": MessageLookupByLibrary.simpleMessage( - "Тот, кто делится альбомами с вами должны видеть такой же идентификатор на их устройстве."), + "Тот, кто делится с вами альбомами, должен видеть такой же идентификатор на своём устройстве."), "somethingWentWrong": MessageLookupByLibrary.simpleMessage("Что-то пошло не так"), "somethingWentWrongPleaseTryAgain": MessageLookupByLibrary.simpleMessage( - "Что-то пошло не так. Попробуйте еще раз"), + "Что-то пошло не так. Пожалуйста, попробуйте снова"), "sorry": MessageLookupByLibrary.simpleMessage("Извините"), "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( "Извините, не удалось добавить в избранное!"), @@ -1647,7 +1914,7 @@ class MessageLookup extends MessageLookupByLibrary { "Извините, не удалось удалить из избранного!"), "sorryTheCodeYouveEnteredIsIncorrect": MessageLookupByLibrary.simpleMessage( - "Извините, введенный вами код неверный"), + "Извините, введённый вами код неверен"), "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": MessageLookupByLibrary.simpleMessage( "К сожалению, мы не смогли сгенерировать безопасные ключи на этом устройстве.\n\nПожалуйста, зарегистрируйтесь с другого устройства."), @@ -1657,121 +1924,147 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Сначала новые"), "sortOldestFirst": MessageLookupByLibrary.simpleMessage("Сначала старые"), - "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Успешно"), + "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Успех"), + "sportsWithThem": m88, + "spotlightOnThem": m89, + "spotlightOnYourself": + MessageLookupByLibrary.simpleMessage("Вы в центре внимания"), + "startAccountRecoveryTitle": + MessageLookupByLibrary.simpleMessage("Начать восстановление"), "startBackup": MessageLookupByLibrary.simpleMessage( "Начать резервное копирование"), "status": MessageLookupByLibrary.simpleMessage("Статус"), "stopCastingBody": MessageLookupByLibrary.simpleMessage( - "Желаете прекратить трансляцию?"), + "Хотите остановить трансляцию?"), "stopCastingTitle": - MessageLookupByLibrary.simpleMessage("Прекратить трансляцию"), + MessageLookupByLibrary.simpleMessage("Остановить трансляцию"), "storage": MessageLookupByLibrary.simpleMessage("Хранилище"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Семья"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Вы"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": - MessageLookupByLibrary.simpleMessage("Превышен предел хранения"), - "storageUsageInfo": m92, - "strongStrength": MessageLookupByLibrary.simpleMessage("Сильный"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + MessageLookupByLibrary.simpleMessage("Превышен лимит хранилища"), + "storageUsageInfo": m91, + "streamDetails": + MessageLookupByLibrary.simpleMessage("Информация о потоке"), + "strongStrength": MessageLookupByLibrary.simpleMessage("Высокая"), + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Подписаться"), + "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( + "Вам нужна активная платная подписка, чтобы включить общий доступ."), "subscription": MessageLookupByLibrary.simpleMessage("Подписка"), - "success": MessageLookupByLibrary.simpleMessage("Успешно"), + "success": MessageLookupByLibrary.simpleMessage("Успех"), "successfullyArchived": MessageLookupByLibrary.simpleMessage("Успешно архивировано"), "successfullyHid": MessageLookupByLibrary.simpleMessage("Успешно скрыто"), "successfullyUnarchived": - MessageLookupByLibrary.simpleMessage("Успешно разархивировано"), + MessageLookupByLibrary.simpleMessage("Успешно извлечено"), "successfullyUnhid": - MessageLookupByLibrary.simpleMessage("Успешно показано"), + MessageLookupByLibrary.simpleMessage("Успешно раскрыто"), "suggestFeatures": MessageLookupByLibrary.simpleMessage("Предложить идею"), + "sunrise": MessageLookupByLibrary.simpleMessage("На горизонте"), "support": MessageLookupByLibrary.simpleMessage("Поддержка"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Синхронизация остановлена"), "syncing": MessageLookupByLibrary.simpleMessage("Синхронизация..."), - "systemTheme": MessageLookupByLibrary.simpleMessage("Система"), + "systemTheme": MessageLookupByLibrary.simpleMessage("Системная"), "tapToCopy": MessageLookupByLibrary.simpleMessage("нажмите, чтобы скопировать"), "tapToEnterCode": MessageLookupByLibrary.simpleMessage("Нажмите, чтобы ввести код"), "tapToUnlock": MessageLookupByLibrary.simpleMessage("Нажмите для разблокировки"), + "tapToUpload": + MessageLookupByLibrary.simpleMessage("Нажмите для загрузки"), + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( - "Похоже, что-то пошло не так. Пожалуйста, повторите попытку через некоторое время. Если ошибка повторится, обратитесь в нашу службу поддержки."), + "Похоже, что-то пошло не так. Пожалуйста, повторите попытку через некоторое время. Если ошибка сохраняется, обратитесь в нашу службу поддержки."), "terminate": MessageLookupByLibrary.simpleMessage("Завершить"), "terminateSession": MessageLookupByLibrary.simpleMessage("Завершить сеанс?"), - "terms": MessageLookupByLibrary.simpleMessage("Условия использования"), + "terms": MessageLookupByLibrary.simpleMessage("Условия"), "termsOfServicesTitle": MessageLookupByLibrary.simpleMessage("Условия использования"), "thankYou": MessageLookupByLibrary.simpleMessage("Спасибо"), "thankYouForSubscribing": MessageLookupByLibrary.simpleMessage("Спасибо за подписку!"), "theDownloadCouldNotBeCompleted": MessageLookupByLibrary.simpleMessage( - "Загрузка не может быть завершена"), + "Скачивание не может быть завершено"), "theLinkYouAreTryingToAccessHasExpired": MessageLookupByLibrary.simpleMessage( - "Ссылка, к которой вы пытаетесь получить доступ, устарела."), + "Срок действия ссылки, к которой вы обращаетесь, истёк."), "theRecoveryKeyYouEnteredIsIncorrect": MessageLookupByLibrary.simpleMessage( - "Введен неправильный ключ восстановления"), + "Введённый вами ключ восстановления неверен"), "theme": MessageLookupByLibrary.simpleMessage("Тема"), "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( - "Эти элементы будут удалено с вашего устройства."), - "theyAlsoGetXGb": m8, + "Эти элементы будут удалены с вашего устройства."), + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( - "Они будут удален из всех альбомов."), + "Они будут удалены из всех альбомов."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( - "Это действие нельзя будет отменить"), + "Это действие нельзя отменить"), "thisAlbumAlreadyHDACollaborativeLink": MessageLookupByLibrary.simpleMessage( "У этого альбома уже есть совместная ссылка"), "thisCanBeUsedToRecoverYourAccountIfYou": MessageLookupByLibrary.simpleMessage( - "Это может быть использовано для восстановления вашей учетной записи, если вы потеряете свой аутентификатор"), + "Это можно использовать для восстановления вашего аккаунта, если вы потеряете свой аутентификатор"), "thisDevice": MessageLookupByLibrary.simpleMessage("Это устройство"), "thisEmailIsAlreadyInUse": MessageLookupByLibrary.simpleMessage( - "Этот адрес электронной почты уже используется"), + "Эта электронная почта уже используется"), "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( - "Это изображение не имеет exif данных"), + "Это фото не имеет данных EXIF"), + "thisIsMeExclamation": MessageLookupByLibrary.simpleMessage("Это я!"), "thisIsPersonVerificationId": m97, "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( "Это ваш идентификатор подтверждения"), + "thisWeekThroughTheYears": + MessageLookupByLibrary.simpleMessage("Эта неделя сквозь годы"), + "thisWeekXYearsAgo": m98, "thisWillLogYouOutOfTheFollowingDevice": MessageLookupByLibrary.simpleMessage( - "Вы выйдете из списка следующих устройств:"), + "Это завершит ваш сеанс на следующем устройстве:"), "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( - "Совершив это действие, Вы выйдете из своей учетной записи!"), + "Это завершит ваш сеанс на этом устройстве!"), + "thisWillMakeTheDateAndTimeOfAllSelected": + MessageLookupByLibrary.simpleMessage( + "Это сделает дату и время всех выбранных фото одинаковыми."), "thisWillRemovePublicLinksOfAllSelectedQuickLinks": MessageLookupByLibrary.simpleMessage( - "Это удалит публичные ссылки на все выбранные быстрые ссылки."), + "Это удалит публичные ссылки всех выбранных быстрых ссылок."), + "throughTheYears": m99, "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": MessageLookupByLibrary.simpleMessage( - "Чтобы включить блокировку, настройте пароль устройства или блокировку экрана в настройках системы."), + "Для блокировки приложения, пожалуйста, настройте код или экран блокировки в настройках устройства."), "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage("Скрыть фото или видео"), "toResetVerifyEmail": MessageLookupByLibrary.simpleMessage( - "Чтобы сбросить пароль, сначала подтвердите свой адрес электронной почты."), + "Чтобы сбросить пароль, сначала подтвердите вашу электронную почту."), "todaysLogs": MessageLookupByLibrary.simpleMessage("Сегодняшние логи"), "tooManyIncorrectAttempts": MessageLookupByLibrary.simpleMessage( "Слишком много неудачных попыток"), "total": MessageLookupByLibrary.simpleMessage("всего"), "totalSize": MessageLookupByLibrary.simpleMessage("Общий размер"), "trash": MessageLookupByLibrary.simpleMessage("Корзина"), + "trashDaysLeft": m100, "trim": MessageLookupByLibrary.simpleMessage("Сократить"), + "tripInYear": m101, + "tripToLocation": m102, "trustedContacts": MessageLookupByLibrary.simpleMessage("Доверенные контакты"), + "trustedInviteBody": m103, "tryAgain": MessageLookupByLibrary.simpleMessage("Попробовать снова"), "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( - "Включите резервное копирование, чтобы автоматически загружать файлы, добавленные в эту папку устройства, в Ente."), + "Включите резервное копирование, чтобы автоматически загружать файлы из этой папки на устройстве в Ente."), "twitter": MessageLookupByLibrary.simpleMessage("Twitter"), "twoMonthsFreeOnYearlyPlans": MessageLookupByLibrary.simpleMessage( - "2 бесплатных месяца при годовом плане"), + "2 месяца в подарок на годовом тарифе"), "twofactor": MessageLookupByLibrary.simpleMessage("Двухфакторная"), "twofactorAuthenticationHasBeenDisabled": MessageLookupByLibrary.simpleMessage( @@ -1782,22 +2075,22 @@ class MessageLookup extends MessageLookupByLibrary { "twofactorAuthenticationSuccessfullyReset": MessageLookupByLibrary.simpleMessage( "Двухфакторная аутентификация успешно сброшена"), - "twofactorSetup": MessageLookupByLibrary.simpleMessage("Вход с 2FA"), + "twofactorSetup": MessageLookupByLibrary.simpleMessage( + "Настройка двухфакторной аутентификации"), "typeOfGallerGallerytypeIsNotSupportedForRename": m104, - "unarchive": MessageLookupByLibrary.simpleMessage("Разархивировать"), + "unarchive": MessageLookupByLibrary.simpleMessage("Извлечь из архива"), "unarchiveAlbum": - MessageLookupByLibrary.simpleMessage("Разархивировать альбом"), - "unarchiving": - MessageLookupByLibrary.simpleMessage("Разархивирование..."), + MessageLookupByLibrary.simpleMessage("Извлечь альбом из архива"), + "unarchiving": MessageLookupByLibrary.simpleMessage("Извлечение..."), "unavailableReferralCode": MessageLookupByLibrary.simpleMessage( - "Извините, такого кода не существует."), + "Извините, этот код недоступен."), "uncategorized": MessageLookupByLibrary.simpleMessage("Без категории"), - "unhide": MessageLookupByLibrary.simpleMessage("Показать"), + "unhide": MessageLookupByLibrary.simpleMessage("Не скрывать"), "unhideToAlbum": - MessageLookupByLibrary.simpleMessage("Показать в альбоме"), - "unhiding": MessageLookupByLibrary.simpleMessage("Показ..."), + MessageLookupByLibrary.simpleMessage("Перенести в альбом"), + "unhiding": MessageLookupByLibrary.simpleMessage("Раскрытие..."), "unhidingFilesToAlbum": - MessageLookupByLibrary.simpleMessage("Раскрытие файлов в альбоме"), + MessageLookupByLibrary.simpleMessage("Перенос файлов в альбом"), "unlock": MessageLookupByLibrary.simpleMessage("Разблокировать"), "unpinAlbum": MessageLookupByLibrary.simpleMessage("Открепить альбом"), "unselectAll": MessageLookupByLibrary.simpleMessage("Отменить выбор"), @@ -1805,20 +2098,25 @@ class MessageLookup extends MessageLookupByLibrary { "updateAvailable": MessageLookupByLibrary.simpleMessage("Доступно обновление"), "updatingFolderSelection": - MessageLookupByLibrary.simpleMessage("Обновление выбора папки..."), - "upgrade": MessageLookupByLibrary.simpleMessage("Обновить"), + MessageLookupByLibrary.simpleMessage("Обновление выбора папок..."), + "upgrade": MessageLookupByLibrary.simpleMessage("Улучшить"), "uploadIsIgnoredDueToIgnorereason": m105, "uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage("Загрузка файлов в альбом..."), - "upto50OffUntil4thDec": MessageLookupByLibrary.simpleMessage( - "Скидка 50%, до 4-го декабря."), + "uploadingMultipleMemories": m106, + "uploadingSingleMemory": MessageLookupByLibrary.simpleMessage( + "Сохранение 1 воспоминания..."), + "upto50OffUntil4thDec": + MessageLookupByLibrary.simpleMessage("Скидки до 50% до 4 декабря"), "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( - "Доступное хранилище ограничено вашим текущим планом. Избыточное полученное хранилище автоматически станет доступным для использования при улучшении плана."), + "Доступное хранилище ограничено вашим текущим тарифом. Избыточное полученное хранилище автоматически станет доступным при улучшении тарифа."), "useAsCover": MessageLookupByLibrary.simpleMessage("Использовать для обложки"), + "useDifferentPlayerInfo": MessageLookupByLibrary.simpleMessage( + "Проблемы с воспроизведением видео? Нажмите и удерживайте здесь, чтобы попробовать другой плеер."), "usePublicLinksForPeopleNotOnEnte": MessageLookupByLibrary.simpleMessage( - "Использовать публичные ссылки для людей не на Ente"), + "Используйте публичные ссылки для людей, не использующих Ente"), "useRecoveryKey": MessageLookupByLibrary.simpleMessage( "Использовать ключ восстановления"), "useSelectedPhoto": @@ -1827,111 +2125,121 @@ class MessageLookup extends MessageLookupByLibrary { "validTill": m107, "verificationFailedPleaseTryAgain": MessageLookupByLibrary.simpleMessage( - "Проверка не удалась, попробуйте еще раз"), + "Проверка не удалась, пожалуйста, попробуйте снова"), "verificationId": MessageLookupByLibrary.simpleMessage("Идентификатор подтверждения"), "verify": MessageLookupByLibrary.simpleMessage("Подтвердить"), "verifyEmail": MessageLookupByLibrary.simpleMessage( "Подтвердить электронную почту"), "verifyEmailID": m108, - "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Подтверждение"), + "verifyIDLabel": MessageLookupByLibrary.simpleMessage("Подтвердить"), "verifyPasskey": - MessageLookupByLibrary.simpleMessage("Подтвердить ключ"), + MessageLookupByLibrary.simpleMessage("Подтвердить ключ доступа"), "verifyPassword": - MessageLookupByLibrary.simpleMessage("Подтверждение пароля"), + MessageLookupByLibrary.simpleMessage("Подтвердить пароль"), "verifying": MessageLookupByLibrary.simpleMessage("Проверка..."), "verifyingRecoveryKey": MessageLookupByLibrary.simpleMessage( "Проверка ключа восстановления..."), "videoInfo": MessageLookupByLibrary.simpleMessage("Информация о видео"), "videoSmallCase": MessageLookupByLibrary.simpleMessage("видео"), + "videoStreaming": + MessageLookupByLibrary.simpleMessage("Потоковое видео"), "videos": MessageLookupByLibrary.simpleMessage("Видео"), "viewActiveSessions": MessageLookupByLibrary.simpleMessage("Просмотр активных сессий"), "viewAddOnButton": - MessageLookupByLibrary.simpleMessage("Просмотр расширений"), - "viewAll": MessageLookupByLibrary.simpleMessage("Просмотреть все"), + MessageLookupByLibrary.simpleMessage("Посмотреть дополнения"), + "viewAll": MessageLookupByLibrary.simpleMessage("Посмотреть все"), "viewAllExifData": - MessageLookupByLibrary.simpleMessage("Просмотреть все данные EXIF"), + MessageLookupByLibrary.simpleMessage("Посмотреть все данные EXIF"), "viewLargeFiles": MessageLookupByLibrary.simpleMessage("Большие файлы"), - "viewLogs": MessageLookupByLibrary.simpleMessage("Посмотреть логи"), - "viewRecoveryKey": MessageLookupByLibrary.simpleMessage( - "Просмотреть ключ восстановления"), - "viewer": MessageLookupByLibrary.simpleMessage("Наблюдатель"), + "viewLargeFilesDesc": MessageLookupByLibrary.simpleMessage( + "Узнайте, какие файлы занимают больше всего места."), + "viewLogs": MessageLookupByLibrary.simpleMessage("Просмотреть логи"), + "viewRecoveryKey": + MessageLookupByLibrary.simpleMessage("Увидеть ключ восстановления"), + "viewer": MessageLookupByLibrary.simpleMessage("Зритель"), "viewersSuccessfullyAdded": m109, "visitWebToManage": MessageLookupByLibrary.simpleMessage( "Пожалуйста, посетите web.ente.io для управления вашей подпиской"), "waitingForVerification": MessageLookupByLibrary.simpleMessage("Ожидание подтверждения..."), "waitingForWifi": - MessageLookupByLibrary.simpleMessage("Ожидание WiFi..."), + MessageLookupByLibrary.simpleMessage("Ожидание Wi-Fi..."), + "warning": MessageLookupByLibrary.simpleMessage("Предупреждение"), "weAreOpenSource": MessageLookupByLibrary.simpleMessage( "У нас открытый исходный код!"), "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( - "Мы не можем поддержать редактирование фотографий и альбомов, которыми вы не владеете"), - "weHaveSendEmailTo": m2, - "weakStrength": MessageLookupByLibrary.simpleMessage("Слабый"), + "Мы не поддерживаем редактирование фото и альбомов, которые вам пока не принадлежат"), + "weHaveSendEmailTo": m110, + "weakStrength": MessageLookupByLibrary.simpleMessage("Низкая"), "welcomeBack": MessageLookupByLibrary.simpleMessage("С возвращением!"), "whatsNew": MessageLookupByLibrary.simpleMessage("Что нового"), - "yearShort": MessageLookupByLibrary.simpleMessage("г."), + "whyAddTrustContact": MessageLookupByLibrary.simpleMessage( + "Доверенный контакт может помочь в восстановлении ваших данных."), + "yearShort": MessageLookupByLibrary.simpleMessage("год"), "yearly": MessageLookupByLibrary.simpleMessage("Ежегодно"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Да"), "yesCancel": MessageLookupByLibrary.simpleMessage("Да, отменить"), "yesConvertToViewer": - MessageLookupByLibrary.simpleMessage("Да, преобразовать в зрителя"), + MessageLookupByLibrary.simpleMessage("Да, перевести в зрители"), "yesDelete": MessageLookupByLibrary.simpleMessage("Да, удалить"), "yesDiscardChanges": MessageLookupByLibrary.simpleMessage("Да, отменить изменения"), "yesLogout": MessageLookupByLibrary.simpleMessage("Да, выйти"), "yesRemove": MessageLookupByLibrary.simpleMessage("Да, удалить"), "yesRenew": MessageLookupByLibrary.simpleMessage("Да, продлить"), - "yesResetPerson": - MessageLookupByLibrary.simpleMessage("Да, сбросить человека"), + "yesResetPerson": MessageLookupByLibrary.simpleMessage( + "Да, сбросить данные человека"), "you": MessageLookupByLibrary.simpleMessage("Вы"), + "youAndThem": m112, "youAreOnAFamilyPlan": - MessageLookupByLibrary.simpleMessage("Вы на семейном плане!"), + MessageLookupByLibrary.simpleMessage("Вы на семейном тарифе!"), "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage( "Вы используете последнюю версию"), "youCanAtMaxDoubleYourStorage": MessageLookupByLibrary.simpleMessage( - "* Вы можете максимально удвоить объем хранилища"), + "* Вы можете увеличить хранилище максимум в два раза"), "youCanManageYourLinksInTheShareTab": MessageLookupByLibrary.simpleMessage( - "Вы можете управлять своими ссылками во вкладке \"Поделиться\"."), + "Вы можете управлять своими ссылками на вкладке «Поделиться»."), "youCanTrySearchingForADifferentQuery": MessageLookupByLibrary.simpleMessage( "Вы можете попробовать выполнить поиск по другому запросу."), "youCannotDowngradeToThisPlan": MessageLookupByLibrary.simpleMessage( - "Вы не можете перейти к этому плану"), + "Вы не можете понизить до этого тарифа"), "youCannotShareWithYourself": MessageLookupByLibrary.simpleMessage( "Вы не можете поделиться с самим собой"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "У вас нет архивных элементов."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": - MessageLookupByLibrary.simpleMessage("Ваш аккаунт был удален"), + MessageLookupByLibrary.simpleMessage("Ваш аккаунт был удалён"), "yourMap": MessageLookupByLibrary.simpleMessage("Ваша карта"), "yourPlanWasSuccessfullyDowngraded": - MessageLookupByLibrary.simpleMessage( - "Ваш план был успешно изменен"), - "yourPlanWasSuccessfullyUpgraded": MessageLookupByLibrary.simpleMessage( - "Ваш план был успешно улучшен"), + MessageLookupByLibrary.simpleMessage("Ваш тариф успешно понижен"), + "yourPlanWasSuccessfullyUpgraded": + MessageLookupByLibrary.simpleMessage("Ваш тариф успешно повышен"), "yourPurchaseWasSuccessful": - MessageLookupByLibrary.simpleMessage("Покупка прошла успешно"), + MessageLookupByLibrary.simpleMessage("Ваша покупка прошла успешно"), "yourStorageDetailsCouldNotBeFetched": MessageLookupByLibrary.simpleMessage( - "Не удалось получить сведения о вашем хранилище"), + "Не удалось получить данные о вашем хранилище"), "yourSubscriptionHasExpired": MessageLookupByLibrary.simpleMessage( - "Срок действия вашей подписки окончился"), + "Срок действия вашей подписки истёк"), "yourSubscriptionWasUpdatedSuccessfully": MessageLookupByLibrary.simpleMessage( "Ваша подписка успешно обновлена"), "yourVerificationCodeHasExpired": MessageLookupByLibrary.simpleMessage( - "Срок действия вашего проверочного кода истек"), + "Срок действия вашего кода подтверждения истёк"), + "youveNoDuplicateFilesThatCanBeCleared": + MessageLookupByLibrary.simpleMessage( + "У вас нет дубликатов файлов, которые можно удалить"), "youveNoFilesInThisAlbumThatCanBeDeleted": MessageLookupByLibrary.simpleMessage( "В этом альбоме нет файлов, которые можно удалить"), "zoomOutToSeePhotos": MessageLookupByLibrary.simpleMessage( - "Увеличьте масштаб для просмотра фото") + "Уменьшите масштаб, чтобы увидеть фото") }; } diff --git a/mobile/lib/generated/intl/messages_sv.dart b/mobile/lib/generated/intl/messages_sv.dart index 5622835a61..b31857bc18 100644 --- a/mobile/lib/generated/intl/messages_sv.dart +++ b/mobile/lib/generated/intl/messages_sv.dart @@ -20,83 +20,78 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'sv'; - static String m11(count) => - "${Intl.plural(count, one: 'Lägg till objekt', other: 'Lägg till objekt')}"; - - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'Inga deltagare', one: '1 deltagare', other: '${count} deltagare')}"; - static String m18(versionValue) => "Version: ${versionValue}"; + static String m9(versionValue) => "Version: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} gratis"; - static String m3(user) => + static String m13(user) => "${user} kommer inte att kunna lägga till fler foton till detta album\n\nDe kommer fortfarande att kunna ta bort befintliga foton som lagts till av dem"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Din familj har begärt ${storageAmountInGb} GB', 'false': '${storageAmountInGb}', 'other': 'Du har begärt ${storageAmountInGb} GB!', })}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Radera ${count} objekt', other: 'Radera ${count} objekt')}"; - static String m31(supportEmail) => + static String m24(supportEmail) => "Vänligen skicka ett e-postmeddelande till ${supportEmail} från din registrerade e-postadress"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} filer, ${formattedSize} vardera"; - static String m36(email) => + static String m29(email) => "${email} har inte ett Ente-konto.\n\nSkicka dem en inbjudan för att dela bilder."; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB varje gång någon registrerar sig för en betalplan och tillämpar din kod"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} objekt', other: '${count} objekt')}"; - static String m51(expiryTime) => "Länken upphör att gälla ${expiryTime}"; + static String m45(expiryTime) => "Länken upphör att gälla ${expiryTime}"; - static String m54(count) => - "${Intl.plural(count, one: 'Flytta objekt', other: 'Flytta objekt')}"; + static String m52(name) => "Inte ${name}?"; - static String m57(name) => "Inte ${name}?"; - - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Kontakta ${familyAdminEmail} för att ändra din kod."; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Lösenordsstyrka: ${passwordStrengthValue}"; - static String m70(storeName) => "Betygsätt oss på ${storeName}"; + static String m66(storeName) => "Betygsätt oss på ${storeName}"; - static String m75(storageInGB) => "3. Ni får båda ${storageInGB} GB* gratis"; + static String m71(storageInGB) => "3. Ni får båda ${storageInGB} GB* gratis"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} kommer att tas bort från detta delade album\n\nAlla bilder som lagts till av dem kommer också att tas bort från albumet"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: '${count} resultat hittades', other: '${count} resultat hittades')}"; - static String m83(verificationID) => + static String m80(verificationID) => "Här är mitt verifierings-ID: ${verificationID} för ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "Hallå, kan du bekräfta att detta är ditt ente.io verifierings-ID: ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Ente värvningskod: ${referralCode} \n\nTillämpa den i Inställningar → Allmänt → Hänvisningar för att få ${referralStorageInGB} GB gratis när du registrerar dig för en betalplan\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Dela med specifika personer', one: 'Delad med en person', other: 'Delad med ${numberOfPeople} personer')}"; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m8(storageAmountInGB) => "De får också ${storageAmountInGB} GB"; + static String m96(storageAmountInGB) => + "De får också ${storageAmountInGB} GB"; static String m97(email) => "Detta är ${email}s verifierings-ID"; @@ -104,10 +99,10 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "Bekräfta ${email}"; - static String m2(email) => + static String m110(email) => "Vi har skickat ett e-postmeddelande till ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: '${count} år sedan', other: '${count} år sedan')}"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -129,7 +124,6 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Lägg till samarbetspartner"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Lägg till från enhet"), - "addItem": m11, "addLocationButton": MessageLookupByLibrary.simpleMessage("Lägg till"), "addMore": MessageLookupByLibrary.simpleMessage("Lägg till fler"), "addName": MessageLookupByLibrary.simpleMessage("Lägg till namn"), @@ -144,7 +138,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("Om en vecka"), "after1Year": MessageLookupByLibrary.simpleMessage("Om ett år"), "albumOwner": MessageLookupByLibrary.simpleMessage("Ägare"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumUpdated": MessageLookupByLibrary.simpleMessage("Album uppdaterat"), "albums": MessageLookupByLibrary.simpleMessage("Album"), @@ -155,7 +149,7 @@ class MessageLookup extends MessageLookupByLibrary { "allowDownloads": MessageLookupByLibrary.simpleMessage("Tillåt nedladdningar"), "androidCancelButton": MessageLookupByLibrary.simpleMessage("Avbryt"), - "appVersion": m18, + "appVersion": m9, "apply": MessageLookupByLibrary.simpleMessage("Verkställ"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Använd kod"), "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( @@ -165,7 +159,7 @@ class MessageLookup extends MessageLookupByLibrary { "authenticationFailedPleaseTryAgain": MessageLookupByLibrary.simpleMessage( "Autentisering misslyckades, försök igen"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backupSettings": MessageLookupByLibrary.simpleMessage( "Säkerhetskopieringsinställningar"), "backupStatus": @@ -178,7 +172,7 @@ class MessageLookup extends MessageLookupByLibrary { "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( "Kan endast ta bort filer som ägs av dig"), "cancel": MessageLookupByLibrary.simpleMessage("Avbryt"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "change": MessageLookupByLibrary.simpleMessage("Ändra"), "changeEmail": MessageLookupByLibrary.simpleMessage("Ändra e-postadress"), @@ -196,7 +190,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Hämta kostnadsfri lagring"), "claimMore": MessageLookupByLibrary.simpleMessage("Begär mer!"), "claimed": MessageLookupByLibrary.simpleMessage("Nyttjad"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "clearIndexes": MessageLookupByLibrary.simpleMessage("Rensa index"), "close": MessageLookupByLibrary.simpleMessage("Stäng"), "codeAppliedPageTitle": @@ -265,7 +259,7 @@ class MessageLookup extends MessageLookupByLibrary { "Vänligen skicka ett e-postmeddelande till account-deletion@ente.io från din registrerade e-postadress."), "deleteFromDevice": MessageLookupByLibrary.simpleMessage("Radera från enhet"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deletePhotos": MessageLookupByLibrary.simpleMessage("Radera foton"), "deleteReason1": MessageLookupByLibrary.simpleMessage( "Det saknas en viktig funktion som jag behöver"), @@ -291,14 +285,14 @@ class MessageLookup extends MessageLookupByLibrary { "discover_receipts": MessageLookupByLibrary.simpleMessage("Kvitton"), "doThisLater": MessageLookupByLibrary.simpleMessage("Gör detta senare"), "done": MessageLookupByLibrary.simpleMessage("Klar"), - "dropSupportEmail": m31, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Redigera"), "eligible": MessageLookupByLibrary.simpleMessage("berättigad"), "email": MessageLookupByLibrary.simpleMessage("E-post"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage( "E-postadress redan registrerad."), - "emailNoEnteAccount": m36, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage( "E-postadressen är inte registrerad."), "encryption": MessageLookupByLibrary.simpleMessage("Kryptering"), @@ -348,7 +342,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Glömt lösenord"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("Gratis lagring begärd"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage( "Gratis lagringsutrymme som kan användas"), "freeTrial": MessageLookupByLibrary.simpleMessage("Gratis provperiod"), @@ -385,7 +379,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Bjud in dina vänner"), "inviteYourFriendsToEnte": MessageLookupByLibrary.simpleMessage( "Bjud in dina vänner till Ente"), - "itemCount": m48, + "itemCount": m42, "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( "Valda objekt kommer att tas bort från detta album"), "keepPhotos": MessageLookupByLibrary.simpleMessage("Behåll foton"), @@ -398,7 +392,7 @@ class MessageLookup extends MessageLookupByLibrary { "linkDeviceLimit": MessageLookupByLibrary.simpleMessage("Enhetsgräns"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Aktiverat"), "linkExpired": MessageLookupByLibrary.simpleMessage("Upphört"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Länken upphör"), "linkHasExpired": MessageLookupByLibrary.simpleMessage("Länk har upphört att gälla"), @@ -425,7 +419,6 @@ class MessageLookup extends MessageLookupByLibrary { "mlConsentTitle": MessageLookupByLibrary.simpleMessage("Aktivera maskininlärning?"), "moderateStrength": MessageLookupByLibrary.simpleMessage("Måttligt"), - "moveItem": m54, "moveToAlbum": MessageLookupByLibrary.simpleMessage("Flytta till album"), "movingFilesToAlbum": @@ -447,9 +440,9 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Inga resultat"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Inga resultat hittades"), - "notPersonLabel": m57, + "notPersonLabel": m52, "ok": MessageLookupByLibrary.simpleMessage("OK"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "oops": MessageLookupByLibrary.simpleMessage("Hoppsan"), "oopsSomethingWentWrong": MessageLookupByLibrary.simpleMessage("Oj, något gick fel"), @@ -460,7 +453,7 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage("Lösenordet har ändrats"), "passwordLock": MessageLookupByLibrary.simpleMessage("Lösenordskydd"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordWarning": MessageLookupByLibrary.simpleMessage( "Vi lagrar inte detta lösenord, så om du glömmer bort det, kan vi inte dekryptera dina data"), "peopleUsingYourCode": MessageLookupByLibrary.simpleMessage( @@ -477,7 +470,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Integritetspolicy"), "publicLinkEnabled": MessageLookupByLibrary.simpleMessage("Offentlig länk aktiverad"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "recover": MessageLookupByLibrary.simpleMessage("Återställ"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Återställ konto"), @@ -507,7 +500,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Ge denna kod till dina vänner"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. De registrerar sig för en betalplan"), - "referralStep3": m75, + "referralStep3": m71, "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Hänvisningar är för närvarande pausade"), "remove": MessageLookupByLibrary.simpleMessage("Ta bort"), @@ -518,7 +511,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Radera länk"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Ta bort användaren"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( "Några av de objekt som du tar bort lades av andra personer, och du kommer att förlora tillgång till dem"), "removeWithQuestionMark": @@ -551,7 +544,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Albumnamn"), "searchFileTypesAndNamesEmptySection": MessageLookupByLibrary.simpleMessage("Filtyper och namn"), - "searchResultCount": m79, + "searchResultCount": m75, "selectAlbum": MessageLookupByLibrary.simpleMessage("Välj album"), "selectAll": MessageLookupByLibrary.simpleMessage("Markera allt"), "selectFoldersForBackup": MessageLookupByLibrary.simpleMessage( @@ -574,14 +567,14 @@ class MessageLookup extends MessageLookupByLibrary { "share": MessageLookupByLibrary.simpleMessage("Dela"), "shareALink": MessageLookupByLibrary.simpleMessage("Dela en länk"), "shareLink": MessageLookupByLibrary.simpleMessage("Dela länk"), - "shareMyVerificationID": m83, - "shareTextConfirmOthersVerificationID": m7, + "shareMyVerificationID": m80, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Ladda ner Ente så att vi enkelt kan dela bilder och videor med originell kvalitet\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Dela med icke-Ente användare"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("Dela ditt första album"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -612,7 +605,7 @@ class MessageLookup extends MessageLookupByLibrary { "sortAlbumsBy": MessageLookupByLibrary.simpleMessage("Sortera efter"), "status": MessageLookupByLibrary.simpleMessage("Status"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Du"), - "storageInGB": m1, + "storageInGB": m90, "strongStrength": MessageLookupByLibrary.simpleMessage("Starkt"), "subscribe": MessageLookupByLibrary.simpleMessage("Prenumerera"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( @@ -632,7 +625,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage( "Återställningsnyckeln du angav är felaktig"), "theme": MessageLookupByLibrary.simpleMessage("Tema"), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "thisCanBeUsedToRecoverYourAccountIfYou": MessageLookupByLibrary.simpleMessage( "Detta kan användas för att återställa ditt konto om du förlorar din andra faktor"), @@ -694,12 +687,12 @@ class MessageLookup extends MessageLookupByLibrary { "viewRecoveryKey": MessageLookupByLibrary.simpleMessage("Visa återställningsnyckel"), "viewer": MessageLookupByLibrary.simpleMessage("Bildvy"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Svagt"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Välkommen tillbaka!"), "whatsNew": MessageLookupByLibrary.simpleMessage("Nyheter"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Ja"), "yesCancel": MessageLookupByLibrary.simpleMessage("Ja, avbryt"), "yesConvertToViewer": diff --git a/mobile/lib/generated/intl/messages_th.dart b/mobile/lib/generated/intl/messages_th.dart index 2a4580009e..be3154dd7e 100644 --- a/mobile/lib/generated/intl/messages_th.dart +++ b/mobile/lib/generated/intl/messages_th.dart @@ -20,34 +20,30 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'th'; - static String m11(count) => "${Intl.plural(count, other: 'เพิ่มรายการ')}"; + static String m9(versionValue) => "รุ่น: ${versionValue}"; - static String m18(versionValue) => "รุ่น: ${versionValue}"; - - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'ลบ ${count} รายการ', other: 'ลบ ${count} รายการ')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "กำลังลบ ${currentlyDeleting} / ${totalCount}"; - static String m31(supportEmail) => + static String m24(supportEmail) => "กรุณาส่งอีเมลไปที่ ${supportEmail} จากที่อยู่อีเมลที่คุณลงทะเบียนไว้"; - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "กำลังประมวลผล ${currentlyProcessing} / ${totalCount}"; - static String m48(count) => "${Intl.plural(count, other: '${count} รายการ')}"; + static String m42(count) => "${Intl.plural(count, other: '${count} รายการ')}"; - static String m54(count) => "${Intl.plural(count, other: 'ย้ายรายการ')}"; - - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "ความแข็งแรงของรหัสผ่าน: ${passwordStrengthValue}"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "ใช้ไป ${usedAmount} ${usedStorageUnit} จาก ${totalAmount} ${totalStorageUnit}"; - static String m2(email) => "เราได้ส่งจดหมายไปยัง ${email}"; + static String m110(email) => "เราได้ส่งจดหมายไปยัง ${email}"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -60,7 +56,6 @@ class MessageLookup extends MessageLookupByLibrary { "addANewEmail": MessageLookupByLibrary.simpleMessage("เพิ่มอีเมลใหม่"), "addCollaborator": MessageLookupByLibrary.simpleMessage("เพิ่มผู้ทำงานร่วมกัน"), - "addItem": m11, "addMore": MessageLookupByLibrary.simpleMessage("เพิ่มอีก"), "addToAlbum": MessageLookupByLibrary.simpleMessage("เพิ่มไปยังอัลบั้ม"), "addViewer": MessageLookupByLibrary.simpleMessage("เพิ่มผู้ชม"), @@ -77,7 +72,7 @@ class MessageLookup extends MessageLookupByLibrary { "androidBiometricSuccess": MessageLookupByLibrary.simpleMessage("สำเร็จ"), "androidCancelButton": MessageLookupByLibrary.simpleMessage("ยกเลิก"), - "appVersion": m18, + "appVersion": m9, "apply": MessageLookupByLibrary.simpleMessage("นำไปใช้"), "askDeleteReason": MessageLookupByLibrary.simpleMessage( "เหตุผลหลักที่คุณลบบัญชีคืออะไร?"), @@ -130,8 +125,8 @@ class MessageLookup extends MessageLookupByLibrary { "deleteEmptyAlbumsWithQuestionMark": MessageLookupByLibrary.simpleMessage( "ลบอัลบั้มที่ว่างเปล่าหรือไม่?"), - "deleteItemCount": m28, - "deleteProgress": m29, + "deleteItemCount": m21, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "ขาดคุณสมบัติสำคัญที่ฉันต้องการ"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -143,7 +138,7 @@ class MessageLookup extends MessageLookupByLibrary { "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( "คำขอของคุณจะได้รับการดำเนินการภายใน 72 ชั่วโมง"), "doThisLater": MessageLookupByLibrary.simpleMessage("ทำในภายหลัง"), - "dropSupportEmail": m31, + "dropSupportEmail": m24, "edit": MessageLookupByLibrary.simpleMessage("แก้ไข"), "editLocationTagTitle": MessageLookupByLibrary.simpleMessage("แก้ไขตำแหน่ง"), @@ -172,7 +167,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("เพิ่มคำอธิบาย..."), "forgotPassword": MessageLookupByLibrary.simpleMessage("ลืมรหัสผ่าน"), "freeTrial": MessageLookupByLibrary.simpleMessage("ทดลองใช้ฟรี"), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("ไปที่การตั้งค่า"), "hide": MessageLookupByLibrary.simpleMessage("ซ่อน"), "hostedAtOsmFrance": @@ -195,7 +190,7 @@ class MessageLookup extends MessageLookupByLibrary { "invalidKey": MessageLookupByLibrary.simpleMessage("รหัสไม่ถูกต้อง"), "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( "คีย์การกู้คืนที่คุณป้อนไม่ถูกต้อง โปรดตรวจสอบให้แน่ใจว่ามี 24 คำ และตรวจสอบการสะกดของแต่ละคำ\n\nหากคุณป้อนรหัสกู้คืนที่เก่ากว่า ตรวจสอบให้แน่ใจว่ามีความยาว 64 ตัวอักษร และตรวจสอบแต่ละตัวอักษร"), - "itemCount": m48, + "itemCount": m42, "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage("กรุณาช่วยเราด้วยข้อมูลนี้"), "lastUpdated": MessageLookupByLibrary.simpleMessage("อัปเดตล่าสุด"), @@ -213,7 +208,6 @@ class MessageLookup extends MessageLookupByLibrary { "map": MessageLookupByLibrary.simpleMessage("แผนที่"), "maps": MessageLookupByLibrary.simpleMessage("แผนที่"), "moderateStrength": MessageLookupByLibrary.simpleMessage("ปานกลาง"), - "moveItem": m54, "moveToAlbum": MessageLookupByLibrary.simpleMessage("ย้ายไปยังอัลบั้ม"), "name": MessageLookupByLibrary.simpleMessage("ชื่อ"), "newest": MessageLookupByLibrary.simpleMessage("ใหม่สุด"), @@ -234,7 +228,7 @@ class MessageLookup extends MessageLookupByLibrary { "password": MessageLookupByLibrary.simpleMessage("รหัสผ่าน"), "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage("เปลี่ยนรหัสผ่านสำเร็จ"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordWarning": MessageLookupByLibrary.simpleMessage( "เราไม่จัดเก็บรหัสผ่านนี้ ดังนั้นหากคุณลืม เราจะไม่สามารถถอดรหัสข้อมูลของคุณ"), "peopleUsingYourCode": @@ -306,7 +300,7 @@ class MessageLookup extends MessageLookupByLibrary { "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("ครอบครัว"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("คุณ"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "strongStrength": MessageLookupByLibrary.simpleMessage("แข็งแรง"), "syncStopped": MessageLookupByLibrary.simpleMessage("หยุดการซิงค์แล้ว"), "syncing": MessageLookupByLibrary.simpleMessage("กำลังซิงค์..."), @@ -347,7 +341,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("ดูคีย์การกู้คืน"), "waitingForWifi": MessageLookupByLibrary.simpleMessage("กำลังรอ WiFi..."), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("อ่อน"), "welcomeBack": MessageLookupByLibrary.simpleMessage("ยินดีต้อนรับกลับมา!"), diff --git a/mobile/lib/generated/intl/messages_tr.dart b/mobile/lib/generated/intl/messages_tr.dart index f38ad816ee..76abe7a570 100644 --- a/mobile/lib/generated/intl/messages_tr.dart +++ b/mobile/lib/generated/intl/messages_tr.dart @@ -20,235 +20,213 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'tr'; - static String m9(title) => "${title} (Ben)"; + static String m0(title) => "${title} (Ben)"; - static String m10(count) => - "${Intl.plural(count, zero: 'Ortak çalışan ekle', one: 'Ortak çalışan ekle', other: 'Ortak çalışan ekle')}"; - - static String m11(count) => - "${Intl.plural(count, one: 'Öğeyi taşı', other: 'Öğeleri taşı')}"; - - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "${storageAmount} eklentiniz ${endDate} tarihine kadar geçerlidir"; - static String m13(count) => - "${Intl.plural(count, zero: 'Görüntüleyen ekle', one: 'Görüntüleyen ekle', other: 'Görüntüleyen ekle')}"; + static String m5(emailOrName) => "${emailOrName} tarafından eklendi"; - static String m14(emailOrName) => "${emailOrName} tarafından eklendi"; + static String m6(albumName) => "${albumName} albümüne başarıyla eklendi"; - static String m15(albumName) => "${albumName} albümüne başarıyla eklendi"; - - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'Katılımcı Yok', one: '1 Katılımcı', other: '${count} Katılımcı')}"; - static String m18(versionValue) => "Sürüm: ${versionValue}"; + static String m9(versionValue) => "Sürüm: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} ücretsiz"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "Lütfen önce mevcut aboneliğinizi ${paymentProvider} adresinden iptal edin"; - static String m3(user) => + static String m13(user) => "${user}, bu albüme daha fazla fotoğraf ekleyemeyecek.\n\nAncak, kendi eklediği mevcut fotoğrafları kaldırmaya devam edebilecektir"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Şu ana kadar aileniz ${storageAmountInGb} GB aldı', 'false': 'Şu ana kadar ${storageAmountInGb} GB aldınız', 'other': 'Şu ana kadar ${storageAmountInGb} GB aldınız!', })}"; - static String m22(albumName) => + static String m15(albumName) => "${albumName} için ortak çalışma bağlantısı oluşturuldu"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: '0 işbirlikçi eklendi', one: '1 işbirlikçi eklendi', other: '${count} işbirlikçi eklendi')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "Güvenilir bir kişi olarak ${email} eklemek üzeresiniz. Eğer ${numOfDays} gün boyunca yoksanız hesabınızı kurtarabilecekler."; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Aboneliğinizi yönetmek için lütfen ${familyAdminEmail} ile iletişime geçin"; - static String m26(provider) => + static String m19(provider) => "Lütfen ${provider} aboneliğinizi yönetmek için support@ente.io adresinden bizimle iletişime geçin."; - static String m27(endpoint) => "${endpoint}\'e bağlanıldı"; + static String m20(endpoint) => "${endpoint}\'e bağlanıldı"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Delete ${count} item', other: 'Delete ${count} items')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Siliniyor ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Bu, \"${albumName}\"e erişim için olan genel bağlantıyı kaldıracaktır."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Lütfen kayıtlı e-posta adresinizden ${supportEmail} adresine bir e-posta gönderin"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "You have cleaned up ${Intl.plural(count, one: '${count} duplicate file', other: '${count} duplicate files')}, saving (${storageSaved}!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} dosyalar, ${formattedSize} her biri"; - static String m34(newEmail) => "E-posta ${newEmail} olarak değiştirildi"; + static String m27(newEmail) => "E-posta ${newEmail} olarak değiştirildi"; - static String m35(email) => "${email} bir Ente hesabına sahip değil"; + static String m28(email) => "${email} bir Ente hesabına sahip değil"; - static String m36(email) => + static String m29(email) => "${email}, Ente hesabı bulunmamaktadır.\n\nOnlarla fotoğraf paylaşımı için bir davet gönder."; - static String m38(text) => "${text} için ekstra fotoğraflar bulundu"; + static String m31(text) => "${text} için ekstra fotoğraflar bulundu"; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "Bu cihazdaki ${Intl.plural(count, one: '1 file', other: '${formattedNumber} dosya')} güvenli bir şekilde yedeklendi"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "Bu albümdeki ${Intl.plural(count, one: '1 file', other: '${formattedNumber} dosya')} güvenli bir şekilde yedeklendi"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "Birisinin davet kodunuzu uygulayıp ücretli hesap açtığı her seferede ${storageAmountInGB} GB"; - static String m42(endDate) => "Ücretsiz deneme ${endDate} sona erir"; + static String m36(endDate) => "Ücretsiz deneme ${endDate} sona erir"; - static String m43(count) => - "Aktif bir aboneliğiniz olduğu sürece ente\'de ${Intl.plural(count, one: 'it', other: 'them')} erişimine devam edebilirsiniz"; + static String m38(sizeInMBorGB) => "${sizeInMBorGB} yer açın"; - static String m44(sizeInMBorGB) => "${sizeInMBorGB} yer açın"; - - static String m45(count, formattedSize) => - "${Intl.plural(count, one: 'Yer açmak için cihazdan silinebilir ${formattedSize}', other: 'Yer açmak için cihazdan silinebilir ${formattedSize}')}"; - - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Siliniyor ${currentlyProcessing} / ${totalCount}"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} öğe', other: '${count} öğeler')}"; - static String m50(email) => + static String m44(email) => "${email} sizi güvenilir bir kişi olmaya davet etti"; - static String m51(expiryTime) => + static String m45(expiryTime) => "Bu bağlantı ${expiryTime} dan sonra geçersiz olacaktır"; - static String m52(email) => "Kişiyi ${email} adresine bağlayın"; + static String m46(email) => "Kişiyi ${email} adresine bağlayın"; - static String m53(personName, email) => + static String m47(personName, email) => "Bu, ${personName} ile ${email} arasında bağlantı kuracaktır."; - static String m5(count, formattedCount) => - "${Intl.plural(count, zero: 'anı yok', one: '${formattedCount} anı', other: '${formattedCount} anılar')}"; + static String m50(albumName) => "${albumName} adlı albüme başarıyla taşındı"; - static String m54(count) => - "${Intl.plural(count, one: 'Öğeyi taşı', other: 'Öğeleri taşı')}"; + static String m51(personName) => "${personName} için öneri yok"; - static String m55(albumName) => "${albumName} adlı albüme başarıyla taşındı"; + static String m52(name) => "${name} değil mi?"; - static String m56(personName) => "${personName} için öneri yok"; - - static String m57(name) => "${name} değil mi?"; - - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Kodunuzu değiştirmek için lütfen ${familyAdminEmail} ile iletişime geçin."; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Şifrenin güçlülük seviyesi: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Sizden ücret alındıysa lütfen ${providerName} destek ekibiyle görüşün"; - static String m63(count) => + static String m59(count) => "${Intl.plural(count, zero: 'Fotoğraf yok', one: '1 fotoğraf', other: '${count} fotoğraf')}"; - static String m64(count) => - "${Intl.plural(count, zero: '0 fotoğraf', one: '1 fotoğraf', other: '${count} fotoğraflar')}"; - - static String m65(endDate) => + static String m61(endDate) => "Ücretsiz deneme süresi ${endDate} tarihine kadar geçerlidir.\nDaha sonra ücretli bir plan seçebilirsiniz."; - static String m66(toEmail) => "Lütfen bize ${toEmail} adresinden ulaşın"; + static String m62(toEmail) => "Lütfen bize ${toEmail} adresinden ulaşın"; - static String m67(toEmail) => + static String m63(toEmail) => "Lütfen günlükleri şu adrese gönderin\n${toEmail}"; - static String m69(folderName) => "İşleniyor ${folderName}..."; + static String m65(folderName) => "İşleniyor ${folderName}..."; - static String m70(storeName) => "Bizi ${storeName} üzerinden değerlendirin"; + static String m66(storeName) => "Bizi ${storeName} üzerinden değerlendirin"; - static String m71(name) => "Sizi ${name}\'e yeniden atadım"; + static String m67(name) => "Sizi ${name}\'e yeniden atadım"; - static String m72(days, email) => + static String m68(days, email) => "Hesabınıza ${days} gün sonra erişebilirsiniz. ${email} adresine bir bildirim gönderilecektir."; - static String m73(email) => + static String m69(email) => "Artık yeni bir parola belirleyerek ${email} hesabını kurtarabilirsiniz."; - static String m74(email) => "${email} hesabınızı kurtarmaya çalışıyor."; + static String m70(email) => "${email} hesabınızı kurtarmaya çalışıyor."; - static String m75(storageInGB) => "3. Hepimiz ${storageInGB} GB* bedava alın"; + static String m71(storageInGB) => "3. Hepimiz ${storageInGB} GB* bedava alın"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} bu paylaşılan albümden kaldırılacaktır\n\nOnlar tarafından eklenen tüm fotoğraflar da albümden kaldırılacaktır"; - static String m77(endDate) => "Abonelik ${endDate} tarihinde yenilenir"; + static String m73(endDate) => "Abonelik ${endDate} tarihinde yenilenir"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: '${count} yıl önce', other: '${count} yıl önce')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "Bölüm uzunluğu uyuşmazlığı: ${snapshotLength} != ${searchLength}"; - static String m6(count) => "${count} seçildi"; + static String m77(count) => "${count} seçildi"; - static String m81(count, yourCount) => + static String m78(count, yourCount) => "Seçilenler: ${count} (${yourCount} sizin seçiminiz)"; - static String m83(verificationID) => + static String m80(verificationID) => "İşte ente.io için doğrulama kimliğim: ${verificationID}."; - static String m7(verificationID) => + static String m81(verificationID) => "Merhaba, bu ente.io doğrulama kimliğinizin doğruluğunu onaylayabilir misiniz: ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Ente davet kodu: ${referralCode} \n\nÜcretli hesaba başvurduktan sonra ${referralStorageInGB} GB bedava almak için \nAyarlar → Genel → Davetlerde bu kodu girin\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Belirli kişilerle paylaş', one: '1 kişiyle paylaşıldı', other: '${numberOfPeople} kişiyle paylaşıldı')}"; - static String m86(emailIDs) => "${emailIDs} ile paylaşıldı"; + static String m84(emailIDs) => "${emailIDs} ile paylaşıldı"; - static String m87(fileType) => "Bu ${fileType}, cihazınızdan silinecek."; + static String m85(fileType) => "Bu ${fileType}, cihazınızdan silinecek."; - static String m88(fileType) => + static String m86(fileType) => "${fileType} Ente ve cihazınızdan silinecektir."; - static String m89(fileType) => "${fileType} Ente\'den silinecektir."; + static String m87(fileType) => "${fileType} Ente\'den silinecektir."; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} / ${totalAmount} ${totalStorageUnit} kullanıldı"; - static String m93(id) => + static String m92(id) => "${id}\'niz zaten başka bir ente hesabına bağlı.\n${id} numaranızı bu hesapla kullanmak istiyorsanız lütfen desteğimizle iletişime geçin\'\'"; - static String m94(endDate) => + static String m93(endDate) => "Aboneliğiniz ${endDate} tarihinde iptal edilecektir"; - static String m95(completed, total) => "${completed}/${total} anı korundu"; + static String m94(completed, total) => "${completed}/${total} anı korundu"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Yüklemek için dokunun, yükleme şu anda ${ignoreReason} nedeniyle yok sayılıyor"; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "Aynı zamanda ${storageAmountInGB} GB alıyorlar"; static String m97(email) => "Bu, ${email}\'in Doğrulama Kimliği"; + static String m99(dateFormat) => "${dateFormat} yıllar boyunca"; + static String m100(count) => "${Intl.plural(count, zero: 'yakında', one: '1 gün', other: '${count} gün')}"; @@ -267,16 +245,13 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "${email} doğrula"; - static String m109(count) => - "${Intl.plural(count, zero: '0 Görüntüleyen eklendi', one: '1 Görüntüleyen eklendi', other: '${count} Görüntüleyen eklendi')}"; - - static String m2(email) => + static String m110(email) => "E-postayı ${email} adresine gönderdik"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: '${count} yıl önce', other: '${count} yıl önce')}"; - static String m112(storageSaved) => + static String m113(storageSaved) => "Başarılı bir şekilde ${storageSaved} alanını boşalttınız!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -289,7 +264,7 @@ class MessageLookup extends MessageLookupByLibrary { "account": MessageLookupByLibrary.simpleMessage("Hesap"), "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage( "Hesap zaten yapılandırılmıştır."), - "accountOwnerPersonAppbarTitle": m9, + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("Tekrar hoş geldiniz!"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( @@ -302,10 +277,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Yeni e-posta ekle"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Düzenleyici ekle"), - "addCollaborators": m10, "addFiles": MessageLookupByLibrary.simpleMessage("Dosyaları Ekle"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Cihazdan ekle"), - "addItem": m11, "addLocation": MessageLookupByLibrary.simpleMessage("Konum Ekle"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Ekle"), "addMore": MessageLookupByLibrary.simpleMessage("Daha fazla ekle"), @@ -316,7 +289,7 @@ class MessageLookup extends MessageLookupByLibrary { "addNewPerson": MessageLookupByLibrary.simpleMessage("Yeni kişi ekle"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage("Eklentilerin ayrıntıları"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Eklentiler"), "addPhotos": MessageLookupByLibrary.simpleMessage("Fotoğraf ekle"), "addSelected": MessageLookupByLibrary.simpleMessage("Seçileni ekle"), @@ -327,12 +300,11 @@ class MessageLookup extends MessageLookupByLibrary { "addTrustedContact": MessageLookupByLibrary.simpleMessage("Güvenilir kişi ekle"), "addViewer": MessageLookupByLibrary.simpleMessage("Görüntüleyici ekle"), - "addViewers": m13, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage( "Fotoğraflarınızı şimdi ekleyin"), "addedAs": MessageLookupByLibrary.simpleMessage("Eklendi"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("Favorilere ekleniyor..."), "advanced": MessageLookupByLibrary.simpleMessage("Gelişmiş"), @@ -343,7 +315,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("1 hafta sonra"), "after1Year": MessageLookupByLibrary.simpleMessage("1 yıl sonra"), "albumOwner": MessageLookupByLibrary.simpleMessage("Sahip"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Albüm Başlığı"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Albüm güncellendi"), @@ -395,7 +367,7 @@ class MessageLookup extends MessageLookupByLibrary { "appLock": MessageLookupByLibrary.simpleMessage("Uygulama kilidi"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Cihazınızın varsayılan kilit ekranı ile PIN veya parola içeren özel bir kilit ekranı arasında seçim yapın."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("Apple kimliği"), "apply": MessageLookupByLibrary.simpleMessage("Uygula"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Kodu girin"), @@ -477,7 +449,7 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "Otomatik eşleştirme yalnızca Chromecast destekleyen cihazlarla çalışır."), "available": MessageLookupByLibrary.simpleMessage("Mevcut"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("Yedeklenmiş klasörler"), "backup": MessageLookupByLibrary.simpleMessage("Yedekle"), @@ -498,6 +470,21 @@ class MessageLookup extends MessageLookupByLibrary { "blackFridaySale": MessageLookupByLibrary.simpleMessage("Muhteşem Cuma kampanyası"), "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "cLBulkEditDesc": MessageLookupByLibrary.simpleMessage( + "Artık birden fazla fotoğraf seçebilir ve tek bir hızlı işlemle hepsi için tarih/saat düzenleyebilirsiniz. Tarih kaydırma da desteklenmektedir."), + "cLFamilyPlan": + MessageLookupByLibrary.simpleMessage("Aile Planı Sınırları"), + "cLFamilyPlanDesc": MessageLookupByLibrary.simpleMessage( + "Artık aile üyelerinizin ne kadar depolama alanı kullanabileceğine dair sınırlar belirleyebilirsiniz."), + "cLIcon": MessageLookupByLibrary.simpleMessage("Yeni Simge"), + "cLIconDesc": MessageLookupByLibrary.simpleMessage( + "Son olarak, çalışmalarımızı en iyi şekilde temsil ettiğini düşündüğümüz yeni bir uygulama simgesi. Eski simgeyi kullanmaya devam edebilmeniz için bir simge değiştirici de ekledik."), + "cLMemories": MessageLookupByLibrary.simpleMessage("Anılar"), + "cLMemoriesDesc": MessageLookupByLibrary.simpleMessage( + "Özel anlarınızı yeniden keşfedin - en sevdiğiniz kişilere, seyahatlerinize ve tatillerinize, en iyi tıklamalarınıza ve çok daha fazlasına odaklanın. En iyi deneyim için makine öğrenimini açın, kendinizi etiketleyin ve arkadaşlarınızı adlandırın."), + "cLWidgets": MessageLookupByLibrary.simpleMessage("Widget\'lar"), + "cLWidgetsDesc": MessageLookupByLibrary.simpleMessage( + "Anılarla entegre edilmiş ana ekran widget\'ları artık kullanılabilir. Uygulamayı açmadan özel anlarınızı gösterecekler."), "cachedData": MessageLookupByLibrary.simpleMessage("Ön belleğe alınan veri"), "calculating": MessageLookupByLibrary.simpleMessage("Hesaplanıyor..."), @@ -518,10 +505,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Kurtarma işlemini iptal et"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "Kurtarmayı iptal etmek istediğinize emin misiniz?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Abonelik iptali"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage("Dosyalar silinemiyor"), "castAlbum": MessageLookupByLibrary.simpleMessage("Yayın albümü"), @@ -558,7 +545,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Bedava alan talep edin"), "claimMore": MessageLookupByLibrary.simpleMessage("Arttır!"), "claimed": MessageLookupByLibrary.simpleMessage("Alındı"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("Temiz Genel"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -588,12 +575,12 @@ class MessageLookup extends MessageLookupByLibrary { "Ente aplikasyonu veya hesabı olmadan insanların paylaşılan albümde fotoğraf ekleyip görüntülemelerine izin vermek için bir bağlantı oluşturun. Grup veya etkinlik fotoğraflarını toplamak için harika bir seçenek."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Organizasyon bağlantısı"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Düzenleyici"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "Düzenleyiciler, paylaşılan albüme fotoğraf ve videolar ekleyebilir."), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("Düzen"), "collageSaved": MessageLookupByLibrary.simpleMessage( "Kolajınız galeriye kaydedildi"), @@ -611,7 +598,7 @@ class MessageLookup extends MessageLookupByLibrary { "İki adımlı kimlik doğrulamasını devre dışı bırakmak istediğinize emin misiniz?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage("Hesap silme işlemini onayla"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Evet, bu hesabı ve verilerini tüm uygulamalardan kalıcı olarak silmek istiyorum."), "confirmPassword": @@ -624,10 +611,10 @@ class MessageLookup extends MessageLookupByLibrary { "Kurtarma anahtarını doğrulayın"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Cihaza bağlanın"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("Destek ile iletişim"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Kişiler"), "contents": MessageLookupByLibrary.simpleMessage("İçerikler"), "continueLabel": MessageLookupByLibrary.simpleMessage("Devam edin"), @@ -668,12 +655,14 @@ class MessageLookup extends MessageLookupByLibrary { "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage("Kritik güncelleme mevcut"), "crop": MessageLookupByLibrary.simpleMessage("Kırp"), + "curatedMemories": + MessageLookupByLibrary.simpleMessage("Seçilmiş anılar"), "currentUsageIs": MessageLookupByLibrary.simpleMessage("Güncel kullanımınız "), "currentlyRunning": MessageLookupByLibrary.simpleMessage("şu anda çalışıyor"), "custom": MessageLookupByLibrary.simpleMessage("Kişisel"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Karanlık"), "dayToday": MessageLookupByLibrary.simpleMessage("Bugün"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Dün"), @@ -710,11 +699,11 @@ class MessageLookup extends MessageLookupByLibrary { "deleteFromDevice": MessageLookupByLibrary.simpleMessage("Cihazınızdan silin"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Ente\'den Sil"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Konumu sil"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Fotoğrafları sil"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "İhtiyacım olan önemli bir özellik eksik"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -753,7 +742,7 @@ class MessageLookup extends MessageLookupByLibrary { "Görüntüleyiciler, hala harici araçlar kullanarak ekran görüntüsü alabilir veya fotoğraflarınızın bir kopyasını kaydedebilir. Lütfen bunu göz önünde bulundurunuz"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Lütfen dikkate alın"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage( "İki Aşamalı Doğrulamayı Devre Dışı Bırak"), "disablingTwofactorAuthentication": @@ -796,9 +785,9 @@ class MessageLookup extends MessageLookupByLibrary { "downloadFailed": MessageLookupByLibrary.simpleMessage("İndirme başarısız"), "downloading": MessageLookupByLibrary.simpleMessage("İndiriliyor..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Düzenle"), "editLocation": MessageLookupByLibrary.simpleMessage("Konumu düzenle"), "editLocationTagTitle": @@ -814,9 +803,9 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("E-Posta"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage( "Bu e-posta adresi zaten kayıtlı."), - "emailChangedTo": m34, - "emailDoesNotHaveEnteAccount": m35, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage( "Bu e-posta adresi sistemde kayıtlı değil."), "emailVerificationToggle": @@ -903,7 +892,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Veriyi dışarı aktar"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage("Ekstra fotoğraflar bulundu"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Yüz henüz kümelenmedi, lütfen daha sonra tekrar gelin"), "faceRecognition": MessageLookupByLibrary.simpleMessage("Yüz Tanıma"), @@ -951,8 +940,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("Dosya türü"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("Dosya türleri ve adları"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("Dosyalar silinmiş"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage( @@ -969,26 +958,24 @@ class MessageLookup extends MessageLookupByLibrary { "foundFaces": MessageLookupByLibrary.simpleMessage("Yüzler bulundu"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("Alınan bedava alan"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage("Kullanılabilir bedava alan"), "freeTrial": MessageLookupByLibrary.simpleMessage("Ücretsiz deneme"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("Cihaz alanını boşaltın"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Zaten yedeklenmiş dosyaları temizleyerek cihazınızda yer kazanın."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Boş alan"), - "freeUpSpaceSaving": m45, "gallery": MessageLookupByLibrary.simpleMessage("Galeri"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "Galeride 1000\'e kadar anı gösterilir"), "general": MessageLookupByLibrary.simpleMessage("Genel"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Şifreleme anahtarı oluşturuluyor..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Ayarlara git"), "googlePlayId": MessageLookupByLibrary.simpleMessage("Google play kimliği"), @@ -1073,7 +1060,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Bir şeyler ters gitmiş gibi görünüyor. Lütfen bir süre sonra tekrar deneyin. Hata devam ederse, lütfen destek ekibimizle iletişime geçin."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Öğeler, kalıcı olarak silinmeden önce kalan gün sayısını gösterir"), @@ -1107,7 +1094,7 @@ class MessageLookup extends MessageLookupByLibrary { "legacy": MessageLookupByLibrary.simpleMessage("Geleneksel"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Geleneksel hesaplar"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "Geleneksel yol, güvendiğiniz kişilerin yokluğunuzda hesabınıza erişmesine olanak tanır."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1123,7 +1110,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("d"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Geçerli"), "linkExpired": MessageLookupByLibrary.simpleMessage("Süresi dolmuş"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Linkin geçerliliği"), "linkHasExpired": @@ -1132,8 +1119,8 @@ class MessageLookup extends MessageLookupByLibrary { "linkPerson": MessageLookupByLibrary.simpleMessage("Bağlantı kişisi"), "linkPersonCaption": MessageLookupByLibrary.simpleMessage( "daha iyi paylaşım deneyimi için"), - "linkPersonToEmail": m52, - "linkPersonToEmailConfirmation": m53, + "linkPersonToEmail": m46, + "linkPersonToEmailConfirmation": m47, "livePhotos": MessageLookupByLibrary.simpleMessage("Canlı Fotoğraf"), "loadMessage1": MessageLookupByLibrary.simpleMessage( "Aboneliğinizi ailenizle paylaşabilirsiniz"), @@ -1223,7 +1210,6 @@ class MessageLookup extends MessageLookupByLibrary { "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), "me": MessageLookupByLibrary.simpleMessage("Ben"), - "memoryCount": m5, "merchandise": MessageLookupByLibrary.simpleMessage("Ürünler"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Var olan ile birleştir."), @@ -1253,13 +1239,12 @@ class MessageLookup extends MessageLookupByLibrary { "moreDetails": MessageLookupByLibrary.simpleMessage("Daha fazla detay"), "mostRecent": MessageLookupByLibrary.simpleMessage("En son"), "mostRelevant": MessageLookupByLibrary.simpleMessage("En alakalı"), - "moveItem": m54, "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage( "Seçilen fotoğrafları bir tarihe taşıma"), "moveToAlbum": MessageLookupByLibrary.simpleMessage("Albüme taşı"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Gizli albüme ekle"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("Cöp kutusuna taşı"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( @@ -1312,10 +1297,12 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Sonuç bulunamadı"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Hiçbir sonuç bulunamadı"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage("Sistem kilidi bulunamadı"), - "notPersonLabel": m57, + "notPersonLabel": m52, + "notThisPerson": + MessageLookupByLibrary.simpleMessage("Bu kişi değil mi?"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Henüz sizinle paylaşılan bir şey yok"), "nothingToSeeHere": MessageLookupByLibrary.simpleMessage( @@ -1325,7 +1312,7 @@ class MessageLookup extends MessageLookupByLibrary { "onDevice": MessageLookupByLibrary.simpleMessage("Bu cihaz"), "onEnte": MessageLookupByLibrary.simpleMessage( "ente üzerinde"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Sadece onlar"), "oops": MessageLookupByLibrary.simpleMessage("Hay aksi"), "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( @@ -1364,7 +1351,7 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( "Şifreniz başarılı bir şekilde değiştirildi"), "passwordLock": MessageLookupByLibrary.simpleMessage("Sifre kilidi"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "Parola gücü, parolanın uzunluğu, kullanılan karakterler ve parolanın en çok kullanılan ilk 10.000 parola arasında yer alıp almadığı dikkate alınarak hesaplanır"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1375,7 +1362,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Ödeme başarısız oldu"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Maalesef ödemeniz başarısız oldu. Lütfen destekle iletişime geçin, size yardımcı olacağız!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Bekleyen Öğeler"), "pendingSync": MessageLookupByLibrary.simpleMessage("Senkronizasyon bekleniyor"), @@ -1394,12 +1381,11 @@ class MessageLookup extends MessageLookupByLibrary { "photoGridSize": MessageLookupByLibrary.simpleMessage("Fotoğraf ızgara boyutu"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("fotoğraf"), - "photocountPhotos": m63, + "photocountPhotos": m59, "photos": MessageLookupByLibrary.simpleMessage("Fotoğraflar"), "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Eklediğiniz fotoğraflar albümden kaldırılacak"), - "photosCount": m64, "photosKeepRelativeTimeDifference": MessageLookupByLibrary.simpleMessage( "Fotoğraflar göreli zaman farkını korur"), @@ -1409,7 +1395,7 @@ class MessageLookup extends MessageLookupByLibrary { "pinLock": MessageLookupByLibrary.simpleMessage("Pin kilidi"), "playOnTv": MessageLookupByLibrary.simpleMessage("Albümü TV\'de oynat"), "playOriginal": MessageLookupByLibrary.simpleMessage("Orijinali oynat"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playStream": MessageLookupByLibrary.simpleMessage("Akışı oynat"), "playstoreSubscription": MessageLookupByLibrary.simpleMessage("PlayStore aboneliği"), @@ -1422,14 +1408,14 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Bu hata devam ederse lütfen desteğe başvurun"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("Lütfen izin ver"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Lütfen tekrar giriş yapın"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Lütfen kaldırmak için hızlı bağlantıları seçin"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Lütfen tekrar deneyiniz"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1462,7 +1448,7 @@ class MessageLookup extends MessageLookupByLibrary { "proceed": MessageLookupByLibrary.simpleMessage("Devam edin"), "processed": MessageLookupByLibrary.simpleMessage("İşlenen"), "processing": MessageLookupByLibrary.simpleMessage("İşleniyor"), - "processingImport": m69, + "processingImport": m65, "processingVideos": MessageLookupByLibrary.simpleMessage("Videolar işleniyor"), "publicLinkCreated": MessageLookupByLibrary.simpleMessage( @@ -1476,10 +1462,10 @@ class MessageLookup extends MessageLookupByLibrary { "rateTheApp": MessageLookupByLibrary.simpleMessage("Uygulamaya puan verin"), "rateUs": MessageLookupByLibrary.simpleMessage("Bizi değerlendirin"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "reassignMe": MessageLookupByLibrary.simpleMessage("\"Ben \"i yeniden atayın"), - "reassignedToName": m71, + "reassignedToName": m67, "reassigningLoading": MessageLookupByLibrary.simpleMessage("Yeniden atama..."), "recover": MessageLookupByLibrary.simpleMessage("Kurtarma"), @@ -1489,7 +1475,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Hesabı kurtar"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("Kurtarma başlatıldı"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Kurtarma anahtarı"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( @@ -1504,12 +1490,12 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Kurtarma kodu doğrulandı"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Kurtarma anahtarınız, şifrenizi unutmanız durumunda fotoğraflarınızı kurtarmanın tek yoludur. Kurtarma anahtarınızı Ayarlar > Hesap bölümünde bulabilirsiniz.\n\nDoğru kaydettiğinizi doğrulamak için lütfen kurtarma anahtarınızı buraya girin."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("Kurtarma başarılı!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "Güvenilir bir kişi hesabınıza erişmeye çalışıyor"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "Cihazınız, şifrenizi doğrulamak için yeterli güce sahip değil, ancak tüm cihazlarda çalışacak şekilde yeniden oluşturabiliriz.\n\nLütfen kurtarma anahtarınızı kullanarak giriş yapın ve şifrenizi yeniden oluşturun (istediğiniz takdirde aynı şifreyi tekrar kullanabilirsiniz)."), "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage( @@ -1525,7 +1511,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Bu kodu arkadaşlarınıza verin"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Ücretli bir plan için kaydolsunlar"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Referanslar"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Davetler şu anda durmuş durumda"), @@ -1556,7 +1542,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Linki kaldır"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Katılımcıyı kaldır"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Kişi etiketini kaldırın"), "removePublicLink": @@ -1578,7 +1564,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Dosyayı yeniden adlandır"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Abonelik yenileme"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Hatayı bildir"), "reportBug": MessageLookupByLibrary.simpleMessage("Hata bildir"), "resendEmail": @@ -1658,8 +1644,8 @@ class MessageLookup extends MessageLookupByLibrary { "İnsanları davet ettiğinizde onların paylaştığı tüm fotoğrafları burada göreceksiniz"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "İşleme ve senkronizasyon tamamlandığında kişiler burada gösterilecektir"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Güvenlik"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( "Uygulamadaki herkese açık albüm bağlantılarını görün"), @@ -1705,8 +1691,11 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Seçilen öğeler tüm albümlerden silinecek ve çöp kutusuna taşınacak."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, + "selectedItemsWillBeRemovedFromThisPerson": + MessageLookupByLibrary.simpleMessage( + "Seçilen öğeler bu kişiden kaldırılacak, ancak kitaplığınızdan silinmeyecektir."), + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, "send": MessageLookupByLibrary.simpleMessage("Gönder"), "sendEmail": MessageLookupByLibrary.simpleMessage("E-posta gönder"), "sendInvite": MessageLookupByLibrary.simpleMessage("Davet kodu gönder"), @@ -1737,16 +1726,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("Şimdi bir albüm paylaşın"), "shareLink": MessageLookupByLibrary.simpleMessage("Linki paylaş"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Yalnızca istediğiniz kişilerle paylaşın"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Orijinal kalitede fotoğraf ve videoları kolayca paylaşabilmemiz için Ente\'yi indirin\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Ente kullanıcısı olmayanlar için paylaş"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("İlk albümünüzü paylaşın"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1758,7 +1747,7 @@ class MessageLookup extends MessageLookupByLibrary { "Paylaşılan fotoğrafları ekle"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Birisi sizin de parçası olduğunuz paylaşılan bir albüme fotoğraf eklediğinde bildirim alın"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Benimle paylaşılan"), "sharedWithYou": @@ -1776,11 +1765,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Diğer cihazlardan çıkış yap"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Hizmet Şartları\'nı ve Gizlilik Politikası\'nı kabul ediyorum"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage("Tüm albümlerden silinecek."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Geç"), "social": MessageLookupByLibrary.simpleMessage("Sosyal Medya"), "someItemsAreInBothEnteAndYourDevice": @@ -1827,15 +1816,15 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Depolama"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Aile"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Sen"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Depolama sınırı aşıldı"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "streamDetails": MessageLookupByLibrary.simpleMessage("Yayın detayları"), "strongStrength": MessageLookupByLibrary.simpleMessage("Güçlü"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Abone ol"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Paylaşımı etkinleştirmek için aktif bir ücretli aboneliğe ihtiyacınız var."), @@ -1852,7 +1841,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("Özellik önerin"), "support": MessageLookupByLibrary.simpleMessage("Destek"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Senkronizasyon durduruldu"), "syncing": MessageLookupByLibrary.simpleMessage("Eşitleniyor..."), @@ -1864,7 +1853,7 @@ class MessageLookup extends MessageLookupByLibrary { "tapToUnlock": MessageLookupByLibrary.simpleMessage("Açmak için dokun"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Yüklemek için tıklayın"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Bir şeyler ters gitmiş gibi görünüyor. Lütfen bir süre sonra tekrar deneyin. Hata devam ederse, lütfen destek ekibimizle iletişime geçin."), "terminate": MessageLookupByLibrary.simpleMessage("Sonlandır"), @@ -1887,7 +1876,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Bu öğeler cihazınızdan silinecektir."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage("Tüm albümlerden silinecek."), "thisActionCannotBeUndone": @@ -1908,6 +1897,8 @@ class MessageLookup extends MessageLookupByLibrary { "thisIsPersonVerificationId": m97, "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage("Doğrulama kimliğiniz"), + "thisWeekThroughTheYears": + MessageLookupByLibrary.simpleMessage("Yıllar boyunca bu hafta"), "thisWillLogYouOutOfTheFollowingDevice": MessageLookupByLibrary.simpleMessage( "Bu, sizi aşağıdaki cihazdan çıkış yapacak:"), @@ -1919,6 +1910,7 @@ class MessageLookup extends MessageLookupByLibrary { "thisWillRemovePublicLinksOfAllSelectedQuickLinks": MessageLookupByLibrary.simpleMessage( "Bu, seçilen tüm hızlı bağlantıların genel bağlantılarını kaldıracaktır."), + "throughTheYears": m99, "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": MessageLookupByLibrary.simpleMessage( "Uygulama kilidini etkinleştirmek için lütfen sistem ayarlarınızda cihaz şifresi veya ekran kilidi ayarlayın."), @@ -2039,7 +2031,6 @@ class MessageLookup extends MessageLookupByLibrary { "viewRecoveryKey": MessageLookupByLibrary.simpleMessage( "Kurtarma anahtarını görüntüle"), "viewer": MessageLookupByLibrary.simpleMessage("Görüntüleyici"), - "viewersSuccessfullyAdded": m109, "visitWebToManage": MessageLookupByLibrary.simpleMessage( "Aboneliğinizi yönetmek için lütfen web.ente.io adresini ziyaret edin"), "waitingForVerification": @@ -2052,7 +2043,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Henüz sahibi olmadığınız fotoğraf ve albümlerin düzenlenmesini desteklemiyoruz"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Zayıf"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Tekrardan hoşgeldin!"), @@ -2060,7 +2051,7 @@ class MessageLookup extends MessageLookupByLibrary { "whyAddTrustContact": MessageLookupByLibrary.simpleMessage("."), "yearShort": MessageLookupByLibrary.simpleMessage("yıl"), "yearly": MessageLookupByLibrary.simpleMessage("Yıllık"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Evet"), "yesCancel": MessageLookupByLibrary.simpleMessage("Evet, iptal et"), "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( @@ -2093,7 +2084,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Kendinizle paylaşamazsınız"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage("Arşivlenmiş öğeniz yok."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("Hesabınız silindi"), "yourMap": MessageLookupByLibrary.simpleMessage("Haritalarınız"), diff --git a/mobile/lib/generated/intl/messages_uk.dart b/mobile/lib/generated/intl/messages_uk.dart index d67ae5edff..1c7f3dd3b9 100644 --- a/mobile/lib/generated/intl/messages_uk.dart +++ b/mobile/lib/generated/intl/messages_uk.dart @@ -20,215 +20,191 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'uk'; - static String m10(count) => - "${Intl.plural(count, one: 'Додано співавтора', other: 'Додано співавторів')}"; - - static String m11(count) => - "${Intl.plural(count, one: 'Додавання елемента', other: 'Додавання елементів')}"; - - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "Ваше доповнення ${storageAmount} діє до ${endDate}"; - static String m13(count) => - "${Intl.plural(count, one: 'Додано глядача', other: 'Додано глядачів')}"; + static String m5(emailOrName) => "Додано ${emailOrName}"; - static String m14(emailOrName) => "Додано ${emailOrName}"; + static String m6(albumName) => "Успішно додано до «${albumName}»"; - static String m15(albumName) => "Успішно додано до «${albumName}»"; - - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'Немає учасників', one: '1 учасник', other: '${count} учасників')}"; - static String m18(versionValue) => "Версія: ${versionValue}"; + static String m9(versionValue) => "Версія: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} вільно"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "Спочатку скасуйте вашу передплату від ${paymentProvider}"; - static String m3(user) => + static String m13(user) => "${user} не зможе додавати більше фотографій до цього альбому\n\nВони все ще зможуть видаляти додані ними фотографії"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Ваша сім\'я отримала ${storageAmountInGb} ГБ', 'false': 'Ви отримали ${storageAmountInGb} ГБ', 'other': 'Ви отримали ${storageAmountInGb} ГБ!', })}"; - static String m22(albumName) => + static String m15(albumName) => "Створено спільне посилання для «${albumName}»"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: 'Додано 0 співавторів', one: 'Додано 1 співавтор', few: 'Додано ${count} співаторів', many: 'Додано ${count} співаторів', other: 'Додано ${count} співавторів')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "Ви збираєтеся додати ${email} як довірений контакт. Вони зможуть відновити ваш обліковий запис, якщо ви будете відсутні протягом ${numOfDays} днів."; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Зв\'яжіться з ${familyAdminEmail} для керування вашою передплатою"; - static String m26(provider) => + static String m19(provider) => "Зв\'яжіться з нами за адресою support@ente.io для управління вашою передплатою ${provider}."; - static String m27(endpoint) => "Під\'єднано до ${endpoint}"; + static String m20(endpoint) => "Під\'єднано до ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Видалено ${count} елемент', few: 'Видалено ${count} елементи', many: 'Видалено ${count} елементів', other: 'Видалено ${count} елементів')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Видалення ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Це видалить публічне посилання для доступу до «${albumName}»."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Надішліть листа на ${supportEmail} з вашої зареєстрованої поштової адреси"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "Ви очистили ${Intl.plural(count, one: '${count} дублікат файлу', other: '${count} дублікатів файлів')}, збережено (${storageSaved}!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} файлів, кожен по ${formattedSize}"; - static String m34(newEmail) => "Поштову адресу змінено на ${newEmail}"; + static String m27(newEmail) => "Поштову адресу змінено на ${newEmail}"; - static String m36(email) => + static String m29(email) => "У ${email} немає облікового запису Ente.\n\nНадішліть їм запрошення для обміну фотографіями."; - static String m38(text) => "Знайдено додаткові фотографії для ${text}"; + static String m31(text) => "Знайдено додаткові фотографії для ${text}"; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "${Intl.plural(count, one: 'Для 1 файлу', other: 'Для ${formattedNumber} файлів')} на цьому пристрої було створено резервну копію"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "${Intl.plural(count, one: 'Для 1 файлу', few: 'Для ${formattedNumber} файлів', many: 'Для ${formattedNumber} файлів', other: 'Для ${formattedNumber} файлів')} у цьому альбомі було створено резервну копію"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} ГБ щоразу, коли хтось оформлює передплату і застосовує ваш код"; - static String m42(endDate) => "Безплатна пробна версія діє до ${endDate}"; + static String m36(endDate) => "Безплатна пробна версія діє до ${endDate}"; - static String m43(count) => - "Ви все ще можете отримати доступ до ${Intl.plural(count, one: 'нього', other: 'них')} в Ente, доки у вас активна передплата"; + static String m38(sizeInMBorGB) => "Звільніть ${sizeInMBorGB}"; - static String m44(sizeInMBorGB) => "Звільніть ${sizeInMBorGB}"; - - static String m45(count, formattedSize) => - "${Intl.plural(count, one: 'Його можна видалити з пристрою, щоб звільнити ${formattedSize}', other: 'Їх можна видалити з пристрою, щоб звільнити ${formattedSize}')}"; - - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Обробка ${currentlyProcessing} / ${totalCount}"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} елемент', few: '${count} елементи', many: '${count} елементів', other: '${count} елементів')}"; - static String m50(email) => "${email} запросив вас стати довіреною особою"; + static String m44(email) => "${email} запросив вас стати довіреною особою"; - static String m51(expiryTime) => "Посилання закінчується через ${expiryTime}"; + static String m45(expiryTime) => "Посилання закінчується через ${expiryTime}"; - static String m5(count, formattedCount) => - "${Intl.plural(count, zero: 'немає спогадів', one: '${formattedCount} спогад', other: '${formattedCount} спогадів')}"; + static String m50(albumName) => "Успішно перенесено до «${albumName}»"; - static String m54(count) => - "${Intl.plural(count, one: 'Переміщення елемента', other: 'Переміщення елементів')}"; + static String m51(personName) => "Немає пропозицій для ${personName}"; - static String m55(albumName) => "Успішно перенесено до «${albumName}»"; + static String m52(name) => "Не ${name}?"; - static String m56(personName) => "Немає пропозицій для ${personName}"; - - static String m57(name) => "Не ${name}?"; - - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Зв\'яжіться з ${familyAdminEmail}, щоб змінити код."; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Надійність пароля: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Зверніться до ${providerName}, якщо було знято платіж"; - static String m64(count) => - "${Intl.plural(count, zero: '0 фото', one: '1 фото', few: '${count} фото', many: '${count} фото', other: '${count} фото')}"; - - static String m65(endDate) => + static String m61(endDate) => "Безплатна пробна версія діє до ${endDate}.\nПісля цього ви можете обрати платний план."; - static String m66(toEmail) => "Напишіть нам на ${toEmail}"; + static String m62(toEmail) => "Напишіть нам на ${toEmail}"; - static String m67(toEmail) => "Надішліть журнали на \n${toEmail}"; + static String m63(toEmail) => "Надішліть журнали на \n${toEmail}"; - static String m69(folderName) => "Оброблюємо «${folderName}»..."; + static String m65(folderName) => "Оброблюємо «${folderName}»..."; - static String m70(storeName) => "Оцініть нас в ${storeName}"; + static String m66(storeName) => "Оцініть нас в ${storeName}"; - static String m72(days, email) => + static String m68(days, email) => "Ви зможете отримати доступ до облікового запису через ${days} днів. Повідомлення буде надіслано на ${email}."; - static String m73(email) => + static String m69(email) => "Тепер ви можете відновити обліковий запис ${email}, встановивши новий пароль."; - static String m74(email) => + static String m70(email) => "${email} намагається відновити ваш обліковий запис."; - static String m75(storageInGB) => + static String m71(storageInGB) => "3. Ви обоє отримуєте ${storageInGB} ГБ* безплатно"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} буде видалено з цього спільного альбому\n\nБудь-які додані вами фото, будуть також видалені з альбому"; - static String m77(endDate) => "Передплата поновиться ${endDate}"; + static String m73(endDate) => "Передплата поновиться ${endDate}"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: 'Знайдено ${count} результат', few: 'Знайдено ${count} результати', many: 'Знайдено ${count} результатів', other: 'Знайдено ${count} результати')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "Невідповідність довжини розділів: ${snapshotLength} != ${searchLength}"; - static String m6(count) => "${count} вибрано"; + static String m77(count) => "${count} вибрано"; - static String m81(count, yourCount) => "${count} вибрано (${yourCount} ваші)"; + static String m78(count, yourCount) => "${count} вибрано (${yourCount} ваші)"; - static String m83(verificationID) => + static String m80(verificationID) => "Ось мій ідентифікатор підтвердження: ${verificationID} для ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "Гей, ви можете підтвердити, що це ваш ідентифікатор підтвердження: ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Реферальний код Ente: ${referralCode} \n\nЗастосуйте його в «Налаштування» → «Загальні» → «Реферали», щоб отримати ${referralStorageInGB} ГБ безплатно після переходу на платний тариф\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Поділитися з конкретними людьми', one: 'Поділитися з 1 особою', other: 'Поділитися з ${numberOfPeople} людьми')}"; - static String m86(emailIDs) => "Поділилися з ${emailIDs}"; + static String m84(emailIDs) => "Поділилися з ${emailIDs}"; - static String m87(fileType) => "Цей ${fileType} буде видалено з пристрою."; + static String m85(fileType) => "Цей ${fileType} буде видалено з пристрою."; - static String m88(fileType) => + static String m86(fileType) => "Цей ${fileType} знаходиться і в Ente, і на вашому пристрої."; - static String m89(fileType) => "Цей ${fileType} буде видалено з Ente."; + static String m87(fileType) => "Цей ${fileType} буде видалено з Ente."; - static String m1(storageAmountInGB) => "${storageAmountInGB} ГБ"; + static String m90(storageAmountInGB) => "${storageAmountInGB} ГБ"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} з ${totalAmount} ${totalStorageUnit} використано"; - static String m93(id) => + static String m92(id) => "Ваш ${id} вже пов\'язаний з іншим обліковим записом Ente.\nЯкщо ви хочете використовувати свій ${id} з цим обліковим записом, зверніться до нашої служби підтримки"; - static String m94(endDate) => "Вашу передплату буде скасовано ${endDate}"; + static String m93(endDate) => "Вашу передплату буде скасовано ${endDate}"; - static String m95(completed, total) => + static String m94(completed, total) => "${completed} / ${total} спогадів збережено"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Натисніть, щоб завантажити; завантаження наразі ігнорується через: ${ignoreReason}"; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "Вони також отримують ${storageAmountInGB} ГБ"; static String m97(email) => "Це ідентифікатор підтвердження пошти ${email}"; @@ -251,15 +227,12 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "Підтвердити ${email}"; - static String m109(count) => - "${Intl.plural(count, zero: 'Додано 0 користувачів', one: 'Додано 1 користувач', few: 'Додано ${count} користувача', many: 'Додано ${count} користувачів', other: 'Додано ${count} користувачів')}"; + static String m110(email) => "Ми надіслали листа на ${email}"; - static String m2(email) => "Ми надіслали листа на ${email}"; - - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: '${count} рік тому', few: '${count} роки тому', many: '${count} років тому', other: '${count} років тому')}"; - static String m112(storageSaved) => "Ви успішно звільнили ${storageSaved}!"; + static String m113(storageSaved) => "Ви успішно звільнили ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -283,11 +256,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Додати нову пошту"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Додати співавтора"), - "addCollaborators": m10, "addFiles": MessageLookupByLibrary.simpleMessage("Додати файли"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Додати з пристрою"), - "addItem": m11, "addLocation": MessageLookupByLibrary.simpleMessage("Додати розташування"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Додати"), @@ -300,7 +271,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Додати нову особу"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage("Подробиці доповнень"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Доповнення"), "addPhotos": MessageLookupByLibrary.simpleMessage("Додати фотографії"), "addSelected": MessageLookupByLibrary.simpleMessage("Додати вибране"), @@ -311,12 +282,11 @@ class MessageLookup extends MessageLookupByLibrary { "addTrustedContact": MessageLookupByLibrary.simpleMessage("Додати довірений контакт"), "addViewer": MessageLookupByLibrary.simpleMessage("Додати глядача"), - "addViewers": m13, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage("Додайте свої фотографії"), "addedAs": MessageLookupByLibrary.simpleMessage("Додано як"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("Додавання до обраного..."), "advanced": MessageLookupByLibrary.simpleMessage("Додатково"), @@ -327,7 +297,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("Через 1 тиждень"), "after1Year": MessageLookupByLibrary.simpleMessage("Через 1 рік"), "albumOwner": MessageLookupByLibrary.simpleMessage("Власник"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Назва альбому"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Альбом оновлено"), "albums": MessageLookupByLibrary.simpleMessage("Альбоми"), @@ -377,7 +347,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Блокування застосунку"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Виберіть між типовим екраном блокування вашого пристрою та власним екраном блокування з PIN-кодом або паролем."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("Застосувати"), "applyCodeTitle": @@ -460,7 +430,7 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "Автоматичне створення пари працює лише з пристроями, що підтримують Chromecast."), "available": MessageLookupByLibrary.simpleMessage("Доступно"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("Резервне копіювання тек"), "backup": MessageLookupByLibrary.simpleMessage("Резервне копіювання"), @@ -497,10 +467,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Скасувати відновлення"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "Ви впевнені, що хочете скасувати відновлення?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Скасувати передплату"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( "Не можна видалити спільні файли"), "castAlbum": MessageLookupByLibrary.simpleMessage("Транслювати альбом"), @@ -536,7 +506,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Отримайте безплатне сховище"), "claimMore": MessageLookupByLibrary.simpleMessage("Отримайте більше!"), "claimed": MessageLookupByLibrary.simpleMessage("Отримано"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("Очистити «Без категорії»"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -566,12 +536,12 @@ class MessageLookup extends MessageLookupByLibrary { "Створіть посилання, щоб дозволити людям додавати й переглядати фотографії у вашому спільному альбомі без використання застосунку Ente або облікового запису. Чудово підходить для збору фотографій з подій."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Спільне посилання"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Співавтор"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "Співавтори можуть додавати фотографії та відео до спільного альбому."), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("Макет"), "collageSaved": MessageLookupByLibrary.simpleMessage("Колаж збережено до галереї"), @@ -589,7 +559,7 @@ class MessageLookup extends MessageLookupByLibrary { "Ви впевнені, що хочете вимкнути двоетапну перевірку?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage( "Підтвердьте видалення облікового запису"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Так, я хочу безповоротно видалити цей обліковий запис та його дані з усіх застосунків."), "confirmPassword": @@ -602,10 +572,10 @@ class MessageLookup extends MessageLookupByLibrary { "Підтвердіть ваш ключ відновлення"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Під\'єднатися до пристрою"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage( "Звернутися до служби підтримки"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Контакти"), "contents": MessageLookupByLibrary.simpleMessage("Вміст"), "continueLabel": MessageLookupByLibrary.simpleMessage("Продовжити"), @@ -652,7 +622,7 @@ class MessageLookup extends MessageLookupByLibrary { "currentlyRunning": MessageLookupByLibrary.simpleMessage("зараз працює"), "custom": MessageLookupByLibrary.simpleMessage("Власне"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Темна"), "dayToday": MessageLookupByLibrary.simpleMessage("Сьогодні"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Вчора"), @@ -690,11 +660,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Видалити з пристрою"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Видалити з Ente"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Видалити розташування"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Видалити фото"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "Мені бракує ключової функції"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -733,7 +703,7 @@ class MessageLookup extends MessageLookupByLibrary { "Переглядачі все ще можуть робити знімки екрана або зберігати копію ваших фотографій за допомогою зовнішніх інструментів"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Зверніть увагу"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage( "Вимкнути двоетапну перевірку"), "disablingTwofactorAuthentication": @@ -776,9 +746,9 @@ class MessageLookup extends MessageLookupByLibrary { "downloadFailed": MessageLookupByLibrary.simpleMessage("Не вдалося завантажити"), "downloading": MessageLookupByLibrary.simpleMessage("Завантаження..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Редагувати"), "editLocation": MessageLookupByLibrary.simpleMessage("Змінити розташування"), @@ -792,8 +762,8 @@ class MessageLookup extends MessageLookupByLibrary { "eligible": MessageLookupByLibrary.simpleMessage("придатний"), "email": MessageLookupByLibrary.simpleMessage("Адреса електронної пошти"), - "emailChangedTo": m34, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailNoEnteAccount": m29, "emailVerificationToggle": MessageLookupByLibrary.simpleMessage("Підтвердження через пошту"), "emailYourLogs": MessageLookupByLibrary.simpleMessage( @@ -875,7 +845,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Експортувати дані"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage( "Знайдено додаткові фотографії"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Обличчя ще не згруповані, поверніться пізніше"), "faceRecognition": @@ -925,8 +895,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("Типи файлів"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("Типи та назви файлів"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("Файли видалено"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage("Файли збережено до галереї"), @@ -942,26 +912,24 @@ class MessageLookup extends MessageLookupByLibrary { "foundFaces": MessageLookupByLibrary.simpleMessage("Знайдені обличчя"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("Безплатне сховище отримано"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage( "Безплатне сховище можна використовувати"), "freeTrial": MessageLookupByLibrary.simpleMessage("Безплатний пробний період"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("Звільніть місце на пристрої"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Збережіть місце на вашому пристрої, очистивши файли, які вже збережено."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Звільнити місце"), - "freeUpSpaceSaving": m45, "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "До 1000 спогадів, показаних у галереї"), "general": MessageLookupByLibrary.simpleMessage("Загальні"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( "Створення ключів шифрування..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Перейти до налаштувань"), "googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"), @@ -1042,7 +1010,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Схоже, що щось пішло не так. Спробуйте ще раз через деякий час. Якщо помилка не зникне, зв\'яжіться з нашою командою підтримки."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Елементи показують кількість днів, що залишилися до остаточного видалення"), @@ -1066,7 +1034,7 @@ class MessageLookup extends MessageLookupByLibrary { "legacy": MessageLookupByLibrary.simpleMessage("Спадок"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Облікові записи «Спадку»"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "«Спадок» дозволяє довіреним контактам отримати доступ до вашого облікового запису під час вашої відсутності."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1079,7 +1047,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Досягнуто ліміту пристроїв"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Увімкнено"), "linkExpired": MessageLookupByLibrary.simpleMessage("Закінчився"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage( "Термін дії посилання закінчився"), "linkHasExpired": @@ -1176,7 +1144,6 @@ class MessageLookup extends MessageLookupByLibrary { "maps": MessageLookupByLibrary.simpleMessage("Мапи"), "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), - "memoryCount": m5, "merchandise": MessageLookupByLibrary.simpleMessage("Товари"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Об\'єднати з наявним"), @@ -1206,12 +1173,11 @@ class MessageLookup extends MessageLookupByLibrary { "moreDetails": MessageLookupByLibrary.simpleMessage("Детальніше"), "mostRecent": MessageLookupByLibrary.simpleMessage("Останні"), "mostRelevant": MessageLookupByLibrary.simpleMessage("Найактуальніші"), - "moveItem": m54, "moveToAlbum": MessageLookupByLibrary.simpleMessage("Перемістити до альбому"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage( "Перемістити до прихованого альбому"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("Переміщено у смітник"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( @@ -1263,10 +1229,10 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Немає результатів"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Нічого не знайдено"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage( "Не знайдено системного блокування"), - "notPersonLabel": m57, + "notPersonLabel": m52, "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Поки що з вами ніхто не поділився"), "nothingToSeeHere": MessageLookupByLibrary.simpleMessage( @@ -1276,7 +1242,7 @@ class MessageLookup extends MessageLookupByLibrary { "onDevice": MessageLookupByLibrary.simpleMessage("На пристрої"), "onEnte": MessageLookupByLibrary.simpleMessage("В Ente"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Тільки вони"), "oops": MessageLookupByLibrary.simpleMessage("От халепа"), "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( @@ -1316,7 +1282,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Пароль успішно змінено"), "passwordLock": MessageLookupByLibrary.simpleMessage("Блокування паролем"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "Надійність пароля розраховується з урахуванням довжини пароля, використаних символів, а також того, чи входить пароль у топ 10 000 найбільш використовуваних паролів"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1327,7 +1293,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Не вдалося оплатити"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "На жаль, ваш платіж не вдався. Зв\'яжіться зі службою підтримки і ми вам допоможемо!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Елементи на розгляді"), "pendingSync": @@ -1351,14 +1317,13 @@ class MessageLookup extends MessageLookupByLibrary { "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Додані вами фотографії будуть видалені з альбому"), - "photosCount": m64, "pickCenterPoint": MessageLookupByLibrary.simpleMessage("Вкажіть центральну точку"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Закріпити альбом"), "pinLock": MessageLookupByLibrary.simpleMessage("Блокування PIN-кодом"), "playOnTv": MessageLookupByLibrary.simpleMessage("Відтворити альбом на ТБ"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Передплата Play Store"), "pleaseCheckYourInternetConnectionAndTryAgain": @@ -1370,14 +1335,14 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Зверніться до служби підтримки, якщо проблема не зникне"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("Надайте дозволи"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Увійдіть знову"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Виберіть посилання для видалення"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Спробуйте ще раз"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1404,7 +1369,7 @@ class MessageLookup extends MessageLookupByLibrary { "privateSharing": MessageLookupByLibrary.simpleMessage("Приватне поширення"), "proceed": MessageLookupByLibrary.simpleMessage("Продовжити"), - "processingImport": m69, + "processingImport": m65, "publicLinkCreated": MessageLookupByLibrary.simpleMessage("Публічне посилання створено"), "publicLinkEnabled": MessageLookupByLibrary.simpleMessage( @@ -1415,7 +1380,7 @@ class MessageLookup extends MessageLookupByLibrary { "rateTheApp": MessageLookupByLibrary.simpleMessage("Оцініть застосунок"), "rateUs": MessageLookupByLibrary.simpleMessage("Оцініть нас"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "recover": MessageLookupByLibrary.simpleMessage("Відновити"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Відновити обліковий запис"), @@ -1424,7 +1389,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Відновити обліковий запис"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("Почато відновлення"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Ключ відновлення"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( "Ключ відновлення скопійовано в буфер обміну"), @@ -1438,12 +1403,12 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Ключ відновлення перевірено"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Ключ відновлення — це єдиний спосіб відновити фотографії, якщо ви забули пароль. Ви можете знайти свій ключ в розділі «Налаштування» > «Обліковий запис».\n\nВведіть ключ відновлення тут, щоб перевірити, чи правильно ви його зберегли."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("Відновлення успішне!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "Довірений контакт намагається отримати доступ до вашого облікового запису"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "Ваш пристрій недостатньо потужний для перевірки пароля, але ми можемо відновити його таким чином, щоб він працював на всіх пристроях.\n\nУвійдіть за допомогою ключа відновлення та відновіть свій пароль (за бажанням ви можете використати той самий ключ знову)."), "recreatePasswordTitle": @@ -1459,7 +1424,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("1. Дайте цей код друзям"), "referralStep2": MessageLookupByLibrary.simpleMessage( "2. Вони оформлюють передплату"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Реферали"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage("Реферали зараз призупинені"), @@ -1491,7 +1456,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Вилучити посилання"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Видалити учасника"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Видалити мітку особи"), "removePublicLink": @@ -1513,7 +1478,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Перейменувати файл"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Поновити передплату"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Повідомити про помилку"), "reportBug": @@ -1593,8 +1558,8 @@ class MessageLookup extends MessageLookupByLibrary { "Запросіть людей, і ви побачите всі фотографії, якими вони поділилися, тут"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "Люди будуть показані тут після завершення оброблення та синхронізації"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Безпека"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( "Посилання на публічні альбоми в застосунку"), @@ -1626,8 +1591,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Вибрані елементи будуть видалені з усіх альбомів і переміщені в смітник."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, "send": MessageLookupByLibrary.simpleMessage("Надіслати"), "sendEmail": MessageLookupByLibrary.simpleMessage( "Надіслати електронного листа"), @@ -1664,16 +1629,16 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Поділитися альбомом зараз"), "shareLink": MessageLookupByLibrary.simpleMessage("Поділитися посиланням"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Поділіться тільки з тими людьми, якими ви хочете"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Завантажте Ente для того, щоб легко поділитися фотографіями оригінальної якості та відео\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Поділитися з користувачами без Ente"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage( "Поділитися вашим першим альбомом"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1684,7 +1649,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Нові спільні фотографії"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Отримувати сповіщення, коли хтось додасть фото до спільного альбому, в якому ви перебуваєте"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Поділитися зі мною"), "sharedWithYou": @@ -1701,11 +1666,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Вийти на інших пристроях"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Я приймаю умови використання і політику приватності"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Воно буде видалено з усіх альбомів."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Пропустити"), "social": MessageLookupByLibrary.simpleMessage("Соцмережі"), "someItemsAreInBothEnteAndYourDevice": @@ -1753,13 +1718,13 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("Сховище"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Сім\'я"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Ви"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Перевищено ліміт сховища"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "strongStrength": MessageLookupByLibrary.simpleMessage("Надійний"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Передплачувати"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Вам потрібна активна передплата, щоб увімкнути спільне поширення."), @@ -1776,7 +1741,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("Запропонувати нові функції"), "support": MessageLookupByLibrary.simpleMessage("Підтримка"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Синхронізацію зупинено"), "syncing": MessageLookupByLibrary.simpleMessage("Синхронізуємо..."), @@ -1789,7 +1754,7 @@ class MessageLookup extends MessageLookupByLibrary { "Торкніться, щоби розблокувати"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Натисніть, щоб завантажити"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Схоже, що щось пішло не так. Спробуйте ще раз через деякий час. Якщо помилка не зникне, зв\'яжіться з нашою командою підтримки."), "terminate": MessageLookupByLibrary.simpleMessage("Припинити"), @@ -1812,7 +1777,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Ці елементи будуть видалені з пристрою."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Вони будуть видалені з усіх альбомів."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1956,7 +1921,6 @@ class MessageLookup extends MessageLookupByLibrary { "viewRecoveryKey": MessageLookupByLibrary.simpleMessage( "Переглянути ключ відновлення"), "viewer": MessageLookupByLibrary.simpleMessage("Глядач"), - "viewersSuccessfullyAdded": m109, "visitWebToManage": MessageLookupByLibrary.simpleMessage( "Відвідайте web.ente.io, щоб керувати передплатою"), "waitingForVerification": @@ -1969,7 +1933,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Ми не підтримуємо редагування фотографій та альбомів, якими ви ще не володієте"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Слабкий"), "welcomeBack": MessageLookupByLibrary.simpleMessage("З поверненням!"), "whatsNew": MessageLookupByLibrary.simpleMessage("Що нового"), @@ -1977,7 +1941,7 @@ class MessageLookup extends MessageLookupByLibrary { "Довірений контакт може допомогти у відновленні ваших даних."), "yearShort": MessageLookupByLibrary.simpleMessage("рік"), "yearly": MessageLookupByLibrary.simpleMessage("Щороку"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Так"), "yesCancel": MessageLookupByLibrary.simpleMessage("Так, скасувати"), "yesConvertToViewer": @@ -2010,7 +1974,7 @@ class MessageLookup extends MessageLookupByLibrary { "Ви не можете поділитися із собою"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "У вас немає жодних архівних елементів."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage( "Ваш обліковий запис видалено"), "yourMap": MessageLookupByLibrary.simpleMessage("Ваша мапа"), diff --git a/mobile/lib/generated/intl/messages_vi.dart b/mobile/lib/generated/intl/messages_vi.dart index a92e5d66aa..dbf0baf6db 100644 --- a/mobile/lib/generated/intl/messages_vi.dart +++ b/mobile/lib/generated/intl/messages_vi.dart @@ -20,37 +20,28 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'vi'; - static String m10(count) => - "${Intl.plural(count, zero: 'Thêm cộng tác viên', one: 'Thêm cộng tác viên', other: 'Thêm cộng tác viên')}"; - - static String m11(count) => - "${Intl.plural(count, one: 'Thêm mục', other: 'Thêm các mục')}"; - - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "Gói bổ sung ${storageAmount} của bạn có hiệu lực đến ${endDate}"; - static String m13(count) => - "${Intl.plural(count, zero: 'Thêm người xem', one: 'Thêm người xem', other: 'Thêm người xem')}"; + static String m5(emailOrName) => "Được thêm bởi ${emailOrName}"; - static String m14(emailOrName) => "Được thêm bởi ${emailOrName}"; + static String m6(albumName) => "Đã thêm thành công vào ${albumName}"; - static String m15(albumName) => "Đã thêm thành công vào ${albumName}"; - - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: 'Không có người tham gia', one: '1 người tham gia', other: '${count} Người tham gia')}"; - static String m18(versionValue) => "Phiên bản: ${versionValue}"; + static String m9(versionValue) => "Phiên bản: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} còn trống"; - static String m20(paymentProvider) => + static String m12(paymentProvider) => "Vui lòng hủy đăng ký hiện tại của bạn từ ${paymentProvider} trước"; - static String m3(user) => + static String m13(user) => "${user} sẽ không thể thêm ảnh mới vào album này\n\nHọ vẫn có thể xóa các ảnh đã thêm trước đó"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': 'Gia đình bạn đã yêu cầu ${storageAmountInGb} GB cho đến nay', @@ -58,182 +49,167 @@ class MessageLookup extends MessageLookupByLibrary { 'other': 'Bạn đã yêu cầu ${storageAmountInGb} GB cho đến nay!', })}"; - static String m22(albumName) => + static String m15(albumName) => "Liên kết hợp tác đã được tạo cho ${albumName}"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: 'Đã thêm 0 cộng tác viên', one: 'Đã thêm 1 cộng tác viên', other: 'Đã thêm ${count} cộng tác viên')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "Bạn sắp thêm ${email} làm liên hệ tin cậy. Họ sẽ có thể khôi phục tài khoản của bạn nếu bạn không hoạt động trong ${numOfDays} ngày."; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "Vui lòng liên hệ với ${familyAdminEmail} để quản lý đăng ký của bạn"; - static String m26(provider) => + static String m19(provider) => "Vui lòng liên hệ với chúng tôi tại support@ente.io để quản lý đăng ký ${provider} của bạn."; - static String m27(endpoint) => "Đã kết nối với ${endpoint}"; + static String m20(endpoint) => "Đã kết nối với ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: 'Xóa ${count} mục', other: 'Xóa ${count} mục')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "Đang xóa ${currentlyDeleting} / ${totalCount}"; - static String m30(albumName) => + static String m23(albumName) => "Điều này sẽ xóa liên kết công khai để truy cập \"${albumName}\"."; - static String m31(supportEmail) => + static String m24(supportEmail) => "Vui lòng gửi email đến ${supportEmail} từ địa chỉ email đã đăng ký của bạn"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "Bạn đã dọn dẹp ${Intl.plural(count, one: '${count} tệp trùng lặp', other: '${count} tệp trùng lặp')}, tiết kiệm (${storageSaved}!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} tệp, ${formattedSize} mỗi tệp"; - static String m34(newEmail) => "Email đã được thay đổi thành ${newEmail}"; + static String m27(newEmail) => "Email đã được thay đổi thành ${newEmail}"; - static String m36(email) => + static String m29(email) => "${email} không có tài khoản Ente.\n\nGửi cho họ một lời mời để chia sẻ ảnh."; - static String m38(text) => "Extra photos found for ${text}"; + static String m31(text) => "Extra photos found for ${text}"; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "${Intl.plural(count, one: '1 tệp', other: '${formattedNumber} tệp')} trên thiết bị này đã được sao lưu an toàn"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "${Intl.plural(count, one: '1 tệp', other: '${formattedNumber} tệp')} trong album này đã được sao lưu an toàn"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "${storageAmountInGB} GB mỗi khi ai đó đăng ký gói trả phí và áp dụng mã của bạn"; - static String m42(endDate) => "Dùng thử miễn phí có hiệu lực đến ${endDate}"; + static String m36(endDate) => "Dùng thử miễn phí có hiệu lực đến ${endDate}"; - static String m43(count) => - "Bạn vẫn có thể truy cập ${Intl.plural(count, one: 'nó', other: 'chúng')} trên Ente miễn là bạn có một đăng ký hoạt động"; + static String m38(sizeInMBorGB) => "Giải phóng ${sizeInMBorGB}"; - static String m44(sizeInMBorGB) => "Giải phóng ${sizeInMBorGB}"; - - static String m45(count, formattedSize) => - "${Intl.plural(count, one: 'Nó có thể được xóa khỏi thiết bị để giải phóng ${formattedSize}', other: 'Chúng có thể được xóa khỏi thiết bị để giải phóng ${formattedSize}')}"; - - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "Đang xử lý ${currentlyProcessing} / ${totalCount}"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} mục', other: '${count} mục')}"; - static String m50(email) => + static String m44(email) => "${email} đã mời bạn trở thành một liên hệ tin cậy"; - static String m51(expiryTime) => "Liên kết sẽ hết hạn vào ${expiryTime}"; + static String m45(expiryTime) => "Liên kết sẽ hết hạn vào ${expiryTime}"; - static String m5(count, formattedCount) => - "${Intl.plural(count, zero: 'không có kỷ niệm', one: '${formattedCount} kỷ niệm', other: '${formattedCount} kỷ niệm')}"; + static String m50(albumName) => "Đã di chuyển thành công đến ${albumName}"; - static String m54(count) => - "${Intl.plural(count, one: 'Di chuyển mục', other: 'Di chuyển các mục')}"; + static String m51(personName) => "Không có gợi ý cho ${personName}"; - static String m55(albumName) => "Đã di chuyển thành công đến ${albumName}"; + static String m52(name) => "Không phải ${name}?"; - static String m56(personName) => "Không có gợi ý cho ${personName}"; - - static String m57(name) => "Không phải ${name}?"; - - static String m58(familyAdminEmail) => + static String m53(familyAdminEmail) => "Vui lòng liên hệ ${familyAdminEmail} để thay đổi mã của bạn."; - static String m0(passwordStrengthValue) => + static String m55(passwordStrengthValue) => "Độ mạnh mật khẩu: ${passwordStrengthValue}"; - static String m60(providerName) => + static String m56(providerName) => "Vui lòng nói chuyện với bộ phận hỗ trợ ${providerName} nếu bạn đã bị tính phí"; - static String m64(count) => - "${Intl.plural(count, zero: 'không có hình ảnh', one: '1 hình ảnh', other: '${count} hình ảnh')}"; - - static String m65(endDate) => + static String m61(endDate) => "Dùng thử miễn phí có hiệu lực đến ${endDate}.\nBạn có thể chọn gói trả phí sau đó."; - static String m66(toEmail) => + static String m62(toEmail) => "Vui lòng gửi email cho chúng tôi tại ${toEmail}"; - static String m67(toEmail) => "Vui lòng gửi nhật ký đến \n${toEmail}"; + static String m63(toEmail) => "Vui lòng gửi nhật ký đến \n${toEmail}"; - static String m69(folderName) => "Đang xử lý ${folderName}..."; + static String m65(folderName) => "Đang xử lý ${folderName}..."; - static String m70(storeName) => "Đánh giá chúng tôi trên ${storeName}"; + static String m66(storeName) => "Đánh giá chúng tôi trên ${storeName}"; - static String m72(days, email) => + static String m68(days, email) => "Bạn có thể truy cập tài khoản sau ${days} ngày. Một thông báo sẽ được gửi đến ${email}."; - static String m73(email) => + static String m69(email) => "Bạn có thể khôi phục tài khoản của ${email} bằng cách đặt lại mật khẩu mới."; - static String m74(email) => + static String m70(email) => "${email} đang cố gắng khôi phục tài khoản của bạn."; - static String m75(storageInGB) => + static String m71(storageInGB) => "3. Cả hai bạn đều nhận ${storageInGB} GB* miễn phí"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} sẽ bị xóa khỏi album chia sẻ này\n\nBất kỳ ảnh nào được thêm bởi họ cũng sẽ bị xóa khỏi album"; - static String m77(endDate) => "Đăng ký sẽ được gia hạn vào ${endDate}"; + static String m73(endDate) => "Đăng ký sẽ được gia hạn vào ${endDate}"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, one: '${count} kết quả được tìm thấy', other: '${count} kết quả được tìm thấy')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "Độ dài các phần không khớp: ${snapshotLength} != ${searchLength}"; - static String m6(count) => "${count} đã chọn"; + static String m77(count) => "${count} đã chọn"; - static String m81(count, yourCount) => + static String m78(count, yourCount) => "${count} đã chọn (${yourCount} của bạn)"; - static String m83(verificationID) => + static String m80(verificationID) => "Đây là ID xác minh của tôi: ${verificationID} cho ente.io."; - static String m7(verificationID) => + static String m81(verificationID) => "Chào, bạn có thể xác nhận rằng đây là ID xác minh ente.io của bạn: ${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Mã giới thiệu Ente: ${referralCode} \n\nÁp dụng nó trong Cài đặt → Chung → Giới thiệu để nhận ${referralStorageInGB} GB miễn phí sau khi bạn đăng ký gói trả phí\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: 'Chia sẻ với những người cụ thể', one: 'Chia sẻ với 1 người', other: 'Chia sẻ với ${numberOfPeople} người')}"; - static String m86(emailIDs) => "Chia sẻ với ${emailIDs}"; + static String m84(emailIDs) => "Chia sẻ với ${emailIDs}"; - static String m87(fileType) => + static String m85(fileType) => "Tệp ${fileType} này sẽ bị xóa khỏi thiết bị của bạn."; - static String m88(fileType) => + static String m86(fileType) => "Tệp ${fileType} này có trong cả Ente và thiết bị của bạn."; - static String m89(fileType) => "Tệp ${fileType} này sẽ bị xóa khỏi Ente."; + static String m87(fileType) => "Tệp ${fileType} này sẽ bị xóa khỏi Ente."; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "${usedAmount} ${usedStorageUnit} trong tổng số ${totalAmount} ${totalStorageUnit} đã sử dụng"; - static String m93(id) => + static String m92(id) => "ID ${id} của bạn đã được liên kết với một tài khoản Ente khác.\nNếu bạn muốn sử dụng ID ${id} này với tài khoản này, vui lòng liên hệ với bộ phận hỗ trợ của chúng tôi."; - static String m94(endDate) => "Đăng ký của bạn sẽ bị hủy vào ${endDate}"; + static String m93(endDate) => "Đăng ký của bạn sẽ bị hủy vào ${endDate}"; - static String m95(completed, total) => + static String m94(completed, total) => "${completed}/${total} kỷ niệm đã được lưu giữ"; - static String m96(ignoreReason) => + static String m95(ignoreReason) => "Nhấn để tải lên, tải lên hiện tại bị bỏ qua do ${ignoreReason}"; - static String m8(storageAmountInGB) => + static String m96(storageAmountInGB) => "Họ cũng nhận được ${storageAmountInGB} GB"; static String m97(email) => "Đây là ID xác minh của ${email}"; @@ -255,16 +231,13 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "Xác minh ${email}"; - static String m109(count) => - "${Intl.plural(count, zero: 'Đã thêm 0 người xem', one: 'Đã thêm 1 người xem', other: 'Đã thêm ${count} người xem')}"; - - static String m2(email) => + static String m110(email) => "Chúng tôi đã gửi một email đến ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: '${count} năm trước', other: '${count} năm trước')}"; - static String m112(storageSaved) => + static String m113(storageSaved) => "Bạn đã giải phóng thành công ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); @@ -289,11 +262,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Thêm một email mới"), "addCollaborator": MessageLookupByLibrary.simpleMessage("Thêm cộng tác viên"), - "addCollaborators": m10, "addFiles": MessageLookupByLibrary.simpleMessage("Thêm tệp"), "addFromDevice": MessageLookupByLibrary.simpleMessage("Thêm từ thiết bị"), - "addItem": m11, "addLocation": MessageLookupByLibrary.simpleMessage("Thêm vị trí"), "addLocationButton": MessageLookupByLibrary.simpleMessage("Thêm"), "addMore": MessageLookupByLibrary.simpleMessage("Thêm nữa"), @@ -304,7 +275,7 @@ class MessageLookup extends MessageLookupByLibrary { "addNewPerson": MessageLookupByLibrary.simpleMessage("Thêm người mới"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage( "Chi tiết về tiện ích mở rộng"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("Tiện ích mở rộng"), "addPhotos": MessageLookupByLibrary.simpleMessage("Thêm ảnh"), "addSelected": MessageLookupByLibrary.simpleMessage("Thêm đã chọn"), @@ -315,12 +286,11 @@ class MessageLookup extends MessageLookupByLibrary { "addTrustedContact": MessageLookupByLibrary.simpleMessage("Thêm liên hệ tin cậy"), "addViewer": MessageLookupByLibrary.simpleMessage("Thêm người xem"), - "addViewers": m13, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage( "Thêm ảnh của bạn ngay bây giờ"), "addedAs": MessageLookupByLibrary.simpleMessage("Đã thêm như"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage( "Đang thêm vào mục yêu thích..."), "advanced": MessageLookupByLibrary.simpleMessage("Nâng cao"), @@ -331,7 +301,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("Sau 1 tuần"), "after1Year": MessageLookupByLibrary.simpleMessage("Sau 1 năm"), "albumOwner": MessageLookupByLibrary.simpleMessage("Chủ sở hữu"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("Tiêu đề album"), "albumUpdated": MessageLookupByLibrary.simpleMessage("Album đã được cập nhật"), @@ -380,7 +350,7 @@ class MessageLookup extends MessageLookupByLibrary { "appLock": MessageLookupByLibrary.simpleMessage("Khóa ứng dụng"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "Chọn giữa màn hình khóa mặc định của thiết bị và màn hình khóa tùy chỉnh với PIN hoặc mật khẩu."), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("ID Apple"), "apply": MessageLookupByLibrary.simpleMessage("Áp dụng"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Áp dụng mã"), @@ -462,7 +432,7 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage( "Ghép nối tự động chỉ hoạt động với các thiết bị hỗ trợ Chromecast."), "available": MessageLookupByLibrary.simpleMessage("Có sẵn"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("Thư mục đã sao lưu"), "backup": MessageLookupByLibrary.simpleMessage("Sao lưu"), @@ -502,10 +472,10 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Hủy khôi phục"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage( "Bạn có chắc chắn muốn hủy khôi phục không?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("Hủy đăng ký"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage( "Không thể xóa các tệp đã chia sẻ"), "castAlbum": MessageLookupByLibrary.simpleMessage("Phát album"), @@ -540,7 +510,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Yêu cầu lưu trữ miễn phí"), "claimMore": MessageLookupByLibrary.simpleMessage("Yêu cầu thêm!"), "claimed": MessageLookupByLibrary.simpleMessage("Đã yêu cầu"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("Dọn dẹp chưa phân loại"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage( @@ -569,12 +539,12 @@ class MessageLookup extends MessageLookupByLibrary { "Tạo một liên kết để cho phép mọi người thêm và xem ảnh trong album chia sẻ của bạn mà không cần ứng dụng hoặc tài khoản Ente. Tuyệt vời để thu thập ảnh sự kiện."), "collaborativeLink": MessageLookupByLibrary.simpleMessage("Liên kết hợp tác"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("Cộng tác viên"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage( "Cộng tác viên có thể thêm ảnh và video vào album chia sẻ."), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("Bố cục"), "collageSaved": MessageLookupByLibrary.simpleMessage( "Ảnh ghép đã được lưu vào thư viện"), @@ -591,7 +561,7 @@ class MessageLookup extends MessageLookupByLibrary { "Bạn có chắc chắn muốn vô hiệu hóa xác thực hai yếu tố không?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage("Xác nhận xóa tài khoản"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( "Có, tôi muốn xóa vĩnh viễn tài khoản này và dữ liệu của nó trên tất cả các ứng dụng."), "confirmPassword": @@ -604,10 +574,10 @@ class MessageLookup extends MessageLookupByLibrary { "Xác nhận khóa khôi phục của bạn"), "connectToDevice": MessageLookupByLibrary.simpleMessage("Kết nối với thiết bị"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("Liên hệ hỗ trợ"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("Danh bạ"), "contents": MessageLookupByLibrary.simpleMessage("Nội dung"), "continueLabel": MessageLookupByLibrary.simpleMessage("Tiếp tục"), @@ -651,7 +621,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Sử dụng hiện tại là "), "currentlyRunning": MessageLookupByLibrary.simpleMessage("đang chạy"), "custom": MessageLookupByLibrary.simpleMessage("Tùy chỉnh"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("Tối"), "dayToday": MessageLookupByLibrary.simpleMessage("Hôm nay"), "dayYesterday": MessageLookupByLibrary.simpleMessage("Hôm qua"), @@ -687,10 +657,10 @@ class MessageLookup extends MessageLookupByLibrary { "deleteFromDevice": MessageLookupByLibrary.simpleMessage("Xóa khỏi thiết bị"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("Xóa khỏi Ente"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("Xóa vị trí"), "deletePhotos": MessageLookupByLibrary.simpleMessage("Xóa ảnh"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage( "Nó thiếu một tính năng quan trọng mà tôi cần"), "deleteReason2": MessageLookupByLibrary.simpleMessage( @@ -728,7 +698,7 @@ class MessageLookup extends MessageLookupByLibrary { "Người xem vẫn có thể chụp màn hình hoặc lưu bản sao ảnh của bạn bằng các công cụ bên ngoài"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("Xin lưu ý"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage( "Vô hiệu hóa xác thực hai yếu tố"), "disablingTwofactorAuthentication": @@ -770,9 +740,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Tải xuống thất bại"), "downloading": MessageLookupByLibrary.simpleMessage("Đang tải xuống..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("Chỉnh sửa"), "editLocation": MessageLookupByLibrary.simpleMessage("Chỉnh sửa vị trí"), @@ -788,8 +758,8 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("Email"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage("Email đã được đăng kí."), - "emailChangedTo": m34, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage("Email chưa được đăng kí."), "emailVerificationToggle": @@ -870,7 +840,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Xuất dữ liệu của bạn"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage("Tìm thấy ảnh bổ sung"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage( "Khuôn mặt chưa được phân cụm, vui lòng quay lại sau"), "faceRecognition": @@ -919,8 +889,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileTypes": MessageLookupByLibrary.simpleMessage("Loại tệp"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("Loại tệp và tên"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("Tệp đã bị xóa"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage( "Các tệp đã được lưu vào thư viện"), @@ -936,27 +906,25 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Đã tìm thấy khuôn mặt"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("Lưu trữ miễn phí đã yêu cầu"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage( "Lưu trữ miễn phí có thể sử dụng"), "freeTrial": MessageLookupByLibrary.simpleMessage("Dùng thử miễn phí"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage( "Giải phóng không gian thiết bị"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage( "Tiết kiệm không gian trên thiết bị của bạn bằng cách xóa các tệp đã được sao lưu."), "freeUpSpace": MessageLookupByLibrary.simpleMessage("Giải phóng không gian"), - "freeUpSpaceSaving": m45, "gallery": MessageLookupByLibrary.simpleMessage("Thư viện"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( "Tối đa 1000 kỷ niệm được hiển thị trong thư viện"), "general": MessageLookupByLibrary.simpleMessage("Chung"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage("Đang tạo khóa mã hóa..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("Đi đến cài đặt"), "googlePlayId": MessageLookupByLibrary.simpleMessage("ID Google Play"), "grantFullAccessPrompt": MessageLookupByLibrary.simpleMessage( @@ -1037,7 +1005,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "Có vẻ như đã xảy ra sự cố. Vui lòng thử lại sau một thời gian. Nếu lỗi vẫn tiếp diễn, vui lòng liên hệ với đội ngũ hỗ trợ của chúng tôi."), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage( "Các mục cho biết số ngày còn lại trước khi xóa vĩnh viễn"), @@ -1067,7 +1035,7 @@ class MessageLookup extends MessageLookupByLibrary { "legacy": MessageLookupByLibrary.simpleMessage("Thừa kế"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("Tài khoản thừa kế"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage( "Thừa kế cho phép các liên hệ tin cậy truy cập tài khoản của bạn khi bạn không hoạt động."), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -1080,7 +1048,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Giới hạn thiết bị"), "linkEnabled": MessageLookupByLibrary.simpleMessage("Đã bật"), "linkExpired": MessageLookupByLibrary.simpleMessage("Hết hạn"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("Hết hạn liên kết"), "linkHasExpired": MessageLookupByLibrary.simpleMessage("Liên kết đã hết hạn"), @@ -1172,7 +1140,6 @@ class MessageLookup extends MessageLookupByLibrary { "maps": MessageLookupByLibrary.simpleMessage("Bản đồ"), "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), - "memoryCount": m5, "merchandise": MessageLookupByLibrary.simpleMessage("Merchandise"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("Hợp nhất với người đã có"), @@ -1200,11 +1167,10 @@ class MessageLookup extends MessageLookupByLibrary { "moreDetails": MessageLookupByLibrary.simpleMessage("Thêm chi tiết"), "mostRecent": MessageLookupByLibrary.simpleMessage("Mới nhất"), "mostRelevant": MessageLookupByLibrary.simpleMessage("Liên quan nhất"), - "moveItem": m54, "moveToAlbum": MessageLookupByLibrary.simpleMessage("Chuyển đến album"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("Di chuyển đến album ẩn"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("Đã chuyển vào thùng rác"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( @@ -1257,10 +1223,10 @@ class MessageLookup extends MessageLookupByLibrary { "noResults": MessageLookupByLibrary.simpleMessage("Không có kết quả"), "noResultsFound": MessageLookupByLibrary.simpleMessage("Không tìm thấy kết quả"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage( "Không tìm thấy khóa hệ thống"), - "notPersonLabel": m57, + "notPersonLabel": m52, "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage( "Chưa có gì được chia sẻ với bạn"), "nothingToSeeHere": MessageLookupByLibrary.simpleMessage( @@ -1270,7 +1236,7 @@ class MessageLookup extends MessageLookupByLibrary { "onDevice": MessageLookupByLibrary.simpleMessage("Trên thiết bị"), "onEnte": MessageLookupByLibrary.simpleMessage( "Trên ente"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("Chỉ họ"), "oops": MessageLookupByLibrary.simpleMessage("Ôi"), "oopsCouldNotSaveEdits": @@ -1307,7 +1273,7 @@ class MessageLookup extends MessageLookupByLibrary { "Đã thay đổi mật khẩu thành công"), "passwordLock": MessageLookupByLibrary.simpleMessage("Khóa bằng mật khẩu"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "Độ mạnh của mật khẩu được tính toán dựa trên độ dài của mật khẩu, các ký tự đã sử dụng và liệu mật khẩu có xuất hiện trong 10.000 mật khẩu được sử dụng nhiều nhất hay không"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1318,7 +1284,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Thanh toán thất bại"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "Rất tiếc, thanh toán của bạn đã thất bại. Vui lòng liên hệ với bộ phận hỗ trợ và chúng tôi sẽ giúp bạn!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("Các mục đang chờ"), "pendingSync": @@ -1341,13 +1307,12 @@ class MessageLookup extends MessageLookupByLibrary { "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage( "Ảnh bạn đã thêm sẽ bị xóa khỏi album"), - "photosCount": m64, "pickCenterPoint": MessageLookupByLibrary.simpleMessage("Chọn điểm trung tâm"), "pinAlbum": MessageLookupByLibrary.simpleMessage("Ghim album"), "pinLock": MessageLookupByLibrary.simpleMessage("Khóa PIN"), "playOnTv": MessageLookupByLibrary.simpleMessage("Phát album trên TV"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playstoreSubscription": MessageLookupByLibrary.simpleMessage("Đăng ký PlayStore"), "pleaseCheckYourInternetConnectionAndTryAgain": @@ -1359,14 +1324,14 @@ class MessageLookup extends MessageLookupByLibrary { "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage( "Vui lòng liên hệ với bộ phận hỗ trợ nếu vấn đề vẫn tiếp diễn"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("Vui lòng cấp quyền"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("Vui lòng đăng nhập lại"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage( "Vui lòng chọn liên kết nhanh để xóa"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("Vui lòng thử lại"), "pleaseVerifyTheCodeYouHaveEntered": @@ -1395,7 +1360,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Chia sẻ riêng tư"), "proceed": MessageLookupByLibrary.simpleMessage("Tiếp tục"), "processed": MessageLookupByLibrary.simpleMessage("Đã xử lý"), - "processingImport": m69, + "processingImport": m65, "publicLinkCreated": MessageLookupByLibrary.simpleMessage( "Liên kết công khai đã được tạo"), "publicLinkEnabled": MessageLookupByLibrary.simpleMessage( @@ -1405,7 +1370,7 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("Tạo vé"), "rateTheApp": MessageLookupByLibrary.simpleMessage("Đánh giá ứng dụng"), "rateUs": MessageLookupByLibrary.simpleMessage("Đánh giá chúng tôi"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "recover": MessageLookupByLibrary.simpleMessage("Khôi phục"), "recoverAccount": MessageLookupByLibrary.simpleMessage("Khôi phục tài khoản"), @@ -1414,7 +1379,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Khôi phục tài khoản"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage( "Quá trình khôi phục đã được khởi động"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("Khóa khôi phục"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( "Khóa khôi phục đã được sao chép vào clipboard"), @@ -1428,12 +1393,12 @@ class MessageLookup extends MessageLookupByLibrary { "Khóa khôi phục đã được xác minh"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "Khóa khôi phục của bạn là cách duy nhất để khôi phục ảnh của bạn nếu bạn quên mật khẩu. Bạn có thể tìm thấy khóa khôi phục của mình trong Cài đặt > Tài khoản.\n\nVui lòng nhập khóa khôi phục của bạn ở đây để xác minh rằng bạn đã lưu nó đúng cách."), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("Khôi phục thành công!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage( "Một liên hệ tin cậy đang cố gắng truy cập tài khoản của bạn"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "Thiết bị hiện tại không đủ mạnh để xác minh mật khẩu của bạn, nhưng chúng tôi có thể tạo lại theo cách hoạt động với tất cả các thiết bị.\n\nVui lòng đăng nhập bằng khóa khôi phục của bạn và tạo lại mật khẩu (bạn có thể sử dụng lại mật khẩu cũ nếu muốn)."), "recreatePasswordTitle": @@ -1448,7 +1413,7 @@ class MessageLookup extends MessageLookupByLibrary { "1. Đưa mã này cho bạn bè của bạn"), "referralStep2": MessageLookupByLibrary.simpleMessage("2. Họ đăng ký gói trả phí"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("Giới thiệu"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( "Giới thiệu hiện đang tạm dừng"), @@ -1477,7 +1442,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeLink": MessageLookupByLibrary.simpleMessage("Xóa liên kết"), "removeParticipant": MessageLookupByLibrary.simpleMessage("Xóa người tham gia"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("Xóa nhãn người"), "removePublicLink": @@ -1496,7 +1461,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameFile": MessageLookupByLibrary.simpleMessage("Đổi tên tệp"), "renewSubscription": MessageLookupByLibrary.simpleMessage("Gia hạn đăng ký"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("Báo cáo lỗi"), "reportBug": MessageLookupByLibrary.simpleMessage("Báo cáo lỗi"), "resendEmail": MessageLookupByLibrary.simpleMessage("Gửi lại email"), @@ -1572,8 +1537,8 @@ class MessageLookup extends MessageLookupByLibrary { "Mời mọi người, và bạn sẽ thấy tất cả ảnh được chia sẻ bởi họ ở đây"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage( "Người sẽ được hiển thị ở đây sau khi hoàn tất xử lý và đồng bộ"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("Bảo mật"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage( "Xem liên kết album công khai trong ứng dụng"), @@ -1606,8 +1571,8 @@ class MessageLookup extends MessageLookupByLibrary { "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": MessageLookupByLibrary.simpleMessage( "Các mục đã chọn sẽ bị xóa khỏi tất cả các album và chuyển vào thùng rác."), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, "send": MessageLookupByLibrary.simpleMessage("Gửi"), "sendEmail": MessageLookupByLibrary.simpleMessage("Gửi email"), "sendInvite": MessageLookupByLibrary.simpleMessage("Gửi lời mời"), @@ -1638,16 +1603,16 @@ class MessageLookup extends MessageLookupByLibrary { "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage( "Chia sẻ một album ngay bây giờ"), "shareLink": MessageLookupByLibrary.simpleMessage("Chia sẻ liên kết"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( "Chia sẻ chỉ với những người bạn muốn"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( "Tải Ente để chúng ta có thể dễ dàng chia sẻ ảnh và video chất lượng gốc\n\nhttps://ente.io"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( "Chia sẻ với người dùng không phải Ente"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage( "Chia sẻ album đầu tiên của bạn"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1659,7 +1624,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Ảnh chia sẻ mới"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage( "Nhận thông báo khi ai đó thêm ảnh vào album chia sẻ mà bạn tham gia"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("Chia sẻ với tôi"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("Được chia sẻ với bạn"), @@ -1675,11 +1640,11 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Đăng xuất các thiết bị khác"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "Tôi đồng ý với các điều khoản dịch vụchính sách bảo mật"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( "Nó sẽ bị xóa khỏi tất cả các album."), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("Bỏ qua"), "social": MessageLookupByLibrary.simpleMessage("Xã hội"), "someItemsAreInBothEnteAndYourDevice": @@ -1726,13 +1691,13 @@ class MessageLookup extends MessageLookupByLibrary { "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("Gia đình"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("Bạn"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("Vượt quá giới hạn lưu trữ"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "strongStrength": MessageLookupByLibrary.simpleMessage("Mạnh"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("Đăng ký"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( "Bạn cần một đăng ký trả phí hoạt động để kích hoạt chia sẻ."), @@ -1749,7 +1714,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("Gợi ý tính năng"), "support": MessageLookupByLibrary.simpleMessage("Hỗ trợ"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("Đồng bộ hóa đã dừng"), "syncing": MessageLookupByLibrary.simpleMessage("Đang đồng bộ hóa..."), @@ -1759,7 +1724,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("Chạm để nhập mã"), "tapToUnlock": MessageLookupByLibrary.simpleMessage("Nhấn để mở khóa"), "tapToUpload": MessageLookupByLibrary.simpleMessage("Nhấn để tải lên"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "Có vẻ như đã xảy ra sự cố. Vui lòng thử lại sau một thời gian. Nếu lỗi vẫn tiếp diễn, vui lòng liên hệ với đội ngũ hỗ trợ."), "terminate": MessageLookupByLibrary.simpleMessage("Kết thúc"), @@ -1783,7 +1748,7 @@ class MessageLookup extends MessageLookupByLibrary { "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage( "Các mục này sẽ bị xóa khỏi thiết bị của bạn."), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( "Chúng sẽ bị xóa khỏi tất cả các album."), "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( @@ -1924,7 +1889,6 @@ class MessageLookup extends MessageLookupByLibrary { "viewRecoveryKey": MessageLookupByLibrary.simpleMessage("Xem khóa khôi phục"), "viewer": MessageLookupByLibrary.simpleMessage("Người xem"), - "viewersSuccessfullyAdded": m109, "visitWebToManage": MessageLookupByLibrary.simpleMessage( "Vui lòng truy cập web.ente.io để quản lý đăng ký của bạn"), "waitingForVerification": @@ -1937,7 +1901,7 @@ class MessageLookup extends MessageLookupByLibrary { "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage( "Chúng tôi không hỗ trợ chỉnh sửa ảnh và album mà bạn chưa sở hữu"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("Yếu"), "welcomeBack": MessageLookupByLibrary.simpleMessage("Chào mừng trở lại!"), @@ -1946,7 +1910,7 @@ class MessageLookup extends MessageLookupByLibrary { "Liên hệ tin cậy có thể giúp khôi phục dữ liệu của bạn."), "yearShort": MessageLookupByLibrary.simpleMessage("năm"), "yearly": MessageLookupByLibrary.simpleMessage("Hàng năm"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("Có"), "yesCancel": MessageLookupByLibrary.simpleMessage("Có, hủy"), "yesConvertToViewer": @@ -1978,7 +1942,7 @@ class MessageLookup extends MessageLookupByLibrary { "Bạn không thể chia sẻ với chính mình"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( "Bạn không có mục nào đã lưu trữ."), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("Tài khoản của bạn đã bị xóa"), "yourMap": MessageLookupByLibrary.simpleMessage("Bản đồ của bạn"), diff --git a/mobile/lib/generated/intl/messages_zh.dart b/mobile/lib/generated/intl/messages_zh.dart index 4bb2d33cf5..36bbf261a1 100644 --- a/mobile/lib/generated/intl/messages_zh.dart +++ b/mobile/lib/generated/intl/messages_zh.dart @@ -20,238 +20,238 @@ typedef String MessageIfAbsent(String messageStr, List args); class MessageLookup extends MessageLookupByLibrary { String get localeName => 'zh'; - static String m9(title) => "${title} (我)"; + static String m0(title) => "${title} (我)"; - static String m10(count) => - "${Intl.plural(count, zero: '添加协作者', one: '添加协作者', other: '添加协作者')}"; + static String m1(count) => + "${Intl.plural(count, zero: '添加协作者', one: '添加协作者', other: '添加数个协作者')}"; - static String m11(count) => - "${Intl.plural(count, one: '添加一个项目', other: '添加一些项目')}"; + static String m2(count) => + "${Intl.plural(count, one: '添加项目', other: '添加数个项目')}"; - static String m12(storageAmount, endDate) => + static String m3(storageAmount, endDate) => "您的 ${storageAmount} 插件有效期至 ${endDate}"; - static String m13(count) => - "${Intl.plural(count, zero: '添加查看者', one: '添加查看者', other: '添加查看者')}"; + static String m4(count) => + "${Intl.plural(count, zero: '添加查看者', one: '添加查看者r', other: '添加数个查看者')}"; - static String m14(emailOrName) => "由 ${emailOrName} 添加"; + static String m5(emailOrName) => "由 ${emailOrName} 添加"; - static String m15(albumName) => "成功添加到 ${albumName}"; + static String m6(albumName) => "成功添加到 ${albumName}"; - static String m16(name) => "欣赏 ${name}"; + static String m7(name) => "欣赏 ${name}"; - static String m17(count) => + static String m8(count) => "${Intl.plural(count, zero: '无参与者', one: '1个参与者', other: '${count} 个参与者')}"; - static String m18(versionValue) => "版本: ${versionValue}"; + static String m9(versionValue) => "版本: ${versionValue}"; - static String m19(freeAmount, storageUnit) => + static String m10(freeAmount, storageUnit) => "${freeAmount} ${storageUnit} 空闲"; - static String m113(name) => "与 ${name} 一起欣赏美景"; + static String m11(name) => "与 ${name} 一起欣赏美景"; - static String m20(paymentProvider) => "请先取消您现有的订阅 ${paymentProvider}"; + static String m12(paymentProvider) => "请先取消您现有的订阅 ${paymentProvider}"; - static String m3(user) => "${user} 将无法添加更多照片到此相册\n\n他们仍然能够删除他们添加的现有照片"; + static String m13(user) => "${user} 将无法添加更多照片到此相册\n\n他们仍然能够删除他们添加的现有照片"; - static String m21(isFamilyMember, storageAmountInGb) => + static String m14(isFamilyMember, storageAmountInGb) => "${Intl.select(isFamilyMember, { 'true': '到目前为止,您的家庭已经领取了 ${storageAmountInGb} GB', 'false': '到目前为止,您已经领取了 ${storageAmountInGb} GB', 'other': '到目前为止,您已经领取了${storageAmountInGb} GB', })}"; - static String m22(albumName) => "为 ${albumName} 创建了协作链接"; + static String m15(albumName) => "为 ${albumName} 创建了协作链接"; - static String m23(count) => + static String m16(count) => "${Intl.plural(count, zero: '已添加 0 位协作者', one: '已添加 1 位协作者', other: '已添加 ${count} 位协作者')}"; - static String m24(email, numOfDays) => + static String m17(email, numOfDays) => "您即将添加 ${email} 作为可信联系人。如果您离开了 ${numOfDays} 天,他们将能够恢复您的帐户。"; - static String m25(familyAdminEmail) => + static String m18(familyAdminEmail) => "请联系 ${familyAdminEmail} 来管理您的订阅"; - static String m26(provider) => + static String m19(provider) => "请通过support@ente.io 用英语联系我们来管理您的 ${provider} 订阅。"; - static String m27(endpoint) => "已连接至 ${endpoint}"; + static String m20(endpoint) => "已连接至 ${endpoint}"; - static String m28(count) => + static String m21(count) => "${Intl.plural(count, one: '删除 ${count} 个项目', other: '删除 ${count} 个项目')}"; - static String m29(currentlyDeleting, totalCount) => + static String m22(currentlyDeleting, totalCount) => "正在删除 ${currentlyDeleting} /共 ${totalCount}"; - static String m30(albumName) => "这将删除用于访问\"${albumName}\"的公开链接。"; + static String m23(albumName) => "这将删除用于访问\"${albumName}\"的公开链接。"; - static String m31(supportEmail) => "请从您注册的邮箱发送一封邮件到 ${supportEmail}"; + static String m24(supportEmail) => "请从您注册的邮箱发送一封邮件到 ${supportEmail}"; - static String m32(count, storageSaved) => + static String m25(count, storageSaved) => "您已经清理了 ${Intl.plural(count, other: '${count} 个重复文件')}, 释放了 (${storageSaved}!)"; - static String m33(count, formattedSize) => + static String m26(count, formattedSize) => "${count} 个文件,每个文件 ${formattedSize}"; - static String m34(newEmail) => "电子邮件已更改为 ${newEmail}"; + static String m27(newEmail) => "电子邮件已更改为 ${newEmail}"; - static String m35(email) => "${email} 没有 Ente 账户。"; + static String m28(email) => "${email} 没有 Ente 账户。"; - static String m36(email) => "${email} 没有 Ente 帐户。\n\n向他们发出共享照片的邀请。"; + static String m29(email) => "${email} 没有 Ente 帐户。\n\n向他们发出共享照片的邀请。"; - static String m37(name) => "拥抱 ${name}"; + static String m30(name) => "拥抱 ${name}"; - static String m38(text) => "为 ${text} 找到额外照片"; + static String m31(text) => "为 ${text} 找到额外照片"; - static String m39(name) => "与 ${name} 的盛宴"; + static String m32(name) => "与 ${name} 的盛宴"; - static String m40(count, formattedNumber) => + static String m33(count, formattedNumber) => "此设备上的 ${Intl.plural(count, one: '1 个文件', other: '${formattedNumber} 个文件')} 已安全备份"; - static String m41(count, formattedNumber) => + static String m34(count, formattedNumber) => "此相册中的 ${Intl.plural(count, one: '1 个文件', other: '${formattedNumber} 个文件')} 已安全备份"; - static String m4(storageAmountInGB) => + static String m35(storageAmountInGB) => "每当有人使用您的代码注册付费计划时您将获得${storageAmountInGB} GB"; - static String m42(endDate) => "免费试用有效期至 ${endDate}"; + static String m36(endDate) => "免费试用有效期至 ${endDate}"; - static String m43(count) => - "只要您有有效的订阅,您仍然可以在 Ente 上访问 ${Intl.plural(count, one: '它', other: '它们')}"; + static String m37(count) => + "只要您拥有有效订阅,您仍然可以在 Ente 上访问 ${Intl.plural(count, one: '它', other: '它们')}"; - static String m44(sizeInMBorGB) => "释放 ${sizeInMBorGB}"; + static String m38(sizeInMBorGB) => "释放 ${sizeInMBorGB}"; - static String m45(count, formattedSize) => + static String m39(count, formattedSize) => "${Intl.plural(count, one: '它可以从设备中删除以释放 ${formattedSize}', other: '它们可以从设备中删除以释放 ${formattedSize}')}"; - static String m46(currentlyProcessing, totalCount) => + static String m40(currentlyProcessing, totalCount) => "正在处理 ${currentlyProcessing} / ${totalCount}"; - static String m47(name) => "与 ${name} 徒步"; + static String m41(name) => "与 ${name} 徒步"; - static String m48(count) => + static String m42(count) => "${Intl.plural(count, one: '${count} 个项目', other: '${count} 个项目')}"; - static String m49(name) => "最后一次与 ${name} 相聚"; + static String m43(name) => "最后一次与 ${name} 相聚"; - static String m50(email) => "${email} 已邀请您成为可信联系人"; + static String m44(email) => "${email} 已邀请您成为可信联系人"; - static String m51(expiryTime) => "链接将在 ${expiryTime} 过期"; + static String m45(expiryTime) => "链接将在 ${expiryTime} 过期"; - static String m52(email) => "将人员链接到 ${email}"; + static String m46(email) => "将人员链接到 ${email}"; - static String m53(personName, email) => "这将会将 ${personName} 链接到 ${email}"; + static String m47(personName, email) => "这将会将 ${personName} 链接到 ${email}"; - static String m5(count, formattedCount) => - "${Intl.plural(count, zero: '没有回忆', one: '${formattedCount} 个回忆', other: '${formattedCount} 个回忆')}"; + static String m48(count, formattedCount) => + "${Intl.plural(count, zero: '暂无回忆', other: '${formattedCount} 个回忆')}"; - static String m54(count) => - "${Intl.plural(count, one: '移动一个项目', other: '移动一些项目')}"; + static String m49(count) => + "${Intl.plural(count, one: '移动项目', other: '移动数个项目')}"; - static String m55(albumName) => "成功移动到 ${albumName}"; + static String m50(albumName) => "成功移动到 ${albumName}"; - static String m56(personName) => "没有针对 ${personName} 的建议"; + static String m51(personName) => "没有针对 ${personName} 的建议"; - static String m57(name) => "不是 ${name}?"; + static String m52(name) => "不是 ${name}?"; - static String m58(familyAdminEmail) => "请联系${familyAdminEmail} 以更改您的代码。"; + static String m53(familyAdminEmail) => "请联系${familyAdminEmail} 以更改您的代码。"; - static String m59(name) => "与 ${name} 开派对"; + static String m54(name) => "与 ${name} 开派对"; - static String m0(passwordStrengthValue) => "密码强度: ${passwordStrengthValue}"; + static String m55(passwordStrengthValue) => "密码强度: ${passwordStrengthValue}"; - static String m60(providerName) => "如果您被收取费用,请用英语与 ${providerName} 的客服聊天"; + static String m56(providerName) => "如果您被收取费用,请用英语与 ${providerName} 的客服聊天"; - static String m61(name, age) => "${name} ${age} 岁啦!"; + static String m57(name, age) => "${name} ${age} 岁啦!"; - static String m62(name, age) => "${name} 快满 ${age} 岁啦"; + static String m58(name, age) => "${name} 快满 ${age} 岁啦"; - static String m63(count) => + static String m59(count) => "${Intl.plural(count, zero: '没有照片', one: '1 张照片', other: '${count} 张照片')}"; - static String m64(count) => - "${Intl.plural(count, zero: '0 张照片', one: '1 张照片', other: '${count} 张照片')}"; + static String m60(count) => + "${Intl.plural(count, zero: '0张照片', one: '1张照片', other: '${count} 张照片')}"; - static String m65(endDate) => "免费试用有效期至 ${endDate}。\n在此之后您可以选择付费计划。"; + static String m61(endDate) => "免费试用有效期至 ${endDate}。\n在此之后您可以选择付费计划。"; - static String m66(toEmail) => "请给我们发送电子邮件至 ${toEmail}"; + static String m62(toEmail) => "请给我们发送电子邮件至 ${toEmail}"; - static String m67(toEmail) => "请将日志发送至 \n${toEmail}"; + static String m63(toEmail) => "请将日志发送至 \n${toEmail}"; - static String m68(name) => "与 ${name} 的合影"; + static String m64(name) => "与 ${name} 的合影"; - static String m69(folderName) => "正在处理 ${folderName}..."; + static String m65(folderName) => "正在处理 ${folderName}..."; - static String m70(storeName) => "在 ${storeName} 上给我们评分"; + static String m66(storeName) => "在 ${storeName} 上给我们评分"; - static String m71(name) => "已将您重新分配给 ${name}"; + static String m67(name) => "已将您重新分配给 ${name}"; - static String m72(days, email) => "您可以在 ${days} 天后访问该账户。通知将发送至 ${email}。"; + static String m68(days, email) => "您可以在 ${days} 天后访问该账户。通知将发送至 ${email}。"; - static String m73(email) => "您现在可以通过设置新密码来恢复 ${email} 的账户。"; + static String m69(email) => "您现在可以通过设置新密码来恢复 ${email} 的账户。"; - static String m74(email) => "${email} 正在尝试恢复您的账户。"; + static String m70(email) => "${email} 正在尝试恢复您的账户。"; - static String m75(storageInGB) => "3. 你和朋友都将免费获得 ${storageInGB} GB*"; + static String m71(storageInGB) => "3. 你和朋友都将免费获得 ${storageInGB} GB*"; - static String m76(userEmail) => + static String m72(userEmail) => "${userEmail} 将从这个共享相册中删除\n\nTA们添加的任何照片也将从相册中删除"; - static String m77(endDate) => "在 ${endDate} 前续费"; + static String m73(endDate) => "在 ${endDate} 前续费"; - static String m78(name) => "与 ${name} 一起的自驾游"; + static String m74(name) => "与 ${name} 一起的自驾游"; - static String m79(count) => + static String m75(count) => "${Intl.plural(count, other: '已找到 ${count} 个结果')}"; - static String m80(snapshotLength, searchLength) => + static String m76(snapshotLength, searchLength) => "部分长度不匹配:${snapshotLength} != ${searchLength}"; - static String m6(count) => "已选择 ${count} 个"; + static String m77(count) => "已选择 ${count} 个"; - static String m81(count, yourCount) => "选择了 ${count} 个 (您的 ${yourCount} 个)"; + static String m78(count, yourCount) => "选择了 ${count} 个 (您的 ${yourCount} 个)"; - static String m82(name) => "与 ${name} 的自拍"; + static String m79(name) => "与 ${name} 的自拍"; - static String m83(verificationID) => "这是我的ente.io 的验证 ID: ${verificationID}。"; + static String m80(verificationID) => "这是我的ente.io 的验证 ID: ${verificationID}。"; - static String m7(verificationID) => + static String m81(verificationID) => "嘿,你能确认这是你的 ente.io 验证 ID吗:${verificationID}"; - static String m84(referralCode, referralStorageInGB) => + static String m82(referralCode, referralStorageInGB) => "Ente 推荐代码:${referralCode}\n\n在 \"设置\"→\"通用\"→\"推荐 \"中应用它,即可在注册付费计划后免费获得 ${referralStorageInGB} GB 存储空间\n\nhttps://ente.io"; - static String m85(numberOfPeople) => + static String m83(numberOfPeople) => "${Intl.plural(numberOfPeople, zero: '与特定人员共享', one: '与 1 人共享', other: '与 ${numberOfPeople} 人共享')}"; - static String m86(emailIDs) => "与 ${emailIDs} 共享"; + static String m84(emailIDs) => "与 ${emailIDs} 共享"; - static String m87(fileType) => "此 ${fileType} 将从您的设备中删除。"; + static String m85(fileType) => "此 ${fileType} 将从您的设备中删除。"; - static String m88(fileType) => "${fileType} 已同时存在于 Ente 和您的设备中。"; + static String m86(fileType) => "${fileType} 已同时存在于 Ente 和您的设备中。"; - static String m89(fileType) => "${fileType} 将从 Ente 中删除。"; + static String m87(fileType) => "${fileType} 将从 Ente 中删除。"; - static String m90(name) => "与 ${name} 一起运动"; + static String m88(name) => "与 ${name} 一起运动"; - static String m91(name) => "聚光灯下的 ${name}"; + static String m89(name) => "聚光灯下的 ${name}"; - static String m1(storageAmountInGB) => "${storageAmountInGB} GB"; + static String m90(storageAmountInGB) => "${storageAmountInGB} GB"; - static String m92( + static String m91( usedAmount, usedStorageUnit, totalAmount, totalStorageUnit) => "已使用 ${usedAmount} ${usedStorageUnit} / ${totalAmount} ${totalStorageUnit}"; - static String m93(id) => + static String m92(id) => "您的 ${id} 已链接到另一个 Ente 账户。\n如果您想在此账户中使用您的 ${id} ,请联系我们的支持人员"; - static String m94(endDate) => "您的订阅将于 ${endDate} 取消"; + static String m93(endDate) => "您的订阅将于 ${endDate} 取消"; - static String m95(completed, total) => "已保存的回忆 ${completed}/共 ${total}"; + static String m94(completed, total) => "已保存的回忆 ${completed}/共 ${total}"; - static String m96(ignoreReason) => "点按上传,由于${ignoreReason},目前上传已被忽略"; + static String m95(ignoreReason) => "点按上传,由于${ignoreReason},目前上传已被忽略"; - static String m8(storageAmountInGB) => "他们也会获得 ${storageAmountInGB} GB"; + static String m96(storageAmountInGB) => "他们也会获得 ${storageAmountInGB} GB"; static String m97(email) => "这是 ${email} 的验证ID"; @@ -280,16 +280,16 @@ class MessageLookup extends MessageLookupByLibrary { static String m108(email) => "验证 ${email}"; static String m109(count) => - "${Intl.plural(count, zero: '已添加 0 位查看者', one: '已添加 1 位查看者', other: '已添加 ${count} 位查看者')}"; + "${Intl.plural(count, zero: '已添加0个查看者', one: '已添加1个查看者', other: '已添加 ${count} 个查看者')}"; - static String m2(email) => "我们已经发送邮件到 ${email}"; + static String m110(email) => "我们已经发送邮件到 ${email}"; - static String m110(count) => + static String m111(count) => "${Intl.plural(count, one: '${count} 年前', other: '${count} 年前')}"; - static String m111(name) => "您和 ${name}"; + static String m112(name) => "您和 ${name}"; - static String m112(storageSaved) => "您已成功释放了 ${storageSaved}!"; + static String m113(storageSaved) => "您已成功释放了 ${storageSaved}!"; final messages = _notInlinedMessages(_notInlinedMessages); static Map _notInlinedMessages(_) => { @@ -300,7 +300,7 @@ class MessageLookup extends MessageLookupByLibrary { "account": MessageLookupByLibrary.simpleMessage("账户"), "accountIsAlreadyConfigured": MessageLookupByLibrary.simpleMessage("账户已配置。"), - "accountOwnerPersonAppbarTitle": m9, + "accountOwnerPersonAppbarTitle": m0, "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("欢迎回来!"), "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( "我明白,如果我丢失密码,我可能会丢失我的数据,因为我的数据是 端到端加密的。"), @@ -309,10 +309,10 @@ class MessageLookup extends MessageLookupByLibrary { "addAName": MessageLookupByLibrary.simpleMessage("添加一个名称"), "addANewEmail": MessageLookupByLibrary.simpleMessage("添加新的电子邮件"), "addCollaborator": MessageLookupByLibrary.simpleMessage("添加协作者"), - "addCollaborators": m10, + "addCollaborators": m1, "addFiles": MessageLookupByLibrary.simpleMessage("添加文件"), "addFromDevice": MessageLookupByLibrary.simpleMessage("从设备添加"), - "addItem": m11, + "addItem": m2, "addLocation": MessageLookupByLibrary.simpleMessage("添加地点"), "addLocationButton": MessageLookupByLibrary.simpleMessage("添加"), "addMore": MessageLookupByLibrary.simpleMessage("添加更多"), @@ -321,7 +321,7 @@ class MessageLookup extends MessageLookupByLibrary { "addNew": MessageLookupByLibrary.simpleMessage("新建"), "addNewPerson": MessageLookupByLibrary.simpleMessage("添加新人物"), "addOnPageSubtitle": MessageLookupByLibrary.simpleMessage("附加组件详情"), - "addOnValidTill": m12, + "addOnValidTill": m3, "addOns": MessageLookupByLibrary.simpleMessage("附加组件"), "addPhotos": MessageLookupByLibrary.simpleMessage("添加照片"), "addSelected": MessageLookupByLibrary.simpleMessage("添加所选项"), @@ -330,13 +330,13 @@ class MessageLookup extends MessageLookupByLibrary { "addToHiddenAlbum": MessageLookupByLibrary.simpleMessage("添加到隐藏相册"), "addTrustedContact": MessageLookupByLibrary.simpleMessage("添加可信联系人"), "addViewer": MessageLookupByLibrary.simpleMessage("添加查看者"), - "addViewers": m13, + "addViewers": m4, "addYourPhotosNow": MessageLookupByLibrary.simpleMessage("立即添加您的照片"), "addedAs": MessageLookupByLibrary.simpleMessage("已添加为"), - "addedBy": m14, - "addedSuccessfullyTo": m15, + "addedBy": m5, + "addedSuccessfullyTo": m6, "addingToFavorites": MessageLookupByLibrary.simpleMessage("正在添加到收藏..."), - "admiringThem": m16, + "admiringThem": m7, "advanced": MessageLookupByLibrary.simpleMessage("高级设置"), "advancedSettings": MessageLookupByLibrary.simpleMessage("高级设置"), "after1Day": MessageLookupByLibrary.simpleMessage("1天后"), @@ -345,7 +345,7 @@ class MessageLookup extends MessageLookupByLibrary { "after1Week": MessageLookupByLibrary.simpleMessage("1 周后"), "after1Year": MessageLookupByLibrary.simpleMessage("1 年后"), "albumOwner": MessageLookupByLibrary.simpleMessage("所有者"), - "albumParticipantsCount": m17, + "albumParticipantsCount": m8, "albumTitle": MessageLookupByLibrary.simpleMessage("相册标题"), "albumUpdated": MessageLookupByLibrary.simpleMessage("相册已更新"), "albums": MessageLookupByLibrary.simpleMessage("相册"), @@ -388,7 +388,7 @@ class MessageLookup extends MessageLookupByLibrary { "appLock": MessageLookupByLibrary.simpleMessage("应用锁"), "appLockDescriptions": MessageLookupByLibrary.simpleMessage( "在设备的默认锁定屏幕和带有 PIN 或密码的自定义锁定屏幕之间进行选择。"), - "appVersion": m18, + "appVersion": m9, "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), "apply": MessageLookupByLibrary.simpleMessage("应用"), "applyCodeTitle": MessageLookupByLibrary.simpleMessage("应用代码"), @@ -462,9 +462,9 @@ class MessageLookup extends MessageLookupByLibrary { "autoPairDesc": MessageLookupByLibrary.simpleMessage("自动配对仅适用于支持 Chromecast 的设备。"), "available": MessageLookupByLibrary.simpleMessage("可用"), - "availableStorageSpace": m19, + "availableStorageSpace": m10, "backedUpFolders": MessageLookupByLibrary.simpleMessage("已备份的文件夹"), - "backgroundWithThem": m113, + "backgroundWithThem": m11, "backup": MessageLookupByLibrary.simpleMessage("备份"), "backupFailed": MessageLookupByLibrary.simpleMessage("备份失败"), "backupFile": MessageLookupByLibrary.simpleMessage("备份文件"), @@ -509,9 +509,9 @@ class MessageLookup extends MessageLookupByLibrary { "cancelAccountRecovery": MessageLookupByLibrary.simpleMessage("取消恢复"), "cancelAccountRecoveryBody": MessageLookupByLibrary.simpleMessage("您真的要取消恢复吗?"), - "cancelOtherSubscription": m20, + "cancelOtherSubscription": m12, "cancelSubscription": MessageLookupByLibrary.simpleMessage("取消订阅"), - "cannotAddMorePhotosAfterBecomingViewer": m3, + "cannotAddMorePhotosAfterBecomingViewer": m13, "cannotDeleteSharedFiles": MessageLookupByLibrary.simpleMessage("无法删除共享文件"), "castAlbum": MessageLookupByLibrary.simpleMessage("投放相册"), @@ -540,7 +540,7 @@ class MessageLookup extends MessageLookupByLibrary { "claimFreeStorage": MessageLookupByLibrary.simpleMessage("领取免费存储"), "claimMore": MessageLookupByLibrary.simpleMessage("领取更多!"), "claimed": MessageLookupByLibrary.simpleMessage("已领取"), - "claimedStorageSoFar": m21, + "claimedStorageSoFar": m14, "cleanUncategorized": MessageLookupByLibrary.simpleMessage("清除未分类的"), "cleanUncategorizedDescription": MessageLookupByLibrary.simpleMessage("从“未分类”中删除其他相册中存在的所有文件"), @@ -562,11 +562,11 @@ class MessageLookup extends MessageLookupByLibrary { "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( "创建一个链接来让他人无需 Ente 应用程序或账户即可在您的共享相册中添加和查看照片。非常适合收集活动照片。"), "collaborativeLink": MessageLookupByLibrary.simpleMessage("协作链接"), - "collaborativeLinkCreatedFor": m22, + "collaborativeLinkCreatedFor": m15, "collaborator": MessageLookupByLibrary.simpleMessage("协作者"), "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": MessageLookupByLibrary.simpleMessage("协作者可以将照片和视频添加到共享相册中。"), - "collaboratorsSuccessfullyAdded": m23, + "collaboratorsSuccessfullyAdded": m16, "collageLayout": MessageLookupByLibrary.simpleMessage("布局"), "collageSaved": MessageLookupByLibrary.simpleMessage("拼贴已保存到相册"), "collect": MessageLookupByLibrary.simpleMessage("收集"), @@ -581,7 +581,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("您确定要禁用双重认证吗?"), "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage("确认删除账户"), - "confirmAddingTrustedContact": m24, + "confirmAddingTrustedContact": m17, "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage("是的,我想永久删除此账户及其所有关联的应用程序的数据。"), "confirmPassword": MessageLookupByLibrary.simpleMessage("请确认密码"), @@ -590,9 +590,9 @@ class MessageLookup extends MessageLookupByLibrary { "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage("确认您的恢复密钥"), "connectToDevice": MessageLookupByLibrary.simpleMessage("连接到设备"), - "contactFamilyAdmin": m25, + "contactFamilyAdmin": m18, "contactSupport": MessageLookupByLibrary.simpleMessage("联系支持"), - "contactToManageSubscription": m26, + "contactToManageSubscription": m19, "contacts": MessageLookupByLibrary.simpleMessage("联系人"), "contents": MessageLookupByLibrary.simpleMessage("内容"), "continueLabel": MessageLookupByLibrary.simpleMessage("继续"), @@ -626,7 +626,7 @@ class MessageLookup extends MessageLookupByLibrary { "currentUsageIs": MessageLookupByLibrary.simpleMessage("当前用量 "), "currentlyRunning": MessageLookupByLibrary.simpleMessage("目前正在运行"), "custom": MessageLookupByLibrary.simpleMessage("自定义"), - "customEndpoint": m27, + "customEndpoint": m20, "darkTheme": MessageLookupByLibrary.simpleMessage("深色"), "dayToday": MessageLookupByLibrary.simpleMessage("今天"), "dayYesterday": MessageLookupByLibrary.simpleMessage("昨天"), @@ -656,10 +656,10 @@ class MessageLookup extends MessageLookupByLibrary { "deleteFromBoth": MessageLookupByLibrary.simpleMessage("同时从两者中删除"), "deleteFromDevice": MessageLookupByLibrary.simpleMessage("从设备中删除"), "deleteFromEnte": MessageLookupByLibrary.simpleMessage("从 Ente 中删除"), - "deleteItemCount": m28, + "deleteItemCount": m21, "deleteLocation": MessageLookupByLibrary.simpleMessage("删除位置"), "deletePhotos": MessageLookupByLibrary.simpleMessage("删除照片"), - "deleteProgress": m29, + "deleteProgress": m22, "deleteReason1": MessageLookupByLibrary.simpleMessage("找不到我想要的功能"), "deleteReason2": MessageLookupByLibrary.simpleMessage("应用或某个功能没有按我的预期运行"), @@ -690,7 +690,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("查看者仍然可以使用外部工具截图或保存您的照片副本"), "disableDownloadWarningTitle": MessageLookupByLibrary.simpleMessage("请注意"), - "disableLinkMessage": m30, + "disableLinkMessage": m23, "disableTwofactor": MessageLookupByLibrary.simpleMessage("禁用双重认证"), "disablingTwofactorAuthentication": MessageLookupByLibrary.simpleMessage("正在禁用双重认证..."), @@ -724,9 +724,9 @@ class MessageLookup extends MessageLookupByLibrary { "download": MessageLookupByLibrary.simpleMessage("下载"), "downloadFailed": MessageLookupByLibrary.simpleMessage("下載失敗"), "downloading": MessageLookupByLibrary.simpleMessage("正在下载..."), - "dropSupportEmail": m31, - "duplicateFileCountWithStorageSaved": m32, - "duplicateItemsGroup": m33, + "dropSupportEmail": m24, + "duplicateFileCountWithStorageSaved": m25, + "duplicateItemsGroup": m26, "edit": MessageLookupByLibrary.simpleMessage("编辑"), "editLocation": MessageLookupByLibrary.simpleMessage("编辑位置"), "editLocationTagTitle": MessageLookupByLibrary.simpleMessage("编辑位置"), @@ -739,15 +739,15 @@ class MessageLookup extends MessageLookupByLibrary { "email": MessageLookupByLibrary.simpleMessage("电子邮件地址"), "emailAlreadyRegistered": MessageLookupByLibrary.simpleMessage("此电子邮件地址已被注册。"), - "emailChangedTo": m34, - "emailDoesNotHaveEnteAccount": m35, - "emailNoEnteAccount": m36, + "emailChangedTo": m27, + "emailDoesNotHaveEnteAccount": m28, + "emailNoEnteAccount": m29, "emailNotRegistered": MessageLookupByLibrary.simpleMessage("此电子邮件地址未被注册。"), "emailVerificationToggle": MessageLookupByLibrary.simpleMessage("电子邮件验证"), "emailYourLogs": MessageLookupByLibrary.simpleMessage("通过电子邮件发送您的日志"), - "embracingThem": m37, + "embracingThem": m30, "emergencyContacts": MessageLookupByLibrary.simpleMessage("紧急联系人"), "empty": MessageLookupByLibrary.simpleMessage("清空"), "emptyTrash": MessageLookupByLibrary.simpleMessage("要清空回收站吗?"), @@ -809,7 +809,7 @@ class MessageLookup extends MessageLookupByLibrary { "exportLogs": MessageLookupByLibrary.simpleMessage("导出日志"), "exportYourData": MessageLookupByLibrary.simpleMessage("导出您的数据"), "extraPhotosFound": MessageLookupByLibrary.simpleMessage("发现额外照片"), - "extraPhotosFoundFor": m38, + "extraPhotosFoundFor": m31, "faceNotClusteredYet": MessageLookupByLibrary.simpleMessage("人脸尚未聚类,请稍后再来"), "faceRecognition": MessageLookupByLibrary.simpleMessage("人脸识别"), @@ -838,7 +838,7 @@ class MessageLookup extends MessageLookupByLibrary { "faq": MessageLookupByLibrary.simpleMessage("常见问题"), "faqs": MessageLookupByLibrary.simpleMessage("常见问题"), "favorite": MessageLookupByLibrary.simpleMessage("收藏"), - "feastingWithThem": m39, + "feastingWithThem": m32, "feedback": MessageLookupByLibrary.simpleMessage("反馈"), "file": MessageLookupByLibrary.simpleMessage("文件"), "fileFailedToSaveToGallery": @@ -848,8 +848,8 @@ class MessageLookup extends MessageLookupByLibrary { "fileSavedToGallery": MessageLookupByLibrary.simpleMessage("文件已保存到相册"), "fileTypes": MessageLookupByLibrary.simpleMessage("文件类型"), "fileTypesAndNames": MessageLookupByLibrary.simpleMessage("文件类型和名称"), - "filesBackedUpFromDevice": m40, - "filesBackedUpInAlbum": m41, + "filesBackedUpFromDevice": m33, + "filesBackedUpInAlbum": m34, "filesDeleted": MessageLookupByLibrary.simpleMessage("文件已删除"), "filesSavedToGallery": MessageLookupByLibrary.simpleMessage("多个文件已保存到相册"), @@ -861,24 +861,24 @@ class MessageLookup extends MessageLookupByLibrary { "forgotPassword": MessageLookupByLibrary.simpleMessage("忘记密码"), "foundFaces": MessageLookupByLibrary.simpleMessage("已找到的人脸"), "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("已领取的免费存储"), - "freeStorageOnReferralSuccess": m4, + "freeStorageOnReferralSuccess": m35, "freeStorageUsable": MessageLookupByLibrary.simpleMessage("可用的免费存储"), "freeTrial": MessageLookupByLibrary.simpleMessage("免费试用"), - "freeTrialValidTill": m42, - "freeUpAccessPostDelete": m43, - "freeUpAmount": m44, + "freeTrialValidTill": m36, + "freeUpAccessPostDelete": m37, + "freeUpAmount": m38, "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("释放设备空间"), "freeUpDeviceSpaceDesc": MessageLookupByLibrary.simpleMessage("通过清除已备份的文件来节省设备空间。"), "freeUpSpace": MessageLookupByLibrary.simpleMessage("释放空间"), - "freeUpSpaceSaving": m45, + "freeUpSpaceSaving": m39, "gallery": MessageLookupByLibrary.simpleMessage("图库"), "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage("在图库中显示最多1000个回忆"), "general": MessageLookupByLibrary.simpleMessage("通用"), "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage("正在生成加密密钥..."), - "genericProgress": m46, + "genericProgress": m40, "goToSettings": MessageLookupByLibrary.simpleMessage("前往设置"), "googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"), "grantFullAccessPrompt": @@ -904,7 +904,7 @@ class MessageLookup extends MessageLookupByLibrary { "hideSharedItemsFromHomeGallery": MessageLookupByLibrary.simpleMessage("隐藏主页图库中的共享项目"), "hiding": MessageLookupByLibrary.simpleMessage("正在隐藏..."), - "hikingWithThem": m47, + "hikingWithThem": m41, "hostedAtOsmFrance": MessageLookupByLibrary.simpleMessage("法国 OSM 主办"), "howItWorks": MessageLookupByLibrary.simpleMessage("工作原理"), "howToViewShareeVerificationID": MessageLookupByLibrary.simpleMessage( @@ -952,7 +952,7 @@ class MessageLookup extends MessageLookupByLibrary { "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": MessageLookupByLibrary.simpleMessage( "看起来出了点问题。 请稍后重试。 如果错误仍然存在,请联系我们的支持团队。"), - "itemCount": m48, + "itemCount": m42, "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": MessageLookupByLibrary.simpleMessage("项目显示永久删除前剩余的天数"), "itemsWillBeRemovedFromAlbum": @@ -970,7 +970,7 @@ class MessageLookup extends MessageLookupByLibrary { "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage("请帮助我们了解这个信息"), "language": MessageLookupByLibrary.simpleMessage("语言"), - "lastTimeWithThem": m49, + "lastTimeWithThem": m43, "lastUpdated": MessageLookupByLibrary.simpleMessage("最后更新"), "lastYearsTrip": MessageLookupByLibrary.simpleMessage("去年的旅行"), "leave": MessageLookupByLibrary.simpleMessage("离开"), @@ -980,7 +980,7 @@ class MessageLookup extends MessageLookupByLibrary { "left": MessageLookupByLibrary.simpleMessage("向左"), "legacy": MessageLookupByLibrary.simpleMessage("遗产"), "legacyAccounts": MessageLookupByLibrary.simpleMessage("遗产账户"), - "legacyInvite": m50, + "legacyInvite": m44, "legacyPageDesc": MessageLookupByLibrary.simpleMessage("遗产允许信任的联系人在您不在时访问您的账户。"), "legacyPageDesc2": MessageLookupByLibrary.simpleMessage( @@ -996,14 +996,14 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("来实现更快的共享"), "linkEnabled": MessageLookupByLibrary.simpleMessage("已启用"), "linkExpired": MessageLookupByLibrary.simpleMessage("已过期"), - "linkExpiresOn": m51, + "linkExpiresOn": m45, "linkExpiry": MessageLookupByLibrary.simpleMessage("链接过期"), "linkHasExpired": MessageLookupByLibrary.simpleMessage("链接已过期"), "linkNeverExpires": MessageLookupByLibrary.simpleMessage("永不"), "linkPerson": MessageLookupByLibrary.simpleMessage("链接人员"), "linkPersonCaption": MessageLookupByLibrary.simpleMessage("来感受更好的共享体验"), - "linkPersonToEmail": m52, - "linkPersonToEmailConfirmation": m53, + "linkPersonToEmail": m46, + "linkPersonToEmailConfirmation": m47, "livePhotos": MessageLookupByLibrary.simpleMessage("实况照片"), "loadMessage1": MessageLookupByLibrary.simpleMessage("您可以与家庭分享您的订阅"), "loadMessage2": @@ -1076,7 +1076,7 @@ class MessageLookup extends MessageLookupByLibrary { "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), "me": MessageLookupByLibrary.simpleMessage("我"), - "memoryCount": m5, + "memoryCount": m48, "merchandise": MessageLookupByLibrary.simpleMessage("商品"), "mergeWithExisting": MessageLookupByLibrary.simpleMessage("与现有的合并"), "mergedPhotos": MessageLookupByLibrary.simpleMessage("已合并照片"), @@ -1103,12 +1103,12 @@ class MessageLookup extends MessageLookupByLibrary { "mostRecent": MessageLookupByLibrary.simpleMessage("最近"), "mostRelevant": MessageLookupByLibrary.simpleMessage("最相关"), "mountains": MessageLookupByLibrary.simpleMessage("翻过山丘"), - "moveItem": m54, + "moveItem": m49, "moveSelectedPhotosToOneDate": MessageLookupByLibrary.simpleMessage("将选定的照片调整到某一日期"), "moveToAlbum": MessageLookupByLibrary.simpleMessage("移动到相册"), "moveToHiddenAlbum": MessageLookupByLibrary.simpleMessage("移至隐藏相册"), - "movedSuccessfullyTo": m55, + "movedSuccessfullyTo": m50, "movedToTrash": MessageLookupByLibrary.simpleMessage("已移至回收站"), "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage("正在将文件移动到相册..."), @@ -1152,9 +1152,9 @@ class MessageLookup extends MessageLookupByLibrary { "由于我们端到端加密协议的性质,如果没有您的密码或恢复密钥,您的数据将无法解密"), "noResults": MessageLookupByLibrary.simpleMessage("无结果"), "noResultsFound": MessageLookupByLibrary.simpleMessage("未找到任何结果"), - "noSuggestionsForPerson": m56, + "noSuggestionsForPerson": m51, "noSystemLockFound": MessageLookupByLibrary.simpleMessage("未找到系统锁"), - "notPersonLabel": m57, + "notPersonLabel": m52, "notThisPerson": MessageLookupByLibrary.simpleMessage("不是此人?"), "nothingSharedWithYouYet": MessageLookupByLibrary.simpleMessage("尚未与您共享任何内容"), @@ -1165,7 +1165,7 @@ class MessageLookup extends MessageLookupByLibrary { "onEnte": MessageLookupByLibrary.simpleMessage( "在 ente 上"), "onTheRoad": MessageLookupByLibrary.simpleMessage("再次踏上旅途"), - "onlyFamilyAdminCanChangeCode": m58, + "onlyFamilyAdminCanChangeCode": m53, "onlyThem": MessageLookupByLibrary.simpleMessage("仅限他们"), "oops": MessageLookupByLibrary.simpleMessage("哎呀"), "oopsCouldNotSaveEdits": @@ -1192,7 +1192,7 @@ class MessageLookup extends MessageLookupByLibrary { "pairWithPin": MessageLookupByLibrary.simpleMessage("用 PIN 配对"), "pairingComplete": MessageLookupByLibrary.simpleMessage("配对完成"), "panorama": MessageLookupByLibrary.simpleMessage("全景"), - "partyWithThem": m59, + "partyWithThem": m54, "passKeyPendingVerification": MessageLookupByLibrary.simpleMessage("仍需进行验证"), "passkey": MessageLookupByLibrary.simpleMessage("通行密钥"), @@ -1201,7 +1201,7 @@ class MessageLookup extends MessageLookupByLibrary { "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage("密码修改成功"), "passwordLock": MessageLookupByLibrary.simpleMessage("密码锁"), - "passwordStrength": m0, + "passwordStrength": m55, "passwordStrengthInfo": MessageLookupByLibrary.simpleMessage( "密码强度的计算考虑了密码的长度、使用的字符以及密码是否出现在最常用的 10,000 个密码中"), "passwordWarning": MessageLookupByLibrary.simpleMessage( @@ -1210,7 +1210,7 @@ class MessageLookup extends MessageLookupByLibrary { "paymentFailed": MessageLookupByLibrary.simpleMessage("支付失败"), "paymentFailedMessage": MessageLookupByLibrary.simpleMessage( "不幸的是,您的付款失败。请联系支持人员,我们将为您提供帮助!"), - "paymentFailedTalkToProvider": m60, + "paymentFailedTalkToProvider": m56, "pendingItems": MessageLookupByLibrary.simpleMessage("待处理项目"), "pendingSync": MessageLookupByLibrary.simpleMessage("正在等待同步"), "people": MessageLookupByLibrary.simpleMessage("人物"), @@ -1220,18 +1220,18 @@ class MessageLookup extends MessageLookupByLibrary { "permanentlyDelete": MessageLookupByLibrary.simpleMessage("永久删除"), "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage("要从设备中永久删除吗?"), - "personIsAge": m61, + "personIsAge": m57, "personName": MessageLookupByLibrary.simpleMessage("人物名称"), - "personTurningAge": m62, + "personTurningAge": m58, "pets": MessageLookupByLibrary.simpleMessage("毛茸茸的伙伴"), "photoDescriptions": MessageLookupByLibrary.simpleMessage("照片说明"), "photoGridSize": MessageLookupByLibrary.simpleMessage("照片网格大小"), "photoSmallCase": MessageLookupByLibrary.simpleMessage("照片"), - "photocountPhotos": m63, + "photocountPhotos": m59, "photos": MessageLookupByLibrary.simpleMessage("照片"), "photosAddedByYouWillBeRemovedFromTheAlbum": MessageLookupByLibrary.simpleMessage("您添加的照片将从相册中移除"), - "photosCount": m64, + "photosCount": m60, "photosKeepRelativeTimeDifference": MessageLookupByLibrary.simpleMessage("照片保持相对时间差"), "pickCenterPoint": MessageLookupByLibrary.simpleMessage("选择中心点"), @@ -1239,7 +1239,7 @@ class MessageLookup extends MessageLookupByLibrary { "pinLock": MessageLookupByLibrary.simpleMessage("PIN 锁定"), "playOnTv": MessageLookupByLibrary.simpleMessage("在电视上播放相册"), "playOriginal": MessageLookupByLibrary.simpleMessage("播放原内容"), - "playStoreFreeTrialValidTill": m65, + "playStoreFreeTrialValidTill": m61, "playStream": MessageLookupByLibrary.simpleMessage("播放流"), "playstoreSubscription": MessageLookupByLibrary.simpleMessage("PlayStore 订阅"), @@ -1250,12 +1250,12 @@ class MessageLookup extends MessageLookupByLibrary { "请用英语联系 support@ente.io ,我们将乐意提供帮助!"), "pleaseContactSupportIfTheProblemPersists": MessageLookupByLibrary.simpleMessage("如果问题仍然存在,请联系支持"), - "pleaseEmailUsAt": m66, + "pleaseEmailUsAt": m62, "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("请授予权限"), "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("请重新登录"), "pleaseSelectQuickLinksToRemove": MessageLookupByLibrary.simpleMessage("请选择要删除的快速链接"), - "pleaseSendTheLogsTo": m67, + "pleaseSendTheLogsTo": m63, "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("请重试"), "pleaseVerifyTheCodeYouHaveEntered": MessageLookupByLibrary.simpleMessage("请验证您输入的代码"), @@ -1266,7 +1266,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("请稍等片刻后再重试"), "pleaseWaitThisWillTakeAWhile": MessageLookupByLibrary.simpleMessage("请稍候,这将需要一段时间。"), - "posingWithThem": m68, + "posingWithThem": m64, "preparingLogs": MessageLookupByLibrary.simpleMessage("正在准备日志..."), "preserveMore": MessageLookupByLibrary.simpleMessage("保留更多"), "pressAndHoldToPlayVideo": @@ -1281,7 +1281,7 @@ class MessageLookup extends MessageLookupByLibrary { "proceed": MessageLookupByLibrary.simpleMessage("继续"), "processed": MessageLookupByLibrary.simpleMessage("已处理"), "processing": MessageLookupByLibrary.simpleMessage("正在处理"), - "processingImport": m69, + "processingImport": m65, "processingVideos": MessageLookupByLibrary.simpleMessage("正在处理视频"), "publicLinkCreated": MessageLookupByLibrary.simpleMessage("公共链接已创建"), "publicLinkEnabled": MessageLookupByLibrary.simpleMessage("公开链接已启用"), @@ -1291,16 +1291,16 @@ class MessageLookup extends MessageLookupByLibrary { "raiseTicket": MessageLookupByLibrary.simpleMessage("提升工单"), "rateTheApp": MessageLookupByLibrary.simpleMessage("为此应用评分"), "rateUs": MessageLookupByLibrary.simpleMessage("给我们评分"), - "rateUsOnStore": m70, + "rateUsOnStore": m66, "reassignMe": MessageLookupByLibrary.simpleMessage("重新分配“我”"), - "reassignedToName": m71, + "reassignedToName": m67, "reassigningLoading": MessageLookupByLibrary.simpleMessage("正在重新分配..."), "recover": MessageLookupByLibrary.simpleMessage("恢复"), "recoverAccount": MessageLookupByLibrary.simpleMessage("恢复账户"), "recoverButton": MessageLookupByLibrary.simpleMessage("恢复"), "recoveryAccount": MessageLookupByLibrary.simpleMessage("恢复账户"), "recoveryInitiated": MessageLookupByLibrary.simpleMessage("已启动恢复"), - "recoveryInitiatedDesc": m72, + "recoveryInitiatedDesc": m68, "recoveryKey": MessageLookupByLibrary.simpleMessage("恢复密钥"), "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage("恢复密钥已复制到剪贴板"), @@ -1313,11 +1313,11 @@ class MessageLookup extends MessageLookupByLibrary { "recoveryKeyVerified": MessageLookupByLibrary.simpleMessage("恢复密钥已验证"), "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( "如果您忘记了密码,恢复密钥是恢复照片的唯一方法。您可以在“设置”>“账户”中找到恢复密钥。\n\n请在此处输入恢复密钥,以验证您是否已正确保存。"), - "recoveryReady": m73, + "recoveryReady": m69, "recoverySuccessful": MessageLookupByLibrary.simpleMessage("恢复成功!"), "recoveryWarning": MessageLookupByLibrary.simpleMessage("一位可信联系人正在尝试访问您的账户"), - "recoveryWarningBody": m74, + "recoveryWarningBody": m70, "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( "当前设备的功能不足以验证您的密码,但我们可以以适用于所有设备的方式重新生成。\n\n请使用您的恢复密钥登录并重新生成您的密码(如果您希望,可以再次使用相同的密码)。"), "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage("重新创建密码"), @@ -1328,7 +1328,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("把我们推荐给你的朋友然后获得延长一倍的订阅计划"), "referralStep1": MessageLookupByLibrary.simpleMessage("1. 将此代码提供给您的朋友"), "referralStep2": MessageLookupByLibrary.simpleMessage("2. 他们注册一个付费计划"), - "referralStep3": m75, + "referralStep3": m71, "referrals": MessageLookupByLibrary.simpleMessage("推荐"), "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage("推荐已暂停"), @@ -1351,7 +1351,7 @@ class MessageLookup extends MessageLookupByLibrary { "removeInvite": MessageLookupByLibrary.simpleMessage("移除邀请"), "removeLink": MessageLookupByLibrary.simpleMessage("移除链接"), "removeParticipant": MessageLookupByLibrary.simpleMessage("移除参与者"), - "removeParticipantBody": m76, + "removeParticipantBody": m72, "removePersonLabel": MessageLookupByLibrary.simpleMessage("移除人物标签"), "removePublicLink": MessageLookupByLibrary.simpleMessage("删除公开链接"), "removePublicLinks": MessageLookupByLibrary.simpleMessage("删除公开链接"), @@ -1366,7 +1366,7 @@ class MessageLookup extends MessageLookupByLibrary { "renameAlbum": MessageLookupByLibrary.simpleMessage("重命名相册"), "renameFile": MessageLookupByLibrary.simpleMessage("重命名文件"), "renewSubscription": MessageLookupByLibrary.simpleMessage("续费订阅"), - "renewsOn": m77, + "renewsOn": m73, "reportABug": MessageLookupByLibrary.simpleMessage("报告错误"), "reportBug": MessageLookupByLibrary.simpleMessage("报告错误"), "resendEmail": MessageLookupByLibrary.simpleMessage("重新发送电子邮件"), @@ -1384,7 +1384,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("请检查并删除您认为重复的项目。"), "reviewSuggestions": MessageLookupByLibrary.simpleMessage("查看建议"), "right": MessageLookupByLibrary.simpleMessage("向右"), - "roadtripWithThem": m78, + "roadtripWithThem": m74, "rotate": MessageLookupByLibrary.simpleMessage("旋转"), "rotateLeft": MessageLookupByLibrary.simpleMessage("向左旋转"), "rotateRight": MessageLookupByLibrary.simpleMessage("向右旋转"), @@ -1429,8 +1429,8 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("邀请他人,您将在此看到他们分享的所有照片"), "searchPersonsEmptySection": MessageLookupByLibrary.simpleMessage("处理和同步完成后,人物将显示在此处"), - "searchResultCount": m79, - "searchSectionsLengthMismatch": m80, + "searchResultCount": m75, + "searchSectionsLengthMismatch": m76, "security": MessageLookupByLibrary.simpleMessage("安全"), "seePublicAlbumLinksInApp": MessageLookupByLibrary.simpleMessage("在应用程序中查看公开相册链接"), @@ -1466,9 +1466,9 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("所选项目将从所有相册中删除并移动到回收站。"), "selectedItemsWillBeRemovedFromThisPerson": MessageLookupByLibrary.simpleMessage("选定的项目将从此人身上移除,但不会从您的库中删除。"), - "selectedPhotos": m6, - "selectedPhotosWithYours": m81, - "selfiesWithThem": m82, + "selectedPhotos": m77, + "selectedPhotosWithYours": m78, + "selfiesWithThem": m79, "send": MessageLookupByLibrary.simpleMessage("发送"), "sendEmail": MessageLookupByLibrary.simpleMessage("发送电子邮件"), "sendInvite": MessageLookupByLibrary.simpleMessage("发送邀请"), @@ -1491,16 +1491,16 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("打开相册并点击右上角的分享按钮进行分享"), "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("立即分享相册"), "shareLink": MessageLookupByLibrary.simpleMessage("分享链接"), - "shareMyVerificationID": m83, + "shareMyVerificationID": m80, "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage("仅与您想要的人分享"), - "shareTextConfirmOthersVerificationID": m7, + "shareTextConfirmOthersVerificationID": m81, "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage("下载 Ente,让我们轻松共享高质量的原始照片和视频"), - "shareTextReferralCode": m84, + "shareTextReferralCode": m82, "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage("与非 Ente 用户共享"), - "shareWithPeopleSectionTitle": m85, + "shareWithPeopleSectionTitle": m83, "shareYourFirstAlbum": MessageLookupByLibrary.simpleMessage("分享您的第一个相册"), "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( @@ -1511,7 +1511,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("新共享的照片"), "sharedPhotoNotificationsExplanation": MessageLookupByLibrary.simpleMessage("当有人将照片添加到您所属的共享相册时收到通知"), - "sharedWith": m86, + "sharedWith": m84, "sharedWithMe": MessageLookupByLibrary.simpleMessage("与我共享"), "sharedWithYou": MessageLookupByLibrary.simpleMessage("已与您共享"), "sharing": MessageLookupByLibrary.simpleMessage("正在分享..."), @@ -1525,11 +1525,11 @@ class MessageLookup extends MessageLookupByLibrary { "signOutOtherDevices": MessageLookupByLibrary.simpleMessage("登出其他设备"), "signUpTerms": MessageLookupByLibrary.simpleMessage( "我同意 服务条款隐私政策"), - "singleFileDeleteFromDevice": m87, + "singleFileDeleteFromDevice": m85, "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage("它将从所有相册中删除。"), - "singleFileInBothLocalAndRemote": m88, - "singleFileInRemoteOnly": m89, + "singleFileInBothLocalAndRemote": m86, + "singleFileInRemoteOnly": m87, "skip": MessageLookupByLibrary.simpleMessage("跳过"), "social": MessageLookupByLibrary.simpleMessage("社交"), "someItemsAreInBothEnteAndYourDevice": @@ -1556,8 +1556,8 @@ class MessageLookup extends MessageLookupByLibrary { "sortNewestFirst": MessageLookupByLibrary.simpleMessage("最新在前"), "sortOldestFirst": MessageLookupByLibrary.simpleMessage("最旧在前"), "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ 成功"), - "sportsWithThem": m90, - "spotlightOnThem": m91, + "sportsWithThem": m88, + "spotlightOnThem": m89, "spotlightOnYourself": MessageLookupByLibrary.simpleMessage("聚光灯下的自己"), "startAccountRecoveryTitle": MessageLookupByLibrary.simpleMessage("开始恢复"), @@ -1568,13 +1568,13 @@ class MessageLookup extends MessageLookupByLibrary { "storage": MessageLookupByLibrary.simpleMessage("存储空间"), "storageBreakupFamily": MessageLookupByLibrary.simpleMessage("家庭"), "storageBreakupYou": MessageLookupByLibrary.simpleMessage("您"), - "storageInGB": m1, + "storageInGB": m90, "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("已超出存储限制"), - "storageUsageInfo": m92, + "storageUsageInfo": m91, "streamDetails": MessageLookupByLibrary.simpleMessage("流详情"), "strongStrength": MessageLookupByLibrary.simpleMessage("强"), - "subAlreadyLinkedErrMessage": m93, - "subWillBeCancelledOn": m94, + "subAlreadyLinkedErrMessage": m92, + "subWillBeCancelledOn": m93, "subscribe": MessageLookupByLibrary.simpleMessage("订阅"), "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage("您需要有效的付费订阅才能启用共享。"), @@ -1588,7 +1588,7 @@ class MessageLookup extends MessageLookupByLibrary { "suggestFeatures": MessageLookupByLibrary.simpleMessage("建议新功能"), "sunrise": MessageLookupByLibrary.simpleMessage("在地平线上"), "support": MessageLookupByLibrary.simpleMessage("支持"), - "syncProgress": m95, + "syncProgress": m94, "syncStopped": MessageLookupByLibrary.simpleMessage("同步已停止"), "syncing": MessageLookupByLibrary.simpleMessage("正在同步···"), "systemTheme": MessageLookupByLibrary.simpleMessage("适应系统"), @@ -1596,7 +1596,7 @@ class MessageLookup extends MessageLookupByLibrary { "tapToEnterCode": MessageLookupByLibrary.simpleMessage("点击以输入代码"), "tapToUnlock": MessageLookupByLibrary.simpleMessage("点击解锁"), "tapToUpload": MessageLookupByLibrary.simpleMessage("点按上传"), - "tapToUploadIsIgnoredDue": m96, + "tapToUploadIsIgnoredDue": m95, "tempErrorContactSupportIfPersists": MessageLookupByLibrary.simpleMessage( "看起来出了点问题。 请稍后重试。 如果错误仍然存在,请联系我们的支持团队。"), @@ -1616,7 +1616,7 @@ class MessageLookup extends MessageLookupByLibrary { "theme": MessageLookupByLibrary.simpleMessage("主题"), "theseItemsWillBeDeletedFromYourDevice": MessageLookupByLibrary.simpleMessage("这些项目将从您的设备中删除。"), - "theyAlsoGetXGb": m8, + "theyAlsoGetXGb": m96, "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage("他们将从所有相册中删除。"), "thisActionCannotBeUndone": @@ -1751,7 +1751,7 @@ class MessageLookup extends MessageLookupByLibrary { "weAreOpenSource": MessageLookupByLibrary.simpleMessage("我们是开源的 !"), "weDontSupportEditingPhotosAndAlbumsThatYouDont": MessageLookupByLibrary.simpleMessage("我们不支持编辑您尚未拥有的照片和相册"), - "weHaveSendEmailTo": m2, + "weHaveSendEmailTo": m110, "weakStrength": MessageLookupByLibrary.simpleMessage("弱"), "welcomeBack": MessageLookupByLibrary.simpleMessage("欢迎回来!"), "whatsNew": MessageLookupByLibrary.simpleMessage("更新日志"), @@ -1759,7 +1759,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("可信联系人可以帮助恢复您的数据。"), "yearShort": MessageLookupByLibrary.simpleMessage("年"), "yearly": MessageLookupByLibrary.simpleMessage("每年"), - "yearsAgo": m110, + "yearsAgo": m111, "yes": MessageLookupByLibrary.simpleMessage("是"), "yesCancel": MessageLookupByLibrary.simpleMessage("是的,取消"), "yesConvertToViewer": MessageLookupByLibrary.simpleMessage("是的,转换为查看者"), @@ -1770,7 +1770,7 @@ class MessageLookup extends MessageLookupByLibrary { "yesRenew": MessageLookupByLibrary.simpleMessage("是的,续费"), "yesResetPerson": MessageLookupByLibrary.simpleMessage("是,重设人物"), "you": MessageLookupByLibrary.simpleMessage("您"), - "youAndThem": m111, + "youAndThem": m112, "youAreOnAFamilyPlan": MessageLookupByLibrary.simpleMessage("你在一个家庭计划中!"), "youAreOnTheLatestVersion": @@ -1787,7 +1787,7 @@ class MessageLookup extends MessageLookupByLibrary { MessageLookupByLibrary.simpleMessage("莫开玩笑,您不能与自己分享"), "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage("您没有任何存档的项目。"), - "youHaveSuccessfullyFreedUp": m112, + "youHaveSuccessfullyFreedUp": m113, "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage("您的账户已删除"), "yourMap": MessageLookupByLibrary.simpleMessage("您的地图"), diff --git a/mobile/lib/generated/l10n.dart b/mobile/lib/generated/l10n.dart index 58b8dcd23e..9ae89dbc95 100644 --- a/mobile/lib/generated/l10n.dart +++ b/mobile/lib/generated/l10n.dart @@ -2892,7 +2892,7 @@ class S { ); } - /// `{count, plural, zero{no memories} one{{formattedCount} memory} other{{formattedCount} memories}}` + /// `{count, plural, =0{no memories} one{{formattedCount} memory} other{{formattedCount} memories}}` String memoryCount(int count, String formattedCount) { return Intl.plural( count, @@ -5197,6 +5197,16 @@ class S { ); } + /// `Sorry, we could not backup this file right now, we will retry later.` + String get sorryBackupFailedDesc { + return Intl.message( + 'Sorry, we could not backup this file right now, we will retry later.', + name: 'sorryBackupFailedDesc', + desc: '', + args: [], + ); + } + /// `We could not backup your data.\nWe will retry later.` String get couldNotBackUpTryLater { return Intl.message( @@ -5648,7 +5658,7 @@ class S { ); } - /// `{count, plural, one {Move item} other {Move items}}` + /// `{count, plural, =1 {Move item} other {Move items}}` String moveItem(num count) { return Intl.plural( count, @@ -5660,7 +5670,7 @@ class S { ); } - /// `{count, plural, one {Add item} other {Add items}}` + /// `{count, plural, =1 {Add item} other {Add items}}` String addItem(num count) { return Intl.plural( count, @@ -6526,7 +6536,7 @@ class S { ); } - /// `{count, plural, one {It can be deleted from the device to free up {formattedSize}} other {They can be deleted from the device to free up {formattedSize}}}` + /// `{count, plural, =1 {It can be deleted from the device to free up {formattedSize}} other {They can be deleted from the device to free up {formattedSize}}}` String freeUpSpaceSaving(num count, Object formattedSize) { return Intl.plural( count, @@ -6560,7 +6570,7 @@ class S { ); } - /// `You can still access {count, plural, one {it} other {them}} on Ente as long as you have an active subscription` + /// `You can still access {count, plural, =1 {it} other {them}} on Ente as long as you have an active subscription` String freeUpAccessPostDelete(int count) { return Intl.message( 'You can still access ${Intl.plural(count, one: 'it', other: 'them')} on Ente as long as you have an active subscription', @@ -8950,7 +8960,7 @@ class S { ); } - /// `{count, plural, zero {Add viewer} one {Add viewer} other {Add viewers}}` + /// `{count, plural, =0 {Add viewer} =1 {Add viewer} other {Add viewers}}` String addViewers(num count) { return Intl.plural( count, @@ -8963,7 +8973,7 @@ class S { ); } - /// `{count, plural, zero {Add collaborator} one {Add collaborator} other {Add collaborators}}` + /// `{count, plural, =0 {Add collaborator} =1 {Add collaborator} other {Add collaborators}}` String addCollaborators(num count) { return Intl.plural( count, @@ -10127,11 +10137,11 @@ class S { ); } - /// `{count, plural, =0 {Added 0 viewer} =1 {Added 1 viewer} other {Added {count} viewers}}` + /// `{count, plural, =0 {Added 0 viewers} =1 {Added 1 viewer} other {Added {count} viewers}}` String viewersSuccessfullyAdded(int count) { return Intl.plural( count, - zero: 'Added 0 viewer', + zero: 'Added 0 viewers', one: 'Added 1 viewer', other: 'Added $count viewers', name: 'viewersSuccessfullyAdded', @@ -10355,11 +10365,11 @@ class S { ); } - /// `{count, plural, =0 {0 photo} =1 {1 photo} other {{count} photos}}` + /// `{count, plural, =0 {0 photos} =1 {1 photo} other {{count} photos}}` String photosCount(int count) { return Intl.plural( count, - zero: '0 photo', + zero: '0 photos', one: '1 photo', other: '$count photos', name: 'photosCount', @@ -11765,6 +11775,16 @@ class S { args: [], ); } + + /// `Curated memories` + String get curatedMemories { + return Intl.message( + 'Curated memories', + name: 'curatedMemories', + desc: '', + args: [], + ); + } } class AppLocalizationDelegate extends LocalizationsDelegate { @@ -11783,6 +11803,7 @@ class AppLocalizationDelegate extends LocalizationsDelegate { Locale.fromSubtags(languageCode: 'el'), Locale.fromSubtags(languageCode: 'es'), Locale.fromSubtags(languageCode: 'et'), + Locale.fromSubtags(languageCode: 'eu'), Locale.fromSubtags(languageCode: 'fa'), Locale.fromSubtags(languageCode: 'fr'), Locale.fromSubtags(languageCode: 'gu'), @@ -11799,8 +11820,11 @@ class AppLocalizationDelegate extends LocalizationsDelegate { Locale.fromSubtags(languageCode: 'ml'), Locale.fromSubtags(languageCode: 'nl'), Locale.fromSubtags(languageCode: 'no'), + Locale.fromSubtags(languageCode: 'or'), Locale.fromSubtags(languageCode: 'pl'), Locale.fromSubtags(languageCode: 'pt'), + Locale.fromSubtags(languageCode: 'pt', countryCode: 'BR'), + Locale.fromSubtags(languageCode: 'pt', countryCode: 'PT'), Locale.fromSubtags(languageCode: 'ro'), Locale.fromSubtags(languageCode: 'ru'), Locale.fromSubtags(languageCode: 'sl'), diff --git a/mobile/lib/l10n/intl_ar.arb b/mobile/lib/l10n/intl_ar.arb index 0520bd5e1d..7816bb9090 100644 --- a/mobile/lib/l10n/intl_ar.arb +++ b/mobile/lib/l10n/intl_ar.arb @@ -2,34 +2,1739 @@ "@@locale ": "en", "enterYourEmailAddress": "أدخل عنوان بريدك الإلكتروني", "accountWelcomeBack": "مرحبًا مجددًا!", - "emailAlreadyRegistered": "البريد الإلكتروني مسجل بالفعل.", + "emailAlreadyRegistered": "البريد الإلكتروني مُسَجَّل من قبل.", "emailNotRegistered": "البريد الإلكتروني غير مسجل.", "email": "البريد الإلكتروني", "cancel": "إلغاء", - "verify": "التحقّق", + "verify": "التحقق", "invalidEmailAddress": "عنوان البريد الإلكتروني غير صالح", - "enterValidEmail": "الرجاء إدخال بريد إلكتروني صالح.", + "enterValidEmail": "يرجى إدخال عنوان بريد إلكتروني صالح.", "deleteAccount": "حذف الحساب", - "askDeleteReason": "ما السبب الرئيسي وراء حذف حسابك؟", - "deleteAccountFeedbackPrompt": "نحن آسفون لرؤيتك تذهب. يرجى مشاركة ملاحظاتك لمساعدتنا على التحسن.", + "askDeleteReason": "ما السبب الرئيس لحذف حسابك؟", + "deleteAccountFeedbackPrompt": "نأسف لمغادرتك. نرجو مشاركة ملاحظاتك لمساعدتنا على التحسين.", "feedback": "ملاحظات", - "kindlyHelpUsWithThisInformation": "الرجاء مساعدتنا بهذه المعلومات", - "thisWillLogYouOutOfThisDevice": "سيؤدي هذا إلى تسجيل خروجك من هذا الجهاز!", + "kindlyHelpUsWithThisInformation": "يرجى مساعدتنا بهذه المعلومات", + "confirmDeletePrompt": "نعم، أرغب في حذف هذا الحساب وبياناته نهائيًا من جميع التطبيقات.", + "confirmAccountDeletion": "تأكيد حذف الحساب", + "deleteAccountPermanentlyButton": "حذف الحساب نهائيًا", + "yourAccountHasBeenDeleted": "تم حذف حسابك بنجاح.", + "selectReason": "اختر سببًا", + "deleteReason1": "تفتقر إلى مِيزة أساسية أحتاج إليها", + "deleteReason2": "التطبيق أو مِيزة معينة لا تعمل كما هو متوقع", + "deleteReason3": "وجدت خدمة أخرى أفضل", + "deleteReason4": "سببي غير مدرج", + "sendEmail": "إرسال بريد إلكتروني", + "deleteRequestSLAText": "ستتم معالجة طلبك خلال 72 ساعة.", + "deleteEmailRequest": "أرسل بريدًا إلكترونيًا إلى account-deletion@ente.io من عنوان بريدك الإلكتروني المسجل.", + "entePhotosPerm": "Ente بحاجة إلى إذن لحفظ صورك", + "ok": "حسنًا", + "createAccount": "إنشاء حساب", + "createNewAccount": "إنشاء حساب جديد", + "password": "كلمة المرور", + "confirmPassword": "تأكيد كلمة المرور", + "activeSessions": "الجلسات النشطة", + "oops": "عفوًا", + "somethingWentWrongPleaseTryAgain": "حدث خطأ ما، يرجى المحاولة مرة أخرى", + "thisWillLogYouOutOfThisDevice": "سيؤدي هذا إلى تسجيل خروجك من هذا الجهاز.", "thisWillLogYouOutOfTheFollowingDevice": "سيؤدي هذا إلى تسجيل خروجك من الجهاز التالي:", - "terminateSession": "إنهاء الجلسة؟", + "terminateSession": "إنهاء الجَلسةِ؟", "terminate": "إنهاء", "thisDevice": "هذا الجهاز", "recoverButton": "استرداد", - "recoverySuccessful": "نجح الاسترداد!", - "decrypting": "فك التشفير...", + "recoverySuccessful": "تم الاسترداد بنجاح!", + "decrypting": "جارٍ فك التشفير...", "incorrectRecoveryKeyTitle": "مفتاح الاسترداد غير صحيح", "incorrectRecoveryKeyBody": "مفتاح الاسترداد الذي أدخلته غير صحيح", - "forgotPassword": "نسيت كلمة المرور", - "enterYourRecoveryKey": "أدخل رمز الاسترداد", - "noRecoveryKey": "ما من مفتاح استرداد؟", - "sorry": "المعذرة", - "noRecoveryKeyNoDecryption": "لا يمكن فك تشفير بياناتك دون كلمة المرور أو مفتاح الاسترداد بسبب طبيعة بروتوكول التشفير الخاص بنا من النهاية إلى النهاية", + "forgotPassword": "نسيت كلمة المرور؟", + "enterYourRecoveryKey": "أدخل مفتاح الاسترداد", + "noRecoveryKey": "لا تملك مفتاح استرداد؟", + "sorry": "عفوًا", + "noRecoveryKeyNoDecryption": "نظرًا لطبيعة التشفير الكامل من طرف إلى طرف، لا يمكن فك تشفير بياناتك دون كلمة المرور أو مفتاح الاسترداد الخاص بك", "verifyEmail": "التحقق من البريد الإلكتروني", "toResetVerifyEmail": "لإعادة تعيين كلمة المرور، يرجى التحقق من بريدك الإلكتروني أولاً.", - "ackPasswordLostWarning": "أُدركُ أنّني فقدتُ كلمة مروري، فقد أفقد بياناتي لأن بياناتي مشفرة تشفيرًا تامًّا من النهاية إلى النهاية." + "checkInboxAndSpamFolder": "تحقق من صندوق الوارد ومجلد البريد غير الهام (Spam) لإكمال التحقق", + "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" + } + } + }, + "setPasswordTitle": "تعيين كلمة المرور", + "changePasswordTitle": "تغيير كلمة المرور", + "resetPasswordTitle": "إعادة تعيين كلمة المرور", + "encryptionKeys": "مفاتيح التشفير", + "passwordWarning": "نحن لا نخزن كلمة المرور هذه، لذا إذا نسيتها، لا يمكننا المساعدة في فك تشفير بياناتك.", + "enterPasswordToEncrypt": "أدخل كلمة مرور يمكننا استخدامها لتشفير بياناتك", + "enterNewPasswordToEncrypt": "أدخل كلمة مرور جديدة يمكننا استخدامها لتشفير بياناتك", + "weakStrength": "ضعيفة", + "strongStrength": "قوية", + "moderateStrength": "متوسطة", + "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}" + }, + "passwordChangedSuccessfully": "تم تغيير كلمة المرور بنجاح.", + "generatingEncryptionKeys": "جارٍ إنشاء مفاتيح التشفير...", + "pleaseWait": "يرجى الانتظار...", + "continueLabel": "متابعة", + "insecureDevice": "جهاز غير آمن", + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "عذرًا، لم نتمكن من إنشاء مفاتيح آمنة على هذا الجهاز.\n\nيرجى التسجيل من جهاز مختلف.", + "howItWorks": "كيف يعمل", + "encryption": "التشفير", + "ackPasswordLostWarning": "أدرك أنني إذا فقدت كلمة المرور، فقد أفقد بياناتي لأنها مشفرة بالكامل من طرف إلى طرف.", + "privacyPolicyTitle": "سياسة الخصوصية", + "termsOfServicesTitle": "شروط الخدمة", + "signUpTerms": "أوافق على شروط الخدمة وسياسة الخصوصية", + "logInLabel": "تسجيل الدخول", + "loginTerms": "بالنقر على تسجيل الدخول، أوافق على شروط الخدمة و سياسة الخصوصية", + "changeEmail": "تغيير البريد الإلكتروني", + "enterYourPassword": "أدخل كلمة المرور", + "welcomeBack": "أهلاً بعودتك!", + "contactSupport": "الاتصال بالدعم", + "incorrectPasswordTitle": "كلمة المرور غير صحيحة", + "pleaseTryAgain": "يرجى المحاولة مرة أخرى", + "recreatePasswordTitle": "إعادة إنشاء كلمة المرور", + "useRecoveryKey": "استخدام مفتاح الاسترداد", + "recreatePasswordBody": "لا يمكن التحقق من كلمة المرور على جهازك الحالي، لكن يمكننا تعديلها لتعمل على جميع الأجهزة.\n\nسجّل الدخول باستخدام مفتاح الاسترداد، ثم أنشئ كلمة مرور جديدة (يمكنك اختيار نفس الكلمة السابقة إذا أردت).", + "verifyPassword": "التحقق من كلمة المرور", + "recoveryKey": "مفتاح الاسترداد", + "recoveryKeyOnForgotPassword": "إذا نسيت كلمة المرور الخاصة بك، فإن الطريقة الوحيدة لاستعادة بياناتك هي باستخدام هذا المفتاح.", + "recoveryKeySaveDescription": "لا نحتفظ بنسخة من هذا المفتاح. يرجى حفظ المفتاح المكون من 24 كلمة في مكان آمن.", + "doThisLater": "لاحقًا", + "saveKey": "حفظ المفتاح", + "recoveryKeyCopiedToClipboard": "تم نسخ مفتاح الاسترداد إلى الحافظة", + "recoverAccount": "استعادة الحساب", + "recover": "استعادة", + "dropSupportEmail": "يرجى إرسال بريد إلكتروني إلى {supportEmail} من عنوان بريدك الإلكتروني المسجل.", + "@dropSupportEmail": { + "placeholders": { + "supportEmail": { + "description": "The support email address", + "type": "String", + "example": "support@ente.io" + } + } + }, + "twofactorSetup": "إعداد المصادقة الثنائية", + "enterCode": "أدخل الرمز", + "scanCode": "مسح الرمز", + "codeCopiedToClipboard": "تم نسخ الرمز إلى الحافظة", + "copypasteThisCodentoYourAuthenticatorApp": "انسخ هذا الرمز وألصقه\n في تطبيق المصادقة الخاص بك", + "tapToCopy": "انقر للنسخ", + "scanThisBarcodeWithnyourAuthenticatorApp": "امسح هذا الباركود باستخدام\nتطبيق المصادقة الخاص بك", + "enterThe6digitCodeFromnyourAuthenticatorApp": "أدخل الرمز المكون من 6 أرقام من\n تطبيق المصادقة الخاص بك", + "confirm": "تأكيد", + "setupComplete": "اكتمل الإعداد", + "saveYourRecoveryKeyIfYouHaventAlready": "احفظ مفتاح الاسترداد إذا لم تكن قد فعلت ذلك بالفعل.", + "thisCanBeUsedToRecoverYourAccountIfYou": "يمكن استخدام هذا المفتاح لاستعادة حسابك إذا فقدت جهاز المصادقة الثنائية.", + "twofactorAuthenticationPageTitle": "المصادقة الثنائية", + "lostDevice": "جهاز مفقود؟", + "verifyingRecoveryKey": "جارٍ التحقق من مفتاح الاسترداد...", + "recoveryKeyVerified": "تم التحقق من مفتاح الاسترداد.", + "recoveryKeySuccessBody": "مفتاح الاسترداد الخاص بك صالح. شكرًا على التحقق.\n\nيرجى تذكر الاحتفاظ بنسخة احتياطية آمنة من مفتاح الاسترداد.", + "invalidRecoveryKey": "مفتاح الاسترداد الذي أدخلته غير صالح. يرجى التأكد من أنه يحتوي على 24 كلمة، والتحقق من كتابة كل كلمة بشكل صحيح.\n\nإذا كنت تستخدم مفتاح استرداد قديمًا، تأكد من أنه مكون من 64 حرفًا، وتحقق من صحة كل حرف.", + "invalidKey": "المفتاح غير صالح", + "tryAgain": "المحاولة مرة أخرى", + "viewRecoveryKey": "عرض مفتاح الاسترداد", + "confirmRecoveryKey": "تأكيد مفتاح الاسترداد", + "recoveryKeyVerifyReason": "مفتاح الاسترداد هو الطريقة الوحيدة لاستعادة صورك إذا نسيت كلمة المرور. يمكنك العثور عليه في الإعدادات > الحساب.\n\nالرجاء إدخال مفتاح الاسترداد هنا للتحقق من أنك حفظته بشكل صحيح.", + "confirmYourRecoveryKey": "تأكيد مفتاح الاسترداد الخاص بك", + "addViewer": "إضافة مشاهد", + "addCollaborator": "إضافة متعاون", + "addANewEmail": "إضافة بريد إلكتروني جديد", + "orPickAnExistingOne": "أو اختر واحدًا موجودًا", + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": "يمكن للمتعاونين إضافة الصور ومقاطع الفيديو إلى الألبوم المشترك.", + "enterEmail": "أدخل البريد الإلكتروني", + "albumOwner": "المالك", + "@albumOwner": { + "description": "Role of the album owner" + }, + "you": "أنت", + "collaborator": "متعاون", + "addMore": "إضافة المزيد", + "@addMore": { + "description": "Button text to add more collaborators/viewers" + }, + "viewer": "مشاهد", + "remove": "إزالة", + "removeParticipant": "إزالة المشارك", + "@removeParticipant": { + "description": "menuSectionTitle for removing a participant" + }, + "manage": "إدارة", + "addedAs": "تمت الإضافة كـ", + "changePermissions": "تغيير الإذن؟", + "yesConvertToViewer": "نعم، التحويل إلى مشاهد", + "cannotAddMorePhotosAfterBecomingViewer": "لن يتمكن {user} من إضافة المزيد من الصور إلى هذا الألبوم.\n\nسيظل بإمكانه إزالة الصور الحالية التي أضافها.", + "allowAddingPhotos": "السماح بإضافة الصور", + "@allowAddingPhotos": { + "description": "Switch button to enable uploading photos to a public link" + }, + "allowAddPhotosDescription": "السماح للأشخاص الذين لديهم الرابط بإضافة صور إلى الألبوم المشترك أيضًا.", + "passwordLock": "قفل بكلمة مرور", + "canNotOpenTitle": "لا يمكن فتح هذا الألبوم", + "canNotOpenBody": "عذرًا، لا يمكن فتح هذا الألبوم في التطبيق.", + "disableDownloadWarningTitle": "يرجى الملاحظة", + "disableDownloadWarningBody": "لا يزال بإمكان المشاهدين التقاط لقطات شاشة أو حفظ نسخة من صورك باستخدام أدوات خارجية.", + "allowDownloads": "السماح بالتنزيلات", + "linkDeviceLimit": "حد الأجهزة", + "noDeviceLimit": "لا شيء", + "@noDeviceLimit": { + "description": "Text to indicate that there is limit on number of devices" + }, + "linkExpiry": "انتهاء صلاحية الرابط", + "linkExpired": "منتهي الصلاحية", + "linkEnabled": "مفعّل", + "linkNeverExpires": "أبدًا", + "expiredLinkInfo": "انتهت صلاحية هذا الرابط. يرجى اختيار وقت انتهاء صلاحية جديد أو تعطيل انتهاء صلاحية الرابط.", + "setAPassword": "تعيين كلمة مرور", + "lockButtonLabel": "قفل", + "enterPassword": "أدخل كلمة المرور", + "removeLink": "إزالة الرابط", + "manageLink": "إدارة الرابط", + "linkExpiresOn": "ستنتهي صلاحية الرابط في {expiryTime}", + "albumUpdated": "تم تحديث الألبوم", + "never": "أبدًا", + "custom": "مخصص", + "@custom": { + "description": "Label for setting custom value for link expiry" + }, + "after1Hour": "بعد ساعة", + "after1Day": "بعد يوم", + "after1Week": "بعد أسبوع", + "after1Month": "بعد شهر", + "after1Year": "بعد سنة", + "manageParticipants": "إدارة المشاركين", + "albumParticipantsCount": "{count, plural, =0 {لا يوجد مشاركون} =1 {مشارك واحد} two {مشاركان} few {{count} مشاركين} many {{count} مشاركًا} other {{count} مشارك}}", + "@albumParticipantsCount": { + "placeholders": { + "count": { + "type": "int", + "example": "5" + } + }, + "description": "Number of participants in an album, including the album owner." + }, + "collabLinkSectionDescription": "أنشئ رابطًا يسمح للأشخاص بإضافة الصور ومشاهدتها في ألبومك المشترك دون الحاجة إلى تطبيق Ente أو حساب. خيار مثالي لجمع صور الفعاليات بسهولة.", + "collectPhotos": "جمع الصور", + "collaborativeLink": "رابط تعاوني", + "shareWithNonenteUsers": "المشاركة مع غير مستخدمي Ente", + "createPublicLink": "إنشاء رابط عام", + "sendLink": "إرسال الرابط", + "copyLink": "نسخ الرابط", + "linkHasExpired": "انتهت صلاحية الرابط", + "publicLinkEnabled": "تمكين الرابط العام", + "shareALink": "مشاركة رابط", + "sharedAlbumSectionDescription": "أنشئ ألبومات مشتركة وتعاونية مع مستخدمي Ente الآخرين، بما في ذلك المستخدمين ذوي الاشتراكات المجانية.", + "shareWithPeopleSectionTitle": "{numberOfPeople, plural, =0 {مشاركة مع أشخاص محددين} =1 {تمت المشاركة مع شخص واحد} two {تمت المشاركة مع شخصين} few {تمت المشاركة مع {numberOfPeople} أشخاص} many {تمت المشاركة مع {numberOfPeople} شخصًا} other {تمت المشاركة مع {numberOfPeople} شخصًا}}", + "@shareWithPeopleSectionTitle": { + "placeholders": { + "numberOfPeople": { + "type": "int", + "example": "2" + } + } + }, + "thisIsYourVerificationId": "هذا هو معرّف التحقق الخاص بك", + "someoneSharingAlbumsWithYouShouldSeeTheSameId": "يجب أن يرى أي شخص يشارك ألبومات معك نفس معرّف التحقق على جهازه.", + "howToViewShareeVerificationID": "يرجى الطلب منهم الضغط مطولًا على عنوان بريدهم الإلكتروني في شاشة الإعدادات، والتأكد من تطابق المعرّفات على كلا الجهازين.", + "thisIsPersonVerificationId": "هذا هو معرّف التحقق الخاص بـ {email}", + "@thisIsPersonVerificationId": { + "placeholders": { + "email": { + "type": "String", + "example": "someone@ente.io" + } + } + }, + "verificationId": "معرّف التحقق", + "verifyEmailID": "التحقق من {email}", + "emailNoEnteAccount": "{email} لا يملك حسابًا على Ente.\n\nأرسل له دعوة لمشاركة الصور.", + "shareMyVerificationID": "إليك معرّف التحقق الخاص بي لـ ente.io: {verificationID}", + "shareTextConfirmOthersVerificationID": "مرحبًا، هل يمكنك تأكيد أن هذا هو معرّف التحقق الخاص بك على ente.io: {verificationID}؟", + "somethingWentWrong": "حدث خطأ ما", + "sendInvite": "إرسال دعوة", + "shareTextRecommendUsingEnte": "قم بتنزيل تطبيق Ente حتى نتمكن من مشاركة الصور ومقاطع الفيديو بالجودة الأصلية بسهولة.\n\nhttps://ente.io", + "done": "تم", + "applyCodeTitle": "تطبيق الرمز", + "enterCodeDescription": "أدخل الرمز المقدم من صديقك للمطالبة بمساحة تخزين مجانية لكما.", + "apply": "تطبيق", + "failedToApplyCode": "فشل تطبيق الرمز", + "enterReferralCode": "أدخل رمز الإحالة", + "codeAppliedPageTitle": "تم تطبيق الرمز", + "changeYourReferralCode": "تغيير رمز الإحالة الخاص بك", + "change": "تغيير", + "unavailableReferralCode": "عذرًا، هذا الرمز غير متوفر.", + "codeChangeLimitReached": "عذرًا، لقد تجاوزت الحد المسموح به لتعديلات الرمز.", + "onlyFamilyAdminCanChangeCode": "يرجى الاتصال بـ {familyAdminEmail} لتغيير الرمز الخاص بك.", + "storageInGB": "{storageAmountInGB} جيجابايت", + "claimed": "تم الحصول عليها", + "@claimed": { + "description": "Used to indicate storage claimed, like 10GB Claimed" + }, + "details": "التفاصيل", + "claimMore": "المطالبة بالمزيد!", + "theyAlsoGetXGb": "سيحصلون أيضًا على {storageAmountInGB} جيجابايت", + "freeStorageOnReferralSuccess": "{storageAmountInGB} جيجابايت مجانية في كل مرة يشترك فيها شخص بخطة مدفوعة ويطبق رمزك", + "shareTextReferralCode": "رمز إحالة Ente الخاص بي: {referralCode}\n\nطبقه في الإعدادات ← عام ← الإحالات للحصول على {referralStorageInGB} جيجابايت مجانًا بعد الاشتراك في خطة مدفوعة.\n\nhttps://ente.io", + "claimFreeStorage": "المطالبة بمساحة تخزين مجانية", + "inviteYourFriends": "ادعُ أصدقاءك", + "failedToFetchReferralDetails": "تعذر جلب تفاصيل الإحالة. يرجى المحاولة مرة أخرى لاحقًا.", + "referralStep1": "1. أعطِ هذا الرمز لأصدقائك", + "referralStep2": "2. يشتركون في خطة مدفوعة", + "referralStep3": "3. تحصلون كلاكما على {storageInGB} جيجابايت* مجانًا", + "referralsAreCurrentlyPaused": "الإحالات متوقفة مؤقتًا", + "youCanAtMaxDoubleYourStorage": "* يمكنك مضاعفة مساحة التخزين الخاصة بك بحد أقصى", + "claimedStorageSoFar": "{isFamilyMember, select, true {عائلتك حصلت على {storageAmountInGb} جيجابايت حتى الآن} false {لقد حصلت على {storageAmountInGb} جيجابايت حتى الآن} other {لقد حصلت على {storageAmountInGb} جيجابايت حتى الآن!}}", + "@claimedStorageSoFar": { + "placeholders": { + "isFamilyMember": { + "type": "String", + "example": "true" + }, + "storageAmountInGb": { + "type": "int", + "example": "10" + } + } + }, + "faq": "الأسئلة الشائعة", + "help": "المساعدة", + "oopsSomethingWentWrong": "عفوًا، حدث خطأ ما", + "peopleUsingYourCode": "الأشخاص الذين يستخدمون رمزك", + "eligible": "مؤهل", + "total": "المجموع", + "codeUsedByYou": "الرمز المستخدم من قبلك", + "freeStorageClaimed": "تم المطالبة بمساحة التخزين المجانية", + "freeStorageUsable": "مساحة تخزين مجانية متاحة للاستخدام", + "usableReferralStorageInfo": "مساحة التخزين القابلة للاستخدام مقيدة بخطتك الحالية.\nالمساحة التخزينية الزائدة التي تمت المطالبة بها ستصبح قابلة للاستخدام تلقائيًا عند ترقية خطتك.", + "removeFromAlbumTitle": "إزالة من الألبوم؟", + "removeFromAlbum": "إزالة من الألبوم", + "itemsWillBeRemovedFromAlbum": "سيتم إزالة العناصر المحددة من هذا الألبوم.", + "removeShareItemsWarning": "بعض العناصر التي تزيلها تمت إضافتها بواسطة أشخاص آخرين، وستفقد الوصول إليها.", + "addingToFavorites": "جارٍ الإضافة إلى المفضلة...", + "removingFromFavorites": "جارٍ الإزالة من المفضلة...", + "sorryCouldNotAddToFavorites": "عذرًا، تعذرت الإضافة إلى المفضلة!", + "sorryCouldNotRemoveFromFavorites": "عذرًا، تعذرت الإزالة من المفضلة!", + "subscribeToEnableSharing": "المشاركة متاحة فقط للاشتراكات المدفوعة النشطة.", + "subscribe": "اشتراك", + "canOnlyRemoveFilesOwnedByYou": "يمكنك فقط إزالة الملفات التي تملكها.", + "deleteSharedAlbum": "حذف الألبوم المشترك؟", + "deleteAlbum": "حذف الألبوم", + "deleteAlbumDialog": "هل ترغب أيضًا في حذف الصور (ومقاطع الفيديو) الموجودة في هذا الألبوم من جميع الألبومات الأخرى التي هي جزء منها؟", + "deleteSharedAlbumDialogBody": "سيتم حذف الألبوم للجميع.\n\nستفقد الوصول إلى الصور المشتركة في هذا الألبوم التي يملكها الآخرون.", + "yesRemove": "نعم، إزالة", + "creatingLink": "جارٍ إنشاء الرابط...", + "removeWithQuestionMark": "إزالة؟", + "removeParticipantBody": "سيتم إزالة {userEmail} من هذا الألبوم المشترك.\n\nسيتم أيضًا إزالة أي صور أضافها إلى الألبوم.", + "keepPhotos": "الاحتفاظ بالصور", + "deletePhotos": "حذف الصور", + "inviteToEnte": "دعوة إلى Ente", + "removePublicLink": "إزالة الرابط العام", + "disableLinkMessage": "سيؤدي هذا إلى إزالة الرابط العام للوصول إلى \"{albumName}\".", + "sharing": "جارٍ المشاركة...", + "youCannotShareWithYourself": "لا يمكنك المشاركة مع نفسك.", + "archive": "الأرشيف", + "createAlbumActionHint": "اضغط مطولاً لتحديد الصور ثم انقر على '+' لإنشاء ألبوم", + "importing": "جارٍ الاستيراد...", + "failedToLoadAlbums": "فشل تحميل الألبومات", + "hidden": "المخفية", + "authToViewYourHiddenFiles": "يرجى المصادقة للوصول إلى ملفاتك المخفية.", + "authToViewTrashedFiles": "يرجى المصادقة لعرض ملفاتك المحذوفة.", + "trash": "سلة المهملات", + "uncategorized": "غير مصنف", + "videoSmallCase": "فيديو", + "photoSmallCase": "صورة", + "singleFileDeleteHighlight": "سيتم حذفه من جميع الألبومات.", + "singleFileInBothLocalAndRemote": "{fileType} موجود في Ente وعلى جهازك.", + "singleFileInRemoteOnly": "سيتم حذف {fileType} من Ente.", + "singleFileDeleteFromDevice": "سيتم حذف {fileType} من جهازك.", + "deleteFromEnte": "الحذف من Ente", + "yesDelete": "نعم، حذف", + "movedToTrash": "تم النقل إلى سلة المهملات", + "deleteFromDevice": "الحذف من الجهاز", + "deleteFromBoth": "الحذف من كليهما", + "newAlbum": "ألبوم جديد", + "albums": "الألبومات", + "memoryCount": "{count, plural, =0 {لا توجد ذكريات} one {ذكرى واحدة} two {ذكريتان} few {{formattedCount} ذكريات} many {{formattedCount} ذكرى} other {{formattedCount} ذكرى}}", + "@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}", + "@selectedPhotos": { + "description": "Display the number of selected photos", + "type": "text", + "placeholders": { + "count": { + "example": "5", + "type": "int" + } + } + }, + "selectedPhotosWithYours": "تم تحديد {count} ({yourCount} منها لك)", + "@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": "الإعدادات المتقدمة", + "@advancedSettings": { + "description": "The text to display in the advanced settings section" + }, + "photoGridSize": "حجم شبكة الصور", + "manageDeviceStorage": "إدارة مساحة تخزين الجهاز", + "manageDeviceStorageDesc": "مراجعة ومسح ذاكرة التخزين المؤقت المحلية.", + "machineLearning": "تعلم الآلة", + "mlConsent": "تمكين تعلم الآلة", + "mlConsentTitle": "تمكين تعلم الآلة؟", + "mlConsentDescription": "إذا قمت بتمكين تعلم الآلة، سيقوم Ente باستخراج معلومات مثل هندسة الوجه من الملفات، بما في ذلك تلك التي تمت مشاركتها معك.\n\nسيحدث هذا على جهازك، وسيتم تشفير أي معلومات بيومترية تم إنشاؤها تشفيرًا تامًا من طرف إلى طرف.", + "mlConsentPrivacy": "يرجى النقر هنا لمزيد من التفاصيل حول هذه الميزة في سياسة الخصوصية الخاصة بنا", + "mlConsentConfirmation": "أنا أفهم، وأرغب في تمكين تعلم الآلة", + "magicSearch": "البحث السحري", + "discover": "اكتشاف", + "@discover": { + "description": "The text to display for the discover section under which we show receipts, screenshots, sunsets, greenery, etc." + }, + "discover_identity": "الهوية", + "discover_screenshots": "لقطات الشاشة", + "discover_receipts": "الإيصالات", + "discover_notes": "الملاحظات", + "discover_memes": "الميمز", + "discover_visiting_cards": "بطاقات الزيارة", + "discover_babies": "الأطفال", + "discover_pets": "الحيوانات الأليفة", + "discover_selfies": "صور السيلفي", + "discover_wallpapers": "الخلفيات", + "discover_food": "الطعام", + "discover_celebrations": "الاحتفالات", + "discover_sunset": "غروب الشمس", + "discover_hills": "التلال", + "discover_greenery": "المساحات الخضراء", + "mlIndexingDescription": "يرجى ملاحظة أن تعلم الآلة سيؤدي إلى استهلاك أعلى لعرض النطاق الترددي والبطارية حتى تتم فهرسة جميع العناصر.\nنوصي باستخدام تطبيق سطح المكتب لإجراء الفهرسة بشكل أسرع. سيتم مزامنة جميع النتائج تلقائيًا.", + "loadingModel": "جارٍ تحميل النماذج...", + "waitingForWifi": "في انتظار شبكة Wi-Fi...", + "status": "الحالة", + "indexedItems": "العناصر المفهرسة", + "pendingItems": "العناصر المعلقة", + "clearIndexes": "مسح الفهارس", + "selectFoldersForBackup": "تحديد المجلدات للنسخ الاحتياطي", + "selectedFoldersWillBeEncryptedAndBackedUp": "سيتم تشفير المجلدات المحددة ونسخها احتياطيًا", + "unselectAll": "إلغاء تحديد الكل", + "selectAll": "تحديد الكل", + "skip": "تخط", + "updatingFolderSelection": "جارٍ تحديث تحديد المجلد...", + "itemCount": "{count, plural, one {{count} عُنْصُر} other {{count} عَنَاصِر}}", + "deleteItemCount": "{count, plural, =1 {حذف عنصر واحد} two {حذف عنصرين} few {حذف {count} عناصر} many {حذف {count} عنصرًا} other {حذف {count} عنصرًا}}", + "duplicateItemsGroup": "{count} ملفات، {formattedSize} لكل منها", + "@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": "عرض الذكريات", + "yearsAgo": "{count, plural, one {قبل سنة} two {قبل سنتين} few {قبل {count} سنوات} many {قبل {count} سنة} other {قبل {count} سنة}}", + "backupSettings": "إعدادات النسخ الاحتياطي", + "backupStatus": "حالة النسخ الاحتياطي", + "backupStatusDescription": "ستظهر العناصر التي تم نسخها احتياطيًا هنا", + "backupOverMobileData": "النسخ الاحتياطي عبر بيانات الجوال", + "backupVideos": "النسخ الاحتياطي لمقاطع الفيديو", + "disableAutoLock": "تعطيل القفل التلقائي", + "deviceLockExplanation": "عطّل قفل شاشة الجهاز عندما يكون Ente قيد التشغيل في المقدمة ويقوم بالنسخ الاحتياطي.\nهذا الإجراء غير مطلوب عادةً، لكنه قد يسرّع إكمال التحميلات الكبيرة أو الاستيرادات الأولية للمكتبات الضخمة.", + "about": "حول التطبيق", + "weAreOpenSource": "نحن مفتوحو المصدر!", + "privacy": "الخصوصية", + "terms": "الشروط", + "checkForUpdates": "التحقق من وجود تحديثات", + "checkStatus": "التحقق من الحالة", + "checking": "جارٍ التحقق...", + "youAreOnTheLatestVersion": "أنت تستخدم أحدث إصدار.", + "account": "الحساب", + "manageSubscription": "إدارة الاشتراك", + "authToChangeYourEmail": "يرجى المصادقة لتغيير بريدك الإلكتروني.", + "changePassword": "تغيير كلمة المرور", + "authToChangeYourPassword": "يرجى المصادقة لتغيير كلمة المرور الخاصة بك.", + "emailVerificationToggle": "تأكيد عنوان البريد الإلكتروني", + "authToChangeEmailVerificationSetting": "يرجى المصادقة لتغيير إعداد التحقق من البريد الإلكتروني.", + "exportYourData": "تصدير بياناتك", + "logout": "تسجيل الخروج", + "authToInitiateAccountDeletion": "يرجى المصادقة لبدء عملية حذف الحساب.", + "areYouSureYouWantToLogout": "هل أنت متأكد من رغبتك في تسجيل الخروج؟", + "yesLogout": "نعم، تسجيل الخروج", + "aNewVersionOfEnteIsAvailable": "يتوفر إصدار جديد من Ente.", + "update": "تحديث", + "installManually": "التثبيت يدويًا", + "criticalUpdateAvailable": "يتوفر تحديث حرج", + "updateAvailable": "يتوفر تحديث", + "ignoreUpdate": "تجاهل", + "downloading": "جارٍ التنزيل...", + "cannotDeleteSharedFiles": "لا يمكن حذف الملفات المشتركة.", + "theDownloadCouldNotBeCompleted": "تعذر إكمال التنزيل.", + "retry": "إعادة المحاولة", + "backedUpFolders": "المجلدات المنسوخة احتياطيًا", + "backup": "النسخ الاحتياطي", + "freeUpDeviceSpace": "تحرير مساحة على الجهاز", + "freeUpDeviceSpaceDesc": "وفر مساحة على جهازك عن طريق مسح الملفات التي تم نسخها احتياطيًا.", + "allClear": "✨ كل شيء واضح", + "noDeviceThatCanBeDeleted": "لا توجد ملفات على هذا الجهاز يمكن حذفها.", + "removeDuplicates": "إزالة النسخ المكررة", + "removeDuplicatesDesc": "مراجعة وإزالة الملفات المتطابقة تمامًا.", + "viewLargeFiles": "الملفات الكبيرة", + "viewLargeFilesDesc": "عرض الملفات التي تستهلك أكبر قدر من مساحة التخزين.", + "noDuplicates": "✨ لا توجد ملفات مكررة", + "youveNoDuplicateFilesThatCanBeCleared": "لا توجد لديك أي ملفات مكررة يمكن مسحها.", + "success": "تم بنجاح", + "rateUs": "تقييم التطبيق", + "remindToEmptyDeviceTrash": "تذكر أيضًا إفراغ \"المحذوفة مؤخرًا\" من \"الإعدادات\" -> \"التخزين\" لاستعادة المساحة المحررة.", + "youHaveSuccessfullyFreedUp": "لقد حررت {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": "تذكر أيضًا إفراغ \"سلة المهملات\" لاستعادة المساحة المحررة.", + "sparkleSuccess": "✨ نجاح", + "duplicateFileCountWithStorageSaved": "لقد قمت بتنظيف {count, plural, one {ملف مكرر واحد} two {ملفين مكررين} few {{count} ملفات مكررة} many {{count} ملفًا مكررًا} other {{count} ملفًا مكررًا}}، مما وفر {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": "الخطط العائلية", + "referrals": "الإحالات", + "notifications": "الإشعارات", + "sharedPhotoNotifications": "إشعارات الصور المشتركة الجديدة", + "sharedPhotoNotificationsExplanation": "تلقّ إشعارات عندما يضيف شخص ما صورة إلى ألبوم مشترك أنت جزء منه.", + "advanced": "متقدم", + "general": "عام", + "security": "الأمان", + "authToViewYourRecoveryKey": "يرجى المصادقة لعرض مفتاح الاسترداد الخاص بك.", + "twofactor": "المصادقة الثنائية", + "authToConfigureTwofactorAuthentication": "يرجى المصادقة لإعداد المصادقة الثنائية.", + "lockscreen": "شاشة القفل", + "authToChangeLockscreenSetting": "يرجى المصادقة لتغيير إعدادات شاشة القفل.", + "viewActiveSessions": "عرض الجلسات النشطة", + "authToViewYourActiveSessions": "يرجى المصادقة لعرض جلساتك النشطة.", + "disableTwofactor": "تعطيل المصادقة الثنائية", + "confirm2FADisable": "هل أنت متأكد من رغبتك في تعطيل المصادقة الثنائية؟", + "no": "لا", + "yes": "نعم", + "social": "التواصل الاجتماعي", + "rateUsOnStore": "قيّمنا على {storeName}", + "blog": "المدونة", + "merchandise": "المنتجات الترويجية", + "twitter": "X (Twitter سابقًا)", + "mastodon": "Mastodon", + "matrix": "Matrix", + "discord": "Discord", + "reddit": "Reddit", + "yourStorageDetailsCouldNotBeFetched": "تعذر جلب تفاصيل التخزين الخاصة بك.", + "reportABug": "الإبلاغ عن خطأ", + "reportBug": "الإبلاغ عن خطأ", + "suggestFeatures": "اقتراح ميزة", + "support": "الدعم", + "theme": "المظهر", + "lightTheme": "فاتح", + "darkTheme": "داكن", + "systemTheme": "النظام", + "freeTrial": "تجربة مجانية", + "selectYourPlan": "اختر خطتك", + "enteSubscriptionPitch": "يحفظ Ente ذكرياتك، بحيث تظل دائمًا متاحة لك حتى لو فقدت جهازك.", + "enteSubscriptionShareWithFamily": "يمكنك أيضًا إضافة أفراد عائلتك إلى خطتك.", + "currentUsageIs": "استخدامك الحالي هو", + "@currentUsageIs": { + "description": "This text is followed by storage usage", + "examples": { + "0": "Current usage is 1.2 GB" + }, + "type": "text" + }, + "faqs": "الأسئلة الشائعة", + "renewsOn": "يتجدد الاشتراك في {endDate}", + "freeTrialValidTill": "التجربة المجانية صالحة حتى {endDate}", + "validTill": "صالح حتى {endDate}", + "addOnValidTill": "إضافتك بسعة {storageAmount} صالحة حتى {endDate}", + "playStoreFreeTrialValidTill": "التجربة المجانية صالحة حتى {endDate}.\nيمكنك اختيار خطة مدفوعة بعد ذلك.", + "subWillBeCancelledOn": "سيتم إلغاء اشتراكك في {endDate}", + "subscription": "الاشتراك", + "paymentDetails": "تفاصيل الدفع", + "manageFamily": "إدارة العائلة", + "contactToManageSubscription": "يرجى التواصل معنا على support@ente.io لإدارة اشتراكك في {provider}.", + "renewSubscription": "تجديد الاشتراك", + "cancelSubscription": "إلغاء الاشتراك", + "areYouSureYouWantToRenew": "هل أنت متأكد من رغبتك في التجديد؟", + "yesRenew": "نعم، تجديد", + "areYouSureYouWantToCancel": "هل أنت متأكد من رغبتك في الإلغاء؟", + "yesCancel": "نعم، إلغاء", + "failedToRenew": "فشل التجديد", + "failedToCancel": "فشل الإلغاء", + "twoMonthsFreeOnYearlyPlans": "شهرين مجانيين على الخطط السنوية.", + "monthly": "شهريًا", + "@monthly": { + "description": "The text to display for monthly plans", + "type": "text" + }, + "yearly": "سنويًا", + "@yearly": { + "description": "The text to display for yearly plans", + "type": "text" + }, + "confirmPlanChange": "تأكيد تغيير الخطة", + "areYouSureYouWantToChangeYourPlan": "هل أنت متأكد من رغبتك في تغيير خطتك؟", + "youCannotDowngradeToThisPlan": "لا يمكنك الترقية إلى هذه الخطة.", + "cancelOtherSubscription": "يرجى إلغاء اشتراكك الحالي من {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": "اختياري، قصير كما تشاء...", + "send": "إرسال", + "askCancelReason": "تم إلغاء اشتراكك. هل ترغب في مشاركة السبب؟", + "thankYouForSubscribing": "شكرًا لاشتراكك!", + "yourPurchaseWasSuccessful": "تم الشراء بنجاح.", + "yourPlanWasSuccessfullyUpgraded": "تمت ترقية خطتك بنجاح.", + "yourPlanWasSuccessfullyDowngraded": "تم تخفيض خطتك بنجاح.", + "yourSubscriptionWasUpdatedSuccessfully": "تم تحديث اشتراكك بنجاح.", + "googlePlayId": "معرّف Google Play", + "appleId": "معرّف Apple", + "playstoreSubscription": "اشتراك متجر Play", + "appstoreSubscription": "اشتراك متجر App Store", + "subAlreadyLinkedErrMessage": "تم ربط {id} الخاص بك بحساب Ente آخر.\nإذا كنت ترغب في استخدام {id} مع هذا الحساب، يرجى الاتصال بدعمنا.", + "visitWebToManage": "يرجى زيارة web.ente.io لإدارة اشتراكك.", + "couldNotUpdateSubscription": "تعذر تحديث الاشتراك.", + "pleaseContactSupportAndWeWillBeHappyToHelp": "يرجى التواصل مع support@ente.io وسنكون سعداء بمساعدتك!", + "paymentFailed": "فشلت عملية الدفع", + "paymentFailedTalkToProvider": "يرجى التواصل مع دعم {providerName} إذا تم خصم المبلغ منك.", + "@paymentFailedTalkToProvider": { + "description": "The text to display when the payment failed", + "type": "text", + "placeholders": { + "providerName": { + "example": "AppStore|PlayStore", + "type": "String" + } + } + }, + "continueOnFreeTrial": "الاستمرار في التجربة المجانية", + "areYouSureYouWantToExit": "هل أنت متأكد من رغبتك في الخروج؟", + "thankYou": "شكرًا لك", + "failedToVerifyPaymentStatus": "فشل التحقق من حالة الدفع.", + "pleaseWaitForSometimeBeforeRetrying": "يرجى الانتظار لبعض الوقت قبل إعادة المحاولة.", + "paymentFailedMessage": "للأسف، فشلت عملية الدفع الخاصة بك. يرجى الاتصال بالدعم وسوف نساعدك!", + "youAreOnAFamilyPlan": "أنت مشترك في خطة عائلية!", + "contactFamilyAdmin": "يرجى الاتصال بـ {familyAdminEmail} لإدارة اشتراكك.", + "leaveFamily": "مغادرة خطة العائلة", + "areYouSureThatYouWantToLeaveTheFamily": "هل أنت متأكد من رغبتك في مغادرة الخطة العائلية؟", + "leave": "مغادرة", + "rateTheApp": "تقييم التطبيق", + "startBackup": "بدء النسخ الاحتياطي", + "noPhotosAreBeingBackedUpRightNow": "لا يتم نسخ أي صور احتياطيًا في الوقت الحالي.", + "preserveMore": "حفظ المزيد", + "grantFullAccessPrompt": "يرجى السماح بالوصول إلى جميع الصور في تطبيق الإعدادات.", + "allowPermTitle": "السماح بالوصول إلى الصور", + "allowPermBody": "يرجى السماح بالوصول إلى صورك من الإعدادات حتى يتمكن Ente من عرض نسختك الاحتياطية ومكتبتك.", + "openSettings": "فتح الإعدادات", + "selectMorePhotos": "تحديد المزيد من الصور", + "existingUser": "مستخدم حالي", + "privateBackups": "نسخ احتياطية خاصة", + "forYourMemories": "لذكرياتك", + "endtoendEncryptedByDefault": "تشفير من طرف إلى طرف بشكل افتراضي", + "safelyStored": "مخزنة بأمان", + "atAFalloutShelter": "في ملجأ للطوارئ", + "designedToOutlive": "مصممة لتدوم", + "available": "متوفر", + "everywhere": "في كل مكان", + "androidIosWebDesktop": "أندرويد، iOS، الويب، سطح المكتب", + "mobileWebDesktop": "الهاتف المحمول، الويب، سطح المكتب", + "newToEnte": "جديد في Ente", + "pleaseLoginAgain": "يرجى تسجيل الدخول مرة أخرى.", + "autoLogoutMessage": "بسبب خلل تقني، تم تسجيل خروجك. نعتذر عن الإزعاج.", + "yourSubscriptionHasExpired": "انتهت صلاحية اشتراكك.", + "storageLimitExceeded": "تم تجاوز حد التخزين.", + "upgrade": "ترقية", + "raiseTicket": "فتح تذكرة دعم", + "@raiseTicket": { + "description": "Button text for raising a support tickets in case of unhandled errors during backup", + "type": "text" + }, + "backupFailed": "فشل النسخ الاحتياطي", + "couldNotBackUpTryLater": "لم نتمكن من نسخ بياناتك احتياطيًا.\nسنحاول مرة أخرى لاحقًا.", + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": "يمكن لـ Ente تشفير وحفظ الملفات فقط إذا منحت الإذن بالوصول إليها.", + "pleaseGrantPermissions": "يرجى منح الأذونات.", + "grantPermission": "منح الإذن", + "privateSharing": "مشاركة خاصة", + "shareOnlyWithThePeopleYouWant": "شارك فقط مع الأشخاص الذين تريدهم.", + "usePublicLinksForPeopleNotOnEnte": "استخدم الروابط العامة للأشخاص غير المسجلين في Ente.", + "allowPeopleToAddPhotos": "السماح للأشخاص بإضافة الصور", + "shareAnAlbumNow": "شارك ألبومًا الآن", + "collectEventPhotos": "جمع صور الفعالية", + "sessionExpired": "انتهت صلاحية الجلسة", + "loggingOut": "جارٍ تسجيل الخروج...", + "@onDevice": { + "description": "The text displayed above folders/albums stored on device", + "type": "text" + }, + "onDevice": "على الجهاز", + "@onEnte": { + "description": "The text displayed above albums backed up to Ente", + "type": "text" + }, + "onEnte": "على Ente", + "name": "الاسم", + "newest": "الأحدث", + "lastUpdated": "آخر تحديث", + "deleteEmptyAlbums": "حذف الألبومات الفارغة", + "deleteEmptyAlbumsWithQuestionMark": "حذف الألبومات الفارغة؟", + "deleteAlbumsDialogBody": "سيؤدي هذا إلى حذف جميع الألبومات الفارغة. هذا مفيد عندما تريد تقليل الفوضى في قائمة ألبوماتك.", + "deleteProgress": "جارٍ الحذف {currentlyDeleting} / {totalCount}", + "genericProgress": "جارٍ المعالجة {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": "حذف نهائي", + "canOnlyCreateLinkForFilesOwnedByYou": "يمكن إنشاء رابط للملفات التي تملكها فقط.", + "publicLinkCreated": "تم إنشاء الرابط العام.", + "youCanManageYourLinksInTheShareTab": "يمكنك إدارة روابطك في علامة تبويب المشاركة.", + "linkCopiedToClipboard": "تم نسخ الرابط إلى الحافظة.", + "restore": "استعادة", + "@restore": { + "description": "Display text for an action which triggers a restore of item from trash", + "type": "text" + }, + "moveToAlbum": "نقل إلى ألبوم", + "unhide": "إظهار", + "unarchive": "إلغاء الأرشفة", + "favorite": "المفضلة", + "removeFromFavorite": "إزالة من المفضلة", + "shareLink": "مشاركة الرابط", + "createCollage": "إنشاء كولاج", + "saveCollage": "حفظ الكولاج", + "collageSaved": "تم حفظ الكولاج في المعرض.", + "collageLayout": "التخطيط", + "addToEnte": "إضافة إلى Ente", + "addToAlbum": "إضافة إلى الألبوم", + "delete": "حذف", + "hide": "إخفاء", + "share": "مشاركة", + "unhideToAlbum": "إظهار في الألبوم", + "restoreToAlbum": "استعادة إلى الألبوم", + "moveItem": "{count, plural, =1 {نقل عنصر} two {نقل عنصرين} few {نقل {count} عناصر} many {نقل {count} عنصرًا} other {نقل {count} عنصرًا}}", + "@moveItem": { + "description": "Page title while moving one or more items to an album" + }, + "addItem": "{count, plural, =1 {إضافة عنصر} two {إضافة عنصرين} few {إضافة {count} عناصر} many {إضافة {count} عنصرًا} other {إضافة {count} عنصرًا}}", + "@addItem": { + "description": "Page title while adding one or more items to album" + }, + "createOrSelectAlbum": "إنشاء أو تحديد ألبوم", + "selectAlbum": "تحديد ألبوم", + "searchByAlbumNameHint": "اسم الألبوم", + "albumTitle": "عنوان الألبوم", + "enterAlbumName": "أدخل اسم الألبوم", + "restoringFiles": "جارٍ استعادة الملفات...", + "movingFilesToAlbum": "جارٍ نقل الملفات إلى الألبوم...", + "unhidingFilesToAlbum": "جارٍ إظهار الملفات في الألبوم...", + "canNotUploadToAlbumsOwnedByOthers": "لا يمكن التحميل إلى ألبومات يملكها آخرون.", + "uploadingFilesToAlbum": "جارٍ تحميل الملفات إلى الألبوم...", + "addedSuccessfullyTo": "تمت الإضافة بنجاح إلى {albumName}", + "movedSuccessfullyTo": "تم النقل بنجاح إلى {albumName}", + "thisAlbumAlreadyHDACollaborativeLink": "هذا الألبوم لديه رابط تعاوني بالفعل.", + "collaborativeLinkCreatedFor": "تم إنشاء رابط تعاوني لـ {albumName}", + "askYourLovedOnesToShare": "اطلب من أحبائك المشاركة", + "invite": "دعوة", + "shareYourFirstAlbum": "شارك ألبومك الأول", + "sharedWith": "تمت المشاركة مع {emailIDs}", + "sharedWithMe": "تمت مشاركتها معي", + "sharedByMe": "تمت مشاركتها بواسطتي", + "doubleYourStorage": "ضاعف مساحة التخزين الخاصة بك", + "referFriendsAnd2xYourPlan": "أحِل الأصدقاء وضاعف خطتك مرتين", + "shareAlbumHint": "افتح ألبومًا وانقر على زر المشاركة في الزاوية اليمنى العليا للمشاركة.", + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": "تعرض العناصر عدد الأيام المتبقية قبل الحذف الدائم.", + "trashDaysLeft": "{count, plural, =0 {قريبًا} =1 {يوم واحد} two {يومان} few {{count} أيام} many {{count} يومًا} other {{count} يومًا}}", + "@trashDaysLeft": { + "description": "Text to indicate number of days remaining before permanent deletion", + "placeholders": { + "count": { + "example": "1|2|3", + "type": "int" + } + } + }, + "deleteAll": "حذف الكل", + "renameAlbum": "إعادة تسمية الألبوم", + "convertToAlbum": "تحويل إلى ألبوم", + "setCover": "تعيين كغلاف", + "@setCover": { + "description": "Text to set cover photo for an album" + }, + "sortAlbumsBy": "فرز حسب", + "sortNewestFirst": "الأحدث أولاً", + "sortOldestFirst": "الأقدم أولاً", + "rename": "إعادة تسمية", + "leaveSharedAlbum": "مغادرة الألبوم المشترك؟", + "leaveAlbum": "مغادرة الألبوم", + "photosAddedByYouWillBeRemovedFromTheAlbum": "ستتم إزالة الصور التي أضفتها من الألبوم.", + "youveNoFilesInThisAlbumThatCanBeDeleted": "لا توجد لديك ملفات في هذا الألبوم يمكن حذفها.", + "youDontHaveAnyArchivedItems": "لا توجد لديك أي عناصر مؤرشفة.", + "ignoredFolderUploadReason": "تم تجاهل تحميل بعض الملفات في هذا الألبوم لأنه تم حذفها مسبقًا من Ente.", + "resetIgnoredFiles": "إعادة تعيين الملفات المتجاهلة", + "deviceFilesAutoUploading": "سيتم تحميل الملفات المضافة إلى ألبوم الجهاز هذا تلقائيًا إلى Ente.", + "turnOnBackupForAutoUpload": "قم بتشغيل النسخ الاحتياطي لتحميل الملفات المضافة إلى مجلد الجهاز هذا تلقائيًا إلى Ente.", + "noHiddenPhotosOrVideos": "لا توجد صور أو مقاطع فيديو مخفية", + "toHideAPhotoOrVideo": "لإخفاء صورة أو مقطع فيديو:", + "openTheItem": "• افتح العنصر", + "clickOnTheOverflowMenu": "• انقر على قائمة الخيارات الإضافية", + "click": "• انقر على", + "nothingToSeeHere": "لا يوجد شيء هنا! 👀", + "unarchiveAlbum": "إلغاء أرشفة الألبوم", + "archiveAlbum": "أرشفة الألبوم", + "calculating": "جارٍ الحساب...", + "pleaseWaitDeletingAlbum": "يرجى الانتظار، جارٍ حذف الألبوم", + "searchByExamples": "• أسماء الألبومات (مثل \"الكاميرا\")\n• أنواع الملفات (مثل \"مقاطع الفيديو\"، \".gif\")\n• السنوات والأشهر (مثل \"2022\"، \"يناير\")\n• العطلات (مثل \"عيد الميلاد\")\n• أوصاف الصور (مثل \"#مرح\")", + "youCanTrySearchingForADifferentQuery": "يمكنك محاولة البحث عن استعلام مختلف.", + "noResultsFound": "لم يتم العثور على نتائج.", + "addedBy": "تمت الإضافة بواسطة {emailOrName}", + "loadingExifData": "جارٍ تحميل بيانات EXIF...", + "viewAllExifData": "عرض جميع بيانات EXIF", + "noExifData": "لا توجد بيانات EXIF", + "thisImageHasNoExifData": "لا تحتوي هذه الصورة على بيانات EXIF.", + "exif": "EXIF", + "noResults": "لا توجد نتائج", + "weDontSupportEditingPhotosAndAlbumsThatYouDont": "لا ندعم تعديل الصور والألبومات التي لا تملكها بعد.", + "failedToFetchOriginalForEdit": "فشل جلب النسخة الأصلية للتعديل.", + "close": "إغلاق", + "setAs": "تعيين كـ", + "fileSavedToGallery": "تم حفظ الملف في المعرض.", + "filesSavedToGallery": "تم حفظ الملفات في المعرض.", + "fileFailedToSaveToGallery": "فشل حفظ الملف في المعرض.", + "download": "تنزيل", + "pressAndHoldToPlayVideo": "اضغط مطولاً لتشغيل الفيديو", + "pressAndHoldToPlayVideoDetailed": "اضغط مطولاً على الصورة لتشغيل الفيديو", + "downloadFailed": "فشل التنزيل", + "deduplicateFiles": "إزالة الملفات المكررة", + "deselectAll": "إلغاء تحديد الكل", + "reviewDeduplicateItems": "يرجى مراجعة وحذف العناصر التي تعتقد أنها مكررة.", + "clubByCaptureTime": "التجميع حسب وقت الالتقاط", + "clubByFileName": "التجميع حسب اسم الملف", + "count": "العدد", + "totalSize": "الحجم الإجمالي", + "longpressOnAnItemToViewInFullscreen": "اضغط مطولاً على عنصر لعرضه في وضع ملء الشاشة.", + "decryptingVideo": "جارٍ فك تشفير الفيديو...", + "authToViewYourMemories": "يرجى المصادقة لعرض ذكرياتك.", + "unlock": "فتح", + "freeUpSpace": "تحرير المساحة", + "freeUpSpaceSaving": "{count, plural, =1 {يمكن حذفه من الجهاز لتحرير {formattedSize}} two {يمكن حذفهما من الجهاز لتحرير {formattedSize}} few {يمكن حذفها من الجهاز لتحرير {formattedSize}} many {يمكن حذفها من الجهاز لتحرير {formattedSize}} other {يمكن حذفها من الجهاز لتحرير {formattedSize}}}", + "filesBackedUpInAlbum": "{count, plural, one {ملف واحد} two {ملفان} few {{formattedNumber} ملفات} many {{formattedNumber} ملفًا} other {{formattedNumber} ملفًا}} في هذا الألبوم تم نسخه احتياطيًا بأمان", + "@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 {ملف واحد} two {ملفان} few {{formattedNumber} ملفات} many {{formattedNumber} ملفًا} other {{formattedNumber} ملفًا}} على هذا الجهاز تم نسخه احتياطيًا بأمان", + "@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": "لا يزال بإمكانك الوصول {count, plural, =1 {إليه} two {إليهما} other {إليها}} على Ente طالما لديك اشتراك نشط.", + "@freeUpAccessPostDelete": { + "placeholders": { + "count": { + "example": "1", + "type": "int" + } + } + }, + "freeUpAmount": "تحرير {sizeInMBorGB}", + "thisEmailIsAlreadyInUse": "هذا البريد الإلكتروني مستخدم بالفعل.", + "incorrectCode": "رمز غير صحيح", + "authenticationFailedPleaseTryAgain": "فشلت المصادقة، يرجى المحاولة مرة أخرى.", + "verificationFailedPleaseTryAgain": "فشل التحقق، يرجى المحاولة مرة أخرى.", + "authenticating": "جارٍ المصادقة...", + "authenticationSuccessful": "تمت المصادقة بنجاح!", + "incorrectRecoveryKey": "مفتاح الاسترداد غير صحيح.", + "theRecoveryKeyYouEnteredIsIncorrect": "مفتاح الاسترداد الذي أدخلته غير صحيح.", + "twofactorAuthenticationSuccessfullyReset": "تمت إعادة تعيين المصادقة الثنائية بنجاح.", + "pleaseVerifyTheCodeYouHaveEntered": "يرجى التحقق من الرمز الذي أدخلته.", + "pleaseContactSupportIfTheProblemPersists": "يرجى الاتصال بالدعم إذا استمرت المشكلة.", + "twofactorAuthenticationHasBeenDisabled": "تم تعطيل المصادقة الثنائية.", + "sorryTheCodeYouveEnteredIsIncorrect": "عذرًا، الرمز الذي أدخلته غير صحيح.", + "yourVerificationCodeHasExpired": "انتهت صلاحية رمز التحقق الخاص بك.", + "emailChangedTo": "تم تغيير البريد الإلكتروني إلى {newEmail}", + "verifying": "جارٍ التحقق...", + "disablingTwofactorAuthentication": "جارٍ تعطيل المصادقة الثنائية...", + "allMemoriesPreserved": "تم حفظ جميع الذكريات", + "loadingGallery": "جارٍ تحميل المعرض...", + "syncing": "جارٍ المزامنة...", + "encryptingBackup": "جارٍ تشفير النسخة الاحتياطية...", + "syncStopped": "توقفت المزامنة", + "syncProgress": "{completed}/{total} ذكريات محفوظة", + "uploadingMultipleMemories": "جارٍ حفظ {count} ذكريات...", + "@uploadingMultipleMemories": { + "description": "Text to tell user how many memories are being preserved", + "placeholders": { + "count": { + "type": "String" + } + } + }, + "uploadingSingleMemory": "جارٍ حفظ ذكرى واحدة...", + "@syncProgress": { + "description": "Text to tell user how many memories have been preserved", + "placeholders": { + "completed": { + "type": "String" + }, + "total": { + "type": "String" + } + } + }, + "archiving": "جارٍ الأرشفة...", + "unarchiving": "جارٍ إلغاء الأرشفة...", + "successfullyArchived": "تمت الأرشفة بنجاح.", + "successfullyUnarchived": "تم إلغاء الأرشفة بنجاح.", + "renameFile": "إعادة تسمية الملف", + "enterFileName": "أدخل اسم الملف", + "filesDeleted": "تم حذف الملفات.", + "selectedFilesAreNotOnEnte": "الملفات المحددة ليست موجودة على Ente.", + "thisActionCannotBeUndone": "لا يمكن التراجع عن هذا الإجراء.", + "emptyTrash": "إفراغ سلة المهملات؟", + "permDeleteWarning": "سيتم حذف جميع العناصر في سلة المهملات نهائيًا.\n\nلا يمكن التراجع عن هذا الإجراء.", + "empty": "إفراغ", + "couldNotFreeUpSpace": "تعذر تحرير المساحة.", + "permanentlyDeleteFromDevice": "حذف نهائي من الجهاز؟", + "someOfTheFilesYouAreTryingToDeleteAre": "بعض الملفات التي تحاول حذفها متوفرة فقط على جهازك ولا يمكن استردادها إذا تم حذفها.", + "theyWillBeDeletedFromAllAlbums": "سيتم حذفها من جميع الألبومات.", + "someItemsAreInBothEnteAndYourDevice": "بعض العناصر موجودة في Ente وعلى جهازك.", + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": "سيتم حذف العناصر المحددة من جميع الألبومات ونقلها إلى سلة المهملات.", + "theseItemsWillBeDeletedFromYourDevice": "سيتم حذف هذه العناصر من جهازك.", + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "يبدو أن خطأً ما قد حدث. يرجى المحاولة مرة أخرى بعد بعض الوقت. إذا استمر الخطأ، يرجى الاتصال بفريق الدعم لدينا.", + "error": "خطأ", + "tempErrorContactSupportIfPersists": "يبدو أن خطأً ما قد حدث. يرجى المحاولة مرة أخرى بعد بعض الوقت. إذا استمر الخطأ، يرجى الاتصال بفريق الدعم لدينا.", + "networkHostLookUpErr": "تعذر الاتصال بـ Ente، يرجى التحقق من إعدادات الشبكة والاتصال بالدعم إذا استمر الخطأ.", + "networkConnectionRefusedErr": "تعذر الاتصال بـ Ente، يرجى المحاولة مرة أخرى بعد بعض الوقت. إذا استمر الخطأ، يرجى الاتصال بالدعم.", + "cachedData": "البيانات المؤقتة", + "clearCaches": "مسح ذاكرة التخزين المؤقت", + "remoteImages": "الصور عن بعد", + "remoteVideos": "مقاطع الفيديو عن بعد", + "remoteThumbnails": "الصور المصغرة عن بعد", + "pendingSync": "المزامنة المعلقة", + "localGallery": "المعرض المحلي", + "todaysLogs": "سجلات اليوم", + "viewLogs": "عرض السجلات", + "logsDialogBody": "سيؤدي هذا إلى إرسال السجلات لمساعدتنا في تصحيح مشكلتك. يرجى ملاحظة أنه سيتم تضمين أسماء الملفات للمساعدة في تتبع المشكلات المتعلقة بملفات معينة.", + "preparingLogs": "جارٍ تحضير السجلات...", + "emailYourLogs": "إرسال سجلاتك عبر البريد الإلكتروني", + "pleaseSendTheLogsTo": "يرجى إرسال السجلات إلى \n{toEmail}", + "copyEmailAddress": "نسخ عنوان البريد الإلكتروني", + "exportLogs": "تصدير السجلات", + "pleaseEmailUsAt": "يرجى مراسلتنا عبر البريد الإلكتروني على {toEmail}", + "dismiss": "تجاهل", + "didYouKnow": "هل تعلم؟", + "loadingMessage": "جارٍ تحميل صورك...", + "loadMessage1": "يمكنك مشاركة اشتراكك مع عائلتك.", + "loadMessage2": "لقد حفظنا أكثر من 30 مليون ذكرى حتى الآن.", + "loadMessage3": "نحتفظ بـ 3 نسخ من بياناتك، إحداها في ملجأ للطوارئ تحت الأرض.", + "loadMessage4": "جميع تطبيقاتنا مفتوحة المصدر.", + "loadMessage5": "تم تدقيق شفرتنا المصدرية والتشفير الخاص بنا خارجيًا.", + "loadMessage6": "يمكنك مشاركة روابط ألبوماتك مع أحبائك.", + "loadMessage7": "تعمل تطبيقات الهاتف المحمول الخاصة بنا في الخلفية لتشفير أي صور جديدة تلتقطها ونسخها احتياطيًا.", + "loadMessage8": "web.ente.io لديه أداة تحميل رائعة.", + "loadMessage9": "نستخدم XChaCha20-Poly1305 لتشفير بياناتك بأمان.", + "photoDescriptions": "أوصاف الصور", + "fileTypesAndNames": "أنواع وأسماء الملفات", + "location": "الموقع", + "moments": "اللحظات", + "searchFaceEmptySection": "سيتم عرض الأشخاص هنا بمجرد الانتهاء من الفهرسة.", + "searchDatesEmptySection": "ابحث حسب تاريخ أو شهر أو سنة.", + "searchLocationEmptySection": "تجميع الصور الملتقطة ضمن نصف قطر معين لصورة ما.", + "searchPeopleEmptySection": "ادعُ الأشخاص، وسترى جميع الصور التي شاركوها هنا.", + "searchAlbumsEmptySection": "الألبومات", + "searchFileTypesAndNamesEmptySection": "أنواع وأسماء الملفات", + "searchCaptionEmptySection": "أضف أوصافًا مثل \"#رحلة\" في معلومات الصورة للعثور عليها بسرعة هنا.", + "language": "اللغة", + "selectLanguage": "اختر اللغة", + "locationName": "اسم الموقع", + "addLocation": "إضافة موقع", + "groupNearbyPhotos": "تجميع الصور القريبة", + "kiloMeterUnit": "كم", + "addLocationButton": "إضافة", + "radius": "نصف القطر", + "locationTagFeatureDescription": "تقوم علامة الموقع بتجميع جميع الصور التي تم التقاطها ضمن نصف قطر معين لصورة ما.", + "galleryMemoryLimitInfo": "يتم عرض ما يصل إلى 1000 ذكرى في المعرض.", + "save": "حفظ", + "centerPoint": "نقطة المركز", + "pickCenterPoint": "اختيار نقطة المركز", + "useSelectedPhoto": "استخدام الصورة المحددة", + "resetToDefault": "إعادة التعيين إلى الافتراضي", + "@resetToDefault": { + "description": "Button text to reset cover photo to default" + }, + "edit": "تعديل", + "deleteLocation": "حذف الموقع", + "rotateLeft": "تدوير لليسار", + "flip": "قلب", + "rotateRight": "تدوير لليمين", + "saveCopy": "حفظ نسخة", + "light": "فاتح", + "color": "اللون", + "yesDiscardChanges": "نعم، تجاهل التغييرات", + "doYouWantToDiscardTheEditsYouHaveMade": "هل تريد تجاهل التعديلات التي قمت بها؟", + "saving": "جارٍ الحفظ...", + "editsSaved": "تم حفظ التعديلات.", + "oopsCouldNotSaveEdits": "عفوًا، تعذر حفظ التعديلات.", + "distanceInKMUnit": "كم", + "@distanceInKMUnit": { + "description": "Unit for distance in km" + }, + "dayToday": "اليوم", + "dayYesterday": "الأمس", + "storage": "التخزين", + "usedSpace": "المساحة المستخدمة", + "storageBreakupFamily": "العائلة", + "storageBreakupYou": "أنت", + "@storageBreakupYou": { + "description": "Label to indicate how much storage you are using when you are part of a family plan" + }, + "storageUsageInfo": "تم استخدام {usedAmount} {usedStorageUnit} من {totalAmount} {totalStorageUnit}", + "@storageUsageInfo": { + "description": "Example: 1.2 GB of 2 GB used or 100 GB or 2TB used" + }, + "availableStorageSpace": "{freeAmount} {storageUnit} متوفرة", + "appVersion": "الإصدار: {versionValue}", + "verifyIDLabel": "تحقق", + "fileInfoAddDescHint": "إضافة وصف...", + "editLocationTagTitle": "تعديل الموقع", + "setLabel": "تعيين", + "@setLabel": { + "description": "Label of confirm button to add a new custom radius to the radius selector of a location tag" + }, + "setRadius": "تعيين نصف القطر", + "familyPlanPortalTitle": "العائلة", + "familyPlanOverview": "أضف 5 أفراد من عائلتك إلى خطتك الحالية دون دفع رسوم إضافية.\n\nيحصل كل فرد على مساحة خاصة به، ولا يمكنهم رؤية ملفات بعضهم البعض إلا إذا تمت مشاركتها.\n\nالخطط العائلية متاحة للعملاء الذين لديهم اشتراك Ente مدفوع.\n\nاشترك الآن للبدء!", + "androidBiometricHint": "تحقق من الهوية", + "@androidBiometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "androidBiometricNotRecognized": "لم يتم التعرف. حاول مرة أخرى.", + "@androidBiometricNotRecognized": { + "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." + }, + "androidBiometricSuccess": "نجاح", + "@androidBiometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "androidCancelButton": "إلغاء", + "@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": "المصادقة مطلوبة", + "@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": "المصادقة البيومترية مطلوبة", + "@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." + }, + "androidDeviceCredentialsRequiredTitle": "بيانات اعتماد الجهاز مطلوبة", + "@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": "بيانات اعتماد الجهاز مطلوبة", + "@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": "الانتقال إلى الإعدادات", + "@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": "لم يتم إعداد المصادقة البيومترية على جهازك. انتقل إلى 'الإعدادات > الأمان' لإضافة المصادقة البيومترية.", + "@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": "تم تعطيل المصادقة البيومترية. يرجى قفل شاشتك وفتحها لتمكينها.", + "@iOSLockOut": { + "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." + }, + "iOSGoToSettingsDescription": "لم يتم إعداد المصادقة البيومترية على جهازك. يرجى تمكين Touch ID أو Face ID على هاتفك.", + "@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": "موافق", + "@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": "مساهمو OpenStreetMap", + "hostedAtOsmFrance": "مستضاف في OSM France", + "map": "الخريطة", + "@map": { + "description": "Label for the map view" + }, + "maps": "الخرائط", + "enableMaps": "تمكين الخرائط", + "enableMapsDesc": "سيؤدي هذا إلى عرض صورك على خريطة العالم.\n\nتستضيف هذه الخريطة OpenStreetMap، ولا تتم مشاركة المواقع الدقيقة لصورك أبدًا.\n\nيمكنك تعطيل هذه الميزة في أي وقت من الإعدادات.", + "quickLinks": "روابط سريعة", + "selectItemsToAdd": "تحديد العناصر للإضافة", + "addSelected": "إضافة المحدد", + "addFromDevice": "إضافة من الجهاز", + "addPhotos": "إضافة صور", + "noPhotosFoundHere": "لم يتم العثور على صور هنا", + "zoomOutToSeePhotos": "قم بالتصغير لرؤية الصور", + "noImagesWithLocation": "لا توجد صور تحتوي على موقع", + "unpinAlbum": "إلغاء تثبيت الألبوم", + "pinAlbum": "تثبيت الألبوم", + "create": "إنشاء", + "viewAll": "عرض الكل", + "nothingSharedWithYouYet": "لم تتم مشاركة أي شيء معك بعد", + "noAlbumsSharedByYouYet": "لم تشارك أي ألبومات بعد", + "sharedWithYou": "تمت مشاركتها معك", + "sharedByYou": "تمت مشاركتها بواسطتك", + "inviteYourFriendsToEnte": "ادعُ أصدقاءك إلى Ente", + "failedToDownloadVideo": "فشل تنزيل الفيديو", + "hiding": "جارٍ الإخفاء...", + "unhiding": "جارٍ إظهار...", + "successfullyHid": "تم الإخفاء بنجاح.", + "successfullyUnhid": "تم الإظهار بنجاح.", + "crashReporting": "الإبلاغ عن الأعطال", + "resumableUploads": "تحميلات قابلة للاستئناف", + "addToHiddenAlbum": "إضافة إلى الألبوم المخفي", + "moveToHiddenAlbum": "نقل إلى الألبوم المخفي", + "fileTypes": "أنواع الملفات", + "deleteConfirmDialogBody": "هذا الحساب مرتبط بتطبيقات Ente الأخرى، إذا كنت تستخدم أيًا منها. سيتم جدولة بياناتك التي تم تحميلها، عبر جميع تطبيقات Ente، للحذف، وسيتم حذف حسابك نهائيًا.", + "hearUsWhereTitle": "كيف سمعت عن Ente؟ (اختياري)", + "hearUsExplanation": "نحن لا نتتبع عمليات تثبيت التطبيق. سيساعدنا إذا أخبرتنا أين وجدتنا!", + "viewAddOnButton": "عرض الإضافات", + "addOns": "الإضافات", + "addOnPageSubtitle": "تفاصيل الإضافات", + "yourMap": "خريطتك", + "modifyYourQueryOrTrySearchingFor": "قم بتعديل استعلامك، أو حاول البحث عن", + "blackFridaySale": "تخفيضات الجمعة السوداء", + "upto50OffUntil4thDec": "خصم يصل إلى 50%، حتى 4 ديسمبر.", + "photos": "الصور", + "videos": "مقاطع الفيديو", + "livePhotos": "الصور الحية", + "searchHint1": "بحث سريع على الجهاز", + "searchHint2": "تواريخ الصور، الأوصاف", + "searchHint3": "الألبومات، أسماء الملفات، والأنواع", + "searchHint4": "الموقع", + "searchHint5": "قريبًا: الوجوه والبحث السحري ✨", + "addYourPhotosNow": "أضف صورك الآن", + "searchResultCount": "{count, plural, one{{count} النتائج التي تم العثور عليها} other{{count} النتائج التي تم العثور عليها}}", + "@searchResultCount": { + "description": "Text to tell user how many results were found for their search query", + "placeholders": { + "count": { + "example": "1|2|3", + "type": "int" + } + } + }, + "faces": "الوجوه", + "people": "الأشخاص", + "contents": "المحتويات", + "addNew": "إضافة جديد", + "@addNew": { + "description": "Text to add a new item (location tag, album, caption etc)" + }, + "contacts": "جهات الاتصال", + "noInternetConnection": "لا يوجد اتصال بالإنترنت", + "pleaseCheckYourInternetConnectionAndTryAgain": "يرجى التحقق من اتصال الإنترنت الخاص بك والمحاولة مرة أخرى.", + "signOutFromOtherDevices": "تسجيل الخروج من الأجهزة الأخرى", + "signOutOtherBody": "إذا كنت تعتقد أن شخصًا ما قد يعرف كلمة مرورك، يمكنك إجبار جميع الأجهزة الأخرى التي تستخدم حسابك على تسجيل الخروج.", + "signOutOtherDevices": "تسجيل الخروج من الأجهزة الأخرى", + "doNotSignOut": "عدم تسجيل الخروج", + "editLocation": "تعديل الموقع", + "selectALocation": "تحديد موقع", + "selectALocationFirst": "حدد موقعًا أولاً", + "changeLocationOfSelectedItems": "تغيير موقع العناصر المحددة؟", + "editsToLocationWillOnlyBeSeenWithinEnte": "ستكون التعديلات على الموقع مرئية فقط داخل Ente.", + "cleanUncategorized": "تنظيف غير المصنف", + "cleanUncategorizedDescription": "إزالة جميع الملفات من قسم 'غير مصنف' الموجودة في ألبومات أخرى.", + "waitingForVerification": "في انتظار التحقق...", + "passkey": "مفتاح المرور", + "passkeyAuthTitle": "التحقق من مفتاح المرور", + "loginWithTOTP": "تسجيل الدخول باستخدام TOTP", + "passKeyPendingVerification": "التحقق لا يزال معلقًا.", + "loginSessionExpired": "انتهت صلاحية الجلسة.", + "loginSessionExpiredDetails": "انتهت صلاحية جلستك. يرجى تسجيل الدخول مرة أخرى.", + "verifyPasskey": "التحقق من مفتاح المرور", + "playOnTv": "تشغيل الألبوم على التلفزيون", + "pair": "إقران", + "deviceNotFound": "لم يتم العثور على الجهاز", + "castInstruction": "قم بزيارة cast.ente.io على الجهاز الذي تريد إقرانه.\n\nأدخل الرمز أدناه لتشغيل الألبوم على تلفزيونك.", + "deviceCodeHint": "أدخل الرمز", + "joinDiscord": "الانضمام إلى Discord", + "locations": "المواقع", + "addAName": "إضافة اسم", + "findThemQuickly": "اعثر عليهم بسرعة", + "@findThemQuickly": { + "description": "Subtitle to indicate that the user can find people quickly by name" + }, + "findPeopleByName": "البحث عن الأشخاص بسرعة بالاسم", + "addViewers": "{count, plural, =0 {إضافة مشاهد} =1 {إضافة مشاهد} two {إضافة مشاهدين} few {إضافة {count} مشاهدين} many {إضافة {count} مشاهدًا} other {إضافة {count} مشاهدًا}}", + "addCollaborators": "{count, plural, =0 {إضافة متعاون} =1 {إضافة متعاون} two {إضافة متعاونين} few {إضافة {count} متعاونين} many {إضافة {count} متعاونًا} other {إضافة {count} متعاونًا}}", + "longPressAnEmailToVerifyEndToEndEncryption": "اضغط مطولاً على بريد إلكتروني للتحقق من التشفير من طرف إلى طرف.", + "developerSettingsWarning": "هل أنت متأكد من رغبتك في تعديل إعدادات المطور؟", + "developerSettings": "إعدادات المطور", + "serverEndpoint": "نقطة نهاية الخادم", + "invalidEndpoint": "نقطة النهاية غير صالحة", + "invalidEndpointMessage": "عذرًا، نقطة النهاية التي أدخلتها غير صالحة. يرجى إدخال نقطة نهاية صالحة والمحاولة مرة أخرى.", + "endpointUpdatedMessage": "تم تحديث نقطة النهاية بنجاح.", + "customEndpoint": "متصل بـ {endpoint}", + "createCollaborativeLink": "إنشاء رابط تعاوني", + "search": "بحث", + "enterPersonName": "أدخل اسم الشخص", + "enterName": "أدخل الاسم", + "savePerson": "حفظ الشخص", + "editPerson": "تعديل الشخص", + "mergedPhotos": "الصور المدمجة", + "orMergeWithExistingPerson": "أو الدمج مع شخص موجود", + "enterDateOfBirth": "تاريخ الميلاد (اختياري)", + "birthday": "تاريخ الميلاد", + "removePersonLabel": "إزالة تسمية الشخص", + "autoPairDesc": "الإقران التلقائي يعمل فقط مع الأجهزة التي تدعم Chromecast.", + "manualPairDesc": "الإقران بالرمز السري يعمل مع أي شاشة ترغب في عرض ألبومك عليها.", + "connectToDevice": "الاتصال بالجهاز", + "autoCastDialogBody": "سترى أجهزة Cast المتاحة هنا.", + "autoCastiOSPermission": "تأكد من تشغيل أذونات الشبكة المحلية لتطبيق Ente Photos في الإعدادات.", + "noDeviceFound": "لم يتم العثور على جهاز.", + "stopCastingTitle": "إيقاف البث", + "stopCastingBody": "هل تريد إيقاف البث؟", + "castIPMismatchTitle": "فشل بث الألبوم", + "castIPMismatchBody": "يرجى التأكد من أنك متصل بنفس الشبكة المتصل بها التلفزيون.", + "pairingComplete": "اكتمل الإقران", + "savingEdits": "جارٍ حفظ التعديلات...", + "autoPair": "إقران تلقائي", + "pairWithPin": "الإقران بالرمز السري", + "faceRecognition": "التعرف على الوجوه", + "foundFaces": "الوجوه التي تم العثور عليها", + "clusteringProgress": "تقدم التجميع", + "indexingIsPaused": "الفهرسة متوقفة مؤقتًا. سيتم استئنافها تلقائيًا عندما يكون الجهاز جاهزًا.", + "trim": "قص", + "crop": "اقتصاص", + "rotate": "تدوير", + "left": "يسار", + "right": "يمين", + "whatsNew": "ما الجديد", + "reviewSuggestions": "مراجعة الاقتراحات", + "review": "مراجعة", + "useAsCover": "استخدام كغلاف", + "notPersonLabel": "ليس {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": "تمكين", + "enabled": "مُمكّن", + "moreDetails": "المزيد من التفاصيل", + "enableMLIndexingDesc": "يدعم Ente تعلم الآلة على الجهاز للتعرف على الوجوه والبحث السحري وميزات البحث المتقدم الأخرى.", + "magicSearchHint": "يسمح البحث السحري بالبحث عن الصور حسب محتوياتها، مثل 'زهرة'، 'سيارة حمراء'، 'وثائق هوية'", + "panorama": "بانوراما", + "reenterPassword": "إعادة إدخال كلمة المرور", + "reenterPin": "إعادة إدخال رمز PIN", + "deviceLock": "قفل الجهاز", + "pinLock": "قفل برمز PIN", + "next": "التالي", + "setNewPassword": "تعيين كلمة مرور جديدة", + "enterPin": "أدخل رمز PIN", + "setNewPin": "تعيين رمز PIN جديد", + "appLock": "قفل التطبيق", + "noSystemLockFound": "لم يتم العثور على قفل نظام.", + "tapToUnlock": "انقر لفتح القفل", + "tooManyIncorrectAttempts": "محاولات غير صحيحة كثيرة جدًا.", + "videoInfo": "معلومات الفيديو", + "autoLock": "قفل تلقائي", + "immediately": "فورًا", + "autoLockFeatureDescription": "الوقت الذي يتم بعده قفل التطبيق بعد وضعه في الخلفية.", + "hideContent": "إخفاء المحتوى", + "hideContentDescriptionAndroid": "يخفي محتوى التطبيق في مبدل التطبيقات ويعطل لقطات الشاشة.", + "hideContentDescriptionIos": "يخفي محتوى التطبيق في مبدل التطبيقات.", + "passwordStrengthInfo": "يتم حساب قوة كلمة المرور مع الأخذ في الاعتبار طول كلمة المرور، والأحرف المستخدمة، وما إذا كانت كلمة المرور تظهر في قائمة أفضل 10,000 كلمة مرور شائعة الاستخدام.", + "noQuickLinksSelected": "لم يتم تحديد روابط سريعة.", + "pleaseSelectQuickLinksToRemove": "يرجى تحديد الروابط السريعة للإزالة.", + "removePublicLinks": "إزالة الروابط العامة", + "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "سيؤدي هذا إلى إزالة الروابط العامة لجميع الروابط السريعة المحددة.", + "guestView": "عرض الضيف", + "guestViewEnablePreSteps": "لتمكين عرض الضيف، يرجى إعداد رمز مرور الجهاز أو قفل الشاشة في إعدادات النظام.", + "nameTheAlbum": "تسمية الألبوم", + "collectPhotosDescription": "أنشئ رابطًا يمكن لأصدقائك من خلاله تحميل الصور بالجودة الأصلية.", + "collect": "جمع", + "appLockDescriptions": "اختر بين شاشة القفل الافتراضية لجهازك وشاشة قفل مخصصة برمز PIN أو كلمة مرور.", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "لتمكين قفل التطبيق، يرجى إعداد رمز مرور الجهاز أو قفل الشاشة في إعدادات النظام.", + "authToViewPasskey": "يرجى المصادقة لعرض مفتاح المرور الخاص بك.", + "loopVideoOn": "تشغيل تكرار الفيديو", + "loopVideoOff": "إيقاف تكرار الفيديو", + "localSyncErrorMessage": "يبدو أن خطأً ما قد حدث لأن مزامنة الصور المحلية تستغرق وقتًا أطول من المتوقع. يرجى التواصل مع فريق الدعم لدينا.", + "showPerson": "إظهار الشخص", + "sort": "فرز", + "mostRecent": "الأحدث", + "mostRelevant": "الأكثر صلة", + "loadingYourPhotos": "جارٍ تحميل صورك...", + "processingImport": "جارٍ معالجة {folderName}...", + "personName": "اسم الشخص", + "addNewPerson": "إضافة شخص جديد", + "addNameOrMerge": "إضافة اسم أو دمج", + "mergeWithExisting": "الدمج مع شخص موجود", + "newPerson": "شخص جديد", + "addName": "إضافة اسم", + "add": "إضافة", + "extraPhotosFoundFor": "تم العثور على صور إضافية لـ {text}", + "@extraPhotosFoundFor": { + "placeholders": { + "text": { + "type": "String" + } + } + }, + "extraPhotosFound": "تم العثور على صور إضافية", + "configuration": "التكوين", + "localIndexing": "الفهرسة المحلية", + "processed": "تمت المعالجة", + "resetPerson": "إزالة", + "areYouSureYouWantToResetThisPerson": "هل أنت متأكد من رغبتك في إعادة تعيين هذا الشخص؟", + "allPersonGroupingWillReset": "سيتم إعادة تعيين جميع تجمعات هذا الشخص، وستفقد جميع الاقتراحات المقدمة لهذا الشخص.", + "yesResetPerson": "نعم، إعادة تعيين الشخص", + "onlyThem": "هم فقط", + "checkingModels": "جارٍ فحص النماذج...", + "enableMachineLearningBanner": "قم بتمكين تعلم الآلة للبحث السحري والتعرف على الوجوه.", + "searchDiscoverEmptySection": "سيتم عرض الصور هنا بمجرد اكتمال المعالجة والمزامنة.", + "searchPersonsEmptySection": "سيتم عرض الأشخاص هنا بمجرد اكتمال المعالجة والمزامنة.", + "viewersSuccessfullyAdded": "{count, plural, =0 {تمت إضافة 0 مشاهدين} =1 {تمت إضافة مشاهد واحد} two {تمت إضافة مشاهدين} few {تمت إضافة {count} مشاهدين} many {تمت إضافة {count} مشاهدًا} other {تمت إضافة {count} مشاهدًا}}", + "@viewersSuccessfullyAdded": { + "placeholders": { + "count": { + "type": "int", + "example": "2" + } + }, + "description": "Number of viewers that were successfully added to an album." + }, + "collaboratorsSuccessfullyAdded": "{count, plural, =0 {تمت إضافة 0 متعاونين} =1 {تمت إضافة متعاون واحد} two {تمت إضافة متعاونين} few {تمت إضافة {count} متعاونين} many {تمت إضافة {count} متعاونًا} other {تمت إضافة {count} متعاونًا}}", + "@collaboratorsSuccessfullyAdded": { + "placeholders": { + "count": { + "type": "int", + "example": "2" + } + }, + "description": "Number of collaborators that were successfully added to an album." + }, + "accountIsAlreadyConfigured": "الحساب تم تكوينه بالفعل.", + "sessionIdMismatch": "عدم تطابق معرّف الجلسة", + "@sessionIdMismatch": { + "description": "In passkey page, deeplink is ignored because of session ID mismatch." + }, + "failedToFetchActiveSessions": "فشل جلب الجلسات النشطة.", + "@failedToFetchActiveSessions": { + "description": "In session page, warn user (in toast) that active sessions could not be fetched." + }, + "failedToRefreshStripeSubscription": "فشل تحديث الاشتراك.", + "failedToPlayVideo": "فشل تشغيل الفيديو.", + "uploadIsIgnoredDueToIgnorereason": "تم تجاهل التحميل بسبب {ignoreReason}", + "@uploadIsIgnoredDueToIgnorereason": { + "placeholders": { + "ignoreReason": { + "type": "String", + "example": "no network" + } + } + }, + "typeOfGallerGallerytypeIsNotSupportedForRename": "نوع المعرض {galleryType} غير مدعوم لإعادة التسمية.", + "@typeOfGallerGallerytypeIsNotSupportedForRename": { + "placeholders": { + "galleryType": { + "type": "String", + "example": "no network" + } + } + }, + "tapToUploadIsIgnoredDue": "انقر للتحميل، تم تجاهل التحميل حاليًا بسبب {ignoreReason}", + "@tapToUploadIsIgnoredDue": { + "description": "Shown in upload icon widet, inside a tooltip.", + "placeholders": { + "ignoreReason": { + "type": "String", + "example": "no network" + } + } + }, + "tapToUpload": "انقر للتحميل", + "@tapToUpload": { + "description": "Shown in upload icon widet, inside a tooltip." + }, + "info": "معلومات", + "addFiles": "إضافة ملفات", + "castAlbum": "بث الألبوم", + "imageNotAnalyzed": "لم يتم تحليل الصورة", + "noFacesFound": "لم يتم العثور على وجوه", + "fileNotUploadedYet": "لم يتم تحميل الملف بعد", + "noSuggestionsForPerson": "لا توجد اقتراحات لـ {personName}", + "@noSuggestionsForPerson": { + "placeholders": { + "personName": { + "type": "String", + "example": "Alice" + } + } + }, + "month": "شهر", + "yearShort": "سنة", + "@yearShort": { + "description": "Appears in pricing page (/yr)" + }, + "currentlyRunning": "قيد التشغيل حاليًا", + "ignored": "تم التجاهل", + "photosCount": "{count, plural, =0 {لا توجد صور} =1 {صورة واحدة} two {صورتان} few {{count} صور} many {{count} صورة} other {{count} صورة}}", + "@photosCount": { + "placeholders": { + "count": { + "type": "int", + "example": "2" + } + } + }, + "file": "ملف", + "searchSectionsLengthMismatch": "عدم تطابق طول الأقسام: {snapshotLength} != {searchLength}", + "@searchSectionsLengthMismatch": { + "description": "Appears in search tab page", + "placeholders": { + "snapshotLength": { + "type": "int", + "example": "1" + }, + "searchLength": { + "type": "int", + "example": "2" + } + } + }, + "selectMailApp": "تحديد تطبيق البريد", + "selectAllShort": "الكل", + "@selectAllShort": { + "description": "Text that appears in bottom right when you start to select multiple photos. When clicked, it selects all photos." + }, + "selectCoverPhoto": "تحديد صورة الغلاف", + "newLocation": "موقع جديد", + "faceNotClusteredYet": "لم يتم تجميع الوجه بعد، يرجى العودة لاحقًا", + "theLinkYouAreTryingToAccessHasExpired": "انتهت صلاحية الرابط الذي تحاول الوصول إليه.", + "openFile": "فتح الملف", + "backupFile": "نسخ احتياطي للملف", + "openAlbumInBrowser": "فتح الألبوم في المتصفح", + "openAlbumInBrowserTitle": "يرجى استخدام تطبيق الويب لإضافة صور إلى هذا الألبوم", + "allow": "السماح", + "allowAppToOpenSharedAlbumLinks": "السماح للتطبيق بفتح روابط الألبومات المشتركة", + "seePublicAlbumLinksInApp": "رؤية روابط الألبومات العامة في التطبيق", + "emergencyContacts": "جهات اتصال الطوارئ", + "acceptTrustInvite": "قبول الدعوة", + "declineTrustInvite": "رفض الدعوة", + "removeYourselfAsTrustedContact": "إزالة نفسك كجهة اتصال موثوقة", + "legacy": "جهات الاتصال الموثوقة", + "legacyPageDesc": "تسمح جهات الاتصال الموثوقة لأشخاص معينين بالوصول إلى حسابك في حالة غيابك.", + "legacyPageDesc2": "يمكن لجهات الاتصال الموثوقة بدء استرداد الحساب، وإذا لم يتم حظر ذلك خلال 30 يومًا، يمكنهم إعادة تعيين كلمة المرور والوصول إلى حسابك.", + "legacyAccounts": "الحسابات الموثوقة", + "trustedContacts": "جهات الاتصال الموثوقة", + "addTrustedContact": "إضافة جهة اتصال موثوقة", + "removeInvite": "إزالة الدعوة", + "recoveryWarning": "جهة اتصال موثوقة تحاول الوصول إلى حسابك", + "rejectRecovery": "رفض الاسترداد", + "recoveryInitiated": "بدء الاسترداد", + "recoveryInitiatedDesc": "يمكنك الوصول إلى الحساب بعد {days} أيام. سيتم إرسال إشعار إلى {email}.", + "@recoveryInitiatedDesc": { + "placeholders": { + "days": { + "type": "int", + "example": "30" + }, + "email": { + "type": "String", + "example": "me@example.com" + } + } + }, + "cancelAccountRecovery": "إلغاء استرداد الحساب", + "recoveryAccount": "استرداد الحساب", + "cancelAccountRecoveryBody": "هل أنت متأكد من رغبتك في إلغاء الاسترداد؟", + "startAccountRecoveryTitle": "بدء الاسترداد", + "whyAddTrustContact": "يمكن لجهة الاتصال الموثوقة المساعدة في استعادة بياناتك.", + "recoveryReady": "يمكنك الآن استرداد حساب {email} عن طريق تعيين كلمة مرور جديدة.", + "@recoveryReady": { + "placeholders": { + "email": { + "type": "String", + "example": "me@example.com" + } + } + }, + "recoveryWarningBody": "{email} يحاول استرداد حسابك.", + "trustedInviteBody": "لقد تمت دعوتك لتكون جهة اتصال موثوقة بواسطة {email}.", + "warning": "تحذير", + "proceed": "متابعة", + "confirmAddingTrustedContact": "أنت على وشك إضافة {email} كجهة اتصال موثوقة. سيكون بإمكانهم استعادة حسابك إذا كنت غائبًا لمدة {numOfDays} أيام.", + "@confirmAddingTrustedContact": { + "placeholders": { + "email": { + "type": "String", + "example": "me@example.com" + }, + "numOfDays": { + "type": "int", + "example": "30" + } + } + }, + "legacyInvite": "{email} دعاك لتكون جهة اتصال موثوقة", + "authToManageLegacy": "يرجى المصادقة لإدارة جهات الاتصال الموثوقة الخاصة بك.", + "useDifferentPlayerInfo": "هل تواجه مشكلة في تشغيل هذا الفيديو؟ اضغط مطولاً هنا لتجربة مشغل مختلف.", + "hideSharedItemsFromHomeGallery": "إخفاء العناصر المشتركة من معرض الصفحة الرئيسية", + "gallery": "المعرض", + "joinAlbum": "الانضمام إلى الألبوم", + "joinAlbumSubtext": "لعرض صورك وإضافتها", + "joinAlbumSubtextViewer": "لإضافة هذا إلى الألبومات المشتركة", + "join": "انضمام", + "linkEmail": "ربط البريد الإلكتروني", + "link": "ربط", + "noEnteAccountExclamation": "لا يوجد حساب Ente!", + "orPickFromYourContacts": "أو اختر من جهات اتصالك", + "emailDoesNotHaveEnteAccount": "{email} لا يملك حساب Ente.", + "@emailDoesNotHaveEnteAccount": { + "description": "Shown when email doesn't have an Ente account", + "placeholders": { + "email": { + "type": "String" + } + } + }, + "accountOwnerPersonAppbarTitle": "{title} (أنا)", + "@accountOwnerPersonAppbarTitle": { + "description": "Title of appbar for account owner person", + "placeholders": { + "title": { + "type": "String" + } + } + }, + "reassignMe": "إعادة تعيين \"أنا\"", + "me": "أنا", + "linkEmailToContactBannerCaption": "لمشاركة أسرع", + "@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": "تحديد الشخص للربط", + "linkPersonToEmail": "ربط الشخص بـ {email}", + "@linkPersonToEmail": { + "placeholders": { + "email": { + "type": "String" + } + } + }, + "linkPersonToEmailConfirmation": "سيؤدي هذا إلى ربط {personName} بـ {email}", + "@linkPersonToEmailConfirmation": { + "description": "Confirmation message when linking a person to an email", + "placeholders": { + "personName": { + "type": "String" + }, + "email": { + "type": "String" + } + } + }, + "selectYourFace": "حدد وجهك", + "reassigningLoading": "جارٍ إعادة التعيين...", + "reassignedToName": "تمت إعادة تعيينك إلى {name}", + "@reassignedToName": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "saveChangesBeforeLeavingQuestion": "حفظ التغييرات قبل المغادرة؟", + "dontSave": "عدم الحفظ", + "thisIsMeExclamation": "هذا أنا!", + "linkPerson": "ربط الشخص", + "linkPersonCaption": "لتجربة مشاركة أفضل", + "@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": "بث الفيديو", + "processingVideos": "معالجة مقاطع الفيديو", + "streamDetails": "تفاصيل البث", + "processing": "المعالجة", + "queued": "في قائمة الانتظار", + "ineligible": "غير مؤهل", + "failed": "فشل", + "playStream": "تشغيل البث", + "playOriginal": "تشغيل الأصلي", + "joinAlbumConfirmationDialogBody": "الانضمام إلى ألبوم سيجعل بريدك الإلكتروني مرئيًا للمشاركين فيه.", + "pleaseWaitThisWillTakeAWhile": "يرجى الانتظار، قد يستغرق هذا بعض الوقت.", + "editTime": "تعديل الوقت", + "selectTime": "تحديد الوقت", + "selectDate": "تحديد التاريخ", + "previous": "السابق", + "selectOneDateAndTimeForAll": "تحديد تاريخ ووقت واحد للجميع", + "selectStartOfRange": "تحديد بداية النطاق", + "thisWillMakeTheDateAndTimeOfAllSelected": "سيجعل هذا تاريخ ووقت جميع الصور المحددة متماثلاً.", + "allWillShiftRangeBasedOnFirst": "هذه هي الأولى في المجموعة. سيتم تغيير تواريخ الصور المحددة الأخرى تلقائيًا بناءً على هذا التاريخ الجديد.", + "newRange": "نطاق جديد", + "selectOneDateAndTime": "تحديد تاريخ ووقت واحد", + "moveSelectedPhotosToOneDate": "نقل الصور المحددة إلى تاريخ واحد", + "shiftDatesAndTime": "تغيير التواريخ والوقت", + "photosKeepRelativeTimeDifference": "تحتفظ الصور بالفرق الزمني النسبي", + "photocountPhotos": "{count, plural, =0 {لا توجد صور} =1 {صورة واحدة} two {صورتان} few {{count} صور} many {{count} صورة} other {{count} صورة}}", + "@photocountPhotos": { + "placeholders": { + "count": { + "type": "int", + "example": "2" + } + } + }, + "appIcon": "أيقونة التطبيق", + "notThisPerson": "ليس هذا الشخص؟", + "selectedItemsWillBeRemovedFromThisPerson": "سيتم إزالة العناصر المحددة من هذا الشخص، ولكن لن يتم حذفها من مكتبتك.", + "throughTheYears": "{dateFormat} عبر السنين", + "thisWeekThroughTheYears": "هذا الأسبوع عبر السنين", + "thisWeekXYearsAgo": "{count, plural, =1 {هذا الأسبوع، قبل سنة} two {هذا الأسبوع، قبل سنتين} few {هذا الأسبوع، قبل {count} سنوات} many {هذا الأسبوع، قبل {count} سنة} other {هذا الأسبوع، قبل {count} سنة}}", + "youAndThem": "أنت و {name}", + "admiringThem": "الإعجاب بـ {name}", + "embracingThem": "معانقة {name}", + "partyWithThem": "الاحتفال مع {name}", + "hikingWithThem": "التنزه مع {name}", + "feastingWithThem": "الاستمتاع بالطعام مع {name}", + "selfiesWithThem": "صور سيلفي مع {name}", + "posingWithThem": "التقاط صور مع {name}", + "backgroundWithThem": "مناظر جميلة مع {name}", + "sportsWithThem": "الرياضة مع {name}", + "roadtripWithThem": "رحلة برية مع {name}", + "spotlightOnYourself": "تسليط الضوء عليك", + "spotlightOnThem": "تسليط الضوء على {name}", + "personIsAge": "{name} يبلغ {age}!", + "personTurningAge": "{name} سيبلغ {age} قريبًا", + "lastTimeWithThem": "آخر مرة مع {name}", + "tripToLocation": "رحلة إلى {location}", + "tripInYear": "رحلة في {year}", + "lastYearsTrip": "رحلة العام الماضي", + "sunrise": "على الأفق", + "mountains": "فوق التلال", + "greenery": "الحياة الخضراء", + "beach": "رمال وبحر", + "city": "في المدينة", + "moon": "في ضوء القمر", + "onTheRoad": "على الطريق مرة أخرى", + "food": "متعة الطهي", + "pets": "رفاق فروي", + "cLIcon": "أيقونة جديدة", + "cLIconDesc": "أخيرًا، أيقونة تطبيق جديدة، نعتقد أنها تمثل عملنا على أفضل وجه. أضفنا أيضًا مبدل أيقونات حتى تتمكن من الاستمرار في استخدام الأيقونة القديمة.", + "cLMemories": "الذكريات", + "cLMemoriesDesc": "أعد اكتشاف لحظاتك الخاصة - تسليط الضوء على الأشخاص المفضلين لديك، رحلاتك وعطلاتك، أفضل لقطاتك، وأكثر من ذلك بكثير. قم بتشغيل تعلم الآلة، ضع علامة على نفسك وقم بتسمية أصدقائك للحصول على أفضل تجربة.", + "cLWidgets": "الأدوات المصغرة (Widgets)", + "cLWidgetsDesc": "الأدوات المصغرة للشاشة الرئيسية المدمجة مع الذكريات متاحة الآن. ستعرض لحظاتك الخاصة دون فتح التطبيق.", + "cLFamilyPlan": "حدود الخطة العائلية", + "cLFamilyPlanDesc": "يمكنك الآن تعيين حدود لمقدار التخزين الذي يمكن لأفراد عائلتك استخدامه.", + "cLBulkEdit": "تعديل التواريخ بشكل جماعي", + "cLBulkEditDesc": "يمكنك الآن تحديد صور متعددة، وتعديل التاريخ/الوقت لجميعها بإجراء سريع واحد. تغيير التواريخ مدعوم أيضًا.", + "curatedMemories": "ذكريات منسقة" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_cs.arb b/mobile/lib/l10n/intl_cs.arb index 2bd9d2da70..0e1c6c50c9 100644 --- a/mobile/lib/l10n/intl_cs.arb +++ b/mobile/lib/l10n/intl_cs.arb @@ -1,6 +1,235 @@ { "@@locale ": "en", + "enterYourEmailAddress": "Zadejte svou e-mailovou adresu", + "accountWelcomeBack": "Vítejte zpět!", + "email": "E-mail", + "cancel": "Zrušit", + "verify": "Ověřit", + "invalidEmailAddress": "Neplatná e-mailová adresa", + "enterValidEmail": "Prosím, zadejte platnou e-mailovou adresu.", + "deleteAccount": "Smazat účet", "askDeleteReason": "Jaký je váš hlavní důvod, proč mažete svůj účet?", + "feedback": "Zpětná vazba", + "ok": "Ok", + "createAccount": "Vytvořit účet", + "createNewAccount": "Vytvořit nový účet", + "password": "Heslo", + "terminate": "Ukončit", + "thisDevice": "Toto zařízení", + "decrypting": "Dešifrování...", "incorrectRecoveryKeyBody": "", - "checkInboxAndSpamFolder": "Zkontrolujte prosím svou doručenou poštu (a spam) pro dokončení ověření" + "checkInboxAndSpamFolder": "Zkontrolujte prosím svou doručenou poštu (a spam) pro dokončení ověření", + "pleaseWait": "Čekejte prosím...", + "continueLabel": "Pokračovat", + "encryption": "Šifrování", + "changeEmail": "Změnit e-mail", + "enterYourPassword": "Zadejte své heslo", + "welcomeBack": "Vítejte zpět!", + "pleaseTryAgain": "Zkuste to prosím znovu", + "saveKey": "Uložit klíč", + "confirm": "Potvrdit", + "lostDevice": "Ztratili jste zařízení?", + "invalidKey": "Neplatný klíč", + "albumOwner": "Vlastník", + "@albumOwner": { + "description": "Role of the album owner" + }, + "you": "Vy", + "collaborator": "Spolupracovník", + "viewer": "Prohlížející", + "remove": "Odstranit", + "manage": "Spravovat", + "linkNeverExpires": "Nikdy", + "removeLink": "Odstranit odkaz", + "never": "Nikdy", + "after1Hour": "Po 1 hodině", + "after1Day": "Po 1 dni", + "after1Week": "Po 1 týdnu", + "after1Month": "Po 1 měsíci", + "after1Year": "Po 1 roce", + "sendLink": "Odeslat odkaz", + "linkHasExpired": "Platnost odkazu vypršela", + "done": "Hotovo", + "apply": "Použít", + "faq": "Často kladené dotazy", + "yesRemove": "Ano, odstranit", + "trash": "Koš", + "yesDelete": "Ano, smazat", + "movedToTrash": "Přesunuto do koše", + "newAlbum": "Nové album", + "advancedSettings": "Pokročilé", + "@advancedSettings": { + "description": "The text to display in the advanced settings section" + }, + "discover_pets": "Domácí mazlíčci", + "discover_selfies": "Selfie", + "discover_wallpapers": "Pozadí", + "discover_food": "Jídlo", + "skip": "Přeskočit", + "privacy": "Soukromí", + "account": "Účet", + "manageSubscription": "Spravovat předplatné", + "logout": "Odhlásit se", + "removeDuplicates": "Odstranit duplicity", + "noDuplicates": "✨ Žádné duplicity", + "rateUs": "Ohodnoť nás", + "notifications": "Notifikace", + "general": "Obecné", + "security": "Zabezpečení", + "no": "Ne", + "yes": "Ano", + "blog": "Blog", + "twitter": "Twitter", + "mastodon": "Mastodon", + "matrix": "Matrix", + "discord": "Discord", + "yesRenew": "Ano, obnovit", + "yesCancel": "Ano, zrušit", + "monthly": "Měsíčně", + "@monthly": { + "description": "The text to display for monthly plans", + "type": "text" + }, + "yearly": "Ročně", + "@yearly": { + "description": "The text to display for yearly plans", + "type": "text" + }, + "appleId": "Apple ID", + "thankYou": "Děkujeme", + "leave": "Odejít", + "upgrade": "Upgradovat", + "loggingOut": "Odhlašování...", + "newest": "Nejnovější", + "deleteEmptyAlbums": "Smazat prázdná alba", + "deleteEmptyAlbumsWithQuestionMark": "Smazat prázdná alba?", + "restore": "Obnovit", + "@restore": { + "description": "Display text for an action which triggers a restore of item from trash", + "type": "text" + }, + "favorite": "Oblíbené", + "shareLink": "Sdílet odkaz", + "collageLayout": "Rozvržení", + "addToAlbum": "Přidat do alba", + "delete": "Smazat", + "hide": "Skrýt", + "share": "Sdílet", + "invite": "Pozvat", + "sharedWithMe": "Sdíleno se mnou", + "sharedByMe": "Sdíleno mnou", + "renameAlbum": "Přejmenovat album", + "sortAlbumsBy": "Seřadit podle", + "sortNewestFirst": "Od nejnovějších", + "sortOldestFirst": "Od nejstarších", + "leaveAlbum": "Opustit album", + "archiveAlbum": "Archivovat album", + "noResultsFound": "Nebyly nalezeny žádné výsledky", + "exif": "EXIF", + "close": "Zavřít", + "download": "Stáhnout", + "totalSize": "Celková velikost", + "unlock": "Odemknout", + "verifying": "Ověřování...", + "loadingGallery": "Načítání galerie...", + "syncing": "Synchronizace...", + "archiving": "Archivování...", + "renameFile": "Přejmenovat soubor", + "empty": "Vyprázdnit", + "dismiss": "Zrušit", + "location": "Poloha", + "searchAlbumsEmptySection": "Alba", + "language": "Jazyk", + "selectLanguage": "Vybrat jazyk", + "save": "Uložit", + "edit": "Upravit", + "rotateLeft": "Otočit doleva", + "flip": "Překlopit", + "rotateRight": "Otočit doprava", + "saveCopy": "Uložit kopii", + "color": "Barva", + "yesDiscardChanges": "Ano, zahodit změny", + "dayToday": "Dnes", + "dayYesterday": "Včera", + "storage": "Úložiště", + "usedSpace": "Využité místo", + "storageBreakupFamily": "Rodina", + "verifyIDLabel": "Ověřit", + "setLabel": "Nastavit", + "@setLabel": { + "description": "Label of confirm button to add a new custom radius to the radius selector of a location tag" + }, + "familyPlanPortalTitle": "Rodina", + "androidCancelButton": "Zrušit", + "@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." + }, + "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." + }, + "map": "Mapa", + "@map": { + "description": "Label for the map view" + }, + "maps": "Mapy", + "unpinAlbum": "Odepnout album", + "pinAlbum": "Připnout album", + "create": "Vytvořit", + "viewAll": "Zobrazit vše", + "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", + "yourMap": "Vaše mapa", + "videos": "Videa", + "faces": "Obličeje", + "people": "Lidé", + "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", + "loginSessionExpired": "Relace vypršela", + "deviceCodeHint": "Zadejte kód", + "locations": "Lokality", + "savePerson": "Uložit osobu", + "editPerson": "Upravit osobu", + "enterDateOfBirth": "Narozeniny (volitelné)", + "birthday": "Narozeniny", + "crop": "Oříznout", + "rotate": "Otočit", + "left": "Doleva", + "right": "Doprava", + "whatsNew": "Co je nového", + "enable": "Povolit", + "moreDetails": "Další podrobnosti", + "panorama": "Panorama", + "next": "Další", + "setNewPassword": "Nastavit nové heslo", + "autoLock": "Automatické zamykání", + "immediately": "Ihned", + "sort": "Seřadit", + "personName": "Jméno osoby", + "addNewPerson": "Přidat novou osobu", + "addName": "Přidat název", + "add": "Přidat", + "resetPerson": "Odstranit", + "info": "Informace", + "openFile": "Otevřít soubor", + "allow": "Povolit", + "acceptTrustInvite": "Přijmout pozvání", + "declineTrustInvite": "Odmítnout pozvání", + "removeInvite": "Odstranit pozvání", + "gallery": "Galerie", + "me": "Já", + "thisIsMeExclamation": "To jsem já!", + "editTime": "Upravit čas", + "selectTime": "Vybrat čas", + "selectDate": "Vybrat datum", + "previous": "Předchozí", + "cLIcon": "Nová ikona", + "cLMemories": "Vzpomínky" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_da.arb b/mobile/lib/l10n/intl_da.arb index d29d7c345e..7870608a78 100644 --- a/mobile/lib/l10n/intl_da.arb +++ b/mobile/lib/l10n/intl_da.arb @@ -19,6 +19,7 @@ "yourAccountHasBeenDeleted": "Din konto er blevet slettet", "selectReason": "Vælg årsag", "deleteReason1": "Der mangler en vigtig funktion, som jeg har brug for", + "deleteReason2": "App'en eller en bestemt funktion virker ikke som den skal", "deleteReason3": "Jeg fandt en anden tjeneste, som jeg syntes bedre om", "deleteReason4": "Min grund er ikke angivet", "sendEmail": "Send email", @@ -35,14 +36,18 @@ "thisWillLogYouOutOfThisDevice": "Dette vil logge dig ud af denne enhed!", "thisWillLogYouOutOfTheFollowingDevice": "Dette vil logge dig ud af følgende enhed:", "terminateSession": "Afslut session?", + "terminate": "Afbryd", "thisDevice": "Denne enhed", "recoverButton": "Gendan", + "recoverySuccessful": "Gendannelse lykkedes!", "decrypting": "Dekrypterer...", "incorrectRecoveryKeyTitle": "Forkert gendannelsesnøgle", "incorrectRecoveryKeyBody": "Den gendannelsesnøgle du indtastede er forkert", "forgotPassword": "Glemt adgangskode", "enterYourRecoveryKey": "Indtast din gendannelsesnøgle", "noRecoveryKey": "Ingen gendannelsesnøgle?", + "sorry": "Beklager", + "verifyEmail": "Bekræft e-mail", "toResetVerifyEmail": "For at nulstille din adgangskode, bekræft venligst din email adresse.", "checkInboxAndSpamFolder": "Tjek venligst din indbakke (og spam) for at færdiggøre verificeringen", "tapToEnterCode": "Tryk for at indtaste kode", @@ -67,6 +72,7 @@ "enterNewPasswordToEncrypt": "Indtast en ny adgangskode vi kan bruge til at kryptere dine data", "weakStrength": "Svagt", "strongStrength": "Stærkt", + "moderateStrength": "Moderat", "passwordStrength": "Kodeordets styrke: {passwordStrengthValue}", "@passwordStrength": { "description": "Text to indicate the password strength", @@ -92,13 +98,60 @@ "termsOfServicesTitle": "Betingelser", "signUpTerms": "Jeg er enig i betingelser for brug og privatlivspolitik", "logInLabel": "Log ind", + "loginTerms": "Ved at klikke på log ind accepterer jeg vilkårene for service og privatlivspolitik", "changeEmail": "Skift email adresse", "enterYourPassword": "Indtast adgangskode", "welcomeBack": "Velkommen tilbage!", "contactSupport": "Kontakt support", "incorrectPasswordTitle": "Forkert adgangskode", + "pleaseTryAgain": "Prøv venligst igen", + "recreatePasswordTitle": "Genskab adgangskode", + "useRecoveryKey": "Brug gendannelsesnøgle", + "verifyPassword": "Bekræft adgangskode", + "recoveryKey": "Gendannelse nøgle", + "recoveryKeyOnForgotPassword": "Hvis du glemmer din adgangskode, den eneste måde, du kan gendanne dine data er med denne nøgle.", + "recoveryKeySaveDescription": "Vi gemmer ikke denne nøgle, gem venligst denne 24 ord nøgle på et sikkert sted.", + "doThisLater": "Gør det senere", + "saveKey": "Gem nøgle", + "recoveryKeyCopiedToClipboard": "Gendannelsesnøgle kopieret til udklipsholder", + "recoverAccount": "Gendan konto", + "recover": "Gendan", + "dropSupportEmail": "Send venligst en email til {supportEmail} fra din registrerede email adresse", + "@dropSupportEmail": { + "placeholders": { + "supportEmail": { + "description": "The support email address", + "type": "String", + "example": "support@ente.io" + } + } + }, + "twofactorSetup": "To-faktor opsætning", + "enterCode": "Indtast kode", + "scanCode": "Skan kode", + "codeCopiedToClipboard": "Kode kopieret til udklipsholder", "copypasteThisCodentoYourAuthenticatorApp": "Kopiér denne kode\ntil din autentificeringsapp", + "tapToCopy": "tryk for at kopiere", "scanThisBarcodeWithnyourAuthenticatorApp": "Skan denne QR-kode med godkendelses-appen", + "enterThe6digitCodeFromnyourAuthenticatorApp": "Indtast den 6-cifrede kode fra din autentificeringsapp", + "confirm": "Bekræft", + "setupComplete": "Opsætning fuldført", + "saveYourRecoveryKeyIfYouHaventAlready": "Gem din gendannelsesnøgle, hvis du ikke allerede har", + "thisCanBeUsedToRecoverYourAccountIfYou": "Dette kan bruges til at gendanne din konto, hvis du mister din anden faktor", + "twofactorAuthenticationPageTitle": "To-faktor-godkendelse", + "lostDevice": "Har du mistet enhed?", + "verifyingRecoveryKey": "Verificerer gendannelsesnøgle...", + "recoveryKeyVerified": "Gendannelsesnøgle bekræftet", + "recoveryKeySuccessBody": "Super! Din gendannelsesnøgle er gyldig. Tak fordi du verificerer.\n\nHusk at holde din gendannelsesnøgle sikker sikkerhedskopieret.", + "invalidKey": "Ugyldig nøgle", + "tryAgain": "Prøv igen", + "viewRecoveryKey": "Vis gendannelsesnøgle", + "confirmRecoveryKey": "Bekræft gendannelsesnøgle", + "confirmYourRecoveryKey": "Bekræft din gendannelsesnøgle", + "addViewer": "Tilføj seer", + "addCollaborator": "Tilføj samarbejdspartner", + "addANewEmail": "Tilføj en ny e-mail", + "orPickAnExistingOne": "Eller vælg en eksisterende", "enterEmail": "Indtast email adresse", "albumOwner": "Ejer", "@albumOwner": { @@ -109,30 +162,72 @@ "@addMore": { "description": "Button text to add more collaborators/viewers" }, + "viewer": "Seer", + "remove": "Fjern", "removeParticipant": "Fjern deltager", "@removeParticipant": { "description": "menuSectionTitle for removing a participant" }, "manage": "Administrér", "addedAs": "Tilføjet som", + "changePermissions": "Rediger rettigheder?", + "yesConvertToViewer": "Ja, konverter til præsentation", "cannotAddMorePhotosAfterBecomingViewer": "{user} vil ikke kunne tilføje flere billeder til dette album\n\nDe vil stadig kunne fjerne eksisterende billeder tilføjet af dem", + "allowAddingPhotos": "Tillad tilføjelse af fotos", + "@allowAddingPhotos": { + "description": "Switch button to enable uploading photos to a public link" + }, + "allowAddPhotosDescription": "Tillad personer med linket også at tilføje billeder til det delte album.", + "passwordLock": "Adgangskodelås", "canNotOpenBody": "Beklager, dette album kan ikke åbnes i appen.", "disableDownloadWarningTitle": "Bemærk venligst", "allowDownloads": "Tillad downloads", + "linkDeviceLimit": "Enheds grænse", + "noDeviceLimit": "Ingen", + "@noDeviceLimit": { + "description": "Text to indicate that there is limit on number of devices" + }, + "linkExpiry": "Udløb af link", "linkExpired": "Udløbet", "linkEnabled": "Aktiveret", "linkNeverExpires": "Aldrig", "lockButtonLabel": "Lås", "enterPassword": "Indtast adgangskode", "removeLink": "Fjern link", + "linkExpiresOn": "Link udløber den {expiryTime}", + "albumUpdated": "Album er opdateret", "never": "Aldrig", + "custom": "Tilpasset", + "@custom": { + "description": "Label for setting custom value for link expiry" + }, "after1Hour": "Efter 1 time", "after1Day": "Efter 1 dag", "after1Week": "Efter 1 uge", "after1Month": "Efter 1 måned", "after1Year": "Efter 1 år", + "manageParticipants": "Administrer", + "albumParticipantsCount": "{count, plural, one {}=0 {Ingen Deltagere} =1 {1 Deltager} other {{count} Deltagere}}", + "@albumParticipantsCount": { + "placeholders": { + "count": { + "type": "int", + "example": "5" + } + }, + "description": "Number of participants in an album, including the album owner." + }, + "collabLinkSectionDescription": "Opret et link, så folk kan tilføje og se fotos i dit delte album uden at behøve en Ente-app eller konto. Fantastisk til at indsamle event fotos.", "collectPhotos": "Indsaml billeder", + "collaborativeLink": "Kollaborativt link", + "shareWithNonenteUsers": "Del med ikke Ente brugere", + "createPublicLink": "Opret et offentligt link", "sendLink": "Send link", + "copyLink": "Kopiér link", + "linkHasExpired": "Linket er udløbet", + "publicLinkEnabled": "Offentligt link aktiveret", + "shareALink": "Del et link", + "thisIsYourVerificationId": "Dette er dit bekræftelses-ID", "shareTextConfirmOthersVerificationID": "Hey, kan du bekræfte, at dette er dit ente.io verifikation ID: {verificationID}", "unavailableReferralCode": "Beklager, denne kode er ikke tilgængelig.", "storageInGB": "{storageAmountInGB} GB", @@ -162,21 +257,6 @@ "removeWithQuestionMark": "Fjern?", "keepPhotos": "Behold billeder", "newAlbum": "Nyt album", - "memoryCount": "{count, plural, zero{ingen minder} one{{formattedCount} minde} other{{formattedCount} minder}}", - "@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} valgt", "@selectedPhotos": { "description": "Display the number of selected photos", diff --git a/mobile/lib/l10n/intl_de.arb b/mobile/lib/l10n/intl_de.arb index 51d53d55ce..2acbf48f32 100644 --- a/mobile/lib/l10n/intl_de.arb +++ b/mobile/lib/l10n/intl_de.arb @@ -371,7 +371,7 @@ "deleteFromBoth": "Aus beidem löschen", "newAlbum": "Neues Album", "albums": "Alben", - "memoryCount": "{count, plural, zero{keine Erinnerungsstücke} one{{formattedCount} Erinnerung} other{{formattedCount} Erinnerungsstücke}}", + "memoryCount": "{count, plural, =0{keine Erinnerungen} one{{formattedCount} Erinnerung} other{{formattedCount} Erinnerungen}}", "@memoryCount": { "description": "The text to display the number of memories", "type": "text", @@ -721,6 +721,7 @@ "type": "text" }, "backupFailed": "Sicherung fehlgeschlagen", + "sorryBackupFailedDesc": "Leider konnten wir diese Datei momentan nicht sichern, wir werden es später erneut versuchen.", "couldNotBackUpTryLater": "Deine Daten konnten nicht gesichert werden.\nWir versuchen es später erneut.", "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": "Ente kann Dateien nur verschlüsseln und sichern, wenn du den Zugriff darauf gewährst", "pleaseGrantPermissions": "Bitte erteile die nötigen Berechtigungen", @@ -792,11 +793,11 @@ "share": "Teilen", "unhideToAlbum": "Im Album anzeigen", "restoreToAlbum": "Album wiederherstellen", - "moveItem": "{count, plural, one{Element verschieben} other{Elemente verschieben}}", + "moveItem": "{count, plural, =1 {Element verschieben} other{Elemente verschieben}}", "@moveItem": { "description": "Page title while moving one or more items to an album" }, - "addItem": "{count, plural, one {Element hinzufügen} other {Elemente hinzufügen}}", + "addItem": "{count, plural, =1 {Element hinzufügen} other {Elemente hinzufügen}}", "@addItem": { "description": "Page title while adding one or more items to album" }, @@ -897,7 +898,7 @@ "authToViewYourMemories": "Bitte authentifizieren, um deine Erinnerungsstücke anzusehen", "unlock": "Jetzt freischalten", "freeUpSpace": "Speicherplatz freigeben", - "freeUpSpaceSaving": "{count, plural, one {Es kann vom Gerät gelöscht werden, um {formattedSize} freizugeben} other {Sie können vom Gerät gelöscht werden, um {formattedSize} freizugeben}}", + "freeUpSpaceSaving": "{count, plural, =1 {Es kann vom Gerät gelöscht werden, um {formattedSize} freizugeben} other {Sie können vom Gerät gelöscht werden, um {formattedSize} freizugeben}}", "filesBackedUpInAlbum": "{count, plural, one {1 Datei} other {{formattedNumber} Dateien}} in diesem Album wurde(n) sicher gespeichert", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -931,7 +932,7 @@ "@freeUpSpaceSaving": { "description": "Text to tell user how much space they can free up by deleting items from the device" }, - "freeUpAccessPostDelete": "Du kannst immernoch über Ente {count, plural, one {darauf} other {auf sie}} zugreifen, solange du ein aktives Abo hast", + "freeUpAccessPostDelete": "Du hast {count, plural, =1 {darauf} other {auf sie}} weiterhin Zugriff, solange du ein aktives Abo hast", "@freeUpAccessPostDelete": { "placeholders": { "count": { @@ -1267,8 +1268,8 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "Finde Personen schnell nach Namen", - "addViewers": "{count, plural, one {Betrachter} other {Betrachter}} hinzufügen", - "addCollaborators": "{count, plural, one {Teilnehmer} other {Teilnehmer}} hinzufügen", + "addViewers": "{count, plural, =0 {Betrachter hinzufügen} =1 {Betrachter hinzufügen} other {Betrachter hinzufügen}}", + "addCollaborators": "{count, plural, =0 {Bearbeiter hinzufügen} =1 {Bearbeiter hinzufügen} other {Bearbeiter hinzufügen}}", "longPressAnEmailToVerifyEndToEndEncryption": "Lange auf eine E-Mail drücken, um die Ende-zu-Ende-Verschlüsselung zu überprüfen.", "developerSettingsWarning": "Bist du sicher, dass du Entwicklereinstellungen bearbeiten willst?", "developerSettings": "Entwicklereinstellungen", @@ -1400,7 +1401,7 @@ "enableMachineLearningBanner": "Aktiviere maschinelles Lernen für die magische Suche und Gesichtserkennung", "searchDiscoverEmptySection": "Bilder werden hier angezeigt, sobald Verarbeitung und Synchronisation abgeschlossen sind", "searchPersonsEmptySection": "Personen werden hier angezeigt, sobald Verarbeitung und Synchronisierung abgeschlossen sind", - "viewersSuccessfullyAdded": "{count, plural, =0 {0 Betrachter hinzugefügt} =1 {1 Betrachter hinzugefügt} other {{count} Betrachter hinzugefügt}}", + "viewersSuccessfullyAdded": "{count, plural, =0 {0 Betrachter hinzugefügt} =1 {Einen Betrachter hinzugefügt} other {{count} Betrachter hinzugefügt}}", "@viewersSuccessfullyAdded": { "placeholders": { "count": { @@ -1485,7 +1486,7 @@ }, "currentlyRunning": "läuft gerade", "ignored": "ignoriert", - "photosCount": "{count, plural, one {}=0 {0 Fotos} =1 {1 Foto} other {{count} Fotos}}", + "photosCount": "{count, plural, =0 {0 Fotos} =1 {Ein Foto} other {{count} Fotos}}", "@photosCount": { "placeholders": { "count": { @@ -1706,6 +1707,7 @@ "feastingWithThem": "Feiern mit {name}", "selfiesWithThem": "Selfies mit {name}", "posingWithThem": "Posieren mit {name}", + "backgroundWithThem": "Schöne Ausblicke mit {name}", "sportsWithThem": "Sport mit {name}", "roadtripWithThem": "Roadtrip mit {name}", "spotlightOnYourself": "Spot auf dich selbst", @@ -1728,5 +1730,12 @@ "cLIcon": "Neues Icon", "cLIconDesc": "Endlich ein neues App-Icon, das unserer Meinung nach unser Werk am besten repräsentiert. Zudem ist es möglich, weiterhin das alte App-Icon zu verwenden.", "cLMemories": "Erinnerungen", - "cLWidgets": "Widgets" + "cLMemoriesDesc": "Entdecke Deine besonderen Momente neu – Spot auf Deine liebsten Personen, Deine Reisen und Urlaube, Deine besten Schnappschüsse und vieles mehr. Aktiviere das maschinelle Lernen, tagge Dich selbst und benenne Deine Freunde für die besten Ergebnisse.", + "cLWidgets": "Widgets", + "cLWidgetsDesc": "Homescreen-Widgets mit integrierten Erinnerungen sind nun verfügbar. Sie zeigen dir deine besonderen Momente an, ohne die App zu öffnen.", + "cLFamilyPlan": "Obergrenzen für den Familientarif", + "cLFamilyPlanDesc": "Du kannst jetzt festlegen, wie viel Speicherplatz deine Familienmitglieder nutzen können.", + "cLBulkEdit": "Massenbearbeitung von Datumsangaben", + "cLBulkEditDesc": "Du kannst jetzt mehrere Fotos auswählen, und das Datum/Uhrzeit für alle mit einer Aktion ändern. Das Verschieben von Daten wird auch unterstützt.", + "curatedMemories": "Ausgewählte Erinnerungen" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_en.arb b/mobile/lib/l10n/intl_en.arb index fe7c7bbf43..cab5da3cf6 100644 --- a/mobile/lib/l10n/intl_en.arb +++ b/mobile/lib/l10n/intl_en.arb @@ -371,7 +371,7 @@ "deleteFromBoth": "Delete from both", "newAlbum": "New album", "albums": "Albums", - "memoryCount": "{count, plural, zero{no memories} one{{formattedCount} memory} other{{formattedCount} memories}}", + "memoryCount": "{count, plural, =0{no memories} one{{formattedCount} memory} other{{formattedCount} memories}}", "@memoryCount": { "description": "The text to display the number of memories", "type": "text", @@ -721,6 +721,7 @@ "type": "text" }, "backupFailed": "Backup failed", + "sorryBackupFailedDesc": "Sorry, we could not backup this file right now, we will retry later.", "couldNotBackUpTryLater": "We could not backup your data.\nWe will retry later.", "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": "Ente can encrypt and preserve files only if you grant access to them", "pleaseGrantPermissions": "Please grant permissions", @@ -792,11 +793,11 @@ "share": "Share", "unhideToAlbum": "Unhide to album", "restoreToAlbum": "Restore to album", - "moveItem": "{count, plural, one {Move item} other {Move items}}", + "moveItem": "{count, plural, =1 {Move item} other {Move items}}", "@moveItem": { "description": "Page title while moving one or more items to an album" }, - "addItem": "{count, plural, one {Add item} other {Add items}}", + "addItem": "{count, plural, =1 {Add item} other {Add items}}", "@addItem": { "description": "Page title while adding one or more items to album" }, @@ -897,7 +898,7 @@ "authToViewYourMemories": "Please authenticate to view your memories", "unlock": "Unlock", "freeUpSpace": "Free up space", - "freeUpSpaceSaving": "{count, plural, one {It can be deleted from the device to free up {formattedSize}} other {They can be deleted from the device to free up {formattedSize}}}", + "freeUpSpaceSaving": "{count, plural, =1 {It can be deleted from the device to free up {formattedSize}} other {They can be deleted from the device to free up {formattedSize}}}", "filesBackedUpInAlbum": "{count, plural, one {1 file} other {{formattedNumber} files}} in this album has been backed up safely", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -931,7 +932,7 @@ "@freeUpSpaceSaving": { "description": "Text to tell user how much space they can free up by deleting items from the device" }, - "freeUpAccessPostDelete": "You can still access {count, plural, one {it} other {them}} on Ente as long as you have an active subscription", + "freeUpAccessPostDelete": "You can still access {count, plural, =1 {it} other {them}} on Ente as long as you have an active subscription", "@freeUpAccessPostDelete": { "placeholders": { "count": { @@ -1267,8 +1268,8 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "Find people quickly by name", - "addViewers": "{count, plural, zero {Add viewer} one {Add viewer} other {Add viewers}}", - "addCollaborators": "{count, plural, zero {Add collaborator} one {Add collaborator} other {Add collaborators}}", + "addViewers": "{count, plural, =0 {Add viewer} =1 {Add viewer} other {Add viewers}}", + "addCollaborators": "{count, plural, =0 {Add collaborator} =1 {Add collaborator} other {Add collaborators}}", "longPressAnEmailToVerifyEndToEndEncryption": "Long press an email to verify end to end encryption.", "developerSettingsWarning": "Are you sure that you want to modify Developer settings?", "developerSettings": "Developer settings", @@ -1400,7 +1401,7 @@ "enableMachineLearningBanner": "Enable machine learning for magic search and face recognition", "searchDiscoverEmptySection": "Images will be shown here once processing and syncing is complete", "searchPersonsEmptySection": "People will be shown here once processing and syncing is complete", - "viewersSuccessfullyAdded": "{count, plural, =0 {Added 0 viewer} =1 {Added 1 viewer} other {Added {count} viewers}}", + "viewersSuccessfullyAdded": "{count, plural, =0 {Added 0 viewers} =1 {Added 1 viewer} other {Added {count} viewers}}", "@viewersSuccessfullyAdded": { "placeholders": { "count": { @@ -1485,7 +1486,7 @@ }, "currentlyRunning": "currently running", "ignored": "ignored", - "photosCount": "{count, plural, =0 {0 photo} =1 {1 photo} other {{count} photos}}", + "photosCount": "{count, plural, =0 {0 photos} =1 {1 photo} other {{count} photos}}", "@photosCount": { "placeholders": { "count": { @@ -1726,7 +1727,6 @@ "onTheRoad": "On the road again", "food": "Culinary delight", "pets": "Furry companions", - "cLIcon": "New Icon", "cLIconDesc": "Finally, a new app icon, that we think best represents our work. We've also added an icon-switcher so you can continue using the old icon.", "cLMemories": "Memories", @@ -1735,7 +1735,7 @@ "cLWidgetsDesc": "Home screen widgets that are integrated with memories are now available. They will show your special moments without opening the app.", "cLFamilyPlan": "Family Plan Limits", "cLFamilyPlanDesc": "You can now set limits on how much storage your family members can use.", - "cLBulkEdit": "Bulk Edit dates", - "cLBulkEditDesc": "You can now select multiple photos, and edit date/time for all of them with one quick action. Shifting dates is also supported." -} + "cLBulkEditDesc": "You can now select multiple photos, and edit date/time for all of them with one quick action. Shifting dates is also supported.", + "curatedMemories": "Curated memories" +} \ No newline at end of file diff --git a/mobile/lib/l10n/intl_es.arb b/mobile/lib/l10n/intl_es.arb index f3089e492c..bc0ca0b5ad 100644 --- a/mobile/lib/l10n/intl_es.arb +++ b/mobile/lib/l10n/intl_es.arb @@ -15,11 +15,11 @@ "feedback": "Sugerencias", "kindlyHelpUsWithThisInformation": "Por favor ayúdanos con esta información", "confirmDeletePrompt": "Sí, quiero eliminar permanentemente esta cuenta y todos sus datos en todas las aplicaciones.", - "confirmAccountDeletion": "Confirmar borrado de cuenta", + "confirmAccountDeletion": "Confirmar eliminación de cuenta", "deleteAccountPermanentlyButton": "Eliminar cuenta permanentemente", "yourAccountHasBeenDeleted": "Tu cuenta ha sido eliminada", "selectReason": "Seleccionar motivo", - "deleteReason1": "Falta una característica clave que necesito", + "deleteReason1": "Falta una función clave que necesito", "deleteReason2": "La aplicación o una característica determinada no se comporta como creo que debería", "deleteReason3": "He encontrado otro servicio que me gusta más", "deleteReason4": "Mi motivo no se encuentra en la lista", @@ -371,7 +371,7 @@ "deleteFromBoth": "Eliminar de ambos", "newAlbum": "Nuevo álbum", "albums": "Álbumes", - "memoryCount": "{count, plural, zero{sin recuerdos} one{{formattedCount} recuerdo} other{{formattedCount} recuerdos}}", + "memoryCount": "{count, plural, =0{no hay recuerdos} one{{formattedCount} recuerdo} other{{formattedCount} recuerdos}}", "@memoryCount": { "description": "The text to display the number of memories", "type": "text", @@ -488,7 +488,7 @@ "weAreOpenSource": "¡Somos de código abierto!", "privacy": "Privacidad", "terms": "Términos", - "checkForUpdates": "Comprobar actualizaciónes", + "checkForUpdates": "Comprobar actualizaciones", "checkStatus": "Comprobar estado", "checking": "Comprobando...", "youAreOnTheLatestVersion": "Estás usando la última versión", @@ -792,11 +792,11 @@ "share": "Compartir", "unhideToAlbum": "Hacer visible al álbum", "restoreToAlbum": "Restaurar al álbum", - "moveItem": "{count, plural, one {Mover elemento} other {Mover elementos}}", + "moveItem": "{count, plural,=1 {Mover objeto} other {Mover objetos}}", "@moveItem": { "description": "Page title while moving one or more items to an album" }, - "addItem": "{count, plural, one {Agregar elemento} other {Agregar elementos}}", + "addItem": "{count, plural, =1 {Añadir objeto} other {Añadir objetos}}", "@addItem": { "description": "Page title while adding one or more items to album" }, @@ -897,7 +897,7 @@ "authToViewYourMemories": "Por favor, autentícate para ver tus recuerdos", "unlock": "Desbloquear", "freeUpSpace": "Liberar espacio", - "freeUpSpaceSaving": "{count, plural, one {Se puede eliminar del dispositivo para liberar {formattedSize}} other {Se pueden eliminar del dispositivo para liberar {formattedSize}}}", + "freeUpSpaceSaving": "{count, plural, =1 {Se puede eliminar del dispositivo para liberar {formattedSize}} other {Se pueden eliminar del dispositivo para liberar {formattedSize}}}", "filesBackedUpInAlbum": "Se ha realizado la copia de seguridad de {count, plural, one {1 archivo} other {{formattedNumber} archivos}} de este álbum de forma segura", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -931,7 +931,7 @@ "@freeUpSpaceSaving": { "description": "Text to tell user how much space they can free up by deleting items from the device" }, - "freeUpAccessPostDelete": "Aún puedes acceder {count, plural, one {a él} other {a ellos}} en Ente mientras tengas una suscripción activa", + "freeUpAccessPostDelete": "Aún puedes acceder {count, plural,=1 {a él} other {a ellos}} en Ente mientras tengas una suscripción activa", "@freeUpAccessPostDelete": { "placeholders": { "count": { @@ -1096,7 +1096,7 @@ "@storageUsageInfo": { "description": "Example: 1.2 GB of 2 GB used or 100 GB or 2TB used" }, - "availableStorageSpace": "{freeAmount} {storageUnit} gratis", + "availableStorageSpace": "{freeAmount} {storageUnit} disponible", "appVersion": "Versión: {versionValue}", "verifyIDLabel": "Verificar", "fileInfoAddDescHint": "Añadir descripción...", @@ -1267,8 +1267,8 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "Encuentra gente rápidamente por su nombre", - "addViewers": "{count, plural, zero {Añadir espectador} one {Añadir espectador} other {Añadir espectadores}}", - "addCollaborators": "{count, plural, zero {Añadir colaborador} one {Añadir colaborador} other {Añadir colaboradores}}", + "addViewers": "{count, plural, =0 {Añadir espectador} =1{Añadir espectador} other {Añadir espectadores}}", + "addCollaborators": "{count, plural, =0 {Añadir colaborador} =1 {Añadir colaborador} other {Añadir colaboradores}}", "longPressAnEmailToVerifyEndToEndEncryption": "Mantén pulsado un correo electrónico para verificar el cifrado de extremo a extremo.", "developerSettingsWarning": "¿Estás seguro de que quieres modificar los ajustes de desarrollador?", "developerSettings": "Ajustes de desarrollador", @@ -1668,5 +1668,73 @@ "failed": "Fallido", "playStream": "Reproducir transmisión", "playOriginal": "Reproducir original", - "joinAlbumConfirmationDialogBody": "Unirse a un álbum hará visible tu correo electrónico a sus participantes." + "joinAlbumConfirmationDialogBody": "Unirse a un álbum hará visible tu correo electrónico a sus participantes.", + "pleaseWaitThisWillTakeAWhile": "Espera. Esto tardará un poco.", + "editTime": "Editar hora", + "selectTime": "Seleccionar hora", + "selectDate": "Seleccionar fecha", + "previous": "Anterior", + "selectOneDateAndTimeForAll": "Seleccione una fecha y hora para todas", + "selectStartOfRange": "Seleccionar inicio del rango", + "thisWillMakeTheDateAndTimeOfAllSelected": "Esto hará que la fecha y la hora de todas las fotos seleccionadas sean las mismas.", + "allWillShiftRangeBasedOnFirst": "Este es el primero en el grupo. Otras fotos seleccionadas cambiarán automáticamente basándose en esta nueva fecha", + "newRange": "Nuevo rango", + "selectOneDateAndTime": "Seleccionar fecha y hora", + "moveSelectedPhotosToOneDate": "Mover las fotos seleccionadas a una fecha", + "shiftDatesAndTime": "Cambiar fechas y hora", + "photosKeepRelativeTimeDifference": "Las fotos mantienen una diferencia de tiempo relativa", + "photocountPhotos": "{count, plural, =0 {No hay fotos} =1 {1 foto} other {{count} fotos}}", + "@photocountPhotos": { + "placeholders": { + "count": { + "type": "int", + "example": "2" + } + } + }, + "appIcon": "Ícono", + "notThisPerson": "¿No es esta persona?", + "selectedItemsWillBeRemovedFromThisPerson": "Los elementos seleccionados se eliminarán de esta persona, pero no se eliminarán de tu biblioteca.", + "throughTheYears": "{dateFormat} a través de los años", + "thisWeekThroughTheYears": "Esta semana a través de los años", + "thisWeekXYearsAgo": "{count, plural, =1 {Esta semana, hace {count} año} other {Esta semana, hace {count} años}}", + "youAndThem": "Tú y {name}", + "admiringThem": "Admirando a {name}", + "embracingThem": "Abrazando a {name}", + "partyWithThem": "Fiesta con {name}", + "hikingWithThem": "Senderismo con {name}", + "feastingWithThem": "Festejando con {name}", + "selfiesWithThem": "Selfies con {name}", + "posingWithThem": "Posando con {name}", + "backgroundWithThem": "Preciosas vistas con {name}", + "sportsWithThem": "Deportes con {name}", + "roadtripWithThem": "Viaje en carretera con {name}", + "spotlightOnYourself": "Enfócate a ti mismo", + "spotlightOnThem": "Enfocar a {name}", + "personIsAge": "¡{name} tiene {age} años!", + "personTurningAge": "{name} cumpliendo {age} pronto", + "lastTimeWithThem": "Última vez con {name}", + "tripToLocation": "Viaje a {location}", + "tripInYear": "Viaje en {year}", + "lastYearsTrip": "Viaje del año pasado", + "sunrise": "Sobre el horizonte", + "mountains": "Sobre las colinas", + "greenery": "La vida verde", + "beach": "Arena y mar ", + "city": "En la ciudad", + "moon": "A la luz de la luna", + "onTheRoad": "De nuevo en la carretera", + "food": "Delicia culinaria", + "pets": "Compañeros peludos", + "cLIcon": "Nuevo ícono", + "cLIconDesc": "Por fin, un nuevo icono de la aplicación, que creemos que representa mejor nuestro trabajo. También hemos añadido una opción para que puedas seguir utilizando el icono anterior.", + "cLMemories": "Recuerdos", + "cLMemoriesDesc": "Redescubre tus momentos especiales: enfócate en tu gente favorita, tus viajes y vacaciones, tus mejores clics, y mucho más. Activa el aprendizaje de automático, etiquétate a ti mismo y etiqueta a tus amigos para la mejor experiencia.", + "cLWidgets": "Widgets", + "cLWidgetsDesc": "Ya están disponibles los widgets de pantalla de inicio con tus recuerdos. Podrás ver tus momentos especiales sin abrir la aplicación.", + "cLFamilyPlan": "Límites de plan familiar", + "cLFamilyPlanDesc": "Ahora puede establecer límites en cuanto al almacenamiento que los miembros de tu familia pueden utilizar.", + "cLBulkEdit": "Edición masiva de fechas", + "cLBulkEditDesc": "Ahora puedes seleccionar múltiples fotos y editar la fecha/hora para todas ellas con una acción rápida. También es posible cambiar las fechas.", + "curatedMemories": "Memorias revisadas" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_eu.arb b/mobile/lib/l10n/intl_eu.arb new file mode 100644 index 0000000000..b08aaee4ef --- /dev/null +++ b/mobile/lib/l10n/intl_eu.arb @@ -0,0 +1,462 @@ +{ + "@@locale ": "en", + "enterYourEmailAddress": "Sartu zure helbide elektronikoa", + "accountWelcomeBack": "Ongi etorri berriro!", + "emailAlreadyRegistered": "Helbide hau badago erregistratuta lehendik.", + "emailNotRegistered": "Helbide hau ez dago erregistratuta.", + "email": "E-maila", + "cancel": "Utzi", + "verify": "Egiaztatu", + "invalidEmailAddress": "Helbide hau ez da zuzena", + "enterValidEmail": "Mesedez, sartu zuzena den helbidea.", + "deleteAccount": "Ezabatu zure kontua", + "askDeleteReason": "Zein da zure kontua ezabatzeko arrazoi nagusia?", + "deleteAccountFeedbackPrompt": "Sentitzen dugu zu joateaz. Mesedez, utziguzu zure feedbacka hobetzen laguntzeko.", + "feedback": "Feedbacka", + "kindlyHelpUsWithThisInformation": "Mesedez, lagun gaitzazu informazio honekin", + "confirmDeletePrompt": "Bai, betiko ezabatu nahi dut kontu hau eta berarekiko data aplikazio guztietan zehar.", + "confirmAccountDeletion": "Baieztatu Kontu Ezabaketa", + "deleteAccountPermanentlyButton": "Ezabatu Kontua Betiko", + "yourAccountHasBeenDeleted": "Zure kontua ezabatua izan da", + "selectReason": "Aukeratu arrazoia", + "deleteReason1": "Behar dudan ezaugarre nagusiren bat falta zaio", + "deleteReason2": "Aplikazioak edo ezaugarriren batek ez du funtzionatzen nik espero nuenez", + "deleteReason3": "Gustukoago dudan beste zerbitzu bat aurkitu dut", + "deleteReason4": "Nire arrazoia ez dago zerrendan", + "sendEmail": "Bidali mezua", + "deleteRequestSLAText": "Zure eskaera 72 ordutan prozesatua izango da.", + "deleteEmailRequest": "Mesedez, bidali e-mail bat account-deletion@ente.io helbidea zure erregistatutako helbidetik.", + "entePhotosPerm": "Ente-k zure baimena behar du zure argazkiak gordetzeko", + "ok": "Ondo", + "createAccount": "Sortu kontua", + "createNewAccount": "Sortu kontu berria", + "password": "Pasahitza", + "confirmPassword": "Egiaztatu pasahitza", + "activeSessions": "Saio aktiboak", + "oops": "Ai!", + "somethingWentWrongPleaseTryAgain": "Zerbait ez da ondo joan, mesedez, saiatu berriro", + "thisWillLogYouOutOfThisDevice": "Hau egiteak gailu honetatik aterako zaitu!", + "thisWillLogYouOutOfTheFollowingDevice": "Hau egiteak hurrengo gailutik aterako zaitu:", + "terminateSession": "Saioa bukatu?", + "terminate": "Bukatu", + "thisDevice": "Gailu hau", + "recoverButton": "Berreskuratu", + "recoverySuccessful": "Berreskurapen arrakastatsua!", + "decrypting": "Deszifratzen...", + "incorrectRecoveryKeyTitle": "Berreskuratze giltza ez da zuzena", + "incorrectRecoveryKeyBody": "Sartu duzun berreskuratze giltza ez da zuzena", + "forgotPassword": "Ahaztu pasahitza", + "enterYourRecoveryKey": "Sartu zure berreskuratze giltza", + "noRecoveryKey": "Berreskuratze giltzarik ez?", + "sorry": "Barkatu", + "noRecoveryKeyNoDecryption": "Gure puntutik-puntura zifratze protokoloa dela eta, zure data ezin da deszifratu zure pasahitza edo berreskuratze giltzarik gabe", + "verifyEmail": "Egiaztatu e-maila", + "toResetVerifyEmail": "Zure pasahitza berrezartzeko, mesedez egiaztatu zure e-maila lehenengoz.", + "checkInboxAndSpamFolder": "Mesedez, aztertu zure inbox (eta spam) karpetak egiaztatzea osotzeko", + "tapToEnterCode": "Klikatu kodea sartzeko", + "resendEmail": "Birbidali e-maila", + "weHaveSendEmailTo": "Mezua bidali dugu {email} helbidera", + "@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" + } + } + }, + "setPasswordTitle": "Ezarri pasahitza", + "changePasswordTitle": "Aldatu pasahitza", + "resetPasswordTitle": "Berrezarri pasahitza", + "encryptionKeys": "Zifratze giltzak", + "passwordWarning": "Ezin dugu zure pasahitza gorde, beraz, ahazten baduzu, ezin dugu zure data deszifratu", + "enterPasswordToEncrypt": "Sartu pasahitz bat, zure data deszifratu ahal izateko", + "enterNewPasswordToEncrypt": "Sartu pasahitz berri bat, zure data zifratu ahal izateko", + "weakStrength": "Ahula", + "strongStrength": "Gogorra", + "moderateStrength": "Ertaina", + "passwordStrength": "Pasahitzaren indarra: {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}" + }, + "passwordChangedSuccessfully": "Pasahitza zuzenki aldatuta", + "generatingEncryptionKeys": "Zifratze giltzak sortzen...", + "pleaseWait": "Mesedez, itxaron...", + "continueLabel": "Jarraitu", + "insecureDevice": "Gailua ez da segurua", + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Tamalez, ezin dugu giltza segururik sortu gailu honetan. \n\nMesedez, eman izena beste gailu batetik.", + "howItWorks": "Nola funtzionatzen duen", + "encryption": "Zifratzea", + "ackPasswordLostWarning": "Nire datuak puntutik puntura zifratuta daudenez, pasahitza ahaztuz gero nire datuak gal ditzakedala ulertzen dut.", + "privacyPolicyTitle": "Pribatutasun Politikak", + "termsOfServicesTitle": "Baldintzak", + "signUpTerms": "Zerbitzu baldintzak eta pribatutasun politikak onartzen ditut", + "logInLabel": "Sartu", + "loginTerms": "Sartzeko klikatuz, zerbitzu baldintzak eta pribatutasun politikak onartzen ditut", + "changeEmail": "Aldatu e-maila", + "enterYourPassword": "Sartu zure pasahitza", + "welcomeBack": "Ongi etorri berriro!", + "contactSupport": "Kontaktatu laguntza", + "incorrectPasswordTitle": "Pasahitz okerra", + "pleaseTryAgain": "Saiatu berriro, mesedez", + "recreatePasswordTitle": "Berrezarri pasahitza", + "useRecoveryKey": "Erabili berreskuratze giltza", + "recreatePasswordBody": "Gailu hau ez da zure pasahitza egiaztatzeko bezain indartsua, baina gailu guztietan funtzionatzen duen modu batean birsortu ahal dugu. \n\nMesedez sartu zure berreskuratze giltza erabiliz eta birsortu zure pasahitza (aurreko berbera erabili ahal duzu nahi izanez gero).", + "verifyPassword": "Egiaztatu pasahitza", + "recoveryKey": "Berreskuratze giltza", + "recoveryKeyOnForgotPassword": "Zure pasahitza ahazten baduzu, zure datuak berreskuratzeko modu bakarra gailu honen bidez izango da.", + "recoveryKeySaveDescription": "Guk ez dugu gailu hau gordetzen; mesedez, gorde 24 hitzeko giltza hau lege seguru batean.", + "doThisLater": "Egin hau geroago", + "saveKey": "Gorde giltza", + "recoveryKeyCopiedToClipboard": "Berreskuratze giltza arbelean kopiatu da", + "recoverAccount": "Berreskuratu kontua", + "recover": "Berreskuratu", + "dropSupportEmail": "Mesedez, bidali e-maila {supportEmail}-era zure erregistratutako e-mail helbidetik", + "@dropSupportEmail": { + "placeholders": { + "supportEmail": { + "description": "The support email address", + "type": "String", + "example": "support@ente.io" + } + } + }, + "twofactorSetup": "Faktore biko ezarpena", + "enterCode": "Sartu kodea", + "scanCode": "Eskaneatu kodea", + "codeCopiedToClipboard": "Kodea arbelean kopiatuta", + "copypasteThisCodentoYourAuthenticatorApp": "Kopiatu eta itsatsi kode hau zure autentifikazio aplikaziora", + "tapToCopy": "jo kopiatzeko", + "scanThisBarcodeWithnyourAuthenticatorApp": "Eskaneatu barra kode hau zure autentifikazio aplikazioaz", + "enterThe6digitCodeFromnyourAuthenticatorApp": "Sartu 6 digituko kodea zure autentifikazio aplikaziotik", + "confirm": "Baieztatu", + "setupComplete": "Prestaketa burututa", + "saveYourRecoveryKeyIfYouHaventAlready": "Gorde zure berreskuratze giltza ez baduzu oraindik egin", + "thisCanBeUsedToRecoverYourAccountIfYou": "Hau zure kontua berreskuratzeko erabili ahal duzu, zure bigarren faktorea ahaztuz gero", + "twofactorAuthenticationPageTitle": "Faktore biko autentifikatzea", + "lostDevice": "Gailua galdu duzu?", + "verifyingRecoveryKey": "Berreskuratze giltza egiaztatuz...", + "recoveryKeyVerified": "Berreskuratze giltza egiaztatuta", + "recoveryKeySuccessBody": "Primeran! Zure berreskuratze giltza zuzena da. Eskerrik asko egiaztatzeagatik.\n\nMesedez, gogoratu zure berreskuratze giltza leku seguruan gordetzea.", + "invalidRecoveryKey": "Sartu duzun berreskuratze kodea ez da zuzena. Mesedez, ziurtatu 24 hitz duela, eta egiaztatu hitz bakoitzaren idazkera. \n\nBerreskuratze kode zaharren bat sartu baduzu, ziurtatu 64 karaktere duela, eta egiaztatu horietako bakoitza.", + "invalidKey": "Kode okerra", + "tryAgain": "Saiatu berriro", + "viewRecoveryKey": "Ikusi berreskuratze kodea", + "confirmRecoveryKey": "Egiaztatu berreskuratze kodea", + "recoveryKeyVerifyReason": "Pasahitza ahazten baduzu, zure berreskuratze giltza argazkiak berreskuratzeko modu bakarra da. Berreskuratze giltza hemen aurkitu ahal duzu Ezarpenak > Kontua.\n\nMesedez sartu hemen zure berreskuratze giltza ondo gorde duzula egiaztatzeko.", + "confirmYourRecoveryKey": "Egiaztatu zure berreskuratze giltza", + "addViewer": "Gehitu ikuslea", + "addCollaborator": "Gehitu laguntzailea", + "addANewEmail": "Gehitu e-mail berria", + "orPickAnExistingOne": "Edo aukeratu lehengo bat", + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": "Laguntzaileek argazkiak eta bideoak gehitu ahal dituzte album partekatuan.", + "enterEmail": "Sartu e-maila", + "albumOwner": "Jabea", + "@albumOwner": { + "description": "Role of the album owner" + }, + "you": "Zu", + "collaborator": "Laguntzailea", + "addMore": "Gehitu gehiago", + "@addMore": { + "description": "Button text to add more collaborators/viewers" + }, + "viewer": "Ikuslea", + "remove": "Kendu", + "removeParticipant": "Kendu parte hartzailea", + "@removeParticipant": { + "description": "menuSectionTitle for removing a participant" + }, + "manage": "Kudeatu", + "addedAs": "Honela gehituta:", + "changePermissions": "Baimenak aldatu nahi?", + "yesConvertToViewer": "Bai, egin ikusle", + "cannotAddMorePhotosAfterBecomingViewer": "{user}-(e)k ezin izango du argazki gehiago gehitu album honetan \n\nBaina haiek gehitutako argazkiak kendu ahal izango dituzte", + "allowAddingPhotos": "Baimendu argazkiak gehitzea", + "@allowAddingPhotos": { + "description": "Switch button to enable uploading photos to a public link" + }, + "allowAddPhotosDescription": "Utzi esteka duen jendeari ere album partekatuan argazkiak gehitzen.", + "passwordLock": "Pasahitza blokeoa", + "canNotOpenTitle": "Ezin dut album hau ireki", + "canNotOpenBody": "Sentitzen dugu, album hau ezin da aplikazioan ireki.", + "disableDownloadWarningTitle": "Mesedez, ohartu", + "disableDownloadWarningBody": "Ikusleek pantaila-irudiak atera ahal dituzte, edo kanpoko tresnen bidez zure argazkien kopiak gorde", + "allowDownloads": "Baimendu jaitsierak", + "linkDeviceLimit": "Gailu muga", + "noDeviceLimit": "Bat ere ez", + "@noDeviceLimit": { + "description": "Text to indicate that there is limit on number of devices" + }, + "linkExpiry": "Estekaren epemuga", + "linkExpired": "Iraungita", + "linkEnabled": "Indarrean", + "linkNeverExpires": "Inoiz ez", + "expiredLinkInfo": "Esteka hau iraungi da. Mesedez, aukeratu beste epemuga bat edo deuseztatu estekaren epemuga.", + "setAPassword": "Ezarri pasahitza", + "lockButtonLabel": "Blokeatu", + "enterPassword": "Sartu pasahitza", + "removeLink": "Ezabatu esteka", + "manageLink": "Kudeatu esteka", + "linkExpiresOn": "Esteka epe honetan iraungiko da: {expiryTime}", + "albumUpdated": "Albuma eguneratuta", + "never": "Inoiz ez", + "custom": "Aukeran", + "@custom": { + "description": "Label for setting custom value for link expiry" + }, + "after1Hour": "Ordubete barru", + "after1Day": "Egun bat barru", + "after1Week": "Astebete barru", + "after1Month": "Hilabete bat barru", + "after1Year": "Urtebete barru", + "manageParticipants": "Kudeatu", + "albumParticipantsCount": "{count, plural,=0 {Parte hartzailerik ez}=1 {Parte hartzaile 1}other {{count} Parte hartzaile}}", + "@albumParticipantsCount": { + "placeholders": { + "count": { + "type": "int", + "example": "5" + } + }, + "description": "Number of participants in an album, including the album owner." + }, + "collabLinkSectionDescription": "Sortu esteka bat beste pertsona batzuei zure album partekatuan arriskuak gehitu eta ikusten uzteko, naiz eta Ente aplikazio edo kontua ez izan. Oso egokia gertakizun bateko argazkiak biltzeko.", + "collectPhotos": "Bildu argazkiak", + "collaborativeLink": "Parte hartzeko esteka", + "shareWithNonenteUsers": "Partekatu Ente erabiltzen ez dutenekin", + "createPublicLink": "Sortu esteka publikoa", + "sendLink": "Bidali esteka", + "copyLink": "Kopiatu esteka", + "linkHasExpired": "Esteka iraungi da", + "publicLinkEnabled": "Esteka publikoa indarrean", + "shareALink": "Partekatu esteka", + "sharedAlbumSectionDescription": "Sortu partekatutako eta parte hartzeko albumak beste Ente erabiltzaileekin, debaldeko planak dituztenak barne.", + "shareWithPeopleSectionTitle": "{numberOfPeople, plural,=0 {Partekatu pertsona zehatz batzuekin}=1 {Partekatu pertsona batekin} other {Partekatu {numberOfPeople} pertsonarekin}}", + "@shareWithPeopleSectionTitle": { + "placeholders": { + "numberOfPeople": { + "type": "int", + "example": "2" + } + } + }, + "thisIsYourVerificationId": "Hau da zure Egiaztatze IDa", + "someoneSharingAlbumsWithYouShouldSeeTheSameId": "Zurekin albumak partekatzen dituen norbaitek ID berbera ikusi beharko luke bere gailuan.", + "howToViewShareeVerificationID": "Mesedez, eska iezaiozu ezarpenen landutako bere e-mail helbidean luze klikatzeko, eta egiaztatu gailu bietako IDak bat direla.", + "thisIsPersonVerificationId": "Hau da {email}-(r)en Egiaztatze IDa", + "@thisIsPersonVerificationId": { + "placeholders": { + "email": { + "type": "String", + "example": "someone@ente.io" + } + } + }, + "verificationId": "Egiaztatze IDa", + "verifyEmailID": "Egiaztatu {email}", + "emailNoEnteAccount": "{email}-(e)k ez du Ente konturik. \n\nBidali gonbidapena argazkiak partekatzeko.", + "shareMyVerificationID": "Hau da nire Egiaztatze IDa: {verificationID} ente.io-rako.", + "shareTextConfirmOthersVerificationID": "Ei, baieztatu ahal duzu hau dela zure ente.io Egiaztatze IDa?: {verificationID}", + "somethingWentWrong": "Zerbait oker joan da", + "sendInvite": "Bidali gonbidapena", + "shareTextRecommendUsingEnte": "Jaitsi Ente argazkiak eta bideoak jatorrizko kalitatean errez partekatu ahal izateko \n\nhttps://ente.io", + "done": "Eginda", + "applyCodeTitle": "Aplikatu kodea", + "enterCodeDescription": "Sartu zure lagunak emandako kodea, biontzat debaldeko biltegiratzea lortzeko", + "apply": "Aplikatu", + "failedToApplyCode": "Akatsa kodea aplikatzean", + "enterReferralCode": "Sartu erreferentzia kodea", + "codeAppliedPageTitle": "Kodea aplikatuta", + "changeYourReferralCode": "Aldatu zure erreferentzia kodea", + "change": "Aldatu", + "unavailableReferralCode": "Sentitzen dugu, kode hau ezin da erabili.", + "codeChangeLimitReached": "Sentitzen dugu, zure kode aldaketa muga gainditu duzu.", + "onlyFamilyAdminCanChangeCode": "Mesedez, jarri harremanetan {familyAdminEmail}-(r)ekin zure kodea aldatzeko.", + "storageInGB": "{storageAmountInGB} GB", + "claimed": "Eskatuta", + "@claimed": { + "description": "Used to indicate storage claimed, like 10GB Claimed" + }, + "details": "Detaileak", + "claimMore": "Eskatu gehiago!", + "theyAlsoGetXGb": "Haiek ere lortuko dute {storageAmountInGB} GB", + "freeStorageOnReferralSuccess": "{storageAmountInGB} GB norbaitek ordainpeko plan batean sartzen denean zure kodea aplikatzen badu", + "shareTextReferralCode": "Sartu erreferentzia kodea: {referralCode}\n\nAplikatu hemen: Ezarpenak → Orokorra→ Erreferentziak, {referralStorageInGB} GB dohainik izateko ordainpeko plan batean \n\nhttps://ente.io", + "claimFreeStorage": "Eskatu debaldeko biltegiratzea", + "inviteYourFriends": "Gonbidatu zure lagunak", + "failedToFetchReferralDetails": "Ezin dugu zure erreferentziaren detailerik lortu. Mesedez, saiatu berriro geroago.", + "referralStep1": "1. Eman kode hau zure lagunei", + "referralStep2": "2. Haiek ordainpeko plan batean sinatu behar dute", + "referralStep3": "3. Bai zuk bai haiek {storageInGB} GB* dohainik izango duzue", + "referralsAreCurrentlyPaused": "Erreferentziak momentuz geldituta daude", + "youCanAtMaxDoubleYourStorage": "* Gehienez zure biltegiratzea bikoiztu ahal duzu", + "claimedStorageSoFar": "{isFamilyMember, select,true {Zure familiak {storageAmountInGb} GB eskatu du dagoeneko} false {Zuk {storageAmountInGb} GB eskatu duzu dagoeneko} other {Zuk {storageAmountInGb} GB eskatu duzu dagoeneko!}}", + "@claimedStorageSoFar": { + "placeholders": { + "isFamilyMember": { + "type": "String", + "example": "true" + }, + "storageAmountInGb": { + "type": "int", + "example": "10" + } + } + }, + "faq": "FAQ", + "help": "Laguntza", + "oopsSomethingWentWrong": "Oops, zerbait txarto joan da", + "peopleUsingYourCode": "Jendea zure kodea erabiltzen", + "eligible": "aukerakoak", + "total": "osotara", + "codeUsedByYou": "Zuk erabilitako kodea", + "freeStorageClaimed": "Debaldeko biltegiratzea eskatuta", + "freeStorageUsable": "Debaldeko biltegiratzea erabilgarri", + "usableReferralStorageInfo": "Biltegiratze erabilgarria zure oraingo planaren arabera mugatuta dago. Soberan eskatutako biltegiratzea automatikoki erabili ahal izango duzu zure plan gaurkotzen duzunean.", + "removeFromAlbumTitle": "Albumetik kendu?", + "removeFromAlbum": "Kendu albumetik", + "itemsWillBeRemovedFromAlbum": "Hautatutako elementuak album honetatik kenduko dira", + "removeShareItemsWarning": "Kentzen ari zaren elementu batzuk beste pertsona batzuek gehitu zituzten, beraz ezin izango dituzu eskuratu", + "addingToFavorites": "Gogokoetan gehitzen...", + "removingFromFavorites": "Gogokoetatik kentzen...", + "sorryCouldNotAddToFavorites": "Sentitzen dut, ezin izan dugu zure gogokoetan gehitu!", + "sorryCouldNotRemoveFromFavorites": "Sentitzen dugu, ezin izan dugu zure gogokoetatik kendu!", + "subscribeToEnableSharing": "Ordainpeko harpidetza behar duzu partekatzea aktibatzeko.", + "subscribe": "Harpidetu", + "canOnlyRemoveFilesOwnedByYou": "Zure fitxategiak baino ezin duzu ezabatu", + "deleteSharedAlbum": "Partekatutako albuma ezabatu?", + "deleteAlbum": "Ezabatu albuma", + "deleteAlbumDialog": "Ezabatu nahi dituzu album honetan dauden argazkiak (eta bideoak) parte diren beste album guztietatik ere?", + "deleteSharedAlbumDialogBody": "Albuma guztiontzat ezabatuko da \n\nAlbum honetan dauden beste pertsonek partekatutako argazkiak ezin izango dituzu eskuratu", + "yesRemove": "Bai, ezabatu", + "creatingLink": "Esteka sortzen...", + "removeWithQuestionMark": "Ezabatuko?", + "removeParticipantBody": "{userEmail} partekatutako album honetatik ezabatuko da \n\nHaiek gehitutako argazki guztiak ere ezabatuak izango dira albumetik", + "keepPhotos": "Gorde Argazkiak", + "deletePhotos": "Ezabatu argazkiak", + "inviteToEnte": "Gonbidatu Ente-ra", + "removePublicLink": "Ezabatu esteka publikoa", + "disableLinkMessage": "Honen bidez {albumName} eskuratzeko esteka publikoa ezabatuko da.", + "sharing": "Partekatzen...", + "youCannotShareWithYourself": "Ezin duzu zeure buruarekin partekatu", + "archive": "Artxiboa", + "createAlbumActionHint": "Luze klikatu argazkiak hautatzeko eta klikatu + albuma sortzeko", + "importing": "Inportatzen....", + "failedToLoadAlbums": "Errorea albumak kargatzen", + "hidden": "Ezkutatuta", + "authToViewYourHiddenFiles": "Mesedez, autentifikatu zure ezkutatutako fitxategiak ikusteko", + "authToViewTrashedFiles": "Mesedez, autentifikatu paperontzira botatako zure fitxategiak ikusteko", + "trash": "Zarama", + "uncategorized": "Kategori gabekoa", + "videoSmallCase": "bideoa", + "photoSmallCase": "argazkia", + "singleFileDeleteHighlight": "Album guztietatik ezabatuko da.", + "singleFileInBothLocalAndRemote": "{fileType} hau Ente-n eta zure gailuan dago.", + "singleFileInRemoteOnly": "{fileType} hau Ente-tik ezabatuko da.", + "singleFileDeleteFromDevice": "{fileType} hau zure gailutik ezabatuko da.", + "deleteFromEnte": "Ezabatu Ente-tik", + "yesDelete": "Bai, ezabatu", + "movedToTrash": "Zarama mugituta", + "deleteFromDevice": "Ezabatu gailutik", + "deleteFromBoth": "Ezabatu bietatik", + "newAlbum": "Album berria", + "albums": "Albumak", + "memoryCount": "{count, plural,=0{oroitzapenik ez}one{oroitzapen {formattedCount}} other{{formattedCount} oroitzapen}}", + "@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} hautatuta", + "@selectedPhotos": { + "description": "Display the number of selected photos", + "type": "text", + "placeholders": { + "count": { + "example": "5", + "type": "int" + } + } + }, + "selectedPhotosWithYours": "{count} hautatuta ({yourCount} zureak)", + "@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": "Aurreratuak", + "@advancedSettings": { + "description": "The text to display in the advanced settings section" + }, + "photoGridSize": "Argazki sarearen tamaina", + "manageDeviceStorage": "Kudeatu gailuaren katxea", + "manageDeviceStorageDesc": "Berrikusi eta garbitu katxe lokalaren biltegiratzea.", + "machineLearning": "Ikasketa automatikoa", + "mlConsent": "Aktibatu ikasketa automatikoa", + "mlConsentTitle": "Ikasketa automatikoa aktibatuko?", + "mlConsentDescription": "Ikasketa automatikoa aktibatuz gero, Ente-k fitxategietatik informazioa aterako du (ad. argazkien geometria), zurekin partekatutako argazkietatik ere.\n\nHau zure gailuan gertatuko da, eta sortutako informazio biometrikoa puntutik puntura zifratuta egongo da.", + "mlConsentPrivacy": "Mesedez, klikatu hemen gure pribatutasun politikan ezaugarri honi buruz detaile gehiago izateko", + "mlConsentConfirmation": "Ulertzen dut, eta ikasketa automatikoa aktibatu nahi dut", + "magicSearch": "Bilaketa magikoa", + "discover": "Aurkitu", + "@discover": { + "description": "The text to display for the discover section under which we show receipts, screenshots, sunsets, greenery, etc." + }, + "discover_identity": "Nortasuna", + "discover_screenshots": "Pantaila argazkiak", + "discover_receipts": "Ordainagiriak", + "discover_notes": "Oharrak", + "discover_memes": "Memeak", + "discover_visiting_cards": "Bisita txartelak", + "discover_babies": "Umeak", + "discover_pets": "Etxe-animaliak", + "discover_selfies": "Selfiak", + "discover_wallpapers": "Horma-paperak", + "discover_food": "Janaria", + "discover_celebrations": "Ospakizunak", + "discover_sunset": "Eguzki-sartzea", + "discover_hills": "Muinoak", + "discover_greenery": "Hostoa", + "authToChangeYourEmail": "Mesedez, autentifikatu zure emaila aldatzeko", + "authToChangeYourPassword": "Mesedez, autentifikatu zure pasahitza aldatzeko", + "authToChangeEmailVerificationSetting": "Mesedez, autentifikatu emailaren egiaztatzea aldatzeko", + "authToInitiateAccountDeletion": "Mesedez, autentifikatu kontu ezabaketa hasteko", + "authToViewYourRecoveryKey": "Mesedez, autentifikatu zure berreskuratze giltza ikusteko", + "authToConfigureTwofactorAuthentication": "Mesedez, autentifikatu faktore biko autentifikazioa konfiguratzeko", + "authToChangeLockscreenSetting": "Mesedez, autentifikatu pantaila blokeatzeko ezarpenak aldatzeko", + "authToViewYourActiveSessions": "Mesedez, autentifikatu indarrean dauden zure saioak ikusteko", + "confirm2FADisable": "Seguru zaude faktore biko autentifikazioa deuseztatu nahi duzula?", + "twofactorAuthenticationHasBeenDisabled": "Faktore biko autentifikazioa deuseztatua izan da", + "iOSLockOut": "Autentifikazio biometrikoa deuseztatuta dago. Mesedez, blokeatu eta desblokeatu zure pantaila indarrean jartzeko.", + "@iOSLockOut": { + "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." + } +} \ No newline at end of file diff --git a/mobile/lib/l10n/intl_fr.arb b/mobile/lib/l10n/intl_fr.arb index efc03afe27..51b1046b35 100644 --- a/mobile/lib/l10n/intl_fr.arb +++ b/mobile/lib/l10n/intl_fr.arb @@ -3,7 +3,7 @@ "enterYourEmailAddress": "Entrez votre adresse e-mail", "accountWelcomeBack": "Bon retour parmi nous !", "emailAlreadyRegistered": "Email déjà enregistré.", - "emailNotRegistered": "Email inconnu.", + "emailNotRegistered": "E-mail non enregistré.", "email": "E-mail", "cancel": "Annuler", "verify": "Vérifier", @@ -371,21 +371,6 @@ "deleteFromBoth": "Supprimer des deux", "newAlbum": "Nouvel album", "albums": "Albums", - "memoryCount": "{count, plural, one{{formattedCount} souvenir} other{{formattedCount} souvenirs}}", - "@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} sélectionné(s)", "@selectedPhotos": { "description": "Display the number of selected photos", @@ -475,7 +460,7 @@ } } }, - "showMemories": "Montrer les souvenirs", + "showMemories": "Afficher les souvenirs", "yearsAgo": "{count, plural, one{il y a {count} an} other{il y a {count} ans}}", "backupSettings": "Paramètres de la sauvegarde", "backupStatus": "État de la sauvegarde", @@ -525,6 +510,7 @@ "viewLargeFiles": "Fichiers volumineux", "viewLargeFilesDesc": "Affichez les fichiers qui consomment le plus de stockage.", "noDuplicates": "✨ Aucun doublon", + "youveNoDuplicateFilesThatCanBeCleared": "Vous n'avez aucun fichier dupliqué pouvant être nettoyé", "success": "Succès", "rateUs": "Évaluez-nous", "remindToEmptyDeviceTrash": "Également vide \"récemment supprimé\" de \"Paramètres\" -> \"Stockage\" pour réclamer l'espace libéré", @@ -791,14 +777,6 @@ "share": "Partager", "unhideToAlbum": "Afficher dans l'album", "restoreToAlbum": "Restaurer vers l'album", - "moveItem": "{count, plural, one {Déplacez l'objet} other {Déplacez des objets}}", - "@moveItem": { - "description": "Page title while moving one or more items to an album" - }, - "addItem": "{count, plural, one {Ajoutez un objet} other {Ajoutez des objets}}", - "@addItem": { - "description": "Page title while adding one or more items to album" - }, "createOrSelectAlbum": "Créez ou sélectionnez un album", "selectAlbum": "Sélectionner album", "searchByAlbumNameHint": "Nom de l'album", @@ -896,7 +874,6 @@ "authToViewYourMemories": "Authentifiez-vous pour voir vos souvenirs", "unlock": "Déverrouiller", "freeUpSpace": "Libérer de l'espace", - "freeUpSpaceSaving": "{count, plural, one {Il peut être supprimé de l'appareil pour libérer {formattedSize}} other {Ils peuvent être supprimés de l'appareil pour libérer {formattedSize}}}", "filesBackedUpInAlbum": "{count, plural, one {1 fichier dans cet album a été sauvegardé en toute sécurité} other {{formattedNumber} fichiers dans cet album ont été sauvegardés en toute sécurité}}", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -927,18 +904,6 @@ } } }, - "@freeUpSpaceSaving": { - "description": "Text to tell user how much space they can free up by deleting items from the device" - }, - "freeUpAccessPostDelete": "Vous pouvez toujours {count, plural, one {y} other {y}} accéder sur Ente tant que vous avez un abonnement actif", - "@freeUpAccessPostDelete": { - "placeholders": { - "count": { - "example": "1", - "type": "int" - } - } - }, "freeUpAmount": "Libérer {sizeInMBorGB}", "thisEmailIsAlreadyInUse": "Cette adresse mail est déjà utilisé", "incorrectCode": "Code non valide", @@ -1266,8 +1231,6 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "Trouver des personnes rapidement par leur nom", - "addViewers": "{count, plural, zero {Ajouter un observateur} one {Ajouter un observateur} other {Ajouter des observateurs}}", - "addCollaborators": "{count, plural, zero {Ajouter un collaborateur} one {Ajouter un collaborateur} other {Ajouter des collaborateurs}}", "longPressAnEmailToVerifyEndToEndEncryption": "Appuyez longuement sur un email pour vérifier le chiffrement de bout en bout.", "developerSettingsWarning": "Êtes-vous sûr de vouloir modifier les paramètres du développeur ?", "developerSettings": "Paramètres du développeur", @@ -1399,16 +1362,6 @@ "enableMachineLearningBanner": "Activer l'apprentissage automatique pour la reconnaissance des visages et la recherche magique", "searchDiscoverEmptySection": "Les images seront affichées ici une fois le traitement terminé", "searchPersonsEmptySection": "Les personnes seront affichées ici une fois le traitement terminé", - "viewersSuccessfullyAdded": "{count, plural, =0 {0 observateur ajouté} =1 {1 observateur ajouté} other {{count} observateurs ajoutés}}", - "@viewersSuccessfullyAdded": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - }, - "description": "Number of viewers that were successfully added to an album." - }, "collaboratorsSuccessfullyAdded": "{count, plural, =0 {0 collaborateur ajouté} =1 {1 collaborateur ajouté} other {{count} collaborateurs ajoutés}}", "@collaboratorsSuccessfullyAdded": { "placeholders": { @@ -1484,15 +1437,6 @@ }, "currentlyRunning": "en cours d'exécution", "ignored": "ignoré", - "photosCount": "{count, plural, =0 {0 photo} =1 {1 photo} other {{count} photos}}", - "@photosCount": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - } - }, "file": "Fichier", "searchSectionsLengthMismatch": "Incompatibilité de longueur des sections : {snapshotLength} != {searchLength}", "@searchSectionsLengthMismatch": { @@ -1668,6 +1612,72 @@ "playStream": "Lire le stream", "playOriginal": "Lire l'original", "joinAlbumConfirmationDialogBody": "Rejoindre un album rendra votre e-mail visible à ses participants.", + "pleaseWaitThisWillTakeAWhile": "Veuillez patienter, cela prendra un peu de temps.", + "editTime": "Modifier l'heure", + "selectTime": "Sélectionner l'heure", "selectDate": "Sélectionner la date", - "previous": "Précédent" + "previous": "Précédent", + "selectOneDateAndTimeForAll": "Sélectionnez une date et une heure pour tous", + "selectStartOfRange": "Sélectionner le début de la plage", + "thisWillMakeTheDateAndTimeOfAllSelected": "Cela rendra la date et l'heure identique à toutes les photos sélectionnées.", + "allWillShiftRangeBasedOnFirst": "C'est la première dans le groupe. Les autres photos sélectionnées se déplaceront automatiquement en fonction de cette nouvelle date", + "newRange": "Nouvelle plage", + "selectOneDateAndTime": "Sélectionner une date et une heure", + "moveSelectedPhotosToOneDate": "Déplacer les photos sélectionnées vers une date", + "shiftDatesAndTime": "Dates et heure de décalage", + "photosKeepRelativeTimeDifference": "Les photos gardent une différence de temps relative", + "photocountPhotos": "{count, plural, =0 {No photos} =1 {1 photo} other {{count} photos}}", + "@photocountPhotos": { + "placeholders": { + "count": { + "type": "int", + "example": "2" + } + } + }, + "appIcon": "Icône de l'appli", + "notThisPerson": "Ce n'est pas cette personne ?", + "selectedItemsWillBeRemovedFromThisPerson": "Les éléments sélectionnés seront retirés de cette personne, mais pas supprimés de votre bibliothèque.", + "throughTheYears": "{dateFormat} au fil des années", + "thisWeekThroughTheYears": "Cette semaine au fil des années", + "thisWeekXYearsAgo": "{count, plural, one {}=1 {Cette semaine, {count} il y a l'année} other {Cette semaine, {count} il y a des années}}", + "youAndThem": "Vous et {name}", + "admiringThem": "Admirant {name}", + "embracingThem": "Embrasse {name}", + "partyWithThem": "En soirée avec {name}", + "hikingWithThem": "Randonnée avec {name}", + "feastingWithThem": "Fête avec {name}", + "selfiesWithThem": "Selfies avec {name}", + "posingWithThem": "Pose avec {name}", + "backgroundWithThem": "Magnifiques vues avec {name}", + "sportsWithThem": "Sports avec {name}", + "roadtripWithThem": "En route avec {name}", + "spotlightOnYourself": "Éclairage sur vous-même", + "spotlightOnThem": "Spotlight sur {name}", + "personIsAge": "{name} a {age}!", + "personTurningAge": "{name} aura bientôt {age}", + "lastTimeWithThem": "Dernière fois avec {name}", + "tripToLocation": "Voyage vers {location}", + "tripInYear": "Voyage en {year}", + "lastYearsTrip": "Voyage de l'an dernier", + "sunrise": "À l'horizon", + "mountains": "Au-dessus des collines", + "greenery": "La vie au vert", + "beach": "Sable et mer", + "city": "Dans la ville", + "moon": "Au clair de lune", + "onTheRoad": "De nouveau sur la route", + "food": "Plaisir culinaire", + "pets": "Compagnons à quatre pattes", + "cLIcon": "Nouvel icône", + "cLIconDesc": "Finalement, création d'un nouvel icône d'application qui, selon nous, représente au mieux notre travail. Nous avons également ajouté un changeur d'icône pour que vous puissiez continuer à utiliser l'ancien.", + "cLMemories": "Souvenirs", + "cLMemoriesDesc": "Redécouvrez vos précieux souvenirs - focus sur vos connaissances préférées, vos voyages et vos vacances, vos meilleurs clics et bien plus encore. Activez l'apprentissage automatique, taguez-vous et nommez vos amis pour une meilleure expérience.", + "cLWidgets": "Widgets", + "cLWidgetsDesc": "Les widgets (ou gadgets) de l'écran d'accueil, qui sont intégrés à des souvenirs, sont maintenant disponibles. Ils montreront vos moments spéciaux sans nécessité d'ouvrir l'application.", + "cLFamilyPlan": "Limites pour le forfait Famille", + "cLFamilyPlanDesc": "Vous pouvez maintenant fixer des limites sur la quantité de stockage que les membres de votre famille peuvent utiliser.", + "cLBulkEdit": "Dates de modification multiples", + "cLBulkEditDesc": "Vous pouvez maintenant sélectionner plusieurs photos et modifier la date/heure pour toutes celles-ci, en une seule action rapide. Les dates de décalage sont également prises en charge.", + "curatedMemories": "Souvenirs conservés" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_he.arb b/mobile/lib/l10n/intl_he.arb index e1e5713b55..c4232070a8 100644 --- a/mobile/lib/l10n/intl_he.arb +++ b/mobile/lib/l10n/intl_he.arb @@ -352,21 +352,6 @@ "deleteFromBoth": "מחק משניהם", "newAlbum": "אלבום חדש", "albums": "אלבומים", - "memoryCount": "{count, plural, one{{formattedCount} זכרון} two {{formattedCount} זכרונות} many {{formattedCount} זכרונות} other{{formattedCount} זכרונות}}", - "@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} נבחרו", "@selectedPhotos": { "description": "Display the number of selected photos", @@ -683,14 +668,6 @@ "share": "שתף", "unhideToAlbum": "בטל הסתרה בחזרה לאלבום", "restoreToAlbum": "שחזר לאלבום", - "moveItem": "{count, plural, one {הזז פריט} two {הזז פריטים} many {הזז פריטים} other {הזז פריטים}}", - "@moveItem": { - "description": "Page title while moving one or more items to an album" - }, - "addItem": "{count, plural, one {הוסף פריט} two {הוסף פריטים} many {הוסף פריטים} other {הוסף פריטים}}", - "@addItem": { - "description": "Page title while adding one or more items to album" - }, "createOrSelectAlbum": "צור או בחר אלבום", "selectAlbum": "בחר אלבום", "searchByAlbumNameHint": "שם האלבום", diff --git a/mobile/lib/l10n/intl_id.arb b/mobile/lib/l10n/intl_id.arb index fbee9bae17..a83968f188 100644 --- a/mobile/lib/l10n/intl_id.arb +++ b/mobile/lib/l10n/intl_id.arb @@ -365,21 +365,6 @@ "deleteFromBoth": "Hapus dari keduanya", "newAlbum": "Album baru", "albums": "Album", - "memoryCount": "{count, plural, zero{tiada kenangan} one{{formattedCount} kenangan} other{{formattedCount} kenangan}}", - "@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} terpilih", "@selectedPhotos": { "description": "Display the number of selected photos", @@ -745,14 +730,6 @@ "delete": "Hapus", "hide": "Sembunyikan", "share": "Bagikan", - "moveItem": "{count, plural, other {Pindahkan item}}", - "@moveItem": { - "description": "Page title while moving one or more items to an album" - }, - "addItem": "{count, plural, other {Tambahkan item}}", - "@addItem": { - "description": "Page title while adding one or more items to album" - }, "createOrSelectAlbum": "Buat atau pilih album", "selectAlbum": "Pilih album", "searchByAlbumNameHint": "Nama album", @@ -824,7 +801,6 @@ "authToViewYourMemories": "Harap autentikasi untuk melihat kenanganmu", "unlock": "Buka", "freeUpSpace": "Bersihkan ruang", - "freeUpSpaceSaving": "{count, plural, other {File tersebut bisa dihapus dari perangkat ini untuk membersihkan {formattedSize}}}", "filesBackedUpInAlbum": "{count, plural, other {{formattedNumber} file}} dalam album ini telah berhasil dicadangkan", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -855,18 +831,6 @@ } } }, - "@freeUpSpaceSaving": { - "description": "Text to tell user how much space they can free up by deleting items from the device" - }, - "freeUpAccessPostDelete": "Kamu masih bisa mengakses {count, plural, other {filenya}} di Ente selama kamu masih berlangganan", - "@freeUpAccessPostDelete": { - "placeholders": { - "count": { - "example": "1", - "type": "int" - } - } - }, "freeUpAmount": "Bersihkan {sizeInMBorGB}", "thisEmailIsAlreadyInUse": "Email ini telah digunakan", "incorrectCode": "Kode salah", @@ -1095,7 +1059,6 @@ "joinDiscord": "Bergabung ke Discord", "addAName": "Tambahkan nama", "findPeopleByName": "Telusuri orang dengan mudah menggunakan nama", - "addCollaborators": "{count, plural, other {Tambahkan kolaborator}}", "longPressAnEmailToVerifyEndToEndEncryption": "Tekan dan tahan email untuk membuktikan enkripsi ujung ke ujung.", "developerSettingsWarning": "Apakah kamu yakin ingin mengubah pengaturan pengembang?", "developerSettings": "Pengaturan pengembang", diff --git a/mobile/lib/l10n/intl_it.arb b/mobile/lib/l10n/intl_it.arb index 366e5e3e74..222566995a 100644 --- a/mobile/lib/l10n/intl_it.arb +++ b/mobile/lib/l10n/intl_it.arb @@ -371,21 +371,6 @@ "deleteFromBoth": "Elimina da entrambi", "newAlbum": "Nuovo album", "albums": "Album", - "memoryCount": "{count, plural, one{{formattedCount} ricordo} other{{formattedCount} ricordi}}", - "@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} selezionati", "@selectedPhotos": { "description": "Display the number of selected photos", @@ -791,14 +776,6 @@ "share": "Condividi", "unhideToAlbum": "Non nascondere l'album", "restoreToAlbum": "Ripristina l'album", - "moveItem": "{count, plural, one {Sposta elemento} other {Sposta elementi}}", - "@moveItem": { - "description": "Page title while moving one or more items to an album" - }, - "addItem": "{count, plural, one {Aggiungi elemento} other {Aggiungi elementi}}", - "@addItem": { - "description": "Page title while adding one or more items to album" - }, "createOrSelectAlbum": "Crea o seleziona album", "selectAlbum": "Seleziona album", "searchByAlbumNameHint": "Nome album", @@ -896,7 +873,6 @@ "authToViewYourMemories": "Autenticati per visualizzare le tue foto", "unlock": "Sblocca", "freeUpSpace": "Libera spazio", - "freeUpSpaceSaving": "{count, plural, one {Può essere cancellata per liberare {formattedSize}} other {Possono essere cancellati per liberare {formattedSize}}}", "filesBackedUpInAlbum": "{count, plural, one {1 file} other {{formattedNumber} file}} di quest'album sono stati salvati in modo sicuro", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -927,18 +903,6 @@ } } }, - "@freeUpSpaceSaving": { - "description": "Text to tell user how much space they can free up by deleting items from the device" - }, - "freeUpAccessPostDelete": "Puoi ancora accedere a {count, plural, one {} other {loro}} su ente finché hai un abbonamento attivo", - "@freeUpAccessPostDelete": { - "placeholders": { - "count": { - "example": "1", - "type": "int" - } - } - }, "freeUpAmount": "Libera {sizeInMBorGB}", "thisEmailIsAlreadyInUse": "Questo indirizzo email è già registrato", "incorrectCode": "Codice sbagliato", @@ -1266,8 +1230,6 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "Trova rapidamente le persone per nome", - "addViewers": "{count, plural, zero {Aggiungi visualizzatore} one {Aggiungi visualizzatore} other {Aggiungi visualizzatori}}", - "addCollaborators": "{count, plural, zero {Aggiungi collaboratore} one {Aggiungi collaboratore} other {Aggiungi collaboratori}}", "longPressAnEmailToVerifyEndToEndEncryption": "Premi a lungo un'email per verificare la crittografia end to end.", "developerSettingsWarning": "Sei sicuro di voler modificare le Impostazioni sviluppatore?", "developerSettings": "Impostazioni sviluppatore", @@ -1397,16 +1359,6 @@ "enableMachineLearningBanner": "Abilita l'apprendimento automatico per la ricerca magica e il riconoscimento facciale", "searchDiscoverEmptySection": "Le immagini saranno mostrate qui una volta che l'elaborazione e la sincronizzazione saranno completate", "searchPersonsEmptySection": "Le persone saranno mostrate qui una volta che l'elaborazione e la sincronizzazione saranno completate", - "viewersSuccessfullyAdded": "{count, plural, =0 {Aggiunti 0 visualizzatori} =1 {Aggiunto 1 visualizzatore} other {Aggiunti {count} visualizzatori}}", - "@viewersSuccessfullyAdded": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - }, - "description": "Number of viewers that were successfully added to an album." - }, "collaboratorsSuccessfullyAdded": "{count, plural, =0 {Aggiunti 0 collaboratori} =1 {Aggiunto 1 collaboratore} other {Aggiunti {count} collaboratori}}", "@collaboratorsSuccessfullyAdded": { "placeholders": { @@ -1473,15 +1425,6 @@ }, "currentlyRunning": "attualmente in esecuzione", "ignored": "ignorato", - "photosCount": "{count, plural, =0 {0 foto} =1 {1 foto} other {{count} foto}}", - "@photosCount": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - } - }, "file": "File", "selectCoverPhoto": "Seleziona foto di copertina", "newLocation": "Nuova posizione", diff --git a/mobile/lib/l10n/intl_ja.arb b/mobile/lib/l10n/intl_ja.arb index b74bdeaf36..7b5bca172c 100644 --- a/mobile/lib/l10n/intl_ja.arb +++ b/mobile/lib/l10n/intl_ja.arb @@ -371,21 +371,6 @@ "deleteFromBoth": "両方から削除", "newAlbum": "新しいアルバム", "albums": "アルバム", - "memoryCount": "{count, plural, zero{思い出なし} one{{formattedCount} 思い出} other{{formattedCount} 思い出}}", - "@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} 個を選択", "@selectedPhotos": { "description": "Display the number of selected photos", @@ -792,14 +777,6 @@ "share": "共有", "unhideToAlbum": "アルバムを再表示する", "restoreToAlbum": "アルバムに戻す", - "moveItem": "{count, plural, one {項目を移動} other {項目を移動}}", - "@moveItem": { - "description": "Page title while moving one or more items to an album" - }, - "addItem": "{count, plural, one {項目を追加} other {項目を追加}}", - "@addItem": { - "description": "Page title while adding one or more items to album" - }, "createOrSelectAlbum": "アルバムを作成または選択", "selectAlbum": "アルバムを選択", "searchByAlbumNameHint": "アルバム名", @@ -897,7 +874,6 @@ "authToViewYourMemories": "思い出を閲覧するためには認証が必要です", "unlock": "ロック解除", "freeUpSpace": "スペースを解放する", - "freeUpSpaceSaving": "{count, plural, other {デバイスから削除して{formattedSize} 解放することができます}}", "filesBackedUpInAlbum": "{count, plural, other {{formattedNumber} ファイル}} が安全にバックアップされました", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -928,18 +904,6 @@ } } }, - "@freeUpSpaceSaving": { - "description": "Text to tell user how much space they can free up by deleting items from the device" - }, - "freeUpAccessPostDelete": "あなたが有効なサブスクリプションを持っている限りEnte上の {count, plural, other {それらに}} アクセスできます", - "@freeUpAccessPostDelete": { - "placeholders": { - "count": { - "example": "1", - "type": "int" - } - } - }, "freeUpAmount": "{sizeInMBorGB} を解放する", "thisEmailIsAlreadyInUse": "このメールアドレスはすでに使用されています。", "incorrectCode": "誤ったコード", @@ -1267,8 +1231,6 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "名前で人を探す", - "addViewers": "{count, plural, zero {ビューアーを追加} one {ビューアーを追加} other {ビューアーを追加}}", - "addCollaborators": "{count, plural, zero {共同編集者を追加} one {共同編集者を追加} other {共同編集者を追加}}", "longPressAnEmailToVerifyEndToEndEncryption": "表示されているEメールアドレスを長押しして、暗号化を確認します。", "developerSettingsWarning": "開発者向け設定を変更してもよろしいですか?", "developerSettings": "開発者向け設定", @@ -1400,16 +1362,6 @@ "enableMachineLearningBanner": "マジック検索と顔認識のため、機械学習を有効にする", "searchDiscoverEmptySection": "処理と同期が完了すると、画像がここに表示されます", "searchPersonsEmptySection": "処理と同期が完了すると、ここに人々が表示されます", - "viewersSuccessfullyAdded": "{count, plural, =0 {{count}人のビューアーを追加} =1 {{count}人のビューアーを追加} other {{count}人のビューアーを追加}}", - "@viewersSuccessfullyAdded": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - }, - "description": "Number of viewers that were successfully added to an album." - }, "collaboratorsSuccessfullyAdded": "{count, plural, =0 {{count}人のコラボレーターを追加} =1 {{count}人のコラボレーターを追加} other {{count}人のコラボレーターを追加}}", "@collaboratorsSuccessfullyAdded": { "placeholders": { @@ -1485,15 +1437,6 @@ }, "currentlyRunning": "現在実行中", "ignored": "無視された", - "photosCount": "{count, plural, =0 {0枚の写真} =1 {1枚の写真} other {{count} 枚の写真}}", - "@photosCount": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - } - }, "file": "ファイル", "searchSectionsLengthMismatch": "セクションの長さの不一致: {snapshotLength} != {searchLength}", "@searchSectionsLengthMismatch": { diff --git a/mobile/lib/l10n/intl_lt.arb b/mobile/lib/l10n/intl_lt.arb index 00196fc1e9..cd1f6203cd 100644 --- a/mobile/lib/l10n/intl_lt.arb +++ b/mobile/lib/l10n/intl_lt.arb @@ -294,7 +294,7 @@ "shareTextReferralCode": "„Ente“ rekomendacijos kodas: {referralCode} \n\nTaikykite jį per Nustatymai → Bendrieji → Rekomendacijos, kad gautumėte {referralStorageInGB} GB nemokamai po to, kai užsiregistruosite mokamam planui.\n\nhttps://ente.io", "claimFreeStorage": "Gaukite nemokamos saugyklos", "inviteYourFriends": "Kviesti savo draugus", - "failedToFetchReferralDetails": "Nepavyksta gauti rekomendacijos informacijos. Bandykite dar kartą vėliau.", + "failedToFetchReferralDetails": "Nepavyksta gauti rekomendacijos išsamios informacijos. Bandykite dar kartą vėliau.", "referralStep1": "1. Duokite šį kodą savo draugams", "referralStep2": "2. Jie užsiregistruoja mokamą planą", "referralStep3": "3. Abu gaunate {storageInGB} GB* nemokamai", @@ -371,7 +371,7 @@ "deleteFromBoth": "Ištrinti iš abiejų", "newAlbum": "Naujas albumas", "albums": "Albumai", - "memoryCount": "{count, plural, zero{nėra prisiminimų} one{{formattedCount} prisiminimas} few{{formattedCount} prisiminimai} many{{formattedCount} prisiminimo} other{{formattedCount} prisiminimų}}", + "memoryCount": "{count, plural, =0 {nėra prisiminimų} one {{formattedCount} prisiminimas} few {{formattedCount} prisiminimai} many {{formattedCount} prisiminimo} other {{formattedCount} prisiminimų}}", "@memoryCount": { "description": "The text to display the number of memories", "type": "text", @@ -523,11 +523,23 @@ "removeDuplicates": "Šalinti dublikatus", "removeDuplicatesDesc": "Peržiūrėkite ir pašalinkite failus, kurie yra tiksliai dublikatai.", "viewLargeFiles": "Dideli failai", + "viewLargeFilesDesc": "Peržiūrėkite failus, kurie užima daugiausiai saugyklos vietos.", "noDuplicates": "✨ Dublikatų nėra", "youveNoDuplicateFilesThatCanBeCleared": "Neturite dubliuotų failų, kuriuos būtų galima išvalyti.", "success": "Sėkmė", "rateUs": "Vertinti mus", "remindToEmptyDeviceTrash": "Taip pat ištuštinkite Neseniai ištrinti iš Nustatymai -> Saugykla, kad atlaisvintumėte vietos.", + "youHaveSuccessfullyFreedUp": "Sėkmingai atlaisvinote {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": "Taip pat ištuštinkite šiukšlinę, kad gautumėte laisvos vietos.", "sparkleSuccess": "✨ Sėkmė", "duplicateFileCountWithStorageSaved": "Išvalėte {count, plural, one{{count} dubliuojantį failą} few {{count} dubliuojančius failus} many {{count} dubliuojančio failo} other{{count} dubliuojančių failų}}, išsaugodami ({storageSaved}).", @@ -546,6 +558,7 @@ } }, "familyPlans": "Šeimos planai", + "referrals": "Rekomendacijos", "notifications": "Pranešimai", "sharedPhotoNotifications": "Naujos bendrintos nuotraukos", "sharedPhotoNotificationsExplanation": "Gaukite pranešimus, kai kas nors prideda nuotrauką į bendrinamą albumą, kuriame dalyvaujate.", @@ -554,8 +567,11 @@ "security": "Saugumas", "authToViewYourRecoveryKey": "Nustatykite tapatybę, kad peržiūrėtumėte savo atkūrimo raktą", "twofactor": "Dvigubas tapatybės nustatymas", + "authToConfigureTwofactorAuthentication": "Nustatykite tapatybę, kad sukonfigūruotumėte dvigubą tapatybės nustatymą", "lockscreen": "Ekrano užraktas", + "authToChangeLockscreenSetting": "Nustatykite tapatybę, kad pakeistumėte užrakinto ekrano nustatymą", "viewActiveSessions": "Peržiūrėti aktyvius seansus", + "authToViewYourActiveSessions": "Nustatykite tapatybę, kad peržiūrėtumėte savo aktyvius seansus", "disableTwofactor": "Išjungti dvigubą tapatybės nustatymą", "confirm2FADisable": "Ar tikrai norite išjungti dvigubą tapatybės nustatymą?", "no": "Ne", @@ -591,17 +607,23 @@ "type": "text" }, "faqs": "DUK", - "renewsOn": "Prenumerata atnaujinama {endDate}", + "renewsOn": "Prenumerata pratęsiama {endDate}", "freeTrialValidTill": "Nemokamas bandomasis laikotarpis galioja iki {endDate}", "validTill": "Galioja iki {endDate}", + "addOnValidTill": "Jūsų {storageAmount} priedas galioja iki {endDate}", "playStoreFreeTrialValidTill": "Nemokama bandomoji versija galioja iki {endDate}.\nVėliau galėsite pasirinkti mokamą planą.", + "subWillBeCancelledOn": "Jūsų prenumerata bus atsisakyta {endDate}", "subscription": "Prenumerata", "paymentDetails": "Mokėjimo duomenys", "manageFamily": "Tvarkyti šeimą", "contactToManageSubscription": "Susisiekite su mumis adresu support@ente.io, kad sutvarkytumėte savo {provider} prenumeratą.", - "renewSubscription": "Atnaujinti prenumeratą", + "renewSubscription": "Pratęsti prenumeratą", "cancelSubscription": "Atsisakyti prenumeratos", + "areYouSureYouWantToRenew": "Ar tikrai norite pratęsti?", + "yesRenew": "Taip, pratęsti", + "areYouSureYouWantToCancel": "Ar tikrai norite atšaukti?", "yesCancel": "Taip, atsisakyti", + "failedToRenew": "Nepavyko pratęsti.", "failedToCancel": "Nepavyko atsisakyti", "twoMonthsFreeOnYearlyPlans": "2 mėnesiai nemokamai metiniuose planuose", "monthly": "Mėnesinis", @@ -631,11 +653,18 @@ "optionalAsShortAsYouLike": "Nebūtina, trumpai, kaip jums patinka...", "send": "Siųsti", "askCancelReason": "Jūsų prenumerata buvo atšaukta. Ar norėtumėte pasidalyti priežastimi?", + "thankYouForSubscribing": "Dėkojame, kad užsiprenumeravote!", + "yourPurchaseWasSuccessful": "Jūsų pirkimas buvo sėkmingas", + "yourPlanWasSuccessfullyUpgraded": "Jūsų planas sėkmingai pakeistas", + "yourPlanWasSuccessfullyDowngraded": "Jūsų planas sėkmingai pakeistas į žemesnį", + "yourSubscriptionWasUpdatedSuccessfully": "Jūsų prenumerata buvo sėkmingai atnaujinta", "googlePlayId": "„Google Play“ ID", "appleId": "„Apple ID“", "playstoreSubscription": "„PlayStore“ prenumerata", + "appstoreSubscription": "„App Store“ prenumerata", "subAlreadyLinkedErrMessage": "Jūsų {id} jau susietas su kita „Ente“ paskyra.\nJei norite naudoti savo {id} su šia paskyra, susisiekite su mūsų palaikymo komanda.", "visitWebToManage": "Aplankykite web.ente.io, kad tvarkytumėte savo prenumeratą", + "couldNotUpdateSubscription": "Nepavyko atnaujinti prenumeratos", "pleaseContactSupportAndWeWillBeHappyToHelp": "Susisiekite adresu support@ente.io ir mes mielai padėsime!", "paymentFailed": "Mokėjimas nepavyko", "paymentFailedTalkToProvider": "Kreipkitės į {providerName} palaikymo komandą, jei jums buvo nuskaičiuota.", @@ -655,11 +684,15 @@ "failedToVerifyPaymentStatus": "Nepavyko patvirtinti mokėjimo būsenos", "pleaseWaitForSometimeBeforeRetrying": "Palaukite kurį laiką prieš bandydami pakartotinai", "paymentFailedMessage": "Deja, jūsų mokėjimas nepavyko. Susisiekite su palaikymo komanda ir mes jums padėsime!", + "youAreOnAFamilyPlan": "Esate šeimos plane!", + "contactFamilyAdmin": "Susisiekite su {familyAdminEmail}, kad sutvarkytumėte savo prenumeratą.", "leaveFamily": "Palikti šeimą", "areYouSureThatYouWantToLeaveTheFamily": "Ar tikrai norite palikti šeimos planą?", "leave": "Palikti", "rateTheApp": "Vertinti programą", "startBackup": "Pradėti kurti atsarginę kopiją", + "noPhotosAreBeingBackedUpRightNow": "Šiuo metu nekuriamos atsarginės nuotraukų kopijos", + "preserveMore": "Išsaugoti daugiau", "allowPermTitle": "Leisti prieigą prie nuotraukų", "allowPermBody": "Iš nustatymų leiskite prieigą prie nuotraukų, kad „Ente“ galėtų rodyti ir kurti atsargines bibliotekos kopijas.", "existingUser": "Esamas naudotojas", @@ -733,20 +766,25 @@ "description": "Display text for an action which triggers a restore of item from trash", "type": "text" }, + "moveToAlbum": "Perkelti į albumą", + "unhide": "Rodyti", "unarchive": "Išarchyvuoti", + "favorite": "Pamėgti", "removeFromFavorite": "Šalinti iš mėgstamų", "shareLink": "Bendrinti nuorodą", + "createCollage": "Kurti koliažą", + "saveCollage": "Išsaugoti koliažą", "addToEnte": "Pridėti į „Ente“", "addToAlbum": "Pridėti į albumą", "delete": "Ištrinti", "hide": "Slėpti", "share": "Bendrinti", "restoreToAlbum": "Atkurti į albumą", - "moveItem": "{count, plural, one {Perkelti elementą} few {Perkelti elementus} many {Perkelti elemento} other {Perkelti elementų}}", + "moveItem": "{count, plural, one {Perkelti elementą} few {Perkelti elementus} many {Perkelti elemento} =1 {Perkelti elementą} other {Perkelti elementų}}", "@moveItem": { "description": "Page title while moving one or more items to an album" }, - "addItem": "{count, plural, one {Pridėti elementą} few {Pridėti elementus} many {Pridėti elemento} other {Pridėti elementų}}", + "addItem": "{count, plural, one {Pridėti elementą} few {Pridėti elementus} many {Pridėti elemento} =1 {Pridėti elementą} other {Pridėti elementų}}", "@addItem": { "description": "Page title while adding one or more items to album" }, @@ -783,11 +821,15 @@ "leaveAlbum": "Palikti albumą", "photosAddedByYouWillBeRemovedFromTheAlbum": "Jūsų pridėtos nuotraukos bus pašalintos iš albumo", "youDontHaveAnyArchivedItems": "Neturite jokių archyvuotų elementų.", + "toHideAPhotoOrVideo": "Kad paslėptumėte nuotrauką ar vaizdo įrašą", + "openTheItem": "• Atverkite elementą.", + "clickOnTheOverflowMenu": "• Spustelėkite ant perpildymo meniu", "nothingToSeeHere": "Čia nėra nieko, ką pamatyti. 👀", "unarchiveAlbum": "Išarchyvuoti albumą", "archiveAlbum": "Archyvuoti albumą", "searchByExamples": "• Albumų pavadinimai (pvz., „Fotoaparatas“)\n• Failų tipai (pvz., „Vaizdo įrašai“, „.gif“)\n• Metai ir mėnesiai (pvz., „2022“, „sausis“)\n• Šventės (pvz., „Kalėdos“)\n• Nuotraukų aprašymai (pvz., „#džiaugsmas“)", "noResultsFound": "Rezultatų nerasta.", + "viewAllExifData": "Peržiūrėti visus EXIF duomenis", "noExifData": "Nėra EXIF duomenų", "thisImageHasNoExifData": "Šis vaizdas neturi Exif duomenų", "exif": "EXIF", @@ -796,13 +838,27 @@ "failedToFetchOriginalForEdit": "Nepavyko gauti originalo redagavimui.", "close": "Uždaryti", "setAs": "Nustatyti kaip", + "fileSavedToGallery": "Failas išsaugotas į galeriją", + "filesSavedToGallery": "Failai išsaugoti į galeriją", + "fileFailedToSaveToGallery": "Nepavyko išsaugoti failo į galeriją", "download": "Atsisiųsti", "pressAndHoldToPlayVideo": "Paspauskite ir palaikykite, kad paleistumėte vaizdo įrašą", "pressAndHoldToPlayVideoDetailed": "Paspauskite ir palaikykite vaizdą, kad paleistumėte vaizdo įrašą", "downloadFailed": "Atsisiuntimas nepavyko.", "deduplicateFiles": "Atdubliuoti failus", + "deselectAll": "Naikinti visų pasirinkimą", "reviewDeduplicateItems": "Peržiūrėkite ir ištrinkite elementus, kurie, jūsų manymu, yra dublikatai.", "unlock": "Atrakinti", + "freeUpSpace": "Atlaisvinti vietos", + "freeUpAccessPostDelete": "Vis dar galite pasiekti {count, plural, one {jį} few {juos} many {juos} =1 {jį} other {jų}} platformoje „Ente“, kol turite aktyvų prenumeratą.", + "@freeUpAccessPostDelete": { + "placeholders": { + "count": { + "example": "1", + "type": "int" + } + } + }, "freeUpAmount": "Atlaisvinti {sizeInMBorGB}", "thisEmailIsAlreadyInUse": "Šis el. paštas jau naudojamas.", "incorrectCode": "Neteisingas kodas.", @@ -812,6 +868,7 @@ "authenticationSuccessful": "Tapatybės nustatymas sėkmingas.", "incorrectRecoveryKey": "Neteisingas atkūrimo raktas", "theRecoveryKeyYouEnteredIsIncorrect": "Įvestas atkūrimo raktas yra neteisingas.", + "twofactorAuthenticationSuccessfullyReset": "Dvigubas tapatybės nustatymas sėkmingai iš naujo nustatytas.", "pleaseVerifyTheCodeYouHaveEntered": "Patvirtinkite įvestą kodą.", "yourVerificationCodeHasExpired": "Jūsų patvirtinimo kodas nebegaliojantis.", "emailChangedTo": "El. paštas pakeistas į {newEmail}", @@ -880,6 +937,7 @@ "searchLocationEmptySection": "Grupės nuotraukos, kurios padarytos tam tikru spinduliu nuo nuotraukos", "searchPeopleEmptySection": "Pakvieskite asmenis ir čia matysite visas jų bendrinamas nuotraukas.", "searchCaptionEmptySection": "Pridėkite aprašymus, pavyzdžiui, „#kelionė“, į nuotraukos informaciją, kad greičiau jas čia rastumėte.", + "language": "Kalba", "selectLanguage": "Pasirinkite kalbą", "locationName": "Vietovės pavadinimas", "addLocation": "Pridėti vietovę", @@ -917,6 +975,7 @@ "description": "Label of confirm button to add a new custom radius to the radius selector of a location tag" }, "familyPlanPortalTitle": "Šeima", + "familyPlanOverview": "Įtraukite 5 šeimos narius į jūsų esamą planą nemokėdami papildomai.\n\nKiekvienas narys gauna savo asmeninę vietą ir negali matyti vienas kito failų, nebent jie bendrinami.\n\nŠeimos planai pasiekiami klientams, kurie turi mokamą „Ente“ prenumeratą.\n\nPrenumeruokite dabar, kad pradėtumėte!", "androidBiometricHint": "Patvirtinkite tapatybę", "@androidBiometricHint": { "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." @@ -1042,8 +1101,8 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "Greitai suraskite žmones pagal vardą", - "addViewers": "{count, plural, one {Pridėti žiūrėtoją} few {Pridėti žiūrėtojus} many {Pridėti žiūrėtojo} other {Pridėti žiūrėtojų}}", - "addCollaborators": "{count, plural, one {Pridėti bendradarbį} few {Pridėti bendradarbius} many {Pridėti bendradarbio} other {Pridėti bendradarbių}}", + "addViewers": "{count, plural, one {Pridėti žiūrėtoją} few {Pridėti žiūrėtojus} many {Pridėti žiūrėtojo} =0 {Pridėti žiūrėtojų} =1 {Pridėti žiūrėtoją} other {Pridėti žiūrėtojų}}", + "addCollaborators": "{count, plural, one {Pridėti bendradarbį} few {Pridėti bendradarbius} many {Pridėti bendradarbio} =0 {Pridėti bendradarbių} =1 {Pridėti bendradarbį} other {Pridėti bendradarbių}}", "longPressAnEmailToVerifyEndToEndEncryption": "Ilgai paspauskite el. paštą, kad patvirtintumėte visapusį šifravimą.", "developerSettingsWarning": "Ar tikrai norite modifikuoti kūrėjo nustatymus?", "developerSettings": "Kūrėjo nustatymai", @@ -1172,7 +1231,7 @@ "enableMachineLearningBanner": "Įjunkite mašininį mokymąsi magiškai paieškai ir veidų atpažinimui", "searchDiscoverEmptySection": "Vaizdai bus rodomi čia, kai bus užbaigtas apdorojimas ir sinchronizavimas.", "searchPersonsEmptySection": "Asmenys bus rodomi čia, kai bus užbaigtas apdorojimas ir sinchronizavimas.", - "viewersSuccessfullyAdded": "{count, plural, =0 {Pridėta 0 žiūrėtojų} =1 {Pridėtas 1 žiūrėtojas} other {Pridėta {count} žiūrėtojų}}", + "viewersSuccessfullyAdded": "{count, plural, one {Pridėtas {count} žiūrėtojas} few {Pridėti {count} žiūrėtojai} many {Pridėta {count} žiūrėtojo} =0 {Pridėta 0 žiūrėtojų} =1 {Pridėtas 1 žiūrėtojas} other {Pridėta {count} žiūrėtojų}}", "@viewersSuccessfullyAdded": { "placeholders": { "count": { @@ -1257,6 +1316,15 @@ }, "currentlyRunning": "šiuo metu vykdoma", "ignored": "ignoruota", + "photosCount": "{count, plural, one {{count} nuotrauka} few {{count} nuotraukos} many {{count} nuotraukos} =0 {0 nuotraukų} =1 {1 nuotrauka} other {{count} nuotraukų}}", + "@photosCount": { + "placeholders": { + "count": { + "type": "int", + "example": "2" + } + } + }, "file": "Failas", "searchSectionsLengthMismatch": "Sekcijų ilgio neatitikimas: {snapshotLength} != {searchLength}", "@searchSectionsLengthMismatch": { @@ -1468,5 +1536,6 @@ "cLFamilyPlan": "Šeimos plano ribos", "cLFamilyPlanDesc": "Dabar galite nustatyti ribas, kiek saugyklos gali naudoti jūsų šeimos nariai.", "cLBulkEdit": "Masiškai redaguokite datas", - "cLBulkEditDesc": "Dabar galite pasirinkti kelias nuotraukas ir vienu sparčiu veiksmu redaguoti visų nuotraukų datą ir laiką. Taip pat palaikomas datų perkėlimas." + "cLBulkEditDesc": "Dabar galite pasirinkti kelias nuotraukas ir vienu sparčiu veiksmu redaguoti visų nuotraukų datą ir laiką. Taip pat palaikomas datų perkėlimas.", + "curatedMemories": "Kuruoti prisiminimai" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_nl.arb b/mobile/lib/l10n/intl_nl.arb index 563e4728f3..4a5da4f20b 100644 --- a/mobile/lib/l10n/intl_nl.arb +++ b/mobile/lib/l10n/intl_nl.arb @@ -371,21 +371,6 @@ "deleteFromBoth": "Verwijder van beide", "newAlbum": "Nieuw album", "albums": "Albums", - "memoryCount": "{count, plural, zero{geen herinneringen} one{{formattedCount} herinnering} other{{formattedCount} herinneringen}}", - "@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} geselecteerd", "@selectedPhotos": { "description": "Display the number of selected photos", @@ -792,14 +777,6 @@ "share": "Delen", "unhideToAlbum": "Zichtbaar maken in album", "restoreToAlbum": "Terugzetten naar album", - "moveItem": "{count, plural, one {Bestand verplaatsen} other {Bestanden verplaatsen}}", - "@moveItem": { - "description": "Page title while moving one or more items to an album" - }, - "addItem": "{count, plural, one {Bestand toevoegen} other {Bestanden toevoegen}}", - "@addItem": { - "description": "Page title while adding one or more items to album" - }, "createOrSelectAlbum": "Maak of selecteer album", "selectAlbum": "Album selecteren", "searchByAlbumNameHint": "Albumnaam", @@ -897,7 +874,6 @@ "authToViewYourMemories": "Graag verifiëren om uw herinneringen te bekijken", "unlock": "Ontgrendelen", "freeUpSpace": "Ruimte vrijmaken", - "freeUpSpaceSaving": "{count, plural, one {Het kan verwijderd worden van het apparaat om {formattedSize} vrij te maken} other {Ze kunnen verwijderd worden van het apparaat om {formattedSize} vrij te maken}}", "filesBackedUpInAlbum": "{count, plural, one {1 bestand} other {{formattedNumber} bestanden}} in dit album is veilig geback-upt", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -928,18 +904,6 @@ } } }, - "@freeUpSpaceSaving": { - "description": "Text to tell user how much space they can free up by deleting items from the device" - }, - "freeUpAccessPostDelete": "Je hebt nog steeds toegang tot {count, plural, one {het} other {ze}} op Ente zolang je een actief abonnement hebt", - "@freeUpAccessPostDelete": { - "placeholders": { - "count": { - "example": "1", - "type": "int" - } - } - }, "freeUpAmount": "Maak {sizeInMBorGB} vrij", "thisEmailIsAlreadyInUse": "Dit e-mailadres is al in gebruik", "incorrectCode": "Onjuiste code", @@ -1267,8 +1231,6 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "Mensen snel op naam zoeken", - "addViewers": "{count, plural, one {Voeg kijker toe} other {Voeg kijkers toe}}", - "addCollaborators": "{count, plural, zero {Voeg samenwerker toe} one {Voeg samenwerker toe} other {Voeg samenwerkers toe}}", "longPressAnEmailToVerifyEndToEndEncryption": "Druk lang op een e-mail om de versleuteling te verifiëren.", "developerSettingsWarning": "Weet je zeker dat je de ontwikkelaarsinstellingen wilt wijzigen?", "developerSettings": "Ontwikkelaarsinstellingen", @@ -1400,16 +1362,6 @@ "enableMachineLearningBanner": "Schakel machine learning in voor magische zoekopdrachten en gezichtsherkenning", "searchDiscoverEmptySection": "Afbeeldingen worden hier getoond zodra verwerking en synchroniseren voltooid is", "searchPersonsEmptySection": "Personen worden hier getoond zodra verwerking en synchroniseren voltooid is", - "viewersSuccessfullyAdded": "{count, plural, =0 {0 kijkers toegevoegd} =1 {1 kijker toegevoegd} other {{count} kijkers toegevoegd}}", - "@viewersSuccessfullyAdded": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - }, - "description": "Number of viewers that were successfully added to an album." - }, "collaboratorsSuccessfullyAdded": "{count, plural, =0 {0 samenwerkers toegevoegd} =1 {1 samenwerker toegevoegd} other {{count} samenwerkers toegevoegd}}", "@collaboratorsSuccessfullyAdded": { "placeholders": { @@ -1485,15 +1437,6 @@ }, "currentlyRunning": "momenteel bezig", "ignored": "genegeerd", - "photosCount": "{count, plural, =0 {0 foto's} =1 {1 foto} other {{count} foto's}}", - "@photosCount": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - } - }, "file": "Bestand", "searchSectionsLengthMismatch": "Lengte van secties komt niet overeen: {snapshotLength} != {searchLength}", "@searchSectionsLengthMismatch": { @@ -1732,5 +1675,8 @@ "cLMemoriesDesc": "Ontdek nog eens je speciale momenten - spotlicht op je favoriete mensen, op je reizen en vakanties, op de beste plaatjes, en nog veel meer. Zet Machine Learning aan, tag jezelf en benoem je vrienden voor de beste ervaring.", "cLWidgets": "Widgets", "cLWidgetsDesc": "Widgets die zijn geïntegreerd met herinneringen zijn nu beschikbaar. Ze tonen je speciale momenten zonder de app te openen.", - "cLFamilyPlan": "Familieplan limieten" + "cLFamilyPlan": "Familieplan limieten", + "cLFamilyPlanDesc": "Je kunt nu limieten instellen voor hoeveel opslag je familieleden kunnen gebruiken.", + "cLBulkEdit": "Bulk datums wijzigen", + "cLBulkEditDesc": "Je kunt nu meerdere foto's selecteren en de datum/tijd van ze allemaal bewerken met één snelle actie. Verschuiven van datums wordt ook ondersteund." } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_no.arb b/mobile/lib/l10n/intl_no.arb index d14744d93f..d63abf8115 100644 --- a/mobile/lib/l10n/intl_no.arb +++ b/mobile/lib/l10n/intl_no.arb @@ -371,7 +371,7 @@ "deleteFromBoth": "Slett fra begge", "newAlbum": "Nytt album", "albums": "Album", - "memoryCount": "{count, plural, zero{ingen minner} one{{formattedCount} minne} other{{formattedCount} minner}}", + "memoryCount": "{count, plural, =0{ingen minner} one{{formattedCount} minne} other{{formattedCount} minner}}", "@memoryCount": { "description": "The text to display the number of memories", "type": "text", @@ -792,11 +792,11 @@ "share": "Del", "unhideToAlbum": "Gjør synlig i album", "restoreToAlbum": "Gjenopprett til album", - "moveItem": "{count, plural, one {Flytt elementet} other {Flytt elementene}}", + "moveItem": "{count, plural, =1 {Flytt elementet} other {Flytt elementene}}", "@moveItem": { "description": "Page title while moving one or more items to an album" }, - "addItem": "{count, plural, one {Legg til element} other {Legg til elementene}}", + "addItem": "{count, plural, =1 {Legg til element} other {Legg til elementene}}", "@addItem": { "description": "Page title while adding one or more items to album" }, @@ -897,7 +897,6 @@ "authToViewYourMemories": "Vennligst autentiser deg for å se minnene dine", "unlock": "Lås opp", "freeUpSpace": "Frigjør lagringsplass", - "freeUpSpaceSaving": "{count, plural, one {Det kan slettes fra enheten for å frigi {formattedSize}} other {De kan slettes fra enheten for å frigjøre {formattedSize}}}", "filesBackedUpInAlbum": "{count, plural, one {1 fil} other {{formattedNumber} filer}} I dette albumet har blitt sikkerhetskopiert", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -928,18 +927,6 @@ } } }, - "@freeUpSpaceSaving": { - "description": "Text to tell user how much space they can free up by deleting items from the device" - }, - "freeUpAccessPostDelete": "Du kan fortsatt få tilgang til {count, plural, one {det} other {dem}} på Ente så lenge du har et aktivt abonnement", - "@freeUpAccessPostDelete": { - "placeholders": { - "count": { - "example": "1", - "type": "int" - } - } - }, "freeUpAmount": "Frigjør {sizeInMBorGB}", "thisEmailIsAlreadyInUse": "Denne e-postadressen er allerede i bruk", "incorrectCode": "Feil kode", @@ -1267,8 +1254,6 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "Finn folk raskt med navn", - "addViewers": "{count, plural, zero {Legg til seer} one {Legg til seer} other {Legg til seere}}", - "addCollaborators": "{count, plural, one {Legg til samarbeidspartner} other {Legg til samarbeidspartnere}}", "longPressAnEmailToVerifyEndToEndEncryption": "Trykk og hold på en e-post for å bekrefte ende-til-ende-kryptering.", "developerSettingsWarning": "Er du sikker på at du vil endre utviklerinnstillingene?", "developerSettings": "Utviklerinnstillinger", @@ -1400,16 +1385,6 @@ "enableMachineLearningBanner": "Aktiver maskinlæring for magisk søk og ansiktsgjenkjenning", "searchDiscoverEmptySection": "Bilder vil vises her når behandlingen og synkronisering er fullført", "searchPersonsEmptySection": "Folk vil vises her når behandling og synkronisering er fullført", - "viewersSuccessfullyAdded": "{count, plural, one {}=0 {La til 0 seere} =1 {La til 1 seer} other {La til {count} seere}}", - "@viewersSuccessfullyAdded": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - }, - "description": "Number of viewers that were successfully added to an album." - }, "collaboratorsSuccessfullyAdded": "{count, plural, one {}=0 {La til 0 samarbeidspartner} =1 {La til 1 samarbeidspartner} other {Lagt til {count} samarbeidspartnere}}", "@collaboratorsSuccessfullyAdded": { "placeholders": { @@ -1485,15 +1460,6 @@ }, "currentlyRunning": "Kjører for øyeblikket", "ignored": "ignorert", - "photosCount": "{count, plural, =0 {0 bilder} =1 {1 bilde} other {{count} bilder}}", - "@photosCount": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - } - }, "file": "Fil", "searchSectionsLengthMismatch": "Uoverensstemmelse i seksjonslengde: {snapshotLength} != {searchLength}", "@searchSectionsLengthMismatch": { diff --git a/mobile/lib/l10n/intl_or.arb b/mobile/lib/l10n/intl_or.arb new file mode 100644 index 0000000000..c8494661c6 --- /dev/null +++ b/mobile/lib/l10n/intl_or.arb @@ -0,0 +1,3 @@ +{ + "@@locale ": "en" +} \ No newline at end of file diff --git a/mobile/lib/l10n/intl_pl.arb b/mobile/lib/l10n/intl_pl.arb index 1ad4a7875c..4f1c0e00bb 100644 --- a/mobile/lib/l10n/intl_pl.arb +++ b/mobile/lib/l10n/intl_pl.arb @@ -371,21 +371,6 @@ "deleteFromBoth": "Usuń z obu", "newAlbum": "Nowy album", "albums": "Albumy", - "memoryCount": "{count, plural, zero{brak wspomnień} one{{formattedCount} wspomnienie} few {{formattedCount} wspomnienia} other{{formattedCount} wspomnień}}", - "@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": "Wybrano {count}", "@selectedPhotos": { "description": "Display the number of selected photos", @@ -791,14 +776,6 @@ "share": "Udostępnij", "unhideToAlbum": "Odkryj do albumu", "restoreToAlbum": "Przywróć do albumu", - "moveItem": "{count, plural, one {Przenieś element} few {Przenieś elementy} other {Przenieś elementów}}", - "@moveItem": { - "description": "Page title while moving one or more items to an album" - }, - "addItem": "{count, plural, one {Dodaj element} few {Dodaj elementy} other {Dodaj elementów}}", - "@addItem": { - "description": "Page title while adding one or more items to album" - }, "createOrSelectAlbum": "Utwórz lub wybierz album", "selectAlbum": "Wybierz album", "searchByAlbumNameHint": "Nazwa albumu", @@ -896,7 +873,6 @@ "authToViewYourMemories": "Prosimy uwierzytelnić się, aby wyświetlić swoje wspomnienia", "unlock": "Odblokuj", "freeUpSpace": "Zwolnij miejsce", - "freeUpSpaceSaving": "{count, plural, one {Można to usunąć z urządzenia, aby zwolnić {formattedSize}} other {Można je usunąć z urządzenia, aby zwolnić {formattedSize}}}", "filesBackedUpInAlbum": "{count, plural, one {1 plikowi} other {{formattedNumber} plikom}} w tym albumie została bezpiecznie utworzona kopia zapasowa", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -927,18 +903,6 @@ } } }, - "@freeUpSpaceSaving": { - "description": "Text to tell user how much space they can free up by deleting items from the device" - }, - "freeUpAccessPostDelete": "Nadal możesz mieć dostęp {count, plural, one {do tego} other {do tych}} na Ente tak długo, jak masz aktywną subskrypcję", - "@freeUpAccessPostDelete": { - "placeholders": { - "count": { - "example": "1", - "type": "int" - } - } - }, "freeUpAmount": "Zwolnij {sizeInMBorGB}", "thisEmailIsAlreadyInUse": "Ten e-mail jest już używany", "incorrectCode": "Nieprawidłowy kod", @@ -1266,8 +1230,6 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "Szybko szukaj osób po imieniu", - "addViewers": "{count, plural, one {Dodaj widza} few {Dodaj widzów} many {Dodaj widzów} other {Dodaj widzów}}", - "addCollaborators": "{count, plural, one {Dodaj współuczestnika} few {Dodaj współuczestników} many {Dodaj współuczestników} other {Dodaj współuczestników}}", "longPressAnEmailToVerifyEndToEndEncryption": "Naciśnij i przytrzymaj e-mail, aby zweryfikować szyfrowanie end-to-end.", "developerSettingsWarning": "Czy na pewno chcesz zmodyfikować ustawienia programisty?", "developerSettings": "Ustawienia dla programistów", @@ -1399,16 +1361,6 @@ "enableMachineLearningBanner": "Włącz nauczanie maszynowe dla magicznego wyszukiwania i rozpoznawania twarzy", "searchDiscoverEmptySection": "Obrazy będą wyświetlane tutaj po zakończeniu przetwarzania i synchronizacji", "searchPersonsEmptySection": "Osoby będą wyświetlane tutaj po zakończeniu przetwarzania i synchronizacji", - "viewersSuccessfullyAdded": "{count, plural, =0 {Dodano 0 widzów} =1 {Dodano 1 widza} other {Dodano {count} widzów}}", - "@viewersSuccessfullyAdded": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - }, - "description": "Number of viewers that were successfully added to an album." - }, "collaboratorsSuccessfullyAdded": "{count, plural, =0 {Dodano 0 współuczestników} =1 {Dodano 1 współuczestnika} other {Dodano {count} współuczestników}}", "@collaboratorsSuccessfullyAdded": { "placeholders": { @@ -1484,15 +1436,6 @@ }, "currentlyRunning": "aktualnie uruchomiony", "ignored": "ignorowane", - "photosCount": "{count, plural, =0 {0 zdjęć} =1{1 zdjęcie} few {{count} zdjęcia} other{{count} zdjęć}}", - "@photosCount": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - } - }, "file": "Plik", "searchSectionsLengthMismatch": "Niezgodność długości sekcji: {snapshotLength} != {searchLength}", "@searchSectionsLengthMismatch": { diff --git a/mobile/lib/l10n/intl_pt.arb b/mobile/lib/l10n/intl_pt.arb index b7b1f3a2e1..4c8b5f3eba 100644 --- a/mobile/lib/l10n/intl_pt.arb +++ b/mobile/lib/l10n/intl_pt.arb @@ -1735,5 +1735,6 @@ "cLFamilyPlan": "Limites de planos familiares", "cLFamilyPlanDesc": "Agora você pode definir um limite de quanto armazenamento os seus entes queridos podem usar.", "cLBulkEdit": "Editar todas as datas", - "cLBulkEditDesc": "Agora você pode selecionar várias fotos, editar data e hora de todos com um só clique. Alternar datas também são suportados." + "cLBulkEditDesc": "Agora você pode selecionar várias fotos, editar data e hora de todos com um só clique. Alternar datas também são suportados.", + "curatedMemories": "Curated memories" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_pt_BR.arb b/mobile/lib/l10n/intl_pt_BR.arb new file mode 100644 index 0000000000..6bda80b476 --- /dev/null +++ b/mobile/lib/l10n/intl_pt_BR.arb @@ -0,0 +1,1741 @@ +{ + "@@locale ": "en", + "enterYourEmailAddress": "Insira seu endereço de e-mail", + "accountWelcomeBack": "Bem-vindo(a) de volta!", + "emailAlreadyRegistered": "E-mail já registrado.", + "emailNotRegistered": "E-mail não registrado.", + "email": "E-mail", + "cancel": "Cancelar", + "verify": "Verificar", + "invalidEmailAddress": "Endereço de e-mail inválido", + "enterValidEmail": "Insira um endereço de e-mail válido.", + "deleteAccount": "Excluir conta", + "askDeleteReason": "Por que você quer excluir sua conta?", + "deleteAccountFeedbackPrompt": "Lamentamos você ir. Compartilhe seu feedback para ajudar-nos a melhorar.", + "feedback": "Feedback", + "kindlyHelpUsWithThisInformation": "Ajude-nos com esta informação", + "confirmDeletePrompt": "Sim, eu quero permanentemente excluir esta conta e os dados em todos os aplicativos.", + "confirmAccountDeletion": "Confirmar exclusão da conta", + "deleteAccountPermanentlyButton": "Excluir conta permanentemente", + "yourAccountHasBeenDeleted": "Sua conta foi excluída", + "selectReason": "Diga o motivo", + "deleteReason1": "Está faltando um recurso-chave que eu preciso", + "deleteReason2": "O aplicativo ou um certo recurso não funciona da maneira que eu acredito que deveria funcionar", + "deleteReason3": "Encontrei outro serviço que considero melhor", + "deleteReason4": "Meu motivo não está listado", + "sendEmail": "Enviar e-mail", + "deleteRequestSLAText": "Sua solicitação será revisada em até 72 horas.", + "deleteEmailRequest": "Por favor, envie um e-mail a account-deletion@ente.io do seu endereço de e-mail registrado.", + "entePhotosPerm": "Ente precisa de permissão para preservar suas fotos", + "ok": "OK", + "createAccount": "Criar conta", + "createNewAccount": "Criar nova conta", + "password": "Senha", + "confirmPassword": "Confirmar senha", + "activeSessions": "Sessões ativas", + "oops": "Ops", + "somethingWentWrongPleaseTryAgain": "Algo deu errado. Tente outra vez", + "thisWillLogYouOutOfThisDevice": "Isso fará você sair deste dispositivo!", + "thisWillLogYouOutOfTheFollowingDevice": "Isso fará você sair do dispositivo a seguir:", + "terminateSession": "Sair?", + "terminate": "Encerrar", + "thisDevice": "Este dispositivo", + "recoverButton": "Recuperar", + "recoverySuccessful": "Recuperação com sucesso!", + "decrypting": "Descriptografando...", + "incorrectRecoveryKeyTitle": "Chave de recuperação incorreta", + "incorrectRecoveryKeyBody": "A chave de recuperação inserida está incorreta", + "forgotPassword": "Esqueci a senha", + "enterYourRecoveryKey": "Insira sua chave de recuperação", + "noRecoveryKey": "Sem chave de recuperação?", + "sorry": "Desculpe", + "noRecoveryKeyNoDecryption": "Devido à natureza do nosso protocolo de criptografia de ponta a ponta, seus dados não podem ser descriptografados sem sua senha ou chave de recuperação", + "verifyEmail": "Verificar e-mail", + "toResetVerifyEmail": "Para redefinir sua senha, verifique seu e-mail primeiramente.", + "checkInboxAndSpamFolder": "Verifique sua caixa de entrada (e spam) para concluir a verificação", + "tapToEnterCode": "Toque para inserir código", + "resendEmail": "Reenviar e-mail", + "weHaveSendEmailTo": "Enviamos um e-mail à {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" + } + } + }, + "setPasswordTitle": "Definir senha", + "changePasswordTitle": "Alterar senha", + "resetPasswordTitle": "Redefinir senha", + "encryptionKeys": "Chaves de criptografia", + "passwordWarning": "Nós não armazenamos esta senha, se você esquecer, nós não poderemos descriptografar seus dados", + "enterPasswordToEncrypt": "Insira uma senha que podemos usar para criptografar seus dados", + "enterNewPasswordToEncrypt": "Insira uma senha nova para criptografar seus dados", + "weakStrength": "Fraca", + "strongStrength": "Forte", + "moderateStrength": "Moderado", + "passwordStrength": "Força da senha: {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}" + }, + "passwordChangedSuccessfully": "Senha alterada com sucesso", + "generatingEncryptionKeys": "Gerando chaves de criptografia...", + "pleaseWait": "Aguarde...", + "continueLabel": "Continuar", + "insecureDevice": "Dispositivo inseguro", + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Desculpe, não foi possível gerar chaves seguras neste dispositivo.\n\ninicie sessão com um dispositivo diferente.", + "howItWorks": "Como funciona", + "encryption": "Criptografia", + "ackPasswordLostWarning": "Eu entendo que se eu perder minha senha, posso perder meus dados, já que meus dados são criptografados de ponta a ponta.", + "privacyPolicyTitle": "Política de Privacidade", + "termsOfServicesTitle": "Termos", + "signUpTerms": "Eu concordo com os termos de serviço e a política de privacidade", + "logInLabel": "Entrar", + "loginTerms": "Ao clicar em entrar, eu concordo com os termos de serviço e a política de privacidade", + "changeEmail": "Alterar e-mail", + "enterYourPassword": "Insira sua senha", + "welcomeBack": "Bem-vindo(a) de volta!", + "contactSupport": "Contatar suporte", + "incorrectPasswordTitle": "Senha incorreta", + "pleaseTryAgain": "Tente novamente", + "recreatePasswordTitle": "Redefinir senha", + "useRecoveryKey": "Usar chave de recuperação", + "recreatePasswordBody": "O dispositivo atual não é poderoso o suficiente para verificar sua senha, no entanto, nós podemos regenerar numa maneira que funciona em todos os dispositivos.\n\nEntre usando a chave de recuperação e regenere sua senha (você pode usar a mesma novamente se desejar).", + "verifyPassword": "Verificar senha", + "recoveryKey": "Chave de recuperação", + "recoveryKeyOnForgotPassword": "Caso você esqueça sua senha, a única maneira de recuperar seus dados é com esta chave.", + "recoveryKeySaveDescription": "Não armazenamos esta chave, salve esta chave de 24 palavras em um lugar seguro.", + "doThisLater": "Fazer isso depois", + "saveKey": "Salvar chave", + "recoveryKeyCopiedToClipboard": "Chave de recuperação copiada para a área de transferência", + "recoverAccount": "Recuperar conta", + "recover": "Recuperar", + "dropSupportEmail": "Envie um e-mail para {supportEmail} a partir do seu endereço de e-mail registrado", + "@dropSupportEmail": { + "placeholders": { + "supportEmail": { + "description": "The support email address", + "type": "String", + "example": "support@ente.io" + } + } + }, + "twofactorSetup": "Configuração de dois fatores", + "enterCode": "Insira o código", + "scanCode": "Escanear código", + "codeCopiedToClipboard": "Código copiado para a área de transferência", + "copypasteThisCodentoYourAuthenticatorApp": "Copie e cole este código\npara o aplicativo autenticador", + "tapToCopy": "toque para copiar", + "scanThisBarcodeWithnyourAuthenticatorApp": "Escaneie este código de barras com\no aplicativo autenticador", + "enterThe6digitCodeFromnyourAuthenticatorApp": "Digite o código de 6 dígitos do\naplicativo de autenticador", + "confirm": "Confirmar", + "setupComplete": "Configuração concluída", + "saveYourRecoveryKeyIfYouHaventAlready": "Salve sua chave de recuperação, se você ainda não fez", + "thisCanBeUsedToRecoverYourAccountIfYou": "Isso pode ser usado para recuperar sua conta se você perder seu segundo fator", + "twofactorAuthenticationPageTitle": "Autenticação de dois fatores", + "lostDevice": "Perdeu o dispositivo?", + "verifyingRecoveryKey": "Verificando chave de recuperação...", + "recoveryKeyVerified": "Chave de recuperação verificada", + "recoveryKeySuccessBody": "Ótimo! Sua chave de recuperação é válida. Obrigada por verificar.\n\nLembre-se de manter sua chave de recuperação copiada com segurança.", + "invalidRecoveryKey": "A chave de recuperação que você inseriu não é válida. Certifique-se de conter 24 caracteres, e verifique a ortografia de cada um deles.\n\nSe você inseriu um código de recuperação mais antigo, verifique se ele tem 64 caracteres e verifique cada um deles.", + "invalidKey": "Chave inválida", + "tryAgain": "Tente novamente", + "viewRecoveryKey": "Ver chave de recuperação", + "confirmRecoveryKey": "Confirmar chave de recuperação", + "recoveryKeyVerifyReason": "Sua chave de recuperação é a única maneira de recuperar suas fotos se você esqueceu sua senha. Você pode encontrar sua chave de recuperação em Opções > Conta.\n\nInsira sua chave de recuperação aqui para verificar se você a salvou corretamente.", + "confirmYourRecoveryKey": "Confirme sua chave de recuperação", + "addViewer": "Adicionar visualizador", + "addCollaborator": "Adicionar colaborador", + "addANewEmail": "Adicionar um novo e-mail", + "orPickAnExistingOne": "Ou escolha um existente", + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": "Colaboradores podem adicionar fotos e vídeos ao álbum compartilhado.", + "enterEmail": "Inserir e-mail", + "albumOwner": "Proprietário", + "@albumOwner": { + "description": "Role of the album owner" + }, + "you": "Você", + "collaborator": "Colaborador", + "addMore": "Adicionar mais", + "@addMore": { + "description": "Button text to add more collaborators/viewers" + }, + "viewer": "Visualizador", + "remove": "Remover", + "removeParticipant": "Remover participante", + "@removeParticipant": { + "description": "menuSectionTitle for removing a participant" + }, + "manage": "Gerenciar", + "addedAs": "Adicionado como", + "changePermissions": "Alterar permissões?", + "yesConvertToViewer": "Sim, converter para visualizador", + "cannotAddMorePhotosAfterBecomingViewer": "{user} Não poderá adicionar mais fotos a este álbum\n\nEles ainda conseguirão remover fotos existentes adicionadas por eles", + "allowAddingPhotos": "Permitir adicionar fotos", + "@allowAddingPhotos": { + "description": "Switch button to enable uploading photos to a public link" + }, + "allowAddPhotosDescription": "Permitir que as pessoas com link também adicionem fotos ao álbum compartilhado.", + "passwordLock": "Bloqueio por senha", + "canNotOpenTitle": "Não pôde abrir este álbum", + "canNotOpenBody": "Desculpe, este álbum não pode ser aberto no aplicativo.", + "disableDownloadWarningTitle": "Por favor, saiba que", + "disableDownloadWarningBody": "Os visualizadores podem fazer capturas de tela ou salvar uma cópia de suas fotos usando ferramentas externas", + "allowDownloads": "Permitir downloads", + "linkDeviceLimit": "Limite do dispositivo", + "noDeviceLimit": "Nenhum", + "@noDeviceLimit": { + "description": "Text to indicate that there is limit on number of devices" + }, + "linkExpiry": "Expiração do link", + "linkExpired": "Expirado", + "linkEnabled": "Ativado", + "linkNeverExpires": "Nunca", + "expiredLinkInfo": "O link expirou. Selecione um novo tempo de expiração ou desative a expiração do link.", + "setAPassword": "Definir senha", + "lockButtonLabel": "Bloquear", + "enterPassword": "Inserir senha", + "removeLink": "Remover link", + "manageLink": "Gerenciar link", + "linkExpiresOn": "O link expirará em {expiryTime}", + "albumUpdated": "Álbum atualizado", + "never": "Nunca", + "custom": "Personalizado", + "@custom": { + "description": "Label for setting custom value for link expiry" + }, + "after1Hour": "Após 1 hora", + "after1Day": "Após 1 dia", + "after1Week": "Após 1 semana", + "after1Month": "Após 1 mês", + "after1Year": "Após 1 ano", + "manageParticipants": "Gerenciar", + "albumParticipantsCount": "{count, plural, =0 {Nenhum participante} =1 {1 participante} other {{count} participantes}}", + "@albumParticipantsCount": { + "placeholders": { + "count": { + "type": "int", + "example": "5" + } + }, + "description": "Number of participants in an album, including the album owner." + }, + "collabLinkSectionDescription": "Crie um link para permitir que as pessoas adicionem e vejam fotos no seu álbum compartilhado sem a necessidade do aplicativo ou uma conta Ente. Ótimo para colecionar fotos de eventos.", + "collectPhotos": "Coletar fotos", + "collaborativeLink": "Link colaborativo", + "shareWithNonenteUsers": "Compartilhar com usuários não ente", + "createPublicLink": "Criar link público", + "sendLink": "Enviar link", + "copyLink": "Copiar link", + "linkHasExpired": "O link expirou", + "publicLinkEnabled": "Link público ativo", + "shareALink": "Compartilhar link", + "sharedAlbumSectionDescription": "Criar álbuns compartilhados e colaborativos com outros usuários Ente, incluindo usuários em planos gratuitos.", + "shareWithPeopleSectionTitle": "{numberOfPeople, plural, =0 {Compartilhe com pessoas específicas} =1 {Compartilhado com 1 pessoa} other {Compartilhado com {numberOfPeople} pessoas}}", + "@shareWithPeopleSectionTitle": { + "placeholders": { + "numberOfPeople": { + "type": "int", + "example": "2" + } + } + }, + "thisIsYourVerificationId": "Este é o seu ID de verificação", + "someoneSharingAlbumsWithYouShouldSeeTheSameId": "Alguém compartilhando álbuns com você deve ver o mesmo ID no dispositivo.", + "howToViewShareeVerificationID": "Peça-os para manterem pressionado no endereço de e-mail na tela de opções, e verifique-se os IDs de ambos os dispositivos correspondem.", + "thisIsPersonVerificationId": "Este é o ID de verificação de {email}", + "@thisIsPersonVerificationId": { + "placeholders": { + "email": { + "type": "String", + "example": "someone@ente.io" + } + } + }, + "verificationId": "ID de verificação", + "verifyEmailID": "Verificar {email}", + "emailNoEnteAccount": "{email} não tem uma conta Ente.\n\nEnvie-os um convite para compartilhar fotos.", + "shareMyVerificationID": "Aqui está meu ID de verificação para o ente.io: {verificationID}", + "shareTextConfirmOthersVerificationID": "Ei, você pode confirmar se este ID de verificação do ente.io é seu?: {verificationID}", + "somethingWentWrong": "Algo deu errado", + "sendInvite": "Enviar convite", + "shareTextRecommendUsingEnte": "Baixe o Ente para que nós possamos compartilhar com facilidade fotos e vídeos de qualidade original\n\nhttps://ente.io", + "done": "Concluído", + "applyCodeTitle": "Aplicar código", + "enterCodeDescription": "Insira o código fornecido pelo seu amigo para reivindicar o armazenamento grátis para os dois", + "apply": "Aplicar", + "failedToApplyCode": "Falhou ao aplicar código", + "enterReferralCode": "Inserir código de referência", + "codeAppliedPageTitle": "Código aplicado", + "changeYourReferralCode": "Alterar código de referência", + "change": "Alterar", + "unavailableReferralCode": "Desculpe, este código está indisponível.", + "codeChangeLimitReached": "Desculpe, você atingiu o limite de mudanças de código.", + "onlyFamilyAdminCanChangeCode": "Entre em contato com {familyAdminEmail} para alterar o seu código.", + "storageInGB": "{storageAmountInGB} GB", + "claimed": "Reivindicado", + "@claimed": { + "description": "Used to indicate storage claimed, like 10GB Claimed" + }, + "details": "Detalhes", + "claimMore": "Reivindique mais!", + "theyAlsoGetXGb": "Eles também recebem {storageAmountInGB} GB", + "freeStorageOnReferralSuccess": "{storageAmountInGB} GB cada vez que alguém se inscrever a um plano pago e aplicar seu código", + "shareTextReferralCode": "Código de referência do Ente: {referralCode} \n\nAplique-o em Configurações → Geral → Referências para obter {referralStorageInGB} GB grátis após a sua inscrição num plano pago\n\nhttps://ente.io", + "claimFreeStorage": "Reivindique armaz. grátis", + "inviteYourFriends": "Convide seus amigos", + "failedToFetchReferralDetails": "Não foi possível buscar os detalhes de referência. Tente novamente mais tarde.", + "referralStep1": "1. Envie este código aos seus amigos", + "referralStep2": "2. Eles então se inscrevem num plano pago", + "referralStep3": "3. Ambos os dois ganham {storageInGB} GB* grátis", + "referralsAreCurrentlyPaused": "As referências estão atualmente pausadas", + "youCanAtMaxDoubleYourStorage": "* Você pode duplicar seu armazenamento ao máximo", + "claimedStorageSoFar": "{isFamilyMember, select,true {Sua família reinvidicou {storageAmountInGb} GB até então}false {Você reinvindicou {storageAmountInGb} GB até então}other {Você reinvindicou {storageAmountInGb} GB até então!}}", + "@claimedStorageSoFar": { + "placeholders": { + "isFamilyMember": { + "type": "String", + "example": "true" + }, + "storageAmountInGb": { + "type": "int", + "example": "10" + } + } + }, + "faq": "Perguntas frequentes", + "help": "Ajuda", + "oopsSomethingWentWrong": "Ops, algo deu errado", + "peopleUsingYourCode": "Pessoas que usam seu código", + "eligible": "elegível", + "total": "total", + "codeUsedByYou": "Código usado por você", + "freeStorageClaimed": "Armaz. grátis reivindicado", + "freeStorageUsable": "Armazenamento disponível", + "usableReferralStorageInfo": "O armazenamento disponível é limitado pelo seu plano atual. O excesso de armazenamento reivindicado tornará automaticamente útil quando você atualizar seu plano.", + "removeFromAlbumTitle": "Remover do álbum?", + "removeFromAlbum": "Remover do álbum", + "itemsWillBeRemovedFromAlbum": "Os itens selecionados serão removidos deste álbum", + "removeShareItemsWarning": "Alguns dos itens que você está removendo foram adicionados por outras pessoas, e você perderá o acesso a eles", + "addingToFavorites": "Adicionando aos favoritos...", + "removingFromFavorites": "Removendo dos favoritos...", + "sorryCouldNotAddToFavorites": "Desculpe, não foi possível adicionar aos favoritos!", + "sorryCouldNotRemoveFromFavorites": "Desculpe, não foi possível remover dos favoritos!", + "subscribeToEnableSharing": "Você precisa de uma inscrição paga ativa para ativar o compartilhamento.", + "subscribe": "Inscrever-se", + "canOnlyRemoveFilesOwnedByYou": "Só pode remover arquivos de sua propriedade", + "deleteSharedAlbum": "Excluir álbum compartilhado?", + "deleteAlbum": "Excluir álbum", + "deleteAlbumDialog": "Também excluir as fotos (e vídeos) presentes neste álbum de todos os outros álbuns que eles fazem parte?", + "deleteSharedAlbumDialogBody": "O álbum será apagado para todos\n\nVocê perderá o acesso a fotos compartilhadas neste álbum que pertencem aos outros", + "yesRemove": "Sim, excluir", + "creatingLink": "Criando link...", + "removeWithQuestionMark": "Remover?", + "removeParticipantBody": "{userEmail} será removido do álbum compartilhado\n\nQualquer foto adicionada por ele será removida.", + "keepPhotos": "Manter fotos", + "deletePhotos": "Excluir fotos", + "inviteToEnte": "Convidar ao Ente", + "removePublicLink": "Remover link público", + "disableLinkMessage": "Isso removerá o link público para acessar \"{albumName}\".", + "sharing": "Compartilhando...", + "youCannotShareWithYourself": "Não é possível compartilhar consigo mesmo", + "archive": "Arquive", + "createAlbumActionHint": "Pressione para selecionar fotos e clique em + para criar um álbum", + "importing": "Importando....", + "failedToLoadAlbums": "Falhou ao carregar álbuns", + "hidden": "Oculto", + "authToViewYourHiddenFiles": "Autentique-se para visualizar seus arquivos ocultos", + "authToViewTrashedFiles": "Autentique-se para ver seus arquivos excluídos", + "trash": "Lixeira", + "uncategorized": "Sem categoria", + "videoSmallCase": "vídeo", + "photoSmallCase": "foto", + "singleFileDeleteHighlight": "Ele será excluído de todos os álbuns.", + "singleFileInBothLocalAndRemote": "Este {fileType} está no Ente e em seu dispositivo.", + "singleFileInRemoteOnly": "Este {fileType} será excluído do Ente.", + "singleFileDeleteFromDevice": "Este {fileType} será excluído do dispositivo.", + "deleteFromEnte": "Excluir do Ente", + "yesDelete": "Sim, excluir", + "movedToTrash": "Movido para a lixeira", + "deleteFromDevice": "Excluir do dispositivo", + "deleteFromBoth": "Excluir de ambos", + "newAlbum": "Novo álbum", + "albums": "Álbuns", + "memoryCount": "{count, plural, =0{sem memórias} one{{formattedCount} memória} other{{formattedCount} memórias}}", + "@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} selecionado(s)", + "@selectedPhotos": { + "description": "Display the number of selected photos", + "type": "text", + "placeholders": { + "count": { + "example": "5", + "type": "int" + } + } + }, + "selectedPhotosWithYours": "{count} selecionado(s) ({yourCount} seus)", + "@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": "Avançado", + "@advancedSettings": { + "description": "The text to display in the advanced settings section" + }, + "photoGridSize": "Tamanho da grade de fotos", + "manageDeviceStorage": "Gerenciar cache do dispositivo", + "manageDeviceStorageDesc": "Reveja e limpe o armazenamento de cache local.", + "machineLearning": "Aprendizado automático", + "mlConsent": "Ativar o aprendizado automático", + "mlConsentTitle": "Ativar aprendizado automático?", + "mlConsentDescription": "Se ativar o aprendizado automático, Ente extrairá informações de geometria facial dos arquivos, incluindo aqueles compartilhados consigo.\n\nIsso acontecerá em seu dispositivo, e qualquer informação biométrica gerada será criptografada de ponta a ponta.", + "mlConsentPrivacy": "Clique aqui para mais detalhes sobre este recurso na política de privacidade", + "mlConsentConfirmation": "Concordo e desejo ativá-lo", + "magicSearch": "Busca mágica", + "discover": "Explorar", + "@discover": { + "description": "The text to display for the discover section under which we show receipts, screenshots, sunsets, greenery, etc." + }, + "discover_identity": "Identidade", + "discover_screenshots": "Capturas de tela", + "discover_receipts": "Recibos", + "discover_notes": "Notas", + "discover_memes": "Memes", + "discover_visiting_cards": "Cartões de visita", + "discover_babies": "Bebês", + "discover_pets": "Animais de estimação", + "discover_selfies": "Selfies", + "discover_wallpapers": "Papéis de parede", + "discover_food": "Comida", + "discover_celebrations": "Comemorações", + "discover_sunset": "Pôr do sol", + "discover_hills": "Colinas", + "discover_greenery": "Vegetação", + "mlIndexingDescription": "Saiba que o aprendizado automático afetará a bateria do dispositivo negativamente até todos os itens serem indexados. Utilize a versão para computadores para melhor indexação, todos os resultados se auto-sincronizaram.", + "loadingModel": "Baixando modelos...", + "waitingForWifi": "Aguardando Wi-Fi...", + "status": "Estado", + "indexedItems": "Itens indexados", + "pendingItems": "Itens pendentes", + "clearIndexes": "Limpar índices", + "selectFoldersForBackup": "Selecionar pastas para copiar com segurança", + "selectedFoldersWillBeEncryptedAndBackedUp": "As pastas selecionadas serão criptografadas e armazenadas em copiadas com segurança", + "unselectAll": "Desmarcar tudo", + "selectAll": "Selecionar tudo", + "skip": "Pular", + "updatingFolderSelection": "Atualizando seleção de pasta...", + "itemCount": "{count, plural, one{{count} item} other{{count} itens}}", + "deleteItemCount": "{count, plural, =1 {Excluir {count} item} other {Excluir {count} itens}}", + "duplicateItemsGroup": "{count} arquivos, {formattedSize} cada", + "@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": "Mostrar memórias", + "yearsAgo": "{count, plural, one{{count} ano atrás} other{{count} anos atrás}}", + "backupSettings": "Opções de cópia de segurança", + "backupStatus": "Status da cópia de segurança", + "backupStatusDescription": "Os itens que foram salvos com segurança aparecerão aqui", + "backupOverMobileData": "Salvamento com segurança usando dados móveis", + "backupVideos": "Cópia de segurança de vídeos", + "disableAutoLock": "Desativar bloqueio automático", + "deviceLockExplanation": "Desativa o bloqueio de tela quando o Ente está de fundo e têm uma cópia de segurança sendo feita. Isso normalmente não é necessário, no entanto, ajuda a envios grandes e importações iniciais de bibliotecas maiores concluírem mais rápido.", + "about": "Sobre", + "weAreOpenSource": "Nós somos de código aberto!", + "privacy": "Privacidade", + "terms": "Termos", + "checkForUpdates": "Buscar atualizações", + "checkStatus": "Verificar estado", + "checking": "Verificando...", + "youAreOnTheLatestVersion": "Você está na versão mais recente", + "account": "Conta", + "manageSubscription": "Gerenciar assinatura", + "authToChangeYourEmail": "Por favor, autentique-se para alterar o seu e-mail", + "changePassword": "Alterar senha", + "authToChangeYourPassword": "Autentique para alterar sua senha", + "emailVerificationToggle": "Verificação por e-mail", + "authToChangeEmailVerificationSetting": "Autentique-se para alterar o e-mail de verificação", + "exportYourData": "Exportar dados", + "logout": "Encerrar sessão", + "authToInitiateAccountDeletion": "Autentique para iniciar a exclusão de conta", + "areYouSureYouWantToLogout": "Você tem certeza que quer encerrar sessão?", + "yesLogout": "Sim, encerrar sessão", + "aNewVersionOfEnteIsAvailable": "Uma nova versão do Ente está disponível.", + "update": "Atualizar", + "installManually": "Instalar manualmente", + "criticalUpdateAvailable": "Atualização crítica disponível", + "updateAvailable": "Atualização disponível", + "ignoreUpdate": "Ignorar", + "downloading": "Baixando...", + "cannotDeleteSharedFiles": "Não é possível excluir arquivos compartilhados", + "theDownloadCouldNotBeCompleted": "A instalação não pôde ser concluída", + "retry": "Tentar novamente", + "backedUpFolders": "Pastas copiadas com segurança", + "backup": "Cópia de segurança", + "freeUpDeviceSpace": "Liberar espaço no dispositivo", + "freeUpDeviceSpaceDesc": "Economize espaço em seu dispositivo por limpar arquivos já salvos com segurança.", + "allClear": "✨ Tudo limpo", + "noDeviceThatCanBeDeleted": "Você não tem arquivos neste dispositivo que possam ser excluídos", + "removeDuplicates": "Excluir duplicatas", + "removeDuplicatesDesc": "Revise e remova arquivos que são duplicatas exatas.", + "viewLargeFiles": "Arquivos grandes", + "viewLargeFilesDesc": "Ver arquivos que consumem a maior parte do armazenamento.", + "noDuplicates": "✨ Sem duplicatas", + "youveNoDuplicateFilesThatCanBeCleared": "Você não possui nenhum arquivo duplicado que possa ser excluído", + "success": "Sucesso", + "rateUs": "Avaliar", + "remindToEmptyDeviceTrash": "Também vazio \"Excluído recentemente\" de \"Opções\" -> \"Armazenamento\" para reivindicar espaço liberado", + "youHaveSuccessfullyFreedUp": "Você liberou {storageSaved} com sucesso!", + "@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": "Também esvazie sua \"Lixeira\" para reivindicar o espaço liberado", + "sparkleSuccess": "✨ Sucesso", + "duplicateFileCountWithStorageSaved": "Você limpou {count, plural, one{{count} arquivo duplicado} other{{count} arquivos duplicados}}, salvando ({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": "Planos familiares", + "referrals": "Referências", + "notifications": "Notificações", + "sharedPhotoNotifications": "Novas fotos compartilhadas", + "sharedPhotoNotificationsExplanation": "Receber notificações quando alguém adicionar uma foto a um álbum compartilhado que você faz parte", + "advanced": "Avançado", + "general": "Geral", + "security": "Segurança", + "authToViewYourRecoveryKey": "Autentique para ver sua chave de recuperação", + "twofactor": "Dois fatores", + "authToConfigureTwofactorAuthentication": "Autentique para configurar a autenticação de dois fatores", + "lockscreen": "Tela de bloqueio", + "authToChangeLockscreenSetting": "Autentique para alterar a configuração da tela de bloqueio", + "viewActiveSessions": "Ver sessões ativas", + "authToViewYourActiveSessions": "Autentique para ver as sessões ativas", + "disableTwofactor": "Desativar autenticação de dois fatores", + "confirm2FADisable": "Você tem certeza que queira desativar a autenticação de dois fatores?", + "no": "Não", + "yes": "Sim", + "social": "Redes sociais", + "rateUsOnStore": "Avalie-nos no {storeName}", + "blog": "Blog", + "merchandise": "Produtos", + "twitter": "Twitter/X", + "mastodon": "Mastodon", + "matrix": "Matrix", + "discord": "Discord", + "reddit": "Reddit", + "yourStorageDetailsCouldNotBeFetched": "Seus detalhes de armazenamento não puderam ser obtidos", + "reportABug": "Informar um erro", + "reportBug": "Informar erro", + "suggestFeatures": "Sugerir recurso", + "support": "Suporte", + "theme": "Tema", + "lightTheme": "Claro", + "darkTheme": "Escuro", + "systemTheme": "Sistema", + "freeTrial": "Avaliação grátis", + "selectYourPlan": "Selecione seu plano", + "enteSubscriptionPitch": "O Ente preserva suas memórias, então eles sempre estão disponíveis para você, mesmo se você perder o dispositivo.", + "enteSubscriptionShareWithFamily": "Sua família também poderá ser adicionada ao seu plano.", + "currentUsageIs": "O uso atual é ", + "@currentUsageIs": { + "description": "This text is followed by storage usage", + "examples": { + "0": "Current usage is 1.2 GB" + }, + "type": "text" + }, + "faqs": "Perguntas frequentes", + "renewsOn": "Renovação de assinatura em {endDate}", + "freeTrialValidTill": "A avaliação grátis acaba em {endDate}", + "validTill": "Válido até {endDate}", + "addOnValidTill": "Seu complemento {storageAmount} é válido até {endDate}", + "playStoreFreeTrialValidTill": "Avaliação grátis válida até {endDate}.\nVocê pode alterar para um plano pago depois.", + "subWillBeCancelledOn": "Sua assinatura será cancelada em {endDate}", + "subscription": "Assinatura", + "paymentDetails": "Detalhes de pagamento", + "manageFamily": "Gerenciar família", + "contactToManageSubscription": "Entre em contato conosco em support@ente.io para gerenciar sua assinatura {provider}.", + "renewSubscription": "Renovar assinatura", + "cancelSubscription": "Cancelar assinatura", + "areYouSureYouWantToRenew": "Deseja renovar?", + "yesRenew": "Sim", + "areYouSureYouWantToCancel": "Deseja cancelar?", + "yesCancel": "Sim", + "failedToRenew": "Falhou ao renovar", + "failedToCancel": "Falhou ao cancelar", + "twoMonthsFreeOnYearlyPlans": "2 meses grátis em planos anuais", + "monthly": "Mensal", + "@monthly": { + "description": "The text to display for monthly plans", + "type": "text" + }, + "yearly": "Anual", + "@yearly": { + "description": "The text to display for yearly plans", + "type": "text" + }, + "confirmPlanChange": "Confirmar mudança de plano", + "areYouSureYouWantToChangeYourPlan": "Deseja trocar de plano?", + "youCannotDowngradeToThisPlan": "Você não pode rebaixar para este plano", + "cancelOtherSubscription": "Primeiramente cancele sua assinatura existente do {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": "Opcional, tão curto como quiser...", + "send": "Enviar", + "askCancelReason": "Sua assinatura foi cancelada. Deseja compartilhar o motivo?", + "thankYouForSubscribing": "Obrigado por assinar!", + "yourPurchaseWasSuccessful": "Sua compra foi efetuada com sucesso", + "yourPlanWasSuccessfullyUpgraded": "Seu plano foi atualizado com sucesso", + "yourPlanWasSuccessfullyDowngraded": "Seu plano foi rebaixado com sucesso", + "yourSubscriptionWasUpdatedSuccessfully": "Sua assinatura foi atualizada com sucesso", + "googlePlayId": "ID do Google Play", + "appleId": "ID da Apple", + "playstoreSubscription": "Assinatura da PlayStore", + "appstoreSubscription": "Assinatura da AppStore", + "subAlreadyLinkedErrMessage": "Seu {id} já está vinculado a outra conta Ente. Se você gostaria de usar seu {id} com esta conta, entre em contato conosco\"", + "visitWebToManage": "Visite o web.ente.io para gerenciar sua assinatura", + "couldNotUpdateSubscription": "Não foi possível atualizar a assinatura", + "pleaseContactSupportAndWeWillBeHappyToHelp": "Entre em contato com support@ente.io e nós ficaremos felizes em ajudar!", + "paymentFailed": "O pagamento falhou", + "paymentFailedTalkToProvider": "Fale com o suporte {providerName} se você foi cobrado", + "@paymentFailedTalkToProvider": { + "description": "The text to display when the payment failed", + "type": "text", + "placeholders": { + "providerName": { + "example": "AppStore|PlayStore", + "type": "String" + } + } + }, + "continueOnFreeTrial": "Continuar com a avaliação grátis", + "areYouSureYouWantToExit": "Tem certeza de que queira sair?", + "thankYou": "Obrigado", + "failedToVerifyPaymentStatus": "Falhou ao verificar estado do pagamento", + "pleaseWaitForSometimeBeforeRetrying": "Por favor, aguarde mais algum tempo antes de tentar novamente", + "paymentFailedMessage": "Infelizmente o pagamento falhou. Entre em contato com o suporte e nós ajudaremos você!", + "youAreOnAFamilyPlan": "Você está em um plano familiar!", + "contactFamilyAdmin": "Entre em contato com {familyAdminEmail} para gerenciar sua assinatura", + "leaveFamily": "Sair do plano familiar", + "areYouSureThatYouWantToLeaveTheFamily": "Você tem certeza que queira sair do plano familiar?", + "leave": "Sair", + "rateTheApp": "Avalie o aplicativo", + "startBackup": "Iniciar cópia de segurança", + "noPhotosAreBeingBackedUpRightNow": "No momento não há fotos sendo copiadas com segurança", + "preserveMore": "Preservar mais", + "grantFullAccessPrompt": "Permita o acesso a todas as fotos nas opções do aplicativo", + "allowPermTitle": "Permita acesso às Fotos", + "allowPermBody": "Permita o acesso a suas fotos das Configurações para que Ente possa exibir e copiar com segurança sua biblioteca.", + "openSettings": "Abrir opções", + "selectMorePhotos": "Selecionar mais fotos", + "existingUser": "Usuário existente", + "privateBackups": "Cópias privadas", + "forYourMemories": "para suas memórias", + "endtoendEncryptedByDefault": "Criptografado de ponta a ponta por padrão", + "safelyStored": "Armazenado com segurança", + "atAFalloutShelter": "em um abrigo avançado", + "designedToOutlive": "Feito para ter longevidade", + "available": "Disponível", + "everywhere": "em todas as partes", + "androidIosWebDesktop": "Android, iOS, Web, Computador", + "mobileWebDesktop": "Celular, Web, Computador", + "newToEnte": "Novo no Ente", + "pleaseLoginAgain": "Registre-se novamente", + "autoLogoutMessage": "Devido ao ocorrido de erros técnicos, você foi desconectado. Pedimos desculpas pela inconveniência.", + "yourSubscriptionHasExpired": "A sua assinatura expirou", + "storageLimitExceeded": "Limite de armazenamento excedido", + "upgrade": "Atualizar", + "raiseTicket": "Abrir ticket", + "@raiseTicket": { + "description": "Button text for raising a support tickets in case of unhandled errors during backup", + "type": "text" + }, + "backupFailed": "Falhou ao copiar com segurança", + "sorryBackupFailedDesc": "Desculpe, não podemos fazer cópia de segurança deste arquivo no momento, nós tentaremos mais tarde.", + "couldNotBackUpTryLater": "Nós não podemos copiar com segurança seus dados.\nNós tentaremos novamente mais tarde.", + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": "Ente pode criptografar e preservar arquivos apenas se você conceder acesso a eles", + "pleaseGrantPermissions": "Por favor, conceda as permissões", + "grantPermission": "Conceder permissões", + "privateSharing": "Compartilha privada", + "shareOnlyWithThePeopleYouWant": "Compartilhar apenas com as pessoas que você quiser", + "usePublicLinksForPeopleNotOnEnte": "Usar links públicos para pessoas que não estão no Ente", + "allowPeopleToAddPhotos": "Permitir que pessoas adicionem fotos", + "shareAnAlbumNow": "Compartilhar um álbum agora", + "collectEventPhotos": "Coletar fotos de evento", + "sessionExpired": "Sessão expirada", + "loggingOut": "Desconectando...", + "@onDevice": { + "description": "The text displayed above folders/albums stored on device", + "type": "text" + }, + "onDevice": "No dispositivo", + "@onEnte": { + "description": "The text displayed above albums backed up to Ente", + "type": "text" + }, + "onEnte": "No ente", + "name": "Nome", + "newest": "Mais recente", + "lastUpdated": "Última atualização", + "deleteEmptyAlbums": "Excluir álbuns vazios", + "deleteEmptyAlbumsWithQuestionMark": "Excluir álbuns vazios?", + "deleteAlbumsDialogBody": "Isso excluirá todos os álbuns vazios. Isso é útil quando você quiser reduzir a desordem no seu álbum.", + "deleteProgress": "Excluindo {currentlyDeleting} / {totalCount}", + "genericProgress": "Processando {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": "Excluir permanentemente", + "canOnlyCreateLinkForFilesOwnedByYou": "Só é possível criar um link para arquivos pertencentes a você", + "publicLinkCreated": "Link público criado", + "youCanManageYourLinksInTheShareTab": "Você pode gerenciar seus links na aba de compartilhamento.", + "linkCopiedToClipboard": "Link copiado para a área de transferência", + "restore": "Restaurar", + "@restore": { + "description": "Display text for an action which triggers a restore of item from trash", + "type": "text" + }, + "moveToAlbum": "Mover para o álbum", + "unhide": "Desocultar", + "unarchive": "Desarquivar", + "favorite": "Favorito", + "removeFromFavorite": "Desfavoritar", + "shareLink": "Compartilhar link", + "createCollage": "Criar colagem", + "saveCollage": "Salvar colagem", + "collageSaved": "Colagem salva na galeria", + "collageLayout": "Layout", + "addToEnte": "Adicionar ao Ente", + "addToAlbum": "Adicionar ao álbum", + "delete": "Excluir", + "hide": "Ocultar", + "share": "Compartilhar", + "unhideToAlbum": "Desocultar para o álbum", + "restoreToAlbum": "Restaurar para álbum", + "moveItem": "{count, plural, =1 {Mover item} other {Mover itens}}", + "@moveItem": { + "description": "Page title while moving one or more items to an album" + }, + "addItem": "{count, plural,=1 {Adicionar item} other {Adicionar itens}}", + "@addItem": { + "description": "Page title while adding one or more items to album" + }, + "createOrSelectAlbum": "Criar ou selecionar álbum", + "selectAlbum": "Selecionar álbum", + "searchByAlbumNameHint": "Nome do álbum", + "albumTitle": "Título do álbum", + "enterAlbumName": "Inserir nome do álbum", + "restoringFiles": "Restaurando arquivos...", + "movingFilesToAlbum": "Movendo arquivos para o álbum...", + "unhidingFilesToAlbum": "Desocultando arquivos para o álbum", + "canNotUploadToAlbumsOwnedByOthers": "Não é possível enviar para álbuns pertencentes a outros", + "uploadingFilesToAlbum": "Enviando arquivos para o álbum...", + "addedSuccessfullyTo": "Adicionado com sucesso a {albumName}", + "movedSuccessfullyTo": "Movido com sucesso para {albumName}", + "thisAlbumAlreadyHDACollaborativeLink": "Este álbum já tem um link colaborativo", + "collaborativeLinkCreatedFor": "Link colaborativo criado para {albumName}", + "askYourLovedOnesToShare": "Peça que seus entes queridos compartilhem", + "invite": "Convidar", + "shareYourFirstAlbum": "Compartilhar seu primeiro álbum", + "sharedWith": "Compartilhado com {emailIDs}", + "sharedWithMe": "Compartilhado comigo", + "sharedByMe": "Compartilhada por mim", + "doubleYourStorage": "Duplique seu armazenamento", + "referFriendsAnd2xYourPlan": "Recomende seus amigos e duplique seu plano", + "shareAlbumHint": "Abra um álbum e toque no botão compartilhar no canto superior direito para compartilhar.", + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": "Os itens exibem o número de dias restantes antes da exclusão permanente", + "trashDaysLeft": "{count, plural, =0 {Em breve} =1 {1 dia} other {{count} dias}}", + "@trashDaysLeft": { + "description": "Text to indicate number of days remaining before permanent deletion", + "placeholders": { + "count": { + "example": "1|2|3", + "type": "int" + } + } + }, + "deleteAll": "Excluir tudo", + "renameAlbum": "Renomear álbum", + "convertToAlbum": "Converter para álbum", + "setCover": "Definir capa", + "@setCover": { + "description": "Text to set cover photo for an album" + }, + "sortAlbumsBy": "Ordenar por", + "sortNewestFirst": "Recentes primeiro", + "sortOldestFirst": "Antigos primeiro", + "rename": "Renomear", + "leaveSharedAlbum": "Sair do álbum compartilhado?", + "leaveAlbum": "Sair do álbum", + "photosAddedByYouWillBeRemovedFromTheAlbum": "Suas fotos adicionadas serão removidas do álbum", + "youveNoFilesInThisAlbumThatCanBeDeleted": "Você não tem arquivos neste álbum que possam ser excluídos", + "youDontHaveAnyArchivedItems": "Você não tem nenhum item arquivado.", + "ignoredFolderUploadReason": "Alguns arquivos neste álbum são ignorados do envio porque eles foram anteriormente excluídos do Ente.", + "resetIgnoredFiles": "Redefinir arquivos ignorados", + "deviceFilesAutoUploading": "Arquivos adicionados ao álbum do dispositivo serão automaticamente enviados para o Ente.", + "turnOnBackupForAutoUpload": "Ative a cópia de segurança para automaticamente enviar arquivos adicionados à pasta do dispositivo para o Ente.", + "noHiddenPhotosOrVideos": "Sem fotos ou vídeos ocultos", + "toHideAPhotoOrVideo": "Para ocultar uma foto ou vídeo", + "openTheItem": "• Abra a foto ou vídeo", + "clickOnTheOverflowMenu": "• Clique no menu adicional", + "click": "• Clique", + "nothingToSeeHere": "Nada para ver aqui! 👀", + "unarchiveAlbum": "Desarquivar álbum", + "archiveAlbum": "Arquivar álbum", + "calculating": "Calculando...", + "pleaseWaitDeletingAlbum": "Aguarde, excluindo álbum", + "searchByExamples": "• Nomes de álbuns (ex: \"Câmera\")\n• Tipos de arquivos (ex.: \"Vídeos\", \".gif\")\n• Anos e meses (ex.: \"2022\", \"Janeiro\")\n• Temporadas (ex.: \"Natal\")\n• Tags (ex.: \"#divertido\")", + "youCanTrySearchingForADifferentQuery": "Você pode tentar buscar por outra consulta.", + "noResultsFound": "Nenhum resultado encontrado", + "addedBy": "Adicionado por {emailOrName}", + "loadingExifData": "Carregando dados EXIF...", + "viewAllExifData": "Ver todos os dados EXIF", + "noExifData": "Sem dados EXIF", + "thisImageHasNoExifData": "Esta imagem não possui dados EXIF", + "exif": "EXIF", + "noResults": "Nenhum resultado", + "weDontSupportEditingPhotosAndAlbumsThatYouDont": "Não suportamos a edição de fotos e álbuns que você ainda não possui", + "failedToFetchOriginalForEdit": "Falhou ao obter original para edição", + "close": "Fechar", + "setAs": "Definir como", + "fileSavedToGallery": "Arquivo salvo na galeria", + "filesSavedToGallery": "Arquivos salvos na galeria", + "fileFailedToSaveToGallery": "Falhou ao salvar arquivo na galeria", + "download": "Baixar", + "pressAndHoldToPlayVideo": "Pressione e segure para reproduzir o vídeo", + "pressAndHoldToPlayVideoDetailed": "Pressione e segure na imagem para reproduzir o vídeo", + "downloadFailed": "Falhou ao baixar", + "deduplicateFiles": "Arquivos duplicados", + "deselectAll": "Deselecionar tudo", + "reviewDeduplicateItems": "Reveja e exclua os itens que você acredita serem duplicados.", + "clubByCaptureTime": "Agrupar por tempo de captura", + "clubByFileName": "Agrupar por nome do arquivo", + "count": "Contagem", + "totalSize": "Tamanho total", + "longpressOnAnItemToViewInFullscreen": "Mantenha pressionado em um item para visualizá-lo em tela cheia", + "decryptingVideo": "Descriptografando vídeo...", + "authToViewYourMemories": "Autentique-se para ver suas memórias", + "unlock": "Desbloquear", + "freeUpSpace": "Liberar espaço", + "freeUpSpaceSaving": "{count, plural, =1 {Ele pode excluído para liberar {formattedSize}} other {Eles podem ser excluídos do dispositivo para liberar {formattedSize}}}", + "filesBackedUpInAlbum": "{count, plural, one {1 arquivo} other {{formattedNumber} arquivos}} deste álbum foi copiado com segurança", + "@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 arquivo} other {{formattedNumber} arquivos}} deste dispositivo foi copiado com segurança", + "@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": "Você ainda pode acessá{count, plural, =1 {-lo} other {-los}} no Ente se você tiver uma assinatura ativa", + "@freeUpAccessPostDelete": { + "placeholders": { + "count": { + "example": "1", + "type": "int" + } + } + }, + "freeUpAmount": "Liberar {sizeInMBorGB}", + "thisEmailIsAlreadyInUse": "Este e-mail já está sendo usado", + "incorrectCode": "Código incorreto", + "authenticationFailedPleaseTryAgain": "Falha na autenticação. Tente novamente", + "verificationFailedPleaseTryAgain": "Falha na verificação. Tente novamente", + "authenticating": "Autenticando...", + "authenticationSuccessful": "Autenticado com sucesso!", + "incorrectRecoveryKey": "Chave de recuperação incorreta", + "theRecoveryKeyYouEnteredIsIncorrect": "A chave de recuperação inserida está incorreta", + "twofactorAuthenticationSuccessfullyReset": "Autenticação de dois fatores redefinida com sucesso", + "pleaseVerifyTheCodeYouHaveEntered": "Verifique o código inserido", + "pleaseContactSupportIfTheProblemPersists": "Por favor, contate o suporte se o problema persistir", + "twofactorAuthenticationHasBeenDisabled": "A autenticação de dois fatores foi desativada", + "sorryTheCodeYouveEnteredIsIncorrect": "O código inserido está incorreto", + "yourVerificationCodeHasExpired": "O código de verificação expirou", + "emailChangedTo": "E-mail alterado para {newEmail}", + "verifying": "Verificando...", + "disablingTwofactorAuthentication": "Desativando a autenticação de dois fatores...", + "allMemoriesPreserved": "Todas as memórias preservadas", + "loadingGallery": "Carregando galeria...", + "syncing": "Sincronizando...", + "encryptingBackup": "Criptografando cópia de segurança...", + "syncStopped": "Sincronização interrompida", + "syncProgress": "{completed}/{total} memórias preservadas", + "uploadingMultipleMemories": "Preservando {count} memórias...", + "@uploadingMultipleMemories": { + "description": "Text to tell user how many memories are being preserved", + "placeholders": { + "count": { + "type": "String" + } + } + }, + "uploadingSingleMemory": "Preservando 1 memória...", + "@syncProgress": { + "description": "Text to tell user how many memories have been preserved", + "placeholders": { + "completed": { + "type": "String" + }, + "total": { + "type": "String" + } + } + }, + "archiving": "Arquivando...", + "unarchiving": "Desarquivando...", + "successfullyArchived": "Arquivado com sucesso", + "successfullyUnarchived": "Desarquivado com sucesso", + "renameFile": "Renomear arquivo", + "enterFileName": "Inserir nome do arquivo", + "filesDeleted": "Arquivos excluídos", + "selectedFilesAreNotOnEnte": "Os arquivos selecionados não estão no Ente", + "thisActionCannotBeUndone": "Esta ação não pode ser desfeita", + "emptyTrash": "Esvaziar a lixeira?", + "permDeleteWarning": "Todos os itens na lixeira serão excluídos permanentemente\n\nEsta ação não pode ser desfeita", + "empty": "Esvaziar", + "couldNotFreeUpSpace": "Não foi possível liberar espaço", + "permanentlyDeleteFromDevice": "Excluir permanentemente do dispositivo?", + "someOfTheFilesYouAreTryingToDeleteAre": "Alguns dos arquivos que você está tentando excluir só estão disponíveis no seu dispositivo e não podem ser recuperados se forem excluídos", + "theyWillBeDeletedFromAllAlbums": "Eles serão excluídos de todos os álbuns.", + "someItemsAreInBothEnteAndYourDevice": "Alguns itens estão em ambos o Ente quanto no seu dispositivo.", + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": "Os itens selecionados serão excluídos de todos os álbuns e movidos para a lixeira.", + "theseItemsWillBeDeletedFromYourDevice": "Estes itens serão excluídos do seu dispositivo.", + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Parece que algo deu errado. Tente novamente mais tarde. Caso o erro persistir, por favor, entre em contato com nossa equipe.", + "error": "Erro", + "tempErrorContactSupportIfPersists": "Parece que algo deu errado. Tente novamente mais tarde. Caso o erro persistir, por favor, entre em contato com nossa equipe.", + "networkHostLookUpErr": "Não foi possível conectar-se ao Ente, verifique suas configurações de rede e entre em contato com o suporte se o erro persistir.", + "networkConnectionRefusedErr": "Não foi possível conectar ao Ente, tente novamente mais tarde. Se o erro persistir, entre em contato com o suporte.", + "cachedData": "Dados armazenados em cache", + "clearCaches": "Limpar cache", + "remoteImages": "Imagens remotas", + "remoteVideos": "Vídeos remotos", + "remoteThumbnails": "Miniaturas remotas", + "pendingSync": "Sincronização pendente", + "localGallery": "Galeria local", + "todaysLogs": "Registros de hoje", + "viewLogs": "Ver registros", + "logsDialogBody": "Isso enviará através dos registros para ajudar-nos a resolver seu problema. Saiba que, nome de arquivos serão incluídos para ajudar a buscar problemas com arquivos específicos.", + "preparingLogs": "Preparando registros...", + "emailYourLogs": "Enviar registros por e-mail", + "pleaseSendTheLogsTo": "Envie os registros para \n{toEmail}", + "copyEmailAddress": "Copiar endereço de e-mail", + "exportLogs": "Exportar registros", + "pleaseEmailUsAt": "Envie-nos um e-mail para {toEmail}", + "dismiss": "Descartar", + "didYouKnow": "Você sabia?", + "loadingMessage": "Carregando suas fotos...", + "loadMessage1": "Você pode compartilhar sua assinatura com seus familiares", + "loadMessage2": "Nós preservamos mais de 30 milhões de memórias até então", + "loadMessage3": "Mantemos 3 cópias dos seus dados, uma em um abrigo subterrâneo", + "loadMessage4": "Todos os nossos aplicativos são de código aberto", + "loadMessage5": "Nosso código-fonte e criptografia foram auditadas externamente", + "loadMessage6": "Você pode compartilhar links para seus álbuns com seus entes queridos", + "loadMessage7": "Nossos aplicativos móveis são executados em segundo plano para criptografar e copiar com segurança quaisquer fotos novas que você acessar", + "loadMessage8": "web.ente.io tem um enviador mais rápido", + "loadMessage9": "Nós usamos Xchacha20Poly1305 para criptografar seus dados com segurança", + "photoDescriptions": "Descrições das fotos", + "fileTypesAndNames": "Tipos de arquivo e nomes", + "location": "Localização", + "moments": "Momentos", + "searchFaceEmptySection": "As pessoas apareceram aqui quando a indexação for concluída", + "searchDatesEmptySection": "Buscar por data, mês ou ano", + "searchLocationEmptySection": "Fotos de grupo que estão sendo tiradas em algum raio da foto", + "searchPeopleEmptySection": "Convide pessoas e você verá todas as fotos compartilhadas por elas aqui", + "searchAlbumsEmptySection": "Álbuns", + "searchFileTypesAndNamesEmptySection": "Tipos de arquivo e nomes", + "searchCaptionEmptySection": "Adicione marcações como \"#viagem\" nas informações das fotos para encontrá-las aqui com facilidade", + "language": "Idioma", + "selectLanguage": "Selecionar idioma", + "locationName": "Nome da localização", + "addLocation": "Adicionar localização", + "groupNearbyPhotos": "Agrupar fotos próximas", + "kiloMeterUnit": "km", + "addLocationButton": "Adicionar", + "radius": "Raio", + "locationTagFeatureDescription": "Uma etiqueta de localização agrupa todas as fotos fotografadas em algum raio de uma foto", + "galleryMemoryLimitInfo": "Até 1.000 memórias exibidas na galeria", + "save": "Salvar", + "centerPoint": "Ponto central", + "pickCenterPoint": "Escolha o ponto central", + "useSelectedPhoto": "Usar foto selecionada", + "resetToDefault": "Redefinir para o padrão", + "@resetToDefault": { + "description": "Button text to reset cover photo to default" + }, + "edit": "Editar", + "deleteLocation": "Excluir localização", + "rotateLeft": "Girar para a esquerda", + "flip": "Inverter", + "rotateRight": "Girar para a direita", + "saveCopy": "Salvar cópia", + "light": "Brilho", + "color": "Cor", + "yesDiscardChanges": "Sim, descartar alterações", + "doYouWantToDiscardTheEditsYouHaveMade": "Você quer descartar as edições que você fez?", + "saving": "Salvando...", + "editsSaved": "Edições salvas", + "oopsCouldNotSaveEdits": "Opa! Não foi possível salvar as edições", + "distanceInKMUnit": "km", + "@distanceInKMUnit": { + "description": "Unit for distance in km" + }, + "dayToday": "Hoje", + "dayYesterday": "Ontem", + "storage": "Armazenamento", + "usedSpace": "Espaço usado", + "storageBreakupFamily": "Família", + "storageBreakupYou": "Você", + "@storageBreakupYou": { + "description": "Label to indicate how much storage you are using when you are part of a family plan" + }, + "storageUsageInfo": "{usedAmount} {usedStorageUnit} de {totalAmount} {totalStorageUnit} usado", + "@storageUsageInfo": { + "description": "Example: 1.2 GB of 2 GB used or 100 GB or 2TB used" + }, + "availableStorageSpace": "{freeAmount} {storageUnit} livre", + "appVersion": "Versão: {versionValue}", + "verifyIDLabel": "Verificar", + "fileInfoAddDescHint": "Adicionar descrição...", + "editLocationTagTitle": "Editar localização", + "setLabel": "Definir", + "@setLabel": { + "description": "Label of confirm button to add a new custom radius to the radius selector of a location tag" + }, + "setRadius": "Definir raio", + "familyPlanPortalTitle": "Família", + "familyPlanOverview": "Adicione 5 familiares para seu plano existente sem pagar nenhum custo adicional.\n\nCada membro ganha seu espaço privado, significando que eles não podem ver os arquivos dos outros a menos que eles sejam compartilhados.\n\nOs planos familiares estão disponíveis para clientes que já tem uma assinatura paga do Ente.\n\nAssine agora para iniciar!", + "androidBiometricHint": "Verificar identidade", + "@androidBiometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "androidBiometricNotRecognized": "Não reconhecido. Tente novamente.", + "@androidBiometricNotRecognized": { + "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." + }, + "androidBiometricSuccess": "Sucesso", + "@androidBiometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "androidCancelButton": "Cancelar", + "@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": "Autenticação necessária", + "@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": "Biométrica necessária", + "@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." + }, + "androidDeviceCredentialsRequiredTitle": "Credenciais necessários", + "@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": "Credenciais necessários", + "@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": "Ir às opções", + "@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": "A autenticação biométrica não está definida no dispositivo. Vá em 'Opções > Segurança' para adicionar a autenticação biométrica.", + "@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": "A autenticação biométrica está desativada. Bloqueie e desbloqueie sua tela para ativá-la.", + "@iOSLockOut": { + "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." + }, + "iOSGoToSettingsDescription": "A autenticação biométrica não está definida no dispositivo. Ative o Touch ID ou Face ID no dispositivo.", + "@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": "Contribuidores do OpenStreetMap", + "hostedAtOsmFrance": "Hospedado em OSM France", + "map": "Mapa", + "@map": { + "description": "Label for the map view" + }, + "maps": "Mapas", + "enableMaps": "Ativar mapas", + "enableMapsDesc": "Isso exibirá suas fotos em um mapa mundial.\n\nEste mapa é hospedado por Open Street Map, e as exatas localizações das fotos nunca serão compartilhadas.\n\nVocê pode desativar esta função a qualquer momento em Opções.", + "quickLinks": "Links rápidos", + "selectItemsToAdd": "Selecionar itens para adicionar", + "addSelected": "Adicionar selecionado", + "addFromDevice": "Adicionar do dispositivo", + "addPhotos": "Adicionar fotos", + "noPhotosFoundHere": "Nenhuma foto encontrada aqui", + "zoomOutToSeePhotos": "Reduzir ampliação para ver as fotos", + "noImagesWithLocation": "Nenhuma imagem com localização", + "unpinAlbum": "Desafixar álbum", + "pinAlbum": "Fixar álbum", + "create": "Criar", + "viewAll": "Ver tudo", + "nothingSharedWithYouYet": "Nada compartilhado com você ainda", + "noAlbumsSharedByYouYet": "Nenhum álbum compartilhado por você ainda", + "sharedWithYou": "Compartilhado com você", + "sharedByYou": "Compartilhado por você", + "inviteYourFriendsToEnte": "Convide seus amigos ao Ente", + "failedToDownloadVideo": "Falhou ao baixar vídeo", + "hiding": "Ocultando...", + "unhiding": "Reexibindo...", + "successfullyHid": "Ocultado com sucesso", + "successfullyUnhid": "Desocultado com sucesso", + "crashReporting": "Relatório de erros", + "resumableUploads": "Envios retomáveis", + "addToHiddenAlbum": "Adicionar ao álbum oculto", + "moveToHiddenAlbum": "Mover ao álbum oculto", + "fileTypes": "Tipos de arquivo", + "deleteConfirmDialogBody": "Esta conta está vinculada aos outros aplicativos do Ente, se você usar algum. Seus dados baixados, entre todos os aplicativos do Ente, serão programados para exclusão, e sua conta será permanentemente excluída.", + "hearUsWhereTitle": "Como você soube do Ente? (opcional)", + "hearUsExplanation": "Não rastreamos instalações de aplicativo. Seria útil se você contasse onde nos encontrou!", + "viewAddOnButton": "Ver complementos", + "addOns": "Complementos", + "addOnPageSubtitle": "Detalhes dos complementos", + "yourMap": "Seu mapa", + "modifyYourQueryOrTrySearchingFor": "Altere o termo de busca ou tente consultar", + "blackFridaySale": "Promoção Black Friday", + "upto50OffUntil4thDec": "Com 50% de desconto, até 4 de dezembro", + "photos": "Fotos", + "videos": "Vídeos", + "livePhotos": "Fotos animadas", + "searchHint1": "busca rápida no dispositivo", + "searchHint2": "Descrições e data das fotos", + "searchHint3": "Álbuns, nomes de arquivos e tipos", + "searchHint4": "Localização", + "searchHint5": "Em breve: Busca mágica e rostos ✨", + "addYourPhotosNow": "Adicione suas fotos agora", + "searchResultCount": "{count, plural, one{{count} resultado encontrado} other{{count} resultados encontrados}}", + "@searchResultCount": { + "description": "Text to tell user how many results were found for their search query", + "placeholders": { + "count": { + "example": "1|2|3", + "type": "int" + } + } + }, + "faces": "Rostos", + "people": "Pessoas", + "contents": "Conteúdos", + "addNew": "Adicionar novo", + "@addNew": { + "description": "Text to add a new item (location tag, album, caption etc)" + }, + "contacts": "Contatos", + "noInternetConnection": "Sem conexão à internet", + "pleaseCheckYourInternetConnectionAndTryAgain": "Verifique sua conexão com a internet e tente novamente.", + "signOutFromOtherDevices": "Sair da conta em outros dispositivos", + "signOutOtherBody": "Se você acha que alguém possa saber da sua senha, você pode forçar desconectar sua conta de outros dispositivos.", + "signOutOtherDevices": "Sair em outros dispositivos", + "doNotSignOut": "Não sair", + "editLocation": "Editar localização", + "selectALocation": "Selecionar localização", + "selectALocationFirst": "Primeiramente selecione uma localização", + "changeLocationOfSelectedItems": "Alterar a localização dos itens selecionados?", + "editsToLocationWillOnlyBeSeenWithinEnte": "Edições à localização serão apenas vistos no Ente", + "cleanUncategorized": "Limpar não categorizado", + "cleanUncategorizedDescription": "Remover todos os arquivos não categorizados que estão presentes em outros álbuns", + "waitingForVerification": "Esperando verificação...", + "passkey": "Chave de acesso", + "passkeyAuthTitle": "Verificação de chave de acesso", + "loginWithTOTP": "Registrar com TOTP", + "passKeyPendingVerification": "Verificação pendente", + "loginSessionExpired": "Sessão expirada", + "loginSessionExpiredDetails": "Sua sessão expirou. Registre-se novamente.", + "verifyPasskey": "Verificar chave de acesso", + "playOnTv": "Reproduzir álbum na TV", + "pair": "Parear", + "deviceNotFound": "Dispositivo não encontrado", + "castInstruction": "Acesse cast.ente.io no dispositivo desejado para parear.\n\nInsira o código abaixo para reproduzir o álbum na sua TV.", + "deviceCodeHint": "Insira o código", + "joinDiscord": "Junte-se ao Discord", + "locations": "Localizações", + "addAName": "Adicione um nome", + "findThemQuickly": "Busque-os rapidamente", + "@findThemQuickly": { + "description": "Subtitle to indicate that the user can find people quickly by name" + }, + "findPeopleByName": "Busque pessoas facilmente pelo nome", + "addViewers": "{count, plural, =0 {Adicionar visualizador} =1 {Adicionar visualizador} other {Adicionar vizualizadores}}", + "addCollaborators": "{count, plural, =0 {Adicionar colaborador} =1 {Adicionar colaborador} other {Adicionar colaboradores}}", + "longPressAnEmailToVerifyEndToEndEncryption": "Pressione um e-mail para verificar a criptografia ponta a ponta.", + "developerSettingsWarning": "Deseja modificar as Opções de Desenvolvedor?", + "developerSettings": "Opções de desenvolvedor", + "serverEndpoint": "Ponto final do servidor", + "invalidEndpoint": "Ponto final inválido", + "invalidEndpointMessage": "Desculpe, o ponto final inserido é inválido. Insira um ponto final válido e tente novamente.", + "endpointUpdatedMessage": "Ponto final atualizado com sucesso", + "customEndpoint": "Conectado à {endpoint}", + "createCollaborativeLink": "Criar link colaborativo", + "search": "Buscar", + "enterPersonName": "Inserir nome da pessoa", + "enterName": "Inserir nome", + "savePerson": "Salvar pessoa", + "editPerson": "Editar pessoa", + "mergedPhotos": "Fotos mescladas", + "orMergeWithExistingPerson": "Ou mesclar com existente", + "enterDateOfBirth": "Aniversário (opcional)", + "birthday": "Aniversário", + "removePersonLabel": "Remover etiqueta da pessoa", + "autoPairDesc": "O pareamento automático só funciona com dispositivos que suportam o Chromecast.", + "manualPairDesc": "Parear com PIN funciona com qualquer tela que queira visualizar seu álbum.", + "connectToDevice": "Conectar ao dispositivo", + "autoCastDialogBody": "Você verá dispositivos de transmissão disponível aqui.", + "autoCastiOSPermission": "Certifique-se que as permissões da internet local estejam ligadas para o Ente Photos App, em opções.", + "noDeviceFound": "Nenhum dispositivo encontrado", + "stopCastingTitle": "Parar transmissão", + "stopCastingBody": "Deseja parar a transmissão?", + "castIPMismatchTitle": "Falhou ao transmitir álbum", + "castIPMismatchBody": "Certifique-se de estar na mesma internet que a TV.", + "pairingComplete": "Pareamento concluído", + "savingEdits": "Salvando edições...", + "autoPair": "Pareamento automático", + "pairWithPin": "Parear com PIN", + "faceRecognition": "Reconhecimento facial", + "foundFaces": "Rostos encontrados", + "clusteringProgress": "Progresso de agrupamento", + "indexingIsPaused": "A indexação parou, ela será retomada automaticamente quando o dispositivo estiver pronto.", + "trim": "Recortar", + "crop": "Cortar", + "rotate": "Girar", + "left": "Esquerda", + "right": "Direita", + "whatsNew": "O que há de novo", + "reviewSuggestions": "Revisar sugestões", + "review": "Revisar", + "useAsCover": "Usar como capa", + "notPersonLabel": "Não é {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": "Ativar", + "enabled": "Ativado", + "moreDetails": "Mais detalhes", + "enableMLIndexingDesc": "Ente fornece aprendizado automático no dispositivo para reconhecimento facial, busca mágica e outros recursos de busca avançados.", + "magicSearchHint": "A busca mágica permite buscar fotos pelo conteúdo, p. e.x. 'flor', 'carro vermelho', 'identidade'", + "panorama": "Panorama", + "reenterPassword": "Reinserir senha", + "reenterPin": "Reinserir PIN", + "deviceLock": "Bloqueio do dispositivo", + "pinLock": "Bloqueio por PIN", + "next": "Próximo", + "setNewPassword": "Definir nova senha", + "enterPin": "Inserir PIN", + "setNewPin": "Definir PIN novo", + "appLock": "Bloqueio do aplicativo", + "noSystemLockFound": "Nenhum bloqueio do sistema encontrado", + "tapToUnlock": "Toque para desbloquear", + "tooManyIncorrectAttempts": "Muitas tentativas incorretas", + "videoInfo": "Informações do vídeo", + "autoLock": "Bloqueio automático", + "immediately": "Imediatamente", + "autoLockFeatureDescription": "Tempo após o qual o aplicativo bloqueia após ser colocado em segundo plano", + "hideContent": "Ocultar conteúdo", + "hideContentDescriptionAndroid": "Oculta os conteúdos do aplicativo no seletor de aplicativos e desativa capturas de tela", + "hideContentDescriptionIos": "Oculta o conteúdo no seletor de aplicativos", + "passwordStrengthInfo": "A força da senha é calculada considerando o comprimento dos dígitos, carácteres usados, e se ou não a senha aparece nas 10.000 senhas usadas.", + "noQuickLinksSelected": "Nenhum link rápido selecionado", + "pleaseSelectQuickLinksToRemove": "Selecione links rápidos para remover", + "removePublicLinks": "Remover link público", + "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "Isto removerá links públicos de todos os links rápidos selecionados.", + "guestView": "Vista do convidado", + "guestViewEnablePreSteps": "Para ativar a vista do convidado, defina uma senha de acesso no dispositivo ou bloqueie sua tela nas opções do sistema.", + "nameTheAlbum": "Nomear álbum", + "collectPhotosDescription": "Crie um link onde seus amigos podem enviar fotos na qualidade original.", + "collect": "Coletar", + "appLockDescriptions": "Escolha entre a tela de bloqueio padrão do seu dispositivo e uma tela de bloqueio personalizada com PIN ou senha.", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Para ativar o bloqueio do aplicativo, defina uma senha de acesso no dispositivo ou bloqueie sua tela nas opções do sistema.", + "authToViewPasskey": "Autentique-se para ver sua chave de acesso", + "loopVideoOn": "Repetir vídeo ativado", + "loopVideoOff": "Repetir vídeo desativado", + "localSyncErrorMessage": "Ocorreu um erro devido à sincronização de localização das fotos estar levando mais tempo que o esperado. Entre em contato conosco.", + "showPerson": "Mostrar pessoa", + "sort": "Ordenar", + "mostRecent": "Mais recente", + "mostRelevant": "Mais relevante", + "loadingYourPhotos": "Carregando suas fotos...", + "processingImport": "Processando {folderName}...", + "personName": "Nome da pessoa", + "addNewPerson": "Adicionar nova pessoa", + "addNameOrMerge": "Adicionar nome ou juntar", + "mergeWithExisting": "Juntar com o existente", + "newPerson": "Nova pessoa", + "addName": "Adicionar pessoa", + "add": "Adicionar", + "extraPhotosFoundFor": "Fotos adicionais encontradas para {text}", + "@extraPhotosFoundFor": { + "placeholders": { + "text": { + "type": "String" + } + } + }, + "extraPhotosFound": "Fotos adicionais encontradas", + "configuration": "Configuração", + "localIndexing": "Indexação local", + "processed": "Processado", + "resetPerson": "Remover", + "areYouSureYouWantToResetThisPerson": "Deseja redefinir esta pessoa?", + "allPersonGroupingWillReset": "Todos os agrupamentos dessa pessoa serão redefinidos, e você perderá todas as sugestões feitas por essa pessoa.", + "yesResetPerson": "Sim, redefinir pessoa", + "onlyThem": "Apenas eles", + "checkingModels": "Verificando modelos...", + "enableMachineLearningBanner": "Ativar o aprendizado automático para busca mágica e reconhecimento facial", + "searchDiscoverEmptySection": "As imagens serão exibidas aqui quando o processamento e sincronização for concluído", + "searchPersonsEmptySection": "As pessoas serão exibidas aqui quando o processamento e sincronização for concluído", + "viewersSuccessfullyAdded": "{count, plural, =0 {Adicionado 0 vizualizadores} =1 {Adicionado 1 visualizador} other {Adicionado {count} visualizadores}}", + "@viewersSuccessfullyAdded": { + "placeholders": { + "count": { + "type": "int", + "example": "2" + } + }, + "description": "Number of viewers that were successfully added to an album." + }, + "collaboratorsSuccessfullyAdded": "{count, plural, =0 {Adicionado 0 colaboradores} =1 {Adicionado 1 colaborador} other {Adicionado {count} colaboradores}}", + "@collaboratorsSuccessfullyAdded": { + "placeholders": { + "count": { + "type": "int", + "example": "2" + } + }, + "description": "Number of collaborators that were successfully added to an album." + }, + "accountIsAlreadyConfigured": "A conta já está configurada.", + "sessionIdMismatch": "Incompatibilidade de ID de sessão", + "@sessionIdMismatch": { + "description": "In passkey page, deeplink is ignored because of session ID mismatch." + }, + "failedToFetchActiveSessions": "Falhou ao obter sessões ativas", + "@failedToFetchActiveSessions": { + "description": "In session page, warn user (in toast) that active sessions could not be fetched." + }, + "failedToRefreshStripeSubscription": "Falhou ao atualizar assinatura", + "failedToPlayVideo": "Falhou ao reproduzir vídeo", + "uploadIsIgnoredDueToIgnorereason": "O envio é ignorado devido a {ignoreReason}", + "@uploadIsIgnoredDueToIgnorereason": { + "placeholders": { + "ignoreReason": { + "type": "String", + "example": "no network" + } + } + }, + "typeOfGallerGallerytypeIsNotSupportedForRename": "O tipo de galeria {galleryType} não é suportado para renomear", + "@typeOfGallerGallerytypeIsNotSupportedForRename": { + "placeholders": { + "galleryType": { + "type": "String", + "example": "no network" + } + } + }, + "tapToUploadIsIgnoredDue": "Toque para enviar, atualmente o envio é ignorado devido a {ignoreReason}", + "@tapToUploadIsIgnoredDue": { + "description": "Shown in upload icon widet, inside a tooltip.", + "placeholders": { + "ignoreReason": { + "type": "String", + "example": "no network" + } + } + }, + "tapToUpload": "Toque para enviar", + "@tapToUpload": { + "description": "Shown in upload icon widet, inside a tooltip." + }, + "info": "Info", + "addFiles": "Adicionar arquivos", + "castAlbum": "Transferir álbum", + "imageNotAnalyzed": "Imagem não analisada", + "noFacesFound": "Nenhum rosto encontrado", + "fileNotUploadedYet": "Arquivo ainda não enviado", + "noSuggestionsForPerson": "Sem sugestões para {personName}", + "@noSuggestionsForPerson": { + "placeholders": { + "personName": { + "type": "String", + "example": "Alice" + } + } + }, + "month": "mês", + "yearShort": "ano", + "@yearShort": { + "description": "Appears in pricing page (/yr)" + }, + "currentlyRunning": "Atualmente executando", + "ignored": "ignorado", + "photosCount": "{count, plural, =0 {0 fotos} =1 {1 foto} other {{count} fotos}}", + "@photosCount": { + "placeholders": { + "count": { + "type": "int", + "example": "2" + } + } + }, + "file": "Arquivo", + "searchSectionsLengthMismatch": "Incompatibilidade de comprimento de seções: {snapshotLength} != {searchLength}", + "@searchSectionsLengthMismatch": { + "description": "Appears in search tab page", + "placeholders": { + "snapshotLength": { + "type": "int", + "example": "1" + }, + "searchLength": { + "type": "int", + "example": "2" + } + } + }, + "selectMailApp": "Selecionar aplicativo de e-mail", + "selectAllShort": "Tudo", + "@selectAllShort": { + "description": "Text that appears in bottom right when you start to select multiple photos. When clicked, it selects all photos." + }, + "selectCoverPhoto": "Selecionar foto da capa", + "newLocation": "Nova localização", + "faceNotClusteredYet": "Rosto não agrupado ainda, volte aqui mais tarde", + "theLinkYouAreTryingToAccessHasExpired": "O link que você está tentando acessar já expirou.", + "openFile": "Abrir arquivo", + "backupFile": "Copiar arquivo com segurança", + "openAlbumInBrowser": "Abrir álbum no navegador", + "openAlbumInBrowserTitle": "Use o aplicativo da web para adicionar fotos a este álbum", + "allow": "Permitir", + "allowAppToOpenSharedAlbumLinks": "Permitir aplicativo abrir links de álbum compartilhado", + "seePublicAlbumLinksInApp": "Ver links de álbum compartilhado no aplicativo", + "emergencyContacts": "Contatos de emergência", + "acceptTrustInvite": "Aceitar convite", + "declineTrustInvite": "Recusar convite", + "removeYourselfAsTrustedContact": "Remover si mesmo dos contatos confiáveis", + "legacy": "Legado", + "legacyPageDesc": "O legado permite que contatos confiáveis acessem sua conta em sua ausência.", + "legacyPageDesc2": "Contatos confiáveis podem iniciar recuperação de conta. Se não cancelado dentro de 30 dias, redefina sua senha e acesse sua conta.", + "legacyAccounts": "Contas legadas", + "trustedContacts": "Contatos confiáveis", + "addTrustedContact": "Adicionar contato confiável", + "removeInvite": "Remover convite", + "recoveryWarning": "Um contato confiável está tentando acessar sua conta", + "rejectRecovery": "Rejeitar recuperação", + "recoveryInitiated": "A recuperação iniciou", + "recoveryInitiatedDesc": "Você poderá acessar a conta após {days} dias. Uma notificação será enviada para {email}.", + "@recoveryInitiatedDesc": { + "placeholders": { + "days": { + "type": "int", + "example": "30" + }, + "email": { + "type": "String", + "example": "me@example.com" + } + } + }, + "cancelAccountRecovery": "Cancelar recuperação", + "recoveryAccount": "Recuperar conta", + "cancelAccountRecoveryBody": "Deseja mesmo cancelar a recuperação de conta?", + "startAccountRecoveryTitle": "Iniciar recuperação", + "whyAddTrustContact": "Um contato confiável pode ajudá-lo em recuperar seus dados.", + "recoveryReady": "Você pode recuperar a conta com e-mail {email} por definir uma nova senha.", + "@recoveryReady": { + "placeholders": { + "email": { + "type": "String", + "example": "me@example.com" + } + } + }, + "recoveryWarningBody": "{email} está tentando recuperar sua conta.", + "trustedInviteBody": "Você foi convidado para ser um contato legado por {email}.", + "warning": "Aviso", + "proceed": "Continuar", + "confirmAddingTrustedContact": "Você está prestes a adicionar {email} como contato confiável. Eles poderão recuperar sua conta se você estiver ausente por {numOfDays} dias.", + "@confirmAddingTrustedContact": { + "placeholders": { + "email": { + "type": "String", + "example": "me@example.com" + }, + "numOfDays": { + "type": "int", + "example": "30" + } + } + }, + "legacyInvite": "{email} convidou você para ser um contato confiável", + "authToManageLegacy": "Autentique-se para gerenciar seus contatos confiáveis", + "useDifferentPlayerInfo": "Enfrentando problemas ao reproduzir este vídeo? Mantenha pressionado aqui ou tente outro reprodutor de vídeo", + "hideSharedItemsFromHomeGallery": "Ocultar itens compartilhados da galeria inicial", + "gallery": "Galeria", + "joinAlbum": "Unir-se ao álbum", + "joinAlbumSubtext": "para visualizar e adicionar suas fotos", + "joinAlbumSubtextViewer": "para adicionar isso aos álbuns compartilhados", + "join": "Unir-se", + "linkEmail": "Vincular e-mail", + "link": "Vincular", + "noEnteAccountExclamation": "Nenhuma conta Ente!", + "orPickFromYourContacts": "ou escolher dos seus contatos", + "emailDoesNotHaveEnteAccount": "{email} não possui uma conta Ente.", + "@emailDoesNotHaveEnteAccount": { + "description": "Shown when email doesn't have an Ente account", + "placeholders": { + "email": { + "type": "String" + } + } + }, + "accountOwnerPersonAppbarTitle": "{title} (Eu)", + "@accountOwnerPersonAppbarTitle": { + "description": "Title of appbar for account owner person", + "placeholders": { + "title": { + "type": "String" + } + } + }, + "reassignMe": "Reatribuir \"Eu\"", + "me": "Eu", + "linkEmailToContactBannerCaption": "para compartilhar rápido", + "@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": "Selecione a pessoa para vincular", + "linkPersonToEmail": "Vincular pessoa a {email}", + "@linkPersonToEmail": { + "placeholders": { + "email": { + "type": "String" + } + } + }, + "linkPersonToEmailConfirmation": "Isso vinculará {personName} a {email}", + "@linkPersonToEmailConfirmation": { + "description": "Confirmation message when linking a person to an email", + "placeholders": { + "personName": { + "type": "String" + }, + "email": { + "type": "String" + } + } + }, + "selectYourFace": "Selecione seu rosto", + "reassigningLoading": "Reatribuindo...", + "reassignedToName": "Atribuído a {name}", + "@reassignedToName": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "saveChangesBeforeLeavingQuestion": "Salvar mudanças antes de sair?", + "dontSave": "Não salvar", + "thisIsMeExclamation": "Este é você!", + "linkPerson": "Vincular pessoa", + "linkPersonCaption": "para melhorar o compartilhamento", + "@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": "Transmissão de vídeo", + "processingVideos": "Processando vídeos", + "streamDetails": "Detalhes da transmissão", + "processing": "Processando", + "queued": "Na fila", + "ineligible": "Inelegível", + "failed": "Falhou", + "playStream": "Reproduzir transmissão", + "playOriginal": "Reproduzir original", + "joinAlbumConfirmationDialogBody": "Unir-se ao álbum fará que seu e-mail seja visível a todos do álbum.", + "pleaseWaitThisWillTakeAWhile": "Aguarde um pouco, isso talvez leve um tempo.", + "editTime": "Editar tempo", + "selectTime": "Selecionar tempo", + "selectDate": "Selecionar data", + "previous": "Anterior", + "selectOneDateAndTimeForAll": "Selecione uma data e hora para todos", + "selectStartOfRange": "Selecionar início de intervalo", + "thisWillMakeTheDateAndTimeOfAllSelected": "Isso fará que a data e hora de todas as fotos selecionadas fiquem iguais.", + "allWillShiftRangeBasedOnFirst": "Este é o primeiro do grupo. As outras fotos selecionadas serão automaticamente alteradas para esta nova data", + "newRange": "Novo intervalo", + "selectOneDateAndTime": "Selecionar data e hora", + "moveSelectedPhotosToOneDate": "Mover fotos selecionadas para uma data", + "shiftDatesAndTime": "Alterar as datas e horas", + "photosKeepRelativeTimeDifference": "As fotos mantêm a diferença de tempo relativo", + "photocountPhotos": "{count, plural, =0 {Sem fotos} =1 {1 foto} other {{count} fotos}}", + "@photocountPhotos": { + "placeholders": { + "count": { + "type": "int", + "example": "2" + } + } + }, + "appIcon": "Ícone do aplicativo", + "notThisPerson": "Não é esta pessoa?", + "selectedItemsWillBeRemovedFromThisPerson": "Os itens selecionados serão removidos desta pessoa, entretanto não serão excluídos da sua biblioteca.", + "throughTheYears": "{dateFormat} com o passar dos anos", + "thisWeekThroughTheYears": "Esta semana com o passar dos anos", + "thisWeekXYearsAgo": "{count, plural, =1 {Esta semana, {count} ano atrás} other {Esta semana, {count} anos atrás}}", + "youAndThem": "Você e {name}", + "admiringThem": "Admirando {name}", + "embracingThem": "Abraçando {name}", + "partyWithThem": "Festejando com {name}", + "hikingWithThem": "Caminhando com {name}", + "feastingWithThem": "Tendo banquete com {name}", + "selfiesWithThem": "Tirando selfies com {name}", + "posingWithThem": "Fazendo pose com {name}", + "backgroundWithThem": "Vistas bonitas com {name}", + "sportsWithThem": "Jogando esportes com {name}", + "roadtripWithThem": "Viajando de carro com {name}", + "spotlightOnYourself": "Destacar si mesmo", + "spotlightOnThem": "Destacar {name}", + "personIsAge": "{name} tem {age} anos!", + "personTurningAge": "{name} terá {age} em breve", + "lastTimeWithThem": "Últimos momentos com {name}", + "tripToLocation": "Viajem à {location}", + "tripInYear": "Viajem em {year}", + "lastYearsTrip": "Viajem do ano passado", + "sunrise": "No horizonte", + "mountains": "Sob as montanhas", + "greenery": "A vegetação verde", + "beach": "Areia e o mar", + "city": "Na cidade", + "moon": "Na luz do luar", + "onTheRoad": "Na estrada novamente", + "food": "Amor por culinária", + "pets": "Companhias peludas", + "cLIcon": "Novo Ícone", + "cLIconDesc": "Finalmente, um novo ícone para o ente que acreditamos que represente melhor nosso trabalho. Também, adicionamos um alterador de ícone para que você ainda consiga utilizar o ícone antigo.", + "cLMemories": "Memórias", + "cLMemoriesDesc": "Relembre momentos especiais - destaque pessoas favoritas, suas viagens e feriados, melhores fotos, e muito mais. Ative o aprendizado automático, marque-se e nomeie seus amigos para melhorar a experiência.", + "cLWidgets": "Widgets", + "cLWidgetsDesc": "Widgets integrados com memórias já estão disponíveis. Eles apareceram com seus melhores momentos sem precisar abrir o ente.", + "cLFamilyPlan": "Limites de planos familiares", + "cLFamilyPlanDesc": "Agora você pode definir um limite de quanto armazenamento os seus entes queridos podem usar.", + "cLBulkEdit": "Editar todas as datas", + "cLBulkEditDesc": "Agora você pode selecionar várias fotos, editar data e hora de todos com um só clique. Alternar datas também são suportados.", + "curatedMemories": "Memórias restauradas" +} \ No newline at end of file diff --git a/mobile/lib/l10n/intl_pt_PT.arb b/mobile/lib/l10n/intl_pt_PT.arb new file mode 100644 index 0000000000..662730e770 --- /dev/null +++ b/mobile/lib/l10n/intl_pt_PT.arb @@ -0,0 +1,1392 @@ +{ + "@@locale ": "en", + "enterYourEmailAddress": "Insira o seu endereço de email", + "accountWelcomeBack": "Bem-vindo de volta!", + "email": "Email", + "cancel": "Cancelar", + "verify": "Verificar", + "invalidEmailAddress": "Endereço de email inválido", + "enterValidEmail": "Por favor, insira um endereço de email válido.", + "deleteAccount": "Eliminar conta", + "askDeleteReason": "Qual o principal motivo pelo qual está a eliminar a conta?", + "deleteAccountFeedbackPrompt": "Lamentamos a sua partida. Indique-nos a razão para podermos melhorar o serviço.", + "feedback": "Opinião", + "kindlyHelpUsWithThisInformation": "Por favor, ajude-nos com esta informação", + "confirmDeletePrompt": "Sim, pretendo apagar permanentemente esta conta e os respetivos dados em todas as aplicações.", + "confirmAccountDeletion": "Confirmar eliminação de conta", + "deleteAccountPermanentlyButton": "Excluir conta permanentemente", + "yourAccountHasBeenDeleted": "A sua conta foi eliminada", + "selectReason": "Selecionar motivo", + "deleteReason1": "Falta uma funcionalidade-chave de que eu necessito", + "deleteReason2": "O aplicativo ou um determinado recurso não se comportou como era suposto", + "deleteReason3": "Encontrei outro serviço de que gosto mais", + "deleteReason4": "O motivo não está na lista", + "sendEmail": "Enviar email", + "deleteRequestSLAText": "O seu pedido será processado dentro de 72 horas.", + "deleteEmailRequest": "Envie um e-mail para accountt-deletion@ente.io a partir do seu endereço de email registrado.", + "entePhotosPerm": "Ente precisa de permissão para preservar suas fotos", + "ok": "Ok", + "createAccount": "Criar conta", + "createNewAccount": "Criar nova conta", + "password": "Palavra-passe", + "confirmPassword": "Confirmar palavra-passe", + "activeSessions": "Sessões ativas", + "oops": "Oops", + "somethingWentWrongPleaseTryAgain": "Ocorreu um erro. Tente novamente", + "thisWillLogYouOutOfThisDevice": "Irá desconectar a sua conta do seu dispositivo!", + "thisWillLogYouOutOfTheFollowingDevice": "Irá desconectar a sua conta do seguinte dispositivo:", + "terminateSession": "Terminar sessão?", + "terminate": "Terminar", + "thisDevice": "Este dispositivo", + "recoverButton": "Recuperar", + "recoverySuccessful": "Recuperação bem sucedida!", + "decrypting": "A desencriptar…", + "incorrectRecoveryKeyTitle": "Chave de recuperação incorreta", + "incorrectRecoveryKeyBody": "A chave de recuperação inserida está incorreta", + "forgotPassword": "Esqueceu-se da palavra-passe", + "enterYourRecoveryKey": "Insira a sua chave de recuperação", + "noRecoveryKey": "Não tem chave de recuperação?", + "sorry": "Desculpe", + "noRecoveryKeyNoDecryption": "Devido à natureza do nosso protocolo de criptografia de ponta a ponta, os seus dados não podem ser descriptografados sem a sua palavra-passe ou a sua chave de recuperação", + "verifyEmail": "Verificar email", + "toResetVerifyEmail": "Para redefinir a sua palavra-passe, verifique primeiro o seu e-mail.", + "checkInboxAndSpamFolder": "Verifique a sua caixa de entrada (e spam) para concluir a verificação", + "tapToEnterCode": "Toque para inserir código", + "resendEmail": "Reenviar e-mail", + "weHaveSendEmailTo": "Enviamos um e-mail para {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" + } + } + }, + "setPasswordTitle": "Definir palavra-passe", + "changePasswordTitle": "Alterar palavra-passe", + "resetPasswordTitle": "Redefinir palavra-passe", + "encryptionKeys": "Chaves de encriptação", + "passwordWarning": "Não armazenamos esta palavra-passe, se você a esquecer, não podemos desencriptar os seus dados", + "enterPasswordToEncrypt": "Inserir uma palavra-passe para encriptar os seus dados", + "enterNewPasswordToEncrypt": "Inserir uma nova palavra-passe para encriptar os seus dados", + "weakStrength": "Fraca", + "strongStrength": "Forte", + "moderateStrength": "Moderada", + "passwordStrength": "Força da palavra-passe: {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}" + }, + "passwordChangedSuccessfully": "Palavra-passe alterada com sucesso", + "generatingEncryptionKeys": "Gerando chaves de encriptação...", + "pleaseWait": "Por favor, aguarde ...", + "continueLabel": "Continuar", + "insecureDevice": "Dispositivo inseguro", + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Desculpe, não foi possível gerar chaves seguras neste dispositivo.\n\npor favor iniciar sessão com um dispositivo diferente.", + "howItWorks": "Como funciona", + "encryption": "Encriptação", + "ackPasswordLostWarning": "Eu entendo que se eu perder a minha palavra-passe, posso perder os meus dados já que esses dados são encriptados de ponta a ponta.", + "privacyPolicyTitle": "Política de privacidade", + "termsOfServicesTitle": "Termos", + "signUpTerms": "Eu concordo com os termos de serviço e política de privacidade", + "logInLabel": "Iniciar sessão", + "loginTerms": "Ao clicar em iniciar sessão, eu concordo com os termos de serviço e política de privacidade", + "changeEmail": "Alterar e-mail", + "enterYourPassword": "Introduza a sua palavra-passe", + "welcomeBack": "Bem-vindo(a) de volta!", + "contactSupport": "Contactar o suporte", + "incorrectPasswordTitle": "Palavra-passe incorreta", + "pleaseTryAgain": "Por favor, tente novamente", + "recreatePasswordTitle": "Recriar palavra-passe", + "useRecoveryKey": "Usar chave de recuperação", + "recreatePasswordBody": "O dispositivo atual não é suficientemente poderoso para verificar a palavra-passe, mas podemos regenerar novamente de uma maneira que funcione no seu dispositivo.\n\nPor favor, iniciar sessão utilizando código de recuperação e gerar novamente a sua palavra-passe (pode utilizar a mesma se quiser).", + "verifyPassword": "Verificar palavra-passe", + "recoveryKey": "Chave de recuperação", + "recoveryKeyOnForgotPassword": "Se esquecer sua palavra-passe, a única maneira de recuperar os seus dados é com esta chave.", + "recoveryKeySaveDescription": "Não armazenamos essa chave, por favor, guarde esta chave de 24 palavras num lugar seguro.", + "doThisLater": "Fazer isto mais tarde", + "saveKey": "Guardar chave", + "recoveryKeyCopiedToClipboard": "Chave de recuperação copiada para a área de transferência", + "recoverAccount": "Recuperar conta", + "recover": "Recuperar", + "dropSupportEmail": "Envie um e-mail para {supportEmail} a partir do seu endereço de e-mail registado", + "@dropSupportEmail": { + "placeholders": { + "supportEmail": { + "description": "The support email address", + "type": "String", + "example": "support@ente.io" + } + } + }, + "twofactorSetup": "Configuração de dois fatores", + "enterCode": "Insira o código", + "scanCode": "Ler código Qr", + "codeCopiedToClipboard": "Código copiado para área de transferência", + "copypasteThisCodentoYourAuthenticatorApp": "Copie e cole este código\nno seu aplicativo de autenticação", + "tapToCopy": "toque para copiar", + "scanThisBarcodeWithnyourAuthenticatorApp": "Leia este código com a sua aplicação dois fatores.", + "enterThe6digitCodeFromnyourAuthenticatorApp": "Introduzir o código de 6 dígitos da\nsua aplicação de autenticação", + "confirm": "Confirmar", + "setupComplete": "Configuração concluída", + "saveYourRecoveryKeyIfYouHaventAlready": "Guarde a sua chave de recuperação, caso ainda não o tenha feito", + "thisCanBeUsedToRecoverYourAccountIfYou": "Isto pode ser usado para recuperar sua conta se você perder seu segundo fator", + "twofactorAuthenticationPageTitle": "Autenticação de dois fatores", + "lostDevice": "Perdeu o seu dispositívo?", + "verifyingRecoveryKey": "Verificando chave de recuperação...", + "recoveryKeyVerified": "Chave de recuperação verificada", + "recoveryKeySuccessBody": "Ótimo! A sua chave de recuperação é válida. Obrigado por verificar.\n\nLembre-se de manter cópia de segurança da sua chave de recuperação.", + "invalidRecoveryKey": "A chave de recuperação que inseriu não é válida. Por favor, certifique-se que ela contém 24 palavras e verifique a ortografia de cada uma.\n\nSe inseriu um código de recuperação mais antigo, certifique-se de que tem 64 caracteres e verifique cada um deles.", + "invalidKey": "Chave inválida", + "tryAgain": "Tente novamente", + "viewRecoveryKey": "Ver chave de recuperação", + "confirmRecoveryKey": "Confirmar chave de recuperação", + "recoveryKeyVerifyReason": "A sua chave de recuperação é a única forma de recuperar as suas fotografias se se esquecer da sua palavra-passe. Pode encontrar a sua chave de recuperação em Definições > Conta.\n\n\nIntroduza aqui a sua chave de recuperação para verificar se a guardou corretamente.", + "confirmYourRecoveryKey": "Confirmar chave de recuperação", + "addViewer": "Adicionar visualizador", + "addCollaborator": "Adicionar colaborador", + "addANewEmail": "Adicionar um novo e-mail", + "orPickAnExistingOne": "Ou escolha um já existente", + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": "Os colaboradores podem adicionar fotos e vídeos ao álbum compartilhado.", + "enterEmail": "Digite o e-mail", + "albumOwner": "Dono", + "@albumOwner": { + "description": "Role of the album owner" + }, + "you": "Tu", + "collaborator": "Colaborador", + "addMore": "Adicionar mais", + "@addMore": { + "description": "Button text to add more collaborators/viewers" + }, + "viewer": "Visualizador", + "remove": "Remover", + "removeParticipant": "Remover participante", + "@removeParticipant": { + "description": "menuSectionTitle for removing a participant" + }, + "manage": "Gerir", + "addedAs": "Adicionado como", + "changePermissions": "Alterar permissões", + "yesConvertToViewer": "Sim, converter para visualizador", + "cannotAddMorePhotosAfterBecomingViewer": "{user} não será capaz de adicionar mais fotos a este álbum\n\nEles ainda serão capazes de remover fotos existentes adicionadas por eles", + "allowAddingPhotos": "Permitir adicionar fotos", + "@allowAddingPhotos": { + "description": "Switch button to enable uploading photos to a public link" + }, + "allowAddPhotosDescription": "Permitir que pessoas com o link também adicionem fotos ao álbum compartilhado.", + "passwordLock": "Bloqueio da palavra-passe", + "disableDownloadWarningTitle": "Por favor, observe", + "disableDownloadWarningBody": "Visualizadores ainda podem fazer capturas de tela ou salvar uma cópia das suas fotos usando ferramentas externas", + "allowDownloads": "Permitir downloads", + "linkDeviceLimit": "Limite de dispositivo", + "noDeviceLimit": "Nenhum", + "@noDeviceLimit": { + "description": "Text to indicate that there is limit on number of devices" + }, + "linkExpiry": "Link expirado", + "linkExpired": "Expirado", + "linkEnabled": "Ativado", + "linkNeverExpires": "Nunca", + "expiredLinkInfo": "Este link expirou. Por favor, selecione um novo tempo de expiração ou desabilite a expiração do link.", + "setAPassword": "Definir uma palavra-passe", + "lockButtonLabel": "Bloquear", + "enterPassword": "Introduzir palavra-passe", + "removeLink": "Remover link", + "manageLink": "Gerir link", + "linkExpiresOn": "O link expirará em {expiryTime}", + "albumUpdated": "Álbum atualizado", + "never": "Nunca", + "custom": "Personalizado", + "@custom": { + "description": "Label for setting custom value for link expiry" + }, + "after1Hour": "Depois de 1 Hora", + "after1Day": "Depois de 1 dia", + "after1Week": "Depois de 1 semana", + "after1Month": "Depois de 1 mês", + "after1Year": "Depois de 1 ano", + "manageParticipants": "Gerir", + "albumParticipantsCount": "{count, plural, =0 {Nenhum participante} =1 {1 participante} other {{count} participantes}}", + "@albumParticipantsCount": { + "placeholders": { + "count": { + "type": "int", + "example": "5" + } + }, + "description": "Number of participants in an album, including the album owner." + }, + "collabLinkSectionDescription": "Criar um link para permitir que as pessoas adicionem e visualizem fotos em seu álbum compartilhado sem precisar de um aplicativo Ente ou conta. Ótimo para coletar fotos do evento.", + "collectPhotos": "Coletar fotos", + "collaborativeLink": "Link colaborativo", + "shareWithNonenteUsers": "Compartilhar com usuários que não usam Ente", + "createPublicLink": "Criar link público", + "sendLink": "Enviar link", + "copyLink": "Copiar link", + "linkHasExpired": "O link expirou", + "publicLinkEnabled": "Link público ativado", + "shareALink": "Partilhar um link", + "sharedAlbumSectionDescription": "Criar álbuns compartilhados e colaborativos com outros usuários da Ente, incluindo usuários em planos gratuitos.", + "shareWithPeopleSectionTitle": "{numberOfPeople, plural, one {}=0 {Compartilhe com pessoas específicas} =1 {Compartilhado com 1 pessoa} other {Compartilhado com {numberOfPeople} pessoas}}", + "@shareWithPeopleSectionTitle": { + "placeholders": { + "numberOfPeople": { + "type": "int", + "example": "2" + } + } + }, + "thisIsYourVerificationId": "Este é o seu ID de verificação", + "someoneSharingAlbumsWithYouShouldSeeTheSameId": "Alguém compartilhando álbuns com você deve ver o mesmo ID no seu dispositivo.", + "howToViewShareeVerificationID": "Por favor, peça-lhes para pressionar longamente o endereço de e-mail na tela de configurações e verifique se os IDs de ambos os dispositivos coincidem.", + "thisIsPersonVerificationId": "Este é o ID de verificação de {email}", + "@thisIsPersonVerificationId": { + "placeholders": { + "email": { + "type": "String", + "example": "someone@ente.io" + } + } + }, + "verificationId": "ID de Verificação", + "verifyEmailID": "Verificar e-mail", + "emailNoEnteAccount": "{email} não possui uma conta Ente.\n\nEnvie um convite para compartilhar fotos.", + "shareMyVerificationID": "Aqui está o meu ID de verificação: {verificationID} para ente.io.", + "shareTextConfirmOthersVerificationID": "Ei, você pode confirmar que este é seu ID de verificação do ente.io: {verificationID}", + "somethingWentWrong": "Ocorreu um erro", + "sendInvite": "Enviar convite", + "shareTextRecommendUsingEnte": "Descarregue o Ente para poder partilhar facilmente fotografias e vídeos de qualidade original\n\n\nhttps://ente.io", + "done": "Concluído", + "applyCodeTitle": "Aplicar código", + "enterCodeDescription": "Introduza o código fornecido pelo seu amigo para obter armazenamento gratuito para ambos", + "apply": "Aplicar", + "failedToApplyCode": "Falha ao aplicar código", + "enterReferralCode": "Insira o código de referência", + "codeAppliedPageTitle": "Código aplicado", + "changeYourReferralCode": "Alterar o código de referência", + "change": "Alterar", + "unavailableReferralCode": "Desculpe, este código não está disponível.", + "codeChangeLimitReached": "Desculpe, você atingiu o limite de alterações de código.", + "onlyFamilyAdminCanChangeCode": "Entre em contato com {familyAdminEmail} para alterar o seu código.", + "storageInGB": "{storageAmountInGB} GB", + "claimed": "Reclamado", + "@claimed": { + "description": "Used to indicate storage claimed, like 10GB Claimed" + }, + "details": "Detalhes", + "claimMore": "Reclamar mais!", + "theyAlsoGetXGb": "Eles também recebem {storageAmountInGB} GB", + "freeStorageOnReferralSuccess": "{storageAmountInGB} GB sempre que alguém se inscreve num plano pago e aplica o seu código", + "shareTextReferralCode": "Insira o código de referência: {referralCode} \n\nAplique-o em Configurações → Geral → Indicações para obter {referralStorageInGB} GB gratuitamente após a sua inscrição para um plano pago\n\nhttps://ente.io", + "claimFreeStorage": "Solicitar armazenamento gratuito", + "inviteYourFriends": "Convide os seus amigos", + "failedToFetchReferralDetails": "Não foi possível obter detalhes de indicação. Por favor, tente novamente mais tarde.", + "referralStep1": "1. Envie este código aos seus amigos", + "referralStep2": "2. Eles se inscrevem em um plano pago", + "referralStep3": "3. Ambos ganham {storageInGB} GB* grátis", + "referralsAreCurrentlyPaused": "As referências estão atualmente em pausa", + "youCanAtMaxDoubleYourStorage": "* Você pode duplicar seu armazenamento no máximo", + "claimedStorageSoFar": "{isFamilyMember, select,true {Sua família reinvidicou {storageAmountInGb} GB até então}false {Você reinvindicou {storageAmountInGb} GB até então}other {Você reinvindicou {storageAmountInGb} GB até então!}}", + "@claimedStorageSoFar": { + "placeholders": { + "isFamilyMember": { + "type": "String", + "example": "true" + }, + "storageAmountInGb": { + "type": "int", + "example": "10" + } + } + }, + "faq": "Perguntas Frequentes", + "help": "Ajuda", + "oopsSomethingWentWrong": "Ops, algo deu errado", + "peopleUsingYourCode": "Pessoas que utilizam seu código", + "eligible": "elegível", + "total": "total", + "codeUsedByYou": "Código usado por você", + "freeStorageClaimed": "Armazenamento gratuito reclamado", + "freeStorageUsable": "Armazenamento livre utilizável", + "usableReferralStorageInfo": "O armazenamento disponível é limitado pelo seu plano atual. O excesso de armazenamento reivindicado tornará automaticamente útil quando você atualizar seu plano.", + "removeFromAlbumTitle": "Remover do álbum", + "removeFromAlbum": "Remover do álbum", + "itemsWillBeRemovedFromAlbum": "Os itens selecionados serão removidos deste álbum", + "removeShareItemsWarning": "Alguns dos itens que você está removendo foram adicionados por outras pessoas, e você perderá o acesso a eles", + "addingToFavorites": "Adicionando aos favoritos...", + "removingFromFavorites": "Removendo dos favoritos...", + "sorryCouldNotAddToFavorites": "Desculpe, não foi possível adicionar aos favoritos!", + "sorryCouldNotRemoveFromFavorites": "Desculpe, não foi possível remover dos favoritos!", + "subscribeToEnableSharing": "Você precisa de uma assinatura paga ativa para ativar o compartilhamento.", + "subscribe": "Subscrever", + "canOnlyRemoveFilesOwnedByYou": "", + "deleteSharedAlbum": "Excluir álbum compartilhado?", + "deleteAlbum": "Apagar álbum", + "deleteAlbumDialog": "Eliminar também as fotos (e vídeos) presentes neste álbum de all os outros álbuns de que fazem parte?", + "deleteSharedAlbumDialogBody": "O álbum será apagado para todos\n\nVocê perderá o acesso a fotos compartilhadas neste álbum que são propriedade de outros", + "yesRemove": "Sim, remover", + "creatingLink": "Criar link...", + "removeWithQuestionMark": "Remover?", + "removeParticipantBody": "{userEmail} será removido deste álbum compartilhado\n\nQuaisquer fotos adicionadas por elas também serão removidas do álbum", + "keepPhotos": "Manter fotos", + "deletePhotos": "Apagar fotos", + "inviteToEnte": "Convidar para Ente", + "removePublicLink": "Remover link público", + "disableLinkMessage": "Isto removerá o link público para acessar \"{albumName}\".", + "sharing": "Partilhar...", + "youCannotShareWithYourself": "Não podes partilhar contigo mesmo", + "archive": "............", + "createAlbumActionHint": "Pressione e segure para selecionar fotos e clique em + para criar um álbum", + "importing": "A importar...", + "failedToLoadAlbums": "Falha ao carregar álbuns", + "hidden": "Oculto", + "authToViewYourHiddenFiles": "Por favor, autentique para ver seus arquivos ocultos", + "trash": "Lixo", + "uncategorized": "Sem categoria", + "videoSmallCase": "vídeo", + "photoSmallCase": "foto", + "singleFileDeleteHighlight": "Será eliminado de todos os álbuns.", + "singleFileInBothLocalAndRemote": "Este {fileType} encontra-se tanto no Ente como no seu dispositivo.", + "singleFileInRemoteOnly": "Este {fileType} será eliminado do Ente.", + "singleFileDeleteFromDevice": "Este {fileType} será eliminado do seu dispositivo.", + "deleteFromEnte": "Apagar do Ente", + "yesDelete": "Sim, apagar", + "movedToTrash": "Mover para o lixo", + "deleteFromDevice": "Apagar do dispositivo", + "deleteFromBoth": "Apagar de ambos", + "newAlbum": "Novo álbum", + "albums": "Álbuns", + "selectedPhotos": "{count} selecionado(s)", + "@selectedPhotos": { + "description": "Display the number of selected photos", + "type": "text", + "placeholders": { + "count": { + "example": "5", + "type": "int" + } + } + }, + "selectedPhotosWithYours": "{count} selecionado(s) ({yourCount} seus)", + "@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": "Definições avançadas", + "@advancedSettings": { + "description": "The text to display in the advanced settings section" + }, + "photoGridSize": "Tamanho da grelha de fotos", + "manageDeviceStorageDesc": "Reveja e limpe o armazenamento de cache local.", + "machineLearning": "Aprendizagem automática", + "mlConsent": "Ativar aprendizagem automática", + "mlConsentTitle": "Ativar aprendizagem automática?", + "mlConsentDescription": "Se ativar a aprendizagem automática, o Ente extrairá informações como a geometria do rosto de ficheiros, incluindo os partilhados consigo.\n\n\nIsto acontecerá no seu dispositivo e todas as informações biométricas geradas serão encriptadas de ponta a ponta.", + "mlConsentPrivacy": "Por favor, clique aqui para mais detalhes sobre este recurso na nossa política de privacidade", + "mlConsentConfirmation": "Eu entendo, e desejo ativar a aprendizagem automática", + "magicSearch": "Pesquisa mágica", + "discover": "Descobrir", + "@discover": { + "description": "The text to display for the discover section under which we show receipts, screenshots, sunsets, greenery, etc." + }, + "discover_identity": "Identidade", + "discover_screenshots": "Capturas de ecrã", + "discover_receipts": "Recibos", + "discover_notes": "Notas", + "discover_memes": "Memes", + "discover_visiting_cards": "Cartões de visita", + "discover_babies": "Bebés", + "discover_pets": "Animais de estimação", + "discover_selfies": "Selfies", + "discover_wallpapers": "Papéis de parede", + "discover_food": "Comida", + "discover_celebrations": "Comemorações", + "discover_sunset": "Pôr do sol", + "discover_hills": "Colinas", + "discover_greenery": "Vegetação", + "mlIndexingDescription": "Tenha em atenção que a aprendizagem automática resultará numa maior utilização da largura de banda e da bateria até que todos os itens sejam indexados. Considere utilizar a aplicação de ambiente de trabalho para uma indexação mais rápida, todos os resultados serão sincronizados automaticamente.", + "loadingModel": "Transferindo modelos...", + "waitingForWifi": "Aguardando Wi-Fi...", + "status": "Status", + "indexedItems": "Itens indexados", + "pendingItems": "Itens pendentes", + "clearIndexes": "Limpar índices", + "selectFoldersForBackup": "Selecionar pastas para cópia de segurança", + "selectedFoldersWillBeEncryptedAndBackedUp": "As pastas selecionadas serão encriptadas e guardadas como cópia de segurança", + "unselectAll": "Desmarcar tudo", + "selectAll": "Selecionar tudo", + "skip": "Pular", + "updatingFolderSelection": "Atualizando seleção de pasta...", + "itemCount": "{count, plural, one{{count} item} other{{count} itens}}", + "deleteItemCount": "{count, plural, =1 {Apagar {count} item} other {Apagar {count} itens}}", + "duplicateItemsGroup": "{count} arquivos, {formattedSize} cada", + "@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": "Mostrar memórias", + "yearsAgo": "{count, plural, one{{count} ano atrás} other{{count} anos atrás}}", + "backupSettings": "Definições da cópia de segurança", + "backupStatus": "Status da cópia de segurança", + "backupStatusDescription": "Os itens que foram salvos com segurança aparecerão aqui", + "backupOverMobileData": "Cópia de segurança através dos dados móveis", + "backupVideos": "Cópia de segurança de vídeos", + "disableAutoLock": "Desativar bloqueio automático", + "deviceLockExplanation": "Desativar o bloqueio do ecrã do dispositivo quando o Ente estiver em primeiro plano e houver uma cópia de segurança em curso. Normalmente, isto não é necessário, mas pode ajudar a que os grandes carregamentos e as importações iniciais de grandes bibliotecas sejam concluídos mais rapidamente.", + "about": "Sobre", + "weAreOpenSource": "Nós somos de código aberto!", + "privacy": "Privacidade", + "terms": "Termos", + "checkForUpdates": "Procurar atualizações", + "checkStatus": "Verificar status", + "checking": "A verificar...", + "youAreOnTheLatestVersion": "Está a utilizar a versão mais recente", + "account": "Conta", + "manageSubscription": "Gerir subscrição", + "authToChangeYourEmail": "Por favor, autentique-se para alterar o seu e-mail", + "changePassword": "Alterar palavra-passe", + "authToChangeYourPassword": "Por favor, autentique-se para alterar a palavra-passe", + "emailVerificationToggle": "Verificação por e-mail", + "authToChangeEmailVerificationSetting": "Por favor, autentique-se para alterar a verificação de e-mail", + "exportYourData": "Exportar os seus dados", + "logout": "Terminar sessão", + "authToInitiateAccountDeletion": "Autentique-se para iniciar a eliminação da conta", + "areYouSureYouWantToLogout": "Tem certeza que deseja terminar a sessão?", + "yesLogout": "Sim, terminar sessão", + "aNewVersionOfEnteIsAvailable": "Está disponível uma nova versão do Ente.", + "update": "Atualizar", + "installManually": "Instalar manualmente", + "criticalUpdateAvailable": "Atualização crítica disponível", + "updateAvailable": "Atualização disponível", + "ignoreUpdate": "Ignorar", + "downloading": "A transferir...", + "cannotDeleteSharedFiles": "Não é possível eliminar ficheiros partilhados", + "theDownloadCouldNotBeCompleted": "Não foi possível concluir o download.", + "retry": "Tentar novamente", + "backedUpFolders": "Pastas com cópia de segurança", + "backup": "Cópia de segurança", + "freeUpDeviceSpace": "Libertar espaço no dispositivo", + "freeUpDeviceSpaceDesc": "Poupe espaço no seu dispositivo limpando ficheiros dos quais já foi feita uma cópia de segurança.", + "allClear": "✨ Tudo limpo", + "noDeviceThatCanBeDeleted": "Você não tem arquivos neste dispositivo que possam ser apagados", + "removeDuplicates": "Remover duplicados", + "removeDuplicatesDesc": "Rever e remover ficheiros que sejam duplicados exatos.", + "viewLargeFiles": "Ficheiros grandes", + "viewLargeFilesDesc": "Ver os ficheiros que estão a consumir a maior quantidade de armazenamento.", + "noDuplicates": "✨ Sem duplicados", + "success": "Sucesso", + "rateUs": "Avalie-nos", + "remindToEmptyDeviceTrash": "Esvazie também a opção “Eliminados recentemente” em “Definições” -> “Armazenamento” para reclamar o espaço libertado", + "youHaveSuccessfullyFreedUp": "Você liberou {storageSaved} com sucesso!", + "@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": "Esvazie também o seu “Lixo” para reivindicar o espaço libertado", + "sparkleSuccess": "✨ Sucesso", + "duplicateFileCountWithStorageSaved": "Você limpou {count, plural, one{{count} arquivo duplicado} other{{count} arquivos duplicados}}, guardando ({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": "Planos familiares", + "referrals": "Referências", + "notifications": "Notificações", + "sharedPhotoNotifications": "Novas fotos partilhadas", + "sharedPhotoNotificationsExplanation": "Receber notificações quando alguém adiciona uma foto a um álbum partilhado do qual faz parte", + "advanced": "Avançado", + "general": "Geral", + "security": "Segurança", + "authToViewYourRecoveryKey": "Por favor, autentique-se para ver a chave de recuperação", + "twofactor": "Dois fatores", + "authToConfigureTwofactorAuthentication": "Por favor, autentique para configurar a autenticação de dois fatores", + "lockscreen": "Ecrã de bloqueio", + "authToChangeLockscreenSetting": "Por favor, autentique-se para alterar a configuração da tela do ecrã de bloqueio", + "viewActiveSessions": "Ver sessões ativas", + "authToViewYourActiveSessions": "Por favor, autentique-se para ver as suas sessões ativas", + "disableTwofactor": "Desativar autenticação de dois fatores", + "confirm2FADisable": "Tem a certeza de que pretende desativar a autenticação de dois fatores?", + "no": "Não", + "yes": "Sim", + "social": "Social", + "rateUsOnStore": "Avalie-nos em {storeName}", + "blog": "Blog", + "merchandise": "Produtos", + "twitter": "Twitter", + "mastodon": "Mastodon", + "matrix": "Matrix", + "discord": "Discord", + "reddit": "Reddit", + "yourStorageDetailsCouldNotBeFetched": "Não foi possível obter os seus dados de armazenamento", + "reportABug": "Reporte um bug", + "reportBug": "Reportar bug", + "suggestFeatures": "Sugerir recursos", + "support": "Suporte", + "theme": "Tema", + "lightTheme": "Claro", + "darkTheme": "Escuro", + "systemTheme": "Sistema", + "freeTrial": "Teste grátis", + "selectYourPlan": "Selecione o seu plano", + "enteSubscriptionPitch": "O Ente preserva as suas memórias, para que estejam sempre disponíveis, mesmo que perca o seu dispositivo.", + "enteSubscriptionShareWithFamily": "Sua família também pode ser adicionada ao seu plano.", + "currentUsageIs": "O uso atual é ", + "@currentUsageIs": { + "description": "This text is followed by storage usage", + "examples": { + "0": "Current usage is 1.2 GB" + }, + "type": "text" + }, + "faqs": "Perguntas frequentes", + "renewsOn": "A subscrição é renovada em {endDate}", + "freeTrialValidTill": "Teste gratuito válido até {endDate}", + "validTill": "Válido até {endDate}", + "addOnValidTill": "Seu addon {storageAmount} é válido até o momento {endDate}", + "playStoreFreeTrialValidTill": "Teste gratuito válido até {endDate}.\nVocê pode escolher um plano pago depois.", + "subWillBeCancelledOn": "A sua subscrição será cancelada em {endDate}", + "subscription": "Subscrição", + "paymentDetails": "Detalhes de pagamento", + "manageFamily": "Gerir família", + "contactToManageSubscription": "Contacte-nos em support@ente.io para gerir a sua subscrição {provider}", + "renewSubscription": "Renovar subscrição", + "cancelSubscription": "Cancelar subscrição", + "areYouSureYouWantToRenew": "Tem a certeza de que pretende renovar?", + "yesRenew": "Sim, Renovar", + "areYouSureYouWantToCancel": "Tem a certeza de que quer cancelar?", + "yesCancel": "Sim, cancelar", + "failedToRenew": "Falhou ao renovar", + "failedToCancel": "Falhou ao cancelar", + "twoMonthsFreeOnYearlyPlans": "2 meses grátis em planos anuais", + "monthly": "Mensal", + "@monthly": { + "description": "The text to display for monthly plans", + "type": "text" + }, + "yearly": "Anual", + "@yearly": { + "description": "The text to display for yearly plans", + "type": "text" + }, + "confirmPlanChange": "Confirmar alteração de plano", + "areYouSureYouWantToChangeYourPlan": "Tem a certeza de que pretende alterar o seu plano?", + "youCannotDowngradeToThisPlan": "Não é possível fazer o downgrade para este plano", + "cancelOtherSubscription": "Por favor, cancele primeiro a sua subscrição existente de {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": "Opcional, o mais breve que quiser...", + "send": "Enviar", + "askCancelReason": "A sua subscrição foi cancelada. Gostaria de partilhar o motivo?", + "thankYouForSubscribing": "Obrigado pela sua subscrição!", + "yourPurchaseWasSuccessful": "Sua compra foi realizada com sucesso", + "yourPlanWasSuccessfullyUpgraded": "O seu plano foi atualizado com sucesso", + "yourPlanWasSuccessfullyDowngraded": "O seu plano foi rebaixado com sucesso", + "yourSubscriptionWasUpdatedSuccessfully": "A sua subscrição foi actualizada com sucesso", + "googlePlayId": "ID do Google Play", + "appleId": "ID da Apple", + "playstoreSubscription": "Subscrição da PlayStore", + "appstoreSubscription": "Subscrição da AppStore", + "subAlreadyLinkedErrMessage": "Seu {id} já está vinculado a outra conta Ente.\nSe você gostaria de usar seu {id} com esta conta, por favor contate nosso suporte''", + "visitWebToManage": "Visite web.ente.io para gerir a sua subscrição", + "couldNotUpdateSubscription": "Não foi possível atualizar a subscrição", + "pleaseContactSupportAndWeWillBeHappyToHelp": "Por favor, entre em contato com support@ente.io e nós ficaremos felizes em ajudar!", + "paymentFailed": "O pagamento falhou", + "paymentFailedTalkToProvider": "Por favor, fale com o suporte {providerName} se você foi cobrado", + "@paymentFailedTalkToProvider": { + "description": "The text to display when the payment failed", + "type": "text", + "placeholders": { + "providerName": { + "example": "AppStore|PlayStore", + "type": "String" + } + } + }, + "continueOnFreeTrial": "Continuar em teste gratuito", + "areYouSureYouWantToExit": "Tem certeza de que deseja sair?", + "thankYou": "Obrigado", + "failedToVerifyPaymentStatus": "Falha ao verificar status do pagamento", + "pleaseWaitForSometimeBeforeRetrying": "Por favor, aguarde algum tempo antes de tentar novamente", + "paymentFailedMessage": "Infelizmente o seu pagamento falhou. Entre em contato com o suporte e nós ajudaremos você!", + "youAreOnAFamilyPlan": "Você está em um plano familiar!", + "contactFamilyAdmin": "Contacte {familyAdminEmail} para gerir a sua subscrição", + "leaveFamily": "Deixar plano famíliar", + "areYouSureThatYouWantToLeaveTheFamily": "Tem certeza que deseja sair do plano familiar?", + "leave": "Sair", + "rateTheApp": "Avaliar aplicação", + "startBackup": "Iniciar cópia de segurança", + "noPhotosAreBeingBackedUpRightNow": "No momento não há backup de fotos sendo feito", + "preserveMore": "Preservar mais", + "grantFullAccessPrompt": "Por favor, permita o acesso a todas as fotos nas definições do aplicativo", + "openSettings": "Abrir Definições", + "selectMorePhotos": "Selecionar mais fotos", + "existingUser": "Utilizador existente", + "privateBackups": "Backups privados", + "forYourMemories": "para suas memórias", + "endtoendEncryptedByDefault": "Criptografia de ponta a ponta por padrão", + "safelyStored": "Armazenado com segurança", + "atAFalloutShelter": "em um abrigo avançado", + "designedToOutlive": "Feito para ter longevidade", + "available": "Disponível", + "everywhere": "em todo o lado", + "androidIosWebDesktop": "Android, iOS, Web, Desktop", + "mobileWebDesktop": "Mobile, Web, Desktop", + "newToEnte": "Novo no Ente", + "pleaseLoginAgain": "Por favor, inicie sessão novamente", + "autoLogoutMessage": "Devido a uma falha técnica, a sua sessão foi encerrada. Pedimos desculpas pelo incómodo.", + "yourSubscriptionHasExpired": "A sua subscrição expirou", + "storageLimitExceeded": "Limite de armazenamento excedido", + "upgrade": "Atualizar", + "raiseTicket": "Abrir ticket", + "@raiseTicket": { + "description": "Button text for raising a support tickets in case of unhandled errors during backup", + "type": "text" + }, + "backupFailed": "Backup falhou", + "couldNotBackUpTryLater": "Não foi possível fazer o backup de seus dados.\nTentaremos novamente mais tarde.", + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": "Ente pode criptografar e preservar arquivos apenas se você conceder acesso a eles", + "pleaseGrantPermissions": "Por favor, conceda as permissões", + "grantPermission": "Conceder permissão", + "privateSharing": "Partilha privada", + "shareOnlyWithThePeopleYouWant": "Partilhar apenas com as pessoas que deseja", + "usePublicLinksForPeopleNotOnEnte": "Usar links públicos para pessoas que não estão no Ente", + "allowPeopleToAddPhotos": "Permitir que as pessoas adicionem fotos", + "shareAnAlbumNow": "Partilhar um álbum", + "collectEventPhotos": "Coletar fotos do evento", + "sessionExpired": "Sessão expirada", + "loggingOut": "Terminar a sessão...", + "@onDevice": { + "description": "The text displayed above folders/albums stored on device", + "type": "text" + }, + "onDevice": "No dispositivo", + "@onEnte": { + "description": "The text displayed above albums backed up to Ente", + "type": "text" + }, + "onEnte": "Em ente", + "name": "Nome", + "newest": "Recentes", + "lastUpdated": "Última atualização", + "deleteEmptyAlbums": "Apagar álbuns vazios", + "deleteEmptyAlbumsWithQuestionMark": "Apagar álbuns vazios?", + "deleteAlbumsDialogBody": "Esta ação elimina todos os álbuns vazios. Isto é útil quando pretende reduzir a confusão na sua lista de álbuns.", + "deleteProgress": "Apagar {currentlyDeleting} / {totalCount}", + "genericProgress": "Processando {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": "Eliminar permanentemente", + "canOnlyCreateLinkForFilesOwnedByYou": "Só pode criar um link para arquivos pertencentes a você", + "publicLinkCreated": "Link público criado", + "youCanManageYourLinksInTheShareTab": "Pode gerir as suas ligações no separador partilhar.", + "linkCopiedToClipboard": "Link copiado para a área de transferência", + "restore": "Restaurar", + "@restore": { + "description": "Display text for an action which triggers a restore of item from trash", + "type": "text" + }, + "moveToAlbum": "Mover para álbum", + "unhide": "Mostrar", + "unarchive": "Desarquivar", + "favorite": "Favorito", + "removeFromFavorite": "Remover dos favoritos", + "shareLink": "Partilhar link", + "createCollage": "Criar coleção", + "saveCollage": "Guardar colagem", + "collageSaved": "Colagem guardada na galeria", + "collageLayout": "Layout", + "addToEnte": "Adicionar ao Ente", + "addToAlbum": "Adicionar ao álbum", + "delete": "Apagar", + "hide": "Ocultar", + "share": "Partilhar", + "unhideToAlbum": "Mostrar para o álbum", + "restoreToAlbum": "Restaurar para álbum", + "createOrSelectAlbum": "Criar ou selecionar álbum", + "selectAlbum": "Selecionar álbum", + "searchByAlbumNameHint": "Nome do álbum", + "albumTitle": "Título do álbum", + "enterAlbumName": "Introduzir nome do álbum", + "restoringFiles": "Restaurar arquivos...", + "movingFilesToAlbum": "Mover arquivos para o álbum...", + "unhidingFilesToAlbum": "Desocultar ficheiros para o álbum", + "canNotUploadToAlbumsOwnedByOthers": "Não é possível fazer upload para álbuns pertencentes a outros", + "uploadingFilesToAlbum": "Enviar ficheiros para o álbum...", + "addedSuccessfullyTo": "Adicionado com sucesso a {albumName}", + "movedSuccessfullyTo": "Movido com sucesso para {albumName}", + "thisAlbumAlreadyHDACollaborativeLink": "Este álbum já tem um link colaborativo", + "collaborativeLinkCreatedFor": "Link colaborativo criado para {albumName}", + "askYourLovedOnesToShare": "Peça aos seus entes queridos para partilharem", + "invite": "Convidar", + "shareYourFirstAlbum": "Partilhe o seu primeiro álbum", + "sharedWith": "Partilhado com {emailIDs}", + "sharedWithMe": "Partilhado comigo", + "sharedByMe": "Partilhado por mim", + "doubleYourStorage": "Duplicar o seu armazenamento", + "referFriendsAnd2xYourPlan": "Recomende amigos e duplique o seu plano", + "shareAlbumHint": "Abra um álbum e toque no botão de partilha no canto superior direito para partilhar", + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": "Os itens mostram o número de dias restantes antes da eliminação permanente", + "trashDaysLeft": "{count, plural, =0 {Brevemente} =1 {1 dia} other {{count} dias}}", + "@trashDaysLeft": { + "description": "Text to indicate number of days remaining before permanent deletion", + "placeholders": { + "count": { + "example": "1|2|3", + "type": "int" + } + } + }, + "deleteAll": "Apagar tudo", + "renameAlbum": "Renomear álbum", + "convertToAlbum": "Converter para álbum", + "setCover": "Definir capa", + "@setCover": { + "description": "Text to set cover photo for an album" + }, + "sortAlbumsBy": "Ordenar por", + "sortNewestFirst": "Mais recentes primeiro", + "sortOldestFirst": "Mais antigos primeiro", + "rename": "Renomear", + "leaveSharedAlbum": "Sair do álbum compartilhado?", + "leaveAlbum": "Sair do álbum", + "photosAddedByYouWillBeRemovedFromTheAlbum": "As fotos adicionadas por si serão removidas do álbum", + "youveNoFilesInThisAlbumThatCanBeDeleted": "Não existem ficheiros neste álbum que possam ser eliminados", + "youDontHaveAnyArchivedItems": "Não tem nenhum item arquivado.", + "ignoredFolderUploadReason": "Alguns ficheiros deste álbum não podem ser carregados porque foram anteriormente eliminados do Ente.", + "resetIgnoredFiles": "Repor ficheiros ignorados", + "deviceFilesAutoUploading": "Os ficheiros adicionados a este álbum de dispositivo serão automaticamente transferidos para o Ente.", + "turnOnBackupForAutoUpload": "Ative o backup para enviar automaticamente arquivos adicionados a esta pasta do dispositivo para o Ente.", + "noHiddenPhotosOrVideos": "Sem fotos ou vídeos ocultos", + "toHideAPhotoOrVideo": "Para ocultar uma foto ou um vídeo", + "openTheItem": "• Abra o item", + "clickOnTheOverflowMenu": "• Clique no menu adicional", + "click": "Clique", + "nothingToSeeHere": "Nada para ver aqui! 👀", + "unarchiveAlbum": "Desarquivar álbum", + "archiveAlbum": "Arquivar álbum", + "calculating": "Calcular...", + "pleaseWaitDeletingAlbum": "Por favor aguarde, apagar o álbum", + "searchByExamples": "• Nomes de álbuns (ex: \"Câmera\")\n• Tipos de arquivos (ex.: \"Vídeos\", \".gif\")\n• Anos e meses (e.. \"2022\", \"Janeiro\")\n• Feriados (por exemplo, \"Natal\")\n• Descrições de fotos (por exemplo, \"#divertido\")", + "youCanTrySearchingForADifferentQuery": "Pode tentar pesquisar uma consulta diferente.", + "noResultsFound": "Não foram encontrados resultados", + "addedBy": "Adicionado por {emailOrName}", + "loadingExifData": "Carregando dados EXIF...", + "viewAllExifData": "Ver todos os dados EXIF", + "noExifData": "Sem dados EXIF", + "thisImageHasNoExifData": "Esta imagem não tem dados exif", + "exif": "EXIF", + "noResults": "Nenhum resultado", + "weDontSupportEditingPhotosAndAlbumsThatYouDont": "Não suportamos a edição de fotos e álbuns que ainda não possui", + "failedToFetchOriginalForEdit": "Falha ao obter original para edição", + "close": "Fechar", + "setAs": "Definir como", + "fileSavedToGallery": "Arquivo guardado na galeria", + "filesSavedToGallery": "Arquivos guardados na galeria", + "fileFailedToSaveToGallery": "Falha ao guardar o ficheiro na galeria", + "download": "Download", + "pressAndHoldToPlayVideo": "Pressione e segure para reproduzir o vídeo", + "pressAndHoldToPlayVideoDetailed": "Pressione e segure na imagem para reproduzir o vídeo", + "downloadFailed": "Falha no download", + "deduplicateFiles": "Arquivos duplicados", + "deselectAll": "Desmarcar tudo", + "reviewDeduplicateItems": "Reveja e elimine os itens que considera serem duplicados.", + "clubByCaptureTime": "Agrupar por tempo de captura", + "clubByFileName": "Agrupar pelo nome de arquivo", + "count": "Contagem", + "totalSize": "Tamanho total", + "longpressOnAnItemToViewInFullscreen": "Pressione e segure em um item para ver em tela cheia", + "decryptingVideo": "Descriptografando vídeo...", + "authToViewYourMemories": "Por favor, autentique-se para ver suas memórias", + "unlock": "Desbloquear", + "freeUpSpace": "Libertar espaço", + "filesBackedUpInAlbum": "{count, plural, one {1 arquivo} other {{formattedNumber} arquivos}} neste álbum teve um backup seguro", + "@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 arquivo} other {{formattedNumber} arquivos}} neste dispositivo teve um backup seguro", + "@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" + } + } + }, + "freeUpAmount": "Libertar {sizeInMBorGB}", + "thisEmailIsAlreadyInUse": "Este email já está em uso", + "incorrectCode": "Código incorrecto", + "authenticationFailedPleaseTryAgain": "Falha na autenticação, por favor tente novamente", + "verificationFailedPleaseTryAgain": "Falha na verificação, por favor tente novamente", + "authenticating": "A Autenticar...", + "authenticationSuccessful": "Autenticação bem sucedida!", + "incorrectRecoveryKey": "Chave de recuperação incorreta", + "theRecoveryKeyYouEnteredIsIncorrect": "A chave de recuperação inserida está incorreta", + "twofactorAuthenticationSuccessfullyReset": "Autenticação de dois fatores redefinida com êxito", + "pleaseVerifyTheCodeYouHaveEntered": "Por favor, verifique se o código que você inseriu", + "pleaseContactSupportIfTheProblemPersists": "Por favor, contate o suporte se o problema persistir", + "twofactorAuthenticationHasBeenDisabled": "A autenticação de dois fatores foi desativada", + "sorryTheCodeYouveEnteredIsIncorrect": "Desculpe, o código inserido está incorreto", + "yourVerificationCodeHasExpired": "O seu código de verificação expirou", + "emailChangedTo": "Email alterado para {newEmail}", + "verifying": "A verificar…", + "disablingTwofactorAuthentication": "Desativar a autenticação de dois factores...", + "allMemoriesPreserved": "Todas as memórias preservadas", + "loadingGallery": "Carregando galeria...", + "syncing": "Sincronizando...", + "encryptingBackup": "Criptografando backup...", + "syncStopped": "Sincronização interrompida", + "syncProgress": "{completed}/{total} memórias preservadas", + "uploadingMultipleMemories": "Preservar {count} memórias...", + "@uploadingMultipleMemories": { + "description": "Text to tell user how many memories are being preserved", + "placeholders": { + "count": { + "type": "String" + } + } + }, + "uploadingSingleMemory": "Preservar 1 memória...", + "@syncProgress": { + "description": "Text to tell user how many memories have been preserved", + "placeholders": { + "completed": { + "type": "String" + }, + "total": { + "type": "String" + } + } + }, + "archiving": "Arquivar...", + "unarchiving": "Desarquivar...", + "successfullyArchived": "Arquivado com sucesso", + "successfullyUnarchived": "Desarquivado com sucesso", + "renameFile": "Renomear arquivo", + "enterFileName": "Inserir nome do arquivo", + "filesDeleted": "Arquivos apagados", + "selectedFilesAreNotOnEnte": "Os arquivos selecionados não estão no Ente", + "thisActionCannotBeUndone": "Esta ação não pode ser desfeita", + "emptyTrash": "Esvaziar lixo?", + "permDeleteWarning": "Todos os itens no lixo serão permanentemente eliminados\n\n\nEsta ação não pode ser anulada", + "empty": "Esvaziar", + "couldNotFreeUpSpace": "Não foi possível libertar espaço", + "permanentlyDeleteFromDevice": "Apagar permanentemente do dispositivo?", + "someOfTheFilesYouAreTryingToDeleteAre": "Alguns dos ficheiros que está a tentar eliminar só estão disponíveis no seu dispositivo e não podem ser recuperados se forem eliminados", + "theyWillBeDeletedFromAllAlbums": "Serão eliminados de todos os álbuns.", + "someItemsAreInBothEnteAndYourDevice": "Alguns itens estão tanto no Ente como no seu dispositivo.", + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": "Os itens selecionados serão eliminados de todos os álbuns e movidos para o lixo.", + "theseItemsWillBeDeletedFromYourDevice": "Estes itens serão eliminados do seu dispositivo.", + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Parece que algo correu mal. Por favor, tente novamente após algum tempo. Se o erro persistir, contacte a nossa equipa de apoio.", + "error": "Erro", + "tempErrorContactSupportIfPersists": "Parece que algo correu mal. Por favor, tente novamente mais tarde. Se o erro persistir, entre em contacto com a nossa equipa de suporte.", + "networkHostLookUpErr": "Não foi possível estabelecer ligação ao Ente. Verifique as definições de rede e contacte o serviço de apoio se o erro persistir.", + "networkConnectionRefusedErr": "Não foi possível conectar ao Ente, tente novamente após algum tempo. Se o erro persistir, entre em contato com o suporte.", + "cachedData": "Dados em cache", + "clearCaches": "Limpar cache", + "remoteImages": "Imagens remotas", + "remoteVideos": "Vídeos remotos", + "remoteThumbnails": "Miniaturas remotas", + "pendingSync": "Sincronização pendente", + "localGallery": "Galeria local", + "todaysLogs": "Logs de hoje", + "viewLogs": "Ver logs", + "logsDialogBody": "Isto enviará os registos para nos ajudar a resolver o problema. Tenha em atenção que os nomes dos ficheiros serão incluídos para ajudar a localizar problemas com ficheiros específicos.", + "preparingLogs": "Preparando logs...", + "emailYourLogs": "Enviar logs por e-mail", + "pleaseSendTheLogsTo": "Por favor, envie os logs para \n{toEmail}", + "copyEmailAddress": "Copiar endereço de email", + "exportLogs": "Exportar logs", + "pleaseEmailUsAt": "Por favor, envie-nos um e-mail para {toEmail}", + "dismiss": "Rejeitar", + "didYouKnow": "Você sabia?", + "loadingMessage": "Carregar as suas fotos...", + "loadMessage1": "Pode partilhar a sua subscrição com a sua família", + "loadMessage2": "Nós preservamos mais de 30 milhões de memórias até agora", + "loadMessage3": "Mantemos 3 cópias dos seus dados, uma em um abrigo subterrâneo", + "loadMessage4": "Todos os nossos aplicativos são de código aberto", + "loadMessage5": "Nosso código-fonte e criptografia foram auditadas externamente", + "loadMessage6": "Deixar o álbum partilhado?", + "loadMessage7": "Nossos aplicativos móveis são executados em segundo plano para criptografar e fazer backup de quaisquer novas fotos que você clique", + "loadMessage8": "web.ente.io tem um envio mais rápido", + "loadMessage9": "Nós usamos Xchacha20Poly1305 para criptografar seus dados com segurança", + "photoDescriptions": "Descrições das fotos", + "fileTypesAndNames": "Tipos de arquivo e nomes", + "location": "Localização", + "moments": "Momentos", + "searchFaceEmptySection": "As pessoas serão mostradas aqui quando a indexação estiver concluída", + "searchDatesEmptySection": "Pesquisar por data, mês ou ano", + "searchLocationEmptySection": "Fotos de grupo que estão sendo tiradas em algum raio da foto", + "searchPeopleEmptySection": "Convide pessoas e verá todas as fotos partilhadas por elas aqui", + "searchAlbumsEmptySection": "Álbuns", + "searchFileTypesAndNamesEmptySection": "Tipos de arquivo e nomes", + "searchCaptionEmptySection": "Adicione descrições como \"#trip\" nas informações das fotos para encontrá-las aqui rapidamente", + "language": "Idioma", + "selectLanguage": "Selecionar Idioma", + "locationName": "Nome da localização", + "addLocation": "Adicionar localização", + "groupNearbyPhotos": "Agrupar fotos próximas", + "kiloMeterUnit": "km", + "addLocationButton": "Adicionar", + "radius": "Raio", + "locationTagFeatureDescription": "Uma etiqueta de localização agrupa todas as fotos que foram tiradas num determinado raio de uma fotografia", + "galleryMemoryLimitInfo": "Até 1000 memórias mostradas na galeria", + "save": "Guardar", + "centerPoint": "Ponto central", + "pickCenterPoint": "Escolha o ponto central", + "useSelectedPhoto": "Utilizar foto selecionada", + "resetToDefault": "Redefinir para o padrão", + "@resetToDefault": { + "description": "Button text to reset cover photo to default" + }, + "edit": "Editar", + "deleteLocation": "Apagar localização", + "rotateLeft": "Rodar para a esquerda", + "flip": "Inverter", + "rotateRight": "Rodar para a direita", + "saveCopy": "Guardar cópia", + "light": "Claro", + "color": "Cor", + "yesDiscardChanges": "Sim, rejeitar alterações", + "doYouWantToDiscardTheEditsYouHaveMade": "Pretende eliminar as edições que efectuou?", + "saving": "A gravar...", + "editsSaved": "Edição guardada", + "oopsCouldNotSaveEdits": "Oops, não foi possível guardar as edições", + "distanceInKMUnit": "km", + "@distanceInKMUnit": { + "description": "Unit for distance in km" + }, + "dayToday": "Hoje", + "dayYesterday": "Ontem", + "storage": "Armazenamento", + "usedSpace": "Espaço utilizado", + "storageBreakupFamily": "Família", + "storageBreakupYou": "Tu", + "@storageBreakupYou": { + "description": "Label to indicate how much storage you are using when you are part of a family plan" + }, + "storageUsageInfo": "{usedAmount} {usedStorageUnit} de {totalAmount} {totalStorageUnit} usado", + "@storageUsageInfo": { + "description": "Example: 1.2 GB of 2 GB used or 100 GB or 2TB used" + }, + "availableStorageSpace": "{freeAmount} {storageUnit} grátis", + "appVersion": "Versão: {versionValue}", + "verifyIDLabel": "Verificar", + "fileInfoAddDescHint": "Acrescente uma descrição...", + "editLocationTagTitle": "Editar localização", + "setLabel": "Definir", + "@setLabel": { + "description": "Label of confirm button to add a new custom radius to the radius selector of a location tag" + }, + "setRadius": "Definir raio", + "familyPlanPortalTitle": "Família", + "familyPlanOverview": "Adicione 5 membros da família ao seu plano existente sem pagar mais.\n\n\nCada membro tem o seu próprio espaço privado e não pode ver os ficheiros dos outros, a menos que sejam partilhados.\n\n\nOs planos familiares estão disponíveis para clientes que tenham uma subscrição paga do Ente.\n\n\nSubscreva agora para começar!", + "androidBiometricHint": "Verificar identidade", + "@androidBiometricHint": { + "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." + }, + "androidBiometricNotRecognized": "Não reconhecido. Tente novamente.", + "@androidBiometricNotRecognized": { + "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." + }, + "androidBiometricSuccess": "Sucesso", + "@androidBiometricSuccess": { + "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." + }, + "androidCancelButton": "Cancelar", + "@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": "Autenticação necessária", + "@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": "Biometria necessária", + "@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." + }, + "androidDeviceCredentialsRequiredTitle": "Credenciais do dispositivo são necessárias", + "@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": "Credenciais do dispositivo necessárias", + "@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": "Ir para as definições", + "@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": "A autenticação biométrica não está configurada no seu dispositivo. Vá a “Definições > Segurança” para adicionar a autenticação biométrica.", + "@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": "A autenticação biométrica está desativada. Por favor, bloqueie e desbloqueie o ecrã para ativá-la.", + "@iOSLockOut": { + "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." + }, + "iOSGoToSettingsDescription": "A autenticação biométrica não está configurada no seu dispositivo. Active o Touch ID ou o Face ID no seu telemóvel.", + "@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": "Contribuidores do OpenStreetMap", + "hostedAtOsmFrance": "Hospedado na OSM France", + "map": "Mapa", + "@map": { + "description": "Label for the map view" + }, + "maps": "Mapas", + "enableMaps": "Ativar mapas", + "enableMapsDesc": "Esta opção mostra as suas fotografias num mapa do mundo.\n\n\nEste mapa é alojado pelo Open Street Map e as localizações exactas das suas fotografias nunca são partilhadas.\n\n\nPode desativar esta funcionalidade em qualquer altura nas Definições.", + "quickLinks": "Links rápidos", + "selectItemsToAdd": "Selecionar itens para adicionar", + "addSelected": "Adicionar selecionados", + "addFromDevice": "Adicionar a partir do dispositivo", + "addPhotos": "Adicionar fotos", + "noPhotosFoundHere": "Nenhuma foto encontrada aqui", + "zoomOutToSeePhotos": "Diminuir o zoom para ver fotos", + "noImagesWithLocation": "Nenhuma imagem com localização", + "unpinAlbum": "Desafixar álbum", + "pinAlbum": "Fixar álbum", + "create": "Criar", + "viewAll": "Ver tudo", + "nothingSharedWithYouYet": "Ainda nada partilhado consigo", + "noAlbumsSharedByYouYet": "Ainda não há álbuns partilhados por si", + "sharedWithYou": "Partilhado consigo", + "sharedByYou": "Partilhado por si", + "inviteYourFriendsToEnte": "Convide seus amigos para o Ente", + "failedToDownloadVideo": "Falha ao fazer o download do vídeo", + "hiding": "Ocultando...", + "unhiding": "Reexibindo...", + "successfullyHid": "Ocultado com sucesso", + "successfullyUnhid": "Reexibido com sucesso", + "crashReporting": "Relatório de falhas", + "resumableUploads": "Uploads reenviados", + "addToHiddenAlbum": "Adicionar a álbum oculto", + "moveToHiddenAlbum": "Mover para álbum oculto", + "fileTypes": "Tipos de arquivo", + "deleteConfirmDialogBody": "Esta conta está ligada a outras aplicações Ente, se utilizar alguma. Os seus dados carregados, em todas as aplicações Ente, serão agendados para eliminação e a sua conta será permanentemente eliminada.", + "hearUsWhereTitle": "Como é que soube do Ente? (opcional)", + "hearUsExplanation": "Não monitorizamos as instalações de aplicações. Ajudaria se nos dissesse onde nos encontrou!", + "viewAddOnButton": "Ver addons", + "addOns": "addons", + "addOnPageSubtitle": "Detalhes dos addons", + "yourMap": "Seu mapa", + "modifyYourQueryOrTrySearchingFor": "Modifique a sua consulta ou tente pesquisar por", + "blackFridaySale": "Promoção Black Friday", + "upto50OffUntil4thDec": "Até 50% de desconto, até 4 de dezembro.", + "photos": "Fotos", + "videos": "Vídeos", + "livePhotos": "Fotos Em Tempo Real", + "searchHint1": "Pesquisa rápida no dispositivo", + "searchHint2": "Datas das fotos, descrições", + "searchHint3": "Álbuns, nomes de arquivos e tipos", + "searchHint4": "Local", + "searchHint5": "Em breve: Rostos e pesquisa mágica ✨", + "addYourPhotosNow": "Adicione suas fotos agora", + "searchResultCount": "{count, plural, one{{count} ano atrás} other{{count} anos atrás}}", + "@searchResultCount": { + "description": "Text to tell user how many results were found for their search query", + "placeholders": { + "count": { + "example": "1|2|3", + "type": "int" + } + } + }, + "faces": "Rostos", + "people": "Pessoas", + "contents": "Conteúdos", + "addNew": "Adicionar novo", + "@addNew": { + "description": "Text to add a new item (location tag, album, caption etc)" + }, + "contacts": "Contactos", + "noInternetConnection": "Sem ligação à internet", + "pleaseCheckYourInternetConnectionAndTryAgain": "Por favor, verifique a sua ligação à Internet e tente novamente.", + "signOutFromOtherDevices": "Terminar sessão noutros dispositivos", + "signOutOtherBody": "Se pensa que alguém pode saber a sua palavra-passe, pode forçar todos os outros dispositivos que utilizam a sua conta a terminar a sessão.", + "signOutOtherDevices": "Terminar a sessão noutros dispositivos", + "doNotSignOut": "Não terminar a sessão", + "editLocation": "Editar localização", + "selectALocation": "Selecione uma localização", + "selectALocationFirst": "Selecione uma localização primeiro", + "changeLocationOfSelectedItems": "Alterar a localização dos itens selecionados?", + "editsToLocationWillOnlyBeSeenWithinEnte": "Edições para localização só serão vistas dentro do Ente", + "cleanUncategorized": "Limpar sem categoria", + "cleanUncategorizedDescription": "Remover todos os arquivos da Não Categorizados que estão presentes em outros álbuns", + "waitingForVerification": "Aguardando verificação...", + "passkey": "Chave de acesso", + "passkeyAuthTitle": "Verificação da chave de acesso", + "loginWithTOTP": "Iniciar sessão com TOTP", + "passKeyPendingVerification": "A verificação ainda está pendente", + "loginSessionExpired": "Sessão expirada", + "loginSessionExpiredDetails": "A sua sessão expirou. Por favor, inicie sessão novamente.", + "verifyPasskey": "Verificar chave de acesso", + "playOnTv": "Reproduzir álbum na TV", + "pair": "Emparelhar", + "deviceNotFound": "Dispositivo não encontrado", + "castInstruction": "Visite cast.ente.io no dispositivo que pretende emparelhar.\n\n\nIntroduza o código abaixo para reproduzir o álbum na sua TV.", + "deviceCodeHint": "Introduza o código", + "joinDiscord": "Juntar-se ao Discord", + "locations": "Localizações", + "addAName": "Adiciona um nome", + "findThemQuickly": "Ache-os rapidamente", + "@findThemQuickly": { + "description": "Subtitle to indicate that the user can find people quickly by name" + }, + "findPeopleByName": "Encontrar pessoas rapidamente pelo nome", + "longPressAnEmailToVerifyEndToEndEncryption": "Pressione e segure um e-mail para verificar a criptografia de ponta a ponta.", + "developerSettingsWarning": "Tem a certeza de que pretende modificar as definições de programador?", + "developerSettings": "Definições do programador", + "serverEndpoint": "Endpoint do servidor", + "invalidEndpoint": "Endpoint inválido", + "invalidEndpointMessage": "Desculpe, o endpoint que introduziu é inválido. Introduza um ponto final válido e tente novamente.", + "endpointUpdatedMessage": "Endpoint atualizado com sucesso", + "customEndpoint": "Conectado a {endpoint}", + "createCollaborativeLink": "Criar link colaborativo", + "search": "Pesquisar", + "enterPersonName": "Inserir nome da pessoa", + "enterName": "Inserir nome", + "savePerson": "Guardar pessoa", + "editPerson": "Editar pessoa", + "mergedPhotos": "Fotos combinadas", + "orMergeWithExistingPerson": "Ou combinar com já existente", + "enterDateOfBirth": "Aniversário (opcional)", + "birthday": "Aniversário", + "removePersonLabel": "Remover etiqueta da pessoa", + "autoPairDesc": "O pareamento automático funciona apenas com dispositivos que suportam o Chromecast.", + "manualPairDesc": "Emparelhar com PIN funciona com qualquer ecrã onde pretenda ver o seu álbum.", + "connectToDevice": "Ligar ao dispositivo", + "autoCastDialogBody": "Verá os dispositivos Cast disponíveis aqui.", + "autoCastiOSPermission": "Certifique-se de que as permissões de Rede local estão activadas para a aplicação Ente Photos, nas Definições.", + "noDeviceFound": "Nenhum dispositivo encontrado", + "stopCastingTitle": "Parar transmissão", + "stopCastingBody": "Queres parar de fazer transmissão?", + "castIPMismatchTitle": "Falha ao transmitir álbum", + "castIPMismatchBody": "Certifique-se de estar na mesma rede que a TV.", + "pairingComplete": "Emparelhamento concluído", + "savingEdits": "Gravando edições...", + "autoPair": "Emparelhamento automático", + "pairWithPin": "Emparelhar com PIN", + "faceRecognition": "Reconhecimento facial", + "foundFaces": "Rostos encontrados", + "clusteringProgress": "Progresso de agrupamento", + "indexingIsPaused": "A indexação está pausada, será retomada automaticamente quando o dispositivo estiver pronto.", + "trim": "Cortar", + "crop": "Recortar", + "rotate": "Rodar", + "left": "Esquerda", + "right": "Direita", + "whatsNew": "O que há de novo", + "reviewSuggestions": "Revisar sugestões", + "review": "Rever", + "useAsCover": "Usar como capa", + "notPersonLabel": "Não é {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": "Ativar", + "enabled": "Ativado", + "moreDetails": "Mais detalhes", + "enableMLIndexingDesc": "O Ente suporta a aprendizagem automática no dispositivo para reconhecimento facial, pesquisa mágica e outras funcionalidades de pesquisa avançadas", + "magicSearchHint": "A pesquisa mágica permite pesquisar fotos por seu conteúdo, por exemplo, 'flor', 'carro vermelho', 'documentos de identidade'", + "panorama": "Panorama", + "reenterPassword": "Insira novamente a palavra-passe", + "reenterPin": "Inserir PIN novamente", + "deviceLock": "Bloqueio do dispositivo", + "pinLock": "Bloqueio por PIN", + "next": "Seguinte", + "setNewPassword": "Definir nova palavra-passe", + "enterPin": "Introduzir PIN", + "setNewPin": "Definir novo PIN", + "appLock": "Bloqueio de app", + "noSystemLockFound": "Nenhum bloqueio de sistema encontrado", + "tapToUnlock": "Toque para desbloquear", + "tooManyIncorrectAttempts": "Muitas tentativas incorretas", + "videoInfo": "Informação de Vídeo", + "autoLock": "Bloqueio automático", + "immediately": "Imediatamente", + "autoLockFeatureDescription": "Tempo após o qual a aplicação bloqueia depois de ser colocada em segundo plano", + "hideContent": "Ocultar conteúdo", + "hideContentDescriptionAndroid": "Oculta o conteúdo da aplicação no alternador de aplicações e desactiva as capturas de ecrã", + "hideContentDescriptionIos": "Oculta o conteúdo da aplicação no alternador de aplicações", + "passwordStrengthInfo": "A força da palavra-passe é calculada tendo em conta o comprimento da palavra-passe, os caracteres utilizados e se a palavra-passe aparece ou não nas 10.000 palavras-passe mais utilizadas", + "noQuickLinksSelected": "Nenhum link rápido selecionado", + "pleaseSelectQuickLinksToRemove": "Selecione links rápidos para remover", + "removePublicLinks": "Remover link público", + "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "Isto removerá links públicos de todos os links rápidos selecionados.", + "guestView": "Visão de convidado", + "guestViewEnablePreSteps": "Para ativar a vista de convidado, configure o código de acesso do dispositivo ou o bloqueio do ecrã nas definições do sistema.", + "nameTheAlbum": "Nomear o álbum", + "collectPhotosDescription": "Crie um link onde seus amigos podem enviar fotos na qualidade original.", + "collect": "Recolher", + "appLockDescriptions": "Escolha entre o ecrã de bloqueio predefinido do seu dispositivo e um ecrã de bloqueio personalizado com um PIN ou uma palavra-passe.", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Para ativar o bloqueio de aplicações, configure o código de acesso do dispositivo ou o bloqueio de ecrã nas definições do sistema.", + "authToViewPasskey": "Autentique-se para ver a sua chave de acesso", + "loopVideoOn": "Repetir vídeo ligado", + "loopVideoOff": "Repetir vídeo desligado", + "localSyncErrorMessage": "Parece que algo correu mal, uma vez que a sincronização de fotografias locais está a demorar mais tempo do que o esperado. Contacte a nossa equipa de apoio", + "showPerson": "Mostrar pessoa", + "sort": "Ordenar", + "mostRecent": "Mais recente", + "mostRelevant": "Mais relevante", + "loadingYourPhotos": "Carregar as suas fotos...", + "processingImport": "Processando {folderName}...", + "personName": "Nome da pessoa", + "addNewPerson": "Adicionar nova pessoa", + "addNameOrMerge": "Adicionar nome ou juntar", + "mergeWithExisting": "Juntar com o existente", + "newPerson": "Nova pessoa", + "addName": "Adicionar pessoa", + "add": "Adicionar", + "extraPhotosFoundFor": "Fotos extras encontradas para {text}", + "@extraPhotosFoundFor": { + "placeholders": { + "text": { + "type": "String" + } + } + }, + "extraPhotosFound": "Fotos adicionais encontradas", + "configuration": "Configuração", + "localIndexing": "Indexação local", + "resetPerson": "Remover", + "areYouSureYouWantToResetThisPerson": "Tens a certeza de que queres repor esta pessoa?", + "allPersonGroupingWillReset": "Todos os agrupamentos para esta pessoa serão reiniciados e perderá todas as sugestões feitas para esta pessoa", + "yesResetPerson": "Sim, repor pessoa", + "onlyThem": "Apenas eles", + "checkingModels": "A verificar modelos...", + "enableMachineLearningBanner": "Habilitar aprendizagem automática para pesquisa mágica e reconhecimento de rosto", + "collaboratorsSuccessfullyAdded": "{count, plural, =0 {Adicionado 0 colaboradores} =1 {Adicionado 1 colaborador} other {Adicionado {count} colaboradores}}", + "@collaboratorsSuccessfullyAdded": { + "placeholders": { + "count": { + "type": "int", + "example": "2" + } + }, + "description": "Number of collaborators that were successfully added to an album." + }, + "accountIsAlreadyConfigured": "A conta já está ajustada.", + "sessionIdMismatch": "Incompatibilidade de ID de sessão", + "@sessionIdMismatch": { + "description": "In passkey page, deeplink is ignored because of session ID mismatch." + }, + "failedToFetchActiveSessions": "Falha ao obter sessões em atividade", + "@failedToFetchActiveSessions": { + "description": "In session page, warn user (in toast) that active sessions could not be fetched." + }, + "failedToRefreshStripeSubscription": "Falha ao atualizar subscrição", + "failedToPlayVideo": "Falha ao reproduzir multimédia", + "uploadIsIgnoredDueToIgnorereason": "Envio ignorado devido à {ignoreReason}", + "@uploadIsIgnoredDueToIgnorereason": { + "placeholders": { + "ignoreReason": { + "type": "String", + "example": "no network" + } + } + }, + "typeOfGallerGallerytypeIsNotSupportedForRename": "Tipo de galeria {galleryType} não é permitido para renomear", + "@typeOfGallerGallerytypeIsNotSupportedForRename": { + "placeholders": { + "galleryType": { + "type": "String", + "example": "no network" + } + } + } +} \ No newline at end of file diff --git a/mobile/lib/l10n/intl_ro.arb b/mobile/lib/l10n/intl_ro.arb index d390a105ff..9f481d2130 100644 --- a/mobile/lib/l10n/intl_ro.arb +++ b/mobile/lib/l10n/intl_ro.arb @@ -371,21 +371,6 @@ "deleteFromBoth": "Ștergeți din ambele", "newAlbum": "Album nou", "albums": "Albume", - "memoryCount": "{count, plural, one{{formattedCount} amintire} few {{formattedCount} amintiri} other{{formattedCount} de amintiri}}", - "@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} selectate", "@selectedPhotos": { "description": "Display the number of selected photos", @@ -791,14 +776,6 @@ "share": "Distribuire", "unhideToAlbum": "Reafișare în album", "restoreToAlbum": "Restaurare în album", - "moveItem": "{count, plural, one {Mutați articolul} few {Mutați articole} other {Mutați articolele}}", - "@moveItem": { - "description": "Page title while moving one or more items to an album" - }, - "addItem": "{count, plural, one {Adăugați articolul} few {Adăugați articolele} other {Adăugați articolele}}", - "@addItem": { - "description": "Page title while adding one or more items to album" - }, "createOrSelectAlbum": "Creați sau selectați un album", "selectAlbum": "Selectare album", "searchByAlbumNameHint": "Nume album", @@ -896,7 +873,6 @@ "authToViewYourMemories": "Vă rugăm să vă autentificați pentru a vă vizualiza amintirile", "unlock": "Deblocare", "freeUpSpace": "Eliberați spațiu", - "freeUpSpaceSaving": "{count, plural, one {Poate fi șters de pe dispozitiv pentru a elibera {formattedSize}} few {Pot fi șterse de pe dispozitiv pentru a elibera {formattedSize}} other {Pot fi șterse de pe dispozitiv pentru a elibera {formattedSize}}}", "filesBackedUpInAlbum": "{count, plural, one {Un fișier din acest album a fost deja salvat în siguranță} few {{formattedNumber} fișiere din acest album au fost deja salvate în siguranță} other {{formattedNumber} de fișiere din acest album au fost deja salvate în siguranță}}", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -927,18 +903,6 @@ } } }, - "@freeUpSpaceSaving": { - "description": "Text to tell user how much space they can free up by deleting items from the device" - }, - "freeUpAccessPostDelete": "Încă {count, plural, one {îl puteți} few {le puteți} other {le puteți}} accesa pe Ente cât timp aveți un abonament activ", - "@freeUpAccessPostDelete": { - "placeholders": { - "count": { - "example": "1", - "type": "int" - } - } - }, "freeUpAmount": "Eliberați {sizeInMBorGB}", "thisEmailIsAlreadyInUse": "Această adresă de e-mail este deja folosită", "incorrectCode": "Cod incorect", @@ -1266,8 +1230,6 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "Găsiți rapid persoane după nume", - "addViewers": "{count, plural, one {Adăugați observator} few {Adăugați observatori} other {Adăugați observatori}}", - "addCollaborators": "{count, plural, one {Adăugați un colaborator} few {Adăugați colaboratori} other {Adăugați colaboratori}}", "longPressAnEmailToVerifyEndToEndEncryption": "Apăsați lung un e-mail pentru a verifica criptarea integrală.", "developerSettingsWarning": "Sunteți sigur că doriți să modificați setările pentru dezvoltatori?", "developerSettings": "Setări dezvoltator", @@ -1464,15 +1426,6 @@ }, "currentlyRunning": "rulează în prezent", "ignored": "ignorat", - "photosCount": "{count, plural, =0 {Curând} =1 {O zi} other {{count} de zile}}", - "@photosCount": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - } - }, "file": "Fișier", "searchSectionsLengthMismatch": "Lungimea secțiunilor nu se potrivesc: {snapshotLength} != {searchLength}", "@searchSectionsLengthMismatch": { diff --git a/mobile/lib/l10n/intl_ru.arb b/mobile/lib/l10n/intl_ru.arb index 16ccbb3ea4..c3188d96bb 100644 --- a/mobile/lib/l10n/intl_ru.arb +++ b/mobile/lib/l10n/intl_ru.arb @@ -1,58 +1,60 @@ { "@@locale ": "en", - "enterYourEmailAddress": "Введите свою электронную почту", + "enterYourEmailAddress": "Введите адрес вашей электронной почты", "accountWelcomeBack": "С возвращением!", + "emailAlreadyRegistered": "Электронная почта уже зарегистрирована.", + "emailNotRegistered": "Электронная почта не зарегистрирована.", "email": "Электронная почта", "cancel": "Отменить", "verify": "Подтвердить", - "invalidEmailAddress": "Неверный адрес электронной почты", + "invalidEmailAddress": "Недействительный адрес электронной почты", "enterValidEmail": "Пожалуйста, введите действительный адрес электронной почты.", "deleteAccount": "Удалить аккаунт", - "askDeleteReason": "Какова основная причина, по которой вы удаляете свой аккаунт?", - "deleteAccountFeedbackPrompt": "Сожалеем, что вы уходите. Пожалуйста, поделитесь своим отзывом, чтобы помочь нам улучшиться.", + "askDeleteReason": "Какова основная причина удаления вашего аккаунта?", + "deleteAccountFeedbackPrompt": "Нам жаль, что вы уходите. Пожалуйста, поделитесь мнением о том, как мы могли бы стать лучше.", "feedback": "Обратная связь", "kindlyHelpUsWithThisInformation": "Пожалуйста, помогите нам с этой информацией", - "confirmDeletePrompt": "Да, я хочу навсегда удалить эту учётную запись и все её данные во всех приложениях Ente.", + "confirmDeletePrompt": "Да, я хочу навсегда удалить этот аккаунт и все его данные во всех приложениях.", "confirmAccountDeletion": "Подтвердить удаление аккаунта", "deleteAccountPermanentlyButton": "Удалить аккаунт навсегда", - "yourAccountHasBeenDeleted": "Ваш аккаунт был удален", + "yourAccountHasBeenDeleted": "Ваш аккаунт был удалён", "selectReason": "Выберите причину", - "deleteReason1": "У вас отсутствует важная функция, которая мне нужна", - "deleteReason2": "Приложение или его некоторые функции не ведут себя так, как я думаю", - "deleteReason3": "Я нашел другой сервис, который мне нравится больше", - "deleteReason4": "Моя причина не указана в списке", + "deleteReason1": "Отсутствует необходимая функция", + "deleteReason2": "Приложение или определённая функция работают не так, как я ожидал", + "deleteReason3": "Я нашёл другой сервис, который мне больше нравится", + "deleteReason4": "Моя причина не указана", "sendEmail": "Отправить электронное письмо", "deleteRequestSLAText": "Ваш запрос будет обработан в течение 72 часов.", "deleteEmailRequest": "Пожалуйста, отправьте письмо на account-deletion@ente.io с вашего зарегистрированного адреса электронной почты.", - "entePhotosPerm": "Ente требуется разрешение для сохранения ваших фотографий", + "entePhotosPerm": "Ente требуется разрешение для сохранения ваших фото", "ok": "Хорошо", - "createAccount": "Создать учетную запись", - "createNewAccount": "Создать новую учетную запись", + "createAccount": "Создать аккаунт", + "createNewAccount": "Создать новый аккаунт", "password": "Пароль", "confirmPassword": "Подтвердите пароль", "activeSessions": "Активные сеансы", "oops": "Ой", - "somethingWentWrongPleaseTryAgain": "Что-то пошло не так. Попробуйте еще раз", - "thisWillLogYouOutOfThisDevice": "Совершив это действие, Вы выйдете из своей учетной записи!", - "thisWillLogYouOutOfTheFollowingDevice": "Вы выйдете из списка следующих устройств:", + "somethingWentWrongPleaseTryAgain": "Что-то пошло не так. Пожалуйста, попробуйте снова", + "thisWillLogYouOutOfThisDevice": "Это завершит ваш сеанс на этом устройстве!", + "thisWillLogYouOutOfTheFollowingDevice": "Это завершит ваш сеанс на следующем устройстве:", "terminateSession": "Завершить сеанс?", "terminate": "Завершить", "thisDevice": "Это устройство", "recoverButton": "Восстановить", - "recoverySuccessful": "Восстановление прошло успешно!", + "recoverySuccessful": "Успешное восстановление!", "decrypting": "Расшифровка...", - "incorrectRecoveryKeyTitle": "Неправильный ключ восстановления", - "incorrectRecoveryKeyBody": "Введенный вами ключ восстановления неверен", + "incorrectRecoveryKeyTitle": "Неверный ключ восстановления", + "incorrectRecoveryKeyBody": "Введённый вами ключ восстановления неверен", "forgotPassword": "Забыл пароль", - "enterYourRecoveryKey": "Введите свой ключ восстановления", + "enterYourRecoveryKey": "Введите ваш ключ восстановления", "noRecoveryKey": "Нет ключа восстановления?", "sorry": "Извините", - "noRecoveryKeyNoDecryption": "Из-за природы нашего сквозного протокола шифрования ваши данные не могут быть расшифрованы без вашего пароля или ключа восстановления", + "noRecoveryKeyNoDecryption": "Из-за особенностей нашего протокола сквозного шифрования ваши данные не могут быть расшифрованы без пароля или ключа восстановления", "verifyEmail": "Подтвердить электронную почту", - "toResetVerifyEmail": "Чтобы сбросить пароль, сначала подтвердите свой адрес электронной почты.", - "checkInboxAndSpamFolder": "Пожалуйста, проверьте свой почтовый ящик (и спам) для завершения верификации", + "toResetVerifyEmail": "Чтобы сбросить пароль, сначала подтвердите вашу электронную почту.", + "checkInboxAndSpamFolder": "Пожалуйста, проверьте ваш почтовый ящик (и спам) для завершения верификации", "tapToEnterCode": "Нажмите, чтобы ввести код", - "resendEmail": "Отправить письмо еще раз", + "resendEmail": "Отправить письмо повторно", "weHaveSendEmailTo": "Мы отправили письмо на {email}", "@weHaveSendEmailTo": { "description": "Text to indicate that we have sent a mail to the user", @@ -68,13 +70,13 @@ "changePasswordTitle": "Изменить пароль", "resetPasswordTitle": "Сбросить пароль", "encryptionKeys": "Ключи шифрования", - "passwordWarning": "Мы не храним этот пароль, поэтому если вы забудете его, мы не сможем расшифровать ваши данные", - "enterPasswordToEncrypt": "Введите пароль, который мы можем использовать для шифрования ваших данных", - "enterNewPasswordToEncrypt": "Введите новый пароль, который мы можем использовать для шифрования ваших данных", - "weakStrength": "Слабый", - "strongStrength": "Сильный", - "moderateStrength": "Средний", - "passwordStrength": "Мощность пароля: {passwordStrengthValue}", + "passwordWarning": "Мы не храним этот пароль, поэтому, если вы его забудете, мы не сможем расшифровать ваши данные", + "enterPasswordToEncrypt": "Введите пароль для шифрования ваших данных", + "enterNewPasswordToEncrypt": "Введите новый пароль для шифрования ваших данных", + "weakStrength": "Низкая", + "strongStrength": "Высокая", + "moderateStrength": "Средняя", + "passwordStrength": "Надёжность пароля: {passwordStrengthValue}", "@passwordStrength": { "description": "Text to indicate the password strength", "placeholders": { @@ -87,38 +89,38 @@ "message": "Password Strength: {passwordStrengthText}" }, "passwordChangedSuccessfully": "Пароль успешно изменён", - "generatingEncryptionKeys": "Генерируем ключи шифрования...", + "generatingEncryptionKeys": "Генерация ключей шифрования...", "pleaseWait": "Пожалуйста, подождите...", - "continueLabel": "Далее", + "continueLabel": "Продолжить", "insecureDevice": "Небезопасное устройство", "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "К сожалению, мы не смогли сгенерировать безопасные ключи на этом устройстве.\n\nПожалуйста, зарегистрируйтесь с другого устройства.", "howItWorks": "Как это работает", "encryption": "Шифрование", - "ackPasswordLostWarning": "Я понимаю, что если я потеряю свой пароль, я могу потерять свои данные, так как мои данные в сквозном шифровании.", + "ackPasswordLostWarning": "Я понимаю, что если я потеряю пароль, я могу потерять свои данные, так как они защищены сквозным шифрованием.", "privacyPolicyTitle": "Политика конфиденциальности", "termsOfServicesTitle": "Условия использования", "signUpTerms": "Я согласен с условиями предоставления услуг и политикой конфиденциальности", "logInLabel": "Войти", - "loginTerms": "Нажимая Войти, я принимаю условия использования и политику конфиденциальности", + "loginTerms": "Нажимая \"Войти\", я соглашаюсь с условиями предоставления услуг и политикой конфиденциальности", "changeEmail": "Изменить адрес электронной почты", - "enterYourPassword": "Введите пароль", + "enterYourPassword": "Введите ваш пароль", "welcomeBack": "С возвращением!", "contactSupport": "Связаться с поддержкой", "incorrectPasswordTitle": "Неверный пароль", - "pleaseTryAgain": "Пожалуйста, попробуйте ещё раз", - "recreatePasswordTitle": "Сбросить пароль", + "pleaseTryAgain": "Пожалуйста, попробуйте снова", + "recreatePasswordTitle": "Пересоздать пароль", "useRecoveryKey": "Использовать ключ восстановления", - "recreatePasswordBody": "Текущее устройство недостаточно мощно для верификации пароля, но мы можем восстановить так, как это работает со всеми устройствами.\n\nПожалуйста, войдите, используя ваш ключ восстановления и сгенерируйте ваш пароль (вы можете использовать тот же пароль, если пожелаете).", - "verifyPassword": "Подтверждение пароля", + "recreatePasswordBody": "Текущее устройство недостаточно мощное для проверки вашего пароля, но мы можем сгенерировать его снова так, чтобы он работал на всех устройствах.\n\nПожалуйста, войдите, используя ваш ключ восстановления, и сгенерируйте пароль (при желании вы можете использовать тот же самый).", + "verifyPassword": "Подтвердить пароль", "recoveryKey": "Ключ восстановления", - "recoveryKeyOnForgotPassword": "Если вы забыли свой пароль, то восстановить данные можно только с помощью этого ключа.", - "recoveryKeySaveDescription": "Мы не храним этот ключ, пожалуйста, сохраните этот ключ в безопасном месте.", - "doThisLater": "Сделать позже", + "recoveryKeyOnForgotPassword": "Если вы забудете пароль, единственный способ восстановить ваши данные — это использовать этот ключ.", + "recoveryKeySaveDescription": "Мы не храним этот ключ. Пожалуйста, сохраните этот ключ из 24 слов в безопасном месте.", + "doThisLater": "Сделать это позже", "saveKey": "Сохранить ключ", "recoveryKeyCopiedToClipboard": "Ключ восстановления скопирован в буфер обмена", "recoverAccount": "Восстановить аккаунт", "recover": "Восстановить", - "dropSupportEmail": "Пожалуйста, отправьте электронное письмо на адрес {supportEmail} с вашего зарегистрированного адреса электронной почты", + "dropSupportEmail": "Пожалуйста, отправьте письмо на {supportEmail} с вашего зарегистрированного адреса электронной почты", "@dropSupportEmail": { "placeholders": { "supportEmail": { @@ -128,94 +130,97 @@ } } }, - "twofactorSetup": "Вход с 2FA", + "twofactorSetup": "Настройка двухфакторной аутентификации", "enterCode": "Введите код", "scanCode": "Сканировать код", "codeCopiedToClipboard": "Код скопирован в буфер обмена", "copypasteThisCodentoYourAuthenticatorApp": "Скопируйте этот код\nв ваше приложение для аутентификации", "tapToCopy": "нажмите, чтобы скопировать", - "scanThisBarcodeWithnyourAuthenticatorApp": "Просканируйте этот Qr-код вашим приложением для аутентификации", - "enterThe6digitCodeFromnyourAuthenticatorApp": "Введите 6-значный код из вашего приложения для аутентификации", + "scanThisBarcodeWithnyourAuthenticatorApp": "Отсканируйте этот штрих-код\nс помощью вашего приложения для аутентификации", + "enterThe6digitCodeFromnyourAuthenticatorApp": "Введите 6-значный код из\nвашего приложения для аутентификации", "confirm": "Подтвердить", - "setupComplete": "Установка завершена", - "saveYourRecoveryKeyIfYouHaventAlready": "Сохраните ваш ключ восстановления, если вы еще не сделали этого", - "thisCanBeUsedToRecoverYourAccountIfYou": "Это может быть использовано для восстановления вашей учетной записи, если вы потеряете свой аутентификатор", + "setupComplete": "Настройка завершена", + "saveYourRecoveryKeyIfYouHaventAlready": "Сохраните ваш ключ восстановления, если вы ещё этого не сделали", + "thisCanBeUsedToRecoverYourAccountIfYou": "Это можно использовать для восстановления вашего аккаунта, если вы потеряете свой аутентификатор", "twofactorAuthenticationPageTitle": "Двухфакторная аутентификация", - "lostDevice": "Потеряли свое устройство?", + "lostDevice": "Потеряли устройство?", "verifyingRecoveryKey": "Проверка ключа восстановления...", - "recoveryKeyVerified": "Ключ восстановления подтвержден", + "recoveryKeyVerified": "Ключ восстановления подтверждён", "recoveryKeySuccessBody": "Отлично! Ваш ключ восстановления действителен. Спасибо за проверку.\n\nПожалуйста, не забудьте сохранить ключ восстановления в безопасном месте.", - "invalidRecoveryKey": "Введенный ключ восстановления недействителен. Убедитесь, что он содержит 24 слова и проверьте написание каждого из них.\n\nЕсли вы ввели старый код восстановления, убедитесь, что он содержит 64 символа и проверьте каждый из них.", - "invalidKey": "Неверный ключ", + "invalidRecoveryKey": "Введённый вами ключ восстановления недействителен. Убедитесь, что он содержит 24 слова, и проверьте правописание каждого из них.\n\nЕсли вы ввели старый код восстановления, убедитесь, что он состоит из 64 символов, и проверьте каждый из них.", + "invalidKey": "Недействительный ключ", "tryAgain": "Попробовать снова", - "viewRecoveryKey": "Просмотреть ключ восстановления", - "confirmRecoveryKey": "Подтвердите ключ восстановления", + "viewRecoveryKey": "Увидеть ключ восстановления", + "confirmRecoveryKey": "Подтвердить ключ восстановления", + "recoveryKeyVerifyReason": "Ваш ключ восстановления — единственный способ восстановить ваши фото, если вы забудете пароль. Вы можете найти ключ восстановления в разделе «Настройки» → «Аккаунт».\n\nПожалуйста, введите ваш ключ восстановления здесь, чтобы убедиться, что вы сохранили его правильно.", "confirmYourRecoveryKey": "Подтвердите ваш ключ восстановления", - "addViewer": "Добавить наблюдателя", + "addViewer": "Добавить зрителя", "addCollaborator": "Добавить соавтора", - "addANewEmail": "Добавить новый адрес эл. почты", - "orPickAnExistingOne": "Или выберите уже существующий", - "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": "Соавторы могут добавлять фотографии и видео в общий альбом.", - "enterEmail": "Введите адрес эл. почты", + "addANewEmail": "Добавьте новую электронную почту", + "orPickAnExistingOne": "Или выберите существующую", + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": "Соавторы могут добавлять фото и видео в общий альбом.", + "enterEmail": "Введите электронную почту", "albumOwner": "Владелец", "@albumOwner": { "description": "Role of the album owner" }, "you": "Вы", "collaborator": "Соавтор", - "addMore": "Добавить еще", + "addMore": "Добавить ещё", "@addMore": { "description": "Button text to add more collaborators/viewers" }, - "viewer": "Наблюдатель", - "remove": "Убрать", - "removeParticipant": "Исключить участника", + "viewer": "Зритель", + "remove": "Удалить", + "removeParticipant": "Удалить участника", "@removeParticipant": { "description": "menuSectionTitle for removing a participant" }, - "manage": "Управление", - "addedAs": "Добавлено как", + "manage": "Управлять", + "addedAs": "Добавлен как", "changePermissions": "Изменить разрешения?", - "yesConvertToViewer": "Да, преобразовать в зрителя", - "cannotAddMorePhotosAfterBecomingViewer": "{user} больше не сможет добавлять фотографии в этот альбом\n\nОни все еще смогут удалять существующие фотографии, добавленные ими", + "yesConvertToViewer": "Да, перевести в зрители", + "cannotAddMorePhotosAfterBecomingViewer": "{user} не сможет добавлять новые фото в этот альбом\n\nЭтот пользователь всё ещё сможет удалять существующие фото, добавленные им", "allowAddingPhotos": "Разрешить добавление фото", "@allowAddingPhotos": { "description": "Switch button to enable uploading photos to a public link" }, - "allowAddPhotosDescription": "Разрешить пользователям со ссылкой также добавлять фотографии в общий альбом.", - "passwordLock": "Блокировка паролем", + "allowAddPhotosDescription": "Разрешить людям с этой ссылкой добавлять фото в общий альбом.", + "passwordLock": "Защита паролем", + "canNotOpenTitle": "Не удаётся открыть этот альбом", + "canNotOpenBody": "Извините, этот альбом не может быть открыт в приложении.", "disableDownloadWarningTitle": "Обратите внимание", - "disableDownloadWarningBody": "Наблюдатели все еще могут делать скриншоты или копировать ваши фотографии с помощью других инструментов", - "allowDownloads": "Разрешить загрузку", - "linkDeviceLimit": "Лимит устройств", - "noDeviceLimit": "Нет ограничений", + "disableDownloadWarningBody": "Зрители всё ещё могут делать скриншоты или сохранять копии ваших фото с помощью внешних инструментов", + "allowDownloads": "Разрешить скачивание", + "linkDeviceLimit": "Ограничение по количеству устройств", + "noDeviceLimit": "Нет", "@noDeviceLimit": { "description": "Text to indicate that there is limit on number of devices" }, - "linkExpiry": "Срок действия ссылки истек", - "linkExpired": "Истекшая", - "linkEnabled": "Разрешён", + "linkExpiry": "Срок действия ссылки", + "linkExpired": "Истекла", + "linkEnabled": "Включена", "linkNeverExpires": "Никогда", - "expiredLinkInfo": "Срок действия этой ссылки истек. Пожалуйста, выберите новое время действия или отключите истечение срока действия ссылки.", + "expiredLinkInfo": "Срок действия этой ссылки истёк. Пожалуйста, выберите новый срок или отключите его.", "setAPassword": "Установить пароль", "lockButtonLabel": "Заблокировать", "enterPassword": "Введите пароль", "removeLink": "Удалить ссылку", "manageLink": "Управлять ссылкой", - "linkExpiresOn": "Ссылка истечёт через {expiryTime}", - "albumUpdated": "Альбом обновлен", + "linkExpiresOn": "Ссылка истечёт {expiryTime}", + "albumUpdated": "Альбом обновлён", "never": "Никогда", - "custom": "Свой", + "custom": "Пользовательский", "@custom": { "description": "Label for setting custom value for link expiry" }, "after1Hour": "Через 1 час", "after1Day": "Через 1 день", - "after1Week": "Через неделю", + "after1Week": "Через 1 неделю", "after1Month": "Через 1 месяц", "after1Year": "Через 1 год", - "manageParticipants": "Управление", - "albumParticipantsCount": "{count, plural, =0 {Нет Участников} =1 {1 Участник} other {{count} Участника}}", + "manageParticipants": "Управлять", + "albumParticipantsCount": "{count, plural, =0 {Нет участников} =1 {{count} участник} one {{count} участник} few {{count} участника} other {{count} участников}}", "@albumParticipantsCount": { "placeholders": { "count": { @@ -225,18 +230,18 @@ }, "description": "Number of participants in an album, including the album owner." }, - "collabLinkSectionDescription": "Создайте ссылку, чтобы позволить людям добавлять и просматривать фотографии в вашем общем альбоме без приложения или учетной записи Ente. Отлично подходит для сбора фотографий событий.", - "collectPhotos": "Собрать фотографии", + "collabLinkSectionDescription": "Создайте ссылку, чтобы люди могли добавлять и просматривать фото в вашем общем альбоме без использования приложения или аккаунта Ente. Это отлично подходит для сбора фото с мероприятий.", + "collectPhotos": "Сбор фото", "collaborativeLink": "Совместная ссылка", - "shareWithNonenteUsers": "Поделится с пользователями без Ente", + "shareWithNonenteUsers": "Поделиться с пользователями, не использующими Ente", "createPublicLink": "Создать публичную ссылку", "sendLink": "Отправить ссылку", - "copyLink": "Копировать ссылку", - "linkHasExpired": "Ссылка устарела", + "copyLink": "Скопировать ссылку", + "linkHasExpired": "Срок действия ссылки истёк", "publicLinkEnabled": "Публичная ссылка включена", "shareALink": "Поделиться ссылкой", - "sharedAlbumSectionDescription": "Создавайте общие и совместные альбомы с другими пользователями Ente, в том числе с пользователями бесплатных планов.", - "shareWithPeopleSectionTitle": "{numberOfPeople, plural, =0 {Поделится с конкретными людьми} =1 {Поделено с 1 человеком} other {Поделено с {numberOfPeople} людьми}}", + "sharedAlbumSectionDescription": "Создавайте общие и совместные альбомы с другими пользователями Ente, включая пользователей на бесплатных тарифах.", + "shareWithPeopleSectionTitle": "{numberOfPeople, plural, =0 {Поделиться с конкретными людьми} =1 {Доступно 1 человеку} other {Доступно {numberOfPeople} людям}}", "@shareWithPeopleSectionTitle": { "placeholders": { "numberOfPeople": { @@ -246,9 +251,9 @@ } }, "thisIsYourVerificationId": "Это ваш идентификатор подтверждения", - "someoneSharingAlbumsWithYouShouldSeeTheSameId": "Тот, кто делится альбомами с вами должны видеть такой же идентификатор на их устройстве.", - "howToViewShareeVerificationID": "Пожалуйста, попросите их задержать палец на адресе электронной почты на экране настроек и убедитесь, что идентификаторы на обоих устройствах совпадают.", - "thisIsPersonVerificationId": "Этот идентификатор подтверждения пользователя {email}", + "someoneSharingAlbumsWithYouShouldSeeTheSameId": "Тот, кто делится с вами альбомами, должен видеть такой же идентификатор на своём устройстве.", + "howToViewShareeVerificationID": "Попросите их нажать с удержанием на адрес электронной почты на экране настроек и убедиться, что идентификаторы на обоих устройствах совпадают.", + "thisIsPersonVerificationId": "Это идентификатор подтверждения {email}", "@thisIsPersonVerificationId": { "placeholders": { "email": { @@ -259,41 +264,43 @@ }, "verificationId": "Идентификатор подтверждения", "verifyEmailID": "Подтвердить {email}", - "emailNoEnteAccount": "У {email} нет учетной записи Ente.\n\nОтправьте им приглашение для обмена фотографиями.", - "shareMyVerificationID": "Вот мой проверочный ID: {verificationID} для ente.io.", - "shareTextConfirmOthersVerificationID": "Эй, вы можете подтвердить, что это ваш идентификатор подтверждения ente.io: {verificationID}", + "emailNoEnteAccount": "У {email} нет аккаунта Ente.\n\nОтправьте ему приглашение для обмена фото.", + "shareMyVerificationID": "Вот мой идентификатор подтверждения: {verificationID} для ente.io.", + "shareTextConfirmOthersVerificationID": "Привет, можешь подтвердить, что это твой идентификатор подтверждения ente.io: {verificationID}", "somethingWentWrong": "Что-то пошло не так", "sendInvite": "Отправить приглашение", - "shareTextRecommendUsingEnte": "Скачай Ente, чтобы мы могли легко поделиться фотографиями и видео без сжатия\n\nhttps://ente.io", + "shareTextRecommendUsingEnte": "Скачай Ente, чтобы мы могли легко делиться фото и видео в оригинальном качестве\n\nhttps://ente.io", "done": "Готово", "applyCodeTitle": "Применить код", - "enterCodeDescription": "Введите код, предоставленный вашим другом что бы получить бесплатное хранилище для вас обоих", + "enterCodeDescription": "Введите код, предоставленный вашим другом, чтобы вы оба могли получить бесплатное хранилище", "apply": "Применить", "failedToApplyCode": "Не удалось применить код", "enterReferralCode": "Введите реферальный код", "codeAppliedPageTitle": "Код применён", "changeYourReferralCode": "Изменить ваш реферальный код", "change": "Изменить", - "unavailableReferralCode": "Извините, такого кода не существует.", - "storageInGB": "{storageAmountInGB} Гигабайт", + "unavailableReferralCode": "Извините, этот код недоступен.", + "codeChangeLimitReached": "Извините, вы достигли лимита изменений кода.", + "onlyFamilyAdminCanChangeCode": "Пожалуйста, свяжитесь с {familyAdminEmail} для изменения кода.", + "storageInGB": "{storageAmountInGB} ГБ", "claimed": "Получено", "@claimed": { "description": "Used to indicate storage claimed, like 10GB Claimed" }, "details": "Подробности", "claimMore": "Получите больше!", - "theyAlsoGetXGb": "Они тоже получат {storageAmountInGB} Гигабайт", - "freeStorageOnReferralSuccess": "{storageAmountInGB} Гигабайт каждый раз когда кто-то подписывается на платный план и применяет ваш код", - "shareTextReferralCode": "Реферальный код Ente: {referralCode} \n\nПримените его в разделе «Настройки» → «Основные» → «Рефералы», чтобы получить {referralStorageInGB} Гигабайт бесплатно после того как вы подпишетесь на платный план", + "theyAlsoGetXGb": "Они тоже получат {storageAmountInGB} ГБ", + "freeStorageOnReferralSuccess": "{storageAmountInGB} ГБ каждый раз, когда кто-то подписывается на платный тариф и применяет ваш код", + "shareTextReferralCode": "Реферальный код Ente: {referralCode} \n\nПримените его в разделе «Настройки» → «Общие» → «Рефералы», чтобы получить {referralStorageInGB} ГБ бесплатно после подписки на платный тариф\n\nhttps://ente.io", "claimFreeStorage": "Получить бесплатное хранилище", - "inviteYourFriends": "Пригласить своих друзей", - "failedToFetchReferralDetails": "Не удалось получить информацию о реферале. Пожалуйста, повторите попытку позже.", - "referralStep1": "1. Дайте этот код своим друзьям", - "referralStep2": "2. Они подписываются на платный план", - "referralStep3": "3. Вы оба получаете {storageInGB} Гигабайт* бесплатно", - "referralsAreCurrentlyPaused": "Рефералы в настоящее время приостановлены", - "youCanAtMaxDoubleYourStorage": "* Вы можете максимально удвоить объем хранилища", - "claimedStorageSoFar": "{isFamilyMember, select, true {Ваша семья получила {storageAmountInGb} ГБ} false {Вы уже получили {storageAmountInGb} ГБ} other {Вы уже получили {storageAmountInGb} ГБ!}}", + "inviteYourFriends": "Пригласите своих друзей", + "failedToFetchReferralDetails": "Не удалось получить данные о рефералах. Пожалуйста, попробуйте позже.", + "referralStep1": "1. Даёте этот код своим друзьям", + "referralStep2": "2. Они подписываются на платный тариф", + "referralStep3": "3. Вы оба получаете {storageInGB} ГБ* бесплатно", + "referralsAreCurrentlyPaused": "Реферальная программа временно приостановлена", + "youCanAtMaxDoubleYourStorage": "* Вы можете увеличить хранилище максимум в два раза", + "claimedStorageSoFar": "{isFamilyMember, select, true {Ваша семья получила {storageAmountInGb} ГБ на данный момент} false {Вы получили {storageAmountInGb} ГБ на данный момент} other {Вы получили {storageAmountInGb} ГБ на данный момент!}}", "@claimedStorageSoFar": { "placeholders": { "isFamilyMember": { @@ -306,34 +313,35 @@ } } }, - "faq": "Ответы на ваши вопросы", + "faq": "Часто задаваемые вопросы", "help": "Помощь", - "oopsSomethingWentWrong": "Ой! Что-то пошло не так", - "peopleUsingYourCode": "Люди использующие ваш код", - "eligible": "подходящий", + "oopsSomethingWentWrong": "Ой, что-то пошло не так", + "peopleUsingYourCode": "Люди, использующие ваш код", + "eligible": "доступно", "total": "всего", - "codeUsedByYou": "Код использованный вами", - "freeStorageClaimed": "Бесплатного хранилища получено", - "freeStorageUsable": "Бесплатного хранилища можно использовать", - "usableReferralStorageInfo": "Доступное хранилище ограничено вашим текущим планом. Избыточное полученное хранилище автоматически станет доступным для использования при улучшении плана.", + "codeUsedByYou": "Код, использованный вами", + "freeStorageClaimed": "Полученное бесплатное хранилище", + "freeStorageUsable": "Доступное бесплатное хранилище", + "usableReferralStorageInfo": "Доступное хранилище ограничено вашим текущим тарифом. Избыточное полученное хранилище автоматически станет доступным при улучшении тарифа.", "removeFromAlbumTitle": "Удалить из альбома?", "removeFromAlbum": "Удалить из альбома", "itemsWillBeRemovedFromAlbum": "Выбранные элементы будут удалены из этого альбома", - "removeShareItemsWarning": "Некоторые элементы, которые вы удаляете, были добавлены другими людьми, и вы потеряете к ним доступ", + "removeShareItemsWarning": "Некоторые из удаляемых вами элементов были добавлены другими людьми, и вы потеряете к ним доступ", "addingToFavorites": "Добавление в избранное...", "removingFromFavorites": "Удаление из избранного...", "sorryCouldNotAddToFavorites": "Извините, не удалось добавить в избранное!", "sorryCouldNotRemoveFromFavorites": "Извините, не удалось удалить из избранного!", + "subscribeToEnableSharing": "Вам нужна активная платная подписка, чтобы включить общий доступ.", "subscribe": "Подписаться", "canOnlyRemoveFilesOwnedByYou": "Можно удалять только файлы, принадлежащие вам", "deleteSharedAlbum": "Удалить общий альбом?", "deleteAlbum": "Удалить альбом", - "deleteAlbumDialog": "Также удалить фотографии (и видео), которые есть в этом альбоме из всех других альбомов, где они есть?", - "deleteSharedAlbumDialogBody": "Альбом будет удален для всех\n\nВы потеряете доступ к общим фотографиям других людей в этом альбоме", + "deleteAlbumDialog": "Также удалить фото (и видео), находящиеся в этом альбоме, из всех других альбомов, частью которых они являются?", + "deleteSharedAlbumDialogBody": "Альбом будет удалён для всех\n\nВы потеряете доступ к общим фото в этом альбоме, принадлежащим другим", "yesRemove": "Да, удалить", "creatingLink": "Создание ссылки...", "removeWithQuestionMark": "Удалить?", - "removeParticipantBody": "{userEmail} будет удален из этого общего альбома\n\nВсе добавленные им фотографии также будут удалены из альбома", + "removeParticipantBody": "{userEmail} будет удалён из этого общего альбома\n\nВсе фото, добавленные этим пользователем, также будут удалены из альбома", "keepPhotos": "Оставить фото", "deletePhotos": "Удалить фото", "inviteToEnte": "Пригласить в Ente", @@ -341,28 +349,29 @@ "disableLinkMessage": "Это удалит публичную ссылку для доступа к \"{albumName}\".", "sharing": "Отправка...", "youCannotShareWithYourself": "Вы не можете поделиться с самим собой", - "archive": "Архивировать", - "createAlbumActionHint": "Нажмите и удерживайте, чтобы выбрать фотографии, и нажмите +, чтобы создать альбом", - "importing": "Импорт....", + "archive": "Архив", + "createAlbumActionHint": "Нажмите и удерживайте, чтобы выбрать фото, и нажмите «+», чтобы создать альбом", + "importing": "Импортирование...", "failedToLoadAlbums": "Не удалось загрузить альбомы", - "hidden": "Скрыто", + "hidden": "Скрытые", "authToViewYourHiddenFiles": "Пожалуйста, авторизуйтесь для просмотра скрытых файлов", + "authToViewTrashedFiles": "Пожалуйста, авторизуйтесь для просмотра удалённых файлов", "trash": "Корзина", "uncategorized": "Без категории", "videoSmallCase": "видео", "photoSmallCase": "фото", - "singleFileDeleteHighlight": "Он будет удален из всех альбомов.", - "singleFileInBothLocalAndRemote": "Этот {fileType} есть и в Ente, и на вашем устройстве.", - "singleFileInRemoteOnly": "Этот {fileType} будет удалён из Ente.", + "singleFileDeleteHighlight": "Оно будет удалено из всех альбомов.", + "singleFileInBothLocalAndRemote": "Это {fileType} есть и в Ente, и на вашем устройстве.", + "singleFileInRemoteOnly": "Это {fileType} будет удалено из Ente.", "singleFileDeleteFromDevice": "Это {fileType} будет удалено с вашего устройства.", "deleteFromEnte": "Удалить из Ente", "yesDelete": "Да, удалить", "movedToTrash": "Перемещено в корзину", "deleteFromDevice": "Удалить с устройства", - "deleteFromBoth": "Удалить отовсюду", + "deleteFromBoth": "Удалить из обоих мест", "newAlbum": "Новый альбом", "albums": "Альбомы", - "memoryCount": "{count, plural, zero{нет воспоминаний} one{{formattedCount} воспоминание} other{{formattedCount} воспоминаний}}", + "memoryCount": "{count, plural, =0{нет воспоминаний} one{{formattedCount} воспоминание} few{{formattedCount} воспоминания} other{{formattedCount} воспоминаний}}", "@memoryCount": { "description": "The text to display the number of memories", "type": "text", @@ -388,7 +397,7 @@ } } }, - "selectedPhotosWithYours": "{count} выбрано ({yourCount} ваши)", + "selectedPhotosWithYours": "{count} выбрано ({yourCount} ваших)", "@selectedPhotosWithYours": { "description": "Display the number of selected photos, including the number of selected photos owned by the user", "type": "text", @@ -403,45 +412,55 @@ } } }, - "advancedSettings": "Дополнительно", + "advancedSettings": "Расширенные", "@advancedSettings": { "description": "The text to display in the advanced settings section" }, - "photoGridSize": "Размер сетки фотографий", - "machineLearning": "Machine learning", + "photoGridSize": "Размер сетки фото", + "manageDeviceStorage": "Управление кэшем устройства", + "manageDeviceStorageDesc": "Ознакомиться и очистить локальный кэш.", + "machineLearning": "Машинное обучение", "mlConsent": "Включить машинное обучение", "mlConsentTitle": "Включить машинное обучение?", - "mlConsentDescription": "Если вы включите машинное обучение, Ente будет извлекать информацию из файлов (например, геометрию лица), включая те, которыми с вами поделились.\n\nЭто будет происходить на вашем устройстве, и любая сгенерированная биометрическая информация будет зашифрована с использованием сквозного (End-to-End) шифрования между вашим устройством и сервером.", - "mlConsentPrivacy": "Пожалуйста, нажмите здесь, чтобы узнать больше об этой функции в нашей политике конфиденциальности", + "mlConsentDescription": "Если вы включите машинное обучение, Ente будет извлекать информацию такую, как геометрия лица, из файлов, включая те, которыми с вами поделились.\n\nЭтот процесс будет происходить на вашем устройстве, и любая сгенерированная биометрическая информация будет защищена сквозным шифрованием.", + "mlConsentPrivacy": "Пожалуйста, нажмите здесь для получения подробностей об этой функции в нашей политике конфиденциальности", "mlConsentConfirmation": "Я понимаю и хочу включить машинное обучение", - "magicSearch": "Волшебный поиск", + "magicSearch": "Магический поиск", + "discover": "Откройте для себя", + "@discover": { + "description": "The text to display for the discover section under which we show receipts, screenshots, sunsets, greenery, etc." + }, + "discover_identity": "Документы", + "discover_screenshots": "Скриншоты", + "discover_receipts": "Чеки", "discover_notes": "Заметки", "discover_memes": "Мемы", - "discover_babies": "Дети", + "discover_visiting_cards": "Визитки", + "discover_babies": "Малыши", "discover_pets": "Питомцы", "discover_selfies": "Селфи", "discover_wallpapers": "Обои", "discover_food": "Еда", - "discover_celebrations": "Поздравления", + "discover_celebrations": "Праздники", "discover_sunset": "Закат", - "discover_hills": "Горы", + "discover_hills": "Холмы", "discover_greenery": "Зелень", - "mlIndexingDescription": "Обратите внимание, что машинное обучение приведёт к повышенному потреблению трафика и батареи, пока все элементы не будут проиндексированы. Рекомендуем использовать ПК версию для более быстрого индексирования. Полученные результаты будут синхронизированы автоматически между устройствами.", + "mlIndexingDescription": "Обратите внимание, что машинное обучение увеличит использование трафика и батареи, пока все элементы не будут проиндексированы. Рассмотрите использование приложения для компьютера для более быстрой индексации. Результаты будут автоматически синхронизированы.", "loadingModel": "Загрузка моделей...", - "waitingForWifi": "Ожидание WiFi...", + "waitingForWifi": "Ожидание Wi-Fi...", "status": "Статус", - "indexedItems": "Индексированные элементы", - "pendingItems": "Отложенные элементы", - "clearIndexes": "Очистить индексы", + "indexedItems": "Проиндексированные элементы", + "pendingItems": "Элементы в очереди", + "clearIndexes": "Удалить индексы", "selectFoldersForBackup": "Выберите папки для резервного копирования", "selectedFoldersWillBeEncryptedAndBackedUp": "Выбранные папки будут зашифрованы и сохранены в резервной копии", "unselectAll": "Отменить выбор", "selectAll": "Выбрать все", "skip": "Пропустить", - "updatingFolderSelection": "Обновление выбора папки...", - "itemCount": "{count, plural, one{{count} штука} other{{count} штук}}", - "deleteItemCount": "{count, plural, =1 {Удалена {count} штука} other {Удалено {count} штук}}", - "duplicateItemsGroup": "{count} файлов, {formattedSize}", + "updatingFolderSelection": "Обновление выбора папок...", + "itemCount": "{count, plural, one{{count} элемент} few{{count} элемента} other{{count} элементов}}", + "deleteItemCount": "{count, plural, =1 {Удалить {count} элемент} one {Удалить {count} элемент} few {Удалить {count} элемента} other {Удалить {count} элементов}}", + "duplicateItemsGroup": "{count} файлов, по {formattedSize} каждый", "@duplicateItemsGroup": { "description": "Display the number of duplicate files and their size", "type": "text", @@ -457,56 +476,59 @@ } }, "showMemories": "Показать воспоминания", - "yearsAgo": "{count, plural, one{{count} год назад} other{{count} лет назад}}", + "yearsAgo": "{count, plural, one{{count} год назад} few{{count} года назад} other{{count} лет назад}}", "backupSettings": "Настройки резервного копирования", - "backupStatusDescription": "Здесь будут сохранены резервные копии", - "backupOverMobileData": "Резервное копирование через мобильную сеть", + "backupStatus": "Статус резервного копирования", + "backupStatusDescription": "Элементы, сохранённые в резервной копии, появятся здесь", + "backupOverMobileData": "Резервное копирование через мобильный интернет", "backupVideos": "Резервное копирование видео", "disableAutoLock": "Отключить автоблокировку", - "deviceLockExplanation": "Отключить блокировку экрана, когда Ente находится на переднем плане и выполняется резервное копирование. Обычно это не нужно, но это может ускорить загрузку и первоначальный импорт больших библиотек.", + "deviceLockExplanation": "Отключить блокировку экрана устройства, когда Ente на экране, и выполняется резервное копирование. Обычно это не требуется, но это может ускорить завершение больших загрузок и первоначального импортирования крупных библиотек.", "about": "О программе", "weAreOpenSource": "У нас открытый исходный код!", "privacy": "Конфиденциальность", - "terms": "Условия использования", + "terms": "Условия", "checkForUpdates": "Проверить обновления", "checkStatus": "Проверить статус", "checking": "Проверка...", "youAreOnTheLatestVersion": "Вы используете последнюю версию", "account": "Аккаунт", "manageSubscription": "Управление подпиской", - "authToChangeYourEmail": "Пожалуйста, авторизуйтесь, чтобы изменить адрес электронной почты", - "changePassword": "Изменить пароль", - "authToChangeYourPassword": "Пожалуйста, авторизуйтесь, чтобы изменить пароль", - "emailVerificationToggle": "Вход с кодом на почту", - "authToChangeEmailVerificationSetting": "Пожалуйста, войдите, чтобы изменить настройку подтверждения электронной почты", - "exportYourData": "Экспорт данных", + "authToChangeYourEmail": "Пожалуйста, авторизуйтесь для смены электронной почты", + "changePassword": "Сменить пароль", + "authToChangeYourPassword": "Пожалуйста, авторизуйтесь для смены пароля", + "emailVerificationToggle": "Подтверждение входа по почте", + "authToChangeEmailVerificationSetting": "Пожалуйста, авторизуйтесь для изменения настроек подтверждения электронной почты", + "exportYourData": "Экспортировать ваши данные", "logout": "Выйти", - "authToInitiateAccountDeletion": "Пожалуйста, авторизуйтесь, чтобы начать удаление аккаунта", + "authToInitiateAccountDeletion": "Пожалуйста, авторизуйтесь для начала процедуры удаления аккаунта", "areYouSureYouWantToLogout": "Вы уверены, что хотите выйти?", "yesLogout": "Да, выйти", "aNewVersionOfEnteIsAvailable": "Доступна новая версия Ente.", "update": "Обновить", - "installManually": "Установка вручную", - "criticalUpdateAvailable": "Доступно важное обновление", + "installManually": "Установить вручную", + "criticalUpdateAvailable": "Доступно критическое обновление", "updateAvailable": "Доступно обновление", - "ignoreUpdate": "Ничего не делать", + "ignoreUpdate": "Игнорировать", "downloading": "Скачивание...", - "cannotDeleteSharedFiles": "Невозможно удалить общие файлы", - "theDownloadCouldNotBeCompleted": "Загрузка не может быть завершена", + "cannotDeleteSharedFiles": "Нельзя удалить общие файлы", + "theDownloadCouldNotBeCompleted": "Скачивание не может быть завершено", "retry": "Повторить", - "backedUpFolders": "Резервное копирование папок", + "backedUpFolders": "Папки для резервного копирования", "backup": "Резервное копирование", - "freeUpDeviceSpace": "Освободите место на устройстве", - "freeUpDeviceSpaceDesc": "Сохраните место на вашем устройстве, очистив уже сохраненные файлы.", - "allClear": "✨ Все чисто", - "noDeviceThatCanBeDeleted": "У вас нет файлов на этом устройстве, которые могут быть удалены", - "removeDuplicates": "Удаление дубликатов", - "removeDuplicatesDesc": "Просмотрите и удалите точные дубликаты.", + "freeUpDeviceSpace": "Освободить место на устройстве", + "freeUpDeviceSpaceDesc": "Освободите место на устройстве, удалив файлы, которые уже сохранены в резервной копии.", + "allClear": "✨ Всё чисто", + "noDeviceThatCanBeDeleted": "На этом устройстве нет файлов, которые можно удалить", + "removeDuplicates": "Удалить дубликаты", + "removeDuplicatesDesc": "Проверьте и удалите файлы, которые являются точными дубликатами.", "viewLargeFiles": "Большие файлы", + "viewLargeFilesDesc": "Узнайте, какие файлы занимают больше всего места.", "noDuplicates": "✨ Дубликатов нет", - "success": "Успешно", + "youveNoDuplicateFilesThatCanBeCleared": "У вас нет дубликатов файлов, которые можно удалить", + "success": "Успех", "rateUs": "Оцените нас", - "remindToEmptyDeviceTrash": "Также очистите \"Недавно удалённые\" из \"Настройки\" -> \"Хранилище\", чтобы получить больше свободного места", + "remindToEmptyDeviceTrash": "Также очистите «Недавно удалённые» в «Настройки» → «Хранилище», чтобы освободить место", "youHaveSuccessfullyFreedUp": "Вы успешно освободили {storageSaved}!", "@youHaveSuccessfullyFreedUp": { "description": "The text to display when the user has successfully freed up storage", @@ -518,9 +540,9 @@ } } }, - "remindToEmptyEnteTrash": "Также очистите корзину для освобождения места", - "sparkleSuccess": "✨ Успешно", - "duplicateFileCountWithStorageSaved": "Вы привели себя в порядок {count, plural, one{{count} duplicate file} other{{count} duplicate files}}, экономия ({storageSaved}!)\n", + "remindToEmptyEnteTrash": "Также очистите «Корзину», чтобы освободить место", + "sparkleSuccess": "✨ Успех", + "duplicateFileCountWithStorageSaved": "Вы удалили {count, plural, one{{count} дубликат} few{{count} дубликата} other{{count} дубликатов}}, освободив ({storageSaved}!)", "@duplicateFileCountWithStorageSaved": { "description": "The text to display when the user has successfully cleaned up duplicate files", "type": "text", @@ -535,48 +557,48 @@ } } }, - "familyPlans": "Семейные планы", + "familyPlans": "Семейные тарифы", "referrals": "Рефералы", "notifications": "Уведомления", - "sharedPhotoNotifications": "Новые общие фотографии", + "sharedPhotoNotifications": "Новые общие фото", "sharedPhotoNotificationsExplanation": "Получать уведомления, когда кто-то добавляет фото в общий альбом, в котором вы состоите", - "advanced": "Дополнительно", - "general": "Общее", + "advanced": "Расширенные", + "general": "Общие", "security": "Безопасность", - "authToViewYourRecoveryKey": "Пожалуйста, авторизуйтесь для просмотра вашего ключа восстановления", + "authToViewYourRecoveryKey": "Пожалуйста, авторизуйтесь для просмотра ключа восстановления", "twofactor": "Двухфакторная", "authToConfigureTwofactorAuthentication": "Пожалуйста, авторизуйтесь для настройки двухфакторной аутентификации", "lockscreen": "Экран блокировки", - "authToChangeLockscreenSetting": "Пожалуйста, авторизуйтесь, чтобы изменить настройки экрана блокировки", + "authToChangeLockscreenSetting": "Пожалуйста, авторизуйтесь для изменения настроек экрана блокировки", "viewActiveSessions": "Просмотр активных сессий", "authToViewYourActiveSessions": "Пожалуйста, авторизуйтесь для просмотра активных сессий", "disableTwofactor": "Отключить двухфакторную аутентификацию", "confirm2FADisable": "Вы уверены, что хотите отключить двухфакторную аутентификацию?", "no": "Нет", "yes": "Да", - "social": "Соцсети", + "social": "Социальные сети", "rateUsOnStore": "Оцените нас в {storeName}", "blog": "Блог", - "merchandise": "Товары", + "merchandise": "Мерч", "twitter": "Twitter", "mastodon": "Mastodon", "matrix": "Matrix", "discord": "Discord", "reddit": "Reddit", - "yourStorageDetailsCouldNotBeFetched": "Не удалось получить сведения о вашем хранилище", + "yourStorageDetailsCouldNotBeFetched": "Не удалось получить данные о вашем хранилище", "reportABug": "Сообщить об ошибке", "reportBug": "Сообщить об ошибке", "suggestFeatures": "Предложить идею", "support": "Поддержка", "theme": "Тема", - "lightTheme": "Светлая тема", - "darkTheme": "Темная тема", - "systemTheme": "Система", + "lightTheme": "Светлая", + "darkTheme": "Тёмная", + "systemTheme": "Системная", "freeTrial": "Бесплатный пробный период", - "selectYourPlan": "Выберете план", - "enteSubscriptionPitch": "Ente сохраняет ваши воспоминания, так что они всегда доступны для вас, даже если вы потеряете доступ к устройству.", - "enteSubscriptionShareWithFamily": "Ваша семья может быть добавлена в ваш план.", - "currentUsageIs": "Текущее использование ", + "selectYourPlan": "Выберите тариф", + "enteSubscriptionPitch": "Ente сохраняет ваши воспоминания, чтобы они всегда были доступны вам, даже если вы потеряете устройство.", + "enteSubscriptionShareWithFamily": "Ваша семья также может быть включена в ваш тариф.", + "currentUsageIs": "Текущее использование составляет ", "@currentUsageIs": { "description": "This text is followed by storage usage", "examples": { @@ -585,16 +607,16 @@ "type": "text" }, "faqs": "Часто задаваемые вопросы", - "renewsOn": "Обновление подписки на {endDate}", - "freeTrialValidTill": "Бесплатная пробная версия действительна до {endDate}", - "validTill": "Действителен по {endDate}", - "addOnValidTill": "Ваше дополнение {storageAmount} действительно по {endDate}", - "playStoreFreeTrialValidTill": "Бесплатный пробный период до {endDate}.\nПосле, вы сможете выбрать платный план.", + "renewsOn": "Подписка будет продлена {endDate}", + "freeTrialValidTill": "Бесплатный пробный период действителен до {endDate}", + "validTill": "Действительно до {endDate}", + "addOnValidTill": "Ваше дополнение на {storageAmount} действительно до {endDate}", + "playStoreFreeTrialValidTill": "Бесплатный пробный период действителен до {endDate}.\nПосле этого вы можете выбрать платный тариф.", "subWillBeCancelledOn": "Ваша подписка будет отменена {endDate}", "subscription": "Подписка", - "paymentDetails": "Детали платежа", + "paymentDetails": "Платёжные данные", "manageFamily": "Управление семьёй", - "contactToManageSubscription": "Пожалуйста, свяжитесь с нами по адресу support@ente.io для управления подпиской {provider}.", + "contactToManageSubscription": "Пожалуйста, свяжитесь с нами по адресу support@ente.io для управления вашей подпиской {provider}.", "renewSubscription": "Продлить подписку", "cancelSubscription": "Отменить подписку", "areYouSureYouWantToRenew": "Вы уверены, что хотите продлить?", @@ -603,7 +625,7 @@ "yesCancel": "Да, отменить", "failedToRenew": "Не удалось продлить", "failedToCancel": "Не удалось отменить", - "twoMonthsFreeOnYearlyPlans": "2 бесплатных месяца при годовом плане", + "twoMonthsFreeOnYearlyPlans": "2 месяца в подарок на годовом тарифе", "monthly": "Ежемесячно", "@monthly": { "description": "The text to display for monthly plans", @@ -614,10 +636,10 @@ "description": "The text to display for yearly plans", "type": "text" }, - "confirmPlanChange": "Подтвердить изменение плана", - "areYouSureYouWantToChangeYourPlan": "Хотите сменить текущий план?", - "youCannotDowngradeToThisPlan": "Вы не можете перейти к этому плану", - "cancelOtherSubscription": "Пожалуйста, сначала отмените вашу существующую подписку от {paymentProvider}", + "confirmPlanChange": "Подтвердить смену тарифа", + "areYouSureYouWantToChangeYourPlan": "Вы уверены, что хотите сменить тариф?", + "youCannotDowngradeToThisPlan": "Вы не можете понизить до этого тарифа", + "cancelOtherSubscription": "Пожалуйста, сначала отмените существующую подписку через {paymentProvider}", "@cancelOtherSubscription": { "description": "The text to display when the user has an existing subscription from a different payment provider", "type": "text", @@ -628,24 +650,24 @@ } } }, - "optionalAsShortAsYouLike": "Необязательно, как вам нравится...", + "optionalAsShortAsYouLike": "Необязательно, насколько коротко пожелаете...", "send": "Отправить", - "askCancelReason": "Ваша подписка была отменена. Хотите рассказать почему?", + "askCancelReason": "Ваша подписка была отменена. Не хотели бы вы поделиться причиной?", "thankYouForSubscribing": "Спасибо за подписку!", - "yourPurchaseWasSuccessful": "Покупка прошла успешно", - "yourPlanWasSuccessfullyUpgraded": "Ваш план был успешно улучшен", - "yourPlanWasSuccessfullyDowngraded": "Ваш план был успешно изменен", + "yourPurchaseWasSuccessful": "Ваша покупка прошла успешно", + "yourPlanWasSuccessfullyUpgraded": "Ваш тариф успешно повышен", + "yourPlanWasSuccessfullyDowngraded": "Ваш тариф успешно понижен", "yourSubscriptionWasUpdatedSuccessfully": "Ваша подписка успешно обновлена", - "googlePlayId": "Google Play ID", - "appleId": "Apple ID", - "playstoreSubscription": "Подписка на PlayStore", - "appstoreSubscription": "Подписка на AppStore", - "subAlreadyLinkedErrMessage": "Ваш {id} уже связан с другой учетной записью Ente.\nЕсли вы хотите использовать {id} с этой учетной записью, пожалуйста, свяжитесь с нашей службой поддержки", + "googlePlayId": "Идентификатор Google Play", + "appleId": "Идентификатор Apple", + "playstoreSubscription": "Подписка PlayStore", + "appstoreSubscription": "Подписка AppStore", + "subAlreadyLinkedErrMessage": "Ваш {id} уже связан с другим аккаунтом Ente.\nЕсли вы хотите использовать {id} с этим аккаунтом, пожалуйста, свяжитесь с нашей службой поддержки", "visitWebToManage": "Пожалуйста, посетите web.ente.io для управления вашей подпиской", "couldNotUpdateSubscription": "Не удалось обновить подписку", - "pleaseContactSupportAndWeWillBeHappyToHelp": "Пожалуйста, свяжитесь с support@ente.io и мы Вам поможем!", - "paymentFailed": "Сбой платежа", - "paymentFailedTalkToProvider": "Если с вас сняли оплату, обратитесь в службу поддержки {providerName}", + "pleaseContactSupportAndWeWillBeHappyToHelp": "Пожалуйста, свяжитесь с support@ente.io, и мы будем рады помочь!", + "paymentFailed": "Платёж не удался", + "paymentFailedTalkToProvider": "Пожалуйста, обратитесь в поддержку {providerName}, если с вас сняли деньги", "@paymentFailedTalkToProvider": { "description": "The text to display when the payment failed", "type": "text", @@ -656,58 +678,60 @@ } } }, - "continueOnFreeTrial": "Продолжить на пробной версии", + "continueOnFreeTrial": "Продолжить с бесплатным пробным периодом", "areYouSureYouWantToExit": "Вы уверены, что хотите выйти?", "thankYou": "Спасибо", - "failedToVerifyPaymentStatus": "Не удалось подтвердить статус платежа", - "pleaseWaitForSometimeBeforeRetrying": "Пожалуйста, подождите немного перед повторной попыткой", - "paymentFailedMessage": "К сожалению, ваш платеж не был выполнен. Пожалуйста, свяжитесь со службой поддержки, и мы вам поможем!", - "youAreOnAFamilyPlan": "Вы на семейном плане!", + "failedToVerifyPaymentStatus": "Не удалось проверить статус платежа", + "pleaseWaitForSometimeBeforeRetrying": "Пожалуйста, подождите некоторое время перед повторной попыткой", + "paymentFailedMessage": "К сожалению, ваш платёж не удался. Пожалуйста, свяжитесь с поддержкой, и мы вам поможем!", + "youAreOnAFamilyPlan": "Вы на семейном тарифе!", "contactFamilyAdmin": "Пожалуйста, свяжитесь с {familyAdminEmail} для управления подпиской", "leaveFamily": "Покинуть семью", - "areYouSureThatYouWantToLeaveTheFamily": "Вы уверены, что хотите покинуть семейный план?", - "leave": "Выйти", + "areYouSureThatYouWantToLeaveTheFamily": "Вы уверены, что хотите покинуть семейный тариф?", + "leave": "Покинуть", "rateTheApp": "Оценить приложение", "startBackup": "Начать резервное копирование", - "noPhotosAreBeingBackedUpRightNow": "На данный момент резервных копий нет", + "noPhotosAreBeingBackedUpRightNow": "В данный момент фото не копируются", "preserveMore": "Сохранить больше", - "grantFullAccessPrompt": "Пожалуйста, разрешите доступ к вашим фотографиям в Настройках приложения", + "grantFullAccessPrompt": "Пожалуйста, разрешите доступ ко всем фото в настройках устройства", + "allowPermTitle": "Разрешить доступ к фото", + "allowPermBody": "Пожалуйста, разрешите доступ к вашим фото через настройки устройства, чтобы Ente мог отображать и сохранять вашу библиотеку.", "openSettings": "Открыть настройки", - "selectMorePhotos": "Выбрать больше фотографий", + "selectMorePhotos": "Выбрать больше фото", "existingUser": "Существующий пользователь", - "privateBackups": "Приватные резервные копии", - "forYourMemories": "для Ваших воспоминаний", + "privateBackups": "Защищённые резервные копии", + "forYourMemories": "для ваших воспоминаний", "endtoendEncryptedByDefault": "Сквозное шифрование по умолчанию", - "safelyStored": "Безопасное хранение", + "safelyStored": "Надёжно сохранены", "atAFalloutShelter": "в бункере", - "designedToOutlive": "Создан для вечной жизни", + "designedToOutlive": "Создано на века", "available": "Доступно", "everywhere": "везде", - "androidIosWebDesktop": "Android, iOS, Web, ПК", - "mobileWebDesktop": "Телефон, Web, ПК", + "androidIosWebDesktop": "Android, iOS, браузер, компьютер", + "mobileWebDesktop": "Смартфон, браузер, компьютер", "newToEnte": "Впервые в Ente", "pleaseLoginAgain": "Пожалуйста, войдите снова", - "autoLogoutMessage": "В связи с технической ошибкой вы вышли из системы. Приносим свои извинения.", - "yourSubscriptionHasExpired": "Срок действия вашей подписки окончился", - "storageLimitExceeded": "Превышен предел хранения", - "upgrade": "Обновить", - "raiseTicket": "Подать заявку", + "autoLogoutMessage": "Из-за технического сбоя вы были выведены из системы. Приносим извинения за неудобства.", + "yourSubscriptionHasExpired": "Срок действия вашей подписки истёк", + "storageLimitExceeded": "Превышен лимит хранилища", + "upgrade": "Улучшить", + "raiseTicket": "Создать запрос", "@raiseTicket": { "description": "Button text for raising a support tickets in case of unhandled errors during backup", "type": "text" }, - "backupFailed": "Ошибка резервного копирования", + "backupFailed": "Резервное копирование не удалось", "couldNotBackUpTryLater": "Нам не удалось создать резервную копию ваших данных.\nМы повторим попытку позже.", - "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": "Ente может шифровать и сохранять файлы только в том случае, если вы предоставите к ним доступ", - "pleaseGrantPermissions": "Предоставьте разрешение", + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": "Ente может шифровать и сохранять файлы, только если вы предоставите к ним доступ", + "pleaseGrantPermissions": "Пожалуйста, предоставьте разрешения", "grantPermission": "Предоставить разрешение", - "privateSharing": "Личный доступ", - "shareOnlyWithThePeopleYouWant": "Поделитесь только с теми людьми, с которыми вы хотите", - "usePublicLinksForPeopleNotOnEnte": "Использовать публичные ссылки для людей не на Ente", - "allowPeopleToAddPhotos": "Разрешить пользователям добавлять фотографии", - "shareAnAlbumNow": "Поделиться альбомом сейчас", - "collectEventPhotos": "Собрать фото события", - "sessionExpired": "Сессия недействительная", + "privateSharing": "Защищённый обмен", + "shareOnlyWithThePeopleYouWant": "Делитесь только с теми, с кем хотите", + "usePublicLinksForPeopleNotOnEnte": "Используйте публичные ссылки для людей, не использующих Ente", + "allowPeopleToAddPhotos": "Разрешить людям добавлять фото", + "shareAnAlbumNow": "Поделиться альбомом", + "collectEventPhotos": "Собрать фото с мероприятия", + "sessionExpired": "Сессия истекла", "loggingOut": "Выход...", "@onDevice": { "description": "The text displayed above folders/albums stored on device", @@ -720,11 +744,11 @@ }, "onEnte": "В ente", "name": "Имя", - "newest": "Самые новые", + "newest": "Недавние", "lastUpdated": "Последнее обновление", "deleteEmptyAlbums": "Удалить пустые альбомы", "deleteEmptyAlbumsWithQuestionMark": "Удалить пустые альбомы?", - "deleteAlbumsDialogBody": "Это удалит все пустые альбомы. Это полезно, если вы хотите меньше беспорядка в списке альбомов.", + "deleteAlbumsDialogBody": "Это удалит все пустые альбомы. Это может быть полезно, если вы хотите навести порядок в списке альбомов.", "deleteProgress": "Удаление {currentlyDeleting} / {totalCount}", "genericProgress": "Обработка {currentlyProcessing} / {totalCount}", "@genericProgress": { @@ -744,7 +768,7 @@ "permanentlyDelete": "Удалить безвозвратно", "canOnlyCreateLinkForFilesOwnedByYou": "Можно создать ссылку только для ваших файлов", "publicLinkCreated": "Публичная ссылка создана", - "youCanManageYourLinksInTheShareTab": "Вы можете управлять своими ссылками во вкладке \"Поделиться\".", + "youCanManageYourLinksInTheShareTab": "Вы можете управлять своими ссылками на вкладке «Поделиться».", "linkCopiedToClipboard": "Ссылка скопирована в буфер обмена", "restore": "Восстановить", "@restore": { @@ -752,27 +776,27 @@ "type": "text" }, "moveToAlbum": "Переместить в альбом", - "unhide": "Показать", - "unarchive": "Разархивировать", + "unhide": "Не скрывать", + "unarchive": "Извлечь из архива", "favorite": "В избранное", - "removeFromFavorite": "Удалить из избранного", + "removeFromFavorite": "Убрать из избранного", "shareLink": "Поделиться ссылкой", "createCollage": "Создать коллаж", "saveCollage": "Сохранить коллаж", - "collageSaved": "Коллаж сохранен в галерее", - "collageLayout": "Разметка", + "collageSaved": "Коллаж сохранён в галерее", + "collageLayout": "Макет", "addToEnte": "Добавить в Ente", "addToAlbum": "Добавить в альбом", "delete": "Удалить", "hide": "Скрыть", "share": "Поделиться", - "unhideToAlbum": "Показать в альбоме", - "restoreToAlbum": "Восстановить в альбоме", - "moveItem": "{count, plural, one {Переместить элемент} other {Переместить элементы}}", + "unhideToAlbum": "Перенести в альбом", + "restoreToAlbum": "Восстановить в альбом", + "moveItem": "{count, plural, =1 {Переместить элемент} other {Переместить элементы}}", "@moveItem": { "description": "Page title while moving one or more items to an album" }, - "addItem": "{count, plural, one {Добавить элемент} other {Добавить элементы}}", + "addItem": "{count, plural, =1 {Добавить элемент} other {Добавить элементы}}", "@addItem": { "description": "Page title while adding one or more items to album" }, @@ -780,26 +804,36 @@ "selectAlbum": "Выбрать альбом", "searchByAlbumNameHint": "Название альбома", "albumTitle": "Название альбома", - "enterAlbumName": "Введите имя альбома", + "enterAlbumName": "Введите название альбома", "restoringFiles": "Восстановление файлов...", "movingFilesToAlbum": "Перемещение файлов в альбом...", - "unhidingFilesToAlbum": "Раскрытие файлов в альбоме", - "canNotUploadToAlbumsOwnedByOthers": "Невозможно загрузить в альбомы других людей", + "unhidingFilesToAlbum": "Перенос файлов в альбом", + "canNotUploadToAlbumsOwnedByOthers": "Нельзя загружать в альбомы, принадлежащие другим", "uploadingFilesToAlbum": "Загрузка файлов в альбом...", "addedSuccessfullyTo": "Успешно добавлено в {albumName}", "movedSuccessfullyTo": "Успешно перемещено в {albumName}", "thisAlbumAlreadyHDACollaborativeLink": "У этого альбома уже есть совместная ссылка", "collaborativeLinkCreatedFor": "Совместная ссылка создана для {albumName}", - "askYourLovedOnesToShare": "Попросите ваших близких поделиться", + "askYourLovedOnesToShare": "Попросите близких поделиться", "invite": "Пригласить", - "shareYourFirstAlbum": "Поделиться первым альбомом", - "sharedWith": "Поделиться с {emailIDs}", - "sharedWithMe": "Поделиться со мной", - "sharedByMe": "Поделился мной", - "doubleYourStorage": "Удвой своё хранилище", - "referFriendsAnd2xYourPlan": "Пригласите друзей и удвойте свой план", - "shareAlbumHint": "Откройте альбом и нажмите кнопку \"Поделиться\" в правом верхнем углу экрана.", - "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": "Элементы показывают количество дней, оставшихся до окончательного удаления", + "shareYourFirstAlbum": "Поделитесь своим первым альбомом", + "sharedWith": "Доступен для {emailIDs}", + "sharedWithMe": "Со мной поделились", + "sharedByMe": "Я поделился", + "doubleYourStorage": "Удвойте своё хранилище", + "referFriendsAnd2xYourPlan": "Пригласите друзей и удвойте свой тариф", + "shareAlbumHint": "Откройте альбом и нажмите кнопку «Поделиться» в правом верхнем углу, чтобы поделиться.", + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": "На элементах отображается количество дней, оставшихся до их безвозвратного удаления", + "trashDaysLeft": "{count, plural, =0 {Скоро} =1 {1 день} one{{count} день} few{{count} дня} other {{count} дней}}", + "@trashDaysLeft": { + "description": "Text to indicate number of days remaining before permanent deletion", + "placeholders": { + "count": { + "example": "1|2|3", + "type": "int" + } + } + }, "deleteAll": "Удалить всё", "renameAlbum": "Переименовать альбом", "convertToAlbum": "Преобразовать в альбом", @@ -813,35 +847,35 @@ "rename": "Переименовать", "leaveSharedAlbum": "Покинуть общий альбом?", "leaveAlbum": "Покинуть альбом", - "photosAddedByYouWillBeRemovedFromTheAlbum": "Добавленные вами фотографии будут удалены из альбома", + "photosAddedByYouWillBeRemovedFromTheAlbum": "Добавленные вами фото будут удалены из альбома", "youveNoFilesInThisAlbumThatCanBeDeleted": "В этом альбоме нет файлов, которые можно удалить", "youDontHaveAnyArchivedItems": "У вас нет архивных элементов.", - "ignoredFolderUploadReason": "Некоторые файлы в этом альбоме пропущены, потому что они ранее были удалены из Ente.", + "ignoredFolderUploadReason": "Некоторые файлы в этом альбоме игнорируются, так как ранее они были удалены из Ente.", "resetIgnoredFiles": "Сбросить игнорируемые файлы", "deviceFilesAutoUploading": "Файлы, добавленные в этот альбом на устройстве, будут автоматически загружены в Ente.", - "turnOnBackupForAutoUpload": "Включите резервное копирование, чтобы автоматически загружать файлы, добавленные в эту папку устройства, в Ente.", + "turnOnBackupForAutoUpload": "Включите резервное копирование, чтобы автоматически загружать файлы из этой папки на устройстве в Ente.", "noHiddenPhotosOrVideos": "Нет скрытых фото или видео", "toHideAPhotoOrVideo": "Скрыть фото или видео", - "openTheItem": "• Открыть элемент", - "clickOnTheOverflowMenu": "• Нажмите на дополнительное меню", - "click": "• Клик", - "nothingToSeeHere": "Здесь нечего смотреть! 👀", - "unarchiveAlbum": "Разархивировать альбом", + "openTheItem": "• Откройте элемент", + "clickOnTheOverflowMenu": "• Нажмите на меню дополнительных действий", + "click": "• Нажмите", + "nothingToSeeHere": "Здесь ничего нет! 👀", + "unarchiveAlbum": "Извлечь альбом из архива", "archiveAlbum": "Архивировать альбом", - "calculating": "Расчёт...", - "pleaseWaitDeletingAlbum": "Пожалуйста, подождите. Удаление альбома", - "searchByExamples": "• Названия альбомов («Камера», ...)\n• Типы файлов («Видео», «.gif», ...)\n• Годы и месяцы («2022», «Январь», ...)\n• Праздники («Рождество», ...)\n• Описания фотографий («#fun», ...)", + "calculating": "Подсчёт...", + "pleaseWaitDeletingAlbum": "Пожалуйста, подождите, альбом удаляется", + "searchByExamples": "• Названия альбомов (например, «Камера»)\n• Типы файлов (например, «Видео», «.gif»)\n• Годы и месяцы (например, «2022», «Январь»)\n• Праздники (например, «Рождество»)\n• Описания фото (например, «#веселье»)", "youCanTrySearchingForADifferentQuery": "Вы можете попробовать выполнить поиск по другому запросу.", - "noResultsFound": "Ничего не найдено", + "noResultsFound": "Нет результатов", "addedBy": "Добавлено {emailOrName}", - "loadingExifData": "Загрузка EXIF данных...", - "viewAllExifData": "Просмотреть все данные EXIF", + "loadingExifData": "Загрузка данных EXIF...", + "viewAllExifData": "Посмотреть все данные EXIF", "noExifData": "Нет данных EXIF", - "thisImageHasNoExifData": "Это изображение не имеет exif данных", + "thisImageHasNoExifData": "Это фото не имеет данных EXIF", "exif": "EXIF", - "noResults": "Ничего не найденo", - "weDontSupportEditingPhotosAndAlbumsThatYouDont": "Мы не можем поддержать редактирование фотографий и альбомов, которыми вы не владеете", - "failedToFetchOriginalForEdit": "Не удалось получить оригинал для редактирования", + "noResults": "Нет результатов", + "weDontSupportEditingPhotosAndAlbumsThatYouDont": "Мы не поддерживаем редактирование фото и альбомов, которые вам пока не принадлежат", + "failedToFetchOriginalForEdit": "Не удалось скачать оригинал для редактирования", "close": "Закрыть", "setAs": "Установить как", "fileSavedToGallery": "Файл сохранён в галерею", @@ -849,22 +883,22 @@ "fileFailedToSaveToGallery": "Не удалось сохранить файл в галерею", "download": "Скачать", "pressAndHoldToPlayVideo": "Нажмите и удерживайте для воспроизведения видео", - "pressAndHoldToPlayVideoDetailed": "Нажмите и удерживайте изображение для воспроизведения видео", - "downloadFailed": "Загрузка не удалась", - "deduplicateFiles": "Дедуплицировать файлы", - "deselectAll": "Снять выделение", - "reviewDeduplicateItems": "Пожалуйста, проверьте и удалите те элементы, которые вы считаете что это дубликаты.", - "clubByCaptureTime": "Клуб по времени захвата", - "clubByFileName": "Клуб по имени файла", + "pressAndHoldToPlayVideoDetailed": "Нажмите с удержанием на изображение для воспроизведения видео", + "downloadFailed": "Скачивание не удалось", + "deduplicateFiles": "Удалить дубликаты файлов", + "deselectAll": "Отменить выделение", + "reviewDeduplicateItems": "Пожалуйста, проверьте и удалите элементы, которые считаете дубликатами.", + "clubByCaptureTime": "Группировать по времени съёмки", + "clubByFileName": "Группировать по имени файла", "count": "Количество", "totalSize": "Общий размер", - "longpressOnAnItemToViewInFullscreen": "Удерживайте нажатие на элемент для просмотра в полноэкранном режиме", + "longpressOnAnItemToViewInFullscreen": "Нажмите с удержанием на элемент для просмотра в полноэкранном режиме", "decryptingVideo": "Расшифровка видео...", "authToViewYourMemories": "Пожалуйста, авторизуйтесь для просмотра воспоминаний", "unlock": "Разблокировать", "freeUpSpace": "Освободить место", - "freeUpSpaceSaving": "{count, plural, one {Это можно удалить с устройства, чтобы освободить {formattedSize}} other {Их можно удалить с устройства, чтобы освободить {formattedSize}}}", - "filesBackedUpInAlbum": "{count, plural,one {для 1 файла было создан бекап} other {для {formattedNumber} файлов были созданы бекапы}}", + "freeUpSpaceSaving": "{count, plural, =1 {Его можно удалить с устройства, чтобы освободить {formattedSize}} other {Их можно удалить с устройства, чтобы освободить {formattedSize}}}", + "filesBackedUpInAlbum": "{count, plural, one {{formattedNumber} файл в этом альбоме был успешно сохранён} few{{formattedNumber} файла в этом альбоме были успешно сохранены} other {{formattedNumber} файлов в этом альбоме были успешно сохранены}}", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", "placeholders": { @@ -879,7 +913,7 @@ } } }, - "filesBackedUpFromDevice": "{count, plural,one {для 1 файла было создан бекап} other {для {formattedNumber} файлов были созданы бекапы}}", + "filesBackedUpFromDevice": "{count, plural, one {{formattedNumber} файл на этом устройстве был успешно сохранён} few{{formattedNumber} файла на этом устройстве были успешно сохранены} other {{formattedNumber} файлов на этом устройстве были успешно сохранены}}", "@filesBackedUpFromDevice": { "description": "Text to tell user how many files have been backed up from this device", "placeholders": { @@ -897,7 +931,7 @@ "@freeUpSpaceSaving": { "description": "Text to tell user how much space they can free up by deleting items from the device" }, - "freeUpAccessPostDelete": "Вы все еще можете получить доступ к {count, plural, one {ниму} other {ним}} на Ente, пока у вас есть активная подписка", + "freeUpAccessPostDelete": "Вы всё ещё сможете получить доступ к {count, plural, =1 {нему} other {ним}} в Ente, пока у вас активна подписка", "@freeUpAccessPostDelete": { "placeholders": { "count": { @@ -906,22 +940,22 @@ } } }, - "freeUpAmount": "Освободите {sizeInMBorGB}", - "thisEmailIsAlreadyInUse": "Этот адрес электронной почты уже используется", + "freeUpAmount": "Освободить {sizeInMBorGB}", + "thisEmailIsAlreadyInUse": "Эта электронная почта уже используется", "incorrectCode": "Неверный код", - "authenticationFailedPleaseTryAgain": "Аутентификация не удалась, попробуйте еще раз", - "verificationFailedPleaseTryAgain": "Проверка не удалась, попробуйте еще раз", + "authenticationFailedPleaseTryAgain": "Аутентификация не удалась, пожалуйста, попробуйте снова", + "verificationFailedPleaseTryAgain": "Проверка не удалась, пожалуйста, попробуйте снова", "authenticating": "Аутентификация...", "authenticationSuccessful": "Аутентификация прошла успешно!", - "incorrectRecoveryKey": "Неправильный ключ восстановления", - "theRecoveryKeyYouEnteredIsIncorrect": "Введен неправильный ключ восстановления", + "incorrectRecoveryKey": "Неверный ключ восстановления", + "theRecoveryKeyYouEnteredIsIncorrect": "Введённый вами ключ восстановления неверен", "twofactorAuthenticationSuccessfullyReset": "Двухфакторная аутентификация успешно сброшена", - "pleaseVerifyTheCodeYouHaveEntered": "Пожалуйста, подтвердите введенный код", - "pleaseContactSupportIfTheProblemPersists": "Если проблема не устранена, обратитесь в службу поддержки", + "pleaseVerifyTheCodeYouHaveEntered": "Пожалуйста, проверьте введённый вами код", + "pleaseContactSupportIfTheProblemPersists": "Пожалуйста, обратитесь в поддержку, если проблема сохраняется", "twofactorAuthenticationHasBeenDisabled": "Двухфакторная аутентификация отключена", - "sorryTheCodeYouveEnteredIsIncorrect": "Извините, введенный вами код неверный", - "yourVerificationCodeHasExpired": "Срок действия вашего проверочного кода истек", - "emailChangedTo": "Адрес электронной почты изменен на {newEmail}", + "sorryTheCodeYouveEnteredIsIncorrect": "Извините, введённый вами код неверен", + "yourVerificationCodeHasExpired": "Срок действия вашего кода подтверждения истёк", + "emailChangedTo": "Электронная почта изменена на {newEmail}", "verifying": "Проверка...", "disablingTwofactorAuthentication": "Отключение двухфакторной аутентификации...", "allMemoriesPreserved": "Все воспоминания сохранены", @@ -929,7 +963,17 @@ "syncing": "Синхронизация...", "encryptingBackup": "Шифрование резервной копии...", "syncStopped": "Синхронизация остановлена", - "syncProgress": "{completed}/{total} сохранено", + "syncProgress": "{completed}/{total} воспоминаний сохранено", + "uploadingMultipleMemories": "Сохранение {count} воспоминаний...", + "@uploadingMultipleMemories": { + "description": "Text to tell user how many memories are being preserved", + "placeholders": { + "count": { + "type": "String" + } + } + }, + "uploadingSingleMemory": "Сохранение 1 воспоминания...", "@syncProgress": { "description": "Text to tell user how many memories have been preserved", "placeholders": { @@ -942,99 +986,99 @@ } }, "archiving": "Архивация...", - "unarchiving": "Разархивирование...", + "unarchiving": "Извлечение...", "successfullyArchived": "Успешно архивировано", - "successfullyUnarchived": "Успешно разархивировано", + "successfullyUnarchived": "Успешно извлечено", "renameFile": "Переименовать файл", - "enterFileName": "Введите имя файла", + "enterFileName": "Введите название файла", "filesDeleted": "Файлы удалены", - "selectedFilesAreNotOnEnte": "Выбранные файлы не на Ente", - "thisActionCannotBeUndone": "Это действие нельзя будет отменить", + "selectedFilesAreNotOnEnte": "Выбранные файлы отсутствуют в Ente", + "thisActionCannotBeUndone": "Это действие нельзя отменить", "emptyTrash": "Очистить корзину?", - "permDeleteWarning": "Все элементы в корзине будут удалены навсегда\n\nЭто действие не может быть отменено", + "permDeleteWarning": "Все элементы в корзине будут удалены навсегда\n\nЭто действие нельзя отменить", "empty": "Очистить", "couldNotFreeUpSpace": "Не удалось освободить место", - "permanentlyDeleteFromDevice": "Удалить с устройства навсегда?", - "someOfTheFilesYouAreTryingToDeleteAre": "Некоторые файлы, которые вы пытаетесь удалить, доступны только на вашем устройстве и не могут быть восстановлены при удалении", - "theyWillBeDeletedFromAllAlbums": "Они будут удален из всех альбомов.", - "someItemsAreInBothEnteAndYourDevice": "Некоторые элементы находятся как на Ente, так и в вашем устройстве.", + "permanentlyDeleteFromDevice": "Удалить с устройства безвозвратно?", + "someOfTheFilesYouAreTryingToDeleteAre": "Некоторые файлы, которые вы пытаетесь удалить, доступны только на вашем устройстве и не могут быть восстановлены после удаления", + "theyWillBeDeletedFromAllAlbums": "Они будут удалены из всех альбомов.", + "someItemsAreInBothEnteAndYourDevice": "Некоторые элементы находятся как в Ente, так и на вашем устройстве.", "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": "Выбранные элементы будут удалены из всех альбомов и перемещены в корзину.", - "theseItemsWillBeDeletedFromYourDevice": "Эти элементы будут удалено с вашего устройства.", - "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Похоже, что-то пошло не так. Пожалуйста, повторите попытку через некоторое время. Если ошибка повторится, обратитесь в нашу службу поддержки.", + "theseItemsWillBeDeletedFromYourDevice": "Эти элементы будут удалены с вашего устройства.", + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "Похоже, что-то пошло не так. Пожалуйста, повторите попытку через некоторое время. Если ошибка сохраняется, обратитесь в нашу службу поддержки.", "error": "Ошибка", - "tempErrorContactSupportIfPersists": "Похоже, что-то пошло не так. Пожалуйста, повторите попытку через некоторое время. Если ошибка повторится, обратитесь в нашу службу поддержки.", - "networkHostLookUpErr": "Не удается подключиться к Ente, пожалуйста, проверьте настройки своей сети и обратитесь в службу поддержки, если ошибка повторится.", - "networkConnectionRefusedErr": "Не удается подключиться к Ente, пожалуйста, повторите попытку через некоторое время. Если ошибка не устраняется, обратитесь в службу поддержки.", + "tempErrorContactSupportIfPersists": "Похоже, что-то пошло не так. Пожалуйста, повторите попытку через некоторое время. Если ошибка сохраняется, обратитесь в нашу службу поддержки.", + "networkHostLookUpErr": "Не удалось подключиться к Ente. Проверьте настройки сети и обратитесь в поддержку, если ошибка сохраняется.", + "networkConnectionRefusedErr": "Не удалось подключиться к Ente. Повторите попытку через некоторое время. Если ошибка сохраняется, обратитесь в поддержку.", "cachedData": "Кэшированные данные", "clearCaches": "Очистить кэш", - "remoteImages": "Удалённые изображения", - "remoteVideos": "Удалённые видео", - "remoteThumbnails": "Удалённые миниатюры", + "remoteImages": "Изображения вне устройства", + "remoteVideos": "Видео вне устройства", + "remoteThumbnails": "Миниатюры вне устройства", "pendingSync": "Ожидание синхронизации", "localGallery": "Локальная галерея", "todaysLogs": "Сегодняшние логи", - "viewLogs": "Посмотреть логи", - "logsDialogBody": "Журналы будут отправлены, что поможет нам устранить вашу проблему. Обратите внимание, что имена файлов будут включены, чтобы помочь отслеживать проблемы с конкретными файлами.", + "viewLogs": "Просмотреть логи", + "logsDialogBody": "Это отправит нам логи, чтобы помочь разобраться с вашей проблемой. Обратите внимание, что имена файлов будут включены для отслеживания проблем с конкретными файлами.", "preparingLogs": "Подготовка логов...", "emailYourLogs": "Отправить логи по электронной почте", "pleaseSendTheLogsTo": "Пожалуйста, отправьте логи на \n{toEmail}", - "copyEmailAddress": "Копировать адрес электронной почты", - "exportLogs": "Экспорт логов", + "copyEmailAddress": "Скопировать адрес электронной почты", + "exportLogs": "Экспортировать логи", "pleaseEmailUsAt": "Пожалуйста, напишите нам на {toEmail}", - "dismiss": "Отменить", - "didYouKnow": "А вы знали?", - "loadingMessage": "Загрузка фотографий...", - "loadMessage1": "Вы можете поделиться своей подпиской со своей семьей", - "loadMessage2": "На данный момент мы сохранили более 30 миллионов воспоминаний", - "loadMessage3": "Мы храним 3 копии ваших данных, одну из них в подземном бункере", - "loadMessage4": "Все наши приложения с открытым исходным кодом", - "loadMessage5": "Наш исходный код и шифрование прошли проверку обществом", - "loadMessage6": "Вы можете делиться ссылками на ваши альбомы со своими близкими", - "loadMessage7": "Наши мобильные приложения работают в фоновом режиме для шифрования и резервного копирования новых фотографий, которые вы выберите", - "loadMessage8": "В web.ente.io есть удобный загрузчик", - "loadMessage9": "Мы используем Xchacha20Poly1305 для шифрования ваших данных", - "photoDescriptions": "Описание фотографии", - "fileTypesAndNames": "Типы файлов и имена", + "dismiss": "Отклонить", + "didYouKnow": "Знаете ли вы?", + "loadingMessage": "Загрузка ваших фото...", + "loadMessage1": "Вы можете поделиться подпиской с вашей семьёй", + "loadMessage2": "Мы сохранили уже более 30 миллионов воспоминаний", + "loadMessage3": "Мы храним 3 копии ваших данных, одну из них — в бункере", + "loadMessage4": "Все наши приложения имеют открытый исходный код", + "loadMessage5": "Наш исходный код и криптография прошли внешний аудит", + "loadMessage6": "Вы можете делиться ссылками на свои альбомы с близкими", + "loadMessage7": "Наши мобильные приложения работают в фоновом режиме, чтобы шифровать и сохранять все новые фото, которые вы снимаете", + "loadMessage8": "На web.ente.io есть удобный загрузчик", + "loadMessage9": "Мы используем Xchacha20Poly1305 для безопасного шифрования ваших данных", + "photoDescriptions": "Описания фото", + "fileTypesAndNames": "Типы и названия файлов", "location": "Местоположение", - "moments": "Мгновения", - "searchFaceEmptySection": "Люди будут показаны здесь, как только будет выполнено индексирование", - "searchDatesEmptySection": "Поиск по дате, месяцу или году", - "searchLocationEmptySection": "Групповые фотографии, сделанные в некотором радиусе от фотографии", - "searchPeopleEmptySection": "Пригласите людей, и вы увидите все фотографии, которыми они поделились здесь", + "moments": "Моменты", + "searchFaceEmptySection": "Люди появятся здесь после завершения индексации", + "searchDatesEmptySection": "Ищите по дате, месяцу или году", + "searchLocationEmptySection": "Группируйте фото, снятые в определённом радиусе от фото", + "searchPeopleEmptySection": "Приглашайте людей, и здесь появятся все фото, которыми они поделились", "searchAlbumsEmptySection": "Альбомы", - "searchFileTypesAndNamesEmptySection": "Типы файлов и имена", - "searchCaptionEmptySection": "Добавьте описания типа \"#поездка\" в информацию о фото и быстро найдите их здесь", + "searchFileTypesAndNamesEmptySection": "Типы и названия файлов", + "searchCaptionEmptySection": "Добавляйте описания вроде «#поездка» в информацию о фото, чтобы быстро находить их здесь", "language": "Язык", "selectLanguage": "Выбрать язык", - "locationName": "Название локации", - "addLocation": "Добавить место", - "groupNearbyPhotos": "Группировать фотографии рядом", + "locationName": "Название местоположения", + "addLocation": "Добавить местоположение", + "groupNearbyPhotos": "Группировать ближайшие фото", "kiloMeterUnit": "км", "addLocationButton": "Добавить", "radius": "Радиус", - "locationTagFeatureDescription": "Тег местоположения группирует все фотографии, сделанные в определенном радиусе от фотографии", - "galleryMemoryLimitInfo": "До 1000 воспоминаний, отображаемых в галерее", + "locationTagFeatureDescription": "Тег местоположения группирует все фото, снятые в определённом радиусе от фото", + "galleryMemoryLimitInfo": "В галерее отображается до 1000 воспоминаний", "save": "Сохранить", "centerPoint": "Центральная точка", - "pickCenterPoint": "Указать центральную точку", + "pickCenterPoint": "Выбрать центральную точку", "useSelectedPhoto": "Использовать выбранное фото", - "resetToDefault": "Сброс по умолчанию", + "resetToDefault": "Вернуть стандартную", "@resetToDefault": { "description": "Button text to reset cover photo to default" }, "edit": "Редактировать", "deleteLocation": "Удалить местоположение", "rotateLeft": "Повернуть влево", - "flip": "Перевернуть", + "flip": "Отразить", "rotateRight": "Повернуть вправо", "saveCopy": "Сохранить копию", - "light": "Светлая тема", + "light": "Яркость", "color": "Цвет", "yesDiscardChanges": "Да, отменить изменения", - "doYouWantToDiscardTheEditsYouHaveMade": "Вы хотите отменить сделанные изменения?", + "doYouWantToDiscardTheEditsYouHaveMade": "Хотите отменить сделанные изменения?", "saving": "Сохранение...", "editsSaved": "Изменения сохранены", - "oopsCouldNotSaveEdits": "К сожалению, изменения не сохранены", + "oopsCouldNotSaveEdits": "Ой, не удалось сохранить изменения", "distanceInKMUnit": "км", "@distanceInKMUnit": { "description": "Unit for distance in km" @@ -1048,13 +1092,13 @@ "@storageBreakupYou": { "description": "Label to indicate how much storage you are using when you are part of a family plan" }, - "storageUsageInfo": "{usedAmount} {usedStorageUnit} из {totalAmount} {totalStorageUnit} использовано", + "storageUsageInfo": "Использовано {usedAmount} {usedStorageUnit} из {totalAmount} {totalStorageUnit}", "@storageUsageInfo": { "description": "Example: 1.2 GB of 2 GB used or 100 GB or 2TB used" }, - "availableStorageSpace": "{freeAmount} {storageUnit} свободно", + "availableStorageSpace": "Свободно {freeAmount} {storageUnit}", "appVersion": "Версия: {versionValue}", - "verifyIDLabel": "Подтверждение", + "verifyIDLabel": "Подтвердить", "fileInfoAddDescHint": "Добавить описание...", "editLocationTagTitle": "Изменить местоположение", "setLabel": "Установить", @@ -1063,12 +1107,12 @@ }, "setRadius": "Установить радиус", "familyPlanPortalTitle": "Семья", - "familyPlanOverview": "Добавьте 5 членов семьи к существующему плану без дополнительной оплаты.\n\nКаждый участник получает свое личное пространство и не может видеть файлы друг друга, если к ним не предоставлен общий доступ.\n\nСемейные планы доступны клиентам, имеющим платную подписку на Ente.\n\nПодпишитесь сейчас, чтобы начать!", - "androidBiometricHint": "Верификация личности", + "familyPlanOverview": "Добавьте 5 членов семьи к существующему тарифу без дополнительной оплаты.\n\nКаждый участник получает своё личное пространство и не может видеть файлы других, если они не общедоступны.\n\nСемейные тарифы доступны клиентам с платной подпиской на Ente.\n\nПодпишитесь сейчас, чтобы начать!", + "androidBiometricHint": "Подтвердите личность", "@androidBiometricHint": { "description": "Hint message advising the user how to authenticate with biometrics. It is used on Android side. Maximum 60 characters." }, - "androidBiometricNotRecognized": "Не распознано. Попробуйте еще раз.", + "androidBiometricNotRecognized": "Не распознано. Попробуйте снова.", "@androidBiometricNotRecognized": { "description": "Message to let the user know that authentication was failed. It is used on Android side. Maximum 60 characters." }, @@ -1076,7 +1120,7 @@ "@androidBiometricSuccess": { "description": "Message to let the user know that authentication was successful. It is used on Android side. Maximum 60 characters." }, - "androidCancelButton": "Отменить", + "androidCancelButton": "Отмена", "@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." }, @@ -1088,11 +1132,11 @@ "@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." }, - "androidDeviceCredentialsRequiredTitle": "Требуются учетные данные устройства", + "androidDeviceCredentialsRequiredTitle": "Требуются учётные данные устройства", "@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": "Требуются учетные данные устройства", + "androidDeviceCredentialsSetupDescription": "Требуются учётные данные устройства", "@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." }, @@ -1100,78 +1144,78 @@ "@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": "На вашем устройстве не настроена биометрия. Перейдите в «Настройки > Безопасность», чтобы добавить биометрическую аутентификацию.", + "androidGoToSettingsDescription": "Биометрическая аутентификация не настроена. Перейдите в «Настройки» → «Безопасность», чтобы добавить её.", "@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": "Биометрическая аутентификация отключена. Пожалуйста, заблокируйте и разблокируйте экран, чтобы включить ее.", + "iOSLockOut": "Биометрическая аутентификация отключена. Пожалуйста, заблокируйте и разблокируйте экран, чтобы включить её.", "@iOSLockOut": { "description": "Message advising the user to re-enable biometrics on their device. It shows in a dialog on iOS side." }, - "iOSGoToSettingsDescription": "Биометрическая аутентификация не настроена на вашем устройстве. Пожалуйста, включите Touch ID или Face ID на вашем телефоне.", + "iOSGoToSettingsDescription": "Биометрическая аутентификация не настроена. Пожалуйста, включите Touch ID или Face ID на вашем устройстве.", "@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": "ОК", + "iOSOkButton": "Хорошо", "@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": "Авторы OpenStreetMap", + "openstreetmapContributors": "Участники OpenStreetMap", "hostedAtOsmFrance": "Размещено на OSM France", "map": "Карта", "@map": { "description": "Label for the map view" }, "maps": "Карты", - "enableMaps": "Включить карты", - "enableMapsDesc": "Ваши фотографии будут показаны на карте мира.\n\nЭта карта размещена на Open Street Map, и точное местоположение ваших фотографий никогда не разглашается.\n\nВы можете отключить эту функцию в любое время в настройках.", - "quickLinks": "Ссылки", - "selectItemsToAdd": "Выберите предметы для добавления", + "enableMaps": "Включить Карты", + "enableMapsDesc": "Ваши фото будут отображены на карте мира.\n\nЭта карта размещена на OpenStreetMap, и точное местоположение ваших фото никогда не разглашается.\n\nВы можете отключить эту функцию в любое время в настройках.", + "quickLinks": "Быстрые ссылки", + "selectItemsToAdd": "Выберите элементы для добавления", "addSelected": "Добавить выбранные", "addFromDevice": "Добавить с устройства", - "addPhotos": "Добавить фотографии", - "noPhotosFoundHere": "Здесь нет фотографий", - "zoomOutToSeePhotos": "Увеличьте масштаб для просмотра фото", - "noImagesWithLocation": "Нет изображений с местоположением", + "addPhotos": "Добавить фото", + "noPhotosFoundHere": "Здесь фото не найдены", + "zoomOutToSeePhotos": "Уменьшите масштаб, чтобы увидеть фото", + "noImagesWithLocation": "Нет фото с местоположением", "unpinAlbum": "Открепить альбом", "pinAlbum": "Закрепить альбом", "create": "Создать", - "viewAll": "Просмотреть все", - "nothingSharedWithYouYet": "Пока никто не поделился с вами", - "noAlbumsSharedByYouYet": "У вас пока нет альбомов", + "viewAll": "Посмотреть все", + "nothingSharedWithYouYet": "С вами пока ничем не поделились", + "noAlbumsSharedByYouYet": "Вы пока не делились альбомами", "sharedWithYou": "Поделились с вами", - "sharedByYou": "Поделились вами", - "inviteYourFriendsToEnte": "Пригласите своих друзей в Ente", + "sharedByYou": "Вы поделились", + "inviteYourFriendsToEnte": "Пригласите друзей в Ente", "failedToDownloadVideo": "Не удалось скачать видео", "hiding": "Скрытие...", - "unhiding": "Показ...", + "unhiding": "Раскрытие...", "successfullyHid": "Успешно скрыто", - "successfullyUnhid": "Успешно показано", - "crashReporting": "Отчеты об ошибках", - "resumableUploads": "Поддержка дозагрузки файл(а/ов) при разрыве связи", + "successfullyUnhid": "Успешно раскрыто", + "crashReporting": "Отчёты об ошибках", + "resumableUploads": "Возобновляемые загрузки", "addToHiddenAlbum": "Добавить в скрытый альбом", "moveToHiddenAlbum": "Переместить в скрытый альбом", "fileTypes": "Типы файлов", - "deleteConfirmDialogBody": "Эта учетная запись связана с другими приложениями Ente, если вы ими пользуетесь. Загруженные вами данные во всех приложениях Ente будут запланированы к удалению, а ваша учетная запись будет удалена без возможности восстановления.", - "hearUsWhereTitle": "Как вы узнали о Ente? (необязательно)", - "hearUsExplanation": "Будет полезно, если вы укажете, где нашли нас, так как мы не отслеживаем установки приложения!", - "viewAddOnButton": "Просмотр расширений", - "addOns": "Расширения", - "addOnPageSubtitle": "Подробнее о расширениях", + "deleteConfirmDialogBody": "Этот аккаунт связан с другими приложениями Ente, если вы их используете. Все загруженные данные во всех приложениях Ente будут поставлены в очередь на удаление, а ваш аккаунт будет удален навсегда.", + "hearUsWhereTitle": "Как вы узнали об Ente? (необязательно)", + "hearUsExplanation": "Мы не отслеживаем установки приложений. Нам поможет, если скажете, как вы нас нашли!", + "viewAddOnButton": "Посмотреть дополнения", + "addOns": "Дополнения", + "addOnPageSubtitle": "Подробности дополнений", "yourMap": "Ваша карта", - "modifyYourQueryOrTrySearchingFor": "Измените свой запрос или попробуйте поискать", + "modifyYourQueryOrTrySearchingFor": "Измените запрос или попробуйте поискать", "blackFridaySale": "Распродажа в \"Черную пятницу\"", - "upto50OffUntil4thDec": "Скидка 50%, до 4-го декабря.", - "photos": "Фотографии", + "upto50OffUntil4thDec": "Скидки до 50% до 4 декабря", + "photos": "Фото", "videos": "Видео", - "livePhotos": "Живые Фото", - "searchHint1": "Быстрый поиск на устройстве", + "livePhotos": "Живые фото", + "searchHint1": "Быстрый поиск прямо на устройстве", "searchHint2": "Даты, описания фото", "searchHint3": "Альбомы, названия и типы файлов", "searchHint4": "Местоположение", - "searchHint5": "Скоро: Лица & магический поиск ✨", - "addYourPhotosNow": "Добавьте ваши фотографии", - "searchResultCount": "{count, plural, one{{count} результат найден} other{{count} результатов найдено}}", + "searchHint5": "Скоро: Лица и магический поиск ✨", + "addYourPhotosNow": "Добавьте ваши фото", + "searchResultCount": "{count, plural, one{{count} результат найден} few{{count} результата найдено} other {{count} результатов найдено}}", "@searchResultCount": { "description": "Text to tell user how many results were found for their search query", "placeholders": { @@ -1190,69 +1234,74 @@ }, "contacts": "Контакты", "noInternetConnection": "Нет подключения к Интернету", - "pleaseCheckYourInternetConnectionAndTryAgain": "Проверьте подключение к Интернету и повторите попытку.", - "signOutFromOtherDevices": "Выйти из других устройств", - "signOutOtherBody": "Если вы думаете, что кто-то может знать ваш пароль, вы можете принудительно выйти из всех устройств.", - "signOutOtherDevices": "Выйти из других устройств", + "pleaseCheckYourInternetConnectionAndTryAgain": "Пожалуйста, проверьте подключение к Интернету и попробуйте снова.", + "signOutFromOtherDevices": "Выйти с других устройств", + "signOutOtherBody": "Если вы считаете, что кто-то может знать ваш пароль, вы можете принудительно выйти с других устройств, использующих ваш аккаунт.", + "signOutOtherDevices": "Выйти с других устройств", "doNotSignOut": "Не выходить", "editLocation": "Изменить местоположение", - "selectALocation": "Выбрать место", - "selectALocationFirst": "Сначала выберите место", + "selectALocation": "Выбрать местоположение", + "selectALocationFirst": "Сначала выберите местоположение", "changeLocationOfSelectedItems": "Изменить местоположение выбранных элементов?", - "editsToLocationWillOnlyBeSeenWithinEnte": "Редактирования в местоположении будут видны только внутри Ente", - "cleanUncategorized": "Очистить \"Без Категории\"", - "cleanUncategorizedDescription": "Удалить все файлы из \"Без Категории\", которые присутствуют в других альбомах", + "editsToLocationWillOnlyBeSeenWithinEnte": "Изменения в местоположении будут видны только в Ente", + "cleanUncategorized": "Очистить «Без категории»", + "cleanUncategorizedDescription": "Удалить из «Без категории» все файлы, присутствующие в других альбомах", "waitingForVerification": "Ожидание подтверждения...", - "passkey": "Ключ", - "passkeyAuthTitle": "Проверка с помощью ключа", - "passKeyPendingVerification": "Верификация еще не завершена", - "loginSessionExpired": "Сессия недействительная", - "loginSessionExpiredDetails": "Сессия истекла. Зайдите снова.", - "verifyPasskey": "Подтвердить ключ", + "passkey": "Ключ доступа", + "passkeyAuthTitle": "Проверка ключа доступа", + "loginWithTOTP": "Войти с одноразовым кодом", + "passKeyPendingVerification": "Проверка всё ещё ожидается", + "loginSessionExpired": "Сессия истекла", + "loginSessionExpiredDetails": "Ваша сессия истекла. Пожалуйста, войдите снова.", + "verifyPasskey": "Подтвердить ключ доступа", "playOnTv": "Воспроизвести альбом на ТВ", - "pair": "Спарить", + "pair": "Подключить", "deviceNotFound": "Устройство не найдено", - "castInstruction": "Посетите cast.ente.io на устройстве, которое вы хотите подключить.\n\nВведите код ниже, чтобы воспроизвести альбом на телевизоре.", + "castInstruction": "Посетите cast.ente.io на устройстве, которое хотите подключить.\n\nВведите код ниже, чтобы воспроизвести альбом на телевизоре.", "deviceCodeHint": "Введите код", "joinDiscord": "Присоединиться в Discord", - "locations": "Локации", + "locations": "Местоположения", "addAName": "Добавить имя", - "findPeopleByName": "Быстрый поиск людей по имени", - "addViewers": "{count, plural, one {Добавьте зрителя} few {Добавьте зрителей} many {Добавьте зрителей} other {Добавьте зрителей}}", - "addCollaborators": "{count, plural, one {Добавьте соавтора} few {Добавьте соавторов} many {Добавьте соавторов} other {Добавьте соавторов}}", - "longPressAnEmailToVerifyEndToEndEncryption": "Длительное нажатие на email для подтверждения сквозного шифрования.", + "findThemQuickly": "С лёгкостью находите его", + "@findThemQuickly": { + "description": "Subtitle to indicate that the user can find people quickly by name" + }, + "findPeopleByName": "С лёгкостью находите людей по имени", + "addViewers": "{count, plural, =0 {Добавить зрителя} =1 {Добавить зрителя} other {Добавить зрителей}}", + "addCollaborators": "{count, plural, =0 {Добавить соавтора} =1 {Добавить соавтора} other {Добавить соавторов}}", + "longPressAnEmailToVerifyEndToEndEncryption": "Нажмите с удержанием на электронную почту для подтверждения сквозного шифрования.", "developerSettingsWarning": "Вы уверены, что хотите изменить настройки для разработчиков?", "developerSettings": "Настройки для разработчиков", "serverEndpoint": "Конечная точка сервера", - "invalidEndpoint": "Неверная конечная точка", - "invalidEndpointMessage": "Извините, введенная вами конечная точка неверна. Пожалуйста, введите корректную конечную точку и повторите попытку.", + "invalidEndpoint": "Недействительная конечная точка", + "invalidEndpointMessage": "Извините, введённая вами конечная точка недействительна. Пожалуйста, введите корректную точку и попробуйте снова.", "endpointUpdatedMessage": "Конечная точка успешно обновлена", "customEndpoint": "Подключено к {endpoint}", "createCollaborativeLink": "Создать совместную ссылку", "search": "Поиск", - "enterPersonName": "Введите имя", + "enterPersonName": "Введите имя человека", "enterName": "Введите имя", "savePerson": "Сохранить человека", - "editPerson": "Отредактировать человека", - "mergedPhotos": "Объединенные фото", - "orMergeWithExistingPerson": "Или объединить с существующими", + "editPerson": "Редактировать человека", + "mergedPhotos": "Объединённые фото", + "orMergeWithExistingPerson": "Или объединить с существующим", "enterDateOfBirth": "Дата рождения (необязательно)", "birthday": "День рождения", "removePersonLabel": "Удалить метку человека", - "autoPairDesc": "Автоматическое подключение работает только с устройствами, поддерживающими Chromecast.", - "manualPairDesc": "Пара с PIN-кодом работает с любым экраном, на котором вы хотите посмотреть ваш альбом.", + "autoPairDesc": "Автоподключение работает только с устройствами, поддерживающими Chromecast.", + "manualPairDesc": "Подключение с PIN-кодом работает с любым устройством, на котором вы хотите просматривать альбом.", "connectToDevice": "Подключиться к устройству", "autoCastDialogBody": "Здесь вы увидите доступные устройства.", - "autoCastiOSPermission": "Убедитесь, что для приложения Ente Photos включены права доступа к локальной сети в настройках.", + "autoCastiOSPermission": "Убедитесь, что для приложения Ente Photos включены разрешения локальной сети в настройках.", "noDeviceFound": "Устройства не обнаружены", - "stopCastingTitle": "Прекратить трансляцию", - "stopCastingBody": "Желаете прекратить трансляцию?", + "stopCastingTitle": "Остановить трансляцию", + "stopCastingBody": "Хотите остановить трансляцию?", "castIPMismatchTitle": "Не удалось транслировать альбом", - "castIPMismatchBody": "Пожалуйста, убедитесь, что вы находитесь в той же сети, что и ТВ.", - "pairingComplete": "Сопряжение завершено", + "castIPMismatchBody": "Пожалуйста, убедитесь, что вы находитесь в одной сети с телевизором.", + "pairingComplete": "Подключение завершено", "savingEdits": "Сохранение изменений...", - "autoPair": "Автоматическое сопряжение", - "pairWithPin": "Соединить с PIN", + "autoPair": "Автоподключение", + "pairWithPin": "Подключить с PIN", "faceRecognition": "Распознавание лиц", "foundFaces": "Найденные лица", "clusteringProgress": "Прогресс кластеризации", @@ -1264,7 +1313,7 @@ "right": "Вправо", "whatsNew": "Что нового", "reviewSuggestions": "Посмотреть предложения", - "review": "Отзыв", + "review": "Предложения", "useAsCover": "Использовать для обложки", "notPersonLabel": "Не {name}?", "@notPersonLabel": { @@ -1279,17 +1328,17 @@ "enable": "Включить", "enabled": "Включено", "moreDetails": "Подробнее", - "enableMLIndexingDesc": "Ente поддерживает машинное обучение на устройстве для распознавания лиц, умного поиска и других расширенных функций поиска", - "magicSearchHint": "Умный поиск позволяет искать фотографии по их содержимому, например, 'цветок', 'красная машина', 'паспорт', 'документы'", + "enableMLIndexingDesc": "Ente поддерживает машинное обучение прямо на устройстве для распознавания лиц, магического поиска и других поисковых функций", + "magicSearchHint": "Магический поиск позволяет искать фото по содержимому, например, «цветок», «красная машина», «документы»", "panorama": "Панорама", "reenterPassword": "Подтвердите пароль", "reenterPin": "Введите PIN-код ещё раз", "deviceLock": "Блокировка устройства", "pinLock": "Блокировка PIN-кодом", "next": "Далее", - "setNewPassword": "Задать новый пароль", - "enterPin": "Введите PIN", - "setNewPin": "Установите новый PIN", + "setNewPassword": "Установить новый пароль", + "enterPin": "Введите PIN-код", + "setNewPin": "Установите новый PIN-код", "appLock": "Блокировка приложения", "noSystemLockFound": "Системная блокировка не найдена", "tapToUnlock": "Нажмите для разблокировки", @@ -1297,40 +1346,40 @@ "videoInfo": "Информация о видео", "autoLock": "Автоблокировка", "immediately": "Немедленно", - "autoLockFeatureDescription": "Время в фоне, после которого приложение блокируется", + "autoLockFeatureDescription": "Спустя какое время приложение блокируется после перехода в фоновый режим", "hideContent": "Скрыть содержимое", - "hideContentDescriptionAndroid": "Скрывает содержимое приложения в переключателе приложений и отключает скриншоты", - "hideContentDescriptionIos": "Скрывает содержимое приложения в переключателе приложений", - "passwordStrengthInfo": "Надежность пароля рассчитывается с учетом длины пароля, используемых символов, и появлением пароля в 10 000 наиболее используемых", - "noQuickLinksSelected": "Не выбрано быстрых ссылок", + "hideContentDescriptionAndroid": "Скрывает содержимое приложения при переключении между приложениями и отключает скриншоты", + "hideContentDescriptionIos": "Скрывает содержимое приложения при переключении между приложениями", + "passwordStrengthInfo": "Надёжность пароля определяется его длиной, используемыми символами и присутствием среди 10000 самых популярных паролей", + "noQuickLinksSelected": "Быстрые ссылки не выбраны", "pleaseSelectQuickLinksToRemove": "Пожалуйста, выберите быстрые ссылки для удаления", "removePublicLinks": "Удалить публичные ссылки", - "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "Это удалит публичные ссылки на все выбранные быстрые ссылки.", - "guestView": "Гостевой вид", - "guestViewEnablePreSteps": "Чтобы включить гостевой вид, настройте пароль устройства или блокировку экрана в настройках системы.", - "nameTheAlbum": "Назовите альбом", - "collectPhotosDescription": "Создайте ссылку, где ваши друзья смогут загружать фото в оригинальном качестве.", + "thisWillRemovePublicLinksOfAllSelectedQuickLinks": "Это удалит публичные ссылки всех выбранных быстрых ссылок.", + "guestView": "Гостевой просмотр", + "guestViewEnablePreSteps": "Для включения гостевого просмотра, пожалуйста, настройте код или блокировку экрана в настройках устройства.", + "nameTheAlbum": "Дайте название альбому", + "collectPhotosDescription": "Создайте ссылку, по которой ваши друзья смогут загружать фото в оригинальном качестве.", "collect": "Собрать", - "appLockDescriptions": "Выберите между экраном блокировки вашего устройства и пользовательским экраном блокировки с PIN-кодом или паролем.", - "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Чтобы включить блокировку, настройте пароль устройства или блокировку экрана в настройках системы.", - "authToViewPasskey": "Пожалуйста, авторизуйтесь, чтобы просмотреть ваш пароль", - "loopVideoOn": "Цикл видео включен", - "loopVideoOff": "Цикл видео выключен", - "localSyncErrorMessage": "Похоже, что-то пошло не так, так как локальная синхронизация фото занимает больше времени, чем ожидалось. Пожалуйста, свяжитесь с нашей службой поддержки", + "appLockDescriptions": "Выберите между экраном блокировки устройства и пользовательским с PIN-кодом или паролем.", + "toEnableAppLockPleaseSetupDevicePasscodeOrScreen": "Для блокировки приложения, пожалуйста, настройте код или экран блокировки в настройках устройства.", + "authToViewPasskey": "Пожалуйста, авторизуйтесь для просмотра ключа доступа", + "loopVideoOn": "Видео зациклено", + "loopVideoOff": "Видео не зациклено", + "localSyncErrorMessage": "Похоже, что-то пошло не так: синхронизация фото занимает больше времени, чем ожидалось. Пожалуйста, обратитесь в поддержку", "showPerson": "Показать человека", "sort": "Сортировать", - "mostRecent": "Недавние", - "mostRelevant": "Сначала актуальные", - "loadingYourPhotos": "Загрузка фотографий...", + "mostRecent": "Самые последние", + "mostRelevant": "Самые актуальные", + "loadingYourPhotos": "Загрузка ваших фото...", "processingImport": "Обработка {folderName}...", "personName": "Имя человека", - "addNewPerson": "Добавить новую персону", + "addNewPerson": "Добавить нового человека", "addNameOrMerge": "Добавить имя или объединить", "mergeWithExisting": "Объединить с существующим", - "newPerson": "Новое лицо", + "newPerson": "Новый человек", "addName": "Добавить имя", "add": "Добавить", - "extraPhotosFoundFor": "Дополнительные фотографии найдены для {text}", + "extraPhotosFoundFor": "Дополнительные фото найдены для {text}", "@extraPhotosFoundFor": { "placeholders": { "text": { @@ -1338,17 +1387,20 @@ } } }, - "extraPhotosFound": "Найдены дополнительные фотографии", + "extraPhotosFound": "Найдены дополнительные фото", "configuration": "Настройки", - "localIndexing": "Локальное индексирование", - "resetPerson": "Убрать", - "areYouSureYouWantToResetThisPerson": "Вы уверены, что хотите сбросить этого человека?", - "allPersonGroupingWillReset": "Все группы этого человека будут сброшены, и вы потеряете все предложения, сделанные для этого человека", - "yesResetPerson": "Да, сбросить человека", - "onlyThem": "Только их", + "localIndexing": "Локальная индексация", + "processed": "Обработано", + "resetPerson": "Удалить", + "areYouSureYouWantToResetThisPerson": "Вы уверены, что хотите сбросить данные этого человека?", + "allPersonGroupingWillReset": "Все группы этого человека будут сброшены, и вы потеряете все предложения для него", + "yesResetPerson": "Да, сбросить данные человека", + "onlyThem": "Только он(а)", "checkingModels": "Проверка моделей...", - "enableMachineLearningBanner": "Включить автоматическое обучение для Магического Поиска и распознавания лица", - "viewersSuccessfullyAdded": "{count, plural, =0 {Добавлено 0 зрителей}=1 {Добавлен 1 зритель} other {Добавлено {count} зрителей}}", + "enableMachineLearningBanner": "Включите машинное обучение для магического поиска и распознавания лиц", + "searchDiscoverEmptySection": "Изображения появятся здесь после завершения обработки и синхронизации", + "searchPersonsEmptySection": "Люди появятся здесь после завершения обработки и синхронизации", + "viewersSuccessfullyAdded": "{count, plural, =0 {Добавлено 0 зрителей} =1 {Добавлен 1 зритель} other {Добавлено {count} зрителей}}", "@viewersSuccessfullyAdded": { "placeholders": { "count": { @@ -1358,7 +1410,7 @@ }, "description": "Number of viewers that were successfully added to an album." }, - "collaboratorsSuccessfullyAdded": "{count, plural, =0 {Добавлено 0 соавторов} =1 {Добавлен 1 соавтор} other {Добавлено {count} соавторов}}", + "collaboratorsSuccessfullyAdded": "{count, plural, =0 {Добавлено 0 соавторов} =1 {Добавлен 1 соавтор} one{Добавлен {count} соавтор} few{Добавлено {count} соавтора} other {Добавлено {count} соавторов}}", "@collaboratorsSuccessfullyAdded": { "placeholders": { "count": { @@ -1369,11 +1421,11 @@ "description": "Number of collaborators that were successfully added to an album." }, "accountIsAlreadyConfigured": "Аккаунт уже настроен.", - "sessionIdMismatch": "Несоответствие ID сеанса", + "sessionIdMismatch": "Несоответствие ID сессии", "@sessionIdMismatch": { "description": "In passkey page, deeplink is ignored because of session ID mismatch." }, - "failedToFetchActiveSessions": "Не удалось получить активные сеансы", + "failedToFetchActiveSessions": "Не удалось получить активные сессии", "@failedToFetchActiveSessions": { "description": "In session page, warn user (in toast) that active sessions could not be fetched." }, @@ -1388,7 +1440,7 @@ } } }, - "typeOfGallerGallerytypeIsNotSupportedForRename": "Тип галереи {galleryType} не поддерживается для переименования", + "typeOfGallerGallerytypeIsNotSupportedForRename": "Тип галереи {galleryType} не поддерживает переименование", "@typeOfGallerGallerytypeIsNotSupportedForRename": { "placeholders": { "galleryType": { @@ -1397,10 +1449,24 @@ } } }, + "tapToUploadIsIgnoredDue": "Нажмите для загрузки. Загрузка игнорируется из-за {ignoreReason}", + "@tapToUploadIsIgnoredDue": { + "description": "Shown in upload icon widet, inside a tooltip.", + "placeholders": { + "ignoreReason": { + "type": "String", + "example": "no network" + } + } + }, + "tapToUpload": "Нажмите для загрузки", + "@tapToUpload": { + "description": "Shown in upload icon widet, inside a tooltip." + }, "info": "Информация", "addFiles": "Добавить файлы", - "castAlbum": "Трансляция альбома", - "imageNotAnalyzed": "Изображение не анализировано", + "castAlbum": "Транслировать альбом", + "imageNotAnalyzed": "Изображение не проанализировано", "noFacesFound": "Лица не найдены", "fileNotUploadedYet": "Файл ещё не загружен", "noSuggestionsForPerson": "Нет предложений для {personName}", @@ -1413,13 +1479,13 @@ } }, "month": "месяц", - "yearShort": "г.", + "yearShort": "год", "@yearShort": { "description": "Appears in pricing page (/yr)" }, - "currentlyRunning": "сейчас запущено", - "ignored": "игнорировать", - "photosCount": "{count, plural, =0 {0 photo} =1 {1 photo} other {{count} photos}}", + "currentlyRunning": "выполняется", + "ignored": "игнорируется", + "photosCount": "{count, plural, =0 {0 фотографий} =1 {1 фотография} one {{count} фотография} few {{count} фотографии} other {{count} фотографий}}", "@photosCount": { "placeholders": { "count": { @@ -1429,31 +1495,245 @@ } }, "file": "Файл", - "selectMailApp": "Выберите приложение почты", + "searchSectionsLengthMismatch": "Несоответствие длины разделов: {snapshotLength} != {searchLength}", + "@searchSectionsLengthMismatch": { + "description": "Appears in search tab page", + "placeholders": { + "snapshotLength": { + "type": "int", + "example": "1" + }, + "searchLength": { + "type": "int", + "example": "2" + } + } + }, + "selectMailApp": "Выберите почтовое приложение", "selectAllShort": "Все", "@selectAllShort": { "description": "Text that appears in bottom right when you start to select multiple photos. When clicked, it selects all photos." }, "selectCoverPhoto": "Выберите обложку", "newLocation": "Новое местоположение", - "faceNotClusteredYet": "Лицо еще не кластеризовано, пожалуйста, вернитесь позже", - "theLinkYouAreTryingToAccessHasExpired": "Ссылка, к которой вы пытаетесь получить доступ, устарела.", + "faceNotClusteredYet": "Лицо ещё не кластеризовано. Пожалуйста, попробуйте позже", + "theLinkYouAreTryingToAccessHasExpired": "Срок действия ссылки, к которой вы обращаетесь, истёк.", "openFile": "Открыть файл", - "backupFile": "Резервный файл", + "backupFile": "Резервное копирование файла", "openAlbumInBrowser": "Открыть альбом в браузере", - "openAlbumInBrowserTitle": "Пожалуйста, используйте веб-приложение, чтобы добавить фотографии в этот альбом", + "openAlbumInBrowserTitle": "Пожалуйста, используйте веб-версию, чтобы добавить фото в этот альбом", "allow": "Разрешить", - "allowAppToOpenSharedAlbumLinks": "Разрешить приложению открывать общие ссылки на альбомы", - "seePublicAlbumLinksInApp": "Смотреть ссылки публичного альбома в приложении", + "allowAppToOpenSharedAlbumLinks": "Разрешить приложению открывать ссылки на общие альбомы", + "seePublicAlbumLinksInApp": "Просматривать публичные ссылки на альбомы в приложении", "emergencyContacts": "Экстренные контакты", "acceptTrustInvite": "Принять приглашение", "declineTrustInvite": "Отклонить приглашение", - "removeYourselfAsTrustedContact": "Удалить себя как доверенный контакт", - "legacyPageDesc2": "Доверенные контакты могут инициировать восстановление учетной записи, если они не будут заблокированы в течение 30 дней, сбросить пароль и получить доступ к вашей учетной записи.", + "removeYourselfAsTrustedContact": "Удалить себя из доверенных контактов", + "legacy": "Наследие", + "legacyPageDesc": "Наследие позволяет доверенным контактам получить доступ к вашему аккаунту в ваше отсутствие.", + "legacyPageDesc2": "Доверенные контакты могут начать восстановление аккаунта. Если не отменить это в течение 30 дней, то они смогут сбросить пароль и получить доступ.", + "legacyAccounts": "Наследуемые аккаунты", "trustedContacts": "Доверенные контакты", "addTrustedContact": "Добавить доверенный контакт", "removeInvite": "Удалить приглашение", - "recoveryWarning": "Доверенный контакт пытается получить доступ к вашей учетной записи", + "recoveryWarning": "Доверенный контакт пытается получить доступ к вашему аккаунту", "rejectRecovery": "Отклонить восстановление", - "recoveryInitiated": "Восстановление запущено" + "recoveryInitiated": "Восстановление начато", + "recoveryInitiatedDesc": "Вы сможете получить доступ к аккаунту через {days} дней. Уведомление будет отправлено на {email}.", + "@recoveryInitiatedDesc": { + "placeholders": { + "days": { + "type": "int", + "example": "30" + }, + "email": { + "type": "String", + "example": "me@example.com" + } + } + }, + "cancelAccountRecovery": "Отменить восстановление", + "recoveryAccount": "Восстановить аккаунт", + "cancelAccountRecoveryBody": "Вы уверены, что хотите отменить восстановление?", + "startAccountRecoveryTitle": "Начать восстановление", + "whyAddTrustContact": "Доверенный контакт может помочь в восстановлении ваших данных.", + "recoveryReady": "Теперь вы можете восстановить аккаунт {email}, установив новый пароль.", + "@recoveryReady": { + "placeholders": { + "email": { + "type": "String", + "example": "me@example.com" + } + } + }, + "recoveryWarningBody": "{email} пытается восстановить ваш аккаунт.", + "trustedInviteBody": "Вы приглашены стать доверенным контактом {email}.", + "warning": "Предупреждение", + "proceed": "Продолжить", + "confirmAddingTrustedContact": "Вы собираетесь добавить {email} в качестве доверенного контакта. Доверенный контакт сможет восстановить ваш аккаунт, если вы будете отсутствовать {numOfDays} дней.", + "@confirmAddingTrustedContact": { + "placeholders": { + "email": { + "type": "String", + "example": "me@example.com" + }, + "numOfDays": { + "type": "int", + "example": "30" + } + } + }, + "legacyInvite": "{email} пригласил вас стать доверенным контактом", + "authToManageLegacy": "Пожалуйста, авторизуйтесь для управления доверенными контактами", + "useDifferentPlayerInfo": "Проблемы с воспроизведением видео? Нажмите и удерживайте здесь, чтобы попробовать другой плеер.", + "hideSharedItemsFromHomeGallery": "Скрыть общие элементы из основной галереи", + "gallery": "Галерея", + "joinAlbum": "Присоединиться к альбому", + "joinAlbumSubtext": "чтобы просматривать и добавлять свои фото", + "joinAlbumSubtextViewer": "чтобы добавить это в общие альбомы", + "join": "Присоединиться", + "linkEmail": "Привязать электронную почту", + "link": "Привязать", + "noEnteAccountExclamation": "Нет аккаунта Ente!", + "orPickFromYourContacts": "или выберите из ваших контактов", + "emailDoesNotHaveEnteAccount": "{email} не имеет аккаунта Ente.", + "@emailDoesNotHaveEnteAccount": { + "description": "Shown when email doesn't have an Ente account", + "placeholders": { + "email": { + "type": "String" + } + } + }, + "accountOwnerPersonAppbarTitle": "{title} (Я)", + "@accountOwnerPersonAppbarTitle": { + "description": "Title of appbar for account owner person", + "placeholders": { + "title": { + "type": "String" + } + } + }, + "reassignMe": "Переназначить \"Меня\"", + "me": "Я", + "linkEmailToContactBannerCaption": "чтобы быстрее делиться", + "@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": "Выберите человека для привязки", + "linkPersonToEmail": "Связать человека с {email}", + "@linkPersonToEmail": { + "placeholders": { + "email": { + "type": "String" + } + } + }, + "linkPersonToEmailConfirmation": "Это свяжет {personName} с {email}", + "@linkPersonToEmailConfirmation": { + "description": "Confirmation message when linking a person to an email", + "placeholders": { + "personName": { + "type": "String" + }, + "email": { + "type": "String" + } + } + }, + "selectYourFace": "Выберите своё лицо", + "reassigningLoading": "Переназначение...", + "reassignedToName": "Вы переназначены на {name}", + "@reassignedToName": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "saveChangesBeforeLeavingQuestion": "Сохранить изменения перед выходом?", + "dontSave": "Не сохранять", + "thisIsMeExclamation": "Это я!", + "linkPerson": "Связать человека", + "linkPersonCaption": "чтобы было удобнее делиться", + "@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": "Потоковое видео", + "processingVideos": "Обработка видео", + "streamDetails": "Информация о потоке", + "processing": "Обработка", + "queued": "В очереди", + "ineligible": "Неподходящий", + "failed": "Не удалось", + "playStream": "Воспроизвести поток", + "playOriginal": "Воспроизвести оригинал", + "joinAlbumConfirmationDialogBody": "Если вы присоединитесь к альбому, ваша электронная почта станет видимой для его участников.", + "pleaseWaitThisWillTakeAWhile": "Пожалуйста, подождите, это займёт некоторое время.", + "editTime": "Изменить время", + "selectTime": "Выбрать время", + "selectDate": "Выбрать дату", + "previous": "Предыдущий", + "selectOneDateAndTimeForAll": "Выберите одну дату и время для всех", + "selectStartOfRange": "Выберите начало диапазона", + "thisWillMakeTheDateAndTimeOfAllSelected": "Это сделает дату и время всех выбранных фото одинаковыми.", + "allWillShiftRangeBasedOnFirst": "Это первое фото в группе. Остальные выбранные фото автоматически сместятся на основе новой даты", + "newRange": "Новый диапазон", + "selectOneDateAndTime": "Выбрать одну дату и время", + "moveSelectedPhotosToOneDate": "Переместите выбранные фото на одну дату", + "shiftDatesAndTime": "Сместить даты и время", + "photosKeepRelativeTimeDifference": "Фото сохранят относительную разницу во времени", + "photocountPhotos": "{count, plural, =0 {Нет фото} =1 {1 фото} other {{count} фото}}", + "@photocountPhotos": { + "placeholders": { + "count": { + "type": "int", + "example": "2" + } + } + }, + "appIcon": "Иконка приложения", + "notThisPerson": "Не этот человек?", + "selectedItemsWillBeRemovedFromThisPerson": "Выбранные элементы будут отвязаны от этого человека, но не удалены из вашей библиотеки.", + "throughTheYears": "{dateFormat} сквозь годы", + "thisWeekThroughTheYears": "Эта неделя сквозь годы", + "thisWeekXYearsAgo": "{count, plural, =1 {Эта неделя, {count} год назад} one{Эта неделя, {count} год назад} few{Эта неделя, {count} года назад} other {Эта неделя, {count} лет назад}}", + "youAndThem": "Вы и {name}", + "admiringThem": "Любуясь {name}", + "embracingThem": "Обнимая {name}", + "partyWithThem": "Вечеринка с {name}", + "hikingWithThem": "Поход с {name}", + "feastingWithThem": "Пир с {name}", + "selfiesWithThem": "Селфи с {name}", + "posingWithThem": "Позируя с {name}", + "backgroundWithThem": "Красивые виды с {name}", + "sportsWithThem": "Спорт с {name}", + "roadtripWithThem": "Путешествие с {name}", + "spotlightOnYourself": "Вы в центре внимания", + "spotlightOnThem": "В центре внимания {name}", + "personIsAge": "{name} исполнилось {age}!", + "personTurningAge": "{name} скоро исполнится {age}", + "lastTimeWithThem": "В последний раз с {name}", + "tripToLocation": "Поездка в {location}", + "tripInYear": "Поездка в {year}", + "lastYearsTrip": "Прошлогодняя поездка", + "sunrise": "На горизонте", + "mountains": "За холмами", + "greenery": "Зелёная жизнь", + "beach": "Песок и море", + "city": "В городе", + "moon": "В лунном свете", + "onTheRoad": "Снова в пути", + "food": "Кулинарное наслаждение", + "pets": "Пушистые спутники", + "cLIcon": "Новая иконка", + "cLIconDesc": "Наконец-то новая иконка приложения, которая, как мы считаем, лучше всего отражает нашу работу. Мы также добавили переключатель иконок, чтобы вы могли продолжать использовать старую иконку.", + "cLMemories": "Воспоминания", + "cLMemoriesDesc": "Откройте заново свои особенные моменты — в центре внимания ваши любимые люди, поездки и праздники, лучшие снимки и многое другое. Для наилучших впечатлений включите машинное обучение и отметьте себя и своих друзей.", + "cLWidgets": "Виджеты", + "cLWidgetsDesc": "Теперь доступны виджеты домашнего экрана, интегрированные с воспоминаниями. Они покажут ваши особенные моменты, не открывая приложения.", + "cLFamilyPlan": "Ограничения семейного тарифа", + "cLFamilyPlanDesc": "Теперь вы можете установить ограничения на объём хранилища, которое могут использовать члены вашей семьи.", + "cLBulkEdit": "Массовое редактирование дат", + "cLBulkEditDesc": "Теперь вы можете выбрать несколько фото и отредактировать дату/время быстро и сразу для всех. Также поддерживается смещение дат." } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_sv.arb b/mobile/lib/l10n/intl_sv.arb index 5793132069..ccc0d6f882 100644 --- a/mobile/lib/l10n/intl_sv.arb +++ b/mobile/lib/l10n/intl_sv.arb @@ -426,14 +426,6 @@ "shareLink": "Dela länk", "delete": "Radera", "share": "Dela", - "moveItem": "{count, plural, one {Flytta objekt} other {Flytta objekt}}", - "@moveItem": { - "description": "Page title while moving one or more items to an album" - }, - "addItem": "{count, plural, one {Lägg till objekt} other {Lägg till objekt}}", - "@addItem": { - "description": "Page title while adding one or more items to album" - }, "createOrSelectAlbum": "Skapa eller välj album", "selectAlbum": "Välj album", "searchByAlbumNameHint": "Albumnamn", diff --git a/mobile/lib/l10n/intl_th.arb b/mobile/lib/l10n/intl_th.arb index 375d1cc22d..a7c4c4ccb2 100644 --- a/mobile/lib/l10n/intl_th.arb +++ b/mobile/lib/l10n/intl_th.arb @@ -242,14 +242,6 @@ "share": "แชร์", "unhideToAlbum": "เลิกซ่อนไปยังอัลบั้ม", "restoreToAlbum": "กู้คืนไปยังอัลบั้ม", - "moveItem": "{count, plural, other {ย้ายรายการ}}", - "@moveItem": { - "description": "Page title while moving one or more items to an album" - }, - "addItem": "{count, plural, other {เพิ่มรายการ}}", - "@addItem": { - "description": "Page title while adding one or more items to album" - }, "incorrectRecoveryKey": "คีย์การกู้คืนไม่ถูกต้อง", "theRecoveryKeyYouEnteredIsIncorrect": "คีย์การกู้คืนที่คุณป้อนไม่ถูกต้อง", "syncing": "กำลังซิงค์...", diff --git a/mobile/lib/l10n/intl_tr.arb b/mobile/lib/l10n/intl_tr.arb index 3b6f256565..5e01c9d1d4 100644 --- a/mobile/lib/l10n/intl_tr.arb +++ b/mobile/lib/l10n/intl_tr.arb @@ -371,21 +371,6 @@ "deleteFromBoth": "Her ikisinden de sil", "newAlbum": "Yeni albüm", "albums": "Albümler", - "memoryCount": "{count, plural, zero{anı yok} \none{{formattedCount} anı} \nother{{formattedCount} anılar}}", - "@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} seçildi", "@selectedPhotos": { "description": "Display the number of selected photos", @@ -792,14 +777,6 @@ "share": "Paylaş", "unhideToAlbum": "Albümü gizleme", "restoreToAlbum": "Albümü yenile", - "moveItem": "{count, plural, one {Öğeyi taşı} other {Öğeleri taşı}}", - "@moveItem": { - "description": "Page title while moving one or more items to an album" - }, - "addItem": "{count, plural, one {Öğeyi taşı} other {Öğeleri taşı}}", - "@addItem": { - "description": "Page title while adding one or more items to album" - }, "createOrSelectAlbum": "Albüm oluştur veya seç", "selectAlbum": "Albüm seçin", "searchByAlbumNameHint": "Albüm adı", @@ -897,7 +874,6 @@ "authToViewYourMemories": "Kodlarınızı görmek için lütfen kimlik doğrulaması yapın", "unlock": "Kilidi aç", "freeUpSpace": "Boş alan", - "freeUpSpaceSaving": "{count, plural, one {Yer açmak için cihazdan silinebilir {formattedSize}} other {Yer açmak için cihazdan silinebilir {formattedSize}}}", "filesBackedUpInAlbum": "Bu albümdeki {count, plural, one {1 file} other {{formattedNumber} dosya}} güvenli bir şekilde yedeklendi", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -928,18 +904,6 @@ } } }, - "@freeUpSpaceSaving": { - "description": "Text to tell user how much space they can free up by deleting items from the device" - }, - "freeUpAccessPostDelete": "Aktif bir aboneliğiniz olduğu sürece ente'de {count, plural, one {it} other {them}} erişimine devam edebilirsiniz", - "@freeUpAccessPostDelete": { - "placeholders": { - "count": { - "example": "1", - "type": "int" - } - } - }, "freeUpAmount": "{sizeInMBorGB} yer açın", "thisEmailIsAlreadyInUse": "Bu e-posta zaten kullanılıyor", "incorrectCode": "Yanlış kod", @@ -1267,8 +1231,6 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "Kişileri isimlere göre çabucak bulun", - "addViewers": "{count, plural, zero {Görüntüleyen ekle} one {Görüntüleyen ekle} other {Görüntüleyen ekle}}", - "addCollaborators": "{count, plural, zero {Ortak çalışan ekle} one {Ortak çalışan ekle} other {Ortak çalışan ekle}}", "longPressAnEmailToVerifyEndToEndEncryption": "Uçtan uca şifrelemeyi doğrulamak için bir e-postaya uzun basın.", "developerSettingsWarning": "Geliştirici ayarlarını değiştirmek istediğinizden emin misiniz?", "developerSettings": "Geliştirici ayarları", @@ -1400,16 +1362,6 @@ "enableMachineLearningBanner": "Sihirli arama ve yüz tanıma için makine öğrenimini etkinleştirin", "searchDiscoverEmptySection": "İşleme ve senkronizasyon tamamlandığında görüntüler burada gösterilecektir", "searchPersonsEmptySection": "İşleme ve senkronizasyon tamamlandığında kişiler burada gösterilecektir", - "viewersSuccessfullyAdded": "{count, plural, =0 {0 Görüntüleyen eklendi} =1 {1 Görüntüleyen eklendi} other {{count} Görüntüleyen eklendi}}", - "@viewersSuccessfullyAdded": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - }, - "description": "Number of viewers that were successfully added to an album." - }, "collaboratorsSuccessfullyAdded": "{count, plural, =0 {0 işbirlikçi eklendi} =1 {1 işbirlikçi eklendi} other {{count} işbirlikçi eklendi}}", "@collaboratorsSuccessfullyAdded": { "placeholders": { @@ -1485,15 +1437,6 @@ }, "currentlyRunning": "şu anda çalışıyor", "ignored": "yoksayıldı", - "photosCount": "{count, plural, =0 {0 fotoğraf} =1 {1 fotoğraf} other {{count} fotoğraflar}}", - "@photosCount": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - } - }, "file": "Dosya", "searchSectionsLengthMismatch": "Bölüm uzunluğu uyuşmazlığı: {snapshotLength} != {searchLength}", "@searchSectionsLengthMismatch": { @@ -1692,5 +1635,19 @@ } } }, - "appIcon": "Uygulama simgesi" + "appIcon": "Uygulama simgesi", + "notThisPerson": "Bu kişi değil mi?", + "selectedItemsWillBeRemovedFromThisPerson": "Seçilen öğeler bu kişiden kaldırılacak, ancak kitaplığınızdan silinmeyecektir.", + "throughTheYears": "{dateFormat} yıllar boyunca", + "thisWeekThroughTheYears": "Yıllar boyunca bu hafta", + "cLIcon": "Yeni Simge", + "cLIconDesc": "Son olarak, çalışmalarımızı en iyi şekilde temsil ettiğini düşündüğümüz yeni bir uygulama simgesi. Eski simgeyi kullanmaya devam edebilmeniz için bir simge değiştirici de ekledik.", + "cLMemories": "Anılar", + "cLMemoriesDesc": "Özel anlarınızı yeniden keşfedin - en sevdiğiniz kişilere, seyahatlerinize ve tatillerinize, en iyi tıklamalarınıza ve çok daha fazlasına odaklanın. En iyi deneyim için makine öğrenimini açın, kendinizi etiketleyin ve arkadaşlarınızı adlandırın.", + "cLWidgets": "Widget'lar", + "cLWidgetsDesc": "Anılarla entegre edilmiş ana ekran widget'ları artık kullanılabilir. Uygulamayı açmadan özel anlarınızı gösterecekler.", + "cLFamilyPlan": "Aile Planı Sınırları", + "cLFamilyPlanDesc": "Artık aile üyelerinizin ne kadar depolama alanı kullanabileceğine dair sınırlar belirleyebilirsiniz.", + "cLBulkEditDesc": "Artık birden fazla fotoğraf seçebilir ve tek bir hızlı işlemle hepsi için tarih/saat düzenleyebilirsiniz. Tarih kaydırma da desteklenmektedir.", + "curatedMemories": "Seçilmiş anılar" } \ No newline at end of file diff --git a/mobile/lib/l10n/intl_uk.arb b/mobile/lib/l10n/intl_uk.arb index 9810d1c092..31b446eac3 100644 --- a/mobile/lib/l10n/intl_uk.arb +++ b/mobile/lib/l10n/intl_uk.arb @@ -366,21 +366,6 @@ "deleteFromBoth": "Видалити з обох", "newAlbum": "Новий альбом", "albums": "Альбоми", - "memoryCount": "{count, plural, zero{немає спогадів} one{{formattedCount} спогад} other{{formattedCount} спогадів}}", - "@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} вибрано", "@selectedPhotos": { "description": "Display the number of selected photos", @@ -786,14 +771,6 @@ "share": "Поділитися", "unhideToAlbum": "Показати в альбомі", "restoreToAlbum": "Відновити в альбомі", - "moveItem": "{count, plural, one {Переміщення елемента} other {Переміщення елементів}}", - "@moveItem": { - "description": "Page title while moving one or more items to an album" - }, - "addItem": "{count, plural, one {Додавання елемента} other {Додавання елементів}}", - "@addItem": { - "description": "Page title while adding one or more items to album" - }, "createOrSelectAlbum": "Створити або вибрати альбом", "selectAlbum": "Вибрати альбом", "searchByAlbumNameHint": "Назва альбому", @@ -891,7 +868,6 @@ "authToViewYourMemories": "Авторизуйтеся, щоб переглянути ваші спогади", "unlock": "Розблокувати", "freeUpSpace": "Звільнити місце", - "freeUpSpaceSaving": "{count, plural, one {Його можна видалити з пристрою, щоб звільнити {formattedSize}} other {Їх можна видалити з пристрою, щоб звільнити {formattedSize}}}", "filesBackedUpInAlbum": "{count, plural, one {Для 1 файлу} few {Для {formattedNumber} файлів} many {Для {formattedNumber} файлів} other {Для {formattedNumber} файлів}} у цьому альбомі було створено резервну копію", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -922,18 +898,6 @@ } } }, - "@freeUpSpaceSaving": { - "description": "Text to tell user how much space they can free up by deleting items from the device" - }, - "freeUpAccessPostDelete": "Ви все ще можете отримати доступ до {count, plural, one {нього} other {них}} в Ente, доки у вас активна передплата", - "@freeUpAccessPostDelete": { - "placeholders": { - "count": { - "example": "1", - "type": "int" - } - } - }, "freeUpAmount": "Звільніть {sizeInMBorGB}", "thisEmailIsAlreadyInUse": "Ця поштова адреса вже використовується", "incorrectCode": "Невірний код", @@ -1261,8 +1225,6 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "Швидко знаходьте людей за іменами", - "addViewers": "{count, plural, one {Додано глядача} other {Додано глядачів}}", - "addCollaborators": "{count, plural, one {Додано співавтора} other {Додано співавторів}}", "longPressAnEmailToVerifyEndToEndEncryption": "Довго утримуйте поштову адресу, щоб перевірити наскрізне шифрування.", "developerSettingsWarning": "Ви впевнені, що хочете змінити налаштування для розробників?", "developerSettings": "Налаштування для розробників", @@ -1393,16 +1355,6 @@ "enableMachineLearningBanner": "Увімкніть машинне навчання для магічного пошуку та розпізнавання облич", "searchDiscoverEmptySection": "Зображення будуть показані тут після завершення оброблення та синхронізації", "searchPersonsEmptySection": "Люди будуть показані тут після завершення оброблення та синхронізації", - "viewersSuccessfullyAdded": "{count, plural, one {} few {Додано {count} користувача} many {Додано {count} користувачів}=0 {Додано 0 користувачів} =1 {Додано 1 користувач} other {Додано {count} користувачів}}", - "@viewersSuccessfullyAdded": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - }, - "description": "Number of viewers that were successfully added to an album." - }, "collaboratorsSuccessfullyAdded": "{count, plural, one {} few {Додано {count} співаторів} many {Додано {count} співаторів}=0 {Додано 0 співавторів} =1 {Додано 1 співавтор} other {Додано {count} співавторів}}", "@collaboratorsSuccessfullyAdded": { "placeholders": { @@ -1478,15 +1430,6 @@ }, "currentlyRunning": "зараз працює", "ignored": "ігнорується", - "photosCount": "{count, plural, one {} few {{count} фото} many {{count} фото}=0 {0 фото} =1 {1 фото} other {{count} фото}}", - "@photosCount": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - } - }, "file": "Файл", "searchSectionsLengthMismatch": "Невідповідність довжини розділів: {snapshotLength} != {searchLength}", "@searchSectionsLengthMismatch": { diff --git a/mobile/lib/l10n/intl_vi.arb b/mobile/lib/l10n/intl_vi.arb index a0811c4680..dd56ae2ae6 100644 --- a/mobile/lib/l10n/intl_vi.arb +++ b/mobile/lib/l10n/intl_vi.arb @@ -371,21 +371,6 @@ "deleteFromBoth": "Xóa khỏi cả hai", "newAlbum": "Album mới", "albums": "Album", - "memoryCount": "{count, plural, zero{không có kỷ niệm} one{{formattedCount} kỷ niệm} other{{formattedCount} kỷ niệm}}", - "@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} đã chọn", "@selectedPhotos": { "description": "Display the number of selected photos", @@ -791,14 +776,6 @@ "share": "Chia sẻ", "unhideToAlbum": "Hiện lại vào album", "restoreToAlbum": "Khôi phục vào album", - "moveItem": "{count, plural, one {Di chuyển mục} other {Di chuyển các mục}}", - "@moveItem": { - "description": "Page title while moving one or more items to an album" - }, - "addItem": "{count, plural, one {Thêm mục} other {Thêm các mục}}", - "@addItem": { - "description": "Page title while adding one or more items to album" - }, "createOrSelectAlbum": "Tạo hoặc chọn album", "selectAlbum": "Chọn album", "searchByAlbumNameHint": "Tên album", @@ -896,7 +873,6 @@ "authToViewYourMemories": "Vui lòng xác thực để xem kỷ niệm của bạn", "unlock": "Mở khóa", "freeUpSpace": "Giải phóng không gian", - "freeUpSpaceSaving": "{count, plural, one {Nó có thể được xóa khỏi thiết bị để giải phóng {formattedSize}} other {Chúng có thể được xóa khỏi thiết bị để giải phóng {formattedSize}}}", "filesBackedUpInAlbum": "{count, plural, one {1 tệp} other {{formattedNumber} tệp}} trong album này đã được sao lưu an toàn", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -927,18 +903,6 @@ } } }, - "@freeUpSpaceSaving": { - "description": "Text to tell user how much space they can free up by deleting items from the device" - }, - "freeUpAccessPostDelete": "Bạn vẫn có thể truy cập {count, plural, one {nó} other {chúng}} trên Ente miễn là bạn có một đăng ký hoạt động", - "@freeUpAccessPostDelete": { - "placeholders": { - "count": { - "example": "1", - "type": "int" - } - } - }, "freeUpAmount": "Giải phóng {sizeInMBorGB}", "thisEmailIsAlreadyInUse": "Email này đã được sử dụng", "incorrectCode": "Mã không chính xác", @@ -1266,8 +1230,6 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "Tìm người nhanh chóng theo tên", - "addViewers": "{count, plural, zero {Thêm người xem} one {Thêm người xem} other {Thêm người xem}}", - "addCollaborators": "{count, plural, zero {Thêm cộng tác viên} one {Thêm cộng tác viên} other {Thêm cộng tác viên}}", "longPressAnEmailToVerifyEndToEndEncryption": "Nhấn giữ một email để xác minh mã hóa đầu cuối.", "developerSettingsWarning": "Bạn có chắc chắn muốn thay đổi cài đặt Nhà phát triển không?", "developerSettings": "Cài đặt Nhà phát triển", @@ -1399,16 +1361,6 @@ "enableMachineLearningBanner": "Bật học máy cho tìm kiếm ma thuật và nhận diện khuôn mặt", "searchDiscoverEmptySection": "Hình ảnh sẽ được hiển thị ở đây sau khi hoàn tất xử lý và đồng bộ", "searchPersonsEmptySection": "Người sẽ được hiển thị ở đây sau khi hoàn tất xử lý và đồng bộ", - "viewersSuccessfullyAdded": "{count, plural, =0 {Đã thêm 0 người xem} =1 {Đã thêm 1 người xem} other {Đã thêm {count} người xem}}", - "@viewersSuccessfullyAdded": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - }, - "description": "Number of viewers that were successfully added to an album." - }, "collaboratorsSuccessfullyAdded": "{count, plural, =0 {Đã thêm 0 cộng tác viên} =1 {Đã thêm 1 cộng tác viên} other {Đã thêm {count} cộng tác viên}}", "@collaboratorsSuccessfullyAdded": { "placeholders": { @@ -1484,15 +1436,6 @@ }, "currentlyRunning": "đang chạy", "ignored": "bỏ qua", - "photosCount": "{count, plural, =0 {không có hình ảnh} =1 {1 hình ảnh} other {{count} hình ảnh}}", - "@photosCount": { - "placeholders": { - "count": { - "type": "int", - "example": "2" - } - } - }, "file": "Tệp", "searchSectionsLengthMismatch": "Độ dài các phần không khớp: {snapshotLength} != {searchLength}", "@searchSectionsLengthMismatch": { diff --git a/mobile/lib/l10n/intl_zh.arb b/mobile/lib/l10n/intl_zh.arb index 053249c497..b8ccddf71f 100644 --- a/mobile/lib/l10n/intl_zh.arb +++ b/mobile/lib/l10n/intl_zh.arb @@ -371,7 +371,7 @@ "deleteFromBoth": "同时从两者中删除", "newAlbum": "新建相册", "albums": "相册", - "memoryCount": "{count, plural, zero{没有回忆} one{{formattedCount} 个回忆} other{{formattedCount} 个回忆}}", + "memoryCount": "{count, plural, =0{暂无回忆} other{{formattedCount} 个回忆}}", "@memoryCount": { "description": "The text to display the number of memories", "type": "text", @@ -792,11 +792,11 @@ "share": "分享", "unhideToAlbum": "取消隐藏到相册", "restoreToAlbum": "恢复到相册", - "moveItem": "{count, plural, one {移动一个项目} other {移动一些项目}}", + "moveItem": "{count, plural, =1 {移动项目} other {移动数个项目}}", "@moveItem": { "description": "Page title while moving one or more items to an album" }, - "addItem": "{count, plural, one {添加一个项目} other {添加一些项目}}", + "addItem": "{count, plural, =1 {添加项目} other {添加数个项目}}", "@addItem": { "description": "Page title while adding one or more items to album" }, @@ -897,7 +897,7 @@ "authToViewYourMemories": "请验证以查看您的回忆", "unlock": "解锁", "freeUpSpace": "释放空间", - "freeUpSpaceSaving": "{count, plural, one {它可以从设备中删除以释放 {formattedSize}} other {它们可以从设备中删除以释放 {formattedSize}}}", + "freeUpSpaceSaving": "{count, plural, =1 {它可以从设备中删除以释放 {formattedSize}} other {它们可以从设备中删除以释放 {formattedSize}}}", "filesBackedUpInAlbum": "此相册中的 {count, plural, one {1 个文件} other {{formattedNumber} 个文件}} 已安全备份", "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", @@ -931,7 +931,7 @@ "@freeUpSpaceSaving": { "description": "Text to tell user how much space they can free up by deleting items from the device" }, - "freeUpAccessPostDelete": "只要您有有效的订阅,您仍然可以在 Ente 上访问 {count, plural, one {它} other {它们}}", + "freeUpAccessPostDelete": "只要您拥有有效订阅,您仍然可以在 Ente 上访问 {count, plural, =1 {它} other {它们}}", "@freeUpAccessPostDelete": { "placeholders": { "count": { @@ -1267,8 +1267,8 @@ "description": "Subtitle to indicate that the user can find people quickly by name" }, "findPeopleByName": "按名称快速查找人物", - "addViewers": "{count, plural, zero {添加查看者} one {添加查看者} other {添加查看者}}", - "addCollaborators": "{count, plural, zero {添加协作者} one {添加协作者} other {添加协作者}}", + "addViewers": "{count, plural, =0 {添加查看者} =1 {添加查看者r} other {添加数个查看者}}", + "addCollaborators": "{count, plural, =0 {添加协作者} =1 {添加协作者} other {添加数个协作者}}", "longPressAnEmailToVerifyEndToEndEncryption": "长按电子邮件以验证端到端加密。", "developerSettingsWarning": "您确定要修改开发者设置吗?", "developerSettings": "开发者设置", @@ -1400,7 +1400,7 @@ "enableMachineLearningBanner": "启用机器学习进行魔法搜索和面部识别", "searchDiscoverEmptySection": "处理和同步完成后,图像将显示在此处", "searchPersonsEmptySection": "处理和同步完成后,人物将显示在此处", - "viewersSuccessfullyAdded": "{count, plural, =0 {已添加 0 位查看者} =1 {已添加 1 位查看者} other {已添加 {count} 位查看者}}", + "viewersSuccessfullyAdded": "{count, plural, =0 {已添加0个查看者} =1 {已添加1个查看者} other {已添加 {count} 个查看者}}", "@viewersSuccessfullyAdded": { "placeholders": { "count": { @@ -1485,7 +1485,7 @@ }, "currentlyRunning": "目前正在运行", "ignored": "已忽略", - "photosCount": "{count, plural, =0 {0 张照片} =1 {1 张照片} other {{count} 张照片}}", + "photosCount": "{count, plural, =0 {0张照片} =1 {1张照片} other {{count} 张照片}}", "@photosCount": { "placeholders": { "count": { diff --git a/mobile/lib/l10n/l10n.dart b/mobile/lib/l10n/l10n.dart index 4fbeec9685..5154f8840c 100644 --- a/mobile/lib/l10n/l10n.dart +++ b/mobile/lib/l10n/l10n.dart @@ -20,6 +20,7 @@ const List appSupportedLocales = [ Locale("no"), Locale("pl"), Locale("pt", "BR"), + Locale('pt', 'PT'), Locale("ro"), Locale("ru"), Locale("tr"), diff --git a/mobile/lib/main.dart b/mobile/lib/main.dart index 8b034b7ba3..30a33e955e 100644 --- a/mobile/lib/main.dart +++ b/mobile/lib/main.dart @@ -16,7 +16,6 @@ import "package:media_kit/media_kit.dart"; import "package:package_info_plus/package_info_plus.dart"; import 'package:path_provider/path_provider.dart'; import 'package:photos/app.dart'; -import "package:photos/audio_session_handler.dart"; import 'package:photos/core/configuration.dart'; import 'package:photos/core/constants.dart'; import 'package:photos/core/error-reporting/super_logging.dart'; @@ -45,6 +44,7 @@ import 'package:photos/services/search_service.dart'; import 'package:photos/services/sync/local_sync_service.dart'; import 'package:photos/services/sync/remote_sync_service.dart'; import "package:photos/services/sync/sync_service.dart"; +import "package:photos/services/wake_lock_service.dart"; import "package:photos/src/rust/frb_generated.dart"; import 'package:photos/ui/tools/app_lock.dart'; import 'package:photos/ui/tools/lock_screen.dart'; @@ -69,10 +69,6 @@ void main() async { debugRepaintRainbowEnabled = false; await RustLib.init(); WidgetsFlutterBinding.ensureInitialized(); - //For audio to work on vidoes in iOS when in silent mode. - if (Platform.isIOS) { - unawaited(AudioSessionHandler.setAudioSessionCategory()); - } MediaKit.ensureInitialized(); final savedThemeMode = await AdaptiveTheme.getThemeMode(); @@ -283,6 +279,8 @@ Future _init(bool isBackground, {String via = ''}) async { MLDataDB.instance, preferences, ); + EnteWakeLockService.instance.init(preferences); + logLocalSettings(); initComplete = true; _logger.info("Initialization done $tlog"); } catch (e, s) { @@ -291,6 +289,23 @@ Future _init(bool isBackground, {String via = ''}) async { } } +void logLocalSettings() { + _logger.info("Show memories: ${memoriesCacheService.showAnyMemories}"); + _logger + .info("Smart memories enabled: ${localSettings.isSmartMemoriesEnabled}"); + _logger.info("Ml is enabled: ${flagService.hasGrantedMLConsent}"); + _logger.info( + "ML local indexing is enabled: ${localSettings.isMLLocalIndexingEnabled}", + ); + _logger.info( + "Multipart upload is enabled: ${localSettings.userEnabledMultiplePart}", + ); + _logger.info("Gallery grid size: ${localSettings.getPhotoGridSize()}"); + _logger.info( + "Video streaming is enalbed: ${PreviewVideoStore.instance.isVideoStreamingEnabled}", + ); +} + void _heartBeatOnInit(int i) { if (i <= 15) { Future.delayed(const Duration(seconds: 1), () { diff --git a/mobile/lib/models/ffmpeg/ffprobe_props.dart b/mobile/lib/models/ffmpeg/ffprobe_props.dart index e2d0138102..3159ae082c 100644 --- a/mobile/lib/models/ffmpeg/ffprobe_props.dart +++ b/mobile/lib/models/ffmpeg/ffprobe_props.dart @@ -82,6 +82,8 @@ class FFProbeProps { return width! / height!; } + int? get rotation => _rotation; + // toString() method @override String toString() { diff --git a/mobile/lib/models/gallery_type.dart b/mobile/lib/models/gallery_type.dart index 82e5650b09..a128757afe 100644 --- a/mobile/lib/models/gallery_type.dart +++ b/mobile/lib/models/gallery_type.dart @@ -104,6 +104,7 @@ extension GalleyTypeExtension on GalleryType { bool showDeleteOption() { switch (this) { case GalleryType.ownedCollection: + case GalleryType.sharedCollection: case GalleryType.searchResults: case GalleryType.homepage: case GalleryType.favorite: @@ -119,7 +120,6 @@ extension GalleyTypeExtension on GalleryType { case GalleryType.magic: return true; case GalleryType.trash: - case GalleryType.sharedCollection: case GalleryType.sharedPublicCollection: return false; } diff --git a/mobile/lib/services/collections_service.dart b/mobile/lib/services/collections_service.dart index 979a05a935..301655490a 100644 --- a/mobile/lib/services/collections_service.dart +++ b/mobile/lib/services/collections_service.dart @@ -314,8 +314,8 @@ class CollectionsService { return _coverCache[coverKey]; } - Future getFileCount(Collection c) async { - if (_countCache.containsKey(c.id)) { + Future getFileCount(Collection c, {bool useCache = true}) async { + if (_countCache.containsKey(c.id) && useCache) { return _countCache[c.id]!; } else { final count = await _filesDB.collectionFileCount(c.id); @@ -388,6 +388,16 @@ class CollectionsService { .toList(); } + List getAllOwnedCollectionIDs() { + final int userID = _config.getUserID()!; + return _collectionIDToCollections.values + .where( + (c) => !c.isDeleted && c.isOwner(userID), + ) + .map((e) => e.id) + .toList(); + } + SharedCollections getSharedCollections() { final List outgoing = []; final List incoming = []; diff --git a/mobile/lib/services/machine_learning/machine_learning_controller.dart b/mobile/lib/services/machine_learning/machine_learning_controller.dart index 4cd70a4aab..43b24dc9a5 100644 --- a/mobile/lib/services/machine_learning/machine_learning_controller.dart +++ b/mobile/lib/services/machine_learning/machine_learning_controller.dart @@ -4,6 +4,7 @@ import "dart:io"; import "package:battery_info/battery_info_plugin.dart"; import "package:battery_info/model/android_battery_info.dart"; import "package:battery_info/model/iso_battery_info.dart"; +import "package:flutter/foundation.dart"; import "package:logging/logging.dart"; import "package:photos/core/event_bus.dart"; import "package:photos/events/machine_learning_control_event.dart"; @@ -28,6 +29,13 @@ class MachineLearningController { _logger.info('MachineLearningController constructor'); _startInteractionTimer(kDefaultInteractionTimeout); if (Platform.isIOS) { + if (kDebugMode) { + _logger.info( + "iOS battery info stream is not available in simulator, disabling in debug mode", + ); + // if you need to test on physical device, uncomment this check + return; + } BatteryInfoPlugin() .iosBatteryInfoStream .listen((IosBatteryInfo? batteryInfo) { @@ -41,7 +49,7 @@ class MachineLearningController { _onAndroidBatteryStateUpdate(batteryInfo); }); } - _logger.info('init done'); + _logger.info('init done '); } void onUserInteraction() { diff --git a/mobile/lib/services/machine_learning/ml_result.dart b/mobile/lib/services/machine_learning/ml_result.dart index 24709095c2..e38b20097a 100644 --- a/mobile/lib/services/machine_learning/ml_result.dart +++ b/mobile/lib/services/machine_learning/ml_result.dart @@ -1,5 +1,6 @@ import "dart:convert" show jsonEncode, jsonDecode; +import "package:logging/logging.dart"; import "package:photos/models/ml/face/dimension.dart"; import 'package:photos/models/ml/ml_typedefs.dart'; import 'package:photos/services/machine_learning/face_ml/face_alignment/alignment_result.dart'; @@ -157,5 +158,14 @@ T getFileIdFromFaceId(String faceId) { } int? tryGetFileIdFromFaceId(String faceId) { - return int.tryParse(faceId.substring(0, faceId.indexOf('_'))); + try { + return int.tryParse(faceId.substring(0, faceId.indexOf('_'))); + } catch (e, s) { + Logger("FaceID").severe( + "Error parsing faceId: $faceId", + e, + s, + ); + return null; + } } diff --git a/mobile/lib/services/magic_cache_service.dart b/mobile/lib/services/magic_cache_service.dart index 9bda19a98f..462cb851fd 100644 --- a/mobile/lib/services/magic_cache_service.dart +++ b/mobile/lib/services/magic_cache_service.dart @@ -305,8 +305,15 @@ class MagicCacheService { _logger.info("No magic cache found"); return []; } - final jsonString = file.readAsStringSync(); - return MagicCache.decodeJsonToList(jsonString); + try { + final bytes = await file.readAsBytes(); + final jsonString = String.fromCharCodes(bytes); + return MagicCache.decodeJsonToList(jsonString); + } catch (e, s) { + _logger.severe("Error reading or decoding cache file", e, s); + await file.delete(); + rethrow; + } } Future clearMagicCache() async { diff --git a/mobile/lib/services/memories_cache_service.dart b/mobile/lib/services/memories_cache_service.dart index bd446c7047..ed2bd9d108 100644 --- a/mobile/lib/services/memories_cache_service.dart +++ b/mobile/lib/services/memories_cache_service.dart @@ -22,6 +22,7 @@ import "package:photos/services/search_service.dart"; import "package:photos/ui/home/memories/full_screen_memory.dart"; import "package:photos/utils/navigation_util.dart"; import "package:shared_preferences/shared_preferences.dart"; +import "package:synchronized/synchronized.dart"; class MemoriesCacheService { static const _lastMemoriesCacheUpdateTimeKey = "lastMemoriesCacheUpdateTime"; @@ -39,7 +40,8 @@ class MemoriesCacheService { List? _cachedMemories; bool _shouldUpdate = false; - bool _isUpdateInProgress = false; + + final _memoriesUpdateLock = Lock(); MemoriesCacheService(this._prefs) { _logger.fine("MemoriesCacheService constructor"); @@ -88,7 +90,15 @@ class MemoriesCacheService { Bus.instance.fire(MemoriesSettingChanged()); } - bool get enableSmartMemories => flagService.hasGrantedMLConsent; + bool get enableSmartMemories => + flagService.hasGrantedMLConsent && + localSettings.isMLLocalIndexingEnabled && + localSettings.isSmartMemoriesEnabled; + + bool get curatedMemoriesOption => + showAnyMemories && + flagService.hasGrantedMLConsent && + localSettings.isMLLocalIndexingEnabled; void _checkIfTimeToUpdateCache() { if (!enableSmartMemories) { @@ -152,74 +162,68 @@ class MemoriesCacheService { return; } _checkIfTimeToUpdateCache(); - try { - if ((!_shouldUpdate && !forced) || _isUpdateInProgress) { + + return _memoriesUpdateLock.synchronized(() async { + if ((!_shouldUpdate && !forced)) { _logger.info( - "No update needed (shouldUpdate: $_shouldUpdate, forced: $forced, isUpdateInProgress $_isUpdateInProgress)", + "No update needed (shouldUpdate: $_shouldUpdate, forced: $forced)", ); - if (_isUpdateInProgress) { - int waitingTime = 0; - while (_isUpdateInProgress && waitingTime < 60) { - await Future.delayed(const Duration(seconds: 1)); - waitingTime++; - } - } return; } _logger.info( - "Updating memories cache (shouldUpdate: $_shouldUpdate, forced: $forced, isUpdateInProgress $_isUpdateInProgress)", + "Updating memories cache (shouldUpdate: $_shouldUpdate, forced: $forced)", ); - _isUpdateInProgress = true; - final EnteWatch? w = - kDebugMode ? EnteWatch("MemoriesCacheService") : null; - w?.start(); - final oldCache = await _readCacheFromDisk(); - w?.log("gotten old cache"); - final MemoriesCache newCache = _processOldCache(oldCache); - w?.log("processed old cache"); - // calculate memories for this period and for the next period - final now = DateTime.now(); - final next = now.add(kMemoriesUpdateFrequency); - final nowResult = await smartMemoriesService.calcMemories(now, newCache); - if (nowResult.isEmpty) { - _cachedMemories = []; - _isUpdateInProgress = false; - _logger.warning( - "No memories found for now, not updating cache and returning early", + try { + final EnteWatch? w = + kDebugMode ? EnteWatch("MemoriesCacheService") : null; + w?.start(); + final oldCache = await _readCacheFromDisk(); + w?.log("gotten old cache"); + final MemoriesCache newCache = _processOldCache(oldCache); + w?.log("processed old cache"); + // calculate memories for this period and for the next period + final now = DateTime.now(); + final next = now.add(kMemoriesUpdateFrequency); + final nowResult = + await smartMemoriesService.calcMemories(now, newCache); + if (nowResult.isEmpty) { + _cachedMemories = []; + _logger.warning( + "No memories found for now, not updating cache and returning early", + ); + return; + } + final nextResult = + await smartMemoriesService.calcMemories(next, newCache); + w?.log("calculated new memories"); + for (final nowMemory in nowResult.memories) { + newCache.toShowMemories + .add(ToShowMemory.fromSmartMemory(nowMemory, now)); + } + for (final nextMemory in nextResult.memories) { + newCache.toShowMemories + .add(ToShowMemory.fromSmartMemory(nextMemory, next)); + } + newCache.baseLocations.addAll(nowResult.baseLocations); + w?.log("added memories to cache"); + final file = File(await _getCachePath()); + if (!file.existsSync()) { + file.createSync(recursive: true); + } + _cachedMemories = nowResult.memories + .where((memory) => memory.shouldShowNow()) + .toList(); + locationService.baseLocations = nowResult.baseLocations; + await file.writeAsBytes( + MemoriesCache.encodeToJsonString(newCache).codeUnits, ); - return; + w?.log("cacheWritten"); + await _cacheUpdated(); + w?.logAndReset('_cacheUpdated method done'); + } catch (e, s) { + _logger.info("Error updating memories cache", e, s); } - final nextResult = - await smartMemoriesService.calcMemories(next, newCache); - w?.log("calculated new memories"); - for (final nowMemory in nowResult.memories) { - newCache.toShowMemories - .add(ToShowMemory.fromSmartMemory(nowMemory, now)); - } - for (final nextMemory in nextResult.memories) { - newCache.toShowMemories - .add(ToShowMemory.fromSmartMemory(nextMemory, next)); - } - newCache.baseLocations.addAll(nowResult.baseLocations); - w?.log("added memories to cache"); - final file = File(await _getCachePath()); - if (!file.existsSync()) { - file.createSync(recursive: true); - } - _cachedMemories = - nowResult.memories.where((memory) => memory.shouldShowNow()).toList(); - locationService.baseLocations = nowResult.baseLocations; - await file.writeAsBytes( - MemoriesCache.encodeToJsonString(newCache).codeUnits, - ); - w?.log("cacheWritten"); - await _cacheUpdated(); - w?.logAndReset('_cacheUpdated method done'); - } catch (e, s) { - _logger.info("Error updating memories cache", e, s); - } finally { - _isUpdateInProgress = false; - } + }); } /// WARNING: Use for testing only, TODO: lau: remove later @@ -428,14 +432,26 @@ class MemoriesCacheService { allFileIdsToFile[file.uploadedFileID!] = file; } } - final jsonString = file.readAsStringSync(); - return MemoriesCache.decodeFromJsonString(jsonString, allFileIdsToFile); + try { + final bytes = await file.readAsBytes(); + final jsonString = String.fromCharCodes(bytes); + final cache = + MemoriesCache.decodeFromJsonString(jsonString, allFileIdsToFile); + _logger.info("Reading memories cache result from disk done"); + return cache; + } catch (e, s) { + _logger.severe("Error reading or decoding cache file", e, s); + await file.delete(); + return null; + } } - Future clearMemoriesCache() async { - final file = File(await _getCachePath()); - if (file.existsSync()) { - await file.delete(); + Future clearMemoriesCache({bool fromDisk = true}) async { + if (fromDisk) { + final file = File(await _getCachePath()); + if (file.existsSync()) { + await file.delete(); + } } _cachedMemories = null; } diff --git a/mobile/lib/services/memory_home_widget_service.dart b/mobile/lib/services/memory_home_widget_service.dart index d40b8fb1a3..6b76bff295 100644 --- a/mobile/lib/services/memory_home_widget_service.dart +++ b/mobile/lib/services/memory_home_widget_service.dart @@ -145,7 +145,7 @@ class MemoryHomeWidgetService { final files = Map.fromEntries( memories.map((m) { return MapEntry(m.title, m.memories.map((e) => e.file).toList()); - }).take(50), + }), ); return files; @@ -230,8 +230,17 @@ class MemoryHomeWidgetService { ); } index++; + + if (index >= 50) { + _logger.warning(">>> Max memory limit reached"); + break; + } } } + + if (index >= 50) { + break; + } } if (index == 0) { diff --git a/mobile/lib/services/preview_video_store.dart b/mobile/lib/services/preview_video_store.dart index 0e97983bb5..50ebbed09e 100644 --- a/mobile/lib/services/preview_video_store.dart +++ b/mobile/lib/services/preview_video_store.dart @@ -6,9 +6,9 @@ import "dart:io"; import "package:collection/collection.dart"; import "package:dio/dio.dart"; import "package:encrypt/encrypt.dart" as enc; -import "package:ffmpeg_kit_flutter_full_gpl/ffmpeg_kit.dart"; -import "package:ffmpeg_kit_flutter_full_gpl/ffmpeg_session.dart"; -import "package:ffmpeg_kit_flutter_full_gpl/return_code.dart"; +import "package:ffmpeg_kit_flutter/ffmpeg_kit.dart"; +import "package:ffmpeg_kit_flutter/ffmpeg_session.dart"; +import "package:ffmpeg_kit_flutter/return_code.dart"; import "package:flutter/foundation.dart"; // import "package:flutter/wid.dart"; import "package:flutter/widgets.dart"; @@ -242,7 +242,7 @@ class PreviewVideoStore { '-vf "format=yuv420p10le,zscale=transfer=linear,tonemap=tonemap=hable:desat=0:peak=10,zscale=transfer=bt709:matrix=bt709:primaries=bt709,format=yuv420p" ' '-color_primaries bt709 -color_trc bt709 -colorspace bt709 ' '-c:v libx264 -crf 23 -preset medium ' - '-c:a copy ' + '-c:a aac -b:a 128k ' '-f hls -hls_time 2 -hls_flags single_file ' '-hls_list_size 0 -hls_key_info_file ${keyinfo.path} ' '$prefix/output.m3u8', @@ -355,6 +355,8 @@ class PreviewVideoStore { collectionID: enteFile.collectionID ?? 0, ); _removeFromLocks(enteFile).ignore(); + Directory(prefix).delete(recursive: true).ignore(); + Bus.instance.fire(PreviewUpdatedEvent(_items)); } } finally { @@ -657,7 +659,7 @@ class PreviewVideoStore { final fileSize = enteFile.fileSize; FFProbeProps? props; File? file; - bool result = false; + bool skipFile = false; try { final isFileUnder10MB = fileSize != null && fileSize <= 10 * 1024 * 1024; @@ -669,13 +671,42 @@ class PreviewVideoStore { .firstWhereOrNull((e) => e["type"] == "video"); final codec = videoData["codec_name"]?.toString().toLowerCase(); - result = codec?.contains("h264") ?? false; + skipFile = codec?.contains("h264") ?? false; + + if (skipFile) { + _logger.info( + "[init] Ignoring file ${enteFile.displayName} for preview due to codec", + ); + return (props, skipFile, file); + } } } + + int? size = enteFile.fileSize; + int? duration = enteFile.duration; + + if (size == null) { + file = await getFile(enteFile, isOrigin: true); + size = file?.lengthSync(); + } + + if (duration == null) { + file ??= await getFile(enteFile, isOrigin: true); + props = await getVideoPropsAsync(file!); + duration = props?.duration?.inSeconds; + } + + if ((size == null || duration == null) || + (size >= 500 * 1024 * 1024 || duration > 60)) { + skipFile = true; + _logger.info( + "[init] Ignoring file ${enteFile.displayName} for preview due to size: $size and duration: $duration", + ); + } } catch (e, sT) { _logger.warning("Failed to check props", e, sT); } - return (props, result, file); + return (props, skipFile, file); } // generate stream for all files after cutoff date @@ -721,6 +752,7 @@ class PreviewVideoStore { var n = allFiles.length, i = 0; while (i < n) { final enteFile = allFiles[i]; + // elimination case for <=10 MB with H.264 final (_, result, _) = await _checkFileForPreviewCreation(enteFile); final isFailure = @@ -736,6 +768,9 @@ class PreviewVideoStore { ); } if (result || isFailure) { + _logger.info( + "[init] Ignoring file ${enteFile.displayName} for preview", + ); allFiles.removeAt(i); n--; continue; diff --git a/mobile/lib/services/sync/trash_sync_service.dart b/mobile/lib/services/sync/trash_sync_service.dart index 53c94f16c7..b3cf1db6a9 100644 --- a/mobile/lib/services/sync/trash_sync_service.dart +++ b/mobile/lib/services/sync/trash_sync_service.dart @@ -7,6 +7,7 @@ import "package:ente_crypto/ente_crypto.dart"; import 'package:logging/logging.dart'; import 'package:photos/core/constants.dart'; import 'package:photos/core/event_bus.dart'; +import "package:photos/db/files_db.dart"; import 'package:photos/db/trash_db.dart'; import 'package:photos/events/collection_updated_event.dart'; import 'package:photos/events/force_reload_trash_page_event.dart'; @@ -17,6 +18,7 @@ import 'package:photos/models/file/file.dart'; import 'package:photos/models/file/trash_file.dart'; import 'package:photos/models/ignored_file.dart'; import "package:photos/models/metadata/file_magic.dart"; +import "package:photos/services/collections_service.dart"; import 'package:photos/services/ignored_files_service.dart'; import "package:photos/utils/file_key.dart"; import 'package:shared_preferences/shared_preferences.dart'; @@ -108,10 +110,34 @@ class TrashSyncService { Future trashFilesOnServer(List trashRequestItems) async { final includedFileIDs = {}; final uniqueItems = []; + final ownedCollectionIDs = + CollectionsService.instance.getAllOwnedCollectionIDs(); for (final item in trashRequestItems) { if (!includedFileIDs.contains(item.fileID)) { - uniqueItems.add(item); - includedFileIDs.add(item.fileID); + // Check if the collectionID in the request is owned by the user + if (ownedCollectionIDs.contains(item.collectionID)) { + uniqueItems.add(item); + includedFileIDs.add(item.fileID); + } else { + // If not owned, use a different owned collectionID + final fileCollectionIDs = + await FilesDB.instance.getAllCollectionIDsOfFile(item.fileID); + bool foundAnotherOwnedCollection = false; + for (final collectionID in fileCollectionIDs) { + if (ownedCollectionIDs.contains(collectionID)) { + final newItem = TrashRequest(item.fileID, collectionID); + uniqueItems.add(newItem); + includedFileIDs.add(item.fileID); + foundAnotherOwnedCollection = true; + break; + } + } + if (!foundAnotherOwnedCollection) { + _logger.severe( + "File ${item.fileID} is not owned by the user and has no other owned collection", + ); + } + } } } final requestData = {}; diff --git a/mobile/lib/services/video_memory_service.dart b/mobile/lib/services/video_memory_service.dart index c8e69ac0a9..1813893a8e 100644 --- a/mobile/lib/services/video_memory_service.dart +++ b/mobile/lib/services/video_memory_service.dart @@ -2,8 +2,8 @@ import "dart:async"; import "dart:io"; import "dart:typed_data"; -import "package:ffmpeg_kit_flutter_full_gpl/ffmpeg_kit.dart"; -import "package:ffmpeg_kit_flutter_full_gpl/return_code.dart"; +import "package:ffmpeg_kit_flutter/ffmpeg_kit.dart"; +import "package:ffmpeg_kit_flutter/return_code.dart"; import "package:flutter/cupertino.dart"; import "package:image/image.dart" as img; import "package:logging/logging.dart"; diff --git a/mobile/lib/services/wake_lock_service.dart b/mobile/lib/services/wake_lock_service.dart new file mode 100644 index 0000000000..1e72481b32 --- /dev/null +++ b/mobile/lib/services/wake_lock_service.dart @@ -0,0 +1,51 @@ +import "package:shared_preferences/shared_preferences.dart"; +import "package:wakelock_plus/wakelock_plus.dart"; + +enum WakeLockFor { + videoPlayback, + fasterBackupsOniOSByKeepingScreenAwake, + machineLearningSettingsScreen, + handlingMediaKitEdgeCase, +} + +/// Use this wrapper to use wakelock. This class makes sure that the wakelock +/// setting across sessions if set is respected when wakelock is updated for +/// other non across session purposes. +/// Only place where this wrapper is not used for accessing wakelock APIs is +/// in media_kit package. +class EnteWakeLockService { + static const String kKeepAppAwakeAcrossSessions = + "keepAppAwakeAcrossSessions"; + + EnteWakeLockService._privateConstructor(); + + static final EnteWakeLockService instance = + EnteWakeLockService._privateConstructor(); + + late SharedPreferences _prefs; + + void init(SharedPreferences prefs) { + _prefs = prefs; + if (_prefs.getBool(kKeepAppAwakeAcrossSessions) ?? false) { + WakelockPlus.enable(); + } + } + + void updateWakeLock({ + required bool enable, + required WakeLockFor wakeLockFor, + }) { + if (wakeLockFor == WakeLockFor.fasterBackupsOniOSByKeepingScreenAwake || + wakeLockFor == WakeLockFor.handlingMediaKitEdgeCase) { + WakelockPlus.toggle(enable: enable); + _prefs.setBool(kKeepAppAwakeAcrossSessions, enable); + } else { + if (!shouldKeepAppAwakeAcrossSessions) { + WakelockPlus.toggle(enable: enable); + } + } + } + + bool get shouldKeepAppAwakeAcrossSessions => + _prefs.getBool(kKeepAppAwakeAcrossSessions) ?? false; +} diff --git a/mobile/lib/ui/account/passkey_page.dart b/mobile/lib/ui/account/passkey_page.dart index 8db4c3a130..90d54e606b 100644 --- a/mobile/lib/ui/account/passkey_page.dart +++ b/mobile/lib/ui/account/passkey_page.dart @@ -1,6 +1,7 @@ import "dart:async"; import 'dart:convert'; +import "package:app_links/app_links.dart"; import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; import 'package:photos/core/configuration.dart'; @@ -15,7 +16,6 @@ import "package:photos/ui/components/models/button_type.dart"; import "package:photos/ui/notification/toast.dart"; import "package:photos/utils/dialog_util.dart"; import "package:photos/utils/navigation_util.dart"; -import "package:uni_links/uni_links.dart"; import 'package:url_launcher/url_launcher_string.dart'; class PasskeyPage extends StatefulWidget { @@ -36,7 +36,7 @@ class PasskeyPage extends StatefulWidget { class _PasskeyPageState extends State { final Logger _logger = Logger("PasskeyPage"); - late StreamSubscription linkStreamSubscription; + late StreamSubscription linkStreamSubscription; @override void initState() { @@ -85,15 +85,16 @@ class _PasskeyPageState extends State { await UserService.instance.onPassKeyVerified(context, response); } - Future _handleDeeplink(String? link) async { + Future _handleDeeplink(Uri? uri) async { if (!context.mounted || Configuration.instance.hasConfiguredAccount() || - link == null) { + uri == null) { _logger.warning( 'ignored deeplink: contextMounted ${context.mounted} hasConfiguredAccount ${Configuration.instance.hasConfiguredAccount()}', ); return; } + final link = uri.toString(); try { if (mounted && link.toLowerCase().startsWith("ente://passkey")) { if (Configuration.instance.isLoggedIn()) { @@ -126,8 +127,9 @@ class _PasskeyPageState extends State { } Future _initDeepLinks() async { + final appLinks = AppLinks(); // Attach a listener to the stream - linkStreamSubscription = linkStream.listen( + linkStreamSubscription = appLinks.uriLinkStream.listen( _handleDeeplink, onError: (err) { _logger.severe(err); diff --git a/mobile/lib/ui/common/linear_progress_dialog.dart b/mobile/lib/ui/common/linear_progress_dialog.dart index 714ad73155..e28f79273e 100644 --- a/mobile/lib/ui/common/linear_progress_dialog.dart +++ b/mobile/lib/ui/common/linear_progress_dialog.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:photos/ente_theme_data.dart'; +import "package:photos/theme/ente_theme.dart"; class LinearProgressDialog extends StatefulWidget { final String message; @@ -10,19 +11,44 @@ class LinearProgressDialog extends StatefulWidget { LinearProgressDialogState createState() => LinearProgressDialogState(); } -class LinearProgressDialogState extends State { - double? _progress; +class LinearProgressDialogState extends State + with TickerProviderStateMixin { + late AnimationController controller; + late Tween _tween; + late Animation _animation; + + double _target = 0.0; @override void initState() { - _progress = 0; super.initState(); + controller = AnimationController( + vsync: this, + duration: const Duration(milliseconds: 300), + ); + + _tween = Tween(begin: _target, end: _target); + + _animation = _tween.animate( + CurvedAnimation( + curve: Curves.easeInOut, + parent: controller, + ), + ); + } + + @override + void dispose() { + controller.dispose(); + super.dispose(); } void setProgress(double progress) { - setState(() { - _progress = progress; - }); + _target = progress; + _tween.begin = _tween.end; + controller.reset(); + _tween.end = progress; + controller.forward(); } @override @@ -32,16 +58,19 @@ class LinearProgressDialogState extends State { child: AlertDialog( title: Text( widget.message, - style: const TextStyle( - fontSize: 16, - ), + style: getEnteTextTheme(context).smallMuted, textAlign: TextAlign.center, ), - content: LinearProgressIndicator( - value: _progress, - valueColor: AlwaysStoppedAnimation( - Theme.of(context).colorScheme.greenAlternative, - ), + content: AnimatedBuilder( + animation: _animation, + builder: (context, child) { + return LinearProgressIndicator( + value: _animation.value, + valueColor: AlwaysStoppedAnimation( + Theme.of(context).colorScheme.greenAlternative, + ), + ); + }, ), ), ); diff --git a/mobile/lib/ui/home/landing_page_widget.dart b/mobile/lib/ui/home/landing_page_widget.dart index bdc1e8a03e..dda991b344 100644 --- a/mobile/lib/ui/home/landing_page_widget.dart +++ b/mobile/lib/ui/home/landing_page_widget.dart @@ -42,6 +42,10 @@ class _LandingPageWidgetState extends State { void initState() { super.initState(); Future(_showAutoLogoutDialogIfRequired); + Future.delayed( + const Duration(seconds: 1), + _autoEnableResumableUpload, + ); } @override @@ -304,6 +308,10 @@ class _LandingPageWidgetState extends State { } } } + + void _autoEnableResumableUpload() { + localSettings.autoEnableMultiplePart(20).ignore(); + } } class FeatureItemWidget extends StatelessWidget { diff --git a/mobile/lib/ui/home/loading_photos_widget.dart b/mobile/lib/ui/home/loading_photos_widget.dart index f6846438e8..d4eeb92650 100644 --- a/mobile/lib/ui/home/loading_photos_widget.dart +++ b/mobile/lib/ui/home/loading_photos_widget.dart @@ -39,7 +39,9 @@ class _LoadingPhotosWidgetState extends State { void initState() { super.initState(); Future.delayed(const Duration(seconds: 60), () { - oneMinuteOnScreen.value = true; + if (mounted) { + oneMinuteOnScreen.value = true; + } }); _firstImportEvent = Bus.instance.on().listen((event) async { diff --git a/mobile/lib/ui/home/status_bar_widget.dart b/mobile/lib/ui/home/status_bar_widget.dart index 15ba5b7141..6ab6a682e1 100644 --- a/mobile/lib/ui/home/status_bar_widget.dart +++ b/mobile/lib/ui/home/status_bar_widget.dart @@ -6,12 +6,9 @@ import "package:logging/logging.dart"; import 'package:photos/core/event_bus.dart'; import 'package:photos/ente_theme_data.dart'; import 'package:photos/events/notification_event.dart'; -import "package:photos/events/preview_updated_event.dart"; import 'package:photos/events/sync_status_update_event.dart'; import "package:photos/generated/l10n.dart"; -import "package:photos/models/preview/preview_item_status.dart"; import "package:photos/service_locator.dart"; -import "package:photos/services/preview_video_store.dart"; import 'package:photos/services/sync/sync_service.dart'; import "package:photos/theme/ente_theme.dart"; import 'package:photos/theme/text_style.dart'; @@ -34,11 +31,9 @@ class StatusBarWidget extends StatefulWidget { class _StatusBarWidgetState extends State { static final _logger = Logger("StatusBarWidget"); - late int previewCount = 0; late StreamSubscription _subscription; late StreamSubscription _notificationSubscription; - late StreamSubscription _previewSubscription; bool _showStatus = false; bool _showErrorBanner = false; @@ -85,25 +80,6 @@ class _StatusBarWidgetState extends State { } }); - previewCount = PreviewVideoStore.instance.previews.values - .where( - (element) => - element.status != PreviewItemStatus.uploaded && - element.status != PreviewItemStatus.failed, - ) - .length; - - _previewSubscription = - Bus.instance.on().listen((event) { - previewCount = event.items.values - .where( - (element) => - element.status != PreviewItemStatus.uploaded && - element.status != PreviewItemStatus.failed, - ) - .length; - setState(() {}); - }); super.initState(); } @@ -111,7 +87,6 @@ class _StatusBarWidgetState extends State { void dispose() { _subscription.cancel(); _notificationSubscription.cancel(); - _previewSubscription.cancel(); super.dispose(); } @@ -131,20 +106,7 @@ class _StatusBarWidgetState extends State { }, child: const SyncStatusWidget(), ) - : previewCount > 0 - ? GestureDetector( - onTap: () { - routeToPage( - context, - const BackupStatusScreen(), - forceCustomPageRoute: true, - ).ignore(); - }, - child: RefreshIndicatorWidget( - S.of(context).processingVideos, - ), - ) - : const Text("ente", style: brandStyleMedium), + : const Text("ente", style: brandStyleMedium), ), _showErrorBanner ? Divider( diff --git a/mobile/lib/ui/settings/backup/backup_item_card.dart b/mobile/lib/ui/settings/backup/backup_item_card.dart index 84d9272853..8dd2930c16 100644 --- a/mobile/lib/ui/settings/backup/backup_item_card.dart +++ b/mobile/lib/ui/settings/backup/backup_item_card.dart @@ -1,15 +1,17 @@ import "dart:async"; import 'package:flutter/material.dart'; +import "package:logging/logging.dart"; +import "package:photos/generated/l10n.dart"; import "package:photos/models/backup/backup_item.dart"; import "package:photos/models/backup/backup_item_status.dart"; -import "package:photos/models/preview/preview_item.dart"; -import "package:photos/models/preview/preview_item_status.dart"; -import "package:photos/services/preview_video_store.dart"; import 'package:photos/theme/ente_theme.dart'; +import "package:photos/ui/components/buttons/button_widget.dart"; +import "package:photos/ui/components/dialog_widget.dart"; +import "package:photos/ui/components/models/button_type.dart"; import "package:photos/ui/viewer/file/detail_page.dart"; import "package:photos/ui/viewer/file/thumbnail_widget.dart"; -import "package:photos/utils/dialog_util.dart"; +import "package:photos/utils/email_util.dart"; import "package:photos/utils/file_uploader.dart"; import "package:photos/utils/navigation_util.dart"; @@ -17,11 +19,9 @@ class BackupItemCard extends StatefulWidget { const BackupItemCard({ super.key, required this.item, - required this.preview, }); final BackupItem item; - final PreviewItem? preview; @override State createState() => _BackupItemCardState(); @@ -30,6 +30,7 @@ class BackupItemCard extends StatefulWidget { class _BackupItemCardState extends State { String? folderName; bool showThumbnail = false; + final _logger = Logger("BackupItemCard"); @override void initState() { @@ -54,8 +55,7 @@ class _BackupItemCardState extends State { @override Widget build(BuildContext context) { final colorScheme = getEnteColorScheme(context); - final hasError = widget.item.error != null || - widget.preview?.status == PreviewItemStatus.failed; + final hasError = widget.item.error != null; return GestureDetector( onTap: () { @@ -143,24 +143,39 @@ class _BackupItemCardState extends State { color: getEnteColorScheme(context).fillBase, ), onPressed: () { - String errorMessage = ""; - bool isPreview = false; - if (widget.item.error is Exception) { - final Exception ex = widget.item.error as Exception; - errorMessage = "Error: " + - ex.runtimeType.toString() + - " - " + - ex.toString(); - } else if (widget.item.error != null) { - errorMessage = widget.item.error.toString(); - } else if (widget.preview?.error != null) { - errorMessage = widget.preview!.error!.toString(); - isPreview = true; - } - showErrorDialog( - context, - isPreview ? "Preview upload ailed" : 'Upload failed', - errorMessage, + showDialogWidget( + context: context, + body: S.of(context).sorryBackupFailedDesc, + title: S.of(context).backupFailed, + icon: Icons.error_outline_outlined, + isDismissible: true, + buttons: [ + ButtonWidget( + buttonType: ButtonType.primary, + labelText: S.of(context).contactSupport, + buttonAction: ButtonAction.second, + onTap: () async { + _logger.warning( + "Backup failed for ${widget.item.file.displayName}", + widget.item.error, + ); + await sendLogs( + context, + S.of(context).contactSupport, + "support@ente.io", + postShare: () {}, + ); + }, + ), + ButtonWidget( + buttonType: ButtonType.secondary, + labelText: S.of(context).ok, + buttonAction: ButtonAction.first, + onTap: () async { + Navigator.of(context).pop(); + }, + ), + ], ); }, ), @@ -179,57 +194,14 @@ class _BackupItemCardState extends State { color: colorScheme.primary700, ), ), - BackupItemStatus.uploaded => widget.preview != null - ? switch (widget.preview!.status) { - PreviewItemStatus.uploading || - PreviewItemStatus.compressing => - SizedBox( - width: 24, - height: 24, - child: Image.asset( - "assets/processing-video.png", - ), - ), - PreviewItemStatus.failed => GestureDetector( - onTap: () => PreviewVideoStore.instance - .chunkAndUploadVideo( - context, - widget.item.file, - true, - ), - child: SizedBox( - width: 24, - height: 24, - child: Image.asset( - "assets/processing-video-failed.png", - ), - ), - ), - PreviewItemStatus.retry || - PreviewItemStatus.inQueue => - SizedBox( - width: 24, - height: 24, - child: Image.asset( - "assets/video-processing-queued.png", - ), - ), - PreviewItemStatus.uploaded => SizedBox( - width: 24, - height: 24, - child: Image.asset( - "assets/processing-video-success.png", - ), - ), - } - : const SizedBox( - width: 24, - height: 24, - child: Icon( - Icons.check, - color: Color(0xFF00B33C), - ), - ), + BackupItemStatus.uploaded => const SizedBox( + width: 24, + height: 24, + child: Icon( + Icons.check, + color: Color(0xFF00B33C), + ), + ), BackupItemStatus.inQueue => SizedBox( width: 24, height: 24, diff --git a/mobile/lib/ui/settings/backup/backup_settings_screen.dart b/mobile/lib/ui/settings/backup/backup_settings_screen.dart index 8f87fb6037..3824a1158b 100644 --- a/mobile/lib/ui/settings/backup/backup_settings_screen.dart +++ b/mobile/lib/ui/settings/backup/backup_settings_screen.dart @@ -1,9 +1,10 @@ -import 'dart:io'; +import "dart:io"; import 'package:flutter/material.dart'; import 'package:photos/core/configuration.dart'; import "package:photos/generated/l10n.dart"; import "package:photos/service_locator.dart"; +import "package:photos/services/wake_lock_service.dart"; import 'package:photos/theme/ente_theme.dart'; import 'package:photos/ui/components/buttons/icon_button_widget.dart'; import 'package:photos/ui/components/captioned_text_widget.dart'; @@ -134,13 +135,15 @@ class BackupSettingsScreen extends StatelessWidget { ), menuItemColor: colorScheme.fillFaint, trailingWidget: ToggleSwitchWidget( - value: () => Configuration.instance - .shouldKeepDeviceAwake(), - onChanged: () { - return Configuration.instance - .setShouldKeepDeviceAwake( - !Configuration.instance - .shouldKeepDeviceAwake(), + value: () => EnteWakeLockService.instance + .shouldKeepAppAwakeAcrossSessions, + onChanged: () async { + EnteWakeLockService.instance + .updateWakeLock( + enable: !EnteWakeLockService.instance + .shouldKeepAppAwakeAcrossSessions, + wakeLockFor: WakeLockFor + .fasterBackupsOniOSByKeepingScreenAwake, ); }, ), diff --git a/mobile/lib/ui/settings/backup/backup_status_screen.dart b/mobile/lib/ui/settings/backup/backup_status_screen.dart index bdd32795c0..82471ef137 100644 --- a/mobile/lib/ui/settings/backup/backup_status_screen.dart +++ b/mobile/lib/ui/settings/backup/backup_status_screen.dart @@ -7,12 +7,10 @@ import 'package:flutter/material.dart'; import "package:photos/core/event_bus.dart"; import "package:photos/events/backup_updated_event.dart"; import "package:photos/events/file_uploaded_event.dart"; -import "package:photos/events/preview_updated_event.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/models/backup/backup_item.dart"; import "package:photos/models/backup/backup_item_status.dart"; import "package:photos/models/file/extensions/file_props.dart"; -import "package:photos/services/preview_video_store.dart"; import "package:photos/services/search_service.dart"; import "package:photos/ui/components/title_bar_widget.dart"; import "package:photos/ui/settings/backup/backup_item_card.dart"; @@ -28,10 +26,8 @@ class BackupStatusScreen extends StatefulWidget { class _BackupStatusScreenState extends State { LinkedHashMap items = FileUploader.instance.allBackups; List? result; - var previewResult = PreviewVideoStore.instance.previews; StreamSubscription? _fileUploadedSubscription; StreamSubscription? _backupUpdatedSubscription; - StreamSubscription? _previewUpdatedSubscription; @override void initState() { @@ -82,11 +78,6 @@ class _BackupStatusScreenState extends State { items = event.items; safeSetState(); }); - _previewUpdatedSubscription = - Bus.instance.on().listen((event) { - previewResult = event.items; - safeSetState(); - }); } void safeSetState() { @@ -99,7 +90,6 @@ class _BackupStatusScreenState extends State { void dispose() { _fileUploadedSubscription?.cancel(); _backupUpdatedSubscription?.cancel(); - _previewUpdatedSubscription?.cancel(); super.dispose(); } @@ -113,25 +103,7 @@ class _BackupStatusScreenState extends State { ...items.where( (element) => element.status != BackupItemStatus.uploaded, ), - if (result != null) - ...result! - .where( - (element) => - element.file.uploadedFileID != null && - previewResult[element.file.uploadedFileID] != null, - ) - .sorted( - (a, b) => - previewResult[a.file.uploadedFileID]!.status.index.compareTo( - previewResult[b.file.uploadedFileID]!.status.index, - ), - ), - if (result != null) - ...result!.where( - (element) => - element.file.uploadedFileID == null || - previewResult[element.file.uploadedFileID] == null, - ), + ...?result, ]; return Scaffold( @@ -187,7 +159,6 @@ class _BackupStatusScreenState extends State { return BackupItemCard( item: allItems[index], key: ValueKey(allItems[index].file.uploadedFileID), - preview: previewResult[allItems[index].file.uploadedFileID], ); }, itemCount: allItems.length, diff --git a/mobile/lib/ui/settings/developer_settings_widget.dart b/mobile/lib/ui/settings/developer_settings_widget.dart index b77d647c66..8035fb844d 100644 --- a/mobile/lib/ui/settings/developer_settings_widget.dart +++ b/mobile/lib/ui/settings/developer_settings_widget.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import "package:photos/core/configuration.dart"; -import "package:photos/core/constants.dart"; import "package:photos/generated/l10n.dart"; class DeveloperSettingsWidget extends StatelessWidget { @@ -8,8 +7,8 @@ class DeveloperSettingsWidget extends StatelessWidget { @override Widget build(BuildContext context) { - final endpoint = Configuration.instance.getHttpEndpoint(); - if (endpoint != kDefaultProductionEndpoint) { + if (!Configuration.instance.isEnteProduction()) { + final endpoint = Configuration.instance.getHttpEndpoint(); final endpointURI = Uri.parse(endpoint); return Padding( padding: const EdgeInsets.only(bottom: 20), diff --git a/mobile/lib/ui/settings/gallery_settings_screen.dart b/mobile/lib/ui/settings/gallery_settings_screen.dart index fc8a8a705a..3e4e86e1d0 100644 --- a/mobile/lib/ui/settings/gallery_settings_screen.dart +++ b/mobile/lib/ui/settings/gallery_settings_screen.dart @@ -3,6 +3,7 @@ import "dart:async"; import "package:flutter/material.dart"; import "package:photos/core/event_bus.dart"; import "package:photos/events/hide_shared_items_from_home_gallery_event.dart"; +import "package:photos/events/memories_changed_event.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/service_locator.dart"; import "package:photos/services/memory_home_widget_service.dart"; @@ -103,21 +104,42 @@ class _GallerySettingsScreenState extends State { trailingWidget: ToggleSwitchWidget( value: () => memoriesCacheService.showAnyMemories, onChanged: () async { - unawaited( - memoriesCacheService.setShowAnyMemories( - !memoriesCacheService.showAnyMemories, - ), + await memoriesCacheService.setShowAnyMemories( + !memoriesCacheService.showAnyMemories, ); unawaited( MemoryHomeWidgetService.instance .initMemoryHW(true), ); + setState(() {}); }, ), ), const SizedBox( height: 24, ), + memoriesCacheService.curatedMemoriesOption + ? MenuItemWidget( + captionedTextWidget: CaptionedTextWidget( + title: S.of(context).curatedMemories, + ), + menuItemColor: colorScheme.fillFaint, + singleBorderRadius: 8, + alignCaptionedTextToLeft: true, + trailingWidget: ToggleSwitchWidget( + value: () => + localSettings.isSmartMemoriesEnabled, + onChanged: () async { + unawaited(_toggleUpdateMemories()); + }, + ), + ) + : const SizedBox(), + memoriesCacheService.curatedMemoriesOption + ? const SizedBox( + height: 24, + ) + : const SizedBox(), MenuItemWidget( captionedTextWidget: CaptionedTextWidget( title: S.of(context).hideSharedItemsFromHomeGallery, @@ -156,3 +178,14 @@ class _GallerySettingsScreenState extends State { ); } } + +Future _toggleUpdateMemories() async { + await localSettings.setSmartMemories( + !localSettings.isSmartMemoriesEnabled, + ); + await memoriesCacheService.clearMemoriesCache( + fromDisk: false, + ); + await memoriesCacheService.getMemories(); + Bus.instance.fire(MemoriesChangedEvent()); +} diff --git a/mobile/lib/ui/settings/language_picker.dart b/mobile/lib/ui/settings/language_picker.dart index f4561c3725..86d9a9a674 100644 --- a/mobile/lib/ui/settings/language_picker.dart +++ b/mobile/lib/ui/settings/language_picker.dart @@ -132,9 +132,16 @@ class _ItemsWidgetState extends State { return '日本語'; case 'nl': return 'Nederlands'; + case 'no': + return 'Norsk'; case 'pl': return 'Polski'; case 'pt': + if (locale.countryCode == 'BR') { + return 'Português (Brasil)'; + } else if (locale.countryCode == 'PT') { + return 'Português (Portugal)'; + } return 'Português'; case 'ro': return 'Română'; diff --git a/mobile/lib/ui/settings/ml/machine_learning_settings_page.dart b/mobile/lib/ui/settings/ml/machine_learning_settings_page.dart index 9a95d7dfcb..5db7a028ac 100644 --- a/mobile/lib/ui/settings/ml/machine_learning_settings_page.dart +++ b/mobile/lib/ui/settings/ml/machine_learning_settings_page.dart @@ -12,6 +12,7 @@ import "package:photos/services/machine_learning/semantic_search/clip/clip_image import "package:photos/services/machine_learning/semantic_search/clip/clip_text_encoder.dart"; import 'package:photos/services/machine_learning/semantic_search/semantic_search_service.dart'; import "package:photos/services/remote_assets_service.dart"; +import "package:photos/services/wake_lock_service.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/common/loading_widget.dart"; import "package:photos/ui/common/web_page.dart"; @@ -31,7 +32,6 @@ import "package:photos/ui/settings/ml/enable_ml_consent.dart"; import "package:photos/ui/settings/ml/ml_user_dev_screen.dart"; import "package:photos/utils/ml_util.dart"; import "package:photos/utils/network_util.dart"; -import "package:photos/utils/wakelock_util.dart"; class MachineLearningSettingsPage extends StatefulWidget { const MachineLearningSettingsPage({super.key}); @@ -43,7 +43,6 @@ class MachineLearningSettingsPage extends StatefulWidget { class _MachineLearningSettingsPageState extends State { - final EnteWakeLock _wakeLock = EnteWakeLock(); Timer? _timer; int _titleTapCount = 0; Timer? _advancedOptionsTimer; @@ -51,7 +50,10 @@ class _MachineLearningSettingsPageState @override void initState() { super.initState(); - _wakeLock.enable(); + EnteWakeLockService.instance.updateWakeLock( + enable: true, + wakeLockFor: WakeLockFor.machineLearningSettingsScreen, + ); machineLearningController.forceOverrideML(turnOn: true); if (!MLIndexingIsolate.instance.areModelsDownloaded) { _timer = Timer.periodic(const Duration(seconds: 10), (timer) { @@ -68,7 +70,10 @@ class _MachineLearningSettingsPageState @override void dispose() { super.dispose(); - _wakeLock.disable(); + EnteWakeLockService.instance.updateWakeLock( + enable: false, + wakeLockFor: WakeLockFor.machineLearningSettingsScreen, + ); machineLearningController.forceOverrideML(turnOn: false); _timer?.cancel(); _advancedOptionsTimer?.cancel(); diff --git a/mobile/lib/ui/settings/pending_sync/path_info_storage_viewer.dart b/mobile/lib/ui/settings/pending_sync/path_info_storage_viewer.dart new file mode 100644 index 0000000000..d065ba78f7 --- /dev/null +++ b/mobile/lib/ui/settings/pending_sync/path_info_storage_viewer.dart @@ -0,0 +1,129 @@ +import 'dart:io'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; +import 'package:logging/logging.dart'; +import 'package:photos/theme/ente_theme.dart'; +import 'package:photos/ui/components/captioned_text_widget.dart'; +import 'package:photos/ui/components/menu_item_widget/menu_item_widget.dart'; +import 'package:photos/utils/standalone/data.dart'; +import 'package:photos/utils/standalone/directory_content.dart'; + +class PathInfoStorageItem { + final String path; + final String title; + final bool allowCacheClear; + final String match; + + PathInfoStorageItem.name( + this.path, + this.title, + this.match, { + this.allowCacheClear = false, + }); +} + +class PathInfoStorageViewer extends StatefulWidget { + final PathInfoStorageItem item; + final bool removeTopRadius; + final bool removeBottomRadius; + final bool enableDoubleTapClear; + + const PathInfoStorageViewer( + this.item, { + this.removeTopRadius = false, + this.removeBottomRadius = false, + this.enableDoubleTapClear = false, + super.key, + }); + + @override + State createState() => _PathInfoStorageViewerState(); +} + +class _PathInfoStorageViewerState extends State { + final Logger _logger = Logger((_PathInfoStorageViewerState).toString()); + + @override + void initState() { + super.initState(); + } + + void _safeRefresh() async { + if (mounted) { + setState(() => {}); + } + } + + @override + Widget build(BuildContext context) { + return FutureBuilder( + future: getDirectoryStat( + Directory(widget.item.path), + prefix: widget.item.match, + ), + builder: (context, snapshot) { + if (snapshot.hasData) { + return _buildMenuItemWidget(snapshot.data, null); + } else if (snapshot.hasError) { + _logger.severe( + "Failed to get state for ${widget.item.title}", + snapshot.error, + ); + return _buildMenuItemWidget(null, snapshot.error); + } else { + return _buildMenuItemWidget(null, null); + } + }, + ); + } + + Widget _buildMenuItemWidget(DirectoryStat? stat, Object? err) { + return MenuItemWidget( + key: UniqueKey(), + alignCaptionedTextToLeft: true, + captionedTextWidget: CaptionedTextWidget( + title: widget.item.title, + subTitle: stat != null ? '${stat.fileCount}' : null, + subTitleColor: getEnteColorScheme(context).textFaint, + ), + trailingWidget: stat != null + ? Padding( + padding: const EdgeInsets.only(left: 12.0), + child: Text( + formatBytes(stat.size), + style: getEnteTextTheme(context) + .small + .copyWith(color: getEnteColorScheme(context).textFaint), + ), + ) + : SizedBox.fromSize( + size: const Size.square(14), + child: CircularProgressIndicator( + strokeWidth: 2, + color: getEnteColorScheme(context).strokeMuted, + ), + ), + trailingIcon: err != null ? Icons.error_outline_outlined : null, + trailingIconIsMuted: err != null, + singleBorderRadius: 8, + menuItemColor: getEnteColorScheme(context).fillFaint, + isBottomBorderRadiusRemoved: widget.removeBottomRadius, + isTopBorderRadiusRemoved: widget.removeTopRadius, + showOnlyLoadingState: true, + onTap: () async { + if (kDebugMode) { + await Clipboard.setData(ClipboardData(text: widget.item.path)); + debugPrint(widget.item.path); + } + }, + onDoubleTap: () async { + if (widget.item.allowCacheClear && widget.enableDoubleTapClear) { + await deleteDirectoryContents(widget.item.path); + _safeRefresh(); + } + }, + ); + } +} diff --git a/mobile/lib/ui/settings/pending_sync/pending_sync_info_screen.dart b/mobile/lib/ui/settings/pending_sync/pending_sync_info_screen.dart new file mode 100644 index 0000000000..e00dce529b --- /dev/null +++ b/mobile/lib/ui/settings/pending_sync/pending_sync_info_screen.dart @@ -0,0 +1,167 @@ +import "package:flutter/material.dart"; +import "package:photos/core/configuration.dart"; +import "package:photos/generated/l10n.dart"; +import "package:photos/service_locator.dart"; +import "package:photos/ui/components/buttons/icon_button_widget.dart"; +import "package:photos/ui/components/menu_section_title.dart"; +import "package:photos/ui/components/title_bar_title_widget.dart"; +import "package:photos/ui/components/title_bar_widget.dart"; +import "package:photos/ui/settings/pending_sync/path_info_storage_viewer.dart"; + +// Preview Video related items -> pv +// final String tempDir = Configuration.instance.getTempDirectory(); +// final String prefix = "${tempDir}_${enteFile.uploadedFileID}_${newID("pv")}"; +// +// Recovery Key -> ente-recovery-key.txt +// Configuration.instance.getTempDirectory() + "ente-recovery-key.txt", +// +// Encrypted files (upload), decrypted files (download) -> .encrypted & .decrypted +// final String tempDir = Configuration.instance.getTempDirectory(); +// final String encryptedFilePath = "$tempDir${file.uploadedFileID}.encrypted"; +// final String decryptedFilePath = "$tempDir${file.uploadedFileID}.decrypted"; +// +// Live photo compressed version -> .elp +// final livePhotoPath = tempPath + uniqueId + "_${file.generatedID}.elp"; +// +// Explicit uploads -> _file.encrpyted & _thumb.encrypted +// final encryptedFilePath = multipartEntryExists +// ? '$tempDirectory$existingMultipartEncFileName' +// : '$tempDirectory$uploadTempFilePrefix${uniqueID}_file.encrypted'; +// final encryptedThumbnailPath = +// '$tempDirectory$uploadTempFilePrefix${uniqueID}_thumb.encrypted'; + +class PendingSyncInfoScreen extends StatefulWidget { + const PendingSyncInfoScreen({super.key}); + + @override + State createState() => _PendingSyncInfoScreenState(); +} + +class _PendingSyncInfoScreenState extends State { + final List paths = []; + late bool internalUser; + final int _refreshCounterKey = 0; + + @override + void initState() { + super.initState(); + internalUser = flagService.internalUser; + addPath(); + } + + void addPath() async { + final String tempDownload = Configuration.instance.getTempDirectory(); + paths.addAll([ + PathInfoStorageItem.name( + tempDownload, + "Encrypted Upload (File)", + "_file.encrypted", + allowCacheClear: false, + ), + PathInfoStorageItem.name( + tempDownload, + "Encrypted Upload (Thumb)", + "_thumb.encrypted", + allowCacheClear: false, + ), + PathInfoStorageItem.name( + tempDownload, + "Live photo", + ".elp", + allowCacheClear: false, + ), + PathInfoStorageItem.name( + tempDownload, + "Encrypted Data", + ".encrypted", + allowCacheClear: false, + ), + PathInfoStorageItem.name( + tempDownload, + "Decrypted Data", + ".decrypted", + allowCacheClear: false, + ), + PathInfoStorageItem.name( + tempDownload, + "Video Preview", + "pv", + allowCacheClear: false, + ), + ]); + if (mounted) { + setState(() => {}); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: CustomScrollView( + primary: false, + slivers: [ + TitleBarWidget( + flexibleSpaceTitle: const TitleBarTitleWidget(title: "App Temp"), + actionIcons: [ + IconButtonWidget( + icon: Icons.close_outlined, + iconButtonType: IconButtonType.secondary, + onTap: () { + Navigator.pop(context); + if (Navigator.canPop(context)) { + Navigator.pop(context); + } + if (Navigator.canPop(context)) { + Navigator.pop(context); + } + }, + ), + ], + ), + SliverList( + delegate: SliverChildBuilderDelegate( + (context, index) { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 16), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Column( + children: [ + MenuSectionTitle( + title: S.of(context).cachedData, + ), + ListView.builder( + shrinkWrap: true, + padding: const EdgeInsets.all(0), + physics: const ScrollPhysics(), + // to disable GridView's scrolling + itemBuilder: (context, index) { + final path = paths[index]; + return PathInfoStorageViewer( + path, + removeTopRadius: index > 0, + removeBottomRadius: index < paths.length - 1, + enableDoubleTapClear: internalUser, + key: ValueKey("$index-$_refreshCounterKey"), + ); + }, + itemCount: paths.length, + ), + const SizedBox( + height: 24, + ), + ], + ), + ], + ), + ); + }, + childCount: 1, + ), + ), + ], + ), + ); + } +} diff --git a/mobile/lib/ui/settings_page.dart b/mobile/lib/ui/settings_page.dart index 32401fd30f..870b5e71af 100644 --- a/mobile/lib/ui/settings_page.dart +++ b/mobile/lib/ui/settings_page.dart @@ -86,8 +86,10 @@ class SettingsPage extends StatelessWidget { contents.add(const SizedBox(height: 8)); if (hasLoggedIn) { + // show banner in debug mode and ente production final showStorageBonusBanner = - storageBonusService.shouldShowStorageBonus(); + storageBonusService.shouldShowStorageBonus() && + (kDebugMode || Configuration.instance.isEnteProduction()); contents.addAll([ const StorageCardWidget(), (showStorageBonusBanner) diff --git a/mobile/lib/ui/tabs/home_widget.dart b/mobile/lib/ui/tabs/home_widget.dart index 25cd5b0cbd..1c2e8ca2da 100644 --- a/mobile/lib/ui/tabs/home_widget.dart +++ b/mobile/lib/ui/tabs/home_widget.dart @@ -2,6 +2,7 @@ import 'dart:async'; import "dart:convert"; import "dart:io"; +import "package:app_links/app_links.dart"; import "package:ente_crypto/ente_crypto.dart"; import 'package:flutter/material.dart'; import 'package:flutter/scheduler.dart'; @@ -14,7 +15,6 @@ import 'package:modal_bottom_sheet/modal_bottom_sheet.dart'; import "package:move_to_background/move_to_background.dart"; import "package:package_info_plus/package_info_plus.dart"; import 'package:photos/core/configuration.dart'; -import "package:photos/core/constants.dart"; import 'package:photos/core/event_bus.dart'; import 'package:photos/ente_theme_data.dart'; import 'package:photos/events/account_configured_event.dart'; @@ -72,7 +72,6 @@ import "package:photos/utils/collection_util.dart"; import 'package:photos/utils/dialog_util.dart'; import "package:photos/utils/navigation_util.dart"; import 'package:receive_sharing_intent/receive_sharing_intent.dart'; -import 'package:uni_links/uni_links.dart'; class HomeWidget extends StatefulWidget { const HomeWidget({ @@ -255,8 +254,7 @@ class _HomeWidgetState extends State { if (Platform.isAndroid && !localSettings.hasConfiguredInAppLinkPermissions() && RemoteSyncService.instance.isFirstRemoteSyncDone() && - Configuration.instance.getHttpEndpoint() == - kDefaultProductionEndpoint) { + Configuration.instance.isEnteProduction()) { PackageInfo.fromPlatform().then((packageInfo) { final packageName = packageInfo.packageName; if (packageName == 'io.ente.photos.independent' || @@ -540,8 +538,9 @@ class _HomeWidgetState extends State { } Future _initDeepLinkSubscriptionForPublicAlbums() async { + final appLinks = AppLinks(); try { - final initialUri = await getInitialUri(); + final initialUri = await appLinks.getInitialLink(); if (initialUri != null) { if (initialUri.toString().contains("albums.ente.io")) { await _handlePublicAlbumLink(initialUri); @@ -559,7 +558,7 @@ class _HomeWidgetState extends State { _logger.severe("Error while getting initial public album deep link: $e"); } - _publicAlbumLinkSubscription = uriLinkStream.listen( + _publicAlbumLinkSubscription = appLinks.uriLinkStream.listen( (Uri? uri) { if (uri != null) { if (uri.toString().contains("albums.ente.io")) { @@ -776,12 +775,13 @@ class _HomeWidgetState extends State { Future _initDeepLinks() async { // Platform messages may fail, so we use a try/catch PlatformException. + final appLinks = AppLinks(); try { - final String? initialLink = await getInitialLink(); + final initialLink = await appLinks.getInitialLink(); // Parse the link and warn the user, if it is not correct, // but keep in mind it could be `null`. if (initialLink != null) { - _logger.info("Initial link received: " + initialLink); + _logger.info("Initial link received: " + initialLink.toString()); _getCredentials(context, initialLink); return true; } else { @@ -794,9 +794,9 @@ class _HomeWidgetState extends State { } // Attach a listener to the stream - linkStream.listen( - (String? link) { - _logger.info("Link received: " + link!); + appLinks.uriLinkStream.listen( + (link) { + _logger.info("Link received: " + link.toString()); _getCredentials(context, link); }, onError: (err) { @@ -806,11 +806,11 @@ class _HomeWidgetState extends State { return false; } - void _getCredentials(BuildContext context, String? link) { + void _getCredentials(BuildContext context, Uri? link) { if (Configuration.instance.hasConfiguredAccount()) { return; } - final ott = Uri.parse(link!).queryParameters["ott"]!; + final ott = link!.queryParameters["ott"]!; UserService.instance.verifyEmail(context, ott); } diff --git a/mobile/lib/ui/tools/debug/path_storage_viewer.dart b/mobile/lib/ui/tools/debug/path_storage_viewer.dart index 1859234175..1613b1afa7 100644 --- a/mobile/lib/ui/tools/debug/path_storage_viewer.dart +++ b/mobile/lib/ui/tools/debug/path_storage_viewer.dart @@ -4,9 +4,11 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:logging/logging.dart'; +import "package:photos/generated/l10n.dart"; import 'package:photos/theme/ente_theme.dart'; import 'package:photos/ui/components/captioned_text_widget.dart'; import 'package:photos/ui/components/menu_item_widget/menu_item_widget.dart'; +import "package:photos/ui/settings/pending_sync/pending_sync_info_screen.dart"; import 'package:photos/utils/standalone/data.dart'; import 'package:photos/utils/standalone/directory_content.dart'; @@ -119,6 +121,15 @@ class _PathStorageViewerState extends State { _safeRefresh(); } }, + onLongPress: () async { + if (widget.item.title == S.of(context).pendingSync) { + await Navigator.of(context).push( + MaterialPageRoute( + builder: (context) => const PendingSyncInfoScreen(), + ), + ); + } + }, ); } } diff --git a/mobile/lib/ui/tools/deduplicate_page.dart b/mobile/lib/ui/tools/deduplicate_page.dart index 579b458e0d..91fb3d6ed6 100644 --- a/mobile/lib/ui/tools/deduplicate_page.dart +++ b/mobile/lib/ui/tools/deduplicate_page.dart @@ -478,8 +478,9 @@ class _DeduplicatePageState extends State { borderRadius: BorderRadius.circular(4), child: ThumbnailWidget( file, - diskLoadDeferDuration: thumbnailDiskLoadDeferDuration, - serverLoadDeferDuration: thumbnailServerLoadDeferDuration, + diskLoadDeferDuration: galleryThumbnailDiskLoadDeferDuration, + serverLoadDeferDuration: + galleryThumbnailServerLoadDeferDuration, shouldShowLivePhotoOverlay: true, key: Key("deduplicate_" + file.tag), ), diff --git a/mobile/lib/ui/tools/editor/export_video_service.dart b/mobile/lib/ui/tools/editor/export_video_service.dart index 38d98514bd..69ff7e2631 100644 --- a/mobile/lib/ui/tools/editor/export_video_service.dart +++ b/mobile/lib/ui/tools/editor/export_video_service.dart @@ -1,11 +1,11 @@ import 'dart:developer'; import 'dart:io'; -import 'package:ffmpeg_kit_flutter_full_gpl/ffmpeg_kit.dart'; -import 'package:ffmpeg_kit_flutter_full_gpl/ffmpeg_kit_config.dart'; -import 'package:ffmpeg_kit_flutter_full_gpl/ffmpeg_session.dart'; -import 'package:ffmpeg_kit_flutter_full_gpl/return_code.dart'; -import 'package:ffmpeg_kit_flutter_full_gpl/statistics.dart'; +import 'package:ffmpeg_kit_flutter/ffmpeg_kit.dart'; +import 'package:ffmpeg_kit_flutter/ffmpeg_kit_config.dart'; +import 'package:ffmpeg_kit_flutter/ffmpeg_session.dart'; +import 'package:ffmpeg_kit_flutter/return_code.dart'; +import 'package:ffmpeg_kit_flutter/statistics.dart'; import 'package:video_editor/video_editor.dart'; class ExportService { diff --git a/mobile/lib/ui/tools/editor/video_crop_page.dart b/mobile/lib/ui/tools/editor/video_crop_page.dart index 1ef82bd96c..6de885928f 100644 --- a/mobile/lib/ui/tools/editor/video_crop_page.dart +++ b/mobile/lib/ui/tools/editor/video_crop_page.dart @@ -9,7 +9,12 @@ import "package:photos/ui/tools/editor/video_editor/video_editor_player_control. import 'package:video_editor/video_editor.dart'; class VideoCropPage extends StatefulWidget { - const VideoCropPage({super.key, required this.controller}); + final int quarterTurnsForRotationCorrection; + const VideoCropPage({ + super.key, + required this.controller, + required this.quarterTurnsForRotationCorrection, + }); final VideoEditorController controller; @@ -31,10 +36,13 @@ class _VideoCropPageState extends State { Expanded( child: Hero( tag: "video-editor-preview", - child: CropGridViewer.edit( - controller: widget.controller, - rotateCropArea: false, - margin: const EdgeInsets.symmetric(horizontal: 20), + child: RotatedBox( + quarterTurns: widget.quarterTurnsForRotationCorrection, + child: CropGridViewer.edit( + controller: widget.controller, + rotateCropArea: false, + margin: const EdgeInsets.symmetric(horizontal: 20), + ), ), ), ), diff --git a/mobile/lib/ui/tools/editor/video_editor_page.dart b/mobile/lib/ui/tools/editor/video_editor_page.dart index 121f2aea35..679cea3c23 100644 --- a/mobile/lib/ui/tools/editor/video_editor_page.dart +++ b/mobile/lib/ui/tools/editor/video_editor_page.dart @@ -1,3 +1,4 @@ +import "dart:async"; import 'dart:io'; import "dart:math"; @@ -13,6 +14,7 @@ import "package:photos/generated/l10n.dart"; import "package:photos/models/file/file.dart"; import "package:photos/models/location/location.dart"; import "package:photos/services/sync/sync_service.dart"; +import "package:photos/ui/common/linear_progress_dialog.dart"; import "package:photos/ui/notification/toast.dart"; import "package:photos/ui/tools/editor/export_video_service.dart"; import 'package:photos/ui/tools/editor/video_crop_page.dart'; @@ -23,7 +25,7 @@ import "package:photos/ui/tools/editor/video_editor/video_editor_player_control. import "package:photos/ui/tools/editor/video_rotate_page.dart"; import "package:photos/ui/tools/editor/video_trim_page.dart"; import "package:photos/ui/viewer/file/detail_page.dart"; -import "package:photos/utils/dialog_util.dart"; +import "package:photos/utils/exif_util.dart"; import "package:photos/utils/navigation_util.dart"; import "package:video_editor/video_editor.dart"; @@ -44,14 +46,20 @@ class VideoEditorPage extends StatefulWidget { } class _VideoEditorPageState extends State { - final _exportingProgress = ValueNotifier(0.0); final _isExporting = ValueNotifier(false); final _logger = Logger("VideoEditor"); + /// Some videos have a non-zero 'rotation' property in exif which causes the + /// video to appear rotated in the video editor preview on Andoird. + /// This variable is used as a workaround to rotate the video back to its + /// expected orientation in the viewer. + int? _quarterTurnsForRotationCorrection; + VideoEditorController? _controller; @override void initState() { + _logger.info("Initializing video editor page"); super.initState(); Future.microtask(() { @@ -84,11 +92,12 @@ class _VideoEditorPageState extends State { test: (e) => e is VideoMinDurationError, ); }); + + _doRotationCorrectionIfAndroid(); } @override void dispose() async { - _exportingProgress.dispose(); _isExporting.dispose(); _controller?.dispose().ignore(); ExportService.dispose().ignore(); @@ -97,6 +106,7 @@ class _VideoEditorPageState extends State { @override Widget build(BuildContext context) { + _logger.info("Building video editor page"); return PopScope( canPop: false, onPopInvokedWithResult: (didPop, _) { @@ -113,7 +123,9 @@ class _VideoEditorPageState extends State { elevation: 0, toolbarHeight: 0, ), - body: _controller != null && _controller!.initialized + body: _controller != null && + _controller!.initialized && + _quarterTurnsForRotationCorrection != null ? SafeArea( child: Stack( children: [ @@ -125,8 +137,12 @@ class _VideoEditorPageState extends State { Expanded( child: Hero( tag: "video-editor-preview", - child: CropGridViewer.preview( - controller: _controller!, + child: RotatedBox( + quarterTurns: + _quarterTurnsForRotationCorrection!, + child: CropGridViewer.preview( + controller: _controller!, + ), ), ), ), @@ -144,6 +160,8 @@ class _VideoEditorPageState extends State { MaterialPageRoute( builder: (context) => VideoTrimPage( controller: _controller!, + quarterTurnsForRotationCorrection: + _quarterTurnsForRotationCorrection!, ), ), ), @@ -158,6 +176,8 @@ class _VideoEditorPageState extends State { MaterialPageRoute( builder: (context) => VideoCropPage( controller: _controller!, + quarterTurnsForRotationCorrection: + _quarterTurnsForRotationCorrection!, ), ), ), @@ -172,6 +192,8 @@ class _VideoEditorPageState extends State { MaterialPageRoute( builder: (context) => VideoRotatePage( controller: _controller!, + quarterTurnsForRotationCorrection: + _quarterTurnsForRotationCorrection!, ), ), ), @@ -202,10 +224,23 @@ class _VideoEditorPageState extends State { } void exportVideo() async { - _exportingProgress.value = 0; _isExporting.value = true; - final dialog = createProgressDialog(context, S.of(context).savingEdits); - await dialog.show(); + + final dialogKey = GlobalKey(); + final dialog = LinearProgressDialog( + S.of(context).savingEdits, + key: dialogKey, + ); + + unawaited( + showDialog( + useRootNavigator: false, + context: context, + builder: (context) { + return dialog; + }, + ), + ); final config = VideoFFmpegVideoEditorConfig( _controller!, @@ -223,8 +258,10 @@ class _VideoEditorPageState extends State { await ExportService.runFFmpegCommand( await config.getExecuteConfig(), onProgress: (stats) { - _exportingProgress.value = - config.getFFmpegProgress(stats.getTime().toInt()); + if (dialogKey.currentState != null) { + dialogKey.currentState! + .setProgress(config.getFFmpegProgress(stats.getTime().toInt())); + } }, onError: (e, s) => _logger.severe("Error exporting video", e, s), onCompleted: (result) async { @@ -280,7 +317,7 @@ class _VideoEditorPageState extends State { files.add(newFile); selectionIndex = files.length - 1; } - await dialog.hide(); + Navigator.of(dialogKey.currentContext!).pop('dialog'); replacePage( context, @@ -292,14 +329,29 @@ class _VideoEditorPageState extends State { ), ); } catch (_) { - await dialog.hide(); + Navigator.of(dialogKey.currentContext!).pop('dialog'); } }, ); } catch (_) { - await dialog.hide(); + Navigator.of(dialogKey.currentContext!).pop('dialog'); } finally { await PhotoManager.startChangeNotify(); } } + + void _doRotationCorrectionIfAndroid() { + if (Platform.isAndroid) { + getVideoPropsAsync(widget.ioFile).then((props) async { + if (props?.rotation != null) { + _quarterTurnsForRotationCorrection = -(props!.rotation! / 90).round(); + } else { + _quarterTurnsForRotationCorrection = 0; + } + setState(() {}); + }); + } else { + _quarterTurnsForRotationCorrection = 0; + } + } } diff --git a/mobile/lib/ui/tools/editor/video_rotate_page.dart b/mobile/lib/ui/tools/editor/video_rotate_page.dart index 46d30496d3..c0229861f5 100644 --- a/mobile/lib/ui/tools/editor/video_rotate_page.dart +++ b/mobile/lib/ui/tools/editor/video_rotate_page.dart @@ -8,7 +8,12 @@ import "package:photos/ui/tools/editor/video_editor/video_editor_player_control. import 'package:video_editor/video_editor.dart'; class VideoRotatePage extends StatelessWidget { - const VideoRotatePage({super.key, required this.controller}); + final int quarterTurnsForRotationCorrection; + const VideoRotatePage({ + super.key, + required this.controller, + required this.quarterTurnsForRotationCorrection, + }); final VideoEditorController controller; @@ -26,8 +31,11 @@ class VideoRotatePage extends StatelessWidget { Expanded( child: Hero( tag: "video-editor-preview", - child: CropGridViewer.preview( - controller: controller, + child: RotatedBox( + quarterTurns: quarterTurnsForRotationCorrection, + child: CropGridViewer.preview( + controller: controller, + ), ), ), ), diff --git a/mobile/lib/ui/tools/editor/video_trim_page.dart b/mobile/lib/ui/tools/editor/video_trim_page.dart index fd0c437de9..45474e5e0b 100644 --- a/mobile/lib/ui/tools/editor/video_trim_page.dart +++ b/mobile/lib/ui/tools/editor/video_trim_page.dart @@ -6,7 +6,12 @@ import "package:photos/ui/tools/editor/video_editor/video_editor_player_control. import 'package:video_editor/video_editor.dart'; class VideoTrimPage extends StatefulWidget { - const VideoTrimPage({super.key, required this.controller}); + final int quarterTurnsForRotationCorrection; + const VideoTrimPage({ + super.key, + required this.controller, + required this.quarterTurnsForRotationCorrection, + }); final VideoEditorController controller; @@ -30,17 +35,20 @@ class _VideoTrimPageState extends State { body: SafeArea( child: Column( children: [ + VideoEditorPlayerControl( + controller: widget.controller, + ), Expanded( child: Hero( tag: "video-editor-preview", - child: CropGridViewer.preview( - controller: widget.controller, + child: RotatedBox( + quarterTurns: widget.quarterTurnsForRotationCorrection, + child: CropGridViewer.preview( + controller: widget.controller, + ), ), ), ), - VideoEditorPlayerControl( - controller: widget.controller, - ), ..._trimSlider(), const SizedBox(height: 40), VideoEditorNavigationOptions( diff --git a/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart b/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart index 4100abbef0..3a3bcddcb5 100644 --- a/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart +++ b/mobile/lib/ui/viewer/actions/file_selection_actions_widget.dart @@ -133,6 +133,8 @@ class _FileSelectionActionsWidgetState final bool anyOwnedFiles = split.pendingUploads.isNotEmpty || split.ownedByCurrentUser.isNotEmpty; + final bool allOwnedFiles = + ownedAndPendingUploadFilesCount > 0 && split.ownedByOtherUsers.isEmpty; final bool anyUploadedFiles = split.ownedByCurrentUser.isNotEmpty; final showCollageOption = CollageCreatorPage.isValidCount( @@ -175,7 +177,7 @@ class _FileSelectionActionsWidgetState SelectionActionButton( icon: Icons.remove_circle_outline, labelText: S.of(context).notPersonLabel(widget.person!.data.name), - onTap: anyUploadedFiles ? _onNotpersonClicked : null, + onTap: _onNotpersonClicked, ), ); if (ownedFilesCount == 1) { @@ -194,7 +196,7 @@ class _FileSelectionActionsWidgetState SelectionActionButton( labelText: S.of(context).notThisPerson, icon: Icons.remove_circle_outline, - onTap: anyUploadedFiles ? _onRemoveFromClusterClicked : null, + onTap: _onRemoveFromClusterClicked, ), ); } @@ -258,7 +260,7 @@ class _FileSelectionActionsWidgetState icon: Icons.delete_outline, labelText: S.of(context).delete, onTap: anyOwnedFiles ? _onDeleteClick : null, - shouldShow: ownedAndPendingUploadFilesCount > 0, + shouldShow: allOwnedFiles, ), ); } diff --git a/mobile/lib/ui/viewer/file/preview_status_widget.dart b/mobile/lib/ui/viewer/file/preview_status_widget.dart index 375790a6b4..1e1d2e2c98 100644 --- a/mobile/lib/ui/viewer/file/preview_status_widget.dart +++ b/mobile/lib/ui/viewer/file/preview_status_widget.dart @@ -10,7 +10,6 @@ import "package:photos/models/preview/preview_item_status.dart"; import "package:photos/services/filedata/filedata_service.dart"; import "package:photos/services/preview_video_store.dart"; import "package:photos/theme/colors.dart"; -import "package:photos/ui/settings/backup/backup_status_screen.dart"; class PreviewStatusWidget extends StatefulWidget { const PreviewStatusWidget({ @@ -110,14 +109,7 @@ class _PreviewStatusWidgetState extends State { onTap: preview == null || preview!.status == PreviewItemStatus.uploaded ? widget.onStreamChange - : () { - Navigator.pushReplacement( - context, - MaterialPageRoute( - builder: (_) => const BackupStatusScreen(), - ), - ); - }, + : null, child: Container( padding: const EdgeInsets.symmetric( horizontal: 8, diff --git a/mobile/lib/ui/viewer/file/thumbnail_widget.dart b/mobile/lib/ui/viewer/file/thumbnail_widget.dart index 4ace74da94..f4d3e1cc3c 100644 --- a/mobile/lib/ui/viewer/file/thumbnail_widget.dart +++ b/mobile/lib/ui/viewer/file/thumbnail_widget.dart @@ -1,4 +1,6 @@ import "dart:async"; +import "dart:math"; +import "dart:typed_data"; import 'package:flutter/material.dart'; import 'package:logging/logging.dart'; @@ -21,6 +23,7 @@ import 'package:photos/ui/viewer/file/file_icons_widget.dart'; import "package:photos/ui/viewer/gallery/component/group/type.dart"; import "package:photos/ui/viewer/gallery/state/gallery_context_state.dart"; import 'package:photos/utils/file_util.dart'; +import "package:photos/utils/standalone/task_queue.dart"; import 'package:photos/utils/thumbnail_util.dart'; class ThumbnailWidget extends StatefulWidget { @@ -78,6 +81,8 @@ class _ThumbnailWidgetState extends State { ImageProvider? _imageProvider; int? optimizedImageHeight; int? optimizedImageWidth; + String? _localThumbnailQueueTaskId; + static const _maxLocalThumbnailRetries = 8; @override void initState() { @@ -89,6 +94,13 @@ class _ThumbnailWidgetState extends State { void dispose() { super.dispose(); Future.delayed(const Duration(milliseconds: 10), () { + if (!mounted && _localThumbnailQueueTaskId != null) { + if (widget.thumbnailSize == thumbnailLargeSize) { + largeLocalThumbnailQueue.removeTask(_localThumbnailQueueTaskId!); + } else if (widget.thumbnailSize == thumbnailSmallSize) { + smallLocalThumbnailQueue.removeTask(_localThumbnailQueueTaskId!); + } + } // Cancel request only if the widget has been unmounted if (!mounted && widget.file.isRemoteFile && !_hasLoadedThumbnail) { removePendingGetThumbnailRequestIfAny(widget.file); @@ -104,6 +116,18 @@ class _ThumbnailWidgetState extends State { } } + static final smallLocalThumbnailQueue = TaskQueue( + maxConcurrentTasks: 15, + taskTimeout: const Duration(minutes: 1), + maxQueueSize: 200, + ); + + static final largeLocalThumbnailQueue = TaskQueue( + maxConcurrentTasks: 5, + taskTimeout: const Duration(minutes: 1), + maxQueueSize: 200, + ); + ///Assigned dimension will be the size of a grid item. The size will be ///assigned to the side which is smaller in dimension. void assignOptimizedImageDimensions() { @@ -244,10 +268,7 @@ class _ThumbnailWidgetState extends State { } Future _getThumbnailFromDisk() async { - return getThumbnailFromLocal( - widget.file, - size: widget.thumbnailSize, - ).then((thumbData) async { + return _loadWithRetry().then((thumbData) async { if (thumbData == null) { if (widget.file.isUploaded) { _logger.fine("Removing localID reference for " + widget.file.tag); @@ -284,11 +305,75 @@ class _ThumbnailWidgetState extends State { thumbnailSmallSize, ); }).catchError((e) { - _logger.warning("Could not load image: ", e); + _logger.warning("Could not load thumbnail from disk: ", e); _errorLoadingLocalThumbnail = true; }); } + Future _loadWithRetry() async { + int retryAttempts = 0; + while (retryAttempts <= _maxLocalThumbnailRetries) { + try { + return await _getLocalThumbnailUsingHeapPriorityQueue(); + } catch (e) { + // only retry for specific exceptions + if (e is! TaskQueueTimeoutException && + e is! TaskQueueOverflowException && + e is! TaskQueueCancelledException) { + rethrow; + } + //Do not retry if the widget is not mounted + if (!mounted) { + return null; + } + + retryAttempts++; + final backoff = Duration( + milliseconds: 100 * pow(2, retryAttempts).toInt(), + ); + if (retryAttempts <= _maxLocalThumbnailRetries) { + _logger.warning( + "Error getting local thumbnail for ${widget.file.displayName}, retrying (attempt $retryAttempts) in ${backoff.inMilliseconds} ms", + e, + ); + await Future.delayed(backoff); // Exponential backoff + } else { + rethrow; + } + } + } + + return null; + } + + Future _getLocalThumbnailUsingHeapPriorityQueue() async { + final completer = Completer(); + + late TaskQueue relevantTaskQueue; + if (widget.thumbnailSize == thumbnailLargeSize) { + relevantTaskQueue = largeLocalThumbnailQueue; + _localThumbnailQueueTaskId = [widget.file.localID!, "-large"].join(); + } else if (widget.thumbnailSize == thumbnailSmallSize) { + relevantTaskQueue = smallLocalThumbnailQueue; + _localThumbnailQueueTaskId = [widget.file.localID!, "-small"].join(); + } else { + assert(false, "Invalid thumbnail size ${widget.thumbnailSize}"); + _logger.severe( + "Invalid thumbnail size ${widget.thumbnailSize} for file ${widget.file.displayName}", + ); + } + + await relevantTaskQueue.addTask(_localThumbnailQueueTaskId!, () async { + final thumbnailBytes = await getThumbnailFromLocal( + widget.file, + size: widget.thumbnailSize, + ); + completer.complete(thumbnailBytes); + }); + + return completer.future; + } + void _loadNetworkImage() { if (!_hasLoadedThumbnail && !_errorLoadingRemoteThumbnail && diff --git a/mobile/lib/ui/viewer/file/video_widget_media_kit_new.dart b/mobile/lib/ui/viewer/file/video_widget_media_kit_new.dart index b0919260a4..97fb663577 100644 --- a/mobile/lib/ui/viewer/file/video_widget_media_kit_new.dart +++ b/mobile/lib/ui/viewer/file/video_widget_media_kit_new.dart @@ -16,6 +16,7 @@ import "package:photos/models/file/extensions/file_props.dart"; import "package:photos/models/file/file.dart"; import "package:photos/service_locator.dart"; import "package:photos/services/files_service.dart"; +import "package:photos/services/wake_lock_service.dart"; import "package:photos/theme/colors.dart"; import "package:photos/ui/actions/file/file_actions.dart"; import "package:photos/ui/common/loading_widget.dart"; @@ -161,6 +162,12 @@ class _VideoWidgetMediaKitNewState extends State WidgetsBinding.instance.removeObserver(this); player.dispose(); _captionUpdatedSubscription.cancel(); + if (EnteWakeLockService.instance.shouldKeepAppAwakeAcrossSessions) { + EnteWakeLockService.instance.updateWakeLock( + enable: true, + wakeLockFor: WakeLockFor.handlingMediaKitEdgeCase, + ); + } super.dispose(); } diff --git a/mobile/lib/ui/viewer/file/video_widget_native.dart b/mobile/lib/ui/viewer/file/video_widget_native.dart index a6256d965a..f4b63c2ed4 100644 --- a/mobile/lib/ui/viewer/file/video_widget_native.dart +++ b/mobile/lib/ui/viewer/file/video_widget_native.dart @@ -20,6 +20,7 @@ import "package:photos/models/file/file.dart"; import "package:photos/models/preview/playlist_data.dart"; import "package:photos/service_locator.dart"; import "package:photos/services/files_service.dart"; +import "package:photos/services/wake_lock_service.dart"; import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/actions/file/file_actions.dart"; @@ -126,6 +127,9 @@ class _VideoWidgetNativeState extends State } } }); + + EnteWakeLockService.instance + .updateWakeLock(enable: true, wakeLockFor: WakeLockFor.videoPlayback); } Future setVideoSource() async { @@ -220,6 +224,8 @@ class _VideoWidgetNativeState extends State _debouncer.cancelDebounceTimer(); _elTooltipController.dispose(); _captionUpdatedSubscription.cancel(); + EnteWakeLockService.instance + .updateWakeLock(enable: false, wakeLockFor: WakeLockFor.videoPlayback); super.dispose(); } @@ -478,6 +484,8 @@ class _VideoWidgetNativeState extends State widget.playbackCallback!(false); } } + + _handleWakeLockOnPlaybackChanges(); } void _onError(String errorMessage) { @@ -544,6 +552,21 @@ class _VideoWidgetNativeState extends State } } + void _handleWakeLockOnPlaybackChanges() { + final playbackStatus = _controller?.playbackStatus; + if (playbackStatus == PlaybackStatus.playing) { + EnteWakeLockService.instance.updateWakeLock( + enable: true, + wakeLockFor: WakeLockFor.videoPlayback, + ); + } else { + EnteWakeLockService.instance.updateWakeLock( + enable: false, + wakeLockFor: WakeLockFor.videoPlayback, + ); + } + } + Widget _getLoadingWidget() { return Stack( key: const ValueKey("video_loading"), diff --git a/mobile/lib/ui/viewer/file_details/albums_item_widget.dart b/mobile/lib/ui/viewer/file_details/albums_item_widget.dart index eae8c5d3dd..1bf820fadb 100644 --- a/mobile/lib/ui/viewer/file_details/albums_item_widget.dart +++ b/mobile/lib/ui/viewer/file_details/albums_item_widget.dart @@ -89,6 +89,7 @@ class AlbumsItemWidget extends StatelessWidget { if (c.isHidden()) { return; } + // stop playing video when navigating to collection page Bus.instance.fire(PauseVideoEvent()); routeToPage( context, diff --git a/mobile/lib/ui/viewer/gallery/component/gallery_file_widget.dart b/mobile/lib/ui/viewer/gallery/component/gallery_file_widget.dart index f7e37f8c54..178744c7d9 100644 --- a/mobile/lib/ui/viewer/gallery/component/gallery_file_widget.dart +++ b/mobile/lib/ui/viewer/gallery/component/gallery_file_widget.dart @@ -55,8 +55,8 @@ class GalleryFileWidget extends StatelessWidget { final String heroTag = tag + file.tag; final Widget thumbnailWidget = ThumbnailWidget( file, - diskLoadDeferDuration: thumbnailDiskLoadDeferDuration, - serverLoadDeferDuration: thumbnailServerLoadDeferDuration, + diskLoadDeferDuration: galleryThumbnailDiskLoadDeferDuration, + serverLoadDeferDuration: galleryThumbnailServerLoadDeferDuration, shouldShowLivePhotoOverlay: true, key: Key(heroTag), thumbnailSize: photoGridSize < photoGridSizeDefault diff --git a/mobile/lib/ui/viewer/gallery/gallery_app_bar_widget.dart b/mobile/lib/ui/viewer/gallery/gallery_app_bar_widget.dart index d29def8033..28b84194cb 100644 --- a/mobile/lib/ui/viewer/gallery/gallery_app_bar_widget.dart +++ b/mobile/lib/ui/viewer/gallery/gallery_app_bar_widget.dart @@ -760,8 +760,10 @@ class _GalleryAppBarWidgetState extends State { Future _trashCollection() async { // Fetch the count by-passing the cache to avoid any stale data - final int count = - await FilesDB.instance.collectionFileCount(widget.collection!.id); + final int count = await CollectionsService.instance.getFileCount( + widget.collection!, + useCache: false, + ); final bool isEmptyCollection = count == 0; if (isEmptyCollection) { final dialog = createProgressDialog( diff --git a/mobile/lib/ui/viewer/search/result/person_face_widget.dart b/mobile/lib/ui/viewer/search/result/person_face_widget.dart index 5cf99a7fb5..62c18ec618 100644 --- a/mobile/lib/ui/viewer/search/result/person_face_widget.dart +++ b/mobile/lib/ui/viewer/search/result/person_face_widget.dart @@ -60,6 +60,15 @@ class _PersonFaceWidgetState extends State { : _getFaceCrop(); } + @override + void dispose() { + super.dispose(); + checkStopTryingToGenerateFaceThumbnails( + widget.file, + useFullFile: widget.useFullFile, + ); + } + @override Widget build(BuildContext context) { return FutureBuilder( diff --git a/mobile/lib/utils/delete_file_util.dart b/mobile/lib/utils/delete_file_util.dart index ed1eb28d6c..11a425afa0 100644 --- a/mobile/lib/utils/delete_file_util.dart +++ b/mobile/lib/utils/delete_file_util.dart @@ -201,6 +201,7 @@ Future deleteFilesOnDeviceOnly( final List localAssetIDs = []; final List localSharedMediaIDs = []; final List alreadyDeletedIDs = []; // to ignore already deleted files + final List localOnlyIDs = []; bool hasLocalOnlyFiles = false; for (final file in files) { if (file.localID != null) { @@ -215,6 +216,7 @@ Future deleteFilesOnDeviceOnly( } if (file.uploadedFileID == null) { hasLocalOnlyFiles = true; + localOnlyIDs.add(file.localID); } } if (hasLocalOnlyFiles && Platform.isAndroid) { @@ -237,8 +239,12 @@ Future deleteFilesOnDeviceOnly( if (deletedIDs.contains(file.localID) || alreadyDeletedIDs.contains(file.localID)) { deletedFiles.add(file); - file.localID = null; - await FilesDB.instance.update(file); + if (hasLocalOnlyFiles && localOnlyIDs.contains(file.localID)) { + await FilesDB.instance.deleteLocalFile(file); + } else { + file.localID = null; + await FilesDB.instance.update(file); + } } } if (deletedFiles.isNotEmpty || alreadyDeletedIDs.isNotEmpty) { diff --git a/mobile/lib/utils/email_util.dart b/mobile/lib/utils/email_util.dart index c92659e380..a17abb58fe 100644 --- a/mobile/lib/utils/email_util.dart +++ b/mobile/lib/utils/email_util.dart @@ -136,7 +136,11 @@ Future triggerSendLogs( attachmentPaths: [zipFilePath], isHTML: false, ); - await FlutterEmailSender.send(email); + try { + await FlutterEmailSender.send(email); + } catch (e, s) { + _logger.severe('email sender failed', e, s); + } } Future getZippedLogsFile(BuildContext? context) async { diff --git a/mobile/lib/utils/exif_util.dart b/mobile/lib/utils/exif_util.dart index 4ceb76d001..924a725710 100644 --- a/mobile/lib/utils/exif_util.dart +++ b/mobile/lib/utils/exif_util.dart @@ -4,9 +4,9 @@ import "dart:io"; import "package:computer/computer.dart"; import 'package:exif/exif.dart'; -import "package:ffmpeg_kit_flutter_full_gpl/ffprobe_kit.dart"; -import "package:ffmpeg_kit_flutter_full_gpl/media_information.dart"; -import "package:ffmpeg_kit_flutter_full_gpl/media_information_session.dart"; +import "package:ffmpeg_kit_flutter/ffprobe_kit.dart"; +import "package:ffmpeg_kit_flutter/media_information.dart"; +import "package:ffmpeg_kit_flutter/media_information_session.dart"; import "package:flutter/foundation.dart"; import 'package:intl/intl.dart'; import 'package:logging/logging.dart'; diff --git a/mobile/lib/utils/face/face_box_crop.dart b/mobile/lib/utils/face/face_box_crop.dart index bd33026cdc..ced0c84d08 100644 --- a/mobile/lib/utils/face/face_box_crop.dart +++ b/mobile/lib/utils/face/face_box_crop.dart @@ -1,4 +1,6 @@ +import "dart:async"; import "dart:io" show File; +import "dart:math" show pow; import "package:flutter/foundation.dart"; import "package:logging/logging.dart"; @@ -12,28 +14,24 @@ import "package:photos/models/ml/face/box.dart"; import "package:photos/models/ml/face/face.dart"; import "package:photos/services/machine_learning/face_thumbnail_generator.dart"; import "package:photos/utils/file_util.dart"; +import "package:photos/utils/standalone/task_queue.dart"; import "package:photos/utils/thumbnail_util.dart"; -import "package:pool/pool.dart"; - -void resetPool({required bool fullFile}) { - if (fullFile) { - _poolFullFileFaceGenerations = - Pool(20, timeout: const Duration(seconds: 15)); - } else { - _poolThumbnailFaceGenerations = - Pool(100, timeout: const Duration(seconds: 15)); - } -} final _logger = Logger("FaceCropUtils"); const int _retryLimit = 3; final LRUMap _faceCropCache = LRUMap(1000); final LRUMap _faceCropThumbnailCache = LRUMap(1000); -Pool _poolFullFileFaceGenerations = - Pool(20, timeout: const Duration(seconds: 15)); -Pool _poolThumbnailFaceGenerations = - Pool(100, timeout: const Duration(seconds: 15)); +TaskQueue _queueFullFileFaceGenerations = TaskQueue( + maxConcurrentTasks: 5, + taskTimeout: const Duration(minutes: 1), + maxQueueSize: 100, +); +TaskQueue _queueThumbnailFaceGenerations = TaskQueue( + maxConcurrentTasks: 5, + taskTimeout: const Duration(minutes: 1), + maxQueueSize: 100, +); Future checkGetCachedCropForFaceID(String faceID) async { final Uint8List? cachedCover = _faceCropCache.get(faceID); @@ -91,19 +89,10 @@ Future?> getCachedFaceCrops( } } - late final Pool relevantResourcePool; - if (useFullFile) { - relevantResourcePool = _poolFullFileFaceGenerations; - } else { - relevantResourcePool = _poolThumbnailFaceGenerations; - } - - final result = await relevantResourcePool.withResource( - () async => await _getFaceCrops( - enteFile, - facesWithoutCrops, - useFullFile: useFullFile, - ), + final result = await _getFaceCropsUsingHeapPriorityQueue( + enteFile, + facesWithoutCrops, + useFullFile: useFullFile, ); if (result == null) { return (faceIdToCrop.isEmpty) ? null : faceIdToCrop; @@ -123,18 +112,34 @@ Future?> getCachedFaceCrops( } return faceIdToCrop.isEmpty ? null : faceIdToCrop; } catch (e, s) { - _logger.severe( - "Error getting face crops for faceIDs: ${faces.map((face) => face.faceID).toList()}", - e, - s, - ); - resetPool(fullFile: useFullFile); - if (fetchAttempt <= _retryLimit) { - return getCachedFaceCrops( - enteFile, - faces, - fetchAttempt: fetchAttempt + 1, - useFullFile: useFullFile, + if (e is! TaskQueueTimeoutException && + e is! TaskQueueOverflowException && + e is! TaskQueueCancelledException) { + if (fetchAttempt <= _retryLimit) { + final backoff = Duration( + milliseconds: 100 * pow(2, fetchAttempt + 1).toInt(), + ); + await Future.delayed(backoff); + _logger.warning( + "Error getting face crops for faceIDs: ${faces.map((face) => face.faceID).toList()}, retrying (attempt ${fetchAttempt + 1}) in ${backoff.inMilliseconds} ms", + e, + s, + ); + return getCachedFaceCrops( + enteFile, + faces, + fetchAttempt: fetchAttempt + 1, + useFullFile: useFullFile, + ); + } + _logger.severe( + "Error getting face crops for faceIDs: ${faces.map((face) => face.faceID).toList()}", + e, + s, + ); + } else { + _logger.info( + "Stopped getting face crops for faceIDs: ${faces.map((face) => face.faceID).toList()} due to $e", ); } return null; @@ -185,6 +190,48 @@ Future precomputeClusterFaceCrop( } } +void checkStopTryingToGenerateFaceThumbnails( + EnteFile file, { + bool useFullFile = true, +}) { + final taskId = + [file.uploadedFileID!, useFullFile ? "-full" : "-thumbnail"].join(); + if (useFullFile) { + _queueFullFileFaceGenerations.removeTask(taskId); + } else { + _queueThumbnailFaceGenerations.removeTask(taskId); + } +} + +Future?> _getFaceCropsUsingHeapPriorityQueue( + EnteFile file, + Map faceBoxeMap, { + bool useFullFile = true, +}) async { + final completer = Completer?>(); + + late final TaskQueue relevantTaskQueue; + late final String taskId; + if (useFullFile) { + relevantTaskQueue = _queueFullFileFaceGenerations; + taskId = [file.uploadedFileID!, "-full"].join(); + } else { + relevantTaskQueue = _queueThumbnailFaceGenerations; + taskId = [file.uploadedFileID!, "-thumbnail"].join(); + } + + await relevantTaskQueue.addTask(taskId, () async { + final faceCrops = await _getFaceCrops( + file, + faceBoxeMap, + useFullFile: useFullFile, + ); + completer.complete(faceCrops); + }); + + return completer.future; +} + Future?> _getFaceCrops( EnteFile file, Map faceBoxeMap, { diff --git a/mobile/lib/utils/ffprobe_util.dart b/mobile/lib/utils/ffprobe_util.dart index 040ef69258..5eaf02bd97 100644 --- a/mobile/lib/utils/ffprobe_util.dart +++ b/mobile/lib/utils/ffprobe_util.dart @@ -1,6 +1,6 @@ // Adapted from: https://github.com/deckerst/aves -import "package:ffmpeg_kit_flutter_full_gpl/media_information.dart"; +import "package:ffmpeg_kit_flutter/media_information.dart"; import "package:logging/logging.dart"; import "package:photos/models/ffmpeg/ffprobe_keys.dart"; import "package:photos/models/ffmpeg/ffprobe_props.dart"; diff --git a/mobile/lib/utils/file_util.dart b/mobile/lib/utils/file_util.dart index 19d97b2a03..534fb29cfc 100644 --- a/mobile/lib/utils/file_util.dart +++ b/mobile/lib/utils/file_util.dart @@ -72,7 +72,7 @@ Future _getLocalDiskFile( EnteFile file, { bool liveVideo = false, bool isOrigin = false, -}) async { +}) { if (file.isSharedMediaToAppSandbox) { final localFile = File(getSharedMediaFilePath(file)); return localFile.exists().then((exist) { diff --git a/mobile/lib/utils/local_settings.dart b/mobile/lib/utils/local_settings.dart index 9fcd9e9adc..72bb8a2f1b 100644 --- a/mobile/lib/utils/local_settings.dart +++ b/mobile/lib/utils/local_settings.dart @@ -15,6 +15,7 @@ class LocalSettings { static const _kHasSeenMLEnablingBanner = "ls.has_seen_ml_enabling_banner"; static const kRateUsShownCount = "rate_us_shown_count"; static const kEnableMultiplePart = "ls.enable_multiple_part"; + static const kCuratedMemoriesEnabled = "ls.curated_memories_enabled"; static const kRateUsPromptThreshold = 2; static const shouldLoopVideoKey = "video.should_loop"; static const onGuestViewKey = "on_guest_view"; @@ -80,9 +81,29 @@ class LocalSettings { bool get isMLLocalIndexingEnabled => _prefs.getBool(_kisMLLocalIndexingEnabled) ?? enoughRamForLocalIndexing; + bool get isSmartMemoriesEnabled => + _prefs.getBool(kCuratedMemoriesEnabled) ?? true; + + Future setSmartMemories(bool value) async { + await _prefs.setBool(kCuratedMemoriesEnabled, value); + return value; + } + bool get userEnabledMultiplePart => _prefs.getBool(kEnableMultiplePart) ?? false; + Future autoEnableMultiplePart(int rolloutPercentage) async { + if (_prefs.containsKey(kEnableMultiplePart)) { + return; + } + rolloutPercentage = rolloutPercentage.clamp(0, 100); + final randomValue = DateTime.now().millisecondsSinceEpoch % 100; + await _prefs.setBool( + kEnableMultiplePart, + randomValue < rolloutPercentage, + ); + } + Future setUserEnabledMultiplePart(bool value) async { await _prefs.setBool(kEnableMultiplePart, value); return value; diff --git a/mobile/lib/utils/ml_util.dart b/mobile/lib/utils/ml_util.dart index d17f2f7ecc..b1d18307da 100644 --- a/mobile/lib/utils/ml_util.dart +++ b/mobile/lib/utils/ml_util.dart @@ -56,7 +56,7 @@ class FileMLInstruction { Future getIndexStatus() async { try { final mlDataDB = MLDataDB.instance; - final int indexableFiles = (await getIndexableFileIDs()).length; + final int indexableFiles = await getIndexableFileCount(); final int facesIndexedFiles = await mlDataDB.getFaceIndexedFileCount(); final int clipIndexedFiles = await mlDataDB.getClipIndexedFileCount(); final int indexedFiles = math.min(facesIndexedFiles, clipIndexedFiles); @@ -320,9 +320,8 @@ bool _shouldDiscardRemoteEmbedding(FileDataEntity fileML) { return false; } -Future> getIndexableFileIDs() async { - final fileIDs = await FilesDB.instance.getAllFileIDs(); - return fileIDs.toSet(); +Future getIndexableFileCount() async { + return FilesDB.instance.remoteFileCount(); } Future getImagePathForML(EnteFile enteFile) async { diff --git a/mobile/lib/utils/standalone/directory_content.dart b/mobile/lib/utils/standalone/directory_content.dart index a868e51c0c..74ad9c8943 100644 --- a/mobile/lib/utils/standalone/directory_content.dart +++ b/mobile/lib/utils/standalone/directory_content.dart @@ -81,7 +81,10 @@ void _buildPrettyString( } } -Future getDirectoryStat(Directory directory) async { +Future getDirectoryStat( + Directory directory, { + String? prefix, +}) async { int size = 0; final List subDirectories = []; final Map fileNameToSize = {}; @@ -89,6 +92,10 @@ Future getDirectoryStat(Directory directory) async { if (await directory.exists()) { final List entities = directory.listSync(); for (FileSystemEntity entity in entities) { + if (prefix != null && !entity.path.contains(prefix)) { + continue; + } + if (entity is File) { final int fileSize = await File(entity.path).length(); size += fileSize; diff --git a/mobile/lib/utils/standalone/task_queue.dart b/mobile/lib/utils/standalone/task_queue.dart new file mode 100644 index 0000000000..a5a5eb0dfb --- /dev/null +++ b/mobile/lib/utils/standalone/task_queue.dart @@ -0,0 +1,270 @@ +import 'dart:async'; + +import 'package:collection/collection.dart'; + +/// Class to hold task information +class _QueueItem { + final T id; + final Future Function() task; + final Completer completer; + int lastUpdated; + int counter; + + _QueueItem(this.id, this.task) + : lastUpdated = DateTime.now().millisecondsSinceEpoch, + counter = 1, + completer = Completer(); + + void updateTimestamp() { + lastUpdated = DateTime.now().millisecondsSinceEpoch; + counter++; + } + + bool isTimedOut(Duration timeout) { + return (DateTime.now().millisecondsSinceEpoch - lastUpdated) > + timeout.inMilliseconds; + } + + Future get future => completer.future; +} + +/// Custom exception for task timeout +class TaskQueueTimeoutException implements Exception { + final dynamic taskId; + final Duration timeout; + + TaskQueueTimeoutException(this.taskId, this.timeout); + + @override + String toString() => + 'Task $taskId timed out after ${timeout.inSeconds} seconds'; +} + +/// Custom exception for task being discarded due to queue overflow +class TaskQueueOverflowException implements Exception { + final dynamic taskId; + + TaskQueueOverflowException(this.taskId); + + @override + String toString() => 'Task $taskId was discarded due to queue overflow'; +} + +class TaskQueueCancelledException implements Exception { + final dynamic taskId; + + TaskQueueCancelledException(this.taskId); + + @override + String toString() => 'Task $taskId was cancelled'; +} + +/// A generic task queue that can manage tasks with priority, cancellation, and timeout functionality. +class TaskQueue { + /// Maximum number of tasks that can run concurrently + final int maxConcurrentTasks; + + /// Timeout duration after which a task is considered stale + final Duration taskTimeout; + + /// Maximum size of the queue before older tasks are discarded + final int maxQueueSize; + + /// Map to store tasks for quick lookup by ID + final _taskMap = {}; + + /// Priority queue to sort tasks by timestamp (most recent first) + final HeapPriorityQueue<_QueueItem> _priorityQueue; + + /// Set of currently running task ids + final _runningTasks = {}; + + /// Constructor + TaskQueue({ + this.maxConcurrentTasks = 1, + this.taskTimeout = const Duration(minutes: 5), + this.maxQueueSize = 100, + }) : _priorityQueue = HeapPriorityQueue<_QueueItem>( + (a, b) => b.lastUpdated.compareTo(a.lastUpdated), + ); // Reversed for most recent first + + /// Add or update a task in the queue + Future addTask(T id, Future Function() task) { + // If the task is already in the queue, update its timestamp to increase priority + if (_taskMap.containsKey(id)) { + final item = _taskMap[id]!; + + // We need to remove and re-add to the priority queue to update its position + _priorityQueue.remove(item); + item.updateTimestamp(); + _priorityQueue.add(item); + + return item.future; + } else { + // Check if we need to make room in the queue + _enforceQueueSizeLimit(); + + // Add new task to the queue + final queueItem = _QueueItem(id, task); + _taskMap[id] = queueItem; + _priorityQueue.add(queueItem); + + // Try to process tasks + _processQueue(); + + return queueItem.future; + } + } + + /// Enforce the maximum queue size by discarding older tasks + void _enforceQueueSizeLimit() { + // If we're under the limit, no action needed + if (_taskMap.length < maxQueueSize) { + return; + } + + // Create a temporary queue to find oldest items + // We need this because our main queue is ordered by most recent first + final tempQueue = PriorityQueue<_QueueItem>( + (a, b) => a.lastUpdated.compareTo(b.lastUpdated), + ); // Oldest first + + // Add all items to the temporary queue + for (var item in _taskMap.values) { + tempQueue.add(item); + } + + // Calculate how many items we need to remove + final excessItems = + _taskMap.length - maxQueueSize + 1; // +1 to make room for the new item + + // Remove the oldest items + for (var i = 0; i < excessItems && tempQueue.isNotEmpty; i++) { + final oldestItem = tempQueue.removeFirst(); + _priorityQueue.remove(oldestItem); + _taskMap.remove(oldestItem.id); + + // Complete with overflow error + if (!oldestItem.completer.isCompleted) { + oldestItem.completer + .completeError(TaskQueueOverflowException(oldestItem.id)); + } + } + } + + /// Remove a task from the queue by its ID + bool removeTask(T id) { + // Can only remove tasks that aren't already running + if (_runningTasks.contains(id)) { + return false; + } + + if (_taskMap.containsKey(id)) { + final item = _taskMap[id]!; + item.counter--; + if (item.counter > 0) { + return false; + } + _priorityQueue.remove(item); + // Complete the future with a cancellation error + if (!item.completer.isCompleted) { + item.completer.completeError(TaskQueueCancelledException(id)); + } + + _taskMap.remove(id); + return true; + } + + return false; + } + + /// Get the number of tasks waiting in the queue + int get pendingTasksCount => _taskMap.length; + + /// Get the number of currently running tasks + int get runningTasksCount => _runningTasks.length; + + /// Process the queue and execute tasks if possible + void _processQueue() async { + // Remove timed out tasks + _removeTimedOutTasks(); + + // If we can't run more tasks, exit + if (_runningTasks.length >= maxConcurrentTasks || _priorityQueue.isEmpty) { + return; + } + + // Get the highest priority task (most recent) + final queueItem = _priorityQueue.removeFirst(); + final taskId = queueItem.id; + + // Remove from the map + _taskMap.remove(taskId); + + // Mark this task as running + _runningTasks.add(taskId); + + try { + // Execute the task + await queueItem.task(); + // Complete the future successfully + if (!queueItem.completer.isCompleted) { + queueItem.completer.complete(); + } + } catch (e) { + // Complete the future with the error + if (!queueItem.completer.isCompleted) { + queueItem.completer.completeError(e); + } + print('Task error: $e'); + } finally { + // Mark the task as completed + _runningTasks.remove(taskId); + + // Process the next task in the queue + _processQueue(); + } + } + + /// Remove tasks that have timed out + void _removeTimedOutTasks() { + final timedOutIds = []; + + // First pass: identify timed out items + for (var entry in _taskMap.entries) { + if (entry.value.isTimedOut(taskTimeout)) { + timedOutIds.add(entry.key); + } + } + // Second pass: remove them and complete with timeout error + for (var id in timedOutIds) { + final item = _taskMap[id]!; + _priorityQueue.remove(item); + + // Complete the future with a timeout error + if (!item.completer.isCompleted) { + item.completer + .completeError(TaskQueueTimeoutException(id, taskTimeout)); + } + + _taskMap.remove(id); + } + } + + /// Clear all pending tasks + void clear() { + // Complete all pending tasks with cancellation errors + for (var entry in _taskMap.entries) { + if (!entry.value.completer.isCompleted) { + entry.value.completer.completeError( + Exception('Task ${entry.key} was cancelled during queue clear'), + ); + } + } + + while (_priorityQueue.isNotEmpty) { + _priorityQueue.removeFirst(); + } + _taskMap.clear(); + } +} diff --git a/mobile/lib/utils/wakelock_util.dart b/mobile/lib/utils/wakelock_util.dart deleted file mode 100644 index f5851f1599..0000000000 --- a/mobile/lib/utils/wakelock_util.dart +++ /dev/null @@ -1,38 +0,0 @@ -import "dart:async" show unawaited; - -import "package:wakelock_plus/wakelock_plus.dart"; - -class EnteWakeLock { - bool _wakeLockEnabledHere = false; - - void enable() { - WakelockPlus.enabled.then((value) { - if (value == false) { - WakelockPlus.enable(); - //wakeLockEnabledHere will not be set to true if wakeLock is already enabled from settings on iOS. - //We shouldn't disable when video is not playing if it was enabled manually by the user from ente settings by user. - _wakeLockEnabledHere = true; - } - }); - } - - void disable() { - if (_wakeLockEnabledHere) { - WakelockPlus.disable(); - } - } - - void dispose() { - if (_wakeLockEnabledHere) { - unawaited( - WakelockPlus.enabled.then((isEnabled) { - isEnabled ? WakelockPlus.disable() : null; - }), - ); - } - } - - static Future toggle({required bool enable}) async { - await WakelockPlus.toggle(enable: enable); - } -} diff --git a/mobile/pubspec.lock b/mobile/pubspec.lock index 8eb7823784..36d05a086a 100644 --- a/mobile/pubspec.lock +++ b/mobile/pubspec.lock @@ -46,14 +46,6 @@ packages: url: "https://pub.dev" source: hosted version: "5.3.0" - animate_do: - dependency: "direct main" - description: - name: animate_do - sha256: "4554744e604b841e2bde710398ef3f4f8a1935a182b48727afe2a1023527b883" - url: "https://pub.dev" - source: hosted - version: "2.1.0" animated_list_plus: dependency: "direct main" description: @@ -78,6 +70,38 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.3" + app_links: + dependency: "direct main" + description: + name: app_links + sha256: "85ed8fc1d25a76475914fff28cc994653bd900bc2c26e4b57a49e097febb54ba" + url: "https://pub.dev" + source: hosted + version: "6.4.0" + app_links_linux: + dependency: transitive + description: + name: app_links_linux + sha256: f5f7173a78609f3dfd4c2ff2c95bd559ab43c80a87dc6a095921d96c05688c81 + url: "https://pub.dev" + source: hosted + version: "1.0.3" + app_links_platform_interface: + dependency: transitive + description: + name: app_links_platform_interface + sha256: "05f5379577c513b534a29ddea68176a4d4802c46180ee8e2e966257158772a3f" + url: "https://pub.dev" + source: hosted + version: "2.0.2" + app_links_web: + dependency: transitive + description: + name: app_links_web + sha256: af060ed76183f9e2b87510a9480e56a5352b6c249778d07bd2c95fc35632a555 + url: "https://pub.dev" + source: hosted + version: "1.0.4" archive: dependency: "direct main" description: @@ -122,7 +146,7 @@ packages: dependency: "direct main" description: path: "." - ref: HEAD + ref: "95c7a9f" resolved-ref: "95c7a9f0400b968b3bfdc98c8c10a07fb4a62ea2" url: "https://github.com/ente-io/battery_info" source: git @@ -355,7 +379,7 @@ packages: source: hosted version: "1.3.2" cross_file: - dependency: "direct main" + dependency: transitive description: name: cross_file sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670" @@ -622,13 +646,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" - ffmpeg_kit_flutter_full_gpl: + ffmpeg_kit_flutter: dependency: "direct main" description: - name: ffmpeg_kit_flutter_full_gpl - sha256: "4f269bcb636bfcb544e5b4d65c706a3d311839970cb42638e72406410c1b5b7b" - url: "https://pub.dev" - source: hosted + path: "flutter/flutter" + ref: android-packaged + resolved-ref: "6d5d27a8c259eda6292f204a27fba53da70af20e" + url: "https://github.com/ente-io/ffmpeg-kit" + source: git version: "6.0.3" ffmpeg_kit_flutter_platform_interface: dependency: transitive @@ -641,12 +666,11 @@ packages: figma_squircle: dependency: "direct main" description: - path: "." - ref: "7cc383b30e96c07acd4e484c1d6731d054f7f6ec" - resolved-ref: "7cc383b30e96c07acd4e484c1d6731d054f7f6ec" - url: "https://github.com/aloisdeniel/figma_squircle.git" - source: git - version: "1.0.0" + name: figma_squircle + sha256: "7de45eb9ec66f1c3fea65587d94d66c31e97a9d9068b38bd23d3461aaab5119a" + url: "https://pub.dev" + source: hosted + version: "0.6.3" file: dependency: transitive description: @@ -663,38 +687,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.14" - file_selector_linux: - dependency: transitive - description: - name: file_selector_linux - sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33" - url: "https://pub.dev" - source: hosted - version: "0.9.3+2" - file_selector_macos: - dependency: transitive - description: - name: file_selector_macos - sha256: "271ab9986df0c135d45c3cdb6bd0faa5db6f4976d3e4b437cf7d0f258d941bfc" - url: "https://pub.dev" - source: hosted - version: "0.9.4+2" - file_selector_platform_interface: - dependency: transitive - description: - name: file_selector_platform_interface - sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b - url: "https://pub.dev" - source: hosted - version: "2.6.2" - file_selector_windows: - dependency: transitive - description: - name: file_selector_windows - sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b" - url: "https://pub.dev" - source: hosted - version: "0.9.3+4" firebase_core: dependency: "direct main" description: @@ -744,7 +736,7 @@ packages: source: hosted version: "3.10.3" fixnum: - dependency: transitive + dependency: "direct main" description: name: fixnum sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be @@ -764,14 +756,6 @@ packages: url: "https://pub.dev" source: hosted version: "4.5.2" - flutter_app_icon_changer: - dependency: "direct main" - description: - name: flutter_app_icon_changer - sha256: f8123ea8bf9f7b5e305cf071b3cd5d28cd53606e6374fe6087ae1bd6d849a525 - url: "https://pub.dev" - source: hosted - version: "0.1.1" flutter_cache_manager: dependency: "direct main" description: @@ -930,7 +914,7 @@ packages: source: hosted version: "0.6.0" flutter_launcher_icons: - dependency: "direct main" + dependency: "direct dev" description: name: flutter_launcher_icons sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" @@ -999,7 +983,7 @@ packages: source: hosted version: "6.1.2" flutter_native_splash: - dependency: "direct main" + dependency: "direct dev" description: name: flutter_native_splash sha256: "7062602e0dbd29141fb8eb19220b5871ca650be5197ab9c1f193a28b17537bc7" @@ -1034,10 +1018,10 @@ packages: dependency: "direct main" description: name: flutter_secure_storage - sha256: "9cad52d75ebc511adfae3d447d5d13da15a55a92c9410e50f67335b6d21d16ea" + sha256: ffdbb60130e4665d2af814a0267c481bcf522c41ae2e43caf69fa0146876d685 url: "https://pub.dev" source: hosted - version: "9.2.4" + version: "9.0.0" flutter_secure_storage_linux: dependency: transitive description: @@ -1182,14 +1166,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.3" - google_nav_bar: - dependency: "direct main" - description: - name: google_nav_bar - sha256: bb12dd21514ee1b041ab3127673e2fd85e693337df308f7f2b75cd1e8e92eaf4 - url: "https://pub.dev" - source: hosted - version: "5.0.7" graphs: dependency: transitive description: @@ -1198,6 +1174,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.2" + gtk: + dependency: transitive + description: + name: gtk + sha256: e8ce9ca4b1df106e4d72dad201d345ea1a036cc12c360f1a7d5a758f78ffa42c + url: "https://pub.dev" + source: hosted + version: "2.1.0" hex: dependency: transitive description: @@ -1310,70 +1294,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" - image_picker: - dependency: "direct main" - description: - name: image_picker - sha256: "021834d9c0c3de46bf0fe40341fa07168407f694d9b2bb18d532dc1261867f7a" - url: "https://pub.dev" - source: hosted - version: "1.1.2" - image_picker_android: - dependency: transitive - description: - name: image_picker_android - sha256: "82652a75e3dd667a91187769a6a2cc81bd8c111bbead698d8e938d2b63e5e89a" - url: "https://pub.dev" - source: hosted - version: "0.8.12+21" - image_picker_for_web: - dependency: transitive - description: - name: image_picker_for_web - sha256: "717eb042ab08c40767684327be06a5d8dbb341fe791d514e4b92c7bbe1b7bb83" - url: "https://pub.dev" - source: hosted - version: "3.0.6" - image_picker_ios: - dependency: transitive - description: - name: image_picker_ios - sha256: "05da758e67bc7839e886b3959848aa6b44ff123ab4b28f67891008afe8ef9100" - url: "https://pub.dev" - source: hosted - version: "0.8.12+2" - image_picker_linux: - dependency: transitive - description: - name: image_picker_linux - sha256: "4ed1d9bb36f7cd60aa6e6cd479779cc56a4cb4e4de8f49d487b1aaad831300fa" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" - image_picker_macos: - dependency: transitive - description: - name: image_picker_macos - sha256: "1b90ebbd9dcf98fb6c1d01427e49a55bd96b5d67b8c67cf955d60a5de74207c1" - url: "https://pub.dev" - source: hosted - version: "0.2.1+2" - image_picker_platform_interface: - dependency: transitive - description: - name: image_picker_platform_interface - sha256: "886d57f0be73c4b140004e78b9f28a8914a09e50c2d816bdd0520051a71236a0" - url: "https://pub.dev" - source: hosted - version: "2.10.1" - image_picker_windows: - dependency: transitive - description: - name: image_picker_windows - sha256: "6ad07afc4eb1bc25f3a01084d28520496c4a3bb0cb13685435838167c9dcedeb" - url: "https://pub.dev" - source: hosted - version: "0.2.1+1" in_app_purchase: dependency: "direct main" description: @@ -1452,7 +1372,7 @@ packages: source: hosted version: "0.6.7" json_annotation: - dependency: "direct main" + dependency: "direct dev" description: name: json_annotation sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" @@ -1531,14 +1451,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.1" - loading_animations: - dependency: "direct main" - description: - name: loading_animations - sha256: c62a8c1fbbe5ade3ac2814128a9aa92ee784756b11ad9e6a915b673b90005cc8 - url: "https://pub.dev" - source: hosted - version: "2.2.0" local_auth: dependency: "direct main" description: @@ -1791,7 +1703,7 @@ packages: dependency: "direct main" description: path: "." - ref: HEAD + ref: "3b862fe" resolved-ref: "3b862fea9665a50e59bcce96cab6997cc7c0cb9e" url: "https://github.com/ente-io/move_to_background.git" source: git @@ -1888,7 +1800,7 @@ packages: dependency: "direct main" description: path: "." - ref: HEAD + ref: "83740bf" resolved-ref: "83740bf55dac38a0be01c863609cf900c4d1aab1" url: "https://github.com/ente-io/open-mail-app-flutter.git" source: git @@ -1917,14 +1829,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.0" - page_transition: - dependency: "direct main" - description: - name: page_transition - sha256: "9d2a780d7d68b53ae82fbcc43e06a16195e6775e9aae40e55dc0cbb593460f9d" - url: "https://pub.dev" - source: hosted - version: "2.2.1" panorama: dependency: "direct main" description: @@ -2014,14 +1918,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.3.0" - pedantic: - dependency: "direct main" - description: - name: pedantic - sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" - url: "https://pub.dev" - source: hosted - version: "1.11.1" permission_handler: dependency: "direct main" description: @@ -2143,7 +2039,7 @@ packages: source: hosted version: "1.0.1" pool: - dependency: "direct main" + dependency: transitive description: name: pool sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" @@ -2154,9 +2050,9 @@ packages: dependency: "direct main" description: path: "." - ref: "pb/FIX-obsolete-android-plugin" - resolved-ref: "949de7b6beedf163507d649a71b1f55bc8f083ca" - url: "https://github.com/ente-io/privacy_screen.git" + ref: "855418e" + resolved-ref: "855418e4b39632893a322fdfa2a9b69487b1831d" + url: "https://github.com/eddyuan/privacy_screen.git" source: git version: "0.0.6" process: @@ -2208,7 +2104,7 @@ packages: source: hosted version: "1.4.0" quiver: - dependency: "direct main" + dependency: transitive description: name: quiver sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2 @@ -2219,7 +2115,7 @@ packages: dependency: "direct main" description: path: "." - ref: HEAD + ref: "2cea396" resolved-ref: "2cea396843cd3ab1b5ec4334be4233864637874e" url: "https://github.com/KasemJaffer/receive_sharing_intent.git" source: git @@ -2283,18 +2179,18 @@ packages: dependency: "direct main" description: name: sentry - sha256: "90c2f956c146bcc9c4843406dd4a65d08b25575828dc2ad51de0ca5cd713209f" + sha256: "077b03f9ee44cfb1eaadbf8af58255e670de62b3f240ca154ce96a5591dc3885" url: "https://pub.dev" source: hosted - version: "8.13.2" + version: "8.14.1" sentry_flutter: dependency: "direct main" description: name: sentry_flutter - sha256: ee6b41956ad570706bf5c2489915d71d75522d154200c0df24be2c4e5654ca21 + sha256: a348e2a365a8ad7682dd09db54f50f19f1c87180b8278f088bc393c511aea5e0 url: "https://pub.dev" source: hosted - version: "8.13.2" + version: "8.14.1" share_plus: dependency: "direct main" description: @@ -2399,14 +2295,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.1" - simple_cluster: - dependency: "direct main" - description: - name: simple_cluster - sha256: "64d6b7d60d641299ad8c3f012417c711532792c1bc61ac6a7f52b942cdba65da" - url: "https://pub.dev" - source: hosted - version: "0.3.0" sky_engine: dependency: transitive description: flutter @@ -2700,31 +2588,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.1" - uni_links: - dependency: "direct main" - description: - path: uni_links - ref: HEAD - resolved-ref: b9168d982885bf64625154d6e6f8d68b92b98b49 - url: "https://github.com/ente-io/uni_links.git" - source: git - version: "0.5.1" - uni_links_platform_interface: - dependency: transitive - description: - name: uni_links_platform_interface - sha256: "929cf1a71b59e3b7c2d8a2605a9cf7e0b125b13bc858e55083d88c62722d4507" - url: "https://pub.dev" - source: hosted - version: "1.0.0" - uni_links_web: - dependency: transitive - description: - name: uni_links_web - sha256: "7539db908e25f67de2438e33cc1020b30ab94e66720b5677ba6763b25f6394df" - url: "https://pub.dev" - source: hosted - version: "0.1.0" unicode: dependency: transitive description: @@ -2821,14 +2684,6 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.4" - utility: - dependency: transitive - description: - name: utility - sha256: "200d264c3804e87da7ea36aa81bd73fb845d2cb7b2e820f3f357a0a2bd4e37f5" - url: "https://pub.dev" - source: hosted - version: "1.0.3" uuid: dependency: "direct main" description: @@ -2968,15 +2823,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.2" - wallpaper_manager_flutter: - dependency: "direct main" - description: - path: "." - ref: HEAD - resolved-ref: a1c96618483ace4596af085891f04a4d463725b4 - url: "https://github.com/ente-io/wallpaper_manager_fork.git" - source: git - version: "0.0.2" watcher: dependency: "direct overridden" description: @@ -3042,7 +2888,7 @@ packages: source: hosted version: "0.0.3" win32: - dependency: "direct main" + dependency: "direct overridden" description: name: win32 sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e @@ -3089,14 +2935,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" - xmp: - dependency: "direct main" - description: - name: xmp - sha256: "317a023e882101713cd12a25aa9f2e2f2ed61146f2a79e20ed0dd31787b9b895" - url: "https://pub.dev" - source: hosted - version: "1.0.3" yaml: dependency: transitive description: diff --git a/mobile/pubspec.yaml b/mobile/pubspec.yaml index 5da8e4f789..7dd06a37f1 100644 --- a/mobile/pubspec.yaml +++ b/mobile/pubspec.yaml @@ -12,7 +12,7 @@ description: ente photos application # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.0.0+1031 +version: 1.0.7+1037 publish_to: none environment: @@ -21,13 +21,14 @@ environment: dependencies: adaptive_theme: ^3.1.0 android_intent_plus: ^5.2.0 - animate_do: ^2.0.0 animated_list_plus: ^0.5.2 + app_links: ^6.4.0 archive: ^3.6.1 - background_fetch: ^1.2.1 - battery_info: # update source if there is any update + background_fetch: ^1.3.7 + battery_info: # replace with battery_plus git: url: https://github.com/ente-io/battery_info + ref: 95c7a9f bip39: ^1.0.6 cached_network_image: ^3.0.0 chewie: @@ -35,10 +36,9 @@ dependencies: url: https://github.com/ente-io/chewie.git ref: mybranched collection: # dart - computer: + computer: # logged task name in verbose in fork git: "https://github.com/ente-io/computer.git" connectivity_plus: ^6.0.2 - cross_file: ^0.3.3 crypto: ^3.0.2 cupertino_icons: ^1.0.0 dart_ui_isolate: ^1.1.1 @@ -67,54 +67,55 @@ dependencies: extended_image: ^8.1.1 fade_indexed_stack: ^0.2.2 fast_base58: ^0.2.1 - ffmpeg_kit_flutter_full_gpl: ^6.0.3 - figma_squircle: # update source if there is any update + ffmpeg_kit_flutter: git: - url: https://github.com/aloisdeniel/figma_squircle.git - ref: 7cc383b30e96c07acd4e484c1d6731d054f7f6ec + url: https://github.com/ente-io/ffmpeg-kit + path: flutter/flutter + ref: android-packaged + figma_squircle: ^0.6.3 file_saver: ^0.2.14 firebase_core: ^3.6.0 firebase_messaging: ^15.1.3 + fixnum: ^1.1.1 flutter: sdk: flutter flutter_animate: ^4.1.0 - flutter_app_icon_changer: ^0.1.1 flutter_cache_manager: ^3.3.0 flutter_displaymode: ^0.6.0 flutter_easyloading: ^3.0.0 flutter_email_sender: ^7.0.0 flutter_image_compress: ^2.4.0 flutter_inappwebview: ^6.1.4 - flutter_launcher_icons: ^0.13.1 flutter_local_notifications: ^17.2.2 flutter_localizations: sdk: flutter flutter_map: ^6.2.0 flutter_map_marker_cluster: ^1.3.6 - flutter_native_splash: ^2.4.4 flutter_password_strength: ^0.1.6 flutter_rust_bridge: 2.9.0 - flutter_secure_storage: ^9.2.4 + # Do not upgrade this package unless this issue is resolved: + # https://github.com/juliansteenbakker/flutter_secure_storage/issues/870 + # On v9.2.4, keys related to lockscreen persist even after reintsall. For context see: + # https://github.com/juliansteenbakker/flutter_secure_storage/issues/870#issuecomment-2777447937 + # Let's wait till the issue is resolved by the package maintainer. + # If not resolved and we need to upgrade, write a migration script. + flutter_secure_storage: 9.0.0 flutter_sodium: flutter_staggered_grid_view: ^0.6.2 flutter_svg: ^2.0.10+1 fluttertoast: ^8.0.6 fraction: ^5.0.2 freezed_annotation: ^2.4.1 - google_nav_bar: ^5.0.5 home_widget: ^0.7.0+1 html_unescape: ^2.0.0 http: ^1.1.0 image: ^4.0.17 image_editor: ^1.6.0 - image_picker: ^1.1.1 in_app_purchase: ^3.0.7 intl: ^0.19.0 - json_annotation: ^4.8.0 latlong2: ^0.9.0 launcher_icon_switcher: ^0.0.2 like_button: ^2.0.5 - loading_animations: ^2.1.0 local_auth: ^2.1.5 local_auth_android: local_auth_ios: @@ -134,8 +135,10 @@ dependencies: git: "https://github.com/ente-io/motion_photo.git" motionphoto: git: "https://github.com/ente-io/motionphoto.git" - move_to_background: # update source if there is any update - git: "https://github.com/ente-io/move_to_background.git" + move_to_background: # no updates in git, replace package + git: + url: https://github.com/ente-io/move_to_background.git + ref: 3b862fe nanoid: ^1.0.0 native_dio_adapter: ^1.4.0 native_video_player: ^3.0.0-dev.4 @@ -145,11 +148,11 @@ dependencies: git: url: https://github.com/ente-io/onnxruntime.git ref: ios_only - open_mail_app: # update source if there is any update + open_mail_app: # replace plugin, git is archived git: url: https://github.com/ente-io/open-mail-app-flutter.git + ref: 83740bf package_info_plus: ^8.2.1 - page_transition: ^2.0.2 panorama: git: url: https://github.com/ente-io/panorama_blur.git @@ -158,31 +161,28 @@ dependencies: path: #dart path_provider: ^2.1.1 path_provider_foundation: ^2.4.1 - pedantic: ^1.9.2 permission_handler: ^11.0.1 photo_manager: ^3.5.3 photo_view: ^0.14.0 pinput: ^5.0.0 pointycastle: ^3.7.3 - pool: ^1.5.1 - privacy_screen: # update source if there is any update + privacy_screen: # pub.dev is behind git: - url: https://github.com/ente-io/privacy_screen.git - ref: pb/FIX-obsolete-android-plugin + url: https://github.com/eddyuan/privacy_screen.git + ref: 855418e protobuf: ^3.1.0 - quiver: ^3.0.1 - receive_sharing_intent: # update source if there is any update + receive_sharing_intent: # pub.dev is behind git: url: https://github.com/KasemJaffer/receive_sharing_intent.git + ref: 2cea396 rust_lib_photos: path: rust_builder screenshot: ^3.0.0 scrollable_positioned_list: ^0.3.5 - sentry: ^8.13.2 - sentry_flutter: ^8.13.2 + sentry: ^8.14.1 + sentry_flutter: ^8.14.1 share_plus: ^10.0.2 shared_preferences: ^2.0.5 - simple_cluster: ^0.3.0 sqflite: ^2.3.0 sqflite_migration: ^0.3.0 sqlite3_flutter_libs: ^0.5.20 @@ -195,13 +195,9 @@ dependencies: system_info_plus: ^0.0.6 tuple: ^2.0.0 ua_client_hints: ^1.4.0 - uni_links: # update to app_links - git: - url: https://github.com/ente-io/uni_links.git - path: uni_links url_launcher: ^6.3.0 uuid: ^4.5.0 - video_editor: + video_editor: # edge cases handled in fork git: url: https://github.com/ente-io/video_editor_fork.git video_player: @@ -212,14 +208,9 @@ dependencies: video_thumbnail: visibility_detector: ^0.3.3 wakelock_plus: ^1.1.1 - wallpaper_manager_flutter: # update source if there is any update - git: - url: https://github.com/ente-io/wallpaper_manager_fork.git wechat_assets_picker: ^8.6.3 widgets_to_image: ^0.0.2 - win32: ^5.10.1 xml: ^6.3.0 - xmp: ^1.0.3 dependency_overrides: # Remove this after removing dependency from flutter_sodium. @@ -264,13 +255,16 @@ dev_dependencies: build_runner: ^2.4.7 flutter_driver: sdk: flutter + flutter_launcher_icons: ^0.13.1 flutter_lints: ^3.0.1 + flutter_native_splash: ^2.4.4 flutter_test: sdk: flutter freezed: ^2.5.2 integration_test: sdk: flutter intl_utils: ^2.8.7 + json_annotation: ^4.8.0 json_serializable: ^6.6.1 test: ^1.22.0 diff --git a/server/Dockerfile b/server/Dockerfile index b29bbc314a..8a3ee192c3 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -14,11 +14,12 @@ RUN --mount=type=cache,target=/root/.cache/go-build \ go build -o museum cmd/museum/main.go FROM alpine:3.21 -RUN apk add libsodium-dev +COPY --from=builder /usr/lib/libsodium.so* /usr/lib COPY --from=builder /etc/ente/museum . COPY configurations configurations COPY migrations migrations COPY mail-templates mail-templates +COPY web-templates web-templates ARG GIT_COMMIT ENV GIT_COMMIT=$GIT_COMMIT diff --git a/server/cmd/museum/main.go b/server/cmd/museum/main.go index f3a92cf210..7070b8af61 100644 --- a/server/cmd/museum/main.go +++ b/server/cmd/museum/main.go @@ -263,6 +263,7 @@ func main() { TrashRepository: trashRepo, UserRepo: userRepo, UsageCtrl: usageController, + AccessCtrl: accessCtrl, CollectionRepo: collectionRepo, TaskLockingRepo: taskLockingRepo, DiscordController: discordController, @@ -374,6 +375,7 @@ func main() { p.ReqCntURLLabelMappingFn = urlSanitizer server.Use(p.HandlerFunc()) + server.LoadHTMLGlob("web-templates/*") // note: the recover middleware must be in the last server.Use(requestid.New( @@ -519,6 +521,7 @@ func main() { privateAPI.DELETE("/users/session", userHandler.TerminateSession) privateAPI.GET("/users/delete-challenge", userHandler.GetDeleteChallenge) privateAPI.DELETE("/users/delete", userHandler.DeleteUser) + publicAPI.GET("/users/recover-account", userHandler.SelfAccountRecovery) accountsJwtAuthAPI := server.Group("/") accountsJwtAuthAPI.Use(rateLimiter.GlobalRateLimiter(), authMiddleware.TokenAuthMiddleware(jwt.ACCOUNTS.Ptr()), rateLimiter.APIRateLimitForUserMiddleware(urlSanitizer)) @@ -565,11 +568,14 @@ func main() { Controller: publicCollectionCtrl, FileCtrl: fileController, CollectionCtrl: collectionController, + FileDataCtrl: fileDataCtrl, StorageBonusController: storageBonusCtrl, } publicCollectionAPI.GET("/files/preview/:fileID", publicCollectionHandler.GetThumbnail) publicCollectionAPI.GET("/files/download/:fileID", publicCollectionHandler.GetFile) + publicCollectionAPI.GET("/files/data/fetch", publicCollectionHandler.GetFileData) + publicCollectionAPI.GET("/files/data/preview", publicCollectionHandler.GetPreviewURL) publicCollectionAPI.GET("/diff", publicCollectionHandler.GetDiff) publicCollectionAPI.GET("/info", publicCollectionHandler.GetCollection) publicCollectionAPI.GET("/upload-urls", publicCollectionHandler.GetUploadUrls) @@ -861,7 +867,7 @@ func setupDatabase() *sql.DB { } db.SetMaxIdleConns(6) - db.SetMaxOpenConns(30) + db.SetMaxOpenConns(45) log.Println("Database was configured successfully.") diff --git a/server/configurations/local.yaml b/server/configurations/local.yaml index 8463dfd877..b6b1d567eb 100644 --- a/server/configurations/local.yaml +++ b/server/configurations/local.yaml @@ -26,6 +26,9 @@ # be specified (or be overridden) by setting an environment variable named # ENTE_DB_USER. # +# Hyphens "-" will also be be replaced with underscores, so a string like "s3.b2-eu-cen" +# can be specified by the environment variable named "S3_B2_EU_CEN". +# # # Empty strings # ------------- @@ -202,9 +205,9 @@ s3: # new keys. You can use `go run tools/gen-random-keys/main.go` for that. # # If you used the quickstart.sh script to prepare your compose.yaml, it would've -# already generated new randomly credentials for you in your `museum.yaml`. -# Those will override these defaults; those are the values for your instance -# would use, and what you need to backup. +# already generated new random credentials for you in your `museum.yaml`. Those +# will override these defaults; those are the values for your instance would +# use, and what you need to backup. key: encryption: yvmG/RnzKrbCb9L3mgsmoxXr9H7i2Z4qlbT0mL3ln4w= hash: KXYiG07wC7GIgvCSdg+WmyWdXDAn6XKYJtp/wkEU7x573+byBRAYtpTP0wwvi8i/4l37uicX1dVTUzwH3sLZyw== diff --git a/server/ente/errors.go b/server/ente/errors.go index 56d341571a..4a5a02fb47 100644 --- a/server/ente/errors.go +++ b/server/ente/errors.go @@ -279,6 +279,14 @@ func NewBadRequestWithMessage(message string) *ApiError { } } +func NewPermissionDeniedError(message string) *ApiError { + return &ApiError{ + Code: "PERMISSION_DENIED", + HttpStatusCode: http.StatusForbidden, + Message: message, + } +} + func NewConflictError(message string) *ApiError { return &ApiError{ Code: CONFLICT, diff --git a/server/ente/jwt/jwt.go b/server/ente/jwt/jwt.go index 34511f5e3c..94cfa995f2 100644 --- a/server/ente/jwt/jwt.go +++ b/server/ente/jwt/jwt.go @@ -2,7 +2,6 @@ package jwt import ( "errors" - "github.com/ente-io/museum/pkg/utils/time" ) @@ -13,6 +12,7 @@ const ( FAMILIES ClaimScope = "FAMILIES" ACCOUNTS ClaimScope = "ACCOUNTS" DELETE_ACCOUNT ClaimScope = "DELETE_ACCOUNT" + RestoreAccount ClaimScope = "RestoreAccount" ) func (c ClaimScope) Ptr() *ClaimScope { @@ -20,9 +20,10 @@ func (c ClaimScope) Ptr() *ClaimScope { } type WebCommonJWTClaim struct { - UserID int64 `json:"userID"` - ExpiryTime int64 `json:"expiryTime"` - ClaimScope *ClaimScope `json:"claimScope"` + UserID int64 `json:"userID,omitempty"` + ExpiryTime int64 `json:"expiryTime,omitempty"` + Email string `json:"email,omitempty"` + ClaimScope *ClaimScope `json:"claimScope,omitempty"` } func (w *WebCommonJWTClaim) GetScope() ClaimScope { diff --git a/server/mail-templates/account_deleted.html b/server/mail-templates/account_deleted.html index e9963746f9..830e41a6d0 100644 --- a/server/mail-templates/account_deleted.html +++ b/server/mail-templates/account_deleted.html @@ -101,15 +101,17 @@ font-size: 16px; " >

Hey,

-

As requested by you, we've deleted your Ente account and scheduled your - uploaded data for deletion.

+

As requested, we've deleted your Ente account and scheduled your uploaded data for deletion.

-

If you accidentally deleted your account, please contact our support - immediately to try and recover your uploaded data before the next - scheduled deletion happens.

+

If this was a mistake, please click here to + recover your account.

-

Thank you for checking out Ente, we wish you a great time ahead!

+

After 7 days, your data will be permanently deleted. If you need help, contact our support team.

+ +

Thank you for trying Ente. We hope to see you again!

+ +
diff --git a/server/pkg/api/cast.go b/server/pkg/api/cast.go index 0fcac8a364..8c8589b3e6 100644 --- a/server/pkg/api/cast.go +++ b/server/pkg/api/cast.go @@ -6,6 +6,7 @@ import ( "github.com/ente-io/museum/pkg/controller" "github.com/ente-io/museum/pkg/controller/cast" "github.com/ente-io/museum/pkg/controller/collections" + "github.com/ente-io/museum/pkg/utils/auth" "github.com/ente-io/museum/pkg/utils/handler" "github.com/ente-io/stacktrace" "github.com/gin-gonic/gin" @@ -136,7 +137,8 @@ func (h *CastHandler) getFileForType(c *gin.Context, objectType ente.ObjectType) handler.Error(c, stacktrace.Propagate(ente.ErrBadRequest, "")) return } - url, err := h.FileCtrl.GetCastFileUrl(c, fileID, objectType) + castCtx := auth.GetCastCtx(c) + url, err := h.FileCtrl.GetPublicOrCastFileURL(c, fileID, objectType, castCtx.CollectionID) if err != nil { handler.Error(c, stacktrace.Propagate(err, "")) return diff --git a/server/pkg/api/file_data.go b/server/pkg/api/file_data.go index 4114111ad1..20ee1902d3 100644 --- a/server/pkg/api/file_data.go +++ b/server/pkg/api/file_data.go @@ -4,6 +4,7 @@ import ( "fmt" "github.com/ente-io/museum/ente" fileData "github.com/ente-io/museum/ente/filedata" + "github.com/ente-io/museum/pkg/utils/auth" "github.com/ente-io/museum/pkg/utils/handler" "github.com/ente-io/stacktrace" "github.com/gin-gonic/gin" @@ -98,7 +99,8 @@ func (h *FileHandler) GetFileData(ctx *gin.Context) { ctx.JSON(http.StatusBadRequest, ente.NewBadRequestWithMessage(err.Error())) return } - resp, err := h.FileDataCtrl.GetFileData(ctx, req) + actorUser := auth.GetUserID(ctx.Request.Header) + resp, err := h.FileDataCtrl.GetFileData(ctx, actorUser, req) if err != nil { handler.Error(ctx, err) return @@ -128,7 +130,8 @@ func (h *FileHandler) GetPreviewURL(c *gin.Context) { handler.Error(c, stacktrace.Propagate(ente.ErrBadRequest, fmt.Sprintf("Request binding failed %s", err))) return } - url, err := h.FileDataCtrl.GetPreviewUrl(c, request) + actorUser := auth.GetUserID(c.Request.Header) + url, err := h.FileDataCtrl.GetPreviewUrl(c, actorUser, request) if err != nil { handler.Error(c, stacktrace.Propagate(err, "")) return diff --git a/server/pkg/api/public_collection.go b/server/pkg/api/public_collection.go index d66c1ff2c1..bf33a907fe 100644 --- a/server/pkg/api/public_collection.go +++ b/server/pkg/api/public_collection.go @@ -2,7 +2,9 @@ package api import ( "fmt" + fileData "github.com/ente-io/museum/ente/filedata" "github.com/ente-io/museum/pkg/controller/collections" + "github.com/ente-io/museum/pkg/controller/filedata" "net/http" "strconv" @@ -21,6 +23,7 @@ type PublicCollectionHandler struct { Controller *controller.PublicCollectionController FileCtrl *controller.FileController CollectionCtrl *collections.CollectionController + FileDataCtrl *filedata.Controller StorageBonusController *storagebonus.Controller } @@ -34,6 +37,65 @@ func (h *PublicCollectionHandler) GetFile(c *gin.Context) { h.getFileForType(c, ente.FILE) } +func (h *PublicCollectionHandler) GetPreviewURL(c *gin.Context) { + var req fileData.GetPreviewURLRequest + if err := c.ShouldBindQuery(&req); err != nil { + handler.Error(c, stacktrace.Propagate(ente.ErrBadRequest, fmt.Sprintf("Request binding failed %s", err))) + return + } + collectionOwner, err := h.getCollectionOwnerAndVerifyAccess(c, req.FileID) + if err != nil { + handler.Error(c, stacktrace.Propagate(err, "")) + return + } + url, err := h.FileDataCtrl.GetPreviewUrl(c, *collectionOwner, req) + if err != nil { + handler.Error(c, stacktrace.Propagate(err, "")) + return + } + c.JSON(http.StatusOK, gin.H{ + "url": url, + }) +} + +func (h *PublicCollectionHandler) GetFileData(c *gin.Context) { + var req fileData.GetFileData + if err := c.ShouldBindQuery(&req); err != nil { + c.JSON(http.StatusBadRequest, ente.NewBadRequestWithMessage(err.Error())) + return + } + if req.Type != ente.PreviewVideo { + errorMessage := fmt.Sprintf("unsupported object type %s", req.Type) + handler.Error(c, stacktrace.Propagate(ente.NewBadRequestWithMessage(errorMessage), "")) + return + } + collectionOwner, err := h.getCollectionOwnerAndVerifyAccess(c, req.FileID) + if err != nil { + handler.Error(c, stacktrace.Propagate(err, "")) + return + } + resp, err := h.FileDataCtrl.GetFileData(c, *collectionOwner, req) + if err != nil { + handler.Error(c, err) + return + } + c.JSON(http.StatusOK, gin.H{ + "data": resp, + }) +} + +func (h *PublicCollectionHandler) getCollectionOwnerAndVerifyAccess(c *gin.Context, fileID int64) (*int64, error) { + accessContext := auth.MustGetPublicAccessContext(c) + if accessErr := h.FileCtrl.DoesFileExistInCollection(c, fileID, accessContext.CollectionID); accessErr != nil { + return nil, stacktrace.Propagate(accessErr, "") + } + collection, err := h.Controller.GetPublicCollection(c, false) + if err != nil { + return nil, stacktrace.Propagate(err, "") + } + return &collection.Owner.ID, nil +} + // GetCollection redirects the request to the collection location func (h *PublicCollectionHandler) GetCollection(c *gin.Context) { collection, err := h.Controller.GetPublicCollection(c, false) @@ -163,7 +225,8 @@ func (h *PublicCollectionHandler) getFileForType(c *gin.Context, objectType ente handler.Error(c, stacktrace.Propagate(ente.ErrBadRequest, "")) return } - url, err := h.FileCtrl.GetPublicFileURL(c, fileID, objectType) + accessContext := auth.MustGetPublicAccessContext(c) + url, err := h.FileCtrl.GetPublicOrCastFileURL(c, fileID, objectType, accessContext.CollectionID) if err != nil { handler.Error(c, stacktrace.Propagate(err, "")) return diff --git a/server/pkg/api/user.go b/server/pkg/api/user.go index c62613ccb7..abfcbeac9f 100644 --- a/server/pkg/api/user.go +++ b/server/pkg/api/user.go @@ -540,6 +540,24 @@ func (h *UserHandler) DeleteUser(c *gin.Context) { c.JSON(http.StatusOK, response) } +func (h *UserHandler) SelfAccountRecovery(c *gin.Context) { + token := c.Query("token") + if token == "" { + handler.Error(c, stacktrace.Propagate(ente.NewBadRequestWithMessage("token missing"), "token is required")) + return + } + err := h.UserController.HandleSelfAccountRecovery(c, token) + if err != nil { + logrus.WithError(err). + WithFields(logrus.Fields{ + "req_id": requestid.Get(c), + }).Warning("Failed to handle self account recovery") + c.HTML(http.StatusOK, "account_recovery_error.html", gin.H{}) + return + } + c.HTML(http.StatusOK, "account_recovered.html", gin.H{}) +} + // GetSRPAttributes returns the SRP attributes for a user func (h *UserHandler) GetSRPAttributes(c *gin.Context) { var request ente.GetSRPAttributesRequest diff --git a/server/pkg/api/userentity.go b/server/pkg/api/userentity.go index 492e9c3bd9..acda89a09e 100644 --- a/server/pkg/api/userentity.go +++ b/server/pkg/api/userentity.go @@ -47,7 +47,7 @@ func (h *UserEntityHandler) GetKey(c *gin.Context) { } resp, err := h.Controller.GetKey(c, request) if err != nil { - handler.Error(c, stacktrace.Propagate(err, "Failed to create CreateKey")) + handler.Error(c, stacktrace.Propagate(err, "Failed to Get EntityKey")) return } c.JSON(http.StatusOK, resp) @@ -67,7 +67,7 @@ func (h *UserEntityHandler) CreateEntity(c *gin.Context) { } resp, err := h.Controller.CreateEntity(c, request) if err != nil { - handler.Error(c, stacktrace.Propagate(err, "Failed to create CreateEntity")) + handler.Error(c, stacktrace.Propagate(err, "Failed to create CreateEntityKey")) return } c.JSON(http.StatusOK, resp) @@ -83,7 +83,7 @@ func (h *UserEntityHandler) UpdateEntity(c *gin.Context) { } resp, err := h.Controller.UpdateEntity(c, request) if err != nil { - handler.Error(c, stacktrace.Propagate(err, "Failed to update UpdateEntity")) + handler.Error(c, stacktrace.Propagate(err, "Failed to update EntityKey")) return } c.JSON(http.StatusOK, resp) @@ -94,7 +94,7 @@ func (h *UserEntityHandler) DeleteEntity(c *gin.Context) { id := c.Query("id") _, err := h.Controller.Delete(c, id) if err != nil { - handler.Error(c, stacktrace.Propagate(err, "Failed to delete DeleteEntity")) + handler.Error(c, stacktrace.Propagate(err, "Failed to delete EntityKey")) return } c.Status(http.StatusOK) diff --git a/server/pkg/controller/file.go b/server/pkg/controller/file.go index 4deb658fc6..98e58dd589 100644 --- a/server/pkg/controller/file.go +++ b/server/pkg/controller/file.go @@ -6,6 +6,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/ente-io/museum/pkg/controller/access" "runtime/debug" "strconv" "strings" @@ -44,6 +45,7 @@ type FileController struct { CollectionRepo *repo.CollectionRepository TaskLockingRepo *repo.TaskLockRepository QueueRepo *repo.QueueRepository + AccessCtrl access.Controller S3Config *s3config.S3Config ObjectCleanupCtrl *ObjectCleanupController LockController *lock.LockController @@ -317,8 +319,10 @@ func (c *FileController) GetUploadURLs(ctx context.Context, userID int64, count // GetFileURL verifies permissions and returns a presigned url to the requested file func (c *FileController) GetFileURL(ctx *gin.Context, userID int64, fileID int64) (string, error) { - err := c.verifyFileAccess(userID, fileID) - if err != nil { + if err := c.AccessCtrl.CanAccessFile(ctx, &access.CanAccessFileParams{ + ActorUserID: userID, + FileIDs: []int64{fileID}, + }); err != nil { return "", stacktrace.Propagate(err, "") } url, err := c.getSignedURLForType(ctx, fileID, ente.FILE) @@ -333,8 +337,10 @@ func (c *FileController) GetFileURL(ctx *gin.Context, userID int64, fileID int64 // GetThumbnailURL verifies permissions and returns a presigned url to the requested thumbnail func (c *FileController) GetThumbnailURL(ctx *gin.Context, userID int64, fileID int64) (string, error) { - err := c.verifyFileAccess(userID, fileID) - if err != nil { + if err := c.AccessCtrl.CanAccessFile(ctx, &access.CanAccessFileParams{ + ActorUserID: userID, + FileIDs: []int64{fileID}, + }); err != nil { return "", stacktrace.Propagate(err, "") } url, err := c.getSignedURLForType(ctx, fileID, ente.THUMBNAIL) @@ -376,30 +382,24 @@ func (c *FileController) CleanUpStaleCollectionFiles(userID int64, fileID int64) } -// GetPublicFileURL verifies permissions and returns a presigned url to the requested file -func (c *FileController) GetPublicFileURL(ctx *gin.Context, fileID int64, objType ente.ObjectType) (string, error) { - accessContext := auth.MustGetPublicAccessContext(ctx) - accessible, err := c.CollectionRepo.DoesFileExistInCollections(fileID, []int64{accessContext.CollectionID}) - if err != nil { +// GetPublicOrCastFileURL verifies permissions and returns a presigned url to the requested file +func (c *FileController) GetPublicOrCastFileURL(ctx *gin.Context, fileID int64, objType ente.ObjectType, collectionID int64) (string, error) { + // validate that the given fileID is present in the corresponding collection for public album or cast session + if err := c.DoesFileExistInCollection(ctx, fileID, collectionID); err != nil { return "", stacktrace.Propagate(err, "") } - if !accessible { - return "", stacktrace.Propagate(ente.ErrPermissionDenied, "") - } return c.getSignedURLForType(ctx, fileID, objType) } -// GetCastFileUrl verifies permissions and returns a presigned url to the requested file -func (c *FileController) GetCastFileUrl(ctx *gin.Context, fileID int64, objType ente.ObjectType) (string, error) { - castCtx := auth.GetCastCtx(ctx) - accessible, err := c.CollectionRepo.DoesFileExistInCollections(fileID, []int64{castCtx.CollectionID}) +func (c *FileController) DoesFileExistInCollection(ctx *gin.Context, fileID int64, collectionID int64) error { + accessible, err := c.CollectionRepo.DoesFileExistInCollections(fileID, []int64{collectionID}) if err != nil { - return "", stacktrace.Propagate(err, "") + return stacktrace.Propagate(err, "") } if !accessible { - return "", stacktrace.Propagate(ente.ErrPermissionDenied, "") + return stacktrace.Propagate(ente.ErrPermissionDenied, "") } - return c.getSignedURLForType(ctx, fileID, objType) + return nil } func (c *FileController) getSignedURLForType(ctx *gin.Context, fileID int64, objType ente.ObjectType) (string, error) { @@ -969,34 +969,6 @@ func (c *FileController) deleteObjectVersionFromHotStorage(objectKey string, ver return nil } -func (c *FileController) verifyFileAccess(actorUserID int64, fileID int64) error { - fileOwnerID, err := c.FileRepo.GetOwnerID(fileID) - if err != nil { - return stacktrace.Propagate(err, "") - } - - if fileOwnerID != actorUserID { - cIDs, err := c.CollectionRepo.GetCollectionIDsSharedWithUser(actorUserID) - if err != nil { - return stacktrace.Propagate(err, "") - } - cwIDS, err := c.CollectionRepo.GetCollectionIDsSharedWithUser(fileOwnerID) - if err != nil { - return stacktrace.Propagate(err, "") - } - cIDs = append(cIDs, cwIDS...) - - accessible, err := c.CollectionRepo.DoesFileExistInCollections(fileID, cIDs) - if err != nil { - return stacktrace.Propagate(err, "") - } - if !accessible { - return stacktrace.Propagate(ente.ErrPermissionDenied, "") - } - } - return nil -} - func (c *FileController) getObjectURL(s3Client *s3.S3, dc string, bucket *string, objectKey string) (ente.UploadURL, error) { r, _ := s3Client.PutObjectRequest(&s3.PutObjectInput{ Bucket: bucket, diff --git a/server/pkg/controller/filedata/controller.go b/server/pkg/controller/filedata/controller.go index d97cf5e42c..56eaeef398 100644 --- a/server/pkg/controller/filedata/controller.go +++ b/server/pkg/controller/filedata/controller.go @@ -129,12 +129,11 @@ func (c *Controller) InsertOrUpdateMetadata(ctx *gin.Context, req *fileData.PutF return nil } -func (c *Controller) GetFileData(ctx *gin.Context, req fileData.GetFileData) (*fileData.Entity, error) { - userID := auth.GetUserID(ctx.Request.Header) +func (c *Controller) GetFileData(ctx *gin.Context, actorUser int64, req fileData.GetFileData) (*fileData.Entity, error) { if err := req.Validate(); err != nil { return nil, stacktrace.Propagate(err, "validation failed") } - if err := c._checkMetadataReadOrWritePerm(ctx, userID, []int64{req.FileID}); err != nil { + if err := c._checkMetadataReadOrWritePerm(ctx, actorUser, []int64{req.FileID}); err != nil { return nil, stacktrace.Propagate(err, "") } doRows, err := c.Repo.GetFilesData(ctx, req.Type, []int64{req.FileID}) diff --git a/server/pkg/controller/filedata/preview_files.go b/server/pkg/controller/filedata/preview_files.go index 32a001e029..50e5d65415 100644 --- a/server/pkg/controller/filedata/preview_files.go +++ b/server/pkg/controller/filedata/preview_files.go @@ -8,11 +8,10 @@ import ( "github.com/gin-gonic/gin" ) -func (c *Controller) GetPreviewUrl(ctx *gin.Context, request filedata.GetPreviewURLRequest) (*string, error) { +func (c *Controller) GetPreviewUrl(ctx *gin.Context, actorUser int64, request filedata.GetPreviewURLRequest) (*string, error) { if err := request.Validate(); err != nil { return nil, err } - actorUser := auth.GetUserID(ctx.Request.Header) if err := c._checkMetadataReadOrWritePerm(ctx, actorUser, []int64{request.FileID}); err != nil { return nil, err } diff --git a/server/pkg/controller/filedata/s3.go b/server/pkg/controller/filedata/s3.go index 8b820f7028..80dde4b363 100644 --- a/server/pkg/controller/filedata/s3.go +++ b/server/pkg/controller/filedata/s3.go @@ -15,6 +15,7 @@ import ( log "github.com/sirupsen/logrus" "io" "os" + "strings" stime "time" ) @@ -86,10 +87,18 @@ func (c *Controller) uploadObject(obj fileData.S3FileMetadata, objectKey string, Key: &objectKey, Body: bytes.NewReader(embeddingObj), } - result, err := uploader.Upload(&up) + var err error + var result *s3manager.UploadOutput + for retries := 0; retries < 3; retries++ { + result, err = uploader.Upload(&up) + if err == nil || !strings.Contains(err.Error(), "connection reset by peer") { + break + } + stime.Sleep(50 * stime.Millisecond) + } if err != nil { log.Error(err) - return -1, stacktrace.Propagate(err, "") + return -1, stacktrace.Propagate(err, "metadata upload failed") } log.Infof("Uploaded to bucket %s", result.Location) return int64(len(embeddingObj)), nil diff --git a/server/pkg/controller/user/jwt.go b/server/pkg/controller/user/jwt.go index d804f4cef3..2e19805050 100644 --- a/server/pkg/controller/user/jwt.go +++ b/server/pkg/controller/user/jwt.go @@ -2,7 +2,7 @@ package user import ( "fmt" - + "github.com/ente-io/museum/ente" enteJWT "github.com/ente-io/museum/ente/jwt" "github.com/ente-io/museum/pkg/utils/time" "github.com/ente-io/stacktrace" @@ -17,13 +17,18 @@ func (c *UserController) GetJWTToken(userID int64, scope enteJWT.ClaimScope) (st if scope == enteJWT.ACCOUNTS { tokenExpiry = time.NMinFromNow(30) } - // Create a new token object, specifying signing method and the claims - // you would like it to contain. - token := jwt.NewWithClaims(jwt.SigningMethodHS256, &enteJWT.WebCommonJWTClaim{ + claim := enteJWT.WebCommonJWTClaim{ UserID: userID, ExpiryTime: tokenExpiry, ClaimScope: &scope, - }) + } + return c.GetJWTTokenForClaim(&claim) +} + +func (c *UserController) GetJWTTokenForClaim(claim *enteJWT.WebCommonJWTClaim) (string, error) { + // Create a new token object, specifying signing method and the claims + // you would like it to contain. + token := jwt.NewWithClaims(jwt.SigningMethodHS256, claim) // Sign and get the complete encoded token as a string using the secret tokenString, err := token.SignedString(c.JwtSecret) @@ -33,7 +38,7 @@ func (c *UserController) GetJWTToken(userID int64, scope enteJWT.ClaimScope) (st return tokenString, nil } -func (c *UserController) ValidateJWTToken(jwtToken string, scope enteJWT.ClaimScope) (int64, error) { +func (c *UserController) ValidateJWTToken(jwtToken string, scope enteJWT.ClaimScope) (*enteJWT.WebCommonJWTClaim, error) { token, err := jwt.ParseWithClaims(jwtToken, &enteJWT.WebCommonJWTClaim{}, func(token *jwt.Token) (interface{}, error) { if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok { return nil, stacktrace.Propagate(fmt.Errorf("unexpected signing method: %v", token.Header["alg"]), "") @@ -41,14 +46,17 @@ func (c *UserController) ValidateJWTToken(jwtToken string, scope enteJWT.ClaimSc return c.JwtSecret, nil }) if err != nil { - return -1, stacktrace.Propagate(err, "JWT parsed failed") + if ve, ok := err.(*jwt.ValidationError); ok && ve.Error() == "token expired" { + return nil, stacktrace.Propagate(ente.NewBadRequestWithMessage("token expired"), "") + } + return nil, stacktrace.Propagate(err, "JWT parsed failed") } claims, ok := token.Claims.(*enteJWT.WebCommonJWTClaim) if ok && token.Valid { if claims.GetScope() != scope { - return -1, stacktrace.Propagate(fmt.Errorf("recived claimScope %s is different than expected scope: %s", claims.GetScope(), scope), "") + return nil, stacktrace.Propagate(fmt.Errorf("recived claimScope %s is different than expected scope: %s", claims.GetScope(), scope), "") } - return claims.UserID, nil + return claims, nil } - return -1, stacktrace.Propagate(err, "JWT claim failed") + return nil, stacktrace.Propagate(err, "JWT claim failed") } diff --git a/server/pkg/controller/user/user.go b/server/pkg/controller/user/user.go index c72d50546b..405df08854 100644 --- a/server/pkg/controller/user/user.go +++ b/server/pkg/controller/user/user.go @@ -1,10 +1,13 @@ package user import ( + "database/sql" "errors" "fmt" + enteJWT "github.com/ente-io/museum/ente/jwt" "github.com/ente-io/museum/pkg/controller/collections" "github.com/ente-io/museum/pkg/repo/two_factor_recovery" + "github.com/ente-io/museum/pkg/utils/time" "strings" cache2 "github.com/ente-io/museum/ente/cache" @@ -271,7 +274,7 @@ func (c *UserController) HandleAccountDeletion(ctx *gin.Context, userID int64, l return nil, stacktrace.Propagate(err, "") } - go c.NotifyAccountDeletion(email, isSubscriptionCancelled) + go c.NotifyAccountDeletion(userID, email, isSubscriptionCancelled) return &ente.DeleteAccountResponse{ IsSubscriptionCancelled: isSubscriptionCancelled, @@ -280,23 +283,70 @@ func (c *UserController) HandleAccountDeletion(ctx *gin.Context, userID int64, l } -func (c *UserController) NotifyAccountDeletion(userEmail string, isSubscriptionCancelled bool) { +func (c *UserController) NotifyAccountDeletion(userID int64, userEmail string, isSubscriptionCancelled bool) { template := AccountDeletedEmailTemplate if !isSubscriptionCancelled { template = AccountDeletedWithActiveSubscriptionEmailTemplate } + recoverToken, err2 := c.GetJWTTokenForClaim(&enteJWT.WebCommonJWTClaim{ + UserID: userID, + ExpiryTime: time.MicrosecondsAfterDays(7), + ClaimScope: enteJWT.RestoreAccount.Ptr(), + Email: userEmail, + }) + if err2 != nil { + logrus.WithError(err2).Error("failed to generate recover token") + return + } + + templateData := make(map[string]interface{}) + templateData["AccountRecoveryLink"] = fmt.Sprintf("%s/users/recover-account?token=%s", "https://api.ente.io", recoverToken) err := email.SendTemplatedEmail([]string{userEmail}, "ente", "team@ente.io", - AccountDeletedEmailSubject, template, nil, nil) + AccountDeletedEmailSubject, template, templateData, nil) if err != nil { logrus.WithError(err).Errorf("Failed to send the account deletion email to %s", userEmail) } } +func (c *UserController) HandleSelfAccountRecovery(ctx *gin.Context, token string) error { + jwtToken, err := c.ValidateJWTToken(token, enteJWT.RestoreAccount) + if err != nil { + return stacktrace.Propagate(ente.NewPermissionDeniedError("invalid token"), fmt.Sprintf("failed to validate jwt token: %s", err.Error())) + } + if jwtToken.UserID == 0 || jwtToken.Email == "" { + return stacktrace.Propagate(ente.NewBadRequestError(&ente.ApiErrorParams{ + Message: "Invalid token", + }), "userID or email is empty") + } + if jwtToken.ExpiryTime < time.Microseconds() { + return stacktrace.Propagate(ente.NewBadRequestError(&ente.ApiErrorParams{ + Message: "Token expired", + }), "") + } + // check if account is already recovered + if user, userErr := c.UserRepo.Get(jwtToken.UserID); userErr == nil { + if strings.EqualFold(user.Email, jwtToken.Email) { + logrus.WithField("userID", jwtToken.UserID).Error("account is already recovered") + return nil + } + } + return c.HandleAccountRecovery(ctx, ente.RecoverAccountRequest{ + UserID: jwtToken.UserID, + EmailID: jwtToken.Email, + }) +} func (c *UserController) HandleAccountRecovery(ctx *gin.Context, req ente.RecoverAccountRequest) error { + logger := logrus.WithFields(logrus.Fields{ + "req_id": ctx.GetString("req_id"), + "req_ctx": "account_recovery", + "email": req.EmailID, + "userID": req.UserID, + }) + logger.Info("initiating account recovery") _, err := c.UserRepo.Get(req.UserID) if err == nil { return stacktrace.Propagate(ente.NewBadRequestError(&ente.ApiErrorParams{ - Message: "User ID is linked to undeleted account", + Message: "account is already recovered or userID is linked to another active account", }), "") } if !errors.Is(err, ente.ErrUserDeleted) { @@ -304,6 +354,9 @@ func (c *UserController) HandleAccountRecovery(ctx *gin.Context, req ente.Recove } // check if the user keyAttributes are still available if _, keyErr := c.UserRepo.GetKeyAttributes(req.UserID); keyErr != nil { + if errors.Is(keyErr, sql.ErrNoRows) { + return stacktrace.Propagate(ente.NewBadRequestWithMessage("account can not be recovered now"), "") + } return stacktrace.Propagate(keyErr, "keyAttributes missing? Account can not be recovered") } email := strings.ToLower(req.EmailID) diff --git a/server/pkg/controller/user/user_delete.go b/server/pkg/controller/user/user_delete.go index 8dddec5727..a7257174a3 100644 --- a/server/pkg/controller/user/user_delete.go +++ b/server/pkg/controller/user/user_delete.go @@ -63,11 +63,11 @@ func (c *UserController) GetDeleteChallengeToken(ctx *gin.Context) (*ente.Delete func (c *UserController) SelfDeleteAccount(ctx *gin.Context, req ente.DeleteAccountRequest) (*ente.DeleteAccountResponse, error) { userID := auth.GetUserID(ctx.Request.Header) - tokenUserID, err := c.ValidateJWTToken(req.Challenge, enteJWT.DELETE_ACCOUNT) + claim, err := c.ValidateJWTToken(req.Challenge, enteJWT.DELETE_ACCOUNT) if err != nil { return nil, stacktrace.Propagate(err, "failed to validate jwt token") } - if tokenUserID != userID { + if claim.UserID != userID { return nil, stacktrace.Propagate(ente.ErrPermissionDenied, "jwtToken belongs to different user") } user, err := c.UserRepo.Get(userID) diff --git a/server/pkg/controller/user/userauth.go b/server/pkg/controller/user/userauth.go index 8d66023e98..eece21674b 100644 --- a/server/pkg/controller/user/userauth.go +++ b/server/pkg/controller/user/userauth.go @@ -88,19 +88,22 @@ func (c *UserController) SendEmailOTT(context *gin.Context, email string, purpos return err } } - if purpose == ente.SignUpOTTPurpose || purpose == ente.LoginOTTPurpose { - isComplete, err := c.isSignUpComplete(email) - if err != nil { - return stacktrace.Propagate(err, "") - } - if isComplete && purpose == ente.SignUpOTTPurpose { - return stacktrace.Propagate(ente.ErrUserAlreadyRegistered, "user has already completed sign up process") - } - if !isComplete && purpose == ente.LoginOTTPurpose { - return stacktrace.Propagate(ente.ErrUserNotRegistered, "user has not completed sign up process") - } + isSignUpComplete, err := c.isSignUpComplete(email) + if err != nil { + return stacktrace.Propagate(err, "") } + if purpose == ente.SignUpOTTPurpose && isSignUpComplete { + return stacktrace.Propagate(ente.ErrUserAlreadyRegistered, "user has already completed sign up process") + } + if purpose == ente.SignUpOTTPurpose && viper.GetBool("internal.disable-registration") && !isSignUpComplete { + return stacktrace.Propagate(ente.ErrPermissionDenied, "registration is disabled") + } + + if purpose == ente.LoginOTTPurpose && !isSignUpComplete { + return stacktrace.Propagate(ente.ErrUserNotRegistered, "user has not completed sign up process") + } + ott, err := random.GenerateSixDigitOtp() if err != nil { return stacktrace.Propagate(err, "") diff --git a/server/pkg/middleware/auth.go b/server/pkg/middleware/auth.go index 3113043a58..cd3c387fce 100644 --- a/server/pkg/middleware/auth.go +++ b/server/pkg/middleware/auth.go @@ -48,7 +48,12 @@ func (m *AuthMiddleware) TokenAuthMiddleware(jwtClaimScope *jwt.ClaimScope) gin. var err error if !found { if isJWT { - userID, err = m.UserController.ValidateJWTToken(token, *jwtClaimScope) + claim, claimErr := m.UserController.ValidateJWTToken(token, *jwtClaimScope) + if claimErr != nil { + err = claimErr + } else { + userID = claim.UserID + } } else { userID, err = m.UserAuthRepo.GetUserIDWithToken(token, app) if err != nil && !errors.Is(err, sql.ErrNoRows) { diff --git a/server/pkg/repo/family.go b/server/pkg/repo/family.go index fad14d89aa..667b58f7ac 100644 --- a/server/pkg/repo/family.go +++ b/server/pkg/repo/family.go @@ -57,27 +57,18 @@ func (repo *FamilyRepository) CloseFamily(ctx context.Context, adminID int64) er if err != nil { return stacktrace.Propagate(err, "") } - affectResult, err := tx.ExecContext(ctx, `DELETE FROM families WHERE admin_id = $1`, adminID) + _, err = tx.ExecContext(ctx, `DELETE FROM families WHERE admin_id = $1`, adminID) if err != nil { tx.Rollback() return stacktrace.Propagate(err, "") } - affected, err := affectResult.RowsAffected() - if err != nil { - tx.Rollback() - return stacktrace.Propagate(err, "") - } - if affected != 1 { - tx.Rollback() - return stacktrace.Propagate(errors.New("exactly one row should be deleted"), "") - } affectedRows, err := tx.ExecContext(ctx, `UPDATE users SET family_admin_id = null WHERE family_admin_id = $1`, adminID) if err != nil { tx.Rollback() return stacktrace.Propagate(err, "") } - affected, err = affectedRows.RowsAffected() + affected, err := affectedRows.RowsAffected() if err != nil { tx.Rollback() return stacktrace.Propagate(err, "") diff --git a/server/pkg/utils/config/config.go b/server/pkg/utils/config/config.go index b78d89b908..0d9c18c6f8 100644 --- a/server/pkg/utils/config/config.go +++ b/server/pkg/utils/config/config.go @@ -8,9 +8,11 @@ // // The names of the OS environment variables should be // -// - prefixed with 'ENTE_' +// - prefixed with 'ENTE_', // -// - uppercased versions of the config file variable names +// - uppercased versions of the config file variable names, +// +// - dashes are replaced with '_', // // - for nested config variables, dots should be replaced with '_'. // @@ -19,7 +21,7 @@ // foo: // bar-baz: quux // -// would be `ENTE_FOO_BAR-BAZ`. +// would be `ENTE_FOO_BAR_BAZ`. package config import ( @@ -39,7 +41,9 @@ func ConfigureViper(environment string) error { // Set the prefix for the environment variables that Viper will look for. viper.SetEnvPrefix("ENTE") // Ask Viper to look for underscores (instead of dots) for nested configs. - viper.SetEnvKeyReplacer(strings.NewReplacer(`.`, `_`)) + // Also replace "-" with underscores since "-" cannot be used in environment + // variable names. + viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_", "-", "_")) viper.SetConfigFile("configurations/" + environment + ".yaml") err := viper.ReadInConfig() diff --git a/server/quickstart.sh b/server/quickstart.sh index 51402e2fc3..1a091e3d4f 100755 --- a/server/quickstart.sh +++ b/server/quickstart.sh @@ -10,7 +10,7 @@ set -e dcv="" if command -v docker >/dev/null then - dcv=`docker compose version --short 2>/dev/null` + dcv=`docker compose version --short 2>/dev/null || echo` fi if test -z "$dcv" diff --git a/server/scripts/deploy/museum.nginx.service b/server/scripts/deploy/museum.nginx.service index 3a8b0b653e..56888f9422 100644 --- a/server/scripts/deploy/museum.nginx.service +++ b/server/scripts/deploy/museum.nginx.service @@ -12,7 +12,7 @@ ExecStartPre=-docker stop museum ExecStartPre=-docker rm museum ExecStart=docker run --name museum \ -e ENVIRONMENT=production \ - -e ENTE_HTTP_USE-TLS=0 \ + -e ENTE_HTTP_USE_TLS=0 \ --hostname "%H" \ -p 8080:8080 \ -p 2112:2112 \ diff --git a/server/web-templates/account_recovered.html b/server/web-templates/account_recovered.html new file mode 100644 index 0000000000..9e2ed50699 --- /dev/null +++ b/server/web-templates/account_recovered.html @@ -0,0 +1,141 @@ + + + + + Account recovered + + + +
 
+
+

Your Ente account has been recovered.

+ +

You can now log in with your email address and password.

+ +

If you need help, please reach out to support@ente.io.

+
+ + +
+ + + diff --git a/server/web-templates/account_recovery_error.html b/server/web-templates/account_recovery_error.html new file mode 100644 index 0000000000..3e3e6a7c14 --- /dev/null +++ b/server/web-templates/account_recovery_error.html @@ -0,0 +1,139 @@ + + + + + Account recovery unsuccessful + + + +
 
+
+

Sorry, we could not recover your account.

+ +

If you need help, please reach out to support@ente.io.

+
+ + +
+ + + diff --git a/web/Dockerfile b/web/Dockerfile index b2f9ce4e4e..4b0f4020e7 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -1,6 +1,6 @@ # Docs - https://github.com/ente-io/ente/blob/main/web/docs/docker.md -FROM node:20-alpine AS builder +FROM node:22-alpine AS builder WORKDIR /build COPY . . diff --git a/web/apps/accounts/eslint.config.mjs b/web/apps/accounts/eslint.config.mjs index 06dd5eefb9..641d994d1e 100644 --- a/web/apps/accounts/eslint.config.mjs +++ b/web/apps/accounts/eslint.config.mjs @@ -1 +1 @@ -export { default } from "@/build-config/eslintrc-next-app.mjs"; +export { default } from "ente-build-config/eslintrc-next-app.mjs"; diff --git a/web/apps/accounts/next.config.js b/web/apps/accounts/next.config.js index 5b4c97eaea..5a52794ab2 100644 --- a/web/apps/accounts/next.config.js +++ b/web/apps/accounts/next.config.js @@ -1 +1 @@ -module.exports = require("@/base/next.config.base.js"); +module.exports = require("ente-base/next.config.base.js"); diff --git a/web/apps/accounts/package.json b/web/apps/accounts/package.json index 279c86a264..4095252b32 100644 --- a/web/apps/accounts/package.json +++ b/web/apps/accounts/package.json @@ -3,11 +3,11 @@ "version": "0.0.0", "private": true, "dependencies": { - "@/accounts": "*", - "@/base": "*", - "@ente/shared": "*" + "ente-accounts": "*", + "ente-base": "*", + "ente-shared": "*" }, "devDependencies": { - "@/build-config": "*" + "ente-build-config": "*" } } diff --git a/web/apps/accounts/src/pages/_app.tsx b/web/apps/accounts/src/pages/_app.tsx index 785150f50d..37ae448e14 100644 --- a/web/apps/accounts/src/pages/_app.tsx +++ b/web/apps/accounts/src/pages/_app.tsx @@ -1,15 +1,18 @@ -import { staticAppTitle } from "@/base/app"; -import { assertionFailed } from "@/base/assert"; -import { CustomHead } from "@/base/components/Head"; -import { LoadingIndicator } from "@/base/components/loaders"; -import { AttributedMiniDialog } from "@/base/components/MiniDialog"; -import { useAttributedMiniDialog } from "@/base/components/utils/dialog"; -import { useSetupI18n, useSetupLogs } from "@/base/components/utils/hooks-app"; -import { photosTheme } from "@/base/components/utils/theme"; -import { BaseContext, deriveBaseContext } from "@/base/context"; import "@fontsource-variable/inter"; import { CssBaseline } from "@mui/material"; import { ThemeProvider } from "@mui/material/styles"; +import { staticAppTitle } from "ente-base/app"; +import { assertionFailed } from "ente-base/assert"; +import { CustomHead } from "ente-base/components/Head"; +import { LoadingIndicator } from "ente-base/components/loaders"; +import { AttributedMiniDialog } from "ente-base/components/MiniDialog"; +import { useAttributedMiniDialog } from "ente-base/components/utils/dialog"; +import { + useSetupI18n, + useSetupLogs, +} from "ente-base/components/utils/hooks-app"; +import { photosTheme } from "ente-base/components/utils/theme"; +import { BaseContext, deriveBaseContext } from "ente-base/context"; import { t } from "i18next"; import type { AppProps } from "next/app"; import React, { useMemo } from "react"; diff --git a/web/apps/accounts/src/pages/passkeys/index.tsx b/web/apps/accounts/src/pages/passkeys/index.tsx index 3e3a553907..671ea54876 100644 --- a/web/apps/accounts/src/pages/passkeys/index.tsx +++ b/web/apps/accounts/src/pages/passkeys/index.tsx @@ -1,25 +1,25 @@ -import { EnteLogo } from "@/base/components/EnteLogo"; -import { SidebarDrawer } from "@/base/components/mui/SidebarDrawer"; -import { NavbarBase } from "@/base/components/Navbar"; -import { - RowButton, - RowButtonDivider, - RowButtonGroup, -} from "@/base/components/RowButton"; -import { SingleInputDialog } from "@/base/components/SingleInputDialog"; -import { Titlebar } from "@/base/components/Titlebar"; -import { errorDialogAttributes } from "@/base/components/utils/dialog"; -import { useModalVisibility } from "@/base/components/utils/modal"; -import { useBaseContext } from "@/base/context"; -import { formattedDateTime } from "@/base/i18n-date"; -import log from "@/base/log"; -import SingleInputForm from "@ente/shared/components/SingleInputForm"; import CalendarTodayIcon from "@mui/icons-material/CalendarToday"; import ChevronRightIcon from "@mui/icons-material/ChevronRight"; import DeleteIcon from "@mui/icons-material/Delete"; import EditIcon from "@mui/icons-material/Edit"; import KeyIcon from "@mui/icons-material/Key"; import { Box, Paper, Stack, Typography, styled } from "@mui/material"; +import { EnteLogo } from "ente-base/components/EnteLogo"; +import { SidebarDrawer } from "ente-base/components/mui/SidebarDrawer"; +import { NavbarBase } from "ente-base/components/Navbar"; +import { + RowButton, + RowButtonDivider, + RowButtonGroup, +} from "ente-base/components/RowButton"; +import { SingleInputDialog } from "ente-base/components/SingleInputDialog"; +import { Titlebar } from "ente-base/components/Titlebar"; +import { errorDialogAttributes } from "ente-base/components/utils/dialog"; +import { useModalVisibility } from "ente-base/components/utils/modal"; +import { useBaseContext } from "ente-base/context"; +import { formattedDateTime } from "ente-base/i18n-date"; +import log from "ente-base/log"; +import SingleInputForm from "ente-shared/components/SingleInputForm"; import { t } from "i18next"; import React, { useCallback, useEffect, useState } from "react"; import { @@ -237,7 +237,7 @@ interface ManagePasskeyDrawerProps { */ passkey: Passkey | undefined; /** - * Callback to invoke when the passkey in the modifed or deleted. + * Callback to invoke when the passkey in the modified or deleted. * * The passkey that the drawer is showing will be out of date at this point, * so the list of passkeys should be refreshed and the drawer closed. diff --git a/web/apps/accounts/src/pages/passkeys/verify.tsx b/web/apps/accounts/src/pages/passkeys/verify.tsx index 88be539335..b91c13a967 100644 --- a/web/apps/accounts/src/pages/passkeys/verify.tsx +++ b/web/apps/accounts/src/pages/passkeys/verify.tsx @@ -1,12 +1,12 @@ -import { TwoFactorAuthorizationResponse } from "@/accounts/services/user"; -import { Stack100vhCenter } from "@/base/components/containers"; -import { ActivityIndicator } from "@/base/components/mui/ActivityIndicator"; -import { FocusVisibleButton } from "@/base/components/mui/FocusVisibleButton"; -import log from "@/base/log"; -import { nullToUndefined } from "@/utils/transform"; import InfoIcon from "@mui/icons-material/Info"; import KeyIcon from "@mui/icons-material/Key"; import { Paper, Typography, styled } from "@mui/material"; +import { TwoFactorAuthorizationResponse } from "ente-accounts/services/user"; +import { Stack100vhCenter } from "ente-base/components/containers"; +import { ActivityIndicator } from "ente-base/components/mui/ActivityIndicator"; +import { FocusVisibleButton } from "ente-base/components/mui/FocusVisibleButton"; +import log from "ente-base/log"; +import { nullToUndefined } from "ente-utils/transform"; import { t } from "i18next"; import React, { useCallback, useEffect, useState } from "react"; import { diff --git a/web/apps/accounts/src/services/passkey.ts b/web/apps/accounts/src/services/passkey.ts index e15ce7b956..7e7f10f39b 100644 --- a/web/apps/accounts/src/services/passkey.ts +++ b/web/apps/accounts/src/services/passkey.ts @@ -1,14 +1,14 @@ -import { TwoFactorAuthorizationResponse } from "@/accounts/services/user"; -import { clientPackageName } from "@/base/app"; +import { TwoFactorAuthorizationResponse } from "ente-accounts/services/user"; +import { clientPackageName } from "ente-base/app"; import { fromB64URLSafeNoPadding, toB64URLSafeNoPadding, toB64URLSafeNoPaddingString, -} from "@/base/crypto/libsodium"; -import { isDevBuild } from "@/base/env"; -import { ensureOk, HTTPError, publicRequestHeaders } from "@/base/http"; -import { apiURL } from "@/base/origins"; -import { nullToUndefined } from "@/utils/transform"; +} from "ente-base/crypto/libsodium"; +import { isDevBuild } from "ente-base/env"; +import { ensureOk, HTTPError, publicRequestHeaders } from "ente-base/http"; +import { apiURL } from "ente-base/origins"; +import { nullToUndefined } from "ente-utils/transform"; import { z } from "zod"; /** Return true if the user's browser supports WebAuthn (Passkeys). */ diff --git a/web/apps/accounts/tsconfig.json b/web/apps/accounts/tsconfig.json index 8e6cbbeecf..cd371d81f7 100644 --- a/web/apps/accounts/tsconfig.json +++ b/web/apps/accounts/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@/build-config/tsconfig-next.json", + "extends": "ente-build-config/tsconfig-next.json", "compilerOptions": { /* Set the base directory from which to resolve bare module names. */ "baseUrl": "./src" diff --git a/web/apps/auth/eslint.config.mjs b/web/apps/auth/eslint.config.mjs index 06dd5eefb9..641d994d1e 100644 --- a/web/apps/auth/eslint.config.mjs +++ b/web/apps/auth/eslint.config.mjs @@ -1 +1 @@ -export { default } from "@/build-config/eslintrc-next-app.mjs"; +export { default } from "ente-build-config/eslintrc-next-app.mjs"; diff --git a/web/apps/auth/next.config.js b/web/apps/auth/next.config.js index 5b4c97eaea..5a52794ab2 100644 --- a/web/apps/auth/next.config.js +++ b/web/apps/auth/next.config.js @@ -1 +1 @@ -module.exports = require("@/base/next.config.base.js"); +module.exports = require("ente-base/next.config.base.js"); diff --git a/web/apps/auth/package.json b/web/apps/auth/package.json index 7ec5749d3c..c63c199f16 100644 --- a/web/apps/auth/package.json +++ b/web/apps/auth/package.json @@ -3,13 +3,13 @@ "version": "0.0.0", "private": true, "dependencies": { - "@/accounts": "*", - "@/base": "*", - "@ente/shared": "*", + "ente-accounts": "*", + "ente-base": "*", + "ente-shared": "*", "jssha": "~3.3.1", "otpauth": "9.2.4" }, "devDependencies": { - "@/build-config": "*" + "ente-build-config": "*" } } diff --git a/web/apps/auth/src/pages/404.tsx b/web/apps/auth/src/pages/404.tsx index 201a7b79ff..6897a1afe6 100644 --- a/web/apps/auth/src/pages/404.tsx +++ b/web/apps/auth/src/pages/404.tsx @@ -1 +1 @@ -export { default } from "@/base/components/pages/404"; +export { default } from "ente-base/components/pages/404"; diff --git a/web/apps/auth/src/pages/_app.tsx b/web/apps/auth/src/pages/_app.tsx index 4933d53356..c65139559e 100644 --- a/web/apps/auth/src/pages/_app.tsx +++ b/web/apps/auth/src/pages/_app.tsx @@ -1,26 +1,26 @@ -import { accountLogout } from "@/accounts/services/logout"; -import { clientPackageName, staticAppTitle } from "@/base/app"; -import { CustomHead } from "@/base/components/Head"; +import "@fontsource-variable/inter"; +import { CssBaseline } from "@mui/material"; +import { ThemeProvider } from "@mui/material/styles"; +import { accountLogout } from "ente-accounts/services/logout"; +import { clientPackageName, staticAppTitle } from "ente-base/app"; +import { CustomHead } from "ente-base/components/Head"; import { LoadingIndicator, TranslucentLoadingOverlay, -} from "@/base/components/loaders"; -import { AttributedMiniDialog } from "@/base/components/MiniDialog"; -import { useAttributedMiniDialog } from "@/base/components/utils/dialog"; +} from "ente-base/components/loaders"; +import { AttributedMiniDialog } from "ente-base/components/MiniDialog"; +import { useAttributedMiniDialog } from "ente-base/components/utils/dialog"; import { useIsRouteChangeInProgress, useSetupI18n, useSetupLogs, -} from "@/base/components/utils/hooks-app"; -import { authTheme } from "@/base/components/utils/theme"; -import { BaseContext, deriveBaseContext } from "@/base/context"; -import { logStartupBanner } from "@/base/log-web"; -import HTTPService from "@ente/shared/network/HTTPService"; -import { getData } from "@ente/shared/storage/localStorage"; -import type { User } from "@ente/shared/user/types"; -import "@fontsource-variable/inter"; -import { CssBaseline } from "@mui/material"; -import { ThemeProvider } from "@mui/material/styles"; +} from "ente-base/components/utils/hooks-app"; +import { authTheme } from "ente-base/components/utils/theme"; +import { BaseContext, deriveBaseContext } from "ente-base/context"; +import { logStartupBanner } from "ente-base/log-web"; +import HTTPService from "ente-shared/network/HTTPService"; +import { getData } from "ente-shared/storage/localStorage"; +import type { User } from "ente-shared/user/types"; import { t } from "i18next"; import type { AppProps } from "next/app"; import React, { useCallback, useEffect, useMemo } from "react"; diff --git a/web/apps/auth/src/pages/auth.tsx b/web/apps/auth/src/pages/auth.tsx index 597fe6f103..485511edba 100644 --- a/web/apps/auth/src/pages/auth.tsx +++ b/web/apps/auth/src/pages/auth.tsx @@ -1,17 +1,3 @@ -import { sessionExpiredDialogAttributes } from "@/accounts/components/utils/dialog"; -import { stashRedirect } from "@/accounts/services/redirect"; -import { EnteLogo } from "@/base/components/EnteLogo"; -import { LoadingIndicator } from "@/base/components/loaders"; -import { FocusVisibleButton } from "@/base/components/mui/FocusVisibleButton"; -import { NavbarBase } from "@/base/components/Navbar"; -import { - OverflowMenu, - OverflowMenuOption, -} from "@/base/components/OverflowMenu"; -import { useBaseContext } from "@/base/context"; -import { isHTTP401Error } from "@/base/http"; -import log from "@/base/log"; -import { masterKeyFromSessionIfLoggedIn } from "@/base/session"; import LogoutOutlinedIcon from "@mui/icons-material/LogoutOutlined"; import { Box, @@ -23,6 +9,20 @@ import { Typography, useTheme, } from "@mui/material"; +import { sessionExpiredDialogAttributes } from "ente-accounts/components/utils/dialog"; +import { stashRedirect } from "ente-accounts/services/redirect"; +import { EnteLogo } from "ente-base/components/EnteLogo"; +import { LoadingIndicator } from "ente-base/components/loaders"; +import { FocusVisibleButton } from "ente-base/components/mui/FocusVisibleButton"; +import { NavbarBase } from "ente-base/components/Navbar"; +import { + OverflowMenu, + OverflowMenuOption, +} from "ente-base/components/OverflowMenu"; +import { useBaseContext } from "ente-base/context"; +import { isHTTP401Error } from "ente-base/http"; +import log from "ente-base/log"; +import { masterKeyFromSessionIfLoggedIn } from "ente-base/session"; import { t } from "i18next"; import { useRouter } from "next/router"; import React, { useCallback, useEffect, useState } from "react"; diff --git a/web/apps/auth/src/pages/change-password.tsx b/web/apps/auth/src/pages/change-password.tsx index bea6b02df4..0e494377ee 100644 --- a/web/apps/auth/src/pages/change-password.tsx +++ b/web/apps/auth/src/pages/change-password.tsx @@ -1 +1 @@ -export { default } from "@/accounts/pages/change-password"; +export { default } from "ente-accounts/pages/change-password"; diff --git a/web/apps/auth/src/pages/credentials.tsx b/web/apps/auth/src/pages/credentials.tsx index 9bb9307c79..9b8df2e13d 100644 --- a/web/apps/auth/src/pages/credentials.tsx +++ b/web/apps/auth/src/pages/credentials.tsx @@ -1 +1 @@ -export { default } from "@/accounts/pages/credentials"; +export { default } from "ente-accounts/pages/credentials"; diff --git a/web/apps/auth/src/pages/generate.tsx b/web/apps/auth/src/pages/generate.tsx index bf45ab3f5a..670ed3e823 100644 --- a/web/apps/auth/src/pages/generate.tsx +++ b/web/apps/auth/src/pages/generate.tsx @@ -1 +1 @@ -export { default } from "@/accounts/pages/generate"; +export { default } from "ente-accounts/pages/generate"; diff --git a/web/apps/auth/src/pages/login.tsx b/web/apps/auth/src/pages/login.tsx index 91d1d3fd41..675471334f 100644 --- a/web/apps/auth/src/pages/login.tsx +++ b/web/apps/auth/src/pages/login.tsx @@ -1 +1 @@ -export { default } from "@/accounts/pages/login"; +export { default } from "ente-accounts/pages/login"; diff --git a/web/apps/auth/src/pages/passkeys/finish.tsx b/web/apps/auth/src/pages/passkeys/finish.tsx index 0601be631e..88c2314928 100644 --- a/web/apps/auth/src/pages/passkeys/finish.tsx +++ b/web/apps/auth/src/pages/passkeys/finish.tsx @@ -1 +1 @@ -export { default } from "@/accounts/pages/passkeys/finish"; +export { default } from "ente-accounts/pages/passkeys/finish"; diff --git a/web/apps/auth/src/pages/passkeys/recover.tsx b/web/apps/auth/src/pages/passkeys/recover.tsx index 647a9d4aa2..972142211c 100644 --- a/web/apps/auth/src/pages/passkeys/recover.tsx +++ b/web/apps/auth/src/pages/passkeys/recover.tsx @@ -1,4 +1,4 @@ -import Page_ from "@/accounts/pages/two-factor/recover"; +import Page_ from "ente-accounts/pages/two-factor/recover"; const Page = () => ; diff --git a/web/apps/auth/src/pages/recover.tsx b/web/apps/auth/src/pages/recover.tsx index e1398fabb4..eb6a74c593 100644 --- a/web/apps/auth/src/pages/recover.tsx +++ b/web/apps/auth/src/pages/recover.tsx @@ -1 +1 @@ -export { default } from "@/accounts/pages/recover"; +export { default } from "ente-accounts/pages/recover"; diff --git a/web/apps/auth/src/pages/share.tsx b/web/apps/auth/src/pages/share.tsx index e2bba39bfd..a86d9411d2 100644 --- a/web/apps/auth/src/pages/share.tsx +++ b/web/apps/auth/src/pages/share.tsx @@ -1,6 +1,6 @@ -import { EnteLogo } from "@/base/components/EnteLogo"; -import { decryptMetadataJSON_New } from "@/base/crypto"; import { Box, Button, Stack, Typography, useTheme } from "@mui/material"; +import { EnteLogo } from "ente-base/components/EnteLogo"; +import { decryptMetadataJSON_New } from "ente-base/crypto"; import React, { useEffect, useMemo, useState } from "react"; interface SharedCode { diff --git a/web/apps/auth/src/pages/signup.tsx b/web/apps/auth/src/pages/signup.tsx index 7ec71524d5..fa3c32852a 100644 --- a/web/apps/auth/src/pages/signup.tsx +++ b/web/apps/auth/src/pages/signup.tsx @@ -1 +1 @@ -export { default } from "@/accounts/pages/signup"; +export { default } from "ente-accounts/pages/signup"; diff --git a/web/apps/auth/src/pages/two-factor/recover.tsx b/web/apps/auth/src/pages/two-factor/recover.tsx index fdda173088..201393276a 100644 --- a/web/apps/auth/src/pages/two-factor/recover.tsx +++ b/web/apps/auth/src/pages/two-factor/recover.tsx @@ -1,4 +1,4 @@ -import Page_ from "@/accounts/pages/two-factor/recover"; +import Page_ from "ente-accounts/pages/two-factor/recover"; const Page = () => ; diff --git a/web/apps/auth/src/pages/two-factor/setup.tsx b/web/apps/auth/src/pages/two-factor/setup.tsx index ee74c573b6..7f9adb38e6 100644 --- a/web/apps/auth/src/pages/two-factor/setup.tsx +++ b/web/apps/auth/src/pages/two-factor/setup.tsx @@ -1 +1 @@ -export { default } from "@/accounts/pages/two-factor/setup"; +export { default } from "ente-accounts/pages/two-factor/setup"; diff --git a/web/apps/auth/src/pages/two-factor/verify.tsx b/web/apps/auth/src/pages/two-factor/verify.tsx index 5f3fbef9ce..f3f3c99656 100644 --- a/web/apps/auth/src/pages/two-factor/verify.tsx +++ b/web/apps/auth/src/pages/two-factor/verify.tsx @@ -1 +1 @@ -export { default } from "@/accounts/pages/two-factor/verify"; +export { default } from "ente-accounts/pages/two-factor/verify"; diff --git a/web/apps/auth/src/pages/verify.tsx b/web/apps/auth/src/pages/verify.tsx index b5860d3a53..7ec623fac9 100644 --- a/web/apps/auth/src/pages/verify.tsx +++ b/web/apps/auth/src/pages/verify.tsx @@ -1 +1 @@ -export { default } from "@/accounts/pages/verify"; +export { default } from "ente-accounts/pages/verify"; diff --git a/web/apps/auth/src/services/code.ts b/web/apps/auth/src/services/code.ts index ac99594ad8..c312285705 100644 --- a/web/apps/auth/src/services/code.ts +++ b/web/apps/auth/src/services/code.ts @@ -1,5 +1,5 @@ -import log from "@/base/log"; -import { nullToUndefined } from "@/utils/transform"; +import log from "ente-base/log"; +import { nullToUndefined } from "ente-utils/transform"; import { HOTP, TOTP } from "otpauth"; import { z } from "zod"; import { Steam } from "./steam"; diff --git a/web/apps/auth/src/services/remote.ts b/web/apps/auth/src/services/remote.ts index 6de83e9a2a..eccf7ab402 100644 --- a/web/apps/auth/src/services/remote.ts +++ b/web/apps/auth/src/services/remote.ts @@ -1,8 +1,12 @@ -import { decryptBoxB64, decryptMetadataJSON_New } from "@/base/crypto"; -import { authenticatedRequestHeaders, ensureOk, HTTPError } from "@/base/http"; -import log from "@/base/log"; -import { apiURL } from "@/base/origins"; -import { ensureString } from "@/utils/ensure"; +import { decryptBoxB64, decryptMetadataJSON_New } from "ente-base/crypto"; +import { + authenticatedRequestHeaders, + ensureOk, + HTTPError, +} from "ente-base/http"; +import log from "ente-base/log"; +import { apiURL } from "ente-base/origins"; +import { ensureString } from "ente-utils/ensure"; import { codeFromURIString, type Code } from "services/code"; import { z } from "zod"; @@ -28,7 +32,7 @@ export const getAuthCodes = async (masterKey: Uint8Array): Promise => { }) .filter((f) => f !== undefined) .filter((f) => { - // Do not show trashed entries in the web inteface. + // Do not show trashed entries in the web interface. return !f.codeDisplay?.trashed; }) .sort((a, b) => { diff --git a/web/apps/auth/tsconfig.json b/web/apps/auth/tsconfig.json index 8e6cbbeecf..cd371d81f7 100644 --- a/web/apps/auth/tsconfig.json +++ b/web/apps/auth/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@/build-config/tsconfig-next.json", + "extends": "ente-build-config/tsconfig-next.json", "compilerOptions": { /* Set the base directory from which to resolve bare module names. */ "baseUrl": "./src" diff --git a/web/apps/cast/eslint.config.mjs b/web/apps/cast/eslint.config.mjs index 06dd5eefb9..641d994d1e 100644 --- a/web/apps/cast/eslint.config.mjs +++ b/web/apps/cast/eslint.config.mjs @@ -1 +1 @@ -export { default } from "@/build-config/eslintrc-next-app.mjs"; +export { default } from "ente-build-config/eslintrc-next-app.mjs"; diff --git a/web/apps/cast/next.config.js b/web/apps/cast/next.config.js index 5b4c97eaea..5a52794ab2 100644 --- a/web/apps/cast/next.config.js +++ b/web/apps/cast/next.config.js @@ -1 +1 @@ -module.exports = require("@/base/next.config.base.js"); +module.exports = require("ente-base/next.config.base.js"); diff --git a/web/apps/cast/package.json b/web/apps/cast/package.json index ab09147b30..a2e74a0f8d 100644 --- a/web/apps/cast/package.json +++ b/web/apps/cast/package.json @@ -3,13 +3,13 @@ "version": "0.0.0", "private": true, "dependencies": { - "@/accounts": "*", - "@/base": "*", - "@/media": "*", - "@ente/shared": "*" + "ente-accounts": "*", + "ente-base": "*", + "ente-media": "*", + "ente-shared": "*" }, "devDependencies": { - "@/build-config": "*", - "@types/chromecast-caf-receiver": "^6.0.21" + "@types/chromecast-caf-receiver": "^6.0.21", + "ente-build-config": "*" } } diff --git a/web/apps/cast/src/pages/_app.tsx b/web/apps/cast/src/pages/_app.tsx index 3f3b8198e6..506fb7b033 100644 --- a/web/apps/cast/src/pages/_app.tsx +++ b/web/apps/cast/src/pages/_app.tsx @@ -1,9 +1,9 @@ -import { staticAppTitle } from "@/base/app"; -import { CustomHead } from "@/base/components/Head"; -import { useSetupLogs } from "@/base/components/utils/hooks-app"; -import { castTheme } from "@/base/components/utils/theme"; import "@fontsource-variable/inter"; import { CssBaseline, ThemeProvider } from "@mui/material"; +import { staticAppTitle } from "ente-base/app"; +import { CustomHead } from "ente-base/components/Head"; +import { useSetupLogs } from "ente-base/components/utils/hooks-app"; +import { castTheme } from "ente-base/components/utils/theme"; import type { AppProps } from "next/app"; import React from "react"; diff --git a/web/apps/cast/src/pages/index.tsx b/web/apps/cast/src/pages/index.tsx index 834e5d66ee..02c967c932 100644 --- a/web/apps/cast/src/pages/index.tsx +++ b/web/apps/cast/src/pages/index.tsx @@ -1,8 +1,8 @@ -import { EnteLogo } from "@/base/components/EnteLogo"; -import { ActivityIndicator } from "@/base/components/mui/ActivityIndicator"; -import log from "@/base/log"; import { Box, Stack, styled, Typography } from "@mui/material"; import { PairingCode } from "components/PairingCode"; +import { EnteLogo } from "ente-base/components/EnteLogo"; +import { ActivityIndicator } from "ente-base/components/mui/ActivityIndicator"; +import log from "ente-base/log"; import { useRouter } from "next/router"; import React, { useEffect, useState } from "react"; import { readCastData, storeCastData } from "services/cast-data"; diff --git a/web/apps/cast/src/pages/slideshow.tsx b/web/apps/cast/src/pages/slideshow.tsx index 3efffc83dd..2bc1b32eff 100644 --- a/web/apps/cast/src/pages/slideshow.tsx +++ b/web/apps/cast/src/pages/slideshow.tsx @@ -1,6 +1,6 @@ -import log from "@/base/log"; import { Stack, styled, Typography } from "@mui/material"; import { FilledCircleCheck } from "components/FilledCircleCheck"; +import log from "ente-base/log"; import { useRouter } from "next/router"; import React, { useEffect, useState } from "react"; import { readCastData } from "services/cast-data"; diff --git a/web/apps/cast/src/services/chromecast-receiver.ts b/web/apps/cast/src/services/chromecast-receiver.ts index 0ddbce4cf5..889372eaf6 100644 --- a/web/apps/cast/src/services/chromecast-receiver.ts +++ b/web/apps/cast/src/services/chromecast-receiver.ts @@ -1,6 +1,6 @@ /// -import log from "@/base/log"; +import log from "ente-base/log"; export type Cast = typeof cast; diff --git a/web/apps/cast/src/services/detect-type.ts b/web/apps/cast/src/services/detect-type.ts index 717eabecaa..49994b5961 100644 --- a/web/apps/cast/src/services/detect-type.ts +++ b/web/apps/cast/src/services/detect-type.ts @@ -1,5 +1,5 @@ -import { lowercaseExtension } from "@/base/file-name"; -import { KnownFileTypeInfos } from "@/media/file-type"; +import { lowercaseExtension } from "ente-base/file-name"; +import { KnownFileTypeInfos } from "ente-media/file-type"; import FileTypeDetect from "file-type"; /** diff --git a/web/apps/cast/src/services/pair.ts b/web/apps/cast/src/services/pair.ts index ca4f885d22..a8776000af 100644 --- a/web/apps/cast/src/services/pair.ts +++ b/web/apps/cast/src/services/pair.ts @@ -1,9 +1,9 @@ -import { boxSealOpen, generateKeyPair } from "@/base/crypto"; -import { ensureOk, publicRequestHeaders } from "@/base/http"; -import log from "@/base/log"; -import { apiURL } from "@/base/origins"; -import { wait } from "@/utils/promise"; -import { nullToUndefined } from "@/utils/transform"; +import { boxSealOpen, generateKeyPair } from "ente-base/crypto"; +import { ensureOk, publicRequestHeaders } from "ente-base/http"; +import log from "ente-base/log"; +import { apiURL } from "ente-base/origins"; +import { wait } from "ente-utils/promise"; +import { nullToUndefined } from "ente-utils/transform"; import { z } from "zod"; export interface Registration { diff --git a/web/apps/cast/src/services/render.ts b/web/apps/cast/src/services/render.ts index 47bd4b09e8..f3358b5bba 100644 --- a/web/apps/cast/src/services/render.ts +++ b/web/apps/cast/src/services/render.ts @@ -5,26 +5,26 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import { sharedCryptoWorker } from "@/base/crypto"; -import { nameAndExtension } from "@/base/file-name"; -import log from "@/base/log"; -import { apiURL, customAPIOrigin } from "@/base/origins"; +import type { AxiosResponse } from "axios"; +import { sharedCryptoWorker } from "ente-base/crypto"; +import { nameAndExtension } from "ente-base/file-name"; +import log from "ente-base/log"; +import { apiURL, customAPIOrigin } from "ente-base/origins"; import type { EncryptedEnteFile, EnteFile, FileMagicMetadata, FilePublicMagicMetadata, -} from "@/media/file"; -import { mergeMetadata1 } from "@/media/file"; -import { FileType } from "@/media/file-type"; -import { isHEICExtension, needsJPEGConversion } from "@/media/formats"; -import { heicToJPEG } from "@/media/heic-convert"; -import { decodeLivePhoto } from "@/media/live-photo"; -import { shuffled } from "@/utils/array"; -import { wait } from "@/utils/promise"; -import { ApiError } from "@ente/shared/error"; -import HTTPService from "@ente/shared/network/HTTPService"; -import type { AxiosResponse } from "axios"; +} from "ente-media/file"; +import { mergeMetadata1 } from "ente-media/file"; +import { FileType } from "ente-media/file-type"; +import { isHEICExtension, needsJPEGConversion } from "ente-media/formats"; +import { heicToJPEG } from "ente-media/heic-convert"; +import { decodeLivePhoto } from "ente-media/live-photo"; +import { ApiError } from "ente-shared/error"; +import HTTPService from "ente-shared/network/HTTPService"; +import { shuffled } from "ente-utils/array"; +import { wait } from "ente-utils/promise"; import type { CastData } from "services/cast-data"; import { detectMediaMIMEType } from "services/detect-type"; import { isChromecast } from "./chromecast-receiver"; diff --git a/web/apps/cast/tsconfig.json b/web/apps/cast/tsconfig.json index 8e6cbbeecf..cd371d81f7 100644 --- a/web/apps/cast/tsconfig.json +++ b/web/apps/cast/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@/build-config/tsconfig-next.json", + "extends": "ente-build-config/tsconfig-next.json", "compilerOptions": { /* Set the base directory from which to resolve bare module names. */ "baseUrl": "./src" diff --git a/web/apps/payments/README.md b/web/apps/payments/README.md index e7d76a05d1..2670a761a9 100644 --- a/web/apps/payments/README.md +++ b/web/apps/payments/README.md @@ -60,7 +60,7 @@ yarn dev:payments 1. Install the [stripe-cli](https://docs.stripe.com/stripe-cli) and capture the webhook signing secret. -2. Define this secret within your `musuem.yaml` +2. Define this secret within your `museum.yaml` 3. Update the `whitelisted-redirect-urls` so that it supports redirecting to the locally running payments app. diff --git a/web/apps/payments/eslint.config.mjs b/web/apps/payments/eslint.config.mjs index badf668bf1..24edb7320c 100644 --- a/web/apps/payments/eslint.config.mjs +++ b/web/apps/payments/eslint.config.mjs @@ -1 +1 @@ -export { default } from "@/build-config/eslintrc-vite-app.mjs"; +export { default } from "ente-build-config/eslintrc-vite-app.mjs"; diff --git a/web/apps/payments/package.json b/web/apps/payments/package.json index 9c41a77e5a..87a6b3fe3e 100644 --- a/web/apps/payments/package.json +++ b/web/apps/payments/package.json @@ -10,14 +10,14 @@ }, "dependencies": { "@stripe/stripe-js": "^1.17.0", - "react": "^19.0.0", - "react-dom": "^19.0.0" + "react": "^19.1.0", + "react-dom": "^19.1.0" }, "devDependencies": { - "@/build-config": "*", - "@types/react": "^19.0.10", - "@types/react-dom": "^19.0.4", - "@vitejs/plugin-react": "^4.3.4", - "vite": "^6.2.1" + "@types/react": "^19.1.2", + "@types/react-dom": "^19.1.3", + "@vitejs/plugin-react": "^4.4.1", + "ente-build-config": "*", + "vite": "^6.3.4" } } diff --git a/web/apps/payments/src/services/billing.ts b/web/apps/payments/src/services/billing.ts index 20581f5c63..b7c911fd82 100644 --- a/web/apps/payments/src/services/billing.ts +++ b/web/apps/payments/src/services/billing.ts @@ -212,7 +212,7 @@ interface UpdateStripeSubscriptionResponse { } /** - * Make a request to museum to update an existing Stript subscription with + * Make a request to museum to update an existing Stripe subscription with * {@link productID} for the user. */ async function updateStripeSubscription( diff --git a/web/apps/payments/tsconfig.json b/web/apps/payments/tsconfig.json index 291fed6caf..b49e808c99 100644 --- a/web/apps/payments/tsconfig.json +++ b/web/apps/payments/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "@/build-config/tsconfig-vite.json", + "extends": "ente-build-config/tsconfig-vite.json", "include": ["src"], "references": [{ "path": "./tsconfig.node.json" }] } diff --git a/web/apps/payments/tsconfig.node.json b/web/apps/payments/tsconfig.node.json index a8d6e3fc8f..915aae174b 100644 --- a/web/apps/payments/tsconfig.node.json +++ b/web/apps/payments/tsconfig.node.json @@ -1,4 +1,4 @@ { - "extends": "@/build-config/tsconfig-vite.node.json", + "extends": "ente-build-config/tsconfig-vite.node.json", "include": ["vite.config.ts"] } diff --git a/web/apps/photos/eslint.config.mjs b/web/apps/photos/eslint.config.mjs index e12e813c69..acc4236012 100644 --- a/web/apps/photos/eslint.config.mjs +++ b/web/apps/photos/eslint.config.mjs @@ -1,4 +1,4 @@ -import config from "@/build-config/eslintrc-next-app.mjs"; +import config from "ente-build-config/eslintrc-next-app.mjs"; export default [ ...config, @@ -10,7 +10,6 @@ export default [ * turned on to function correctly" */ "@typescript-eslint/no-unnecessary-boolean-literal-compare": "off", - "@typescript-eslint/prefer-nullish-coalescing": "off", "@typescript-eslint/no-unnecessary-condition": "off", "@typescript-eslint/no-unsafe-assignment": "off", "@typescript-eslint/no-explicit-any": "off", diff --git a/web/apps/photos/next.config.js b/web/apps/photos/next.config.js index 5b4c97eaea..5a52794ab2 100644 --- a/web/apps/photos/next.config.js +++ b/web/apps/photos/next.config.js @@ -1 +1 @@ -module.exports = require("@/base/next.config.base.js"); +module.exports = require("ente-base/next.config.base.js"); diff --git a/web/apps/photos/package.json b/web/apps/photos/package.json index 93efaccf60..125b13e905 100644 --- a/web/apps/photos/package.json +++ b/web/apps/photos/package.json @@ -3,34 +3,33 @@ "version": "0.0.0", "private": true, "dependencies": { - "@/accounts": "*", - "@/base": "*", - "@/gallery": "*", - "@/media": "*", - "@/new": "*", - "@ente/shared": "*", - "chrono-node": "^2.7.8", + "chrono-node": "^2.8.0", "debounce": "^2.2.0", + "ente-accounts": "*", + "ente-base": "*", + "ente-gallery": "*", + "ente-media": "*", + "ente-new": "*", + "ente-shared": "*", "localforage": "^1.10.0", "memoize-one": "^6.0.0", - "ml-matrix": "^6.12.0", + "ml-matrix": "^6.12.1", "p-debounce": "^4.0.0", - "react": "^19.0.0", - "react-dom": "^19.0.0", + "react": "^19.1.0", + "react-dom": "^19.1.0", "react-select": "^5.10.1", "react-top-loading-bar": "^3.0.2", - "react-virtualized-auto-sizer": "^1.0.25", + "react-virtualized-auto-sizer": "^1.0.26", "react-window": "^1.8.11", "sanitize-filename": "^1.6.3", "similarity-transformation": "^0.0.1", "xml-js": "^1.6.11" }, "devDependencies": { - "@/build-config": "*", - "@types/node": "^20", - "@types/react": "^19.0.10", - "@types/react-dom": "^19.0.4", - "@types/react-virtualized-auto-sizer": "^1.0.4", - "@types/react-window": "^1.8.8" + "@types/node": "^22.15.3", + "@types/react": "^19.1.2", + "@types/react-dom": "^19.1.3", + "@types/react-window": "^1.8.8", + "ente-build-config": "*" } } diff --git a/web/apps/photos/src/components/AuthenticateUser.tsx b/web/apps/photos/src/components/AuthenticateUser.tsx index 7788d8190a..2c02479bef 100644 --- a/web/apps/photos/src/components/AuthenticateUser.tsx +++ b/web/apps/photos/src/components/AuthenticateUser.tsx @@ -1,16 +1,16 @@ -import { checkSessionValidity } from "@/accounts/services/session"; +import { checkSessionValidity } from "ente-accounts/services/session"; import { TitledMiniDialog, type MiniDialogAttributes, -} from "@/base/components/MiniDialog"; -import type { ModalVisibilityProps } from "@/base/components/utils/modal"; -import { useBaseContext } from "@/base/context"; -import log from "@/base/log"; +} from "ente-base/components/MiniDialog"; +import type { ModalVisibilityProps } from "ente-base/components/utils/modal"; +import { useBaseContext } from "ente-base/context"; +import log from "ente-base/log"; import VerifyMasterPasswordForm, { type VerifyMasterPasswordFormProps, -} from "@ente/shared/components/VerifyMasterPasswordForm"; -import { getData } from "@ente/shared/storage/localStorage"; -import type { KeyAttributes, User } from "@ente/shared/user/types"; +} from "ente-shared/components/VerifyMasterPasswordForm"; +import { getData } from "ente-shared/storage/localStorage"; +import type { KeyAttributes, User } from "ente-shared/user/types"; import { t } from "i18next"; import { useCallback, useEffect, useState } from "react"; diff --git a/web/apps/photos/src/components/Collections/AlbumCastDialog.tsx b/web/apps/photos/src/components/Collections/AlbumCastDialog.tsx index 7ba3203c15..36a4d953cc 100644 --- a/web/apps/photos/src/components/Collections/AlbumCastDialog.tsx +++ b/web/apps/photos/src/components/Collections/AlbumCastDialog.tsx @@ -1,19 +1,19 @@ -import { TitledMiniDialog } from "@/base/components/MiniDialog"; -import { ActivityIndicator } from "@/base/components/mui/ActivityIndicator"; -import { FocusVisibleButton } from "@/base/components/mui/FocusVisibleButton"; -import log from "@/base/log"; -import type { Collection } from "@/media/collection"; -import { useSettingsSnapshot } from "@/new/photos/components/utils/use-snapshot"; +import { Link, Stack, Typography } from "@mui/material"; +import { TitledMiniDialog } from "ente-base/components/MiniDialog"; +import { ActivityIndicator } from "ente-base/components/mui/ActivityIndicator"; +import { FocusVisibleButton } from "ente-base/components/mui/FocusVisibleButton"; +import log from "ente-base/log"; +import type { Collection } from "ente-media/collection"; +import { useSettingsSnapshot } from "ente-new/photos/components/utils/use-snapshot"; import { publishCastPayload, revokeAllCastTokens, unknownDeviceCodeErrorMessage, -} from "@/new/photos/services/cast"; -import { loadCast } from "@/new/photos/utils/chromecast-sender"; +} from "ente-new/photos/services/cast"; +import { loadCast } from "ente-new/photos/utils/chromecast-sender"; import SingleInputForm, { type SingleInputFormProps, -} from "@ente/shared/components/SingleInputForm"; -import { Link, Stack, Typography } from "@mui/material"; +} from "ente-shared/components/SingleInputForm"; import { t } from "i18next"; import { useEffect, useState } from "react"; import { Trans } from "react-i18next"; @@ -53,7 +53,7 @@ export const AlbumCastDialog: React.FC = ({ // // Override, otherwise tsc complains about unknown property `chrome`. // eslint-disable-next-line @typescript-eslint/dot-notation - setBrowserCanCast(typeof window["chrome"] !== "undefined"); + setBrowserCanCast(typeof window["chrome"] != "undefined"); }, []); const onSubmit: SingleInputFormProps["callback"] = async ( @@ -77,7 +77,7 @@ export const AlbumCastDialog: React.FC = ({ }; useEffect(() => { - if (view === "auto") { + if (view == "auto") { loadCast().then(async (cast) => { const instance = cast.framework.CastContext.getInstance(); try { diff --git a/web/apps/photos/src/components/Collections/AllAlbums.tsx b/web/apps/photos/src/components/Collections/AllAlbums.tsx index 65d5145317..c9bcf6993f 100644 --- a/web/apps/photos/src/components/Collections/AllAlbums.tsx +++ b/web/apps/photos/src/components/Collections/AllAlbums.tsx @@ -1,15 +1,3 @@ -import { FilledIconButton } from "@/base/components/mui"; -import { CollectionsSortOptions } from "@/new/photos/components/CollectionsSortOptions"; -import { SlideUpTransition } from "@/new/photos/components/mui/SlideUpTransition"; -import { - ItemCard, - LargeTileButton, - LargeTileTextOverlay, -} from "@/new/photos/components/Tiles"; -import type { CollectionSummary } from "@/new/photos/services/collection/ui"; -import { CollectionsSortBy } from "@/new/photos/services/collection/ui"; -import { FlexWrapper, FluidContainer } from "@ente/shared/components/Container"; -import useWindowSize from "@ente/shared/hooks/useWindowSize"; import CloseIcon from "@mui/icons-material/Close"; import { Box, @@ -22,14 +10,22 @@ import { Typography, useMediaQuery, } from "@mui/material"; +import { FilledIconButton } from "ente-base/components/mui"; +import { CollectionsSortOptions } from "ente-new/photos/components/CollectionsSortOptions"; +import { SlideUpTransition } from "ente-new/photos/components/mui/SlideUpTransition"; +import { + ItemCard, + LargeTileButton, + LargeTileTextOverlay, +} from "ente-new/photos/components/Tiles"; +import type { CollectionSummary } from "ente-new/photos/services/collection/ui"; +import { CollectionsSortBy } from "ente-new/photos/services/collection/ui"; +import { FlexWrapper, FluidContainer } from "ente-shared/components/Container"; import { t } from "i18next"; import memoize from "memoize-one"; import React, { useEffect, useRef, useState } from "react"; -import { - areEqual, - FixedSizeList as List, - ListChildComponentProps, -} from "react-window"; +import AutoSizer from "react-virtualized-auto-sizer"; +import { areEqual, FixedSizeList, ListChildComponentProps } from "react-window"; interface AllAlbums { open: boolean; @@ -84,7 +80,7 @@ export const AllAlbums: React.FC = ({ ); }; -export const AllCollectionMobileBreakpoint = 559; +const Column3To2Breakpoint = 559; const AllAlbumsDialog = styled(Dialog)(({ theme }) => ({ "& .MuiDialog-container": { justifyContent: "flex-end" }, @@ -94,7 +90,7 @@ const AllAlbumsDialog = styled(Dialog)(({ theme }) => ({ paddingRight: theme.spacing(1), }, "& .MuiDialogContent-root": { padding: theme.spacing(2) }, - [theme.breakpoints.down(AllCollectionMobileBreakpoint)]: { + [theme.breakpoints.down(Column3To2Breakpoint)]: { "& .MuiPaper-root": { width: "324px" }, "& .MuiDialogContent-root": { padding: 6 }, }, @@ -142,20 +138,8 @@ const Title = ({ ); -const MobileColumns = 2; -const DesktopColumns = 3; - const CollectionRowItemSize = 154; -const getCollectionRowListHeight = ( - collectionRowList: CollectionSummary[][], - windowSize: { height: number; width: number }, -) => - Math.min( - collectionRowList.length * CollectionRowItemSize + 32, - windowSize?.height - 177, - ) || 0; - interface ItemData { collectionRowList: CollectionSummary[][]; onCollectionClick: (id?: number) => void; @@ -211,15 +195,21 @@ const AllAlbumsContent: React.FC = ({ collectionSummaries, onCollectionClick, }) => { + const isTwoColumn = useMediaQuery(`(width < ${Column3To2Breakpoint}px)`); + const refreshInProgress = useRef(false); const shouldRefresh = useRef(false); const [collectionRowList, setCollectionRowList] = useState([]); - const windowSize = useWindowSize(); + const columns = isTwoColumn ? 2 : 3; + const maxListContentHeight = + Math.ceil(collectionSummaries.length / columns) * + CollectionRowItemSize + + 32; /* padding above first and below last row */ useEffect(() => { - if (!windowSize.width || !collectionSummaries) { + if (!collectionSummaries) { return; } const main = async () => { @@ -231,10 +221,6 @@ const AllAlbumsContent: React.FC = ({ const collectionRowList: CollectionSummary[][] = []; let index = 0; - const columns = - windowSize.width > AllCollectionMobileBreakpoint - ? DesktopColumns - : MobileColumns; while (index < collectionSummaries.length) { const collectionRow: CollectionSummary[] = []; for ( @@ -254,7 +240,7 @@ const AllAlbumsContent: React.FC = ({ } }; main(); - }, [collectionSummaries, windowSize]); + }, [collectionSummaries, columns]); // Bundle additional data to list items using the "itemData" prop. // It will be accessible to item renderers as props.data. @@ -262,19 +248,29 @@ const AllAlbumsContent: React.FC = ({ const itemData = createItemData(collectionRowList, onCollectionClick); return ( - - + + {({ width, height }) => ( + + {AlbumsRow} + )} - width={"100%"} - itemCount={collectionRowList.length} - itemSize={CollectionRowItemSize} - itemData={itemData} - > - {AlbumsRow} - + ); }; diff --git a/web/apps/photos/src/components/Collections/CollectionHeader.tsx b/web/apps/photos/src/components/Collections/CollectionHeader.tsx index 16823b45f8..224a76b713 100644 --- a/web/apps/photos/src/components/Collections/CollectionHeader.tsx +++ b/web/apps/photos/src/components/Collections/CollectionHeader.tsx @@ -1,33 +1,3 @@ -import { assertionFailed } from "@/base/assert"; -import { SpacedRow } from "@/base/components/containers"; -import { ActivityIndicator } from "@/base/components/mui/ActivityIndicator"; -import { - OverflowMenu, - OverflowMenuOption, -} from "@/base/components/OverflowMenu"; -import { useModalVisibility } from "@/base/components/utils/modal"; -import { useBaseContext } from "@/base/context"; -import { - isArchivedCollection, - isPinnedCollection, -} from "@/gallery/services/magic-metadata"; -import type { Collection } from "@/media/collection"; -import { ItemVisibility } from "@/media/file-metadata"; -import { - GalleryItemsHeaderAdapter, - GalleryItemsSummary, -} from "@/new/photos/components/gallery/ListHeader"; -import { - ALL_SECTION, - HIDDEN_ITEMS_SECTION, - isHiddenCollection, -} from "@/new/photos/services/collection"; -import type { - CollectionSummary, - CollectionSummaryType, -} from "@/new/photos/services/collection/ui"; -import { clearLocalTrash, emptyTrash } from "@/new/photos/services/collections"; -import { usePhotosAppContext } from "@/new/photos/types/context"; import ArchiveOutlinedIcon from "@mui/icons-material/ArchiveOutlined"; import DeleteOutlinedIcon from "@mui/icons-material/DeleteOutlined"; import EditIcon from "@mui/icons-material/Edit"; @@ -46,6 +16,39 @@ import VisibilityOffOutlinedIcon from "@mui/icons-material/VisibilityOffOutlined import VisibilityOutlinedIcon from "@mui/icons-material/VisibilityOutlined"; import { Box, IconButton, Menu, Stack, Tooltip } from "@mui/material"; import { SetCollectionNamerAttributes } from "components/Collections/CollectionNamer"; +import { assertionFailed } from "ente-base/assert"; +import { SpacedRow } from "ente-base/components/containers"; +import { ActivityIndicator } from "ente-base/components/mui/ActivityIndicator"; +import { + OverflowMenu, + OverflowMenuOption, +} from "ente-base/components/OverflowMenu"; +import { useModalVisibility } from "ente-base/components/utils/modal"; +import { useBaseContext } from "ente-base/context"; +import { + isArchivedCollection, + isPinnedCollection, +} from "ente-gallery/services/magic-metadata"; +import type { Collection } from "ente-media/collection"; +import { ItemVisibility } from "ente-media/file-metadata"; +import { + GalleryItemsHeaderAdapter, + GalleryItemsSummary, +} from "ente-new/photos/components/gallery/ListHeader"; +import { + ALL_SECTION, + HIDDEN_ITEMS_SECTION, + isHiddenCollection, +} from "ente-new/photos/services/collection"; +import type { + CollectionSummary, + CollectionSummaryType, +} from "ente-new/photos/services/collection/ui"; +import { + clearLocalTrash, + emptyTrash, +} from "ente-new/photos/services/collections"; +import { usePhotosAppContext } from "ente-new/photos/types/context"; import { t } from "i18next"; import { GalleryContext } from "pages/gallery"; import React, { useCallback, useContext, useRef } from "react"; diff --git a/web/apps/photos/src/components/Collections/CollectionNamer.tsx b/web/apps/photos/src/components/Collections/CollectionNamer.tsx index c9429801ba..e3967fa304 100644 --- a/web/apps/photos/src/components/Collections/CollectionNamer.tsx +++ b/web/apps/photos/src/components/Collections/CollectionNamer.tsx @@ -1,8 +1,8 @@ -import { TitledMiniDialog } from "@/base/components/MiniDialog"; -import log from "@/base/log"; +import { TitledMiniDialog } from "ente-base/components/MiniDialog"; +import log from "ente-base/log"; import SingleInputForm, { type SingleInputFormProps, -} from "@ente/shared/components/SingleInputForm"; +} from "ente-shared/components/SingleInputForm"; import { t } from "i18next"; import React from "react"; diff --git a/web/apps/photos/src/components/Collections/CollectionShare.tsx b/web/apps/photos/src/components/Collections/CollectionShare.tsx index 540330ff51..c29a284262 100644 --- a/web/apps/photos/src/components/Collections/CollectionShare.tsx +++ b/web/apps/photos/src/components/Collections/CollectionShare.tsx @@ -1,40 +1,3 @@ -import { FocusVisibleButton } from "@/base/components/mui/FocusVisibleButton"; -import { LoadingButton } from "@/base/components/mui/LoadingButton"; -import { - NestedSidebarDrawer, - SidebarDrawer, -} from "@/base/components/mui/SidebarDrawer"; -import { - RowButton, - RowButtonDivider, - RowButtonGroup, - RowButtonGroupHint, - RowButtonGroupTitle, - RowLabel, - RowSwitch, -} from "@/base/components/RowButton"; -import { Titlebar } from "@/base/components/Titlebar"; -import { useModalVisibility } from "@/base/components/utils/modal"; -import { useBaseContext } from "@/base/context"; -import { sharedCryptoWorker } from "@/base/crypto"; -import { formattedDateTime } from "@/base/i18n-date"; -import log from "@/base/log"; -import { appendCollectionKeyToShareURL } from "@/gallery/services/share"; -import type { - Collection, - PublicURL, - UpdatePublicURL, -} from "@/media/collection"; -import { type CollectionUser } from "@/media/collection"; -import { PublicLinkCreated } from "@/new/photos/components/share/PublicLinkCreated"; -import { avatarTextColor } from "@/new/photos/services/avatar"; -import type { CollectionSummary } from "@/new/photos/services/collection/ui"; -import { usePhotosAppContext } from "@/new/photos/types/context"; -import { FlexWrapper } from "@ente/shared/components/Container"; -import SingleInputForm, { - type SingleInputFormProps, -} from "@ente/shared/components/SingleInputForm"; -import { CustomError, parseSharingErrorCodes } from "@ente/shared/error"; import AddIcon from "@mui/icons-material/Add"; import AdminPanelSettingsIcon from "@mui/icons-material/AdminPanelSettings"; import BlockIcon from "@mui/icons-material/Block"; @@ -60,6 +23,44 @@ import { import NumberAvatar from "@mui/material/Avatar"; import TextField from "@mui/material/TextField"; import Avatar from "components/pages/gallery/Avatar"; +import { FocusVisibleButton } from "ente-base/components/mui/FocusVisibleButton"; +import { LoadingButton } from "ente-base/components/mui/LoadingButton"; +import { + NestedSidebarDrawer, + SidebarDrawer, +} from "ente-base/components/mui/SidebarDrawer"; +import { + RowButton, + RowButtonDivider, + RowButtonGroup, + RowButtonGroupHint, + RowButtonGroupTitle, + RowLabel, + RowSwitch, +} from "ente-base/components/RowButton"; +import { Titlebar } from "ente-base/components/Titlebar"; +import { useClipboardCopy } from "ente-base/components/utils/hooks"; +import { useModalVisibility } from "ente-base/components/utils/modal"; +import { useBaseContext } from "ente-base/context"; +import { sharedCryptoWorker } from "ente-base/crypto"; +import { formattedDateTime } from "ente-base/i18n-date"; +import log from "ente-base/log"; +import { appendCollectionKeyToShareURL } from "ente-gallery/services/share"; +import type { + Collection, + PublicURL, + UpdatePublicURL, +} from "ente-media/collection"; +import { type CollectionUser } from "ente-media/collection"; +import { PublicLinkCreated } from "ente-new/photos/components/share/PublicLinkCreated"; +import { avatarTextColor } from "ente-new/photos/services/avatar"; +import type { CollectionSummary } from "ente-new/photos/services/collection/ui"; +import { usePhotosAppContext } from "ente-new/photos/types/context"; +import { FlexWrapper } from "ente-shared/components/Container"; +import SingleInputForm, { + type SingleInputFormProps, +} from "ente-shared/components/SingleInputForm"; +import { CustomError, parseSharingErrorCodes } from "ente-shared/error"; import { Formik, type FormikHelpers } from "formik"; import { t } from "i18next"; import { GalleryContext } from "pages/gallery"; @@ -1034,7 +1035,7 @@ const ManageParticipant: React.FC = ({ let contentText; let buttonText; - if (newRole === "VIEWER") { + if (newRole == "VIEWER") { contentText = ( = ({ ); buttonText = t("confirm_convert_to_viewer"); - } else if (newRole === "COLLABORATOR") { + } else if (newRole == "COLLABORATOR") { contentText = t("change_permission_to_collaborator", { selectedEmail, }); @@ -1124,7 +1125,7 @@ const ManageParticipant: React.FC = ({ label={"Viewer"} startIcon={} endIcon={ - selectedParticipant.role === "VIEWER" && ( + selectedParticipant.role == "VIEWER" && ( ) } @@ -1196,7 +1197,7 @@ const PublicShare: React.FC = ({ } }, [publicShareProp]); - const copyToClipboardHelper = () => { + const handleCopyLink = () => { navigator.clipboard.writeText(publicShareUrl); }; @@ -1209,7 +1210,6 @@ const PublicShare: React.FC = ({ collection={collection} publicShareUrl={publicShareUrl} onRootClose={onRootClose} - copyToClipboardHelper={copyToClipboardHelper} /> ) : ( = ({ )} ); @@ -1232,7 +1232,6 @@ interface ManagePublicShareProps { setPublicShareProp: SetPublicShareProp; onRootClose: () => void; publicShareUrl: string; - copyToClipboardHelper: () => void; } const ManagePublicShare: React.FC = ({ @@ -1241,11 +1240,14 @@ const ManagePublicShare: React.FC = ({ collection, onRootClose, publicShareUrl, - copyToClipboardHelper, }) => { const [manageShareView, setManageShareView] = useState(false); + + const [copied, handleCopyLink] = useClipboardCopy(publicShareUrl); + const closeManageShare = () => setManageShareView(false); const openManageShare = () => setManageShareView(true); + return ( <> @@ -1263,8 +1265,14 @@ const ManagePublicShare: React.FC = ({ /> ) : ( } - onClick={copyToClipboardHelper} + startIcon={ + copied ? ( + + ) : ( + + ) + } + onClick={handleCopyLink} disabled={isLinkExpired(publicShareProp.validTill)} label={t("copy_link")} /> @@ -1318,6 +1326,8 @@ const ManagePublicShareOptions: React.FC = ({ const [sharableLinkError, setSharableLinkError] = useState(null); + const [copied, handleCopyLink] = useClipboardCopy(publicShareUrl); + const handleRootClose = () => { onClose(); onRootClose(); @@ -1351,10 +1361,6 @@ const ManagePublicShareOptions: React.FC = ({ } }; - const copyToClipboardHelper = (text: string) => () => { - navigator.clipboard.writeText(text); - }; - return ( = ({ } - onClick={copyToClipboardHelper(publicShareUrl)} + startIcon={ + copied ? ( + + ) : ( + + ) + } + onClick={handleCopyLink} label={t("copy_link")} /> @@ -1526,9 +1538,7 @@ const ManageLinkExpiry: React.FC = ({ isLinkExpired(publicShareProp?.validTill) ? t("link_expired") : publicShareProp?.validTill - ? formattedDateTime( - publicShareProp.validTill / 1000, - ) + ? formattedDateTime(publicShareProp.validTill) : t("never") } /> diff --git a/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx b/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx index b0000ec873..232d4ab137 100644 --- a/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx +++ b/web/apps/photos/src/components/Collections/GalleryBarAndListHeader.tsx @@ -1,11 +1,15 @@ -import { useModalVisibility } from "@/base/components/utils/modal"; -import type { Collection } from "@/media/collection"; +import { AllAlbums } from "components/Collections/AllAlbums"; +import { SetCollectionNamerAttributes } from "components/Collections/CollectionNamer"; +import { CollectionShare } from "components/Collections/CollectionShare"; +import { TimeStampListItem } from "components/FileList"; +import { useModalVisibility } from "ente-base/components/utils/modal"; +import type { Collection } from "ente-media/collection"; import { GalleryBarImpl, type GalleryBarImplProps, -} from "@/new/photos/components/gallery/BarImpl"; -import { PeopleHeader } from "@/new/photos/components/gallery/PeopleHeader"; -import { ALL_SECTION } from "@/new/photos/services/collection"; +} from "ente-new/photos/components/gallery/BarImpl"; +import { PeopleHeader } from "ente-new/photos/components/gallery/PeopleHeader"; +import { ALL_SECTION } from "ente-new/photos/services/collection"; import { areOnlySystemCollections, collectionsSortBy, @@ -13,13 +17,9 @@ import { shouldShowOnCollectionBar, type CollectionsSortBy, type CollectionSummaries, -} from "@/new/photos/services/collection/ui"; -import { includes } from "@/utils/type-guards"; -import { getData, removeData } from "@ente/shared/storage/localStorage"; -import { AllAlbums } from "components/Collections/AllAlbums"; -import { SetCollectionNamerAttributes } from "components/Collections/CollectionNamer"; -import { CollectionShare } from "components/Collections/CollectionShare"; -import { TimeStampListItem } from "components/FileList"; +} from "ente-new/photos/services/collection/ui"; +import { getData, removeData } from "ente-shared/storage/localStorage"; +import { includes } from "ente-utils/type-guards"; import React, { useCallback, useEffect, useMemo, useState } from "react"; import { sortCollectionSummaries } from "services/collectionService"; import { SetFilesDownloadProgressAttributesCreator } from "types/gallery"; diff --git a/web/apps/photos/src/components/Export.tsx b/web/apps/photos/src/components/Export.tsx index 3864dc02e2..97736bac47 100644 --- a/web/apps/photos/src/components/Export.tsx +++ b/web/apps/photos/src/components/Export.tsx @@ -1,20 +1,3 @@ -import { isDesktop } from "@/base/app"; -import { EnteSwitch } from "@/base/components/EnteSwitch"; -import { LinkButton } from "@/base/components/LinkButton"; -import { - OverflowMenu, - OverflowMenuOption, -} from "@/base/components/OverflowMenu"; -import { EllipsizedTypography } from "@/base/components/Typography"; -import type { ButtonishProps } from "@/base/components/mui"; -import { DialogCloseIconButton } from "@/base/components/mui/DialogCloseIconButton"; -import type { ModalVisibilityProps } from "@/base/components/utils/modal"; -import { useBaseContext } from "@/base/context"; -import { ensureElectron } from "@/base/electron"; -import log from "@/base/log"; -import { EnteFile } from "@/media/file"; -import { SpaceBetweenFlex } from "@ente/shared/components/Container"; -import { CustomError } from "@ente/shared/error"; import FolderIcon from "@mui/icons-material/Folder"; import { Box, @@ -27,6 +10,23 @@ import { Tooltip, Typography, } from "@mui/material"; +import { isDesktop } from "ente-base/app"; +import { EnteSwitch } from "ente-base/components/EnteSwitch"; +import { LinkButton } from "ente-base/components/LinkButton"; +import { + OverflowMenu, + OverflowMenuOption, +} from "ente-base/components/OverflowMenu"; +import { EllipsizedTypography } from "ente-base/components/Typography"; +import type { ButtonishProps } from "ente-base/components/mui"; +import { DialogCloseIconButton } from "ente-base/components/mui/DialogCloseIconButton"; +import type { ModalVisibilityProps } from "ente-base/components/utils/modal"; +import { useBaseContext } from "ente-base/context"; +import { ensureElectron } from "ente-base/electron"; +import log from "ente-base/log"; +import { EnteFile } from "ente-media/file"; +import { SpaceBetweenFlex } from "ente-shared/components/Container"; +import { CustomError } from "ente-shared/error"; import { t } from "i18next"; import { useEffect, useState } from "react"; import { Trans } from "react-i18next"; diff --git a/web/apps/photos/src/components/ExportFinished.tsx b/web/apps/photos/src/components/ExportFinished.tsx index ae43775c54..5a87e612ac 100644 --- a/web/apps/photos/src/components/ExportFinished.tsx +++ b/web/apps/photos/src/components/ExportFinished.tsx @@ -1,10 +1,10 @@ -import { LinkButton } from "@/base/components/LinkButton"; -import { FocusVisibleButton } from "@/base/components/mui/FocusVisibleButton"; -import { formattedNumber } from "@/base/i18n"; -import { formattedDateTime } from "@/base/i18n-date"; -import { EnteFile } from "@/media/file"; -import { SpaceBetweenFlex } from "@ente/shared/components/Container"; import { DialogActions, DialogContent, Stack, Typography } from "@mui/material"; +import { LinkButton } from "ente-base/components/LinkButton"; +import { FocusVisibleButton } from "ente-base/components/mui/FocusVisibleButton"; +import { formattedNumber } from "ente-base/i18n"; +import { formattedDateTime } from "ente-base/i18n-date"; +import { EnteFile } from "ente-media/file"; +import { SpaceBetweenFlex } from "ente-shared/components/Container"; import { t } from "i18next"; import { useState } from "react"; import ExportPendingList from "./ExportPendingList"; diff --git a/web/apps/photos/src/components/ExportInProgress.tsx b/web/apps/photos/src/components/ExportInProgress.tsx index 8f1e43ed40..3f2566f38b 100644 --- a/web/apps/photos/src/components/ExportInProgress.tsx +++ b/web/apps/photos/src/components/ExportInProgress.tsx @@ -1,14 +1,14 @@ -import { FocusVisibleButton } from "@/base/components/mui/FocusVisibleButton"; -import { - FlexWrapper, - VerticallyCentered, -} from "@ente/shared/components/Container"; import { DialogActions, DialogContent, LinearProgress, Typography, } from "@mui/material"; +import { FocusVisibleButton } from "ente-base/components/mui/FocusVisibleButton"; +import { + FlexWrapper, + VerticallyCentered, +} from "ente-shared/components/Container"; import { t } from "i18next"; import { Trans } from "react-i18next"; import { ExportStage, type ExportProgress } from "services/export"; @@ -38,16 +38,16 @@ export default function ExportInProgress(props: Props) { {props.exportStage === ExportStage.starting ? ( t("export_starting") ) : props.exportStage === ExportStage.migration ? ( - t("preparing") + t("export_preparing") ) : props.exportStage === ExportStage.renamingCollectionFolders ? ( - t("renaming_album_folders") + t("export_renaming_album_folders") ) : props.exportStage === ExportStage.trashingDeletedFiles ? ( - t("trashing_deleted_files") + t("export_trashing_deleted_files") ) : props.exportStage === ExportStage.trashingDeletedCollections ? ( - t("trashing_deleted_albums") + t("export_trashing_deleted_albums") ) : ( = ({ handleSelectMulti(filesOnADay.map((af) => af.file))(isDateSelected); }; - const handleSelect = handleSelectCreator( - setSelected, - mode, - galleryContext.user?.id, - activeCollectionID, - activePersonID, - setRangeStart, + const handleSelect = useMemo( + () => + handleSelectCreator( + setSelected, + mode, + galleryContext.user?.id, + activeCollectionID, + activePersonID, + setRangeStart, + ), + [ + setSelected, + mode, + galleryContext.user?.id, + activeCollectionID, + activePersonID, + ], ); const onHoverOver = (index: number) => () => { @@ -695,7 +704,7 @@ export const FileList: React.FC = ({ }; const handleRangeSelect = (index: number) => () => { - if (typeof rangeStart !== "undefined" && rangeStart !== index) { + if (typeof rangeStart != "undefined" && rangeStart !== index) { const direction = (index - rangeStart) / Math.abs(index - rangeStart); let checked = true; @@ -719,13 +728,13 @@ export const FileList: React.FC = ({ useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { - if (e.key === "Shift") { + if (e.key == "Shift") { setIsShiftKeyPressed(true); } }; const handleKeyUp = (e: KeyboardEvent) => { - if (e.key === "Shift") { + if (e.key == "Shift") { setIsShiftKeyPressed(false); } }; @@ -1105,8 +1114,27 @@ const FileThumbnail: React.FC = ({ const galleryContext = useContext(GalleryContext); const [imageURL, setImageURL] = useState(undefined); + const [isLongPressing, setIsLongPressing] = useState(false); - const longPress = useLongPress(() => onSelect(!selected), 500); + const longPressHandlers = useMemo( + () => ({ + onMouseDown: () => setIsLongPressing(true), + onMouseUp: () => setIsLongPressing(false), + onMouseLeave: () => setIsLongPressing(false), + onTouchStart: () => setIsLongPressing(true), + onTouchEnd: () => setIsLongPressing(false), + }), + [], + ); + + useEffect(() => { + const timerID = isLongPressing + ? setTimeout(() => onSelect(!selected), 500) + : undefined; + return () => { + if (timerID) clearTimeout(timerID); + }; + }, [selected, onSelect, isLongPressing]); useEffect(() => { let didCancel = false; @@ -1152,7 +1180,7 @@ const FileThumbnail: React.FC = ({ onClick={handleClick} onMouseEnter={handleHover} disabled={!imageURL} - {...(selectable ? longPress : {})} + {...(selectable ? longPressHandlers : {})} > {selectable && ( = ({ }} > {message && {message}} - {step === "running" && } + {step == "running" && } @@ -172,7 +172,7 @@ const OptionsForm: React.FC = ({ return ( <> - {(step === undefined || step === "completed-with-errors") && ( + {(step === undefined || step == "completed-with-errors") && (
{t("fix_creation_time_options")} diff --git a/web/apps/photos/src/components/GalleryEmptyState.tsx b/web/apps/photos/src/components/GalleryEmptyState.tsx index dca2ad8cc9..f4c7bad76b 100644 --- a/web/apps/photos/src/components/GalleryEmptyState.tsx +++ b/web/apps/photos/src/components/GalleryEmptyState.tsx @@ -1,14 +1,14 @@ -import { EnteLogo } from "@/base/components/EnteLogo"; -import { - FlexWrapper, - VerticallyCentered, -} from "@ente/shared/components/Container"; import AddPhotoAlternateIcon from "@mui/icons-material/AddPhotoAlternateOutlined"; import FolderIcon from "@mui/icons-material/FolderOutlined"; import { Button, Stack, Typography, styled } from "@mui/material"; +import { EnteLogo } from "ente-base/components/EnteLogo"; +import { + FlexWrapper, + VerticallyCentered, +} from "ente-shared/components/Container"; import { t } from "i18next"; import { Trans } from "react-i18next"; -import uploadManager from "services/upload/uploadManager"; +import { uploadManager } from "services/upload-manager"; export default function GalleryEmptyState({ openUploader }) { return ( diff --git a/web/apps/photos/src/components/Sidebar.tsx b/web/apps/photos/src/components/Sidebar.tsx index 00e0853707..b7d5ac9a81 100644 --- a/web/apps/photos/src/components/Sidebar.tsx +++ b/web/apps/photos/src/components/Sidebar.tsx @@ -1,90 +1,3 @@ -import { RecoveryKey } from "@/accounts/components/RecoveryKey"; -import { openAccountsManagePasskeysPage } from "@/accounts/services/passkey"; -import { isDesktop } from "@/base/app"; -import { EnteLogo, EnteLogoBox } from "@/base/components/EnteLogo"; -import { LinkButton } from "@/base/components/LinkButton"; -import { - RowButton, - RowButtonDivider, - RowButtonGroup, - RowButtonGroupHint, - RowSwitch, -} from "@/base/components/RowButton"; -import { SpacedRow } from "@/base/components/containers"; -import { ActivityIndicator } from "@/base/components/mui/ActivityIndicator"; -import { DialogCloseIconButton } from "@/base/components/mui/DialogCloseIconButton"; -import { - NestedSidebarDrawer, - SidebarDrawer, - SidebarDrawerTitlebar, - type NestedSidebarDrawerVisibilityProps, -} from "@/base/components/mui/SidebarDrawer"; -import { useIsSmallWidth } from "@/base/components/utils/hooks"; -import { - useModalVisibility, - type ModalVisibilityProps, -} from "@/base/components/utils/modal"; -import { useBaseContext } from "@/base/context"; -import { - getLocaleInUse, - setLocaleInUse, - supportedLocales, - ut, - type SupportedLocale, -} from "@/base/i18n"; -import log from "@/base/log"; -import { savedLogs } from "@/base/log-web"; -import { customAPIHost } from "@/base/origins"; -import { downloadString } from "@/base/utils/web"; -import { DeleteAccount } from "@/new/photos/components/DeleteAccount"; -import { DropdownInput } from "@/new/photos/components/DropdownInput"; -import { MLSettings } from "@/new/photos/components/sidebar/MLSettings"; -import { TwoFactorSettings } from "@/new/photos/components/sidebar/TwoFactorSettings"; -import { - confirmDisableMapsDialogAttributes, - confirmEnableMapsDialogAttributes, -} from "@/new/photos/components/utils/dialog"; -import { downloadAppDialogAttributes } from "@/new/photos/components/utils/download"; -import { - useSettingsSnapshot, - useUserDetailsSnapshot, -} from "@/new/photos/components/utils/use-snapshot"; -import { - ARCHIVE_SECTION, - DUMMY_UNCATEGORIZED_COLLECTION, - TRASH_SECTION, -} from "@/new/photos/services/collection"; -import type { CollectionSummaries } from "@/new/photos/services/collection/ui"; -import { isMLSupported } from "@/new/photos/services/ml"; -import { - isDevBuildAndUser, - syncSettings, - updateCFProxyDisabledPreference, - updateMapEnabled, -} from "@/new/photos/services/settings"; -import { - familyAdminEmail, - hasExceededStorageQuota, - isFamilyAdmin, - isPartOfFamily, - isSubscriptionActive, - isSubscriptionActivePaid, - isSubscriptionCancelled, - isSubscriptionFree, - isSubscriptionPastDue, - isSubscriptionStripe, - leaveFamily, - redirectToCustomerPortal, - syncUserDetails, - userDetailsAddOnBonuses, - type UserDetails, -} from "@/new/photos/services/user-details"; -import { usePhotosAppContext } from "@/new/photos/types/context"; -import { initiateEmail, openURL } from "@/new/photos/utils/web"; -import { - FlexWrapper, - VerticallyCentered, -} from "@ente/shared/components/Container"; import ArchiveOutlinedIcon from "@mui/icons-material/ArchiveOutlined"; import CategoryIcon from "@mui/icons-material/Category"; import ChevronRightIcon from "@mui/icons-material/ChevronRight"; @@ -110,6 +23,93 @@ import { } from "@mui/material"; import Typography from "@mui/material/Typography"; import { WatchFolder } from "components/WatchFolder"; +import { RecoveryKey } from "ente-accounts/components/RecoveryKey"; +import { openAccountsManagePasskeysPage } from "ente-accounts/services/passkey"; +import { isDesktop } from "ente-base/app"; +import { EnteLogo, EnteLogoBox } from "ente-base/components/EnteLogo"; +import { LinkButton } from "ente-base/components/LinkButton"; +import { + RowButton, + RowButtonDivider, + RowButtonGroup, + RowButtonGroupHint, + RowSwitch, +} from "ente-base/components/RowButton"; +import { SpacedRow } from "ente-base/components/containers"; +import { ActivityIndicator } from "ente-base/components/mui/ActivityIndicator"; +import { DialogCloseIconButton } from "ente-base/components/mui/DialogCloseIconButton"; +import { + NestedSidebarDrawer, + SidebarDrawer, + SidebarDrawerTitlebar, + type NestedSidebarDrawerVisibilityProps, +} from "ente-base/components/mui/SidebarDrawer"; +import { useIsSmallWidth } from "ente-base/components/utils/hooks"; +import { + useModalVisibility, + type ModalVisibilityProps, +} from "ente-base/components/utils/modal"; +import { useBaseContext } from "ente-base/context"; +import { + getLocaleInUse, + setLocaleInUse, + supportedLocales, + ut, + type SupportedLocale, +} from "ente-base/i18n"; +import log from "ente-base/log"; +import { savedLogs } from "ente-base/log-web"; +import { customAPIHost } from "ente-base/origins"; +import { downloadString } from "ente-base/utils/web"; +import { DeleteAccount } from "ente-new/photos/components/DeleteAccount"; +import { DropdownInput } from "ente-new/photos/components/DropdownInput"; +import { MLSettings } from "ente-new/photos/components/sidebar/MLSettings"; +import { TwoFactorSettings } from "ente-new/photos/components/sidebar/TwoFactorSettings"; +import { + confirmDisableMapsDialogAttributes, + confirmEnableMapsDialogAttributes, +} from "ente-new/photos/components/utils/dialog"; +import { downloadAppDialogAttributes } from "ente-new/photos/components/utils/download"; +import { + useSettingsSnapshot, + useUserDetailsSnapshot, +} from "ente-new/photos/components/utils/use-snapshot"; +import { + ARCHIVE_SECTION, + DUMMY_UNCATEGORIZED_COLLECTION, + TRASH_SECTION, +} from "ente-new/photos/services/collection"; +import type { CollectionSummaries } from "ente-new/photos/services/collection/ui"; +import { isMLSupported } from "ente-new/photos/services/ml"; +import { + isDevBuildAndUser, + syncSettings, + updateCFProxyDisabledPreference, + updateMapEnabled, +} from "ente-new/photos/services/settings"; +import { + familyAdminEmail, + hasExceededStorageQuota, + isFamilyAdmin, + isPartOfFamily, + isSubscriptionActive, + isSubscriptionActivePaid, + isSubscriptionCancelled, + isSubscriptionFree, + isSubscriptionPastDue, + isSubscriptionStripe, + leaveFamily, + redirectToCustomerPortal, + syncUserDetails, + userDetailsAddOnBonuses, + type UserDetails, +} from "ente-new/photos/services/user-details"; +import { usePhotosAppContext } from "ente-new/photos/types/context"; +import { initiateEmail, openURL } from "ente-new/photos/utils/web"; +import { + FlexWrapper, + VerticallyCentered, +} from "ente-shared/components/Container"; import { t } from "i18next"; import { useRouter } from "next/router"; import { GalleryContext } from "pages/gallery"; @@ -897,6 +897,8 @@ const localeName = (locale: SupportedLocale) => { return "Tiếng Việt"; case "ja-JP": return "日本語"; + case "ar-SA": + return "اَلْعَرَبِيَّةُ"; } }; diff --git a/web/apps/photos/src/components/SubscriptionCard.tsx b/web/apps/photos/src/components/SubscriptionCard.tsx index 2e1e9c7162..abf26b8190 100644 --- a/web/apps/photos/src/components/SubscriptionCard.tsx +++ b/web/apps/photos/src/components/SubscriptionCard.tsx @@ -1,13 +1,3 @@ -import { Overlay } from "@/base/components/containers"; -import type { ButtonishProps } from "@/base/components/mui"; -import { bytesInGB, formattedStorageByteSize } from "@/gallery/utils/units"; -import { UnstyledButton } from "@/new/photos/components/UnstyledButton"; -import type { UserDetails } from "@/new/photos/services/user-details"; -import { - familyMemberStorageLimit, - familyUsage, - isPartOfFamilyWithOtherMembers, -} from "@/new/photos/services/user-details"; import ChevronRightIcon from "@mui/icons-material/ChevronRight"; import CircleIcon from "@mui/icons-material/Circle"; import { @@ -18,6 +8,16 @@ import { styled, useMediaQuery, } from "@mui/material"; +import { Overlay } from "ente-base/components/containers"; +import type { ButtonishProps } from "ente-base/components/mui"; +import { bytesInGB, formattedStorageByteSize } from "ente-gallery/utils/units"; +import { UnstyledButton } from "ente-new/photos/components/UnstyledButton"; +import type { UserDetails } from "ente-new/photos/services/user-details"; +import { + familyMemberStorageLimit, + familyUsage, + isPartOfFamilyWithOtherMembers, +} from "ente-new/photos/services/user-details"; import { t } from "i18next"; import type React from "react"; diff --git a/web/apps/photos/src/components/Upload.tsx b/web/apps/photos/src/components/Upload.tsx index 14542a8313..7738324f4f 100644 --- a/web/apps/photos/src/components/Upload.tsx +++ b/web/apps/photos/src/components/Upload.tsx @@ -1,40 +1,7 @@ -import { isDesktop } from "@/base/app"; -import { SpacedRow } from "@/base/components/containers"; -import { DialogCloseIconButton } from "@/base/components/mui/DialogCloseIconButton"; -import { FocusVisibleButton } from "@/base/components/mui/FocusVisibleButton"; -import { RowButton } from "@/base/components/RowButton"; -import { useIsTouchscreen } from "@/base/components/utils/hooks"; -import { - useModalVisibility, - type ModalVisibilityProps, -} from "@/base/components/utils/modal"; -import { useBaseContext } from "@/base/context"; -import { basename } from "@/base/file-name"; -import log from "@/base/log"; -import type { CollectionMapping, Electron, ZipItem } from "@/base/types/ipc"; -import { useFileInput } from "@/gallery/components/utils/use-file-input"; -import type { - FileAndPath, - UploadItem, - UploadPhase, -} from "@/gallery/services/upload"; -import type { Collection } from "@/media/collection"; -import type { EnteFile } from "@/media/file"; -import { UploaderNameInput } from "@/new/albums/components/UploaderNameInput"; -import { CollectionMappingChoice } from "@/new/photos/components/CollectionMappingChoice"; -import type { CollectionSelectorAttributes } from "@/new/photos/components/CollectionSelector"; -import { downloadAppDialogAttributes } from "@/new/photos/components/utils/download"; -import { getLatestCollections } from "@/new/photos/services/collections"; -import { exportMetadataDirectoryName } from "@/new/photos/services/export"; -import { redirectToCustomerPortal } from "@/new/photos/services/user-details"; -import { usePhotosAppContext } from "@/new/photos/types/context"; -import { firstNonEmpty } from "@/utils/array"; -import { CustomError } from "@ente/shared/error"; import ChevronRightIcon from "@mui/icons-material/ChevronRight"; import DiscFullIcon from "@mui/icons-material/DiscFull"; import GoogleIcon from "@mui/icons-material/Google"; import ImageOutlinedIcon from "@mui/icons-material/ImageOutlined"; -import InfoRoundedIcon from "@mui/icons-material/InfoRounded"; import PermMediaOutlinedIcon from "@mui/icons-material/PermMediaOutlined"; import { Box, @@ -46,6 +13,38 @@ import { Typography, type DialogProps, } from "@mui/material"; +import { isDesktop } from "ente-base/app"; +import { SpacedRow } from "ente-base/components/containers"; +import { DialogCloseIconButton } from "ente-base/components/mui/DialogCloseIconButton"; +import { FocusVisibleButton } from "ente-base/components/mui/FocusVisibleButton"; +import { RowButton } from "ente-base/components/RowButton"; +import { useIsTouchscreen } from "ente-base/components/utils/hooks"; +import { + useModalVisibility, + type ModalVisibilityProps, +} from "ente-base/components/utils/modal"; +import { useBaseContext } from "ente-base/context"; +import { basename, dirname, joinPath } from "ente-base/file-name"; +import log from "ente-base/log"; +import type { CollectionMapping, Electron, ZipItem } from "ente-base/types/ipc"; +import { useFileInput } from "ente-gallery/components/utils/use-file-input"; +import type { + FileAndPath, + UploadItem, + UploadPhase, +} from "ente-gallery/services/upload"; +import type { Collection } from "ente-media/collection"; +import type { EnteFile } from "ente-media/file"; +import { UploaderNameInput } from "ente-new/albums/components/UploaderNameInput"; +import { CollectionMappingChoice } from "ente-new/photos/components/CollectionMappingChoice"; +import type { CollectionSelectorAttributes } from "ente-new/photos/components/CollectionSelector"; +import { downloadAppDialogAttributes } from "ente-new/photos/components/utils/download"; +import { getLatestCollections } from "ente-new/photos/services/collections"; +import { exportMetadataDirectoryName } from "ente-new/photos/services/export"; +import { redirectToCustomerPortal } from "ente-new/photos/services/user-details"; +import { usePhotosAppContext } from "ente-new/photos/types/context"; +import { CustomError } from "ente-shared/error"; +import { firstNonEmpty } from "ente-utils/array"; import { t } from "i18next"; import { GalleryContext } from "pages/gallery"; import React, { @@ -55,7 +54,6 @@ import React, { useRef, useState, } from "react"; -import { Trans } from "react-i18next"; import { getPublicCollectionUID, getPublicCollectionUploaderName, @@ -67,8 +65,8 @@ import type { UploadCounter, UploadFileNames, UploadItemWithCollection, -} from "services/upload/uploadManager"; -import uploadManager from "services/upload/uploadManager"; +} from "services/upload-manager"; +import { uploadManager } from "services/upload-manager"; import watcher from "services/watch"; import { SetLoading } from "types/gallery"; import { getOrCreateAlbum } from "utils/collection"; @@ -120,6 +118,8 @@ interface UploadProps { type UploadType = "files" | "folders" | "zips"; +type UploadItemAndPath = [UploadItem, string]; + /** * Top level component that houses the infrastructure for handling uploads. */ @@ -212,7 +212,7 @@ export const Upload: React.FC = ({ * * See the documentation of {@link UploadItem} for more details. */ - const uploadItemsAndPaths = useRef<[UploadItem, string][]>([]); + const uploadItemsAndPaths = useRef([]); /** * If true, then the next upload we'll be processing was initiated by our @@ -414,6 +414,8 @@ export const Upload: React.FC = ({ // // - All the paths use POSIX separators. See inline comments. // + // - For zips we concatenate the path of the zip to the path within the + // zip for the purpose of computing the nesting. const allItemAndPaths = [ // Relative path (using POSIX separators) or the file's name. webFiles.map((f) => [f, pathLikeForWebFile(f)]), @@ -422,12 +424,17 @@ export const Upload: React.FC = ({ // which return POSIX paths. desktopFiles.map((fp) => [fp, fp.path]), desktopFilePaths.map((p) => [p, p]), - // The first path, that of the zip file itself, is POSIX like the - // other paths we get over the IPC boundary. And the second path, - // ze[1], the entry name, uses POSIX separators because that is what - // the ZIP format uses. - desktopZipItems.map((ze) => [ze, ze[1]]), - ].flat() as [UploadItem, string][]; + // Concatenate the path of the item within the zip to path of the + // zip. This won't affect the upload: this path is only used for + // computation of the "parent" folder, and this concatenation best + // reflects the nesting. + // + // Re POSIXness: The first path, that of the zip file itself, is + // POSIX like the other paths we get over the IPC boundary. And the + // second path, ze[1], the entry name, uses POSIX separators because + // that is what the ZIP format uses. + desktopZipItems.map((ze) => [ze, joinPath(dirname(ze[0]), ze[1])]), + ].flat() as UploadItemAndPath[]; if (allItemAndPaths.length == 0) return; @@ -454,8 +461,7 @@ export const Upload: React.FC = ({ // Remove hidden files (files whose names begins with a "."). const prunedItemAndPaths = allItemAndPaths.filter( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - ([_, p]) => !basename(p).startsWith("."), + ([, p]) => !basename(p).startsWith("."), ); uploadItemsAndPaths.current = prunedItemAndPaths; @@ -464,10 +470,9 @@ export const Upload: React.FC = ({ return; } - const importSuggestion = getImportSuggestion( + const importSuggestion = deriveImportSuggestion( selectedUploadType.current, - // eslint-disable-next-line @typescript-eslint/no-unused-vars - prunedItemAndPaths.map(([_, p]) => p), + prunedItemAndPaths.map(([, p]) => p), ); setImportSuggestion(importSuggestion); @@ -586,6 +591,7 @@ export const Upload: React.FC = ({ } else { collectionNameToUploadItems = groupFilesBasedOnParentFolder( uploadItemsAndPaths.current, + collectionName, ); } try { @@ -803,44 +809,12 @@ export const Upload: React.FC = ({ } }; - const handleCollectionMappingSelect = (mapping: CollectionMapping) => { - switch (mapping) { - case "root": - uploadToSingleNewCollection( - // rootFolderName would be empty here if one edge case: - // - User drags and drops a mixture of files and folders - // - They select the "upload to multiple albums" option - // - The see the error, close the error - // - Then they select the "upload to single album" option - // - // In such a flow, we'll reach here with an empty - // rootFolderName. The proper fix for this would be - // rearrange the flow and ask them to name the album here, - // but we currently don't have support for chaining modals. - // So in the meanwhile, keep a fallback album name at hand. - importSuggestion.rootFolderName ?? - t("autogenerated_default_album_name"), - ); - break; - case "parent": - if (importSuggestion.hasRootLevelFileWithFolder) { - showMiniDialog({ - icon: , - title: t("root_level_file_with_folder_not_allowed"), - message: ( - - ), - cancel: t("ok"), - }); - } else { - uploadFilesToNewCollections("parent"); - } - } - }; + const handleCollectionMappingSelect = (mapping: CollectionMapping) => + uploadFilesToNewCollections( + mapping, + importSuggestion.rootFolderName ?? + t("autogenerated_default_album_name"), + ); return ( <> @@ -966,19 +940,17 @@ const pathLikeForWebFile = (file: File): string => interface ImportSuggestion { rootFolderName: string; hasNestedFolders: boolean; - hasRootLevelFileWithFolder: boolean; } const defaultImportSuggestion: ImportSuggestion = { rootFolderName: "", hasNestedFolders: false, - hasRootLevelFileWithFolder: false, }; -function getImportSuggestion( +const deriveImportSuggestion = ( uploadType: UploadType, paths: string[], -): ImportSuggestion { +): ImportSuggestion => { if (isDesktop && uploadType == "files") { return defaultImportSuggestion; } @@ -1014,40 +986,58 @@ function getImportSuggestion( return { rootFolderName: commonPathPrefix || null, hasNestedFolders: firstFileFolder !== lastFileFolder, - hasRootLevelFileWithFolder: firstFileFolder === "", }; -} +}; -// This function groups files that are that have the same parent folder into collections -// For Example, for user files have a directory structure like this -// a -// / | \ -// b j c -// /|\ / \ -// e f g h i -// -// The files will grouped into 3 collections. -// [a => [j], -// b => [e,f,g], -// c => [h, i]] +/** + * Group files that are that have the same parent folder into collections. + * + * For Example, if the user selects files have a directory structure like: + * + * a + * / | \ + * b j c + * /|\ / \ + * e f g h i + * + * The files will grouped into 3 collections: + * + * [ + * a => [j], + * b => [e,f,g], + * c => [h, i] + * ] + * + * @param defaultFolderName Optional collection name to use for any rooted files + * that do not have a parent folder. The function will throw if a default is not + * provided and we encounter any such files without a parent. + */ const groupFilesBasedOnParentFolder = ( - uploadItemsAndPaths: [UploadItem, string][], + uploadItemAndPaths: UploadItemAndPath[], + defaultFolderName: string | undefined, ) => { const result = new Map(); - for (const [uploadItem, pathOrName] of uploadItemsAndPaths) { + for (const [uploadItem, pathOrName] of uploadItemAndPaths) { let folderPath = pathOrName.substring(0, pathOrName.lastIndexOf("/")); - // If the parent folder of a file is "metadata" - // we consider it to be part of the parent folder - // For Eg,For FileList -> [a/x.png, a/metadata/x.png.json] - // they will both we grouped into the collection "a" - // This is cluster the metadata json files in the same collection as the file it is for + // If the parent folder of a file is "metadata", then we consider it to + // be part of the parent folder. + // + // e.g. for FileList + // + // [a/x.png, a/metadata/x.png.json] + // + // they will both be grouped into the collection "a". This is so that we + // cluster the metadata json files in the same collection as the file it + // is for. if (folderPath.endsWith(exportMetadataDirectoryName)) { folderPath = folderPath.substring(0, folderPath.lastIndexOf("/")); } - const folderName = folderPath.substring( - folderPath.lastIndexOf("/") + 1, - ); - if (!folderName) throw Error("Unexpected empty folder name"); + let folderName = folderPath.substring(folderPath.lastIndexOf("/") + 1); + if (!folderName) { + if (!defaultFolderName) + throw Error(`Leaf file (without default): ${folderPath}`); + folderName = defaultFolderName; + } if (!result.has(folderName)) result.set(folderName, []); result.get(folderName).push(uploadItem); } @@ -1092,7 +1082,7 @@ const setPendingUploads = async ( type UploadTypeSelectorProps = ModalVisibilityProps & { /** - * The particular context / scenario in which this upload is occuring. + * The particular context / scenario in which this upload is occurring. */ intent: UploadTypeSelectorIntent; /** @@ -1186,7 +1176,7 @@ const UploadOptions: React.FC = ({ onSelect, onClose, }) => { - // [Note: Dialog state remains preseved on reopening] + // [Note: Dialog state remains preserved on reopening] // // Keep dialog content specific state here, in a separate component, so that // this state is not tied to the lifetime of the dialog. @@ -1271,7 +1261,7 @@ const DefaultOptions: React.FC = ({ label={t("folder")} onClick={() => onSelect("folders")} /> - {intent !== "collect" && ( + {intent != "collect" && ( } endIcon={} diff --git a/web/apps/photos/src/components/UploadProgress.tsx b/web/apps/photos/src/components/UploadProgress.tsx index fa8b2232e3..ee81e62b27 100644 --- a/web/apps/photos/src/components/UploadProgress.tsx +++ b/web/apps/photos/src/components/UploadProgress.tsx @@ -1,7 +1,3 @@ -import { FilledIconButton } from "@/base/components/mui"; -import { useBaseContext } from "@/base/context"; -import { type UploadPhase, type UploadResult } from "@/gallery/services/upload"; -import { SpaceBetweenFlex } from "@ente/shared/components/Container"; import CloseIcon from "@mui/icons-material/Close"; import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; import UnfoldLessIcon from "@mui/icons-material/UnfoldLess"; @@ -27,6 +23,14 @@ import { type DialogProps, } from "@mui/material"; import ItemList from "components/ItemList"; +import { FilledIconButton } from "ente-base/components/mui"; +import { useBaseContext } from "ente-base/context"; +import { formattedListJoin } from "ente-base/i18n"; +import { + type UploadPhase, + type UploadResult, +} from "ente-gallery/services/upload"; +import { SpaceBetweenFlex } from "ente-shared/components/Container"; import { t } from "i18next"; import React, { createContext, useContext, useEffect, useState } from "react"; import { Trans } from "react-i18next"; @@ -35,7 +39,7 @@ import type { SegregatedFinishedUploads, UploadCounter, UploadFileNames, -} from "services/upload/uploadManager"; +} from "services/upload-manager"; interface UploadProgressProps { open: boolean; @@ -146,68 +150,19 @@ const UploadProgressContext = createContext({ }); const MinimizedUploadProgress: React.FC = () => ( - ({ boxShadow: theme.vars.palette.boxShadow.menu })} - > + ); -function UploadProgressHeader() { - return ( - <> - - - - ); -} - -const UploadProgressTitleText = ({ expanded }) => { - return ( - - {t("FILE_UPLOAD")} - - ); -}; - -function UploadProgressSubtitleText() { - const { uploadPhase, uploadCounter } = useContext(UploadProgressContext); - - return ( - - {subtitleText(uploadPhase, uploadCounter)} - - ); -} - -const subtitleText = ( - uploadPhase: UploadPhase, - uploadCounter: UploadCounter, -) => { - switch (uploadPhase) { - case "preparing": - return t("UPLOAD_STAGE_MESSAGE.0"); - case "readingMetadata": - return t("UPLOAD_STAGE_MESSAGE.1"); - case "uploading": - return t("UPLOAD_STAGE_MESSAGE.3", { uploadCounter }); - case "cancelling": - return t("UPLOAD_STAGE_MESSAGE.4"); - case "done": - return t("UPLOAD_STAGE_MESSAGE.5"); - } -}; +const UploadProgressHeader: React.FC = () => ( + <> + + + +); const UploadProgressTitle: React.FC = () => { const { setExpanded, onClose, expanded } = useContext( @@ -219,7 +174,7 @@ const UploadProgressTitle: React.FC = () => { - + {t("file_upload")} @@ -237,8 +192,88 @@ const UploadProgressTitle: React.FC = () => { ); }; +const UploadProgressSubtitleText: React.FC = () => { + const { uploadPhase, uploadCounter, finishedUploads } = useContext( + UploadProgressContext, + ); + + return ( + + {subtitleText(uploadPhase, uploadCounter, finishedUploads)} + + ); +}; + +const subtitleText = ( + uploadPhase: UploadPhase, + uploadCounter: UploadCounter, + finishedUploads: SegregatedFinishedUploads | null | undefined, +) => { + switch (uploadPhase) { + case "preparing": + return t("preparing"); + case "readingMetadata": + return t("upload_reading_metadata_files"); + case "uploading": + return t("processed_counts", { + count: uploadCounter.finished, + total: uploadCounter.total, + }); + case "cancelling": + return t("upload_cancelling"); + case "done": { + const count = uploadedFileCount(finishedUploads); + const notCount = notUploadedFileCount(finishedUploads); + const items: string[] = []; + if (count) items.push(t("upload_done", { count })); + if (notCount) items.push(t("upload_skipped", { count: notCount })); + if (!items.length) { + return t("upload_done", { count }); + } else { + return formattedListJoin(items); + } + } + } +}; + +const uploadedFileCount = ( + finishedUploads: SegregatedFinishedUploads | null | undefined, +) => { + if (!finishedUploads) return 0; + + let c = 0; + c += finishedUploads.get("uploaded")?.length ?? 0; + c += finishedUploads.get("uploadedWithStaticThumbnail")?.length ?? 0; + c += finishedUploads.get("addedSymlink")?.length ?? 0; + + return c; +}; + +const notUploadedFileCount = ( + finishedUploads: SegregatedFinishedUploads | null | undefined, +) => { + if (!finishedUploads) return 0; + + let c = 0; + c += finishedUploads.get("alreadyUploaded")?.length ?? 0; + c += finishedUploads.get("blocked")?.length ?? 0; + c += finishedUploads.get("failed")?.length ?? 0; + c += finishedUploads.get("largerThanAvailableStorage")?.length ?? 0; + c += finishedUploads.get("tooLarge")?.length ?? 0; + c += finishedUploads.get("unsupported")?.length ?? 0; + return c; +}; + const UploadProgressBar: React.FC = () => { const { uploadPhase, percentComplete } = useContext(UploadProgressContext); + return ( {(uploadPhase == "readingMetadata" || @@ -264,18 +299,7 @@ function UploadProgressDialog() { const [hasUnUploadedFiles, setHasUnUploadedFiles] = useState(false); useEffect(() => { - if ( - finishedUploads.get("alreadyUploaded")?.length > 0 || - finishedUploads.get("blocked")?.length > 0 || - finishedUploads.get("failed")?.length > 0 || - finishedUploads.get("largerThanAvailableStorage")?.length > 0 || - finishedUploads.get("tooLarge")?.length > 0 || - finishedUploads.get("unsupported")?.length > 0 - ) { - setHasUnUploadedFiles(true); - } else { - setHasUnUploadedFiles(false); - } + setHasUnUploadedFiles(notUploadedFileCount(finishedUploads) > 0); }, [finishedUploads]); const handleClose: DialogProps["onClose"] = (_, reason) => { @@ -287,29 +311,29 @@ function UploadProgressDialog() { {(uploadPhase == "uploading" || uploadPhase == "done") && ( - {uploadPhase === "uploading" && } + {uploadPhase == "uploading" && } {uploadPhase == "done" && hasUnUploadedFiles && ( - {t("FILE_NOT_UPLOADED_LIST")} + {t("file_not_uploaded_list")} )} } + sectionTitle={t("blocked_uploads")} + sectionInfo={} /> )} @@ -377,13 +399,13 @@ const InProgressSection: React.FC = () => { }> {hasLivePhotos && ( - {t("LIVE_PHOTOS_DETECTED")} + {t("live_photos_detected")} )} { (finishedUploads?.get("failed")?.length > 0 || finishedUploads?.get("blocked")?.length > 0 ? ( ) : (