diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..97edf4bb9 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +lib/generated/intl/messages_*.dart linguist-generated=true +lib/generated/l10n.dart linguist-generated=true diff --git a/.gitignore b/.gitignore index 2ff5fe7c7..0eb8c482d 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ #Visual Studio Code related .vscode/launch.json +.vscode/settings.json # Flutter/Dart/Pub related **/doc/api/ @@ -28,7 +29,6 @@ .pub/ /build/ -lib/generated/* # Web related lib/generated_plugin_registrant.dart @@ -39,3 +39,4 @@ lib/generated_plugin_registrant.dart android/key.properties android/app/.settings/* .env +fastlane/report.xml \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 000000000..b734015f8 --- /dev/null +++ b/Gemfile @@ -0,0 +1,10 @@ +# Autogenerated by fastlane +# +# Ensure this file is checked in to source control! + +source "https://rubygems.org" + +gem 'fastlane' + +plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile') +eval_gemfile(plugins_path) if File.exist?(plugins_path) diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 000000000..430172073 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,220 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.6) + rexml + addressable (2.8.4) + public_suffix (>= 2.0.2, < 6.0) + artifactory (3.0.15) + atomos (0.1.3) + aws-eventstream (1.2.0) + aws-partitions (1.752.0) + aws-sdk-core (3.171.0) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.651.0) + aws-sigv4 (~> 1.5) + jmespath (~> 1, >= 1.6.1) + aws-sdk-kms (1.63.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.121.0) + aws-sdk-core (~> 3, >= 3.165.0) + aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.4) + aws-sigv4 (1.5.2) + aws-eventstream (~> 1, >= 1.0.2) + babosa (1.0.4) + claide (1.1.0) + colored (1.2) + colored2 (3.1.2) + commander (4.6.0) + highline (~> 2.0.0) + declarative (0.0.20) + digest-crc (0.6.4) + rake (>= 12.0.0, < 14.0.0) + domain_name (0.5.20190701) + unf (>= 0.0.5, < 1.0.0) + dotenv (2.8.1) + emoji_regex (3.2.3) + excon (0.99.0) + faraday (1.10.3) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) + faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0) + faraday-multipart (~> 1.0) + faraday-net_http (~> 1.0) + faraday-net_http_persistent (~> 1.0) + faraday-patron (~> 1.0) + faraday-rack (~> 1.0) + faraday-retry (~> 1.0) + ruby2_keywords (>= 0.0.4) + faraday-cookie_jar (0.0.7) + faraday (>= 0.8.0) + http-cookie (~> 1.0.0) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) + faraday-excon (1.1.0) + faraday-httpclient (1.0.1) + faraday-multipart (1.0.4) + multipart-post (~> 2) + faraday-net_http (1.0.1) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) + faraday-rack (1.0.0) + faraday-retry (1.0.3) + faraday_middleware (1.2.0) + faraday (~> 1.0) + fastimage (2.2.6) + fastlane (2.212.2) + CFPropertyList (>= 2.3, < 4.0.0) + addressable (>= 2.8, < 3.0.0) + artifactory (~> 3.0) + aws-sdk-s3 (~> 1.0) + babosa (>= 1.0.3, < 2.0.0) + bundler (>= 1.12.0, < 3.0.0) + colored + commander (~> 4.6) + dotenv (>= 2.1.1, < 3.0.0) + emoji_regex (>= 0.1, < 4.0) + excon (>= 0.71.0, < 1.0.0) + faraday (~> 1.0) + faraday-cookie_jar (~> 0.0.6) + faraday_middleware (~> 1.0) + fastimage (>= 2.1.0, < 3.0.0) + gh_inspector (>= 1.1.2, < 2.0.0) + google-apis-androidpublisher_v3 (~> 0.3) + google-apis-playcustomapp_v1 (~> 0.1) + google-cloud-storage (~> 1.31) + highline (~> 2.0) + json (< 3.0.0) + jwt (>= 2.1.0, < 3) + mini_magick (>= 4.9.4, < 5.0.0) + multipart-post (~> 2.0.0) + naturally (~> 2.2) + optparse (~> 0.1.1) + plist (>= 3.1.0, < 4.0.0) + rubyzip (>= 2.0.0, < 3.0.0) + security (= 0.1.3) + simctl (~> 1.6.3) + terminal-notifier (>= 2.0.0, < 3.0.0) + terminal-table (>= 1.4.5, < 2.0.0) + tty-screen (>= 0.6.3, < 1.0.0) + tty-spinner (>= 0.8.0, < 1.0.0) + word_wrap (~> 1.0.0) + xcodeproj (>= 1.13.0, < 2.0.0) + xcpretty (~> 0.3.0) + xcpretty-travis-formatter (>= 0.0.3) + fastlane-plugin-versioning (0.5.1) + gh_inspector (1.1.3) + google-apis-androidpublisher_v3 (0.40.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-core (0.11.0) + addressable (~> 2.5, >= 2.5.1) + googleauth (>= 0.16.2, < 2.a) + httpclient (>= 2.8.1, < 3.a) + mini_mime (~> 1.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.a) + rexml + webrick + google-apis-iamcredentials_v1 (0.17.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-playcustomapp_v1 (0.13.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-storage_v1 (0.19.0) + google-apis-core (>= 0.9.0, < 2.a) + google-cloud-core (1.6.0) + google-cloud-env (~> 1.0) + google-cloud-errors (~> 1.0) + google-cloud-env (1.6.0) + faraday (>= 0.17.3, < 3.0) + google-cloud-errors (1.3.1) + google-cloud-storage (1.44.0) + addressable (~> 2.8) + digest-crc (~> 0.4) + google-apis-iamcredentials_v1 (~> 0.1) + google-apis-storage_v1 (~> 0.19.0) + google-cloud-core (~> 1.6) + googleauth (>= 0.16.2, < 2.a) + mini_mime (~> 1.0) + googleauth (1.5.2) + faraday (>= 0.17.3, < 3.a) + jwt (>= 1.4, < 3.0) + memoist (~> 0.16) + multi_json (~> 1.11) + os (>= 0.9, < 2.0) + signet (>= 0.16, < 2.a) + highline (2.0.3) + http-cookie (1.0.5) + domain_name (~> 0.5) + httpclient (2.8.3) + jmespath (1.6.2) + json (2.6.3) + jwt (2.7.0) + memoist (0.16.2) + mini_magick (4.12.0) + mini_mime (1.1.2) + multi_json (1.15.0) + multipart-post (2.0.0) + nanaimo (0.3.0) + naturally (2.2.1) + optparse (0.1.1) + os (1.1.4) + plist (3.7.0) + public_suffix (5.0.1) + rake (13.0.6) + representable (3.2.0) + declarative (< 0.1.0) + trailblazer-option (>= 0.1.1, < 0.2.0) + uber (< 0.2.0) + retriable (3.1.2) + rexml (3.2.5) + rouge (2.0.7) + ruby2_keywords (0.0.5) + rubyzip (2.3.2) + security (0.1.3) + signet (0.17.0) + addressable (~> 2.8) + faraday (>= 0.17.5, < 3.a) + jwt (>= 1.5, < 3.0) + multi_json (~> 1.10) + simctl (1.6.10) + CFPropertyList + naturally + terminal-notifier (2.0.0) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + trailblazer-option (0.1.2) + tty-cursor (0.7.1) + tty-screen (0.8.1) + tty-spinner (0.9.3) + tty-cursor (~> 0.7) + uber (0.1.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.8.2) + unicode-display_width (1.8.0) + webrick (1.8.1) + word_wrap (1.0.0) + xcodeproj (1.22.0) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.3.0) + rexml (~> 3.2.4) + xcpretty (0.3.0) + rouge (~> 2.0.7) + xcpretty-travis-formatter (1.0.1) + xcpretty (~> 0.2, >= 0.0.7) + +PLATFORMS + arm64-darwin-21 + +DEPENDENCIES + fastlane + fastlane-plugin-versioning + +BUNDLED WITH + 2.4.10 diff --git a/analysis_options.yaml b/analysis_options.yaml index 671707e94..cc6de6a00 100644 --- a/analysis_options.yaml +++ b/analysis_options.yaml @@ -40,7 +40,7 @@ analyzer: exhaustive_cases: error curly_braces_in_flow_control_structures: error directives_ordering: error - require_trailing_commas: warning + require_trailing_commas: error always_use_package_imports: warning prefer_final_fields: error unused_import: error @@ -70,3 +70,4 @@ analyzer: exclude: - thirdparty/** + - lib/generated/** diff --git a/assets/models/scenes/labels.txt b/assets/models/scenes/labels.txt index cb284a62e..e0df14082 100644 --- a/assets/models/scenes/labels.txt +++ b/assets/models/scenes/labels.txt @@ -8,7 +8,7 @@ blue sky cloudy sky greenery autumn leaves -potrait +portrait flower night shot stage concert @@ -19,7 +19,7 @@ indoor backlight text documents qr images -group potrait +group portrait computer screens kids dog diff --git a/crowdin.yml b/crowdin.yml index ff5c92002..d28404d5c 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,6 +1,21 @@ project_id_env: CROWDIN_PROJECT_ID api_token_env: CROWDIN_PERSONAL_TOKEN +preserve_hierarchy: true files: - source: /lib/l10n/intl_en.arb translation: /lib/l10n/intl_%two_letters_code%.arb + dest: /%original_file_name% + type: arb + - source: /fastlane/metadata/playstore/en-US/*.txt + translation: /fastlane/metadata/playstore/%two_letters_code%/%original_file_name% + dest: /playstore/%original_file_name% + type: txt + - source: /fastlane/metadata/android/en-US/*.txt + translation: /translations/%two_letters_code%/%original_file_name% + dest: /fdroid/%original_file_name% + type: txt + - source: /fastlane/metadata/ios/en-US/*.txt + translation: /fastlane/metadata/ios/%two_letters_code%/%original_file_name% + dest: /appstore/%original_file_name% + type: txt diff --git a/fastlane/Appfile b/fastlane/Appfile new file mode 100644 index 000000000..3ab39fd25 --- /dev/null +++ b/fastlane/Appfile @@ -0,0 +1,7 @@ +app_identifier(ENV["PHOTOS_APP_BUNDLE_ID"]) +apple_id(ENV["PHOTOS_APPLE_ID"]) +team_id(ENV["PHOTOS_TEAM_ID"]) +api_key(ENV["PHOTOS_CONNECT_KEY"]) + +json_key_file(ENV["PHOTOS_PLAYSTORE_JSON_KEY_PATH"]) +package_name(ENV["PHOTOS_PKG_NAME"]) diff --git a/fastlane/Fastfile b/fastlane/Fastfile new file mode 100644 index 000000000..ec47a0663 --- /dev/null +++ b/fastlane/Fastfile @@ -0,0 +1,25 @@ +before_all do |lane| + ENV["SUPPLY_METADATA_PATH"] = "./fastlane/metadata/playstore" +end + +desc "Download iOS screenshots" +lane :download_ios_screenshots do + user_name = ENV["APPLE_USER_NAME"] + bundle_id = ENV["PHOTOS_APP_BUNDLE_ID"] + sh("fastlane deliver download_screenshots -w './metadata/ios/Screenshots' -u '#{user_name}' -a '#{bundle_id}' --use_live_version true --metadata_path './metadata/ios'") +end + + + +desc "Download Android metadata" +lane :download_android_metadata do + puts "Loading Appfile from path: #{File.expand_path('../Appfile', __FILE__)}" + package_name = ENV["PHOTOS_PKG_NAME"] + key_path = ENV["PHOTOS_PLAYSTORE_JSON_KEY_PATH"] + + sh("fastlane supply init --metadata_path='./fastlane/metadata/playstore' + --json_key='#{key_path}' --package_name='#{package_name}'") + + +# UI.success("Android metadata downloaded to #{ENV["SUPPLY_METADATA_PATH"]}") +end diff --git a/fastlane/Pluginfile b/fastlane/Pluginfile new file mode 100644 index 000000000..87578f80a --- /dev/null +++ b/fastlane/Pluginfile @@ -0,0 +1,5 @@ +# Autogenerated by fastlane +# +# Ensure this file is checked in to source control! + +gem 'fastlane-plugin-versioning' diff --git a/fastlane/README.md b/fastlane/README.md new file mode 100644 index 000000000..60b0e6f9d --- /dev/null +++ b/fastlane/README.md @@ -0,0 +1,38 @@ +fastlane documentation +---- + +# Installation + +Make sure you have the latest version of the Xcode command line tools installed: + +```sh +xcode-select --install +``` + +For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane) + +# Available Actions + +### download_ios_screenshots + +```sh +[bundle exec] fastlane download_ios_screenshots +``` + +Download iOS screenshots + +### download_android_metadata + +```sh +[bundle exec] fastlane download_android_metadata +``` + +Download Android metadata + +---- + +This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. + +More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools). + +The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools). diff --git a/fastlane/metadata/ios/Screenshots/en-US/0_APP_IPAD_PRO_129_0.png b/fastlane/metadata/ios/Screenshots/en-US/0_APP_IPAD_PRO_129_0.png new file mode 100644 index 000000000..c5e64d881 Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/0_APP_IPAD_PRO_129_0.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/0_APP_IPAD_PRO_3GEN_129_0.png b/fastlane/metadata/ios/Screenshots/en-US/0_APP_IPAD_PRO_3GEN_129_0.png new file mode 100644 index 000000000..a96cc06b4 Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/0_APP_IPAD_PRO_3GEN_129_0.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/0_APP_IPHONE_55_0.png b/fastlane/metadata/ios/Screenshots/en-US/0_APP_IPHONE_55_0.png new file mode 100644 index 000000000..061a42c5f Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/0_APP_IPHONE_55_0.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/0_APP_IPHONE_65_0.png b/fastlane/metadata/ios/Screenshots/en-US/0_APP_IPHONE_65_0.png new file mode 100644 index 000000000..1bcb24a03 Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/0_APP_IPHONE_65_0.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/1_APP_IPHONE_55_1.png b/fastlane/metadata/ios/Screenshots/en-US/1_APP_IPHONE_55_1.png new file mode 100644 index 000000000..d82091db5 Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/1_APP_IPHONE_55_1.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/1_APP_IPHONE_65_1.png b/fastlane/metadata/ios/Screenshots/en-US/1_APP_IPHONE_65_1.png new file mode 100644 index 000000000..ccc15f79b Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/1_APP_IPHONE_65_1.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/2_APP_IPHONE_55_2.png b/fastlane/metadata/ios/Screenshots/en-US/2_APP_IPHONE_55_2.png new file mode 100644 index 000000000..8d87ac0be Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/2_APP_IPHONE_55_2.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/2_APP_IPHONE_65_2.png b/fastlane/metadata/ios/Screenshots/en-US/2_APP_IPHONE_65_2.png new file mode 100644 index 000000000..77d8a81b6 Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/2_APP_IPHONE_65_2.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/3_APP_IPHONE_55_3.png b/fastlane/metadata/ios/Screenshots/en-US/3_APP_IPHONE_55_3.png new file mode 100644 index 000000000..a0f788d11 Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/3_APP_IPHONE_55_3.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/3_APP_IPHONE_65_3.png b/fastlane/metadata/ios/Screenshots/en-US/3_APP_IPHONE_65_3.png new file mode 100644 index 000000000..2f6513ffe Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/3_APP_IPHONE_65_3.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/4_APP_IPHONE_55_4.png b/fastlane/metadata/ios/Screenshots/en-US/4_APP_IPHONE_55_4.png new file mode 100644 index 000000000..a0be239c9 Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/4_APP_IPHONE_55_4.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/4_APP_IPHONE_65_4.png b/fastlane/metadata/ios/Screenshots/en-US/4_APP_IPHONE_65_4.png new file mode 100644 index 000000000..c9ac7dcee Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/4_APP_IPHONE_65_4.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/5_APP_IPHONE_55_5.png b/fastlane/metadata/ios/Screenshots/en-US/5_APP_IPHONE_55_5.png new file mode 100644 index 000000000..4c154ad89 Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/5_APP_IPHONE_55_5.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/5_APP_IPHONE_65_5.png b/fastlane/metadata/ios/Screenshots/en-US/5_APP_IPHONE_65_5.png new file mode 100644 index 000000000..9bc1da306 Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/5_APP_IPHONE_65_5.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/6_APP_IPHONE_55_6.png b/fastlane/metadata/ios/Screenshots/en-US/6_APP_IPHONE_55_6.png new file mode 100644 index 000000000..4a5644213 Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/6_APP_IPHONE_55_6.png differ diff --git a/fastlane/metadata/ios/Screenshots/en-US/6_APP_IPHONE_65_6.png b/fastlane/metadata/ios/Screenshots/en-US/6_APP_IPHONE_65_6.png new file mode 100644 index 000000000..7ae5b96c6 Binary files /dev/null and b/fastlane/metadata/ios/Screenshots/en-US/6_APP_IPHONE_65_6.png differ diff --git a/fastlane/metadata/ios/en-US/description.txt b/fastlane/metadata/ios/en-US/description.txt new file mode 100644 index 000000000..a98a74300 --- /dev/null +++ b/fastlane/metadata/ios/en-US/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/fastlane/metadata/ios/en-US/keywords.txt b/fastlane/metadata/ios/en-US/keywords.txt new file mode 100644 index 000000000..e1462baf5 --- /dev/null +++ b/fastlane/metadata/ios/en-US/keywords.txt @@ -0,0 +1 @@ +photos,photography,family,privacy,cloud,backup,videos,photo,encryption,storage,album,alternative diff --git a/fastlane/metadata/ios/en-US/name.txt b/fastlane/metadata/ios/en-US/name.txt new file mode 100644 index 000000000..ad1c680d4 --- /dev/null +++ b/fastlane/metadata/ios/en-US/name.txt @@ -0,0 +1 @@ +ente Photos diff --git a/fastlane/metadata/ios/en-US/subtitle.txt b/fastlane/metadata/ios/en-US/subtitle.txt new file mode 100644 index 000000000..958a35f1c --- /dev/null +++ b/fastlane/metadata/ios/en-US/subtitle.txt @@ -0,0 +1 @@ +Encrypted photo storage diff --git a/fastlane/metadata/ios/es/description.txt b/fastlane/metadata/ios/es/description.txt new file mode 100644 index 000000000..90ad46cc1 --- /dev/null +++ b/fastlane/metadata/ios/es/description.txt @@ -0,0 +1,33 @@ +Ente es una aplicación simple que guarda automáticamente copias de segurida y organiza tus fotos y vídeos. + +Si has estado buscando una alternativa pro-privacidad para guardar tus recuerdos, has llegado al sitio adecuado. Con Ente, se almacenan cifradas de extremo a extremo (e2ee). Esto significa que solo tú puedes verlas. + +Tenemos aplicaciones en todas las plataformas, y tus fotos se sincronizarán perfectamente entre todos tus dispositivos encriptadas de extremo a extremo (e2ee). + +Ente también facitila compartir tus álbumes con tus seres queridos. También puedes compartirlos directamente con otros usuarios de Ente cifrados de extremo a extremo, o publicarlos en enlaces visibles. + +Tus datos encriptados se almacenan en varias ubicaciones, incluyendo un refugio antiaréreo en París. Nos tomamos en serio la posternidad y hacemos posible asegurar que tus memorias te sobreviven. + +Estamos aquí para hacer la aplicación de fotos más segura de todas. + +CARACTERÍSTICAS +- Copias de seguridad de calidad original, porque cada píxel es importante +- Planes familiares, para que puedas compartir el almacenamiento con tu familia +- Carpetas compartidas, por si quieres que tu pareja disfrute de tus 'clicks' +- Enlaces al álbum, que se pueden proteger con una contraseña y programar para que expiren +- Capacidad para liberar espacio, eliminando archivos de los que ya tienes una copia de seguridad +- Editor de imagen, para añadir retoques finales +- Marca como favoritos, oculta y revive tus recuerdos, porque son preciosos +- Importa en un click desde todos los proveedores de almacenamiento principales +- Tema oscuro, porque tus fotos quedan bien con él +- 2FA, 3FA, autenticación biométrica +- ¡Y mucho más! + +PRECIOS +No ofrecemos planes gratis para siempre, porque es importante para nosotros seguir siendo sostenibles y resistir a la prueba del tiempo. En su lugar, ofrecemos planes asequibles que puedes compartir libremente con tu familia. Puedes encontrar más información en ente.io. + +SOPORTE +Estamos orgullosos de ofrecer apoyo humano. Si eres un cliente de pago, puedes contactar con team@ente.io y esperar una respuesta de nuestro equipo en 24 horas. + +TÉRMINOS +https://ente.io/terms diff --git a/fastlane/metadata/ios/es/keywords.txt b/fastlane/metadata/ios/es/keywords.txt new file mode 100644 index 000000000..c40c3b188 --- /dev/null +++ b/fastlane/metadata/ios/es/keywords.txt @@ -0,0 +1 @@ +fotos,fotografía,familia,privacidad,nube,copia de seguridad,vídeos,foto,encriptación,almacenamiento,álbum,alternativo diff --git a/fastlane/metadata/ios/es/name.txt b/fastlane/metadata/ios/es/name.txt new file mode 100644 index 000000000..1f84427c9 --- /dev/null +++ b/fastlane/metadata/ios/es/name.txt @@ -0,0 +1 @@ +ente Fotos diff --git a/fastlane/metadata/ios/es/subtitle.txt b/fastlane/metadata/ios/es/subtitle.txt new file mode 100644 index 000000000..bec346ddb --- /dev/null +++ b/fastlane/metadata/ios/es/subtitle.txt @@ -0,0 +1 @@ +Almacenamiento de fotos encriptado diff --git a/fastlane/metadata/ios/nl/description.txt b/fastlane/metadata/ios/nl/description.txt new file mode 100644 index 000000000..03d2d1852 --- /dev/null +++ b/fastlane/metadata/ios/nl/description.txt @@ -0,0 +1,33 @@ +Ente is een eenvoudige app om jouw foto's en video's automatisch te back-uppen en organiseren. + +Als je op zoek bent naar een privacy-vriendelijk alternatief om je herinneringen te bewaren, dan ben je op de juiste plaats. Bij ente worden ze end-to-end encrypted (e2ee). Dit betekent dat alleen jij ze kunt bekijken. + +We hebben apps op alle platformen, en je foto's zullen naadloos synchroniseren tussen al je apparaten op een end-to-end versleutelde (e2ee) manier. + +Ente maakt het ook eenvoudig om je albums te delen met je dierbaren. Je kunt ze direct delen met andere Ente gebruikers, end-to-end versleuteld; of met openbaar zichtbare links. + +Jouw versleutelde gegevens worden over meerdere locaties opgeslagen, waaronder een kernbunker in Parijs. Wij nemen opslag voor de lange termijn serieus, en zorgen ervoor dat je herinneringen minstens je hele leven bewaard worden. + +Ons doel is om de veiligste foto app ooit te maken, sluit je bij ons aan! + +FUNCTIES +- Backups van originele kwaliteit, omdat elke pixel belangrijk is +- Familieplannen, zodat je de opslag kunt delen met je familie +- Gedeelde mappen, voor het geval je jouw partner wilt laten meegenieten van jouw "Camera" klikjes +- Album links, die met een wachtwoord en vervaldatum beschermd kunnen worden +- Mogelijkheid om ruimte vrij te maken op je apparaat, door bestanden die veilig zijn geback-upt te verwijderen +- Fotobewerker om de laatste finishing touches toe te voegen +- Favorieten, verbergen en herleven van je herinneringen, want ze zijn kostbaar +- Met één klik importeren vanuit alle belangrijke opslagdiensten +- Donker thema, omdat je foto's er goed in uit zien +- 2FA, 3FA, biometrische authenticatie +- en nog veel meer! + +PRIJZEN +We bieden geen oneindig gratis plannen aan, omdat het voor ons belangrijk is dat we duurzaam blijven en de tand des tijds weerstaan. In plaats daarvan bieden we betaalbare plannen aan die je vrij kunt delen met je familie. Je kunt meer informatie vinden op ente.io. + +ONDERSTEUNING +Wij zijn trots op het bieden van menselijke klantenservice. Als je een betaalde klant bent, kun je contact opnemen met team@ente.io en binnen 24 uur een antwoord van ons verwachten. + +ALGEMENE VOORWAARDEN +https://ente.io/terms diff --git a/fastlane/metadata/ios/nl/keywords.txt b/fastlane/metadata/ios/nl/keywords.txt new file mode 100644 index 000000000..733b2e59b --- /dev/null +++ b/fastlane/metadata/ios/nl/keywords.txt @@ -0,0 +1 @@ +foto's,fotografie,familie,privacy,cloud,back-up,video's,foto,encryptie,opslag,album,alternatief diff --git a/fastlane/metadata/ios/nl/name.txt b/fastlane/metadata/ios/nl/name.txt new file mode 100644 index 000000000..ad1c680d4 --- /dev/null +++ b/fastlane/metadata/ios/nl/name.txt @@ -0,0 +1 @@ +ente Photos diff --git a/fastlane/metadata/ios/nl/subtitle.txt b/fastlane/metadata/ios/nl/subtitle.txt new file mode 100644 index 000000000..952b0adea --- /dev/null +++ b/fastlane/metadata/ios/nl/subtitle.txt @@ -0,0 +1 @@ +Versleutelde foto opslag diff --git a/fastlane/metadata/ios/zh/description.txt b/fastlane/metadata/ios/zh/description.txt new file mode 100644 index 000000000..e4596462e --- /dev/null +++ b/fastlane/metadata/ios/zh/description.txt @@ -0,0 +1,33 @@ +Ente 是一个简单的应用,可以自动备份和整理您的照片和视频。 + +如果您一直在寻找保护隐私的替代方案来保存您的记忆,那么您来对地方了。 使用 Ente,它们以端到端加密 (e2ee) 的方式存储。 这意味着只有您可以查看它们。 + +我们拥有跨所有平台的应用程序,您的照片将以端到端加密 (e2ee) 方式在所有设备之间无缝同步。 + +Ente 也使得与您的亲人分享您的相册变得简单。 您可以直接与其他Ente 用户共享,端到端加密,或公开链接共享。 您可以直接与其他Ente 用户共享,端到端加密,或公开链接共享。 您可以直接与其他Ente 用户共享,端到端加密,或公开链接共享。 您可以直接与其他Ente 用户共享,端到端加密,或公开链接共享。 + +您的加密数据存储在多个地点,包括巴黎的一个空洞。 我们认真对待子孙后代,并确保您回忆比您长寿。 + +我们来这里是为了使最安全的照片应用成为新的应用程序,来加入我们的旅程! + +特色 +- 原始质量备份,因为每个像素都是重要的 +- 家庭计划,您可以与家人共享存储 +- 共享文件夹,如果您想让您的伙伴享受您的“摄像头”点击 +- 相册链接,可以用密码保护并设置为过期 +- 能够通过移除已经安全备份的文件释放空间 +- 图像编辑器,添加收尾工作 +- 收藏、隐藏和恢复您的内存,因为它们是宝贵的 +- 从所有主要存储供应商导入单击文件 +- 黑暗主题,因为您的照片看起来很好 +- 2FA,3FA,生物鉴别认证 +- 还有更多的LOT! + +价格 +我们不会永远提供免费计划,因为我们必须保持可持续性,经受住时间的考验。 相反,我们提供您可以自由分享的负担得起的计划。 您可以在 ente.io找到更多信息。 相反,我们提供您可以自由分享的负担得起的计划。 您可以在 ente.io找到更多信息。 相反,我们提供您可以自由分享的负担得起的计划。 您可以在 ente.io找到更多信息。 + +支持 +我们对提供人的支持感到自豪。 我们对提供人的支持感到自豪。 如果您是我们的付费客户,您可以联系Team@ente.io并期待我们的团队在24小时内做出回应。 + +条款 +https://ente.io/terms diff --git a/fastlane/metadata/ios/zh/keywords.txt b/fastlane/metadata/ios/zh/keywords.txt new file mode 100644 index 000000000..d5697a19c --- /dev/null +++ b/fastlane/metadata/ios/zh/keywords.txt @@ -0,0 +1 @@ +照片,摄影,家庭,隐私,云端,备份,视频,照片,加密,储存,相册,选择 diff --git a/fastlane/metadata/ios/zh/name.txt b/fastlane/metadata/ios/zh/name.txt new file mode 100644 index 000000000..3725f8ebb --- /dev/null +++ b/fastlane/metadata/ios/zh/name.txt @@ -0,0 +1 @@ +ente 照片 diff --git a/fastlane/metadata/ios/zh/subtitle.txt b/fastlane/metadata/ios/zh/subtitle.txt new file mode 100644 index 000000000..efaec9293 --- /dev/null +++ b/fastlane/metadata/ios/zh/subtitle.txt @@ -0,0 +1 @@ +加密照片存储 diff --git a/fastlane/metadata/playstore/en-US/changelogs/443.txt b/fastlane/metadata/playstore/en-US/changelogs/443.txt new file mode 100644 index 000000000..b80b181fc --- /dev/null +++ b/fastlane/metadata/playstore/en-US/changelogs/443.txt @@ -0,0 +1,7 @@ +- Location tags + +This release includes a fresh, beautiful, privacy-friendly way to search through your photos by location! + +Tag a photo with a location, define a radius, and ente will automatically cluster all photos clicked within that area. + +Open a photo, and click on the Info button to get started! \ No newline at end of file diff --git a/fastlane/metadata/playstore/en-US/full_description.txt b/fastlane/metadata/playstore/en-US/full_description.txt new file mode 100644 index 000000000..ec999a783 --- /dev/null +++ b/fastlane/metadata/playstore/en-US/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/fastlane/metadata/playstore/en-US/images/featureGraphic.png b/fastlane/metadata/playstore/en-US/images/featureGraphic.png new file mode 100644 index 000000000..916ea3e9d Binary files /dev/null and b/fastlane/metadata/playstore/en-US/images/featureGraphic.png differ diff --git a/fastlane/metadata/playstore/en-US/images/icon.png b/fastlane/metadata/playstore/en-US/images/icon.png new file mode 100644 index 000000000..8b32155bb Binary files /dev/null and b/fastlane/metadata/playstore/en-US/images/icon.png differ diff --git a/fastlane/metadata/playstore/en-US/images/phoneScreenshots/1_en-US.png b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/1_en-US.png new file mode 100644 index 000000000..7cab0bfe4 Binary files /dev/null and b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/1_en-US.png differ diff --git a/fastlane/metadata/playstore/en-US/images/phoneScreenshots/2_en-US.png b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/2_en-US.png new file mode 100644 index 000000000..15e875465 Binary files /dev/null and b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/2_en-US.png differ diff --git a/fastlane/metadata/playstore/en-US/images/phoneScreenshots/3_en-US.png b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/3_en-US.png new file mode 100644 index 000000000..91fb9da73 Binary files /dev/null and b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/3_en-US.png differ diff --git a/fastlane/metadata/playstore/en-US/images/phoneScreenshots/4_en-US.png b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/4_en-US.png new file mode 100644 index 000000000..cd47572c9 Binary files /dev/null and b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/4_en-US.png differ diff --git a/fastlane/metadata/playstore/en-US/images/phoneScreenshots/5_en-US.png b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/5_en-US.png new file mode 100644 index 000000000..4e5ca0bad Binary files /dev/null and b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/5_en-US.png differ diff --git a/fastlane/metadata/playstore/en-US/images/phoneScreenshots/6_en-US.png b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/6_en-US.png new file mode 100644 index 000000000..39cfa966d Binary files /dev/null and b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/6_en-US.png differ diff --git a/fastlane/metadata/playstore/en-US/images/phoneScreenshots/7_en-US.png b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/7_en-US.png new file mode 100644 index 000000000..0b4422657 Binary files /dev/null and b/fastlane/metadata/playstore/en-US/images/phoneScreenshots/7_en-US.png differ diff --git a/fastlane/metadata/playstore/en-US/images/sevenInchScreenshots/1_en-US.png b/fastlane/metadata/playstore/en-US/images/sevenInchScreenshots/1_en-US.png new file mode 100644 index 000000000..4e013573e Binary files /dev/null and b/fastlane/metadata/playstore/en-US/images/sevenInchScreenshots/1_en-US.png differ diff --git a/fastlane/metadata/playstore/en-US/images/tenInchScreenshots/1_en-US.png b/fastlane/metadata/playstore/en-US/images/tenInchScreenshots/1_en-US.png new file mode 100644 index 000000000..4e013573e Binary files /dev/null and b/fastlane/metadata/playstore/en-US/images/tenInchScreenshots/1_en-US.png differ diff --git a/fastlane/metadata/playstore/en-US/short_description.txt b/fastlane/metadata/playstore/en-US/short_description.txt new file mode 100644 index 000000000..6c0022989 --- /dev/null +++ b/fastlane/metadata/playstore/en-US/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/fastlane/metadata/playstore/en-US/title.txt b/fastlane/metadata/playstore/en-US/title.txt new file mode 100644 index 000000000..e2a7bd5a2 --- /dev/null +++ b/fastlane/metadata/playstore/en-US/title.txt @@ -0,0 +1 @@ +ente Photos \ No newline at end of file diff --git a/fastlane/metadata/playstore/es/full_description.txt b/fastlane/metadata/playstore/es/full_description.txt new file mode 100644 index 000000000..1e10f7250 --- /dev/null +++ b/fastlane/metadata/playstore/es/full_description.txt @@ -0,0 +1,30 @@ +Ente es una aplicación simple que guarda automáticamente copias de segurida y organiza tus fotos y vídeos. + +Si has estado buscando una alternativa pro-privacidad para guardar tus recuerdos, has llegado al sitio adecuado. Con Ente, se almacenan cifradas de extremo a extremo (e2ee). Esto significa que solo tú puedes verlas. + +Tenemos aplicaciones en Android, iOS, web y escritorio, y tus fotos se sincronizarán perfectamente entre todos tus dispositivos encriptadas de extremo a extremo (e2ee). + +Ente también facitila compartir tus álbumes con tus seres queridos. También puedes compartirlos directamente con otros usuarios de Ente cifrados de extremo a extremo, o publicarlos en enlaces visibles. + +Tus datos encriptados se almacenan en varias ubicaciones, incluyendo un refugio antiaréreo en París. Nos tomamos en serio la posternidad y hacemos posible asegurar que tus memorias te sobreviven. + +Estamos aquí para hacer la aplicación de fotos más segura de todas. + +✨ CARACTERÍSTICAS +- Copias de seguridad de calidad original, porque cada píxel es importante +- Planes familiares, para que puedas compartir el almacenamiento con tu familia +- Carpetas compartidas, por si quieres que tu pareja disfrute de tus 'clicks' +- Enlaces al álbum, que se pueden proteger con una contraseña y programar para que expiren +- Capacidad para liberar espacio, eliminando archivos de los que ya tienes una copia de seguridad +- Editor de imagen, para añadir retoques finales +- Marca como favoritos, oculta y revive tus recuerdos, porque son preciosos +- Importa en un click desde Google, Apple, tu disco duro y más +- Tema oscuro, porque tus fotos quedan bien con él +- 2FA, 3FA, autenticación biométrica +- ¡Y mucho más! + +💲 PRECIOS +No ofrecemos planes gratis para siempre, porque es importante para nosotros seguir siendo sostenibles y resistir a la prueba del tiempo. En su lugar, ofrecemos planes asequibles que puedes compartir libremente con tu familia. Puedes encontrar más información en ente.io. + +🙋 SOPORTE +Estamos orgullosos de ofrecer apoyo humano. Si eres un cliente de pago, puedes contactar con team@ente.io y esperar una respuesta de nuestro equipo en 24 horas. \ No newline at end of file diff --git a/fastlane/metadata/playstore/es/short_description.txt b/fastlane/metadata/playstore/es/short_description.txt new file mode 100644 index 000000000..3e101c447 --- /dev/null +++ b/fastlane/metadata/playstore/es/short_description.txt @@ -0,0 +1 @@ +Almacenamiento de fotos encriptado - copias de seguridad, organiza y comprte tus fotos y vídeos \ No newline at end of file diff --git a/fastlane/metadata/playstore/es/title.txt b/fastlane/metadata/playstore/es/title.txt new file mode 100644 index 000000000..785d16b51 --- /dev/null +++ b/fastlane/metadata/playstore/es/title.txt @@ -0,0 +1 @@ +ente Fotos \ No newline at end of file diff --git a/fastlane/metadata/playstore/nl/full_description.txt b/fastlane/metadata/playstore/nl/full_description.txt new file mode 100644 index 000000000..8e92d78c8 --- /dev/null +++ b/fastlane/metadata/playstore/nl/full_description.txt @@ -0,0 +1,30 @@ +Ente is een eenvoudige app om jouw foto's en video's automatisch te back-uppen en organiseren. + +Als je op zoek bent naar een privacy-vriendelijk alternatief om je herinneringen te bewaren, dan ben je op de juiste plaats. Bij ente worden ze end-to-end encrypted (e2ee). Dit betekent dat alleen jij ze kunt bekijken. + +We hebben apps op Android, iOS, web en Desktop, en je foto's zullen naadloos synchroniseren tussen al je apparaten op een end-to-end versleutelde (e2ee) manier. + +Ente maakt het ook eenvoudig om je albums te delen met je dierbaren. Je kunt ze direct delen met andere Ente gebruikers, end-to-end versleuteld; of met openbaar zichtbare links. + +Jouw versleutelde gegevens worden over meerdere locaties opgeslagen, waaronder een kernbunker in Parijs. Wij nemen opslag voor de lange termijn serieus, en zorgen ervoor dat je herinneringen minstens je hele leven bewaard worden. + +Ons doel is om de veiligste foto app ooit te maken, sluit je bij ons aan! + +✨ FUNCTIES +- Backups van originele kwaliteit, omdat elke pixel belangrijk is +- Familieplannen, zodat je de opslag kunt delen met je familie +- Gedeelde mappen, voor het geval u uw partner wilt laten meegenieten van uw "Camera" klikjes +- Album links, die met een wachtwoord en vervaldatum beschermd kunnen worden +- Mogelijkheid om ruimte vrij te maken op je apparaat, door bestanden die veilig zijn geback-upt te verwijderen +- Fotobewerker om de laatste finishing touches toe te voegen +- Favorieten, verbergen en herleven van je herinneringen, want ze zijn kostbaar +- Met één klik importeren vanuit Google, Apple, je harde schijf en meer +- Donker thema, omdat je foto's er goed in uit zien +- 2FA, 3FA, biometrische authenticatie +- en nog veel meer! + +💲 PRIJZEN +We bieden geen oneindig gratis plannen aan, omdat het voor ons belangrijk is dat we duurzaam blijven en de tand des tijds weerstaan. In plaats daarvan bieden we betaalbare plannen aan die je vrij kunt delen met je familie. Je kunt meer informatie vinden op ente.io. + +🙋 SUPPORT +Wij zijn trots op het bieden van menselijke klantenondersteuning. Als je een betaalde klant bent, kun je contact opnemen met team@ente.io en binnen 24 uur een antwoord van ons verwachten. \ No newline at end of file diff --git a/fastlane/metadata/playstore/nl/short_description.txt b/fastlane/metadata/playstore/nl/short_description.txt new file mode 100644 index 000000000..3a54b5637 --- /dev/null +++ b/fastlane/metadata/playstore/nl/short_description.txt @@ -0,0 +1 @@ +Versleutelde foto opslag - back-up, organiseer en deel jouw foto's en video's \ No newline at end of file diff --git a/fastlane/metadata/playstore/nl/title.txt b/fastlane/metadata/playstore/nl/title.txt new file mode 100644 index 000000000..e2a7bd5a2 --- /dev/null +++ b/fastlane/metadata/playstore/nl/title.txt @@ -0,0 +1 @@ +ente Photos \ No newline at end of file diff --git a/fastlane/metadata/playstore/zh/full_description.txt b/fastlane/metadata/playstore/zh/full_description.txt new file mode 100644 index 000000000..6d52e1ce3 --- /dev/null +++ b/fastlane/metadata/playstore/zh/full_description.txt @@ -0,0 +1,30 @@ +Ente 是一个简单的应用,可以自动备份和整理您的照片和视频。 + +如果您一直在寻找保护隐私的替代方案来保存您的记忆,那么您来对地方了。 使用 Ente,它们以端到端加密 (e2ee) 的方式存储。 这意味着只有您可以查看它们。 + +我们拥有跨 Android、iOS、Web 和桌面的应用程序,您的照片将以端到端加密 (e2ee) 方式在所有设备之间无缝同步。 + +Ente 也使得与您的亲人分享您的相册变得简单。 您可以直接与其他Ente 用户共享,端到端加密,或公开链接共享。 您可以直接与其他Ente 用户共享,端到端加密,或公开链接共享。 您可以直接与其他Ente 用户共享,端到端加密,或公开链接共享。 您可以直接与其他Ente 用户共享,端到端加密,或公开链接共享。 + +您的加密数据存储在多个地点,包括巴黎的一个空洞。 我们认真对待子孙后代,并确保您回忆比您长寿。 + +我们来这里是为了使最安全的照片应用成为新的应用程序,来加入我们的旅程! + +✨ 特色 +- 原始质量备份,因为每个像素都是重要的 +- 家庭计划,您可以与家人共享存储 +- 共享文件夹,如果您想让您的伙伴享受您的“摄像头”点击 +- 相册链接,可以用密码保护并设置为过期 +- 能够通过移除已经安全备份的文件释放空间 +- 图像编辑器,添加收尾工作 +- 收藏、隐藏和恢复您的内存,因为它们是宝贵的 +- 单击从谷歌、苹果、您的硬盘和更多的软件导入 +- 黑暗主题,因为您的照片看起来很好 +- 2FA,3FA,生物鉴别认证 +- 还有更多的LOT! + +💲 价格 +我们不会永远提供免费计划,因为我们必须保持可持续性,经受住时间的考验。 相反,我们提供您可以自由分享的负担得起的计划。 您可以在 ente.io找到更多信息。 相反,我们提供您可以自由分享的负担得起的计划。 您可以在 ente.io找到更多信息。 相反,我们提供您可以自由分享的负担得起的计划。 您可以在 ente.io找到更多信息。 + +🙋 支持 +我们对提供人的支持感到自豪。 我们对提供人的支持感到自豪。 如果您是我们的付费客户,您可以联系Team@ente.io并期待我们的团队在24小时内做出回应。 \ No newline at end of file diff --git a/fastlane/metadata/playstore/zh/short_description.txt b/fastlane/metadata/playstore/zh/short_description.txt new file mode 100644 index 000000000..f4c21f246 --- /dev/null +++ b/fastlane/metadata/playstore/zh/short_description.txt @@ -0,0 +1 @@ +加密照片存储 - 备份、整理和分享您的照片和视频 \ No newline at end of file diff --git a/fastlane/metadata/playstore/zh/title.txt b/fastlane/metadata/playstore/zh/title.txt new file mode 100644 index 000000000..8ad13e2c9 --- /dev/null +++ b/fastlane/metadata/playstore/zh/title.txt @@ -0,0 +1 @@ +ente 照片 \ No newline at end of file diff --git a/lib/app.dart b/lib/app.dart index 765cd937e..feba2c151 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -32,7 +32,7 @@ class EnteApp extends StatefulWidget { }) : super(key: key); static void setLocale(BuildContext context, Locale newLocale) { - _EnteAppState state = context.findAncestorStateOfType<_EnteAppState>()!; + final state = context.findAncestorStateOfType<_EnteAppState>()!; state.setLocale(newLocale); } diff --git a/lib/core/constants.dart b/lib/core/constants.dart index 63f62ed39..f8b92c7a5 100644 --- a/lib/core/constants.dart +++ b/lib/core/constants.dart @@ -60,8 +60,8 @@ const publicLinkDeviceLimits = [50, 25, 10, 5, 2, 1]; const kilometersPerDegree = 111.16; -const radiusValues = [2, 10, 20, 40, 80, 200, 400, 1200]; +const defaultRadiusValues = [1, 2, 10, 20, 40, 80, 200, 400, 1200]; -const defaultRadiusValueIndex = 4; +const defaultRadiusValue = 40.0; const galleryGridSpacing = 2.0; diff --git a/lib/db/file_updation_db.dart b/lib/db/file_updation_db.dart index 554d76150..5d69fe8b4 100644 --- a/lib/db/file_updation_db.dart +++ b/lib/db/file_updation_db.dart @@ -17,6 +17,13 @@ class FileUpdationDB { static const missingLocation = 'missing_location'; static const modificationTimeUpdated = 'modificationTimeUpdated'; static const badCreationTime = 'badCreationTime'; + // refers to the patching of files which had location in exif but the app + // did not extracted the location to include it in the file metadata + static const missingLocationV2 = 'missingLocationV2'; + + // refers to the patching of files which had location in exif but the app + // mapped the location to a wrong location + static const badLocationCord = 'badLocationCord'; // SQL code to create the database table static List _createTable() { diff --git a/lib/db/files_db.dart b/lib/db/files_db.dart index fd097b124..db4ae89aa 100644 --- a/lib/db/files_db.dart +++ b/lib/db/files_db.dart @@ -371,6 +371,7 @@ class FilesDB { await db.delete(filesTable); await db.delete("device_files"); await db.delete("device_collections"); + await db.delete("entities"); } Future deleteDB() async { @@ -501,7 +502,6 @@ class FilesDB { bool? asc, int visibility = visibilityVisible, Set? ignoredCollectionIDs, - bool onlyFilesWithLocation = false, }) async { final stopWatch = Stopwatch()..start(); @@ -509,12 +509,9 @@ class FilesDB { final order = (asc ?? false ? 'ASC' : 'DESC'); final results = await db.query( filesTable, - where: onlyFilesWithLocation - ? '$columnLatitude IS NOT NULL AND $columnLongitude IS NOT NULL AND ($columnLatitude IS NOT 0 OR $columnLongitude IS NOT 0)' - 'AND $columnCreationTime >= ? AND $columnCreationTime <= ? AND ($columnOwnerID IS NULL OR $columnOwnerID = ?) AND ($columnCollectionID IS NOT NULL AND $columnCollectionID IS NOT -1)' - 'AND $columnMMdVisibility = ?' - : '$columnCreationTime >= ? AND $columnCreationTime <= ? AND ($columnOwnerID IS NULL OR $columnOwnerID = ?) AND ($columnCollectionID IS NOT NULL AND $columnCollectionID IS NOT -1)' - ' AND $columnMMdVisibility = ?', + where: + '$columnCreationTime >= ? AND $columnCreationTime <= ? AND ($columnOwnerID IS NULL OR $columnOwnerID = ?) AND ($columnCollectionID IS NOT NULL AND $columnCollectionID IS NOT -1)' + ' AND $columnMMdVisibility = ?', whereArgs: [startTime, endTime, ownerID, visibility], orderBy: '$columnCreationTime ' + order + ', $columnModificationTime ' + order, @@ -524,7 +521,8 @@ class FilesDB { final List deduplicatedFiles = _deduplicatedAndFilterIgnoredFiles(files, ignoredCollectionIDs); dev.log( - "getAllPendingOrUploadedFiles time taken: ${stopWatch.elapsedMilliseconds} ms"); + "getAllPendingOrUploadedFiles time taken: ${stopWatch.elapsedMilliseconds} ms", + ); stopWatch.stop(); return FileLoadResult(deduplicatedFiles, files.length == limit); } @@ -536,19 +534,14 @@ class FilesDB { int? limit, bool? asc, Set? ignoredCollectionIDs, - bool onlyFilesWithLocation = false, }) async { final db = await instance.database; final order = (asc ?? false ? 'ASC' : 'DESC'); final results = await db.query( filesTable, - where: onlyFilesWithLocation - ? '$columnLatitude IS NOT NULL AND $columnLongitude IS NOT NULL AND ($columnLatitude IS NOT 0 OR $columnLongitude IS NOT 0)' - ' AND $columnCreationTime >= ? AND $columnCreationTime <= ? AND ' - '($columnOwnerID IS NULL OR $columnOwnerID = ?) AND ($columnMMdVisibility IS NULL OR $columnMMdVisibility = ?)' - ' AND ($columnLocalID IS NOT NULL OR ($columnCollectionID IS NOT NULL AND $columnCollectionID IS NOT -1))' - : '$columnCreationTime >= ? AND $columnCreationTime <= ? AND ($columnOwnerID IS NULL OR $columnOwnerID = ?) AND ($columnMMdVisibility IS NULL OR $columnMMdVisibility = ?)' - ' AND ($columnLocalID IS NOT NULL OR ($columnCollectionID IS NOT NULL AND $columnCollectionID IS NOT -1))', + where: + '$columnCreationTime >= ? AND $columnCreationTime <= ? AND ($columnOwnerID IS NULL OR $columnOwnerID = ?) AND ($columnMMdVisibility IS NULL OR $columnMMdVisibility = ?)' + ' AND ($columnLocalID IS NOT NULL OR ($columnCollectionID IS NOT NULL AND $columnCollectionID IS NOT -1))', whereArgs: [startTime, endTime, ownerID, visibilityVisible], orderBy: '$columnCreationTime ' + order + ', $columnModificationTime ' + order, @@ -1382,9 +1375,73 @@ class FilesDB { 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 { + final db = await instance.database; + final rows = await db.query( + filesTable, + columns: [columnLocalID], + distinct: true, + where: '$columnOwnerID = ? AND $columnLocalID IS NOT NULL AND ' + '($columnLatitude IS NULL OR ' + '$columnLongitude IS NULL OR $columnLongitude = 0.0 or $columnLongitude = 0.0)', + whereArgs: [ownerID], + ); + final result = []; + for (final row in rows) { + result.add(row[columnLocalID].toString()); + } + return result; + } + + // returns the localID of all files which are uploaded and belong to the + // user and upload time is greater than 20 April 2023 epoch time and less than + // 15 May 2023 epoch time + Future> getFilesWithLocationUploadedBtw20AprTo15May2023( + int ownerID, + ) async { + final db = await database; + final result = await db.query( + filesTable, + columns: [columnLocalID], + distinct: true, + where: '' + '($columnUploadedFileID IS NOT NULL' + ' AND $columnUploadedFileID IS NOT -1)' + ' AND $columnOwnerID = ?' + ' AND $columnUpdationTime > ? AND $columnUpdationTime < ? ' + 'AND ($columnLatitude IS NOT NULL AND $columnLongitude IS NOT NULL) ' + 'AND ($columnLongitude IS NOT 0.0 AND $columnLongitude IS NOT 0.0)', + whereArgs: [ + ownerID, + 1681952400000000, + 1684112400000000, + ], + ); + return result.map((row) => row[columnLocalID].toString()).toList(); + } + + // For given list of localIDs and ownerID, get a list of uploaded files + // owned by given user + Future> getFilesForLocalIDs( + List localIDs, + int ownerID, + ) async { + final db = await instance.database; + final rows = await db.query( + filesTable, + where: + '$columnLocalID IN (${localIDs.map((e) => "'$e'").join(',')}) AND $columnOwnerID = ?', + whereArgs: [ownerID], + ); + return _deduplicatedAndFilterIgnoredFiles(convertToFiles(rows), {}); + } + Future> getAllFilesFromDB(Set collectionsToIgnore) async { final db = await instance.database; - final List> result = await db.query(filesTable); + final List> result = + await db.query(filesTable, orderBy: '$columnCreationTime DESC'); final List files = convertToFiles(result); final List deduplicatedFiles = _deduplicatedAndFilterIgnoredFiles(files, collectionsToIgnore); @@ -1406,7 +1463,7 @@ class FilesDB { return filesCount; } - Future getAllUploadedAndSharedFiles( + Future fetchAllUploadedAndSharedFilesWithLocation( int startTime, int endTime, { int? limit, @@ -1472,11 +1529,16 @@ class FilesDB { row[columnMMdVisibility] = file.magicMetadata.visibility; row[columnPubMMdVersion] = file.pubMmdVersion; row[columnPubMMdEncodedJson] = file.pubMmdEncodedJson ?? '{}'; - if (file.pubMagicMetadata != null && - file.pubMagicMetadata!.editedTime != null) { - // override existing creationTime to avoid re-writing all queries related - // to loading the gallery - row[columnCreationTime] = file.pubMagicMetadata!.editedTime; + // override existing fields to avoid re-writing all queries and logic + if (file.pubMagicMetadata != null) { + if (file.pubMagicMetadata!.editedTime != null) { + row[columnCreationTime] = file.pubMagicMetadata!.editedTime; + } + if (file.pubMagicMetadata!.lat != null && + file.pubMagicMetadata!.long != null) { + row[columnLatitude] = file.pubMagicMetadata!.lat; + row[columnLongitude] = file.pubMagicMetadata!.long; + } } return row; } diff --git a/lib/generated/intl/messages_all.dart b/lib/generated/intl/messages_all.dart new file mode 100644 index 000000000..a3136a62a --- /dev/null +++ b/lib/generated/intl/messages_all.dart @@ -0,0 +1,107 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that looks up messages for specific locales by +// delegating to the appropriate library. + +// Ignore issues from commonly used lints in this file. +// ignore_for_file:implementation_imports, file_names, unnecessary_new +// ignore_for_file:unnecessary_brace_in_string_interps, directives_ordering +// ignore_for_file:argument_type_not_assignable, invalid_assignment +// ignore_for_file:prefer_single_quotes, prefer_generic_function_type_aliases +// ignore_for_file:comment_references + +import 'dart:async'; + +import 'package:flutter/foundation.dart'; +import 'package:intl/intl.dart'; +import 'package:intl/message_lookup_by_library.dart'; +import 'package:intl/src/intl_helpers.dart'; + +import 'messages_cs.dart' as messages_cs; +import 'messages_de.dart' as messages_de; +import 'messages_en.dart' as messages_en; +import 'messages_es.dart' as messages_es; +import 'messages_fr.dart' as messages_fr; +import 'messages_it.dart' as messages_it; +import 'messages_ko.dart' as messages_ko; +import 'messages_nl.dart' as messages_nl; +import 'messages_no.dart' as messages_no; +import 'messages_pl.dart' as messages_pl; +import 'messages_pt.dart' as messages_pt; +import 'messages_zh.dart' as messages_zh; + +typedef Future LibraryLoader(); +Map _deferredLibraries = { + 'cs': () => new SynchronousFuture(null), + 'de': () => new SynchronousFuture(null), + 'en': () => new SynchronousFuture(null), + 'es': () => new SynchronousFuture(null), + 'fr': () => new SynchronousFuture(null), + 'it': () => new SynchronousFuture(null), + 'ko': () => new SynchronousFuture(null), + 'nl': () => new SynchronousFuture(null), + 'no': () => new SynchronousFuture(null), + 'pl': () => new SynchronousFuture(null), + 'pt': () => new SynchronousFuture(null), + 'zh': () => new SynchronousFuture(null), +}; + +MessageLookupByLibrary? _findExact(String localeName) { + switch (localeName) { + case 'cs': + return messages_cs.messages; + case 'de': + return messages_de.messages; + case 'en': + return messages_en.messages; + case 'es': + return messages_es.messages; + case 'fr': + return messages_fr.messages; + case 'it': + return messages_it.messages; + case 'ko': + return messages_ko.messages; + case 'nl': + return messages_nl.messages; + case 'no': + return messages_no.messages; + case 'pl': + return messages_pl.messages; + case 'pt': + return messages_pt.messages; + case 'zh': + return messages_zh.messages; + default: + return null; + } +} + +/// User programs should call this before using [localeName] for messages. +Future initializeMessages(String localeName) { + var availableLocale = Intl.verifiedLocale( + localeName, (locale) => _deferredLibraries[locale] != null, + onFailure: (_) => null); + if (availableLocale == null) { + return new SynchronousFuture(false); + } + var lib = _deferredLibraries[availableLocale]; + lib == null ? new SynchronousFuture(false) : lib(); + initializeInternalMessageLookup(() => new CompositeMessageLookup()); + messageLookup.addLocale(availableLocale, _findGeneratedMessagesFor); + return new SynchronousFuture(true); +} + +bool _messagesExistFor(String locale) { + try { + return _findExact(locale) != null; + } catch (e) { + return false; + } +} + +MessageLookupByLibrary? _findGeneratedMessagesFor(String locale) { + var actualLocale = + Intl.verifiedLocale(locale, _messagesExistFor, onFailure: (_) => null); + if (actualLocale == null) return null; + return _findExact(actualLocale); +} diff --git a/lib/generated/intl/messages_cs.dart b/lib/generated/intl/messages_cs.dart new file mode 100644 index 000000000..2bfb5800f --- /dev/null +++ b/lib/generated/intl/messages_cs.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 cs 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 => 'cs'; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => {}; +} diff --git a/lib/generated/intl/messages_de.dart b/lib/generated/intl/messages_de.dart new file mode 100644 index 000000000..c410aa32f --- /dev/null +++ b/lib/generated/intl/messages_de.dart @@ -0,0 +1,1019 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a de 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 => 'de'; + + static String m0(paymentProvider) => + "Bitte kündigen Sie Ihr aktuelles Abo über ${paymentProvider} zuerst"; + + static String m1(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 m2(isFamilyMember, storageAmountInGb) => + "${Intl.select(isFamilyMember, { + 'true': + 'Deine Familiengruppe hat bereits ${storageAmountInGb} GB erhalten', + 'false': 'Du hast bereits ${storageAmountInGb} GB erhalten', + 'other': 'Du hast bereits ${storageAmountInGb} Gb erhalten!', + })}"; + + static String m3(familyAdminEmail) => + "Bitte kontaktiere ${familyAdminEmail} um dein Abo zu verwalten"; + + static String m4(provider) => + "Bitte kontaktieren Sie uns über support@ente.io, um Ihr ${provider} Abo zu verwalten."; + + static String m5(albumName) => + "Der öffentliche Link zum Zugriff auf \"${albumName}\" wird entfernt."; + + static String m6(supportEmail) => + "Bitte sende eine E-Mail an ${supportEmail} von deiner registrierten E-Mail-Adresse"; + + static String m7(count, storageSaved) => + "Du hast ${Intl.plural(count, one: '${count} duplizierte Datei', other: '${count} dupliziere Dateien')} gelöscht und (${storageSaved}!) freigegeben"; + + static String m8(email) => + "${email} hat kein Ente-Konto.\n\nSenden Sie eine Einladung, um Fotos zu teilen."; + + static String m9(storageAmountInGB) => + "${storageAmountInGB} GB jedes Mal, wenn sich jemand mit deinem Code für einen bezahlten Tarif anmeldet"; + + static String m10(endDate) => "Kostenlose Demo verfügbar bis zum ${endDate}"; + + static String m11(count) => + "${Intl.plural(count, one: '${count} Objekt', other: '${count} Objekte')}"; + + static String m12(expiryTime) => "Link läuft am ${expiryTime} ab"; + + static String m13(maxValue) => + "Wenn auf den Höchstwert von ${maxValue} gesetzt, dann wird das Limit gelockert um potenzielle Höchstlasten unterstützen zu können."; + + static String m14(count) => + "${Intl.plural(count, zero: 'keine Erinnerungsstücke', one: '${count} Erinnerung', other: '${count} Erinnerungsstücke')}"; + + static String m15(passwordStrengthValue) => + "Passwortstärke: ${passwordStrengthValue}"; + + static String m16(providerName) => + "Bitte kontaktiere den Support von ${providerName}, falls etwas abgebucht wurde"; + + static String m17(reason) => + "Leider ist deine Zahlung aus folgendem Grund fehlgeschlagen: ${reason}"; + + static String m18(storeName) => "Bewerte uns auf ${storeName}"; + + static String m19(storageInGB) => + "3. Ihr beide erhaltet ${storageInGB} GB* kostenlos"; + + static String m20(userEmail) => + "${userEmail} wird aus diesem geteilten Album entfernt\n\nAlle von ihnen hinzugefügte Fotos werden ebenfalls aus dem Album entfernt"; + + static String m21(endDate) => "Erneuert am ${endDate}"; + + static String m22(count) => "${count} ausgewählt"; + + static String m23(count, yourCount) => + "${count} ausgewählt (${yourCount} von Ihnen)"; + + static String m24(verificationID) => + "Hier ist meine Verifizierungs-ID: ${verificationID} für ente.io."; + + static String m25(verificationID) => + "Hey, kannst du bestätigen, dass dies deine ente.io Verifizierungs-ID ist: ${verificationID}"; + + static String m26(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 m27(numberOfPeople) => + "${Intl.plural(numberOfPeople, zero: 'Teile mit bestimmten Personen', one: 'Teilen mit 1 Person', other: 'Teilen mit ${numberOfPeople} Personen')}"; + + static String m28(emailIDs) => "Geteilt mit ${emailIDs}"; + + static String m29(fileType) => + "Dieses ${fileType} wird von deinem Gerät gelöscht."; + + static String m30(fileType) => + "Dieses ${fileType} existiert auf ente.io und deinem Gerät."; + + static String m31(fileType) => + "Dieses ${fileType} wird auf ente.io gelöscht."; + + static String m32(storageAmountInGB) => "${storageAmountInGB} GB"; + + static String m33(id) => + "Ihr ${id} ist bereits mit einem anderen \'ente\'-Konto verknüpft.\nWenn Sie Ihre ${id} mit diesem Konto verwenden möchten, kontaktieren Sie bitte unseren Support\'"; + + static String m34(endDate) => "Ihr Abo endet am ${endDate}"; + + static String m35(completed, total) => + "${completed}/${total} Erinnerungsstücke gesichert"; + + static String m36(storageAmountInGB) => + "Diese erhalten auch ${storageAmountInGB} GB"; + + static String m37(email) => "Dies ist ${email}s Verifizierungs-ID"; + + static String m38(email) => "Verifiziere ${email}"; + + static String m39(email) => + "Wir haben eine E-Mail an ${email} gesendet"; + + static String m40(count) => + "${Intl.plural(count, one: 'vor einem Jahr', other: 'vor ${count} Jahren')}"; + + static String m41(storageSaved) => + "Du hast ${storageSaved} erfolgreich freigegeben!"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "aNewVersionOfEnteIsAvailable": MessageLookupByLibrary.simpleMessage( + "Eine neuere Version von \'ente\' ist verfügbar."), + "about": + MessageLookupByLibrary.simpleMessage("Allgemeine Informationen"), + "account": MessageLookupByLibrary.simpleMessage("Konto"), + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("Willkommen zurück!"), + "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( + "Ich verstehe, dass ich meine Daten verlieren kann, wenn ich mein Passwort vergesse, da meine Daten Ende-zu-Ende-verschlüsselt sind."), + "activeSessions": + MessageLookupByLibrary.simpleMessage("Aktive Sitzungen"), + "addANewEmail": MessageLookupByLibrary.simpleMessage( + "Neue E-Mail-Adresse hinzufügen"), + "addCollaborator": + MessageLookupByLibrary.simpleMessage("Bearbeiter hinzufügen"), + "addMore": MessageLookupByLibrary.simpleMessage("Mehr hinzufügen"), + "addToAlbum": + MessageLookupByLibrary.simpleMessage("Zum Album hinzufügen"), + "addToEnte": MessageLookupByLibrary.simpleMessage("Zu ente hinzufügen"), + "addViewer": MessageLookupByLibrary.simpleMessage("Album teilen"), + "addedAs": MessageLookupByLibrary.simpleMessage("Hinzugefügt als"), + "addingToFavorites": MessageLookupByLibrary.simpleMessage( + "Wird zu Favoriten hinzugefügt..."), + "advanced": MessageLookupByLibrary.simpleMessage("Erweitert"), + "advancedSettings": MessageLookupByLibrary.simpleMessage("Erweitert"), + "after1Day": MessageLookupByLibrary.simpleMessage("Nach einem Tag"), + "after1Hour": MessageLookupByLibrary.simpleMessage("Nach 1. Stunde"), + "after1Month": MessageLookupByLibrary.simpleMessage("Nach 1 Monat"), + "after1Week": MessageLookupByLibrary.simpleMessage("Nach 1 Woche"), + "after1Year": MessageLookupByLibrary.simpleMessage("Nach 1 Jahr"), + "albumOwner": MessageLookupByLibrary.simpleMessage("Besitzer"), + "albumTitle": MessageLookupByLibrary.simpleMessage("Albumtitel"), + "albumUpdated": + MessageLookupByLibrary.simpleMessage("Album aktualisiert"), + "albums": MessageLookupByLibrary.simpleMessage("Alben"), + "allClear": MessageLookupByLibrary.simpleMessage("✨ Alles klar"), + "allMemoriesPreserved": MessageLookupByLibrary.simpleMessage( + "Alle Erinnerungsstücke gesichert"), + "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Erlaube Nutzern mit diesem Link ebenfalls Fotos zu diesem geteilten Album hinzuzufügen."), + "allowAddingPhotos": MessageLookupByLibrary.simpleMessage( + "Hinzufügen von Fotos erlauben"), + "allowDownloads": + MessageLookupByLibrary.simpleMessage("Downloads erlauben"), + "allowPeopleToAddPhotos": MessageLookupByLibrary.simpleMessage( + "Erlaube anderen das Hinzufügen von Fotos"), + "androidIosWebDesktop": + MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Desktop"), + "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), + "apply": MessageLookupByLibrary.simpleMessage("Anwenden"), + "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Code nutzen"), + "appstoreSubscription": + MessageLookupByLibrary.simpleMessage("AppStore Abo"), + "archive": MessageLookupByLibrary.simpleMessage("Archiv"), + "archiveAlbum": + MessageLookupByLibrary.simpleMessage("Album archivieren"), + "areYouSureThatYouWantToLeaveTheFamily": + MessageLookupByLibrary.simpleMessage( + "Bist du sicher, dass du den Familien-Tarif verlassen möchtest?"), + "areYouSureYouWantToCancel": MessageLookupByLibrary.simpleMessage( + "Bist du sicher, dass du kündigen willst?"), + "areYouSureYouWantToChangeYourPlan": + MessageLookupByLibrary.simpleMessage( + "Sind Sie sicher, dass Sie Ihren Tarif ändern möchten?"), + "areYouSureYouWantToExit": MessageLookupByLibrary.simpleMessage( + "Möchtest du Vorgang wirklich abbrechen?"), + "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( + "Sind sie sicher, dass Sie sich abmelden wollen?"), + "areYouSureYouWantToRenew": MessageLookupByLibrary.simpleMessage( + "Bist du sicher, dass du verlängern möchtest?"), + "askCancelReason": MessageLookupByLibrary.simpleMessage( + "Ihr Abonnement wurde gekündigt. Möchten Sie uns den Grund mitteilen?"), + "askDeleteReason": MessageLookupByLibrary.simpleMessage( + "Was ist der Hauptgrund für die Löschung deines Kontos?"), + "atAFalloutShelter": MessageLookupByLibrary.simpleMessage( + "in einem ehemaligen Luftschutzbunker"), + "authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage( + "Bitte authentifizieren, um die Sperrbildschirm-Einstellung zu ändern"), + "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( + "Bitte authentifizieren, um deine E-Mail-Adresse zu ändern"), + "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( + "Bitte authentifizieren, um das Passwort zu ändern"), + "authToConfigureTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Bitte authentifizieren, um Zwei-Faktor-Authentifizierung zu konfigurieren"), + "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Bitte authentifizieren, um die Löschung des Kontos einzuleiten"), + "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( + "Bitte authentifizieren, um die aktiven Sitzungen anzusehen"), + "authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage( + "Bitte authentifizieren, um die versteckten Dateien anzusehen"), + "authToViewYourMemories": MessageLookupByLibrary.simpleMessage( + "Bitte authentifizieren, um deine Erinnerungsstücke anzusehen"), + "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Bitte authentifizieren, um deinen Wiederherstellungs-Schlüssel anzusehen"), + "available": MessageLookupByLibrary.simpleMessage("Verfügbar"), + "backedUpFolders": + MessageLookupByLibrary.simpleMessage("Gesicherte Ordner"), + "backup": MessageLookupByLibrary.simpleMessage("Backup"), + "backupFailed": + MessageLookupByLibrary.simpleMessage("Sicherung fehlgeschlagen"), + "backupOverMobileData": + MessageLookupByLibrary.simpleMessage("Über mobile Daten sichern"), + "backupSettings": + MessageLookupByLibrary.simpleMessage("Backup-Einstellungen"), + "backupVideos": MessageLookupByLibrary.simpleMessage("Videos sichern"), + "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( + "Du kannst nur Dateien entfernen, die dir gehören"), + "cancel": MessageLookupByLibrary.simpleMessage("Abbrechen"), + "cancelOtherSubscription": m0, + "cancelSubscription": + MessageLookupByLibrary.simpleMessage("Abonnement kündigen"), + "cannotAddMorePhotosAfterBecomingViewer": m1, + "changeEmail": + MessageLookupByLibrary.simpleMessage("E-Mail-Adresse ändern"), + "changePassword": + MessageLookupByLibrary.simpleMessage("Passwort ändern"), + "changePasswordTitle": + MessageLookupByLibrary.simpleMessage("Passwort ändern"), + "changePermissions": + MessageLookupByLibrary.simpleMessage("Berechtigungen ändern?"), + "checkForUpdates": MessageLookupByLibrary.simpleMessage( + "Nach Aktualisierungen suchen"), + "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( + "Bitte überprüfe deinen E-Mail-Posteingang (und Spam), um die Verifizierung abzuschließen"), + "checking": MessageLookupByLibrary.simpleMessage("Wird geprüft..."), + "claimFreeStorage": + MessageLookupByLibrary.simpleMessage("Freien Speicher einlösen"), + "claimMore": MessageLookupByLibrary.simpleMessage("Mehr einlösen!"), + "claimed": MessageLookupByLibrary.simpleMessage("Eingelöst"), + "claimedStorageSoFar": m2, + "close": MessageLookupByLibrary.simpleMessage("Schließen"), + "codeAppliedPageTitle": + MessageLookupByLibrary.simpleMessage("Code eingelöst"), + "codeCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Code in Zwischenablage kopiert"), + "codeUsedByYou": + MessageLookupByLibrary.simpleMessage("Von dir benutzter Code"), + "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( + "Erstelle einen Link, um anderen zu ermöglichen, Fotos in deinem geteilten Album hinzuzufügen und zu sehen - ohne dass diese ein Konto von ente.io oder die App benötigen. Ideal, um Fotos von Events zu sammeln."), + "collaborativeLink": + MessageLookupByLibrary.simpleMessage("Gemeinschaftlicher Link"), + "collaborator": MessageLookupByLibrary.simpleMessage("Bearbeiter"), + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": + MessageLookupByLibrary.simpleMessage( + "Bearbeiter können Fotos & Videos zu dem geteilten Album hinzufügen."), + "collectEventPhotos": MessageLookupByLibrary.simpleMessage( + "Gemeinsam Event-Fotos sammeln"), + "collectPhotos": MessageLookupByLibrary.simpleMessage("Fotos sammeln"), + "color": MessageLookupByLibrary.simpleMessage("Farbe"), + "confirm": MessageLookupByLibrary.simpleMessage("Bestätigen"), + "confirm2FADisable": MessageLookupByLibrary.simpleMessage( + "Bist du sicher, dass du die Zwei-Faktor-Authentifizierung (2FA) deaktivieren willst?"), + "confirmAccountDeletion": + MessageLookupByLibrary.simpleMessage("Kontolöschung bestätigen"), + "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( + "Ja, ich möchte dieses Konto und alle enthaltenen Daten endgültig und unwiderruflich löschen."), + "confirmPassword": + MessageLookupByLibrary.simpleMessage("Passwort wiederholen"), + "confirmPlanChange": + MessageLookupByLibrary.simpleMessage("Aboänderungen bestätigen"), + "confirmRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Wiederherstellungsschlüssel bestätigen"), + "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Bestätigen Sie ihren Wiederherstellungsschlüssel"), + "contactFamilyAdmin": m3, + "contactSupport": + MessageLookupByLibrary.simpleMessage("Support kontaktieren"), + "contactToManageSubscription": m4, + "continueLabel": MessageLookupByLibrary.simpleMessage("Weiter"), + "continueOnFreeTrial": MessageLookupByLibrary.simpleMessage( + "Mit kostenloser Testversion fortfahren"), + "copyLink": MessageLookupByLibrary.simpleMessage("Link kopieren"), + "copypasteThisCodentoYourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Kopiere diesen Code\nin deine Authentifizierungs-App"), + "couldNotBackUpTryLater": MessageLookupByLibrary.simpleMessage( + "Deine Daten konnten nicht gesichert werden.\nWir versuchen es später erneut."), + "couldNotUpdateSubscription": MessageLookupByLibrary.simpleMessage( + "Abo konnte nicht aktualisiert werden"), + "createAccount": + MessageLookupByLibrary.simpleMessage("Konto erstellen"), + "createAlbumActionHint": MessageLookupByLibrary.simpleMessage( + "Drücke lange um Fotos auszuwählen und klicke + um ein Album zu erstellen"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("Neues Konto erstellen"), + "createPublicLink": + MessageLookupByLibrary.simpleMessage("Öffentlichen Link erstellen"), + "creatingLink": + MessageLookupByLibrary.simpleMessage("Erstelle Link..."), + "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( + "Kritisches Update ist verfügbar!"), + "currentUsageIs": + MessageLookupByLibrary.simpleMessage("Aktuell genutzt werden "), + "custom": MessageLookupByLibrary.simpleMessage("Benutzerdefiniert"), + "darkTheme": MessageLookupByLibrary.simpleMessage("Dunkel"), + "decrypting": + MessageLookupByLibrary.simpleMessage("Wird entschlüsselt..."), + "delete": MessageLookupByLibrary.simpleMessage("Löschen"), + "deleteAccount": MessageLookupByLibrary.simpleMessage("Konto löschen"), + "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( + "Wir bedauern sehr, dass du dein Konto löschen möchtest. Du würdest uns sehr helfen, wenn du uns kurz einige Gründe hierfür nennen könntest."), + "deleteAccountPermanentlyButton": MessageLookupByLibrary.simpleMessage( + "Konto unwiderruflich löschen"), + "deleteAlbum": MessageLookupByLibrary.simpleMessage("Album löschen"), + "deleteAlbumDialog": MessageLookupByLibrary.simpleMessage( + "Auch die Fotos (und Videos) in diesem Album aus allen anderen Alben löschen, die sie enthalten?"), + "deleteAlbumsDialogBody": MessageLookupByLibrary.simpleMessage( + "Damit werden alle leeren Alben gelöscht. Dies ist nützlich, wenn du das Durcheinander in deiner Albenliste verringern möchtest."), + "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( + "Du bist dabei, dein Konto und alle gespeicherten Daten dauerhaft zu löschen.\nDiese Aktion ist unwiderrufbar."), + "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( + "Bitte sende eine E-Mail an account-deletion@ente.io von Deiner bei uns hinterlegten E-Mail-Adresse."), + "deleteEmptyAlbums": + MessageLookupByLibrary.simpleMessage("Leere Alben löschen"), + "deleteEmptyAlbumsWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Leere Alben löschen?"), + "deleteFromBoth": + MessageLookupByLibrary.simpleMessage("Aus beidem löschen"), + "deleteFromDevice": + MessageLookupByLibrary.simpleMessage("Vom Gerät löschen"), + "deleteFromEnte": + MessageLookupByLibrary.simpleMessage("Auf ente.io löschen"), + "deletePhotos": MessageLookupByLibrary.simpleMessage("Fotos löschen"), + "deleteReason1": MessageLookupByLibrary.simpleMessage( + "Es fehlt eine zentrale Funktion, die ich benötige"), + "deleteReason2": MessageLookupByLibrary.simpleMessage( + "Die App oder eine bestimmte Funktion verhält sich nicht so wie gedacht"), + "deleteReason3": MessageLookupByLibrary.simpleMessage( + "Ich habe einen anderen Dienst gefunden, der mir mehr zusagt"), + "deleteReason4": MessageLookupByLibrary.simpleMessage( + "Mein Grund ist nicht aufgeführt"), + "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( + "Deine Anfrage wird innerhalb von 72 Stunden bearbeitet."), + "deleteSharedAlbum": + MessageLookupByLibrary.simpleMessage("Geteiltes Album löschen?"), + "deleteSharedAlbumDialogBody": MessageLookupByLibrary.simpleMessage( + "Dieses Album wird für alle gelöscht\n\nDu wirst den Zugriff auf geteilte Fotos in diesem Album, die anderen gehören, verlieren"), + "designedToOutlive": + MessageLookupByLibrary.simpleMessage("Entwickelt um zu bewahren"), + "details": MessageLookupByLibrary.simpleMessage("Details"), + "devAccountChanged": MessageLookupByLibrary.simpleMessage( + "Das Entwicklerkonto, das wir verwenden, um ente im App Store zu veröffentlichen, hat sich geändert. Aus diesem Grund musst du dich erneut anmelden.\n\nWir entschuldigen uns für die Unannehmlichkeiten, aber das war unvermeidlich."), + "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( + "Dateien, die zu diesem Album hinzugefügt werden, werden automatisch zu ente hochgeladen."), + "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( + "Das Sperren des Gerätes verhindern, solange \'ente\' im Vordergrund geöffnet ist und eine Sicherung läuft. \nDies wird für gewöhnlich nicht benötigt, kann aber dabei helfen große Transfers schneller durchzuführen."), + "disableAutoLock": MessageLookupByLibrary.simpleMessage( + "Automatische Sperre deaktivieren"), + "disableDownloadWarningBody": MessageLookupByLibrary.simpleMessage( + "Zuschauer können weiterhin Screenshots oder mit anderen externen Programmen Kopien der Bilder machen."), + "disableDownloadWarningTitle": + MessageLookupByLibrary.simpleMessage("Bitte beachten Sie:"), + "disableLinkMessage": m5, + "disableTwofactor": MessageLookupByLibrary.simpleMessage( + "Zweiten Faktor (2FA) deaktivieren"), + "disablingTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Zwei-Faktor-Authentifizierung (2FA) wird deaktiviert..."), + "discord": MessageLookupByLibrary.simpleMessage("Discord"), + "doThisLater": MessageLookupByLibrary.simpleMessage("Später machen"), + "doYouWantToDiscardTheEditsYouHaveMade": + MessageLookupByLibrary.simpleMessage( + "Möchtest du deine Änderungen verwerfen?"), + "done": MessageLookupByLibrary.simpleMessage("Fertig"), + "doubleYourStorage": + MessageLookupByLibrary.simpleMessage("Speicherplatz verdoppeln"), + "download": MessageLookupByLibrary.simpleMessage("Herunterladen"), + "downloadFailed": MessageLookupByLibrary.simpleMessage( + "Herunterladen fehlgeschlagen"), + "downloading": + MessageLookupByLibrary.simpleMessage("Wird heruntergeladen..."), + "dropSupportEmail": m6, + "duplicateFileCountWithStorageSaved": m7, + "editsSaved": + MessageLookupByLibrary.simpleMessage("Änderungen gespeichert"), + "eligible": MessageLookupByLibrary.simpleMessage("zulässig"), + "email": MessageLookupByLibrary.simpleMessage("E-Mail"), + "emailNoEnteAccount": m8, + "encryption": MessageLookupByLibrary.simpleMessage("Verschlüsselung"), + "encryptionKeys": + MessageLookupByLibrary.simpleMessage("Verschlüsselungscode"), + "endtoendEncryptedByDefault": MessageLookupByLibrary.simpleMessage( + "Automatisch Ende-zu-Ende-verschlüsselt"), + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": + MessageLookupByLibrary.simpleMessage( + "ente kann Dateien nur verschlüsselt sichern, wenn du uns darauf Zugriff gewährst"), + "enteSubscriptionPitch": MessageLookupByLibrary.simpleMessage( + "ente sichert deine Erinnerungsstücke, sodass sie immer für dich verfügbar sind, auch wenn du dein Gerät verlieren solltest."), + "enteSubscriptionShareWithFamily": MessageLookupByLibrary.simpleMessage( + "Deine Familie kann zu deinem Abo hinzugefügt werden."), + "enterAlbumName": + MessageLookupByLibrary.simpleMessage("Albumname eingeben"), + "enterCode": MessageLookupByLibrary.simpleMessage("Code eingeben"), + "enterCodeDescription": MessageLookupByLibrary.simpleMessage( + "Gib den Code deines Freundes ein, damit sie beide kostenlosen Speicherplatz erhalten"), + "enterEmail": MessageLookupByLibrary.simpleMessage("E-Mail eingeben"), + "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Gib ein neues Passwort ein, mit dem wir deine Daten verschlüsseln können"), + "enterPassword": + MessageLookupByLibrary.simpleMessage("Passwort eingeben"), + "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Gib ein Passwort ein, mit dem wir deine Daten verschlüsseln können"), + "enterReferralCode": MessageLookupByLibrary.simpleMessage( + "Gib den Weiterempfehlungs-Code ein"), + "enterThe6digitCodeFromnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Gib den 6-stelligen Code aus\ndeiner Authentifizierungs-App ein"), + "enterValidEmail": MessageLookupByLibrary.simpleMessage( + "Bitte gib eine gültige E-Mail-Adresse ein."), + "enterYourEmailAddress": MessageLookupByLibrary.simpleMessage( + "Gib deine E-Mail-Adresse ein"), + "enterYourPassword": + MessageLookupByLibrary.simpleMessage("Passwort eingeben"), + "enterYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Gib deinen Wiederherstellungs-Schlüssel ein"), + "everywhere": MessageLookupByLibrary.simpleMessage("überall"), + "exif": MessageLookupByLibrary.simpleMessage("EXIF"), + "existingUser": + MessageLookupByLibrary.simpleMessage("Existierender Benutzer"), + "expiredLinkInfo": MessageLookupByLibrary.simpleMessage( + "Dieser Link ist abgelaufen. Bitte wählen Sie ein neues Ablaufdatum oder deaktivieren Sie das Ablaufdatum des Links."), + "exportYourData": + MessageLookupByLibrary.simpleMessage("Daten exportieren"), + "failedToApplyCode": MessageLookupByLibrary.simpleMessage( + "Der Code konnte nicht aktiviert werden"), + "failedToCancel": + MessageLookupByLibrary.simpleMessage("Kündigung fehlgeschlagen"), + "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( + "Die Weiterempfehlungs-Details können nicht abgerufen werden. Bitte versuche es später erneut."), + "failedToLoadAlbums": MessageLookupByLibrary.simpleMessage( + "Laden der Alben fehlgeschlagen"), + "failedToRenew": + MessageLookupByLibrary.simpleMessage("Erneuern fehlgeschlagen"), + "failedToVerifyPaymentStatus": MessageLookupByLibrary.simpleMessage( + "Überprüfung des Zahlungsstatus fehlgeschlagen"), + "familyPlans": MessageLookupByLibrary.simpleMessage("Familientarif"), + "faq": MessageLookupByLibrary.simpleMessage("Häufig gestellte Fragen"), + "faqs": MessageLookupByLibrary.simpleMessage("FAQs"), + "favorite": MessageLookupByLibrary.simpleMessage("Favorit"), + "feedback": MessageLookupByLibrary.simpleMessage("Rückmeldung"), + "fileSavedToGallery": MessageLookupByLibrary.simpleMessage( + "Datei in Galerie gespeichert"), + "forYourMemories": + MessageLookupByLibrary.simpleMessage("Als Erinnerung"), + "forgotPassword": + MessageLookupByLibrary.simpleMessage("Passwort vergessen"), + "freeStorageClaimed": MessageLookupByLibrary.simpleMessage( + "Kostenlos hinzugefügter Speicherplatz"), + "freeStorageOnReferralSuccess": m9, + "freeStorageUsable": MessageLookupByLibrary.simpleMessage( + "Freier Speicherplatz nutzbar"), + "freeTrial": + MessageLookupByLibrary.simpleMessage("Kostenlose Testphase"), + "freeTrialValidTill": m10, + "freeUpDeviceSpace": + MessageLookupByLibrary.simpleMessage("Gerätespeicher freiräumen"), + "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( + "Bis zu 1000 Erinnerungsstücke angezeigt in der Galerie"), + "general": MessageLookupByLibrary.simpleMessage("Allgemein"), + "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( + "Generierung von Verschlüsselungscodes..."), + "googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"), + "grantPermission": + MessageLookupByLibrary.simpleMessage("Zugriff gewähren"), + "hidden": MessageLookupByLibrary.simpleMessage("Versteckt"), + "howItWorks": + MessageLookupByLibrary.simpleMessage("So funktioniert\'s"), + "howToViewShareeVerificationID": MessageLookupByLibrary.simpleMessage( + "Bitte sie, auf den Einstellungs Bildschirm ihre E-Mail-Adresse lange anzuklicken und zu überprüfen, dass die IDs auf beiden Geräten übereinstimmen."), + "ignoredFolderUploadReason": MessageLookupByLibrary.simpleMessage( + "Einige Dateien in diesem Album werden beim Upload ignoriert, weil sie zuvor auf ente gelöscht wurden."), + "importing": MessageLookupByLibrary.simpleMessage("Importiert...."), + "incorrectPasswordTitle": + MessageLookupByLibrary.simpleMessage("Falsches Passwort"), + "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage( + "Der eingegebene Schlüssel ist ungültig"), + "incorrectRecoveryKeyTitle": MessageLookupByLibrary.simpleMessage( + "Falscher Wiederherstellungs-Schlüssel"), + "insecureDevice": + MessageLookupByLibrary.simpleMessage("Unsicheres Gerät"), + "installManually": + MessageLookupByLibrary.simpleMessage("Manuell installieren"), + "invalidEmailAddress": + MessageLookupByLibrary.simpleMessage("Ungültige E-Mail-Adresse"), + "invalidKey": + MessageLookupByLibrary.simpleMessage("Ungültiger Schlüssel"), + "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Der von Ihnen eingegebene Wiederherstellungsschlüssel ist nicht gültig. Bitte stellen Sie sicher das aus 24 Wörtern zusammen gesetzt ist und jedes dieser Worte richtig geschrieben wurde.\n\nSollten Sie den Wiederherstellungscode eingegeben haben, stellen Sie bitte sicher, dass dieser 64 Worte lang ist und ebenfall richtig geschrieben wurde."), + "invite": MessageLookupByLibrary.simpleMessage("Einladen"), + "inviteToEnte": + MessageLookupByLibrary.simpleMessage("Zu ente einladen"), + "inviteYourFriends": + MessageLookupByLibrary.simpleMessage("Lade deine Freunde ein"), + "itemCount": m11, + "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( + "Ausgewählte Elemente werden aus diesem Album entfernt"), + "keepPhotos": MessageLookupByLibrary.simpleMessage("Fotos behalten"), + "kindlyHelpUsWithThisInformation": + MessageLookupByLibrary.simpleMessage("Bitte gib diese Daten ein"), + "lastUpdated": + MessageLookupByLibrary.simpleMessage("Zuletzt aktualisiert"), + "leave": MessageLookupByLibrary.simpleMessage("Verlassen"), + "leaveAlbum": MessageLookupByLibrary.simpleMessage("Album verlassen"), + "leaveFamily": + MessageLookupByLibrary.simpleMessage("Familienabo verlassen"), + "leaveSharedAlbum": + MessageLookupByLibrary.simpleMessage("Geteiltes Album verlassen?"), + "lightTheme": MessageLookupByLibrary.simpleMessage("Hell"), + "linkDeviceLimit": MessageLookupByLibrary.simpleMessage("Geräte Limit"), + "linkEnabled": MessageLookupByLibrary.simpleMessage("Aktiviert"), + "linkExpired": MessageLookupByLibrary.simpleMessage("Abgelaufen"), + "linkExpiresOn": m12, + "linkExpiry": + MessageLookupByLibrary.simpleMessage("Ablaufdatum des Links"), + "linkHasExpired": + MessageLookupByLibrary.simpleMessage("Link ist abgelaufen"), + "linkNeverExpires": MessageLookupByLibrary.simpleMessage("Niemals"), + "loadMessage2": MessageLookupByLibrary.simpleMessage( + "Wir haben bereits mehr als 10 Millionen Erinnerungsstücke gesichert"), + "loadingExifData": + MessageLookupByLibrary.simpleMessage("Lade Exif-Daten..."), + "lockButtonLabel": MessageLookupByLibrary.simpleMessage("Sperren"), + "lockScreenEnablePreSteps": MessageLookupByLibrary.simpleMessage( + "Um den Sperrbildschirm zu aktivieren, legen Sie bitte den Geräte-Passcode oder die Bildschirmsperre in den Systemeinstellungen fest."), + "lockscreen": MessageLookupByLibrary.simpleMessage("Sperrbildschirm"), + "logInLabel": MessageLookupByLibrary.simpleMessage("Anmelden"), + "loggingOut": MessageLookupByLibrary.simpleMessage("Abmeldung..."), + "loginTerms": MessageLookupByLibrary.simpleMessage( + "Mit dem Klick auf \"Anmelden\" stimme ich den Nutzungsbedingungen und der Datenschutzerklärung zu"), + "logout": MessageLookupByLibrary.simpleMessage("Ausloggen"), + "lostDevice": MessageLookupByLibrary.simpleMessage("Gerät verloren?"), + "manage": MessageLookupByLibrary.simpleMessage("Verwalten"), + "manageDeviceStorage": + MessageLookupByLibrary.simpleMessage("Gerätespeicher verwalten"), + "manageFamily": + MessageLookupByLibrary.simpleMessage("Familiengruppe verwalten"), + "manageLink": MessageLookupByLibrary.simpleMessage("Link verwalten"), + "manageParticipants": MessageLookupByLibrary.simpleMessage("Verwalten"), + "manageSubscription": + MessageLookupByLibrary.simpleMessage("Abonnement verwalten"), + "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), + "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), + "maxDeviceLimitSpikeHandling": m13, + "memoryCount": m14, + "merchandise": MessageLookupByLibrary.simpleMessage("Merchandise"), + "mobileWebDesktop": + MessageLookupByLibrary.simpleMessage("Mobil, Web, Desktop"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Mittel"), + "monthly": MessageLookupByLibrary.simpleMessage("Monatlich"), + "moveToAlbum": + MessageLookupByLibrary.simpleMessage("Zum Album verschieben"), + "movedToTrash": MessageLookupByLibrary.simpleMessage( + "In den Papierkorb verschoben"), + "name": MessageLookupByLibrary.simpleMessage("Name"), + "never": MessageLookupByLibrary.simpleMessage("Niemals"), + "newAlbum": MessageLookupByLibrary.simpleMessage("Neues Album"), + "newToEnte": MessageLookupByLibrary.simpleMessage("Neu bei ente"), + "newest": MessageLookupByLibrary.simpleMessage("Zuletzt"), + "no": MessageLookupByLibrary.simpleMessage("Nein"), + "noDeviceThatCanBeDeleted": MessageLookupByLibrary.simpleMessage( + "Du hast keine Dateien auf diesem Gerät, die gelöscht werden können"), + "noDuplicates": + MessageLookupByLibrary.simpleMessage("✨ Keine Duplikate"), + "noExifData": MessageLookupByLibrary.simpleMessage("Keine Exif-Daten"), + "noHiddenPhotosOrVideos": MessageLookupByLibrary.simpleMessage( + "Keine versteckten Fotos oder Videos"), + "noPhotosAreBeingBackedUpRightNow": + MessageLookupByLibrary.simpleMessage( + "Momentan werden keine Fotos gesichert"), + "noRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Kein Wiederherstellungs-Schlüssel?"), + "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( + "Aufgrund unseres Ende-zu-Ende-Verschlüsselungsprotokolls können deine Daten nicht ohne dein Passwort oder deinen Wiederherstellungs-Schlüssel entschlüsselt werden"), + "noResults": MessageLookupByLibrary.simpleMessage("Keine Ergebnisse"), + "noResultsFound": + MessageLookupByLibrary.simpleMessage("Keine Ergebnisse gefunden"), + "nothingToSeeHere": MessageLookupByLibrary.simpleMessage( + "Hier gibt es nichts zu sehen! 👀"), + "ok": MessageLookupByLibrary.simpleMessage("Ok"), + "onDevice": MessageLookupByLibrary.simpleMessage("Auf dem Gerät"), + "oops": MessageLookupByLibrary.simpleMessage("Hoppla"), + "oopsSomethingWentWrong": MessageLookupByLibrary.simpleMessage( + "Ups. Leider ist ein Fehler aufgetreten"), + "optionalAsShortAsYouLike": MessageLookupByLibrary.simpleMessage( + "Bei Bedarf auch so kurz wie Sie wollen..."), + "orPickAnExistingOne": MessageLookupByLibrary.simpleMessage( + "Oder eine Vorherige auswählen"), + "password": MessageLookupByLibrary.simpleMessage("Passwort"), + "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( + "Passwort erfolgreich geändert"), + "passwordLock": MessageLookupByLibrary.simpleMessage("Passwort Sperre"), + "passwordStrength": m15, + "passwordWarning": MessageLookupByLibrary.simpleMessage( + "Wir speichern dieses Passwort nicht. Wenn du es vergisst, können wir deine Daten nicht entschlüsseln"), + "paymentDetails": + MessageLookupByLibrary.simpleMessage("Zahlungsdetails"), + "paymentFailed": + MessageLookupByLibrary.simpleMessage("Zahlung fehlgeschlagen"), + "paymentFailedTalkToProvider": m16, + "paymentFailedWithReason": m17, + "peopleUsingYourCode": MessageLookupByLibrary.simpleMessage( + "Leute, die deinen Code verwenden"), + "photoGridSize": + MessageLookupByLibrary.simpleMessage("Fotorastergröße"), + "photoSmallCase": MessageLookupByLibrary.simpleMessage("Foto"), + "photosAddedByYouWillBeRemovedFromTheAlbum": + MessageLookupByLibrary.simpleMessage( + "Von dir hinzugefügte Fotos werden vom Album entfernt"), + "playstoreSubscription": + MessageLookupByLibrary.simpleMessage("PlayStore Abo"), + "pleaseContactSupportAndWeWillBeHappyToHelp": + MessageLookupByLibrary.simpleMessage( + "Bitte kontaktieren Sie uns über support@ente.io wo wir Ihnen gerne weiterhelfen."), + "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( + "Bitte erteile die nötigen Berechtigungen"), + "pleaseLoginAgain": + MessageLookupByLibrary.simpleMessage("Bitte logge dich erneut ein"), + "pleaseTryAgain": + MessageLookupByLibrary.simpleMessage("Bitte versuche es erneut"), + "pleaseWait": MessageLookupByLibrary.simpleMessage("Bitte warten..."), + "pleaseWaitDeletingAlbum": MessageLookupByLibrary.simpleMessage( + "Bitte warten, Album wird gelöscht"), + "pleaseWaitForSometimeBeforeRetrying": + MessageLookupByLibrary.simpleMessage( + "Bitte warte kurz, bevor du es erneut versuchst"), + "preserveMore": + MessageLookupByLibrary.simpleMessage("Mehr Daten sichern"), + "privacy": MessageLookupByLibrary.simpleMessage("Datenschutz"), + "privacyPolicyTitle": + MessageLookupByLibrary.simpleMessage("Datenschutzerklärung"), + "privateBackups": + MessageLookupByLibrary.simpleMessage("Private Sicherungen"), + "privateSharing": + MessageLookupByLibrary.simpleMessage("Privates Teilen"), + "publicLinkEnabled": + MessageLookupByLibrary.simpleMessage("Öffentlicher Link aktiviert"), + "rateTheApp": MessageLookupByLibrary.simpleMessage("App bewerten"), + "rateUs": MessageLookupByLibrary.simpleMessage("Bewerte uns"), + "rateUsOnStore": m18, + "recover": MessageLookupByLibrary.simpleMessage("Wiederherstellen"), + "recoverAccount": + MessageLookupByLibrary.simpleMessage("Konto wiederherstellen"), + "recoverButton": + MessageLookupByLibrary.simpleMessage("Wiederherstellen"), + "recoveryKey": MessageLookupByLibrary.simpleMessage( + "Wiederherstellungs-Schlüssel"), + "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Wiederherstellungs-Schlüssel in die Zwischenablage kopiert"), + "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( + "Falls du dein Passwort vergisst, kannst du deine Daten allein mit diesem Schlüssel wiederherstellen."), + "recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage( + "Wir speichern diesen Schlüssel nicht. Bitte speichere diese Schlüssel aus 24 Wörtern an einem sicheren Ort."), + "recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage( + "Sehr gut! Ihr Wiederherstellungsschlüssel ist gültig. Vielen Dank für die Verifizierung.\n\nBitte vergessen Sie nicht eine Kopie Ihres Wiederherstellungsschlüssels sicher aufzubewahren."), + "recoveryKeyVerified": MessageLookupByLibrary.simpleMessage( + "Wiederherstellungs-Schlüssel überprüft"), + "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( + "Ihr Wiederherstellungsschlüssel ist die einzige Möglichkeit Ihre Fotos wieder herzustellen, sollten Sie Ihr Passwort vergessen haben. Sie können diesen unter \"Einstellungen\" und dann \"Konto\" wieder finden.\n\nBitte geben Sie unten Ihren Wiederherstellungsschlüssel ein um sicher zu stellen, dass Sie ihn korrekt hinterlegt haben."), + "recoverySuccessful": MessageLookupByLibrary.simpleMessage( + "Wiederherstellung erfolgreich!"), + "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": + MessageLookupByLibrary.simpleMessage("Passwort wiederherstellen"), + "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( + "Begeistere Freunde für uns und verdopple deinen Speicher"), + "referralStep1": MessageLookupByLibrary.simpleMessage( + "1. Gib diesen Code an deine Freunde"), + "referralStep2": MessageLookupByLibrary.simpleMessage( + "2. Sie schließen ein bezahltes Abo ab"), + "referralStep3": m19, + "referrals": MessageLookupByLibrary.simpleMessage("Weiterempfehlungen"), + "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( + "Einlösungen sind derzeit pausiert"), + "remindToEmptyDeviceTrash": MessageLookupByLibrary.simpleMessage( + "Lösche auch Dateien aus \"Kürzlich gelöscht\" unter \"Einstellungen\" -> \"Speicher\" um freien Speicher zu erhalten"), + "remindToEmptyEnteTrash": MessageLookupByLibrary.simpleMessage( + "Leere auch deinen \"Papierkorb\", um freien Platz zu erhalten"), + "remove": MessageLookupByLibrary.simpleMessage("Entfernen"), + "removeDuplicates": + MessageLookupByLibrary.simpleMessage("Duplikate entfernen"), + "removeFromAlbum": + MessageLookupByLibrary.simpleMessage("Aus Album entfernen"), + "removeFromAlbumTitle": + MessageLookupByLibrary.simpleMessage("Aus Album entfernen?"), + "removeLink": MessageLookupByLibrary.simpleMessage("Link entfernen"), + "removeParticipant": + MessageLookupByLibrary.simpleMessage("Teilnehmer entfernen"), + "removeParticipantBody": m20, + "removePublicLink": + MessageLookupByLibrary.simpleMessage("Öffentlichen Link entfernen"), + "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( + "Einige der Elemente, die du entfernst, wurden von anderen Nutzern hinzugefügt und du wirst den Zugriff auf sie verlieren"), + "removeWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Entfernen?"), + "removingFromFavorites": MessageLookupByLibrary.simpleMessage( + "Wird aus Favoriten entfernt..."), + "rename": MessageLookupByLibrary.simpleMessage("Umbenennen"), + "renameAlbum": MessageLookupByLibrary.simpleMessage("Album umbenennen"), + "renewSubscription": + MessageLookupByLibrary.simpleMessage("Abonnement erneuern"), + "renewsOn": m21, + "reportABug": MessageLookupByLibrary.simpleMessage("Fehler melden"), + "reportBug": MessageLookupByLibrary.simpleMessage("Fehler melden"), + "resendEmail": + MessageLookupByLibrary.simpleMessage("E-Mail erneut senden"), + "resetIgnoredFiles": MessageLookupByLibrary.simpleMessage( + "Ignorierte Dateien zurücksetzen"), + "resetPasswordTitle": + MessageLookupByLibrary.simpleMessage("Passwort zurücksetzen"), + "restore": MessageLookupByLibrary.simpleMessage("Wiederherstellen"), + "restoringFiles": MessageLookupByLibrary.simpleMessage( + "Dateien werden wiederhergestellt..."), + "retry": MessageLookupByLibrary.simpleMessage("Erneut versuchen"), + "rotateRight": + MessageLookupByLibrary.simpleMessage("Nach rechts drehen"), + "safelyStored": MessageLookupByLibrary.simpleMessage("Gesichert"), + "saveCopy": MessageLookupByLibrary.simpleMessage("Kopie speichern"), + "saveKey": MessageLookupByLibrary.simpleMessage("Schlüssel speichern"), + "saveYourRecoveryKeyIfYouHaventAlready": + MessageLookupByLibrary.simpleMessage( + "Sichere deinen Wiederherstellungs-Schlüssel, falls noch nicht geschehen"), + "saving": MessageLookupByLibrary.simpleMessage("Speichern..."), + "scanCode": MessageLookupByLibrary.simpleMessage("Code scannen"), + "scanThisBarcodeWithnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Scanne diesen Code mit \ndeiner Authentifizierungs-App"), + "searchByAlbumNameHint": + MessageLookupByLibrary.simpleMessage("Name des Albums"), + "security": MessageLookupByLibrary.simpleMessage("Sicherheit"), + "selectAll": MessageLookupByLibrary.simpleMessage("Alle markieren"), + "selectFoldersForBackup": MessageLookupByLibrary.simpleMessage( + "Ordner für Sicherung auswählen"), + "selectReason": MessageLookupByLibrary.simpleMessage("Grund auswählen"), + "selectYourPlan": + MessageLookupByLibrary.simpleMessage("Wähle dein Abo aus"), + "selectedFoldersWillBeEncryptedAndBackedUp": + MessageLookupByLibrary.simpleMessage( + "Ausgewählte Ordner werden verschlüsselt und gesichert"), + "selectedPhotos": m22, + "selectedPhotosWithYours": m23, + "send": MessageLookupByLibrary.simpleMessage("Absenden"), + "sendEmail": MessageLookupByLibrary.simpleMessage("E-Mail senden"), + "sendInvite": MessageLookupByLibrary.simpleMessage("Einladung senden"), + "sendLink": MessageLookupByLibrary.simpleMessage("Link senden"), + "sessionExpired": + MessageLookupByLibrary.simpleMessage("Sitzung abgelaufen"), + "setAPassword": MessageLookupByLibrary.simpleMessage("Passwort setzen"), + "setAs": MessageLookupByLibrary.simpleMessage("Festlegen als"), + "setPasswordTitle": + MessageLookupByLibrary.simpleMessage("Passwort festlegen"), + "setupComplete": + MessageLookupByLibrary.simpleMessage("Einrichtung abgeschlossen"), + "share": MessageLookupByLibrary.simpleMessage("Teilen"), + "shareALink": MessageLookupByLibrary.simpleMessage("Einen Link teilen"), + "shareAlbumHint": MessageLookupByLibrary.simpleMessage( + "Öffne ein Album und tippe auf den Teilen-Button oben rechts, um zu teilen."), + "shareAnAlbumNow": + MessageLookupByLibrary.simpleMessage("Teile jetzt ein Album"), + "shareLink": MessageLookupByLibrary.simpleMessage("Link teilen"), + "shareMyVerificationID": m24, + "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( + "Teile mit ausgewählten Personen"), + "shareTextConfirmOthersVerificationID": m25, + "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( + "Lade ente herunter, damit wir einfach Fotos und Videos in höchster Qualität teilen können\n\nhttps://ente.io/#download"), + "shareTextReferralCode": m26, + "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( + "Mit Nicht-Ente-Benutzern teilen"), + "shareWithPeopleSectionTitle": m27, + "shareYourFirstAlbum": + MessageLookupByLibrary.simpleMessage("Teile dein erstes Album"), + "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( + "Erstelle gemeinsame Alben mit anderen ente Benutzern, einschließlich solchen im kostenlosen Tarif."), + "sharedByMe": MessageLookupByLibrary.simpleMessage("Von mir geteilt"), + "sharedWith": m28, + "sharedWithMe": MessageLookupByLibrary.simpleMessage("Mit mir geteilt"), + "sharing": MessageLookupByLibrary.simpleMessage("Teilt..."), + "signUpTerms": MessageLookupByLibrary.simpleMessage( + "Ich stimme den Nutzungsbedingungen und der Datenschutzerklärung zu"), + "singleFileDeleteFromDevice": m29, + "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( + "Es wird aus allen Alben gelöscht."), + "singleFileInBothLocalAndRemote": m30, + "singleFileInRemoteOnly": m31, + "skip": MessageLookupByLibrary.simpleMessage("Überspringen"), + "social": MessageLookupByLibrary.simpleMessage("Social Media"), + "someoneSharingAlbumsWithYouShouldSeeTheSameId": + MessageLookupByLibrary.simpleMessage( + "Jemand, der Alben mit dir teilt, sollte die gleiche ID auf seinem Gerät sehen."), + "somethingWentWrong": + MessageLookupByLibrary.simpleMessage("Irgendetwas ging schief"), + "somethingWentWrongPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Ein Fehler ist aufgetreten, bitte versuche es erneut"), + "sorry": MessageLookupByLibrary.simpleMessage("Entschuldigung"), + "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( + "Konnte leider nicht zu den Favoriten hinzugefügt werden!"), + "sorryCouldNotRemoveFromFavorites": + MessageLookupByLibrary.simpleMessage( + "Konnte leider nicht aus den Favoriten entfernt werden!"), + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": + MessageLookupByLibrary.simpleMessage( + "Es tut uns leid, wir konnten keine sicheren Schlüssel auf diesem Gerät generieren.\n\nBitte starte die Registrierung auf einem anderen Gerät."), + "sparkleSuccess": + MessageLookupByLibrary.simpleMessage("✨ Abgeschlossen"), + "startBackup": + MessageLookupByLibrary.simpleMessage("Sicherung starten"), + "storageInGB": m32, + "storageLimitExceeded": MessageLookupByLibrary.simpleMessage( + "Speichergrenze überschritten"), + "strongStrength": MessageLookupByLibrary.simpleMessage("Stark"), + "subAlreadyLinkedErrMessage": m33, + "subWillBeCancelledOn": m34, + "subscribe": MessageLookupByLibrary.simpleMessage("Abonnieren"), + "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( + "Sieht aus, als sei dein Abonnement abgelaufen. Bitte abonniere, um das Teilen zu aktivieren."), + "subscription": MessageLookupByLibrary.simpleMessage("Abonnement"), + "success": MessageLookupByLibrary.simpleMessage("Abgeschlossen"), + "suggestFeatures": + MessageLookupByLibrary.simpleMessage("Verbesserung vorschlagen"), + "support": MessageLookupByLibrary.simpleMessage("Support"), + "syncProgress": m35, + "systemTheme": MessageLookupByLibrary.simpleMessage("System"), + "tapToCopy": + MessageLookupByLibrary.simpleMessage("zum Kopieren antippen"), + "tapToEnterCode": MessageLookupByLibrary.simpleMessage( + "Antippen, um den Code einzugeben"), + "terminate": MessageLookupByLibrary.simpleMessage("Beenden"), + "terminateSession": + MessageLookupByLibrary.simpleMessage("Sitzungen beenden?"), + "terms": MessageLookupByLibrary.simpleMessage("Nutzungsbedingungen"), + "termsOfServicesTitle": + MessageLookupByLibrary.simpleMessage("Nutzungsbedingungen"), + "thankYou": MessageLookupByLibrary.simpleMessage("Vielen Dank"), + "thankYouForSubscribing": + MessageLookupByLibrary.simpleMessage("Danke fürs Abonnieren!"), + "theDownloadCouldNotBeCompleted": MessageLookupByLibrary.simpleMessage( + "Der Download konnte nicht abgeschlossen werden"), + "theme": MessageLookupByLibrary.simpleMessage("Theme"), + "theyAlsoGetXGb": m36, + "thisCanBeUsedToRecoverYourAccountIfYou": + MessageLookupByLibrary.simpleMessage( + "Dies kann verwendet werden, um dein Konto wiederherzustellen, wenn du deinen zweiten Faktor (2FA) verlierst"), + "thisDevice": MessageLookupByLibrary.simpleMessage("Dieses Gerät"), + "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( + "Dieses Bild hat keine Exif-Daten"), + "thisIsPersonVerificationId": m37, + "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( + "Dies ist deine Verifizierungs-ID"), + "thisWillLogYouOutOfTheFollowingDevice": + MessageLookupByLibrary.simpleMessage( + "Dadurch wirst du von folgendem Gerät abgemeldet:"), + "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( + "Dadurch wirst du von diesem Gerät abgemeldet!"), + "total": MessageLookupByLibrary.simpleMessage("Gesamt"), + "trash": MessageLookupByLibrary.simpleMessage("Papierkorb"), + "tryAgain": MessageLookupByLibrary.simpleMessage("Erneut versuchen"), + "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( + "Aktiviere die Sicherung, um automatisch neu hinzugefügte Dateien dieses Ordners auf ente hochzuladen."), + "twitter": MessageLookupByLibrary.simpleMessage("Twitter"), + "twoMonthsFreeOnYearlyPlans": MessageLookupByLibrary.simpleMessage( + "2 Monate kostenlos beim jährlichen Bezahlen"), + "twofactor": MessageLookupByLibrary.simpleMessage("Zwei-Faktor"), + "twofactorAuthenticationHasBeenDisabled": + MessageLookupByLibrary.simpleMessage( + "Zwei-Faktor-Authentifizierung (2FA) wurde deaktiviert"), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage( + "Zwei-Faktor-Authentifizierung"), + "twofactorAuthenticationSuccessfullyReset": + MessageLookupByLibrary.simpleMessage( + "Zwei-Faktor-Authentifizierung (2FA) erfolgreich zurückgesetzt"), + "twofactorSetup": MessageLookupByLibrary.simpleMessage( + "Zweiten Faktor (2FA) einrichten"), + "unarchive": MessageLookupByLibrary.simpleMessage("Dearchivieren"), + "unarchiveAlbum": + MessageLookupByLibrary.simpleMessage("Album dearchivieren"), + "uncategorized": + MessageLookupByLibrary.simpleMessage("Unkategorisiert"), + "unselectAll": MessageLookupByLibrary.simpleMessage("Alle demarkieren"), + "update": MessageLookupByLibrary.simpleMessage("Updaten"), + "updateAvailable": + MessageLookupByLibrary.simpleMessage("Update verfügbar"), + "updatingFolderSelection": MessageLookupByLibrary.simpleMessage( + "Ordnerauswahl wird aktualisiert..."), + "upgrade": MessageLookupByLibrary.simpleMessage("Upgrade"), + "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( + "Der verwendbare Speicherplatz ist von deinem aktuellen Abonnement eingeschränkt. Überschüssiger, beanspruchter Speicherplatz wird automatisch verwendbar werden, wenn du ein höheres Abonnement buchst."), + "usePublicLinksForPeopleNotOnEnte": + MessageLookupByLibrary.simpleMessage( + "Nutze öffentliche Links für Personen ohne ente.io Konto"), + "useRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Wiederherstellungs-Schlüssel verwenden"), + "verificationId": + MessageLookupByLibrary.simpleMessage("Verifizierungs-ID"), + "verify": MessageLookupByLibrary.simpleMessage("Überprüfen"), + "verifyEmail": + MessageLookupByLibrary.simpleMessage("E-Mail-Adresse verifizieren"), + "verifyEmailID": m38, + "verifyPassword": + MessageLookupByLibrary.simpleMessage("Passwort überprüfen"), + "verifyingRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Wiederherstellungs-Schlüssel wird überprüft..."), + "videoSmallCase": MessageLookupByLibrary.simpleMessage("Video"), + "viewActiveSessions": + MessageLookupByLibrary.simpleMessage("Aktive Sitzungen anzeigen"), + "viewAllExifData": + MessageLookupByLibrary.simpleMessage("Alle Exif-Daten anzeigen"), + "viewRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Wiederherstellungsschlüssel anzeigen"), + "viewer": MessageLookupByLibrary.simpleMessage("Zuschauer"), + "visitWebToManage": MessageLookupByLibrary.simpleMessage( + "Bitte rufen Sie \"web.ente.io\" auf um ihr Abo zu verwalten"), + "weAreOpenSource": MessageLookupByLibrary.simpleMessage( + "Unser Quellcode ist offen einsehbar!"), + "weHaveSendEmailTo": m39, + "weakStrength": MessageLookupByLibrary.simpleMessage("Schwach"), + "welcomeBack": + MessageLookupByLibrary.simpleMessage("Willkommen zurück!"), + "yearly": MessageLookupByLibrary.simpleMessage("Jährlich"), + "yearsAgo": m40, + "yes": MessageLookupByLibrary.simpleMessage("Ja"), + "yesCancel": MessageLookupByLibrary.simpleMessage("Ja, kündigen"), + "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( + "Ja, zu \"Beobachter\" ändern"), + "yesDelete": MessageLookupByLibrary.simpleMessage("Ja, löschen"), + "yesDiscardChanges": + MessageLookupByLibrary.simpleMessage("Ja, Änderungen verwerfen"), + "yesLogout": MessageLookupByLibrary.simpleMessage("Ja, ausloggen"), + "yesRemove": MessageLookupByLibrary.simpleMessage("Ja, entfernen"), + "yesRenew": MessageLookupByLibrary.simpleMessage("Ja, erneuern"), + "you": MessageLookupByLibrary.simpleMessage("Sie"), + "youAreOnAFamilyPlan": + MessageLookupByLibrary.simpleMessage("Du bist im Familien-Tarif!"), + "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage( + "Sie sind auf der neuesten Version"), + "youCanAtMaxDoubleYourStorage": MessageLookupByLibrary.simpleMessage( + "* Du kannst deinen Speicher maximal verdoppeln"), + "youCannotDowngradeToThisPlan": MessageLookupByLibrary.simpleMessage( + "Sie können nicht auf diesen Tarif wechseln"), + "youCannotShareWithYourself": MessageLookupByLibrary.simpleMessage( + "Du kannst nicht mit dir selbst teilen"), + "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( + "Du hast keine archivierten Elemente."), + "youHaveSuccessfullyFreedUp": m41, + "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage( + "Dein Benutzerkonto wurde gelöscht"), + "yourPlanWasSuccessfullyDowngraded": + MessageLookupByLibrary.simpleMessage( + "Ihr Tarif wurde erfolgreich heruntergestuft"), + "yourPlanWasSuccessfullyUpgraded": MessageLookupByLibrary.simpleMessage( + "Ihr Abo wurde erfolgreich aufgestuft"), + "yourPurchaseWasSuccessful": MessageLookupByLibrary.simpleMessage( + "Ihr Einkauf war erfolgreich!"), + "yourStorageDetailsCouldNotBeFetched": + MessageLookupByLibrary.simpleMessage( + "Details zum Speicherplatz konnten nicht abgerufen werden"), + "yourSubscriptionHasExpired": MessageLookupByLibrary.simpleMessage( + "Dein Abonnement ist abgelaufen"), + "yourSubscriptionWasUpdatedSuccessfully": + MessageLookupByLibrary.simpleMessage( + "Dein Abonnement wurde erfolgreich aktualisiert."), + "youveNoDuplicateFilesThatCanBeCleared": + MessageLookupByLibrary.simpleMessage( + "Du hast keine Duplikate, die gelöscht werden können"), + "youveNoFilesInThisAlbumThatCanBeDeleted": + MessageLookupByLibrary.simpleMessage( + "Du hast keine Dateien in diesem Album, die gelöscht werden können") + }; +} diff --git a/lib/generated/intl/messages_en.dart b/lib/generated/intl/messages_en.dart new file mode 100644 index 000000000..b37e71f4f --- /dev/null +++ b/lib/generated/intl/messages_en.dart @@ -0,0 +1,1263 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a en 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 => 'en'; + + static String m42(count) => + "${Intl.plural(count, one: 'Add item', other: 'Add items')}"; + + static String m43(emailOrName) => "Added by ${emailOrName}"; + + static String m44(albumName) => "Added successfully to ${albumName}"; + + static String m0(paymentProvider) => + "Please cancel your existing subscription from ${paymentProvider} first"; + + static String m1(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 m2(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 m45(albumName) => "Collaborative link created for ${albumName}"; + + static String m3(familyAdminEmail) => + "Please contact ${familyAdminEmail} to manage your subscription"; + + static String m4(provider) => + "Please contact us at support@ente.io to manage your ${provider} subscription."; + + static String m46(currentlyDeleting, totalCount) => + "Deleting ${currentlyDeleting} / ${totalCount}"; + + static String m5(albumName) => + "This will remove the public link for accessing \"${albumName}\"."; + + static String m6(supportEmail) => + "Please drop an email to ${supportEmail} from your registered email address"; + + static String m7(count, storageSaved) => + "Your have cleaned up ${Intl.plural(count, one: '${count} duplicate file', other: '${count} duplicate files')}, saving (${storageSaved}!)"; + + static String m47(newEmail) => "Email changed to ${newEmail}"; + + static String m8(email) => + "${email} does not have an ente account.\n\nSend them an invite to share photos."; + + static String m48(count, formattedNumber) => + "${Intl.plural(count, one: '1 file', other: '${formattedNumber} files')} on this device have been backed up safely"; + + static String m49(count, formattedNumber) => + "${Intl.plural(count, one: '1 file', other: '${formattedNumber} files')} in this album has been backed up safely"; + + static String m9(storageAmountInGB) => + "${storageAmountInGB} GB each time someone signs up for a paid plan and applies your code"; + + static String m10(endDate) => "Free trial valid till ${endDate}"; + + static String m50(count) => + "You can still access ${Intl.plural(count, one: 'it', other: 'them')} on ente as long as you have an active subscription"; + + static String m51(sizeInMBorGB) => "Free up ${sizeInMBorGB}"; + + static String m52(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 m11(count) => + "${Intl.plural(count, one: '${count} item', other: '${count} items')}"; + + static String m53(count) => "${count} selected"; + + static String m12(expiryTime) => "Link will expire on ${expiryTime}"; + + static String m13(maxValue) => + "When set to the maximum (${maxValue}), the device limit will be relaxed to allow for temporary spikes of large number of viewers."; + + static String m14(count) => + "${Intl.plural(count, zero: 'no memories', one: '${count} memory', other: '${count} memories')}"; + + static String m54(count) => + "${Intl.plural(count, one: 'Move item', other: 'Move items')}"; + + static String m55(albumName) => "Moved successfully to ${albumName}"; + + static String m15(passwordStrengthValue) => + "Password strength: ${passwordStrengthValue}"; + + static String m16(providerName) => + "Please talk to ${providerName} support if you were charged"; + + static String m17(reason) => + "Unfortunately your payment failed due to ${reason}"; + + static String m56(toEmail) => "Please email us at ${toEmail}"; + + static String m57(toEmail) => "Please send the logs to \n${toEmail}"; + + static String m18(storeName) => "Rate us on ${storeName}"; + + static String m19(storageInGB) => + "3. Both of you get ${storageInGB} GB* free"; + + static String m20(userEmail) => + "${userEmail} will be removed from this shared album\n\nAny photos added by them will also be removed from the album"; + + static String m21(endDate) => "Renews on ${endDate}"; + + static String m22(count) => "${count} selected"; + + static String m23(count, yourCount) => + "${count} selected (${yourCount} yours)"; + + static String m24(verificationID) => + "Here\'s my verification ID: ${verificationID} for ente.io."; + + static String m25(verificationID) => + "Hey, can you confirm that this is your ente.io verification ID: ${verificationID}"; + + static String m26(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 m27(numberOfPeople) => + "${Intl.plural(numberOfPeople, zero: 'Share with specific people', one: 'Shared with 1 person', other: 'Shared with ${numberOfPeople} people')}"; + + static String m28(emailIDs) => "Shared with ${emailIDs}"; + + static String m29(fileType) => + "This ${fileType} will be deleted from your device."; + + static String m30(fileType) => + "This ${fileType} is in both ente and your device."; + + static String m31(fileType) => "This ${fileType} will be deleted from ente."; + + static String m32(storageAmountInGB) => "${storageAmountInGB} GB"; + + static String m33(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 m34(endDate) => + "Your subscription will be cancelled on ${endDate}"; + + static String m35(completed, total) => + "${completed}/${total} memories preserved"; + + static String m36(storageAmountInGB) => + "They also get ${storageAmountInGB} GB"; + + static String m58(nameValue, ageValue) => + "This is my name: ${nameValue}, my age is ${ageValue}"; + + static String m37(email) => "This is ${email}\'s Verification ID"; + + static String m38(email) => "Verify ${email}"; + + static String m39(email) => "We have sent a mail to ${email}"; + + static String m40(count) => + "${Intl.plural(count, one: '${count} year ago', other: '${count} years ago')}"; + + static String m41(storageSaved) => + "You have successfully freed up ${storageSaved}!"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "aNewVersionOfEnteIsAvailable": MessageLookupByLibrary.simpleMessage( + "A new version of ente is available."), + "about": MessageLookupByLibrary.simpleMessage("About"), + "account": MessageLookupByLibrary.simpleMessage("Account"), + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("Welcome back!"), + "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( + "I understand that if I lose my password, I may lose my data since my data is end-to-end encrypted."), + "activeSessions": + MessageLookupByLibrary.simpleMessage("Active sessions"), + "addANewEmail": MessageLookupByLibrary.simpleMessage("Add a new email"), + "addCollaborator": + MessageLookupByLibrary.simpleMessage("Add collaborator"), + "addItem": m42, + "addLocation": MessageLookupByLibrary.simpleMessage("Add location"), + "addLocationButton": MessageLookupByLibrary.simpleMessage("Add"), + "addMore": MessageLookupByLibrary.simpleMessage("Add more"), + "addToAlbum": MessageLookupByLibrary.simpleMessage("Add to album"), + "addToEnte": MessageLookupByLibrary.simpleMessage("Add to ente"), + "addViewer": MessageLookupByLibrary.simpleMessage("Add viewer"), + "addedAs": MessageLookupByLibrary.simpleMessage("Added as"), + "addedBy": m43, + "addedSuccessfullyTo": m44, + "addingToFavorites": + MessageLookupByLibrary.simpleMessage("Adding to favorites..."), + "advanced": MessageLookupByLibrary.simpleMessage("Advanced"), + "advancedSettings": MessageLookupByLibrary.simpleMessage("Advanced"), + "after1Day": MessageLookupByLibrary.simpleMessage("After 1 day"), + "after1Hour": MessageLookupByLibrary.simpleMessage("After 1 hour"), + "after1Month": MessageLookupByLibrary.simpleMessage("After 1 month"), + "after1Week": MessageLookupByLibrary.simpleMessage("After 1 week"), + "after1Year": MessageLookupByLibrary.simpleMessage("After 1 year"), + "albumOwner": MessageLookupByLibrary.simpleMessage("Owner"), + "albumTitle": MessageLookupByLibrary.simpleMessage("Album title"), + "albumUpdated": MessageLookupByLibrary.simpleMessage("Album updated"), + "albums": MessageLookupByLibrary.simpleMessage("Albums"), + "allClear": MessageLookupByLibrary.simpleMessage("✨ All clear"), + "allMemoriesPreserved": + MessageLookupByLibrary.simpleMessage("All memories preserved"), + "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Allow people with the link to also add photos to the shared album."), + "allowAddingPhotos": + MessageLookupByLibrary.simpleMessage("Allow adding photos"), + "allowDownloads": + MessageLookupByLibrary.simpleMessage("Allow downloads"), + "allowPeopleToAddPhotos": + MessageLookupByLibrary.simpleMessage("Allow people to add photos"), + "androidIosWebDesktop": + MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Desktop"), + "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), + "apply": MessageLookupByLibrary.simpleMessage("Apply"), + "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Apply code"), + "appstoreSubscription": + MessageLookupByLibrary.simpleMessage("AppStore subscription"), + "archive": MessageLookupByLibrary.simpleMessage("Archive"), + "archiveAlbum": MessageLookupByLibrary.simpleMessage("Archive album"), + "archiving": MessageLookupByLibrary.simpleMessage("Archiving..."), + "areYouSureThatYouWantToLeaveTheFamily": + MessageLookupByLibrary.simpleMessage( + "Are you sure that you want to leave the family plan?"), + "areYouSureYouWantToCancel": MessageLookupByLibrary.simpleMessage( + "Are you sure you want to cancel?"), + "areYouSureYouWantToChangeYourPlan": + MessageLookupByLibrary.simpleMessage( + "Are you sure you want to change your plan?"), + "areYouSureYouWantToExit": MessageLookupByLibrary.simpleMessage( + "Are you sure you want to exit?"), + "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( + "Are you sure you want to logout?"), + "areYouSureYouWantToRenew": MessageLookupByLibrary.simpleMessage( + "Are you sure you want to renew?"), + "askCancelReason": MessageLookupByLibrary.simpleMessage( + "Your subscription was cancelled. Would you like to share the reason?"), + "askDeleteReason": MessageLookupByLibrary.simpleMessage( + "What is the main reason you are deleting your account?"), + "askYourLovedOnesToShare": MessageLookupByLibrary.simpleMessage( + "Ask your loved ones to share"), + "atAFalloutShelter": + MessageLookupByLibrary.simpleMessage("at a fallout shelter"), + "authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage( + "Please authenticate to change lockscreen setting"), + "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( + "Please authenticate to change your email"), + "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( + "Please authenticate to change your password"), + "authToConfigureTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Please authenticate to configure two-factor authentication"), + "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Please authenticate to initiate account deletion"), + "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( + "Please authenticate to view your active sessions"), + "authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage( + "Please authenticate to view your hidden files"), + "authToViewYourMemories": MessageLookupByLibrary.simpleMessage( + "Please authenticate to view your memories"), + "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Please authenticate to view your recovery key"), + "authenticating": + MessageLookupByLibrary.simpleMessage("Authenticating..."), + "authenticationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Authentication failed, please try again"), + "authenticationSuccessful": + MessageLookupByLibrary.simpleMessage("Authentication successful!"), + "available": MessageLookupByLibrary.simpleMessage("Available"), + "backedUpFolders": + MessageLookupByLibrary.simpleMessage("Backed up folders"), + "backup": MessageLookupByLibrary.simpleMessage("Backup"), + "backupFailed": MessageLookupByLibrary.simpleMessage("Backup failed"), + "backupOverMobileData": + MessageLookupByLibrary.simpleMessage("Backup over mobile data"), + "backupSettings": + MessageLookupByLibrary.simpleMessage("Backup settings"), + "backupVideos": MessageLookupByLibrary.simpleMessage("Backup videos"), + "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "cachedData": MessageLookupByLibrary.simpleMessage("Cached data"), + "calculating": MessageLookupByLibrary.simpleMessage("Calculating..."), + "canNotUploadToAlbumsOwnedByOthers": + MessageLookupByLibrary.simpleMessage( + "Can not upload to albums owned by others"), + "canOnlyCreateLinkForFilesOwnedByYou": + MessageLookupByLibrary.simpleMessage( + "Can only create link for files owned by you"), + "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( + "Can only remove files owned by you"), + "cancel": MessageLookupByLibrary.simpleMessage("Cancel"), + "cancelOtherSubscription": m0, + "cancelSubscription": + MessageLookupByLibrary.simpleMessage("Cancel subscription"), + "cannotAddMorePhotosAfterBecomingViewer": m1, + "centerPoint": MessageLookupByLibrary.simpleMessage("Center point"), + "changeEmail": MessageLookupByLibrary.simpleMessage("Change email"), + "changePassword": + MessageLookupByLibrary.simpleMessage("Change password"), + "changePasswordTitle": + MessageLookupByLibrary.simpleMessage("Change password"), + "changePermissions": + MessageLookupByLibrary.simpleMessage("Change permissions?"), + "checkForUpdates": + MessageLookupByLibrary.simpleMessage("Check for updates"), + "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( + "Please check your inbox (and spam) to complete verification"), + "checking": MessageLookupByLibrary.simpleMessage("Checking..."), + "claimFreeStorage": + MessageLookupByLibrary.simpleMessage("Claim free storage"), + "claimMore": MessageLookupByLibrary.simpleMessage("Claim more!"), + "claimed": MessageLookupByLibrary.simpleMessage("Claimed"), + "claimedStorageSoFar": m2, + "clearCaches": MessageLookupByLibrary.simpleMessage("Clear caches"), + "click": MessageLookupByLibrary.simpleMessage("• Click"), + "clickOnTheOverflowMenu": MessageLookupByLibrary.simpleMessage( + "• Click on the overflow menu"), + "close": MessageLookupByLibrary.simpleMessage("Close"), + "clubByCaptureTime": + MessageLookupByLibrary.simpleMessage("Club by capture time"), + "codeAppliedPageTitle": + MessageLookupByLibrary.simpleMessage("Code applied"), + "codeCopiedToClipboard": + MessageLookupByLibrary.simpleMessage("Code copied to clipboard"), + "codeUsedByYou": + MessageLookupByLibrary.simpleMessage("Code used by you"), + "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( + "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": m45, + "collaborator": MessageLookupByLibrary.simpleMessage("Collaborator"), + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": + MessageLookupByLibrary.simpleMessage( + "Collaborators can add photos and videos to the shared album."), + "collectEventPhotos": + MessageLookupByLibrary.simpleMessage("Collect event photos"), + "collectPhotos": MessageLookupByLibrary.simpleMessage("Collect photos"), + "color": MessageLookupByLibrary.simpleMessage("Color"), + "confirm": MessageLookupByLibrary.simpleMessage("Confirm"), + "confirm2FADisable": MessageLookupByLibrary.simpleMessage( + "Are you sure you want to disable two-factor authentication?"), + "confirmAccountDeletion": + MessageLookupByLibrary.simpleMessage("Confirm Account Deletion"), + "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( + "Yes, I want to permanently delete this account and all its data."), + "confirmPassword": + MessageLookupByLibrary.simpleMessage("Confirm password"), + "confirmPlanChange": + MessageLookupByLibrary.simpleMessage("Confirm plan change"), + "confirmRecoveryKey": + MessageLookupByLibrary.simpleMessage("Confirm recovery key"), + "confirmYourRecoveryKey": + MessageLookupByLibrary.simpleMessage("Confirm your recovery key"), + "contactFamilyAdmin": m3, + "contactSupport": + MessageLookupByLibrary.simpleMessage("Contact support"), + "contactToManageSubscription": m4, + "continueLabel": MessageLookupByLibrary.simpleMessage("Continue"), + "continueOnFreeTrial": + MessageLookupByLibrary.simpleMessage("Continue on free trial"), + "copyEmailAddress": + MessageLookupByLibrary.simpleMessage("Copy email address"), + "copyLink": MessageLookupByLibrary.simpleMessage("Copy link"), + "copypasteThisCodentoYourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Copy-paste this code\nto your authenticator app"), + "couldNotBackUpTryLater": MessageLookupByLibrary.simpleMessage( + "We could not backup your data.\nWe will retry later."), + "couldNotFreeUpSpace": + MessageLookupByLibrary.simpleMessage("Could not free up space"), + "couldNotUpdateSubscription": MessageLookupByLibrary.simpleMessage( + "Could not update subscription"), + "count": MessageLookupByLibrary.simpleMessage("Count"), + "createAccount": MessageLookupByLibrary.simpleMessage("Create account"), + "createAlbumActionHint": MessageLookupByLibrary.simpleMessage( + "Long press to select photos and click + to create an album"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("Create new account"), + "createOrSelectAlbum": + MessageLookupByLibrary.simpleMessage("Create or select album"), + "createPublicLink": + MessageLookupByLibrary.simpleMessage("Create public link"), + "creatingLink": + MessageLookupByLibrary.simpleMessage("Creating link..."), + "criticalUpdateAvailable": + MessageLookupByLibrary.simpleMessage("Critical update available"), + "currentUsageIs": + MessageLookupByLibrary.simpleMessage("Current usage is "), + "custom": MessageLookupByLibrary.simpleMessage("Custom"), + "darkTheme": MessageLookupByLibrary.simpleMessage("Dark"), + "decrypting": MessageLookupByLibrary.simpleMessage("Decrypting..."), + "decryptingVideo": + MessageLookupByLibrary.simpleMessage("Decrypting video..."), + "deduplicateFiles": + MessageLookupByLibrary.simpleMessage("Deduplicate Files"), + "delete": MessageLookupByLibrary.simpleMessage("Delete"), + "deleteAccount": MessageLookupByLibrary.simpleMessage("Delete account"), + "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( + "We are sorry to see you go. Please share your feedback to help us improve."), + "deleteAccountPermanentlyButton": + MessageLookupByLibrary.simpleMessage("Delete Account Permanently"), + "deleteAlbum": MessageLookupByLibrary.simpleMessage("Delete album"), + "deleteAlbumDialog": MessageLookupByLibrary.simpleMessage( + "Also delete the photos (and videos) present in this album from all other albums they are part of?"), + "deleteAlbumsDialogBody": MessageLookupByLibrary.simpleMessage( + "This will delete all empty albums. This is useful when you want to reduce the clutter in your album list."), + "deleteAll": MessageLookupByLibrary.simpleMessage("Delete All"), + "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( + "You are about to permanently delete your account and all its data.\nThis action is irreversible."), + "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( + "Please send an email to account-deletion@ente.io from your registered email address."), + "deleteEmptyAlbums": + MessageLookupByLibrary.simpleMessage("Delete empty albums"), + "deleteEmptyAlbumsWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Delete empty albums?"), + "deleteFromBoth": + MessageLookupByLibrary.simpleMessage("Delete from both"), + "deleteFromDevice": + MessageLookupByLibrary.simpleMessage("Delete from device"), + "deleteFromEnte": + MessageLookupByLibrary.simpleMessage("Delete from ente"), + "deleteLocation": + MessageLookupByLibrary.simpleMessage("Delete location"), + "deletePhotos": MessageLookupByLibrary.simpleMessage("Delete photos"), + "deleteProgress": m46, + "deleteReason1": MessageLookupByLibrary.simpleMessage( + "It’s missing a key feature that I need"), + "deleteReason2": MessageLookupByLibrary.simpleMessage( + "The app or a certain feature does not \nbehave as I think it should"), + "deleteReason3": MessageLookupByLibrary.simpleMessage( + "I found another service that I like better"), + "deleteReason4": + MessageLookupByLibrary.simpleMessage("My reason isn’t listed"), + "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( + "Your request will be processed within 72 hours."), + "deleteSharedAlbum": + MessageLookupByLibrary.simpleMessage("Delete shared album?"), + "deleteSharedAlbumDialogBody": MessageLookupByLibrary.simpleMessage( + "The album will be deleted for everyone\n\nYou will lose access to shared photos in this album that are owned by others"), + "deselectAll": MessageLookupByLibrary.simpleMessage("Deselect all"), + "designedToOutlive": + MessageLookupByLibrary.simpleMessage("Designed to outlive"), + "details": MessageLookupByLibrary.simpleMessage("Details"), + "devAccountChanged": MessageLookupByLibrary.simpleMessage( + "The developer account we use to publish ente on App Store has changed. Because of this, you will need to login again.\n\nOur apologies for the inconvenience, but this was unavoidable."), + "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( + "Files added to this device album will automatically get uploaded to ente."), + "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( + "Disable the device screen lock when ente is in the foreground and there is a backup in progress. This is normally not needed, but may help big uploads and initial imports of large libraries complete faster."), + "didYouKnow": MessageLookupByLibrary.simpleMessage("Did you know?"), + "disableAutoLock": + MessageLookupByLibrary.simpleMessage("Disable auto lock"), + "disableDownloadWarningBody": MessageLookupByLibrary.simpleMessage( + "Viewers can still take screenshots or save a copy of your photos using external tools"), + "disableDownloadWarningTitle": + MessageLookupByLibrary.simpleMessage("Please note"), + "disableLinkMessage": m5, + "disableTwofactor": + MessageLookupByLibrary.simpleMessage("Disable two-factor"), + "disablingTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Disabling two-factor authentication..."), + "discord": MessageLookupByLibrary.simpleMessage("Discord"), + "dismiss": MessageLookupByLibrary.simpleMessage("Dismiss"), + "doThisLater": MessageLookupByLibrary.simpleMessage("Do this later"), + "doYouWantToDiscardTheEditsYouHaveMade": + MessageLookupByLibrary.simpleMessage( + "Do you want to discard the edits you have made?"), + "done": MessageLookupByLibrary.simpleMessage("Done"), + "doubleYourStorage": + MessageLookupByLibrary.simpleMessage("Double your storage"), + "download": MessageLookupByLibrary.simpleMessage("Download"), + "downloadFailed": + MessageLookupByLibrary.simpleMessage("Download failed"), + "downloading": MessageLookupByLibrary.simpleMessage("Downloading..."), + "dropSupportEmail": m6, + "duplicateFileCountWithStorageSaved": m7, + "edit": MessageLookupByLibrary.simpleMessage("Edit"), + "editsSaved": MessageLookupByLibrary.simpleMessage("Edits saved"), + "eligible": MessageLookupByLibrary.simpleMessage("eligible"), + "email": MessageLookupByLibrary.simpleMessage("Email"), + "emailChangedTo": m47, + "emailNoEnteAccount": m8, + "emailYourLogs": + MessageLookupByLibrary.simpleMessage("Email your logs"), + "empty": MessageLookupByLibrary.simpleMessage("Empty"), + "emptyTrash": MessageLookupByLibrary.simpleMessage("Empty trash?"), + "encryptingBackup": + MessageLookupByLibrary.simpleMessage("Encrypting backup..."), + "encryption": MessageLookupByLibrary.simpleMessage("Encryption"), + "encryptionKeys": + MessageLookupByLibrary.simpleMessage("Encryption keys"), + "endtoendEncryptedByDefault": MessageLookupByLibrary.simpleMessage( + "End-to-end encrypted by default"), + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": + MessageLookupByLibrary.simpleMessage( + "ente can encrypt and preserve files only if you grant access to them"), + "enteSubscriptionPitch": MessageLookupByLibrary.simpleMessage( + "ente preserves your memories, so they\'re always available to you, even if you lose your device."), + "enteSubscriptionShareWithFamily": MessageLookupByLibrary.simpleMessage( + "Your family can be added to your plan as well."), + "enterAlbumName": + MessageLookupByLibrary.simpleMessage("Enter album name"), + "enterCode": MessageLookupByLibrary.simpleMessage("Enter code"), + "enterCodeDescription": MessageLookupByLibrary.simpleMessage( + "Enter the code provided by your friend to claim free storage for both of you"), + "enterEmail": MessageLookupByLibrary.simpleMessage("Enter email"), + "enterFileName": + MessageLookupByLibrary.simpleMessage("Enter file name"), + "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Enter a new password we can use to encrypt your data"), + "enterPassword": MessageLookupByLibrary.simpleMessage("Enter password"), + "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Enter a password we can use to encrypt your data"), + "enterReferralCode": + MessageLookupByLibrary.simpleMessage("Enter referral code"), + "enterThe6digitCodeFromnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Enter the 6-digit code from\nyour authenticator app"), + "enterValidEmail": MessageLookupByLibrary.simpleMessage( + "Please enter a valid email address."), + "enterYourEmailAddress": + MessageLookupByLibrary.simpleMessage("Enter your email address"), + "enterYourPassword": + MessageLookupByLibrary.simpleMessage("Enter your password"), + "enterYourRecoveryKey": + MessageLookupByLibrary.simpleMessage("Enter your recovery key"), + "error": MessageLookupByLibrary.simpleMessage("Error"), + "everywhere": MessageLookupByLibrary.simpleMessage("everywhere"), + "exif": MessageLookupByLibrary.simpleMessage("EXIF"), + "existingUser": MessageLookupByLibrary.simpleMessage("Existing user"), + "expiredLinkInfo": MessageLookupByLibrary.simpleMessage( + "This link has expired. Please select a new expiry time or disable link expiry."), + "exportLogs": MessageLookupByLibrary.simpleMessage("Export logs"), + "exportYourData": + MessageLookupByLibrary.simpleMessage("Export your data"), + "failedToApplyCode": + MessageLookupByLibrary.simpleMessage("Failed to apply code"), + "failedToCancel": + MessageLookupByLibrary.simpleMessage("Failed to cancel"), + "failedToFetchOriginalForEdit": MessageLookupByLibrary.simpleMessage( + "Failed to fetch original for edit"), + "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( + "Unable to fetch referral details. Please try again later."), + "failedToLoadAlbums": + MessageLookupByLibrary.simpleMessage("Failed to load albums"), + "failedToRenew": + MessageLookupByLibrary.simpleMessage("Failed to renew"), + "failedToVerifyPaymentStatus": MessageLookupByLibrary.simpleMessage( + "Failed to verify payment status"), + "familyPlans": MessageLookupByLibrary.simpleMessage("Family plans"), + "faq": MessageLookupByLibrary.simpleMessage("FAQ"), + "faqs": MessageLookupByLibrary.simpleMessage("FAQs"), + "favorite": MessageLookupByLibrary.simpleMessage("Favorite"), + "feedback": MessageLookupByLibrary.simpleMessage("Feedback"), + "fileSavedToGallery": + MessageLookupByLibrary.simpleMessage("File saved to gallery"), + "filesBackedUpFromDevice": m48, + "filesBackedUpInAlbum": m49, + "filesDeleted": MessageLookupByLibrary.simpleMessage("Files deleted"), + "flip": MessageLookupByLibrary.simpleMessage("Flip"), + "forYourMemories": + MessageLookupByLibrary.simpleMessage("for your memories"), + "forgotPassword": + MessageLookupByLibrary.simpleMessage("Forgot password"), + "freeStorageClaimed": + MessageLookupByLibrary.simpleMessage("Free storage claimed"), + "freeStorageOnReferralSuccess": m9, + "freeStorageUsable": + MessageLookupByLibrary.simpleMessage("Free storage usable"), + "freeTrial": MessageLookupByLibrary.simpleMessage("Free trial"), + "freeTrialValidTill": m10, + "freeUpAccessPostDelete": m50, + "freeUpAmount": m51, + "freeUpDeviceSpace": + MessageLookupByLibrary.simpleMessage("Free up device space"), + "freeUpSpace": MessageLookupByLibrary.simpleMessage("Free up space"), + "freeUpSpaceSaving": m52, + "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( + "Up to 1000 memories shown in gallery"), + "general": MessageLookupByLibrary.simpleMessage("General"), + "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( + "Generating encryption keys..."), + "googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"), + "grantPermission": + MessageLookupByLibrary.simpleMessage("Grant permission"), + "groupNearbyPhotos": + MessageLookupByLibrary.simpleMessage("Group nearby photos"), + "hidden": MessageLookupByLibrary.simpleMessage("Hidden"), + "hide": MessageLookupByLibrary.simpleMessage("Hide"), + "howItWorks": MessageLookupByLibrary.simpleMessage("How it works"), + "howToViewShareeVerificationID": MessageLookupByLibrary.simpleMessage( + "Please ask them to long-press their email address on the settings screen, and verify that the IDs on both devices match."), + "ignoredFolderUploadReason": MessageLookupByLibrary.simpleMessage( + "Some files in this album are ignored from upload because they had previously been deleted from ente."), + "importing": MessageLookupByLibrary.simpleMessage("Importing...."), + "incorrectCode": MessageLookupByLibrary.simpleMessage("Incorrect code"), + "incorrectPasswordTitle": + MessageLookupByLibrary.simpleMessage("Incorrect password"), + "incorrectRecoveryKey": + MessageLookupByLibrary.simpleMessage("Incorrect recovery key"), + "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage( + "The recovery key you entered is incorrect"), + "incorrectRecoveryKeyTitle": + MessageLookupByLibrary.simpleMessage("Incorrect recovery key"), + "insecureDevice": + MessageLookupByLibrary.simpleMessage("Insecure device"), + "installManually": + MessageLookupByLibrary.simpleMessage("Install manually"), + "invalidEmailAddress": + MessageLookupByLibrary.simpleMessage("Invalid email address"), + "invalidKey": MessageLookupByLibrary.simpleMessage("Invalid key"), + "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( + "The recovery key you entered is not valid. Please make sure it contains 24 words, and check the spelling of each.\n\nIf you entered an older recovery code, make sure it is 64 characters long, and check each of them."), + "invite": MessageLookupByLibrary.simpleMessage("Invite"), + "inviteToEnte": MessageLookupByLibrary.simpleMessage("Invite to ente"), + "inviteYourFriends": + MessageLookupByLibrary.simpleMessage("Invite your friends"), + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": + MessageLookupByLibrary.simpleMessage( + "It looks like something went wrong. Please retry after some time. If the error persists, please contact our support team."), + "itemCount": m11, + "itemSelectedCount": m53, + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": + MessageLookupByLibrary.simpleMessage( + "Items show the number of days remaining before permanent deletion"), + "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( + "Selected items will be removed from this album"), + "keepPhotos": MessageLookupByLibrary.simpleMessage("Keep Photos"), + "kiloMeterUnit": MessageLookupByLibrary.simpleMessage("km"), + "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( + "Kindly help us with this information"), + "language": MessageLookupByLibrary.simpleMessage("Language"), + "lastUpdated": MessageLookupByLibrary.simpleMessage("Last updated"), + "leave": MessageLookupByLibrary.simpleMessage("Leave"), + "leaveAlbum": MessageLookupByLibrary.simpleMessage("Leave album"), + "leaveFamily": MessageLookupByLibrary.simpleMessage("Leave family"), + "leaveSharedAlbum": + MessageLookupByLibrary.simpleMessage("Leave shared album?"), + "light": MessageLookupByLibrary.simpleMessage("Light"), + "lightTheme": MessageLookupByLibrary.simpleMessage("Light"), + "linkCopiedToClipboard": + MessageLookupByLibrary.simpleMessage("Link copied to clipboard"), + "linkDeviceLimit": MessageLookupByLibrary.simpleMessage("Device limit"), + "linkEnabled": MessageLookupByLibrary.simpleMessage("Enabled"), + "linkExpired": MessageLookupByLibrary.simpleMessage("Expired"), + "linkExpiresOn": m12, + "linkExpiry": MessageLookupByLibrary.simpleMessage("Link expiry"), + "linkHasExpired": + MessageLookupByLibrary.simpleMessage("Link has expired"), + "linkNeverExpires": MessageLookupByLibrary.simpleMessage("Never"), + "loadMessage1": MessageLookupByLibrary.simpleMessage( + "You can share your subscription with your family"), + "loadMessage2": MessageLookupByLibrary.simpleMessage( + "We have preserved over 10 million memories so far"), + "loadMessage3": MessageLookupByLibrary.simpleMessage( + "We keep 3 copies of your data, one in an underground fallout shelter"), + "loadMessage4": MessageLookupByLibrary.simpleMessage( + "All our apps are open source"), + "loadMessage5": MessageLookupByLibrary.simpleMessage( + "Our source code and cryptography have been externally audited"), + "loadMessage6": MessageLookupByLibrary.simpleMessage( + "You can share links to your albums with your loved ones"), + "loadMessage7": MessageLookupByLibrary.simpleMessage( + "Our mobile apps run in the background to encrypt and backup any new photos you click"), + "loadMessage8": MessageLookupByLibrary.simpleMessage( + "web.ente.io has a slick uploader"), + "loadMessage9": MessageLookupByLibrary.simpleMessage( + "We use Xchacha20Poly1305 to safely encrypt your data"), + "loadingExifData": + MessageLookupByLibrary.simpleMessage("Loading EXIF data..."), + "loadingGallery": + MessageLookupByLibrary.simpleMessage("Loading gallery..."), + "loadingMessage": + MessageLookupByLibrary.simpleMessage("Loading your photos..."), + "localGallery": MessageLookupByLibrary.simpleMessage("Local gallery"), + "location": MessageLookupByLibrary.simpleMessage("Location"), + "locationName": MessageLookupByLibrary.simpleMessage("Location name"), + "locationTagFeatureDescription": MessageLookupByLibrary.simpleMessage( + "A location tag groups all photos that were taken within some radius of a photo"), + "lockButtonLabel": MessageLookupByLibrary.simpleMessage("Lock"), + "lockScreenEnablePreSteps": MessageLookupByLibrary.simpleMessage( + "To enable lockscreen, please setup device passcode or screen lock in your system settings."), + "lockscreen": MessageLookupByLibrary.simpleMessage("Lockscreen"), + "logInLabel": MessageLookupByLibrary.simpleMessage("Log in"), + "loggingOut": MessageLookupByLibrary.simpleMessage("Logging out..."), + "loginTerms": MessageLookupByLibrary.simpleMessage( + "By clicking log in, I agree to the terms of service and privacy policy"), + "logout": MessageLookupByLibrary.simpleMessage("Logout"), + "logsDialogBody": MessageLookupByLibrary.simpleMessage( + "This will send across logs to help us debug your issue. Please note that file names will be included to help track issues with specific files."), + "longpressOnAnItemToViewInFullscreen": + MessageLookupByLibrary.simpleMessage( + "Long-press on an item to view in full-screen"), + "lostDevice": MessageLookupByLibrary.simpleMessage("Lost device?"), + "manage": MessageLookupByLibrary.simpleMessage("Manage"), + "manageDeviceStorage": + MessageLookupByLibrary.simpleMessage("Manage device storage"), + "manageFamily": MessageLookupByLibrary.simpleMessage("Manage Family"), + "manageLink": MessageLookupByLibrary.simpleMessage("Manage link"), + "manageParticipants": MessageLookupByLibrary.simpleMessage("Manage"), + "manageSubscription": + MessageLookupByLibrary.simpleMessage("Manage subscription"), + "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), + "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), + "maxDeviceLimitSpikeHandling": m13, + "memoryCount": m14, + "merchandise": MessageLookupByLibrary.simpleMessage("Merchandise"), + "mobileWebDesktop": + MessageLookupByLibrary.simpleMessage("Mobile, Web, Desktop"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Moderate"), + "monthly": MessageLookupByLibrary.simpleMessage("Monthly"), + "moveItem": m54, + "moveToAlbum": MessageLookupByLibrary.simpleMessage("Move to album"), + "movedSuccessfullyTo": m55, + "movedToTrash": MessageLookupByLibrary.simpleMessage("Moved to trash"), + "movingFilesToAlbum": + MessageLookupByLibrary.simpleMessage("Moving files to album..."), + "name": MessageLookupByLibrary.simpleMessage("Name"), + "never": MessageLookupByLibrary.simpleMessage("Never"), + "newAlbum": MessageLookupByLibrary.simpleMessage("New album"), + "newToEnte": MessageLookupByLibrary.simpleMessage("New to ente"), + "newest": MessageLookupByLibrary.simpleMessage("Newest"), + "no": MessageLookupByLibrary.simpleMessage("No"), + "noDeviceThatCanBeDeleted": MessageLookupByLibrary.simpleMessage( + "You\'ve no files on this device that can be deleted"), + "noDuplicates": MessageLookupByLibrary.simpleMessage("✨ No duplicates"), + "noExifData": MessageLookupByLibrary.simpleMessage("No EXIF data"), + "noHiddenPhotosOrVideos": + MessageLookupByLibrary.simpleMessage("No hidden photos or videos"), + "noPhotosAreBeingBackedUpRightNow": + MessageLookupByLibrary.simpleMessage( + "No photos are being backed up right now"), + "noRecoveryKey": + MessageLookupByLibrary.simpleMessage("No recovery key?"), + "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( + "Due to the nature of our end-to-end encryption protocol, your data cannot be decrypted without your password or recovery key"), + "noResults": MessageLookupByLibrary.simpleMessage("No results"), + "noResultsFound": + MessageLookupByLibrary.simpleMessage("No results found"), + "nothingToSeeHere": + MessageLookupByLibrary.simpleMessage("Nothing to see here! 👀"), + "ok": MessageLookupByLibrary.simpleMessage("Ok"), + "onDevice": MessageLookupByLibrary.simpleMessage("On device"), + "onEnte": MessageLookupByLibrary.simpleMessage( + "On ente"), + "oops": MessageLookupByLibrary.simpleMessage("Oops"), + "oopsCouldNotSaveEdits": + MessageLookupByLibrary.simpleMessage("Oops, could not save edits"), + "oopsSomethingWentWrong": + MessageLookupByLibrary.simpleMessage("Oops, something went wrong"), + "openTheItem": MessageLookupByLibrary.simpleMessage("• Open the item"), + "optionalAsShortAsYouLike": MessageLookupByLibrary.simpleMessage( + "Optional, as short as you like..."), + "orPickAnExistingOne": + MessageLookupByLibrary.simpleMessage("Or pick an existing one"), + "password": MessageLookupByLibrary.simpleMessage("Password"), + "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( + "Password changed successfully"), + "passwordLock": MessageLookupByLibrary.simpleMessage("Password lock"), + "passwordStrength": m15, + "passwordWarning": MessageLookupByLibrary.simpleMessage( + "We don\'t store this password, so if you forget, we cannot decrypt your data"), + "paymentDetails": + MessageLookupByLibrary.simpleMessage("Payment details"), + "paymentFailed": MessageLookupByLibrary.simpleMessage("Payment failed"), + "paymentFailedTalkToProvider": m16, + "paymentFailedWithReason": m17, + "pendingSync": MessageLookupByLibrary.simpleMessage("Pending sync"), + "peopleUsingYourCode": + MessageLookupByLibrary.simpleMessage("People using your code"), + "permDeleteWarning": MessageLookupByLibrary.simpleMessage( + "All items in trash will be permanently deleted\n\nThis action cannot be undone"), + "permanentlyDelete": + MessageLookupByLibrary.simpleMessage("Permanently delete"), + "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( + "Permanently delete from device?"), + "photoGridSize": + MessageLookupByLibrary.simpleMessage("Photo grid size"), + "photoSmallCase": MessageLookupByLibrary.simpleMessage("photo"), + "photosAddedByYouWillBeRemovedFromTheAlbum": + MessageLookupByLibrary.simpleMessage( + "Photos added by you will be removed from the album"), + "pickCenterPoint": + MessageLookupByLibrary.simpleMessage("Pick center point"), + "playstoreSubscription": + MessageLookupByLibrary.simpleMessage("PlayStore subscription"), + "pleaseContactSupportAndWeWillBeHappyToHelp": + MessageLookupByLibrary.simpleMessage( + "Please contact support@ente.io and we will be happy to help!"), + "pleaseContactSupportIfTheProblemPersists": + MessageLookupByLibrary.simpleMessage( + "Please contact support if the problem persists"), + "pleaseEmailUsAt": m56, + "pleaseGrantPermissions": + MessageLookupByLibrary.simpleMessage("Please grant permissions"), + "pleaseLoginAgain": + MessageLookupByLibrary.simpleMessage("Please login again"), + "pleaseSendTheLogsTo": m57, + "pleaseTryAgain": + MessageLookupByLibrary.simpleMessage("Please try again"), + "pleaseVerifyTheCodeYouHaveEntered": + MessageLookupByLibrary.simpleMessage( + "Please verify the code you have entered"), + "pleaseWait": MessageLookupByLibrary.simpleMessage("Please wait..."), + "pleaseWaitDeletingAlbum": + MessageLookupByLibrary.simpleMessage("Please wait, deleting album"), + "pleaseWaitForSometimeBeforeRetrying": + MessageLookupByLibrary.simpleMessage( + "Please wait for sometime before retrying"), + "preparingLogs": + MessageLookupByLibrary.simpleMessage("Preparing logs..."), + "preserveMore": MessageLookupByLibrary.simpleMessage("Preserve more"), + "pressAndHoldToPlayVideo": MessageLookupByLibrary.simpleMessage( + "Press and hold to play video"), + "privacy": MessageLookupByLibrary.simpleMessage("Privacy"), + "privacyPolicyTitle": + MessageLookupByLibrary.simpleMessage("Privacy Policy"), + "privateBackups": + MessageLookupByLibrary.simpleMessage("Private backups"), + "privateSharing": + MessageLookupByLibrary.simpleMessage("Private sharing"), + "publicLinkCreated": + MessageLookupByLibrary.simpleMessage("Public link created"), + "publicLinkEnabled": + MessageLookupByLibrary.simpleMessage("Public link enabled"), + "radius": MessageLookupByLibrary.simpleMessage("Radius"), + "raiseTicket": MessageLookupByLibrary.simpleMessage("Raise ticket"), + "rateTheApp": MessageLookupByLibrary.simpleMessage("Rate the app"), + "rateUs": MessageLookupByLibrary.simpleMessage("Rate us"), + "rateUsOnStore": m18, + "recover": MessageLookupByLibrary.simpleMessage("Recover"), + "recoverAccount": + MessageLookupByLibrary.simpleMessage("Recover account"), + "recoverButton": MessageLookupByLibrary.simpleMessage("Recover"), + "recoveryKey": MessageLookupByLibrary.simpleMessage("Recovery key"), + "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Recovery key copied to clipboard"), + "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( + "If you forget your password, the only way you can recover your data is with this key."), + "recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage( + "We don\'t store this key, please save this 24 word key in a safe place."), + "recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage( + "Great! Your recovery key is valid. Thank you for verifying.\n\nPlease remember to keep your recovery key safely backed up."), + "recoveryKeyVerified": + 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."), + "recoverySuccessful": + MessageLookupByLibrary.simpleMessage("Recovery successful!"), + "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": + MessageLookupByLibrary.simpleMessage("Recreate password"), + "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( + "Refer friends and 2x your plan"), + "referralStep1": MessageLookupByLibrary.simpleMessage( + "1. Give this code to your friends"), + "referralStep2": MessageLookupByLibrary.simpleMessage( + "2. They sign up for a paid plan"), + "referralStep3": m19, + "referrals": MessageLookupByLibrary.simpleMessage("Referrals"), + "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( + "Referrals are currently paused"), + "remindToEmptyDeviceTrash": MessageLookupByLibrary.simpleMessage( + "Also empty \"Recently Deleted\" from \"Settings\" -> \"Storage\" to claim the freed space"), + "remindToEmptyEnteTrash": MessageLookupByLibrary.simpleMessage( + "Also empty your \"Trash\" to claim the freed up space"), + "remoteImages": MessageLookupByLibrary.simpleMessage("Remote images"), + "remoteThumbnails": + MessageLookupByLibrary.simpleMessage("Remote thumbnails"), + "remoteVideos": MessageLookupByLibrary.simpleMessage("Remote videos"), + "remove": MessageLookupByLibrary.simpleMessage("Remove"), + "removeDuplicates": + MessageLookupByLibrary.simpleMessage("Remove duplicates"), + "removeFromAlbum": + MessageLookupByLibrary.simpleMessage("Remove from album"), + "removeFromAlbumTitle": + MessageLookupByLibrary.simpleMessage("Remove from album?"), + "removeFromFavorite": + MessageLookupByLibrary.simpleMessage("Remove from favorite"), + "removeLink": MessageLookupByLibrary.simpleMessage("Remove link"), + "removeParticipant": + MessageLookupByLibrary.simpleMessage("Remove participant"), + "removeParticipantBody": m20, + "removePublicLink": + MessageLookupByLibrary.simpleMessage("Remove public link"), + "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( + "Some of the items you are removing were added by other people, and you will lose access to them"), + "removeWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Remove?"), + "removingFromFavorites": + MessageLookupByLibrary.simpleMessage("Removing from favorites..."), + "rename": MessageLookupByLibrary.simpleMessage("Rename"), + "renameAlbum": MessageLookupByLibrary.simpleMessage("Rename album"), + "renameFile": MessageLookupByLibrary.simpleMessage("Rename file"), + "renewSubscription": + MessageLookupByLibrary.simpleMessage("Renew subscription"), + "renewsOn": m21, + "reportABug": MessageLookupByLibrary.simpleMessage("Report a bug"), + "reportBug": MessageLookupByLibrary.simpleMessage("Report bug"), + "resendEmail": MessageLookupByLibrary.simpleMessage("Resend email"), + "resetIgnoredFiles": + MessageLookupByLibrary.simpleMessage("Reset ignored files"), + "resetPasswordTitle": + MessageLookupByLibrary.simpleMessage("Reset password"), + "restore": MessageLookupByLibrary.simpleMessage("Restore"), + "restoreToAlbum": + MessageLookupByLibrary.simpleMessage("Restore to album"), + "restoringFiles": + MessageLookupByLibrary.simpleMessage("Restoring files..."), + "retry": MessageLookupByLibrary.simpleMessage("Retry"), + "reviewDeduplicateItems": MessageLookupByLibrary.simpleMessage( + "Please review and delete the items you believe are duplicates."), + "rotateLeft": MessageLookupByLibrary.simpleMessage("Rotate left"), + "rotateRight": MessageLookupByLibrary.simpleMessage("Rotate right"), + "safelyStored": MessageLookupByLibrary.simpleMessage("Safely stored"), + "save": MessageLookupByLibrary.simpleMessage("Save"), + "saveCopy": MessageLookupByLibrary.simpleMessage("Save copy"), + "saveKey": MessageLookupByLibrary.simpleMessage("Save key"), + "saveYourRecoveryKeyIfYouHaventAlready": + MessageLookupByLibrary.simpleMessage( + "Save your recovery key if you haven\'t already"), + "saving": MessageLookupByLibrary.simpleMessage("Saving..."), + "scanCode": MessageLookupByLibrary.simpleMessage("Scan code"), + "scanThisBarcodeWithnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Scan this barcode with\nyour authenticator app"), + "searchByAlbumNameHint": + MessageLookupByLibrary.simpleMessage("Album name"), + "searchByExamples": MessageLookupByLibrary.simpleMessage( + "• Album names (e.g. \"Camera\")\n• Types of files (e.g. \"Videos\", \".gif\")\n• Years and months (e.g. \"2022\", \"January\")\n• Holidays (e.g. \"Christmas\")\n• Photo descriptions (e.g. “#fun”)"), + "searchHintText": MessageLookupByLibrary.simpleMessage( + "Albums, months, days, years, ..."), + "security": MessageLookupByLibrary.simpleMessage("Security"), + "selectAlbum": MessageLookupByLibrary.simpleMessage("Select album"), + "selectAll": MessageLookupByLibrary.simpleMessage("Select all"), + "selectFoldersForBackup": + MessageLookupByLibrary.simpleMessage("Select folders for backup"), + "selectLanguage": + MessageLookupByLibrary.simpleMessage("Select Language"), + "selectReason": MessageLookupByLibrary.simpleMessage("Select reason"), + "selectYourPlan": + MessageLookupByLibrary.simpleMessage("Select your plan"), + "selectedFilesAreNotOnEnte": MessageLookupByLibrary.simpleMessage( + "Selected files are not on ente"), + "selectedFoldersWillBeEncryptedAndBackedUp": + MessageLookupByLibrary.simpleMessage( + "Selected folders will be encrypted and backed up"), + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": + MessageLookupByLibrary.simpleMessage( + "Selected items will be deleted from all albums and moved to trash."), + "selectedPhotos": m22, + "selectedPhotosWithYours": m23, + "send": MessageLookupByLibrary.simpleMessage("Send"), + "sendEmail": MessageLookupByLibrary.simpleMessage("Send email"), + "sendInvite": MessageLookupByLibrary.simpleMessage("Send invite"), + "sendLink": MessageLookupByLibrary.simpleMessage("Send link"), + "sessionExpired": + MessageLookupByLibrary.simpleMessage("Session expired"), + "setAPassword": MessageLookupByLibrary.simpleMessage("Set a password"), + "setAs": MessageLookupByLibrary.simpleMessage("Set as"), + "setPasswordTitle": + MessageLookupByLibrary.simpleMessage("Set password"), + "setupComplete": MessageLookupByLibrary.simpleMessage("Setup complete"), + "share": MessageLookupByLibrary.simpleMessage("Share"), + "shareALink": MessageLookupByLibrary.simpleMessage("Share a link"), + "shareAlbumHint": MessageLookupByLibrary.simpleMessage( + "Open an album and tap the share button on the top right to share."), + "shareAnAlbumNow": + MessageLookupByLibrary.simpleMessage("Share an album now"), + "shareLink": MessageLookupByLibrary.simpleMessage("Share link"), + "shareMyVerificationID": m24, + "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( + "Share only with the people you want"), + "shareTextConfirmOthersVerificationID": m25, + "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( + "Download ente so we can easily share original quality photos and videos\n\nhttps://ente.io/#download"), + "shareTextReferralCode": m26, + "shareWithNonenteUsers": + MessageLookupByLibrary.simpleMessage("Share with non-ente users"), + "shareWithPeopleSectionTitle": m27, + "shareYourFirstAlbum": + MessageLookupByLibrary.simpleMessage("Share your first album"), + "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( + "Create shared and collaborative albums with other ente users, including users on free plans."), + "sharedByMe": MessageLookupByLibrary.simpleMessage("Shared by me"), + "sharedWith": m28, + "sharedWithMe": MessageLookupByLibrary.simpleMessage("Shared with me"), + "sharing": MessageLookupByLibrary.simpleMessage("Sharing..."), + "signUpTerms": MessageLookupByLibrary.simpleMessage( + "I agree to the terms of service and privacy policy"), + "singleFileDeleteFromDevice": m29, + "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( + "It will be deleted from all albums."), + "singleFileInBothLocalAndRemote": m30, + "singleFileInRemoteOnly": m31, + "skip": MessageLookupByLibrary.simpleMessage("Skip"), + "social": MessageLookupByLibrary.simpleMessage("Social"), + "someItemsAreInBothEnteAndYourDevice": + MessageLookupByLibrary.simpleMessage( + "Some items are in both ente and your device."), + "someOfTheFilesYouAreTryingToDeleteAre": + MessageLookupByLibrary.simpleMessage( + "Some of the files you are trying to delete are only available on your device and cannot be recovered if deleted"), + "someoneSharingAlbumsWithYouShouldSeeTheSameId": + MessageLookupByLibrary.simpleMessage( + "Someone sharing albums with you should see the same ID on their device."), + "somethingWentWrong": + MessageLookupByLibrary.simpleMessage("Something went wrong"), + "somethingWentWrongPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Something went wrong, please try again"), + "sorry": MessageLookupByLibrary.simpleMessage("Sorry"), + "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( + "Sorry, could not add to favorites!"), + "sorryCouldNotRemoveFromFavorites": + MessageLookupByLibrary.simpleMessage( + "Sorry, could not remove from favorites!"), + "sorryTheCodeYouveEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "Sorry, the code you\'ve entered is incorrect"), + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": + MessageLookupByLibrary.simpleMessage( + "Sorry, we could not generate secure keys on this device.\n\nplease sign up from a different device."), + "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Success"), + "startBackup": MessageLookupByLibrary.simpleMessage("Start backup"), + "storageInGB": m32, + "storageLimitExceeded": + MessageLookupByLibrary.simpleMessage("Storage limit exceeded"), + "strongStrength": MessageLookupByLibrary.simpleMessage("Strong"), + "subAlreadyLinkedErrMessage": m33, + "subWillBeCancelledOn": m34, + "subscribe": MessageLookupByLibrary.simpleMessage("Subscribe"), + "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( + "Looks like your subscription has expired. Please subscribe to enable sharing."), + "subscription": MessageLookupByLibrary.simpleMessage("Subscription"), + "success": MessageLookupByLibrary.simpleMessage("Success"), + "successfullyArchived": + MessageLookupByLibrary.simpleMessage("Successfully archived"), + "successfullyUnarchived": + MessageLookupByLibrary.simpleMessage("Successfully unarchived"), + "suggestFeatures": + MessageLookupByLibrary.simpleMessage("Suggest features"), + "support": MessageLookupByLibrary.simpleMessage("Support"), + "syncProgress": m35, + "syncStopped": MessageLookupByLibrary.simpleMessage("Sync stopped"), + "syncing": MessageLookupByLibrary.simpleMessage("Syncing..."), + "systemTheme": MessageLookupByLibrary.simpleMessage("System"), + "tapToCopy": MessageLookupByLibrary.simpleMessage("tap to copy"), + "tapToEnterCode": + MessageLookupByLibrary.simpleMessage("Tap to enter code"), + "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"), + "terminateSession": + MessageLookupByLibrary.simpleMessage("Terminate session?"), + "terms": MessageLookupByLibrary.simpleMessage("Terms"), + "termsOfServicesTitle": MessageLookupByLibrary.simpleMessage("Terms"), + "thankYou": MessageLookupByLibrary.simpleMessage("Thank you"), + "thankYouForSubscribing": + MessageLookupByLibrary.simpleMessage("Thank you for subscribing!"), + "theDownloadCouldNotBeCompleted": MessageLookupByLibrary.simpleMessage( + "The download could not be completed"), + "theRecoveryKeyYouEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "The recovery key you entered is incorrect"), + "theme": MessageLookupByLibrary.simpleMessage("Theme"), + "theseItemsWillBeDeletedFromYourDevice": + MessageLookupByLibrary.simpleMessage( + "These items will be deleted from your device."), + "theyAlsoGetXGb": m36, + "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( + "They will be deleted from all albums."), + "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( + "This action cannot be undone"), + "thisAlbumAlreadyHDACollaborativeLink": + MessageLookupByLibrary.simpleMessage( + "This album already has a collaborative link"), + "thisCanBeUsedToRecoverYourAccountIfYou": + MessageLookupByLibrary.simpleMessage( + "This can be used to recover your account if you lose your second factor"), + "thisDevice": MessageLookupByLibrary.simpleMessage("This device"), + "thisEmailIsAlreadyInUse": MessageLookupByLibrary.simpleMessage( + "This email is already in use"), + "thisImageHasNoExifData": + MessageLookupByLibrary.simpleMessage("This image has no exif data"), + "thisIsMyName": m58, + "thisIsPersonVerificationId": m37, + "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( + "This is your Verification ID"), + "thisWillLogYouOutOfTheFollowingDevice": + MessageLookupByLibrary.simpleMessage( + "This will log you out of the following device:"), + "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( + "This will log you out of this device!"), + "time": MessageLookupByLibrary.simpleMessage("Time"), + "toHideAPhotoOrVideo": + MessageLookupByLibrary.simpleMessage("To hide a photo or video"), + "todaysLogs": MessageLookupByLibrary.simpleMessage("Today\'s logs"), + "total": MessageLookupByLibrary.simpleMessage("total"), + "totalSize": MessageLookupByLibrary.simpleMessage("Total size"), + "trash": MessageLookupByLibrary.simpleMessage("Trash"), + "tryAgain": MessageLookupByLibrary.simpleMessage("Try again"), + "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( + "Turn on backup to automatically upload files added to this device folder to ente."), + "twitter": MessageLookupByLibrary.simpleMessage("Twitter"), + "twoMonthsFreeOnYearlyPlans": MessageLookupByLibrary.simpleMessage( + "2 months free on yearly plans"), + "twofactor": MessageLookupByLibrary.simpleMessage("Two-factor"), + "twofactorAuthenticationHasBeenDisabled": + MessageLookupByLibrary.simpleMessage( + "Two-factor authentication has been disabled"), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage("Two-factor authentication"), + "twofactorAuthenticationSuccessfullyReset": + MessageLookupByLibrary.simpleMessage( + "Two-factor authentication successfully reset"), + "twofactorSetup": + MessageLookupByLibrary.simpleMessage("Two-factor setup"), + "unarchive": MessageLookupByLibrary.simpleMessage("Unarchive"), + "unarchiveAlbum": + MessageLookupByLibrary.simpleMessage("Unarchive album"), + "unarchiving": MessageLookupByLibrary.simpleMessage("Unarchiving..."), + "uncategorized": MessageLookupByLibrary.simpleMessage("Uncategorized"), + "unhide": MessageLookupByLibrary.simpleMessage("Unhide"), + "unhideToAlbum": + MessageLookupByLibrary.simpleMessage("Unhide to album"), + "unhidingFilesToAlbum": + MessageLookupByLibrary.simpleMessage("Unhiding files to album"), + "unlock": MessageLookupByLibrary.simpleMessage("Unlock"), + "unselectAll": MessageLookupByLibrary.simpleMessage("Unselect all"), + "update": MessageLookupByLibrary.simpleMessage("Update"), + "updateAvailable": + MessageLookupByLibrary.simpleMessage("Update available"), + "updatingFolderSelection": MessageLookupByLibrary.simpleMessage( + "Updating folder selection..."), + "upgrade": MessageLookupByLibrary.simpleMessage("Upgrade"), + "uploadingFilesToAlbum": + MessageLookupByLibrary.simpleMessage("Uploading files to album..."), + "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( + "Usable storage is limited by your current plan. Excess claimed storage will automatically become usable when you upgrade your plan."), + "usePublicLinksForPeopleNotOnEnte": + MessageLookupByLibrary.simpleMessage( + "Use public links for people not on ente"), + "useRecoveryKey": + MessageLookupByLibrary.simpleMessage("Use recovery key"), + "useSelectedPhoto": + MessageLookupByLibrary.simpleMessage("Use selected photo"), + "verificationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Verification failed, please try again"), + "verificationId": + MessageLookupByLibrary.simpleMessage("Verification ID"), + "verify": MessageLookupByLibrary.simpleMessage("Verify"), + "verifyEmail": MessageLookupByLibrary.simpleMessage("Verify email"), + "verifyEmailID": m38, + "verifyPassword": + MessageLookupByLibrary.simpleMessage("Verify password"), + "verifying": MessageLookupByLibrary.simpleMessage("Verifying..."), + "verifyingRecoveryKey": + MessageLookupByLibrary.simpleMessage("Verifying recovery key..."), + "videoSmallCase": MessageLookupByLibrary.simpleMessage("video"), + "viewActiveSessions": + MessageLookupByLibrary.simpleMessage("View active sessions"), + "viewAllExifData": + MessageLookupByLibrary.simpleMessage("View all EXIF data"), + "viewLogs": MessageLookupByLibrary.simpleMessage("View logs"), + "viewRecoveryKey": + MessageLookupByLibrary.simpleMessage("View recovery key"), + "viewer": MessageLookupByLibrary.simpleMessage("Viewer"), + "visitWebToManage": MessageLookupByLibrary.simpleMessage( + "Please visit web.ente.io to manage your subscription"), + "weAreOpenSource": + MessageLookupByLibrary.simpleMessage("We are open source!"), + "weDontSupportEditingPhotosAndAlbumsThatYouDont": + MessageLookupByLibrary.simpleMessage( + "We don\'t support editing photos and albums that you don\'t own yet"), + "weHaveSendEmailTo": m39, + "weakStrength": MessageLookupByLibrary.simpleMessage("Weak"), + "welcomeBack": MessageLookupByLibrary.simpleMessage("Welcome back!"), + "yearly": MessageLookupByLibrary.simpleMessage("Yearly"), + "yearsAgo": m40, + "yes": MessageLookupByLibrary.simpleMessage("Yes"), + "yesCancel": MessageLookupByLibrary.simpleMessage("Yes, cancel"), + "yesConvertToViewer": + MessageLookupByLibrary.simpleMessage("Yes, convert to viewer"), + "yesDelete": MessageLookupByLibrary.simpleMessage("Yes, delete"), + "yesDiscardChanges": + MessageLookupByLibrary.simpleMessage("Yes, discard changes"), + "yesLogout": MessageLookupByLibrary.simpleMessage("Yes, logout"), + "yesRemove": MessageLookupByLibrary.simpleMessage("Yes, remove"), + "yesRenew": MessageLookupByLibrary.simpleMessage("Yes, Renew"), + "you": MessageLookupByLibrary.simpleMessage("You"), + "youAreOnAFamilyPlan": + MessageLookupByLibrary.simpleMessage("You are on a family plan!"), + "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage( + "You are on the latest version"), + "youCanAtMaxDoubleYourStorage": MessageLookupByLibrary.simpleMessage( + "* You can at max double your storage"), + "youCanManageYourLinksInTheShareTab": + MessageLookupByLibrary.simpleMessage( + "You can manage your links in the share tab."), + "youCanTrySearchingForADifferentQuery": + MessageLookupByLibrary.simpleMessage( + "You can try searching for a different query."), + "youCannotDowngradeToThisPlan": MessageLookupByLibrary.simpleMessage( + "You cannot downgrade to this plan"), + "youCannotShareWithYourself": MessageLookupByLibrary.simpleMessage( + "You cannot share with yourself"), + "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( + "You don\'t have any archived items."), + "youHaveSuccessfullyFreedUp": m41, + "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage( + "Your account has been deleted"), + "yourPlanWasSuccessfullyDowngraded": + MessageLookupByLibrary.simpleMessage( + "Your plan was successfully downgraded"), + "yourPlanWasSuccessfullyUpgraded": MessageLookupByLibrary.simpleMessage( + "Your plan was successfully upgraded"), + "yourPurchaseWasSuccessful": MessageLookupByLibrary.simpleMessage( + "Your purchase was successful"), + "yourStorageDetailsCouldNotBeFetched": + MessageLookupByLibrary.simpleMessage( + "Your storage details could not be fetched"), + "yourSubscriptionHasExpired": MessageLookupByLibrary.simpleMessage( + "Your subscription has expired"), + "yourSubscriptionWasUpdatedSuccessfully": + MessageLookupByLibrary.simpleMessage( + "Your subscription was updated successfully"), + "yourVerificationCodeHasExpired": MessageLookupByLibrary.simpleMessage( + "Your verification code has expired"), + "youveNoDuplicateFilesThatCanBeCleared": + MessageLookupByLibrary.simpleMessage( + "You\'ve no duplicate files that can be cleared"), + "youveNoFilesInThisAlbumThatCanBeDeleted": + MessageLookupByLibrary.simpleMessage( + "You\'ve no files in this album that can be deleted") + }; +} diff --git a/lib/generated/intl/messages_es.dart b/lib/generated/intl/messages_es.dart new file mode 100644 index 000000000..77430215f --- /dev/null +++ b/lib/generated/intl/messages_es.dart @@ -0,0 +1,1324 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a es 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 => 'es'; + + static String m42(count) => + "${Intl.plural(count, one: 'Agregar elemento', other: 'Agregar elementos')}}"; + + static String m43(emailOrName) => "Añadido por ${emailOrName}"; + + static String m44(albumName) => "Añadido exitosamente a ${albumName}"; + + static String m0(paymentProvider) => + "Por favor, cancele primero su suscripción existente de ${paymentProvider}"; + + static String m1(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 m2(isFamilyMember, storageAmountInGb) => + "${Intl.select(isFamilyMember, { + 'true': + 'Su familia ha reclamado ${storageAmountInGb} Gb hasta el momento', + 'false': + 'Tú has reclamado ${storageAmountInGb} Gb hasta el momento', + 'other': + '¡Tú has reclamado ${storageAmountInGb} Gb hasta el momento!', + })}"; + + static String m45(albumName) => + "Enlace colaborativo creado para ${albumName}"; + + static String m3(familyAdminEmail) => + "Por favor contacta con ${familyAdminEmail} para administrar tu suscripción"; + + static String m4(provider) => + "Por favor, contáctenos en support@ente.io para gestionar su suscripción a ${provider}."; + + static String m46(currentlyDeleting, totalCount) => + "Borrando ${currentlyDeleting} / ${totalCount}"; + + static String m5(albumName) => + "Esto eliminará el enlace público para acceder a \"${albumName}\"."; + + static String m6(supportEmail) => + "Por favor, envíe un email a ${supportEmail} desde su dirección de correo electrónico registrada"; + + static String m7(count, storageSaved) => + "¡Has limpiado ${Intl.plural(count, one: '${count} archivo duplicado', other: '${count} archivos duplicados')}, ahorrando (${storageSaved}!)"; + + static String m47(newEmail) => "Correo cambiado a ${newEmail}"; + + static String m8(email) => + "${email} no tiene una cuenta ente.\n\nEnvíale una invitación para compartir fotos."; + + static String m48(count, formattedNumber) => + "${Intl.plural(count, one: '1 archivo', other: '${formattedNumber} archivos')} en este dispositivo han sido respaldados de forma segura"; + + static String m49(count, formattedNumber) => + "${Intl.plural(count, one: '1 archivo', other: '${formattedNumber} archivos')} en este álbum ha sido respaldado de forma segura"; + + static String m9(storageAmountInGB) => + "${storageAmountInGB} GB cada vez que alguien se registra en un plan de pago y aplica tu código"; + + static String m10(endDate) => "Prueba gratuita válida hasta${endDate}"; + + static String m50(count) => + "Aún puedes acceder ${Intl.plural(count, one: 'si', other: 'entonces')} en ente mientras mantengas una suscripción activa"; + + static String m51(sizeInMBorGB) => "Liberar ${sizeInMBorGB}"; + + static String m52(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 m11(count) => + "${Intl.plural(count, one: '${count} elemento', other: '${count} elementos')}"; + + static String m53(count) => "${count} seleccionados"; + + static String m12(expiryTime) => "El enlace caducará en ${expiryTime}"; + + static String m13(maxValue) => + "Cuando se establece al máximo (${maxValue}), el límite del dispositivo se relajará para permitir picos temporales de un gran número de espectadores."; + + static String m14(count) => + "${Intl.plural(count, zero: 'no recuerdos', one: '${count} recuerdo', other: '${count} recuerdos')}\n"; + + static String m54(count) => + "${Intl.plural(count, one: 'Mover elemento', other: 'Mover elementos')}"; + + static String m55(albumName) => "Movido exitosamente a ${albumName}"; + + static String m15(passwordStrengthValue) => + "Seguridad de la contraseña : ${passwordStrengthValue}"; + + static String m16(providerName) => + "Por favor hable con el soporte de ${providerName} si se le cobró"; + + static String m17(reason) => + "Lamentablemente tu pago falló debido a ${reason}"; + + static String m56(toEmail) => + "Por favor, envíanos un correo electrónico a ${toEmail}"; + + static String m57(toEmail) => "Por favor, envíe los registros a ${toEmail}"; + + static String m18(storeName) => "Califícanos en ${storeName}"; + + static String m19(storageInGB) => + "3. Ambos obtienen ${storageInGB} GB* gratis"; + + static String m20(userEmail) => + "${userEmail} será eliminado de este álbum compartido\n\nCualquier foto añadida por ellos también será eliminada del álbum"; + + static String m21(endDate) => "Se renueva el ${endDate}"; + + static String m22(count) => "${count} seleccionados"; + + static String m23(count, yourCount) => + "${count} seleccionados (${yourCount} tuyos)"; + + static String m24(verificationID) => + "Aquí está mi ID de verificación: ${verificationID} para ente.io."; + + static String m25(verificationID) => + "Hola, ¿puedes confirmar que esta es tu ID de verificación ente.io: ${verificationID}?"; + + static String m26(referralCode, referralStorageInGB) => + "ente código de referencia: ${referralCode} \n\nAplicarlo en Ajustes → General → Referencias para obtener ${referralStorageInGB} GB gratis después de registrarse en un plan de pago\n\nhttps://ente.io"; + + static String m27(numberOfPeople) => + "${Intl.plural(numberOfPeople, zero: 'Compartir con personas específicas', one: 'Compartido con 1 persona', other: 'Compartido con ${numberOfPeople} personas')}"; + + static String m28(emailIDs) => "Compartido con ${emailIDs}"; + + static String m29(fileType) => + "Este ${fileType} se eliminará de tu dispositivo."; + + static String m30(fileType) => + "Este ${fileType} está tanto en ente como en tu dispositivo."; + + static String m31(fileType) => "Este ${fileType} se eliminará de ente."; + + static String m32(storageAmountInGB) => "${storageAmountInGB} GB"; + + static String m33(id) => + "Su ${id} ya está vinculado a otra cuenta ente.\nSi desea utilizar su ${id} con esta cuenta, póngase en contacto con nuestro servicio de asistencia\'\'"; + + static String m34(endDate) => "Tu suscripción se cancelará el ${endDate}"; + + static String m35(completed, total) => + "${completed}/${total} recuerdos conservados"; + + static String m36(storageAmountInGB) => + "También obtienen ${storageAmountInGB} GB"; + + static String m37(email) => "Este es el ID de verificación de ${email}"; + + static String m38(email) => "Verificar ${email}"; + + static String m39(email) => + "Hemos enviado un correo a ${email}"; + + static String m40(count) => + "${Intl.plural(count, one: '${count} hace un año', other: '${count} hace años')}"; + + static String m41(storageSaved) => "¡Has liberado ${storageSaved} con éxito!"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "aNewVersionOfEnteIsAvailable": MessageLookupByLibrary.simpleMessage( + "Hay una nueva versión de ente disponible."), + "about": MessageLookupByLibrary.simpleMessage("Acerca de"), + "account": MessageLookupByLibrary.simpleMessage("Cuenta"), + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("¡Bienvenido de nuevo!"), + "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( + "Entiendo que si pierdo mi contraseña podría perder mis datos, ya que mis datos están cifrados de extremo a extremo."), + "activeSessions": + MessageLookupByLibrary.simpleMessage("Sesiónes activas"), + "addANewEmail": MessageLookupByLibrary.simpleMessage( + "Agregar nuevo correo electrónico"), + "addCollaborator": + MessageLookupByLibrary.simpleMessage("Agregar colaborador"), + "addItem": m42, + "addLocation": + MessageLookupByLibrary.simpleMessage("Agregar ubicación"), + "addLocationButton": MessageLookupByLibrary.simpleMessage("Añadir"), + "addMore": MessageLookupByLibrary.simpleMessage("Añadir más"), + "addToAlbum": MessageLookupByLibrary.simpleMessage("Añadir al álbum"), + "addToEnte": MessageLookupByLibrary.simpleMessage("Añadir a ente"), + "addViewer": MessageLookupByLibrary.simpleMessage("Añadir espectador"), + "addedAs": MessageLookupByLibrary.simpleMessage("Agregado como"), + "addedBy": m43, + "addedSuccessfullyTo": m44, + "addingToFavorites": + MessageLookupByLibrary.simpleMessage("Añadiendo a favoritos..."), + "advanced": MessageLookupByLibrary.simpleMessage("Avanzado"), + "advancedSettings": MessageLookupByLibrary.simpleMessage("Avanzado"), + "after1Day": MessageLookupByLibrary.simpleMessage("Después de un día"), + "after1Hour": MessageLookupByLibrary.simpleMessage("Después de 1 hora"), + "after1Month": + MessageLookupByLibrary.simpleMessage("Después de un mes"), + "after1Week": + MessageLookupByLibrary.simpleMessage("Después de una semana"), + "after1Year": MessageLookupByLibrary.simpleMessage("Después de un año"), + "albumOwner": MessageLookupByLibrary.simpleMessage("Propietario"), + "albumTitle": MessageLookupByLibrary.simpleMessage("Título del álbum"), + "albumUpdated": + MessageLookupByLibrary.simpleMessage("Álbum actualizado"), + "albums": MessageLookupByLibrary.simpleMessage("Álbunes"), + "allClear": MessageLookupByLibrary.simpleMessage("✨ Todo limpio"), + "allMemoriesPreserved": MessageLookupByLibrary.simpleMessage( + "Todos los recuerdos preservados"), + "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Permitir a las personas con el enlace añadir fotos al álbum compartido."), + "allowAddingPhotos": + MessageLookupByLibrary.simpleMessage("Permitir añadir fotos"), + "allowDownloads": + MessageLookupByLibrary.simpleMessage("Permitir descargas"), + "allowPeopleToAddPhotos": MessageLookupByLibrary.simpleMessage( + "Permitir que la gente añada fotos"), + "androidIosWebDesktop": MessageLookupByLibrary.simpleMessage( + "Android, iOS, Web, Computadora"), + "appleId": MessageLookupByLibrary.simpleMessage("ID de Apple"), + "apply": MessageLookupByLibrary.simpleMessage("Aplicar"), + "applyCodeTitle": MessageLookupByLibrary.simpleMessage("Usar código"), + "appstoreSubscription": + MessageLookupByLibrary.simpleMessage("Suscripción en la AppStore"), + "archive": MessageLookupByLibrary.simpleMessage("Archivo"), + "archiveAlbum": MessageLookupByLibrary.simpleMessage("Archivar álbum"), + "archiving": MessageLookupByLibrary.simpleMessage("Archivando..."), + "areYouSureThatYouWantToLeaveTheFamily": + MessageLookupByLibrary.simpleMessage( + "¿Está seguro de que desea abandonar el plan familiar?"), + "areYouSureYouWantToCancel": MessageLookupByLibrary.simpleMessage( + "¿Estás seguro de que quieres cancelar?"), + "areYouSureYouWantToChangeYourPlan": + MessageLookupByLibrary.simpleMessage( + "¿Estás seguro de que quieres cambiar tu plan?"), + "areYouSureYouWantToExit": + MessageLookupByLibrary.simpleMessage("¿Seguro que quieres salir?"), + "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( + "¿Seguro que quiere cerrar la sesión?"), + "areYouSureYouWantToRenew": MessageLookupByLibrary.simpleMessage( + "¿Estás seguro de que quieres renovar?"), + "askCancelReason": MessageLookupByLibrary.simpleMessage( + "Tu suscripción ha sido cancelada. ¿Quieres compartir el motivo?"), + "askDeleteReason": MessageLookupByLibrary.simpleMessage( + "¿Cuál es la razón principal por la que eliminas tu cuenta?"), + "askYourLovedOnesToShare": MessageLookupByLibrary.simpleMessage( + "Pide a tus seres queridos que compartan"), + "atAFalloutShelter": + MessageLookupByLibrary.simpleMessage("en un refugio blindado"), + "authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage( + "Por favor autentificar para cambiar la configuración de bloqueo de pantalla"), + "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( + "Por favor, autentifíquese para cambiar su correo electrónico"), + "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( + "Por favor, autentifíquese para cambiar su contraseña"), + "authToConfigureTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Por favor autentificar para configurar autenticación de dos factores"), + "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Por favor, autentifíquese para iniciar la eliminación de la cuenta"), + "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( + "Por favor, autentifíquese para ver sus sesiones activas"), + "authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage( + "Por favor, autentifiquese para ver sus archivos ocultos"), + "authToViewYourMemories": MessageLookupByLibrary.simpleMessage( + "Por favor autentifique para ver sus memorias"), + "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Por favor, autentifíquese para ver su clave de recuperación"), + "authenticating": + MessageLookupByLibrary.simpleMessage("Autenticando..."), + "authenticationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Error de autenticación, por favor inténtalo de nuevo"), + "authenticationSuccessful": + MessageLookupByLibrary.simpleMessage("¡Autenticación exitosa!"), + "available": MessageLookupByLibrary.simpleMessage("Disponible"), + "backedUpFolders": + MessageLookupByLibrary.simpleMessage("Carpetas respaldadas"), + "backup": MessageLookupByLibrary.simpleMessage("Copia de respaldo"), + "backupFailed": MessageLookupByLibrary.simpleMessage( + "La copia de seguridad ha fallado"), + "backupOverMobileData": MessageLookupByLibrary.simpleMessage( + "Copia de seguridad usando datos móviles"), + "backupSettings": MessageLookupByLibrary.simpleMessage( + "Ajustes de copia de seguridad"), + "backupVideos": + MessageLookupByLibrary.simpleMessage("Respaldar vídeos"), + "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "cachedData": + MessageLookupByLibrary.simpleMessage("Datos almacenados en caché"), + "calculating": MessageLookupByLibrary.simpleMessage("Calculando..."), + "canNotUploadToAlbumsOwnedByOthers": + MessageLookupByLibrary.simpleMessage( + "No se puede subir a álbumes propiedad de otros"), + "canOnlyCreateLinkForFilesOwnedByYou": + MessageLookupByLibrary.simpleMessage( + "Sólo puedes crear un enlace para archivos de tu propiedad"), + "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( + "Sólo puede eliminar archivos de tu propiedad"), + "cancel": MessageLookupByLibrary.simpleMessage("Cancelar"), + "cancelOtherSubscription": m0, + "cancelSubscription": + MessageLookupByLibrary.simpleMessage("Cancelar suscripción"), + "cannotAddMorePhotosAfterBecomingViewer": m1, + "centerPoint": MessageLookupByLibrary.simpleMessage("Punto central"), + "changeEmail": + MessageLookupByLibrary.simpleMessage("Cambiar correo electrónico"), + "changePassword": + MessageLookupByLibrary.simpleMessage("Cambiar contraseña"), + "changePasswordTitle": + MessageLookupByLibrary.simpleMessage("Cambiar contraseña"), + "changePermissions": + MessageLookupByLibrary.simpleMessage("¿Cambiar permisos?"), + "checkForUpdates": + MessageLookupByLibrary.simpleMessage("Comprobar actualizaciónes"), + "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( + "Revisa tu bandeja de entrada (y spam) para completar la verificación"), + "checking": MessageLookupByLibrary.simpleMessage("Comprobando..."), + "claimFreeStorage": MessageLookupByLibrary.simpleMessage( + "Reclamar almacenamiento gratis"), + "claimMore": MessageLookupByLibrary.simpleMessage("¡Reclama más!"), + "claimed": MessageLookupByLibrary.simpleMessage("Reclamado"), + "claimedStorageSoFar": m2, + "clearCaches": MessageLookupByLibrary.simpleMessage("Limpiar caché"), + "click": MessageLookupByLibrary.simpleMessage("• Click"), + "clickOnTheOverflowMenu": MessageLookupByLibrary.simpleMessage( + "• Haga clic en el menú desbordante"), + "close": MessageLookupByLibrary.simpleMessage("Cerrar"), + "clubByCaptureTime": MessageLookupByLibrary.simpleMessage( + "Agrupar por tiempo de captura"), + "codeAppliedPageTitle": + MessageLookupByLibrary.simpleMessage("Código aplicado"), + "codeCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Código copiado al portapapeles"), + "codeUsedByYou": + MessageLookupByLibrary.simpleMessage("Código usado por ti"), + "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( + "Crea un enlace para que la gente pueda añadir y ver fotos en tu álbum compartido sin necesidad de la aplicación ente o una cuenta. Genial para recolectar fotos de eventos."), + "collaborativeLink": + MessageLookupByLibrary.simpleMessage("Enlace colaborativo"), + "collaborativeLinkCreatedFor": m45, + "collaborator": MessageLookupByLibrary.simpleMessage("Colaborador"), + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": + MessageLookupByLibrary.simpleMessage( + "Colaboradores pueden añadir fotos y videos al álbum compartido."), + "collectEventPhotos": + MessageLookupByLibrary.simpleMessage("Recopilar fotos del evento"), + "collectPhotos": + MessageLookupByLibrary.simpleMessage("Recolectar fotos"), + "color": MessageLookupByLibrary.simpleMessage("Color"), + "confirm": MessageLookupByLibrary.simpleMessage("Confirmar"), + "confirm2FADisable": MessageLookupByLibrary.simpleMessage( + "¿Estás seguro de que desea deshabilitar la autenticación de doble factor?"), + "confirmAccountDeletion": + MessageLookupByLibrary.simpleMessage("Corfirmar borrado de cuenta"), + "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( + "Sí, quiero eliminar permanentemente esta cuenta y todos sus datos."), + "confirmPassword": + MessageLookupByLibrary.simpleMessage("Confirmar contraseña"), + "confirmPlanChange": MessageLookupByLibrary.simpleMessage( + "Confirmar los cambios en el plan"), + "confirmRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Confirmar clave de recuperación"), + "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Confirme su clave de recuperación"), + "contactFamilyAdmin": m3, + "contactSupport": + MessageLookupByLibrary.simpleMessage("Contactar con soporte"), + "contactToManageSubscription": m4, + "continueLabel": MessageLookupByLibrary.simpleMessage("Continuar"), + "continueOnFreeTrial": MessageLookupByLibrary.simpleMessage( + "Continuar con el plan gratuito"), + "copyEmailAddress": MessageLookupByLibrary.simpleMessage( + "Copiar dirección de correo electrónico"), + "copyLink": MessageLookupByLibrary.simpleMessage("Copiar enlace"), + "copypasteThisCodentoYourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Copiar y pegar este código\na su aplicación de autenticador"), + "couldNotBackUpTryLater": MessageLookupByLibrary.simpleMessage( + "No pudimos hacer una copia de seguridad de tus datos.\nVolveremos a intentarlo más tarde."), + "couldNotFreeUpSpace": + MessageLookupByLibrary.simpleMessage("No se pudo liberar espacio"), + "couldNotUpdateSubscription": MessageLookupByLibrary.simpleMessage( + "No se pudo actualizar la suscripción"), + "count": MessageLookupByLibrary.simpleMessage("Cuenta"), + "createAccount": MessageLookupByLibrary.simpleMessage("Crear cuenta"), + "createAlbumActionHint": MessageLookupByLibrary.simpleMessage( + "Mantenga presionado para seleccionar fotos y haga clic en + para crear un álbum"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("Crear nueva cuenta"), + "createOrSelectAlbum": + MessageLookupByLibrary.simpleMessage("Crear o seleccionar álbum"), + "createPublicLink": + MessageLookupByLibrary.simpleMessage("Crear enlace público"), + "creatingLink": + MessageLookupByLibrary.simpleMessage("Creando enlace..."), + "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( + "Actualización crítica disponible"), + "currentUsageIs": + MessageLookupByLibrary.simpleMessage("El uso actual es "), + "custom": MessageLookupByLibrary.simpleMessage("Personalizado"), + "darkTheme": MessageLookupByLibrary.simpleMessage("Oscuro"), + "decrypting": MessageLookupByLibrary.simpleMessage("Descifrando..."), + "decryptingVideo": + MessageLookupByLibrary.simpleMessage("Descifrando video..."), + "deduplicateFiles": + MessageLookupByLibrary.simpleMessage("Deduplicar archivos"), + "delete": MessageLookupByLibrary.simpleMessage("Eliminar"), + "deleteAccount": + MessageLookupByLibrary.simpleMessage("Eliminar cuenta"), + "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( + "Lamentamos que te vayas. Por favor, explícanos el motivo para ayudarnos a mejorar."), + "deleteAccountPermanentlyButton": MessageLookupByLibrary.simpleMessage( + "Eliminar Cuenta Permanentemente"), + "deleteAlbum": MessageLookupByLibrary.simpleMessage("Borrar álbum"), + "deleteAlbumDialog": MessageLookupByLibrary.simpleMessage( + "¿También eliminar las fotos (y los vídeos) presentes en este álbum de todos los otros álbumes de los que forman parte?"), + "deleteAlbumsDialogBody": MessageLookupByLibrary.simpleMessage( + "Esto eliminará todos los álbunes vacíos. Esto es útil cuando quieres reducir el desorden en tu lista de álbumes."), + "deleteAll": MessageLookupByLibrary.simpleMessage("Borrar Todo"), + "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( + "Está a punto de eliminar permanentemente su cuenta y todos sus datos.\nEsta acción es irreversible."), + "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( + "Por favor, envíe un correo electrónico a account-deletion@ente.io desde su dirección de correo electrónico registrada."), + "deleteEmptyAlbums": + MessageLookupByLibrary.simpleMessage("Eliminar álbunes vacíos"), + "deleteEmptyAlbumsWithQuestionMark": + MessageLookupByLibrary.simpleMessage("¿Eliminar álbunes vacíos?"), + "deleteFromBoth": + MessageLookupByLibrary.simpleMessage("Eliminar de ambos"), + "deleteFromDevice": + MessageLookupByLibrary.simpleMessage("Eliminar del dispositivo"), + "deleteFromEnte": + MessageLookupByLibrary.simpleMessage("Eliminar de ente"), + "deleteLocation": + MessageLookupByLibrary.simpleMessage("Borrar la ubicación"), + "deletePhotos": + MessageLookupByLibrary.simpleMessage("Borrar las fotos"), + "deleteProgress": m46, + "deleteReason1": MessageLookupByLibrary.simpleMessage( + "Falta una característica clave que necesito"), + "deleteReason2": MessageLookupByLibrary.simpleMessage( + "La aplicación o una característica determinada no \nse comporta como creo que debería"), + "deleteReason3": MessageLookupByLibrary.simpleMessage( + "He encontrado otro servicio que me gusta más"), + "deleteReason4": MessageLookupByLibrary.simpleMessage( + "Mi motivo no se encuentra en la lista"), + "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( + "Su solicitud será procesada dentro de 72 horas."), + "deleteSharedAlbum": + MessageLookupByLibrary.simpleMessage("¿Borrar álbum compartido?"), + "deleteSharedAlbumDialogBody": MessageLookupByLibrary.simpleMessage( + "El álbum se eliminará para todos\n\nPerderás el acceso a las fotos compartidas en este álbum que son propiedad de otros"), + "deselectAll": + MessageLookupByLibrary.simpleMessage("Deseleccionar todo"), + "designedToOutlive": + MessageLookupByLibrary.simpleMessage("Diseñado para sobrevivir"), + "details": MessageLookupByLibrary.simpleMessage("Detalles"), + "devAccountChanged": MessageLookupByLibrary.simpleMessage( + "La cuenta de desarrollador que utilizamos para publicar ente en la App Store ha cambiado. Por eso, tendrás que iniciar sesión de nuevo.\n\nNuestras disculpas por las molestias, pero esto era inevitable."), + "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( + "Los archivos añadidos a este álbum de dispositivo se subirán automáticamente a ente."), + "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( + "Deshabilita el bloqueo de pantalla del dispositivo cuando ente está en primer plano y hay una copia de seguridad en curso. Normalmente esto no es necesario, pero puede ayudar a que las grandes cargas y las importaciones iniciales de grandes bibliotecas se completen más rápido."), + "didYouKnow": MessageLookupByLibrary.simpleMessage("¿Sabías que?"), + "disableAutoLock": + MessageLookupByLibrary.simpleMessage("Desactivar autobloqueo"), + "disableDownloadWarningBody": MessageLookupByLibrary.simpleMessage( + "Los espectadores todavía pueden tomar capturas de pantalla o guardar una copia de sus fotos usando herramientas externas"), + "disableDownloadWarningTitle": + MessageLookupByLibrary.simpleMessage("Por favor tenga en cuenta"), + "disableLinkMessage": m5, + "disableTwofactor": + MessageLookupByLibrary.simpleMessage("Deshabilitar dos factores"), + "disablingTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Deshabilitando la autenticación de dos factores..."), + "discord": MessageLookupByLibrary.simpleMessage("Discord"), + "dismiss": MessageLookupByLibrary.simpleMessage("Descartar"), + "doThisLater": + MessageLookupByLibrary.simpleMessage("Hacer esto más tarde"), + "doYouWantToDiscardTheEditsYouHaveMade": + MessageLookupByLibrary.simpleMessage( + "¿Quieres descartar las ediciones que has hecho?"), + "done": MessageLookupByLibrary.simpleMessage("Hecho"), + "doubleYourStorage": + MessageLookupByLibrary.simpleMessage("Duplica tu almacenamiento"), + "download": MessageLookupByLibrary.simpleMessage("Descargar"), + "downloadFailed": + MessageLookupByLibrary.simpleMessage("Descarga fallida"), + "downloading": MessageLookupByLibrary.simpleMessage("Descargando..."), + "dropSupportEmail": m6, + "duplicateFileCountWithStorageSaved": m7, + "edit": MessageLookupByLibrary.simpleMessage("Editar"), + "editsSaved": + MessageLookupByLibrary.simpleMessage("Ediciones guardadas"), + "eligible": MessageLookupByLibrary.simpleMessage("elegible"), + "email": MessageLookupByLibrary.simpleMessage("Correo electrónico"), + "emailChangedTo": m47, + "emailNoEnteAccount": m8, + "emailYourLogs": MessageLookupByLibrary.simpleMessage( + "Envíe sus registros por correo electrónico"), + "empty": MessageLookupByLibrary.simpleMessage("Vaciar"), + "emptyTrash": + MessageLookupByLibrary.simpleMessage("¿Vaciar la papelera?"), + "encryptingBackup": MessageLookupByLibrary.simpleMessage( + "Cifrando copia de seguridad..."), + "encryption": MessageLookupByLibrary.simpleMessage("Cifrado"), + "encryptionKeys": + MessageLookupByLibrary.simpleMessage("Claves de cifrado"), + "endtoendEncryptedByDefault": MessageLookupByLibrary.simpleMessage( + "Encriptado de extremo a extremo por defecto"), + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": + MessageLookupByLibrary.simpleMessage( + "ente puede cifrar y preservar archivos sólo si concede acceso a ellos"), + "enteSubscriptionPitch": MessageLookupByLibrary.simpleMessage( + "ente conserva tus recuerdos, así que siempre están disponibles para ti, incluso si pierdes tu dispositivo."), + "enteSubscriptionShareWithFamily": MessageLookupByLibrary.simpleMessage( + "Tu familia también puede ser agregada a tu plan."), + "enterAlbumName": MessageLookupByLibrary.simpleMessage( + "Introduzca el nombre del álbum"), + "enterCode": + MessageLookupByLibrary.simpleMessage("Introduzca el código"), + "enterCodeDescription": MessageLookupByLibrary.simpleMessage( + "Introduce el código proporcionado por tu amigo para reclamar almacenamiento gratuito para ambos"), + "enterEmail": MessageLookupByLibrary.simpleMessage( + "Ingresar correo electrónico "), + "enterFileName": MessageLookupByLibrary.simpleMessage( + "Introduzca el nombre del archivo"), + "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Introduzca una nueva contraseña que podamos usar para cifrar sus datos"), + "enterPassword": + MessageLookupByLibrary.simpleMessage("Introduzca contraseña"), + "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Introduzca una contraseña que podamos usar para cifrar sus datos"), + "enterReferralCode": MessageLookupByLibrary.simpleMessage( + "Ingresar código de referencia"), + "enterThe6digitCodeFromnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Ingrese el código de seis dígitos de su aplicación de autenticación"), + "enterValidEmail": MessageLookupByLibrary.simpleMessage( + "Por favor, introduzca una dirección de correo electrónico válida."), + "enterYourEmailAddress": MessageLookupByLibrary.simpleMessage( + "Escribe tu correo electrónico"), + "enterYourPassword": + MessageLookupByLibrary.simpleMessage("Ingrese su contraseña"), + "enterYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Introduzca su clave de recuperación"), + "error": MessageLookupByLibrary.simpleMessage("Error"), + "everywhere": MessageLookupByLibrary.simpleMessage("todas partes"), + "exif": MessageLookupByLibrary.simpleMessage("EXIF"), + "existingUser": + MessageLookupByLibrary.simpleMessage("Usuario existente"), + "expiredLinkInfo": MessageLookupByLibrary.simpleMessage( + "Este enlace ha caducado. Por favor, seleccione una nueva fecha de caducidad o deshabilite la fecha de caducidad."), + "exportLogs": + MessageLookupByLibrary.simpleMessage("Exportar registros"), + "exportYourData": + MessageLookupByLibrary.simpleMessage("Exportar tus datos"), + "failedToApplyCode": + MessageLookupByLibrary.simpleMessage("Error al aplicar el código"), + "failedToCancel": + MessageLookupByLibrary.simpleMessage("Error al cancelar"), + "failedToFetchOriginalForEdit": MessageLookupByLibrary.simpleMessage( + "No se pudo obtener el original para editar"), + "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( + "No se pueden obtener los detalles de la referencia. Por favor, inténtalo de nuevo más tarde."), + "failedToLoadAlbums": + MessageLookupByLibrary.simpleMessage("Error al cargar álbumes"), + "failedToRenew": + MessageLookupByLibrary.simpleMessage("Renovación fallida"), + "failedToVerifyPaymentStatus": MessageLookupByLibrary.simpleMessage( + "Error al verificar el estado de su pago"), + "familyPlans": + MessageLookupByLibrary.simpleMessage("Planes familiares"), + "faq": MessageLookupByLibrary.simpleMessage("Preguntas Frecuentes"), + "faqs": MessageLookupByLibrary.simpleMessage("Preguntas frecuentes"), + "favorite": MessageLookupByLibrary.simpleMessage("Favorito"), + "feedback": MessageLookupByLibrary.simpleMessage("Sugerencias"), + "fileSavedToGallery": MessageLookupByLibrary.simpleMessage( + "Archivo guardado en la galería"), + "filesBackedUpFromDevice": m48, + "filesBackedUpInAlbum": m49, + "filesDeleted": + MessageLookupByLibrary.simpleMessage("Archivos eliminados"), + "flip": MessageLookupByLibrary.simpleMessage("Voltear"), + "forYourMemories": + MessageLookupByLibrary.simpleMessage("para tus recuerdos"), + "forgotPassword": + MessageLookupByLibrary.simpleMessage("Olvidé mi contraseña"), + "freeStorageClaimed": MessageLookupByLibrary.simpleMessage( + "Almacenamiento gratuito reclamado"), + "freeStorageOnReferralSuccess": m9, + "freeStorageUsable": MessageLookupByLibrary.simpleMessage( + "Almacenamiento libre disponible"), + "freeTrial": MessageLookupByLibrary.simpleMessage("Prueba gratuita"), + "freeTrialValidTill": m10, + "freeUpAccessPostDelete": m50, + "freeUpAmount": m51, + "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage( + "Liberar espacio del dispositivo"), + "freeUpSpace": MessageLookupByLibrary.simpleMessage("Liberar espacio"), + "freeUpSpaceSaving": m52, + "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( + "Hasta 1000 memorias mostradas en la galería"), + "general": MessageLookupByLibrary.simpleMessage("General"), + "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( + "Generando claves de encriptación..."), + "googlePlayId": + MessageLookupByLibrary.simpleMessage("ID de Google Play"), + "grantPermission": + MessageLookupByLibrary.simpleMessage("Conceder permiso"), + "groupNearbyPhotos": + MessageLookupByLibrary.simpleMessage("Agrupar fotos cercanas"), + "hidden": MessageLookupByLibrary.simpleMessage("Oculto"), + "hide": MessageLookupByLibrary.simpleMessage("Ocultar"), + "howItWorks": MessageLookupByLibrary.simpleMessage("Cómo funciona"), + "howToViewShareeVerificationID": MessageLookupByLibrary.simpleMessage( + "Por favor, pídeles que mantengan presionada su dirección de correo electrónico en la pantalla de ajustes, y verifique que los IDs de ambos dispositivos coincidan."), + "ignoredFolderUploadReason": MessageLookupByLibrary.simpleMessage( + "Algunos archivos de este álbum son ignorados de la carga porque previamente habían sido borrados de ente."), + "importing": MessageLookupByLibrary.simpleMessage("Importando...."), + "incorrectCode": + MessageLookupByLibrary.simpleMessage("Código incorrecto"), + "incorrectPasswordTitle": + MessageLookupByLibrary.simpleMessage("Contraseña incorrecta"), + "incorrectRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Clave de recuperación incorrecta"), + "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage( + "La clave de recuperación introducida es incorrecta"), + "incorrectRecoveryKeyTitle": MessageLookupByLibrary.simpleMessage( + "Clave de recuperación incorrecta"), + "insecureDevice": + MessageLookupByLibrary.simpleMessage("Dispositivo inseguro"), + "installManually": + MessageLookupByLibrary.simpleMessage("Instalar manualmente"), + "invalidEmailAddress": MessageLookupByLibrary.simpleMessage( + "Dirección de correo electrónico no válida"), + "invalidKey": MessageLookupByLibrary.simpleMessage("Clave inválida"), + "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( + "La clave de recuperación introducida no es válida. Por favor, asegúrese de que contiene 24 palabras y compruebe la ortografía de cada una.\n\nSi ha introducido un código de recuperación antiguo, asegúrese de que tiene 64 caracteres de largo y compruebe cada uno de ellos."), + "invite": MessageLookupByLibrary.simpleMessage("Invitar"), + "inviteToEnte": MessageLookupByLibrary.simpleMessage("Invitar a ente"), + "inviteYourFriends": + MessageLookupByLibrary.simpleMessage("Invita a tus amigos"), + "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": m11, + "itemSelectedCount": m53, + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": + MessageLookupByLibrary.simpleMessage( + "Los artículos muestran el número de días restantes antes de ser borrados permanente"), + "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( + "Los elementos seleccionados serán removidos de este álbum"), + "keepPhotos": + MessageLookupByLibrary.simpleMessage("Conservar las fotos"), + "kiloMeterUnit": MessageLookupByLibrary.simpleMessage("km"), + "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( + "Por favor ayúdanos con esta información"), + "language": MessageLookupByLibrary.simpleMessage("Idioma"), + "lastUpdated": + MessageLookupByLibrary.simpleMessage("Última actualización"), + "leave": MessageLookupByLibrary.simpleMessage("Abandonar"), + "leaveAlbum": MessageLookupByLibrary.simpleMessage("Abandonar álbum"), + "leaveFamily": + MessageLookupByLibrary.simpleMessage("Abandonar plan familiar"), + "leaveSharedAlbum": + MessageLookupByLibrary.simpleMessage("¿Dejar álbum compartido?"), + "light": MessageLookupByLibrary.simpleMessage("Claro"), + "lightTheme": MessageLookupByLibrary.simpleMessage("Claro"), + "linkCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Enlace copiado al portapapeles"), + "linkDeviceLimit": + MessageLookupByLibrary.simpleMessage("Límite del dispositivo"), + "linkEnabled": MessageLookupByLibrary.simpleMessage("Habilitado"), + "linkExpired": MessageLookupByLibrary.simpleMessage("Vencido"), + "linkExpiresOn": m12, + "linkExpiry": MessageLookupByLibrary.simpleMessage("Enlace vence"), + "linkHasExpired": + MessageLookupByLibrary.simpleMessage("El enlace ha caducado"), + "linkNeverExpires": MessageLookupByLibrary.simpleMessage("Nunca"), + "loadMessage1": MessageLookupByLibrary.simpleMessage( + "Puedes compartir tu suscripción con tu familia"), + "loadMessage2": MessageLookupByLibrary.simpleMessage( + "Hasta ahora hemos conservado más de 10 millones de recuerdos"), + "loadMessage3": MessageLookupByLibrary.simpleMessage( + "Guardamos 3 copias de sus datos, una en un refugio subterráneo"), + "loadMessage4": MessageLookupByLibrary.simpleMessage( + "Todas nuestras aplicaciones son de código abierto"), + "loadMessage5": MessageLookupByLibrary.simpleMessage( + "Nuestro código fuente y criptografía han sido auditados externamente"), + "loadMessage6": MessageLookupByLibrary.simpleMessage( + "Puedes compartir enlaces a tus álbumes con tus seres queridos"), + "loadMessage7": MessageLookupByLibrary.simpleMessage( + "Nuestras aplicaciones móviles se ejecutan en segundo plano para cifrar y hacer copias de seguridad de las nuevas fotos que hagas clic"), + "loadMessage8": MessageLookupByLibrary.simpleMessage( + "web.ente.io tiene un cargador sofisticado"), + "loadMessage9": MessageLookupByLibrary.simpleMessage( + "Utilizamos Xchacha20Poly1305 para cifrar tus datos de forma segura"), + "loadingExifData": + MessageLookupByLibrary.simpleMessage("Cargando datos EXIF..."), + "loadingGallery": + MessageLookupByLibrary.simpleMessage("Cargando galería..."), + "loadingMessage": + MessageLookupByLibrary.simpleMessage("Cargando tus fotos..."), + "localGallery": MessageLookupByLibrary.simpleMessage("Galería local"), + "location": MessageLookupByLibrary.simpleMessage("Ubicación"), + "locationName": + MessageLookupByLibrary.simpleMessage("Nombre de la ubicación"), + "locationTagFeatureDescription": MessageLookupByLibrary.simpleMessage( + "Una etiqueta de ubicación agrupa todas las fotos que fueron tomadas dentro de un radio de una foto"), + "lockButtonLabel": MessageLookupByLibrary.simpleMessage("Bloquear"), + "lockScreenEnablePreSteps": MessageLookupByLibrary.simpleMessage( + "Para activar la pantalla de bloqueo, por favor configure el código de acceso del dispositivo o el bloqueo de pantalla en los ajustes de su sistema."), + "lockscreen": + MessageLookupByLibrary.simpleMessage("Pantalla de bloqueo"), + "logInLabel": MessageLookupByLibrary.simpleMessage("Iniciar sesión"), + "loggingOut": + MessageLookupByLibrary.simpleMessage("Cerrando sesión..."), + "loginTerms": MessageLookupByLibrary.simpleMessage( + "Al hacer clic en iniciar sesión, acepto los términos de servicio y la política de privacidad"), + "logout": MessageLookupByLibrary.simpleMessage("Cerrar sesión"), + "logsDialogBody": MessageLookupByLibrary.simpleMessage( + "Esto enviará registros para ayudarnos a depurar su problema. Tenga en cuenta que los nombres de los archivos se incluirán para ayudar a rastrear problemas con archivos específicos."), + "longpressOnAnItemToViewInFullscreen": MessageLookupByLibrary.simpleMessage( + "Pulsación prolongada en un elemento para ver en pantalla completa"), + "lostDevice": + MessageLookupByLibrary.simpleMessage("¿Perdió su dispositivo?"), + "manage": MessageLookupByLibrary.simpleMessage("Administrar"), + "manageDeviceStorage": MessageLookupByLibrary.simpleMessage( + "Administrar almacenamiento del dispositivo"), + "manageFamily": + MessageLookupByLibrary.simpleMessage("Administrar familia"), + "manageLink": + MessageLookupByLibrary.simpleMessage("Administrar enlace"), + "manageParticipants": + MessageLookupByLibrary.simpleMessage("Administrar"), + "manageSubscription": + MessageLookupByLibrary.simpleMessage("Administrar tu suscripción"), + "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), + "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), + "maxDeviceLimitSpikeHandling": m13, + "memoryCount": m14, + "merchandise": MessageLookupByLibrary.simpleMessage("Mercancías"), + "mobileWebDesktop": + MessageLookupByLibrary.simpleMessage("Celular, Web, Computadora"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Moderada"), + "monthly": MessageLookupByLibrary.simpleMessage("Mensual"), + "moveItem": m54, + "moveToAlbum": MessageLookupByLibrary.simpleMessage("Mover al álbum"), + "movedSuccessfullyTo": m55, + "movedToTrash": + MessageLookupByLibrary.simpleMessage("Movido a la papelera"), + "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Moviendo archivos al álbum..."), + "name": MessageLookupByLibrary.simpleMessage("Nombre"), + "never": MessageLookupByLibrary.simpleMessage("Nunca"), + "newAlbum": MessageLookupByLibrary.simpleMessage("Nuevo álbum"), + "newToEnte": MessageLookupByLibrary.simpleMessage("Nuevo en ente"), + "newest": MessageLookupByLibrary.simpleMessage("Más reciente"), + "no": MessageLookupByLibrary.simpleMessage("No"), + "noDeviceThatCanBeDeleted": MessageLookupByLibrary.simpleMessage( + "No tienes archivos en este dispositivo que puedan ser borrados"), + "noDuplicates": + MessageLookupByLibrary.simpleMessage("✨ Sin duplicados"), + "noExifData": MessageLookupByLibrary.simpleMessage("No hay datos EXIF"), + "noHiddenPhotosOrVideos": MessageLookupByLibrary.simpleMessage( + "No hay fotos ni vídeos ocultos"), + "noPhotosAreBeingBackedUpRightNow": + MessageLookupByLibrary.simpleMessage( + "No se están respaldando fotos ahora mismo"), + "noRecoveryKey": + MessageLookupByLibrary.simpleMessage("¿Sin clave de recuperación?"), + "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( + "Debido a la naturaleza de nuestro protocolo de cifrado de extremo a extremo, sus datos no pueden ser descifrados sin su contraseña o clave de recuperación"), + "noResults": MessageLookupByLibrary.simpleMessage("Sin resultados"), + "noResultsFound": MessageLookupByLibrary.simpleMessage( + "No se han encontrado resultados"), + "nothingToSeeHere": MessageLookupByLibrary.simpleMessage( + "¡No hay nada que ver aquí! 👀"), + "ok": MessageLookupByLibrary.simpleMessage("Aceptar"), + "onDevice": MessageLookupByLibrary.simpleMessage("En el dispositivo"), + "onEnte": MessageLookupByLibrary.simpleMessage( + "En ente"), + "oops": MessageLookupByLibrary.simpleMessage("Ups"), + "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( + "Ups, no se pudieron guardar las ediciónes"), + "oopsSomethingWentWrong": + MessageLookupByLibrary.simpleMessage("Ups, algo salió mal"), + "openTheItem": + MessageLookupByLibrary.simpleMessage("• Abrir el elemento"), + "optionalAsShortAsYouLike": MessageLookupByLibrary.simpleMessage( + "Opcional, tan corto como quieras..."), + "orPickAnExistingOne": + MessageLookupByLibrary.simpleMessage("O elige uno existente"), + "password": MessageLookupByLibrary.simpleMessage("Contraseña"), + "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( + "Contraseña cambiada correctamente"), + "passwordLock": + MessageLookupByLibrary.simpleMessage("Bloqueo por contraseña"), + "passwordStrength": m15, + "passwordWarning": MessageLookupByLibrary.simpleMessage( + "No almacenamos esta contraseña, así que si la olvidas, no podemos descifrar tus datos"), + "paymentDetails": + MessageLookupByLibrary.simpleMessage("Detalles de pago"), + "paymentFailed": MessageLookupByLibrary.simpleMessage("Pago fallido"), + "paymentFailedTalkToProvider": m16, + "paymentFailedWithReason": m17, + "pendingSync": + MessageLookupByLibrary.simpleMessage("Sincronización pendiente"), + "peopleUsingYourCode": + MessageLookupByLibrary.simpleMessage("Personas usando tu código"), + "permDeleteWarning": MessageLookupByLibrary.simpleMessage( + "Todos los elementos de la papelera serán eliminados permanentemente\n\nEsta acción no se puede deshacer"), + "permanentlyDelete": + MessageLookupByLibrary.simpleMessage("Borrar permanentemente"), + "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( + "¿Eliminar permanentemente del dispositivo?"), + "photoGridSize": MessageLookupByLibrary.simpleMessage( + "Tamaño de la cuadrícula de fotos"), + "photoSmallCase": MessageLookupByLibrary.simpleMessage("foto"), + "photosAddedByYouWillBeRemovedFromTheAlbum": + MessageLookupByLibrary.simpleMessage( + "Las fotos añadidas por ti serán removidas del álbum"), + "pickCenterPoint": + MessageLookupByLibrary.simpleMessage("Elegir punto central"), + "playstoreSubscription": + MessageLookupByLibrary.simpleMessage("Suscripción en la PlayStore"), + "pleaseContactSupportAndWeWillBeHappyToHelp": + MessageLookupByLibrary.simpleMessage( + "¡Por favor, contacta con support@ente.io y estaremos encantados de ayudar!"), + "pleaseContactSupportIfTheProblemPersists": + MessageLookupByLibrary.simpleMessage( + "Por favor contacte a soporte técnico si el problema persiste"), + "pleaseEmailUsAt": m56, + "pleaseGrantPermissions": + MessageLookupByLibrary.simpleMessage("Por favor, concede permiso"), + "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage( + "Por favor, vuelva a iniciar sesión"), + "pleaseSendTheLogsTo": m57, + "pleaseTryAgain": MessageLookupByLibrary.simpleMessage( + "Por favor, inténtalo nuevamente"), + "pleaseVerifyTheCodeYouHaveEntered": + MessageLookupByLibrary.simpleMessage( + "Por favor verifique el código que ha introducido"), + "pleaseWait": + MessageLookupByLibrary.simpleMessage("Por favor, espere..."), + "pleaseWaitDeletingAlbum": MessageLookupByLibrary.simpleMessage( + "Por favor espere, borrando álbum"), + "pleaseWaitForSometimeBeforeRetrying": + MessageLookupByLibrary.simpleMessage( + "Por favor espere un momento antes de volver a intentarlo"), + "preparingLogs": + MessageLookupByLibrary.simpleMessage("Preparando registros..."), + "preserveMore": MessageLookupByLibrary.simpleMessage("Preservar más"), + "pressAndHoldToPlayVideo": MessageLookupByLibrary.simpleMessage( + "Presiona y mantén presionado para reproducir el video"), + "privacy": MessageLookupByLibrary.simpleMessage("Privacidad"), + "privacyPolicyTitle": + MessageLookupByLibrary.simpleMessage("Política de Privacidad"), + "privateBackups": MessageLookupByLibrary.simpleMessage( + "Copias de seguridad privadas"), + "privateSharing": + MessageLookupByLibrary.simpleMessage("Compartir en privado"), + "publicLinkCreated": + MessageLookupByLibrary.simpleMessage("Enlace público creado"), + "publicLinkEnabled": + MessageLookupByLibrary.simpleMessage("Enlace público habilitado"), + "radius": MessageLookupByLibrary.simpleMessage("Radio"), + "raiseTicket": MessageLookupByLibrary.simpleMessage("Generar ticket"), + "rateTheApp": + MessageLookupByLibrary.simpleMessage("Evalúa la aplicación"), + "rateUs": MessageLookupByLibrary.simpleMessage("Califícanos"), + "rateUsOnStore": m18, + "recover": MessageLookupByLibrary.simpleMessage("Recuperar"), + "recoverAccount": + MessageLookupByLibrary.simpleMessage("Recuperar cuenta"), + "recoverButton": MessageLookupByLibrary.simpleMessage("Recuperar"), + "recoveryKey": + MessageLookupByLibrary.simpleMessage("Clave de recuperación"), + "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Clave de recuperación copiada al portapapeles"), + "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( + "Si olvida su contraseña, la única forma de recuperar sus datos es con esta clave."), + "recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage( + "Nosotros no almacenamos esta clave, por favor guarde dicha clave de 24 palabras en un lugar seguro."), + "recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage( + "¡Genial! Su clave de recuperación es válida. Gracias por verificar.\n\nPor favor, recuerde mantener su clave de recuperación segura."), + "recoveryKeyVerified": MessageLookupByLibrary.simpleMessage( + "Clave de recuperación verificada"), + "recoveryKeyVerifyReason": MessageLookupByLibrary.simpleMessage( + "Su clave de recuperación es la única forma de recuperar sus fotos si olvida su contraseña. Puede encontrar su clave de recuperación en Ajustes > Cuenta.\n\nPor favor, introduzca su clave de recuperación aquí para verificar que la ha guardado correctamente."), + "recoverySuccessful": + MessageLookupByLibrary.simpleMessage("¡Recuperación exitosa!"), + "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": + MessageLookupByLibrary.simpleMessage("Recrear contraseña"), + "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( + "Refiere a amigos y 2x su plan"), + "referralStep1": MessageLookupByLibrary.simpleMessage( + "1. Dale este código a tus amigos"), + "referralStep2": MessageLookupByLibrary.simpleMessage( + "2. Se inscriben a un plan pagado"), + "referralStep3": m19, + "referrals": MessageLookupByLibrary.simpleMessage("Referidos"), + "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( + "Las referencias están actualmente en pausa"), + "remindToEmptyDeviceTrash": MessageLookupByLibrary.simpleMessage( + "También vacía \"Eliminado Recientemente\" de \"Configuración\" -> \"Almacenamiento\" para reclamar el espacio libre"), + "remindToEmptyEnteTrash": MessageLookupByLibrary.simpleMessage( + "También vacía tu \"Papelera\" para reclamar el espacio liberado"), + "remoteImages": + MessageLookupByLibrary.simpleMessage("Imágenes remotas"), + "remoteThumbnails": + MessageLookupByLibrary.simpleMessage("Miniaturas remotas"), + "remoteVideos": MessageLookupByLibrary.simpleMessage("Videos remotos"), + "remove": MessageLookupByLibrary.simpleMessage("Quitar"), + "removeDuplicates": + MessageLookupByLibrary.simpleMessage("Eliminar duplicados"), + "removeFromAlbum": + MessageLookupByLibrary.simpleMessage("Quitar del álbum"), + "removeFromAlbumTitle": + MessageLookupByLibrary.simpleMessage("¿Quitar del álbum?"), + "removeFromFavorite": + MessageLookupByLibrary.simpleMessage("Quitar de favoritos"), + "removeLink": MessageLookupByLibrary.simpleMessage("Eliminar enlace"), + "removeParticipant": + MessageLookupByLibrary.simpleMessage("Quitar participante"), + "removeParticipantBody": m20, + "removePublicLink": + MessageLookupByLibrary.simpleMessage("Quitar enlace público"), + "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( + "Algunos de los elementos que estás eliminando fueron añadidos por otras personas, y perderás el acceso a ellos"), + "removeWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Quitar?"), + "removingFromFavorites": + MessageLookupByLibrary.simpleMessage("Quitando de favoritos..."), + "rename": MessageLookupByLibrary.simpleMessage("Renombrar"), + "renameAlbum": MessageLookupByLibrary.simpleMessage("Renombrar álbum"), + "renameFile": MessageLookupByLibrary.simpleMessage("Renombrar archivo"), + "renewSubscription": + MessageLookupByLibrary.simpleMessage("Renovar suscripción"), + "renewsOn": m21, + "reportABug": MessageLookupByLibrary.simpleMessage("Reportar un error"), + "reportBug": MessageLookupByLibrary.simpleMessage("Reportar error"), + "resendEmail": + MessageLookupByLibrary.simpleMessage("Reenviar correo electrónico"), + "resetIgnoredFiles": MessageLookupByLibrary.simpleMessage( + "Restablecer archivos ignorados"), + "resetPasswordTitle": + MessageLookupByLibrary.simpleMessage("Restablecer contraseña"), + "restore": MessageLookupByLibrary.simpleMessage("Restaurar"), + "restoreToAlbum": + MessageLookupByLibrary.simpleMessage("Restaurar al álbum"), + "restoringFiles": + MessageLookupByLibrary.simpleMessage("Restaurando los archivos..."), + "retry": MessageLookupByLibrary.simpleMessage("Reintentar"), + "reviewDeduplicateItems": MessageLookupByLibrary.simpleMessage( + "Por favor, revise y elimine los elementos que cree que están duplicados."), + "rotateLeft": + MessageLookupByLibrary.simpleMessage("Girar a la izquierda"), + "rotateRight": + MessageLookupByLibrary.simpleMessage("Girar a la derecha"), + "safelyStored": + MessageLookupByLibrary.simpleMessage("Almacenado con seguridad"), + "save": MessageLookupByLibrary.simpleMessage("Guardar"), + "saveCopy": MessageLookupByLibrary.simpleMessage("Guardar copia"), + "saveKey": MessageLookupByLibrary.simpleMessage("Guardar Clave"), + "saveYourRecoveryKeyIfYouHaventAlready": + MessageLookupByLibrary.simpleMessage( + "Guarda tu clave de recuperación si aún no lo has hecho"), + "saving": MessageLookupByLibrary.simpleMessage("Saving..."), + "scanCode": MessageLookupByLibrary.simpleMessage("Escanear código"), + "scanThisBarcodeWithnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Escanea este código QR con tu aplicación de autenticación"), + "searchByAlbumNameHint": + MessageLookupByLibrary.simpleMessage("Nombre del álbum"), + "searchByExamples": MessageLookupByLibrary.simpleMessage( + "• Nombres de álbumes (por ejemplo, \"Cámara\")\n• Tipos de archivos (por ejemplo, \"Videos\", \".gif\")\n• Años y meses (por ejemplo, \"2022\", \"Enero\")\n• Vacaciones (por ejemplo, \"Navidad\")\n• Descripciones fotográficas (por ejemplo, \"#diversión\")"), + "searchHintText": MessageLookupByLibrary.simpleMessage( + "Álbunes, meses, días, años, ..."), + "security": MessageLookupByLibrary.simpleMessage("Seguridad"), + "selectAlbum": + MessageLookupByLibrary.simpleMessage("Seleccionar álbum"), + "selectAll": MessageLookupByLibrary.simpleMessage("Seleccionar todos"), + "selectFoldersForBackup": MessageLookupByLibrary.simpleMessage( + "Seleccionar carpetas para el respaldo"), + "selectLanguage": + MessageLookupByLibrary.simpleMessage("Seleccionar idioma"), + "selectReason": + MessageLookupByLibrary.simpleMessage("Seleccionar motivo"), + "selectYourPlan": + MessageLookupByLibrary.simpleMessage("Elegir tu suscripción"), + "selectedFilesAreNotOnEnte": MessageLookupByLibrary.simpleMessage( + "Los archivos seleccionados no están en ente"), + "selectedFoldersWillBeEncryptedAndBackedUp": + MessageLookupByLibrary.simpleMessage( + "Las carpetas seleccionadas se cifrarán y se respaldarán"), + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": + MessageLookupByLibrary.simpleMessage( + "Los archivos seleccionados serán eliminados de todos los álbumes y movidos a la papelera."), + "selectedPhotos": m22, + "selectedPhotosWithYours": m23, + "send": MessageLookupByLibrary.simpleMessage("Enviar"), + "sendEmail": + MessageLookupByLibrary.simpleMessage("Enviar correo electrónico"), + "sendInvite": MessageLookupByLibrary.simpleMessage("Enviar invitación"), + "sendLink": MessageLookupByLibrary.simpleMessage("Enviar enlace"), + "sessionExpired": + MessageLookupByLibrary.simpleMessage("La sesión ha expirado"), + "setAPassword": + MessageLookupByLibrary.simpleMessage("Establecer una contraseña"), + "setAs": MessageLookupByLibrary.simpleMessage("Establecer como"), + "setPasswordTitle": + MessageLookupByLibrary.simpleMessage("Establecer contraseña"), + "setupComplete": + MessageLookupByLibrary.simpleMessage("Configuración completa"), + "share": MessageLookupByLibrary.simpleMessage("Compartir"), + "shareALink": + MessageLookupByLibrary.simpleMessage("Compartir un enlace"), + "shareAlbumHint": MessageLookupByLibrary.simpleMessage( + "Abre un álbum y pulsa el botón compartir en la parte superior derecha para compartir."), + "shareAnAlbumNow": + MessageLookupByLibrary.simpleMessage("Compartir un álbum ahora"), + "shareLink": MessageLookupByLibrary.simpleMessage("Compartir enlace"), + "shareMyVerificationID": m24, + "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( + "Comparte sólo con la gente que quieres"), + "shareTextConfirmOthersVerificationID": m25, + "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( + "Descarga ente para que podamos compartir fácilmente fotos y videos en su calidad original\n\nhttps://ente.io/#download"), + "shareTextReferralCode": m26, + "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( + "Compartir con usuarios no ente"), + "shareWithPeopleSectionTitle": m27, + "shareYourFirstAlbum": + MessageLookupByLibrary.simpleMessage("Comparte tu primer álbum"), + "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( + "Crear álbumes compartidos y colaborativos con otros usuarios ente, incluyendo usuarios en planes gratuitos."), + "sharedByMe": MessageLookupByLibrary.simpleMessage("Compartido por mí"), + "sharedWith": m28, + "sharedWithMe": + MessageLookupByLibrary.simpleMessage("Compartido conmigo"), + "sharing": MessageLookupByLibrary.simpleMessage("Compartiendo..."), + "signUpTerms": MessageLookupByLibrary.simpleMessage( + "Estoy de acuerdo con los términos del servicio y la política de privacidad"), + "singleFileDeleteFromDevice": m29, + "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( + "Se borrará de todos los álbumes."), + "singleFileInBothLocalAndRemote": m30, + "singleFileInRemoteOnly": m31, + "skip": MessageLookupByLibrary.simpleMessage("Omitir"), + "social": MessageLookupByLibrary.simpleMessage("Social"), + "someItemsAreInBothEnteAndYourDevice": + MessageLookupByLibrary.simpleMessage( + "Algunos elementos están tanto en ente como en tu dispositivo."), + "someOfTheFilesYouAreTryingToDeleteAre": + MessageLookupByLibrary.simpleMessage( + "Algunos de los archivos que estás intentando eliminar sólo están disponibles en tu dispositivo y no se pueden recuperar si se eliminan"), + "someoneSharingAlbumsWithYouShouldSeeTheSameId": + MessageLookupByLibrary.simpleMessage( + "Alguien compartiendo álbumes con usted debería ver el mismo ID en su dispositivo."), + "somethingWentWrong": + MessageLookupByLibrary.simpleMessage("Algo salió mal"), + "somethingWentWrongPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Algo salió mal, por favor inténtalo de nuevo"), + "sorry": MessageLookupByLibrary.simpleMessage("Lo sentimos"), + "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( + "¡Lo sentimos, no se pudo añadir a favoritos!"), + "sorryCouldNotRemoveFromFavorites": + MessageLookupByLibrary.simpleMessage( + "¡Lo sentimos, no se pudo quitar de favoritos!"), + "sorryTheCodeYouveEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "Lo sentimos, el código que ha introducido es incorrecto"), + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": + MessageLookupByLibrary.simpleMessage( + "Lo sentimos, no hemos podido generar claves seguras en este dispositivo.\n\nRegístrate desde un dispositivo diferente."), + "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Éxito"), + "startBackup": + MessageLookupByLibrary.simpleMessage("Iniciar copia de seguridad"), + "storageInGB": m32, + "storageLimitExceeded": + MessageLookupByLibrary.simpleMessage("Límite de datos excedido"), + "strongStrength": MessageLookupByLibrary.simpleMessage("Segura"), + "subAlreadyLinkedErrMessage": m33, + "subWillBeCancelledOn": m34, + "subscribe": MessageLookupByLibrary.simpleMessage("Suscribirse"), + "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( + "Parece que su suscripción ha caducado. Por favor, suscríbase para habilitar el compartir."), + "subscription": MessageLookupByLibrary.simpleMessage("Suscripción"), + "success": MessageLookupByLibrary.simpleMessage("Éxito"), + "successfullyArchived": + MessageLookupByLibrary.simpleMessage("Archivado correctamente"), + "successfullyUnarchived": + MessageLookupByLibrary.simpleMessage("Desarchivado correctamente"), + "suggestFeatures": + MessageLookupByLibrary.simpleMessage("Sugerir una característica"), + "support": MessageLookupByLibrary.simpleMessage("Soporte"), + "syncProgress": m35, + "syncStopped": + MessageLookupByLibrary.simpleMessage("Sincronización detenida"), + "syncing": MessageLookupByLibrary.simpleMessage("Sincronizando..."), + "systemTheme": MessageLookupByLibrary.simpleMessage("Sistema"), + "tapToCopy": MessageLookupByLibrary.simpleMessage("toque para copiar"), + "tapToEnterCode": MessageLookupByLibrary.simpleMessage( + "Toca para introducir el código"), + "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"), + "terminateSession": + MessageLookupByLibrary.simpleMessage("¿Terminar sesión?"), + "terms": MessageLookupByLibrary.simpleMessage("Términos"), + "termsOfServicesTitle": + MessageLookupByLibrary.simpleMessage("Términos"), + "thankYou": MessageLookupByLibrary.simpleMessage("Gracias"), + "thankYouForSubscribing": + MessageLookupByLibrary.simpleMessage("¡Gracias por suscribirte!"), + "theDownloadCouldNotBeCompleted": MessageLookupByLibrary.simpleMessage( + "No se ha podido completar la descarga"), + "theRecoveryKeyYouEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "La clave de recuperación introducida es incorrecta"), + "theme": MessageLookupByLibrary.simpleMessage("Tema"), + "theseItemsWillBeDeletedFromYourDevice": + MessageLookupByLibrary.simpleMessage( + "Estos elementos se eliminarán de tu dispositivo."), + "theyAlsoGetXGb": m36, + "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( + "Se borrarán de todos los álbumes."), + "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( + "Esta acción no se puede deshacer"), + "thisAlbumAlreadyHDACollaborativeLink": + MessageLookupByLibrary.simpleMessage( + "Este álbum ya tiene un enlace de colaboración"), + "thisCanBeUsedToRecoverYourAccountIfYou": + MessageLookupByLibrary.simpleMessage( + "Esto puede utilizarse para recuperar su cuenta si pierde su segundo factor"), + "thisDevice": MessageLookupByLibrary.simpleMessage("Este dispositivo"), + "thisEmailIsAlreadyInUse": MessageLookupByLibrary.simpleMessage( + "Este correo electrónico ya está en uso"), + "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( + "Esta imagen no tiene datos exif"), + "thisIsPersonVerificationId": m37, + "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( + "Esta es tu ID de verificación"), + "thisWillLogYouOutOfTheFollowingDevice": + MessageLookupByLibrary.simpleMessage( + "Esto cerrará la sesión del siguiente dispositivo:"), + "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( + "¡Esto cerrará la sesión de este dispositivo!"), + "time": MessageLookupByLibrary.simpleMessage("Tiempo"), + "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage( + "Para ocultar una foto o video"), + "todaysLogs": MessageLookupByLibrary.simpleMessage("Registros de hoy"), + "total": MessageLookupByLibrary.simpleMessage("total"), + "totalSize": MessageLookupByLibrary.simpleMessage("Tamaño total"), + "trash": MessageLookupByLibrary.simpleMessage("Papelera"), + "tryAgain": MessageLookupByLibrary.simpleMessage("Inténtelo de nuevo"), + "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( + "Activar la copia de seguridad para subir automáticamente archivos añadidos a la carpeta de este dispositivo hacia ente."), + "twitter": MessageLookupByLibrary.simpleMessage("Twitter"), + "twoMonthsFreeOnYearlyPlans": MessageLookupByLibrary.simpleMessage( + "2 meses gratis en planes anuales"), + "twofactor": MessageLookupByLibrary.simpleMessage("Dos factores"), + "twofactorAuthenticationHasBeenDisabled": + MessageLookupByLibrary.simpleMessage( + "La autenticación de dos factores fue deshabilitada"), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage("Autenticación en dos pasos"), + "twofactorAuthenticationSuccessfullyReset": + MessageLookupByLibrary.simpleMessage( + "Autenticación de doble factor restablecida con éxito"), + "twofactorSetup": + MessageLookupByLibrary.simpleMessage("Configuración de dos pasos"), + "unarchive": MessageLookupByLibrary.simpleMessage("Desarchivar"), + "unarchiveAlbum": + MessageLookupByLibrary.simpleMessage("Desarchivar álbum"), + "unarchiving": MessageLookupByLibrary.simpleMessage("Desarchivando..."), + "uncategorized": + MessageLookupByLibrary.simpleMessage("Sin categorizar"), + "unhide": MessageLookupByLibrary.simpleMessage("Dejar de ocultar"), + "unhideToAlbum": + MessageLookupByLibrary.simpleMessage("Hacer visible al álbum"), + "unhidingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Desocultar archivos al álbum"), + "unlock": MessageLookupByLibrary.simpleMessage("Desbloquear"), + "unselectAll": MessageLookupByLibrary.simpleMessage("Desmarcar todos"), + "update": MessageLookupByLibrary.simpleMessage("Actualizar"), + "updateAvailable": + MessageLookupByLibrary.simpleMessage("Actualizacion disponible"), + "updatingFolderSelection": MessageLookupByLibrary.simpleMessage( + "Actualizando la selección de carpeta..."), + "upgrade": MessageLookupByLibrary.simpleMessage("Mejorar"), + "uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Subiendo archivos al álbum..."), + "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( + "El almacenamiento utilizable está limitado por su plan actual. El exceso de almacenamiento reclamado se volverá automáticamente utilizable cuando actualice su plan."), + "usePublicLinksForPeopleNotOnEnte": + MessageLookupByLibrary.simpleMessage( + "Usa enlaces públicos para personas que no están en ente"), + "useRecoveryKey": + MessageLookupByLibrary.simpleMessage("Usar clave de recuperación"), + "useSelectedPhoto": + MessageLookupByLibrary.simpleMessage("Usar foto seleccionada"), + "verificationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Verificación fallida, por favor intenta nuevamente"), + "verificationId": + MessageLookupByLibrary.simpleMessage("ID de verificación"), + "verify": MessageLookupByLibrary.simpleMessage("Verificar"), + "verifyEmail": MessageLookupByLibrary.simpleMessage( + "Verificar correo electrónico"), + "verifyEmailID": m38, + "verifyPassword": + MessageLookupByLibrary.simpleMessage("Verificar contraseña"), + "verifying": MessageLookupByLibrary.simpleMessage("Verificando..."), + "verifyingRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Verificando clave de recuperación..."), + "videoSmallCase": MessageLookupByLibrary.simpleMessage("vídeo"), + "viewActiveSessions": + MessageLookupByLibrary.simpleMessage("Ver sesiones activas"), + "viewAllExifData": + MessageLookupByLibrary.simpleMessage("Ver todos los datos EXIF"), + "viewLogs": MessageLookupByLibrary.simpleMessage("Ver Registros"), + "viewRecoveryKey": + MessageLookupByLibrary.simpleMessage("Ver código de recuperación"), + "viewer": MessageLookupByLibrary.simpleMessage("Espectador"), + "visitWebToManage": MessageLookupByLibrary.simpleMessage( + "Por favor visite web.ente.io para administrar su suscripción"), + "weAreOpenSource": + MessageLookupByLibrary.simpleMessage("¡Somos de código abierto!"), + "weDontSupportEditingPhotosAndAlbumsThatYouDont": + MessageLookupByLibrary.simpleMessage( + "No admitimos la edición de fotos y álbunes que aún no son tuyos"), + "weHaveSendEmailTo": m39, + "weakStrength": MessageLookupByLibrary.simpleMessage("Poco segura"), + "welcomeBack": + MessageLookupByLibrary.simpleMessage("¡Bienvenido de nuevo!"), + "yearly": MessageLookupByLibrary.simpleMessage("Anualmente"), + "yearsAgo": m40, + "yes": MessageLookupByLibrary.simpleMessage("Sí"), + "yesCancel": MessageLookupByLibrary.simpleMessage("Sí, cancelar"), + "yesConvertToViewer": + MessageLookupByLibrary.simpleMessage("Sí, convertir a espectador"), + "yesDelete": MessageLookupByLibrary.simpleMessage("Sí, eliminar"), + "yesDiscardChanges": + MessageLookupByLibrary.simpleMessage("Sí, descartar cambios"), + "yesLogout": MessageLookupByLibrary.simpleMessage("Sí, cerrar sesión"), + "yesRemove": MessageLookupByLibrary.simpleMessage("Sí, quitar"), + "yesRenew": MessageLookupByLibrary.simpleMessage("Sí, Renovar"), + "you": MessageLookupByLibrary.simpleMessage("Usted"), + "youAreOnAFamilyPlan": + MessageLookupByLibrary.simpleMessage("¡Estás en un plan familiar!"), + "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage( + "Estás usando la última versión"), + "youCanAtMaxDoubleYourStorage": MessageLookupByLibrary.simpleMessage( + "* Puedes al máximo duplicar tu almacenamiento"), + "youCanManageYourLinksInTheShareTab": + MessageLookupByLibrary.simpleMessage( + "Puedes administrar tus enlaces en la pestaña compartir."), + "youCanTrySearchingForADifferentQuery": + MessageLookupByLibrary.simpleMessage( + "Puedes intentar buscar una consulta diferente."), + "youCannotDowngradeToThisPlan": MessageLookupByLibrary.simpleMessage( + "No puedes degradar a este plan"), + "youCannotShareWithYourself": MessageLookupByLibrary.simpleMessage( + "No puedes compartir contigo mismo"), + "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( + "No tienes nada de elementos archivados."), + "youHaveSuccessfullyFreedUp": m41, + "yourAccountHasBeenDeleted": + MessageLookupByLibrary.simpleMessage("Su cuenta ha sido eliminada"), + "yourPlanWasSuccessfullyDowngraded": + MessageLookupByLibrary.simpleMessage( + "Tu plan ha sido degradado con éxito"), + "yourPlanWasSuccessfullyUpgraded": MessageLookupByLibrary.simpleMessage( + "Tu plan se ha actualizado correctamente"), + "yourPurchaseWasSuccessful": + MessageLookupByLibrary.simpleMessage("Tu compra ha sido exitosa"), + "yourStorageDetailsCouldNotBeFetched": + MessageLookupByLibrary.simpleMessage( + "Tus datos de almacenamiento no se han podido obtener"), + "yourSubscriptionHasExpired": + MessageLookupByLibrary.simpleMessage("Tu suscripción ha caducado"), + "yourSubscriptionWasUpdatedSuccessfully": + MessageLookupByLibrary.simpleMessage( + "Tu suscripción se ha actualizado con éxito"), + "yourVerificationCodeHasExpired": MessageLookupByLibrary.simpleMessage( + "Tu código de verificación ha expirado"), + "youveNoDuplicateFilesThatCanBeCleared": + MessageLookupByLibrary.simpleMessage( + "No tienes archivos duplicados que puedan ser borrados"), + "youveNoFilesInThisAlbumThatCanBeDeleted": + MessageLookupByLibrary.simpleMessage( + "No tienes archivos en este álbum que puedan ser borrados") + }; +} diff --git a/lib/generated/intl/messages_fr.dart b/lib/generated/intl/messages_fr.dart new file mode 100644 index 000000000..d57800298 --- /dev/null +++ b/lib/generated/intl/messages_fr.dart @@ -0,0 +1,1059 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a fr 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 => 'fr'; + + static String m42(count) => + "${Intl.plural(count, one: 'Ajoutez un objet', other: 'Ajoutez des objets')}"; + + static String m44(albumName) => "Ajouté avec succès à ${albumName}"; + + static String m0(paymentProvider) => + "Veuillez d\'abord annuler votre abonnement existant de ${paymentProvider}"; + + static String m1(user) => + "${user} ne pourra pas ajouter plus de photos à cet album\n\nIl pourrait toujours supprimer les photos existantes ajoutées par eux"; + + static String m2(isFamilyMember, storageAmountInGb) => + "${Intl.select(isFamilyMember, { + 'true': + 'Votre famille a demandé ${storageAmountInGb} Gb jusqu\'à présent', + 'false': + 'Vous avez réclamé ${storageAmountInGb} Gb jusqu\'à présent', + 'other': + 'Vous avez réclamé ${storageAmountInGb} Gbjusqu\'à présent!', + })}"; + + static String m45(albumName) => "Lien collaboratif créé pour ${albumName}"; + + static String m4(provider) => + "Veuillez nous contacter à support@ente.io pour gérer votre abonnement ${provider}."; + + static String m46(currentlyDeleting, totalCount) => + "Suppression de ${currentlyDeleting} / ${totalCount}"; + + static String m5(albumName) => + "Cela supprimera le lien public pour accéder à \"${albumName}\"."; + + static String m6(supportEmail) => + "Veuillez envoyer un e-mail à ${supportEmail} depuis votre adresse enregistrée"; + + static String m7(count, storageSaved) => + "Vous avez nettoyé ${Intl.plural(count, one: '${count} fichier dupliqué', other: '${count} fichiers dupliqués')}, sauvegarde (${storageSaved}!)"; + + static String m47(newEmail) => "L\'e-mail a été changé en ${newEmail}"; + + static String m8(email) => + "${email} n\'a pas de compte ente.\n\nEnvoyez une invitation pour partager des photos."; + + static String m9(storageAmountInGB) => + "${storageAmountInGB} Go chaque fois que quelqu\'un s\'inscrit à une offre payante et applique votre code"; + + static String m11(count) => + "${Intl.plural(count, one: '${count} objet', other: '${count} objets')}"; + + static String m53(count) => "${count} sélectionné"; + + static String m12(expiryTime) => "Le lien expirera le ${expiryTime}"; + + static String m13(maxValue) => + "Lorsqu\'elle est définie au maximum (${maxValue}), la limite de l\'appareil sera assouplie pour permettre des pointes temporaires d\'un grand nombre de téléspectateurs."; + + static String m14(count) => + "${Intl.plural(count, one: '${count} mémoire', other: '${count} souvenirs')}"; + + static String m54(count) => + "${Intl.plural(count, one: 'Déplacez l\'objet', other: 'Déplacez des objets')}"; + + static String m55(albumName) => "Déplacé avec succès vers ${albumName}"; + + static String m15(passwordStrengthValue) => + "Puissance du mot de passe : ${passwordStrengthValue}"; + + static String m56(toEmail) => "Merci de nous envoyer un e-mail à ${toEmail}"; + + static String m57(toEmail) => "Envoyez les logs à ${toEmail}"; + + static String m18(storeName) => "Notez-nous sur ${storeName}"; + + static String m19(storageInGB) => + "3. Vous recevez tous les deux ${storageInGB} GB* gratuits"; + + static String m20(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 m21(endDate) => "Renouvellement le ${endDate}"; + + static String m22(count) => "${count} sélectionné"; + + static String m23(count, yourCount) => + "${count} sélectionné (${yourCount} votre)"; + + static String m24(verificationID) => + "Voici mon ID de vérification : ${verificationID} pour ente.io."; + + static String m25(verificationID) => + "Hé, pouvez-vous confirmer qu\'il s\'agit de votre ID de vérification ente.io : ${verificationID}"; + + static String m26(referralCode, referralStorageInGB) => + "code de parrainage ente : ${referralCode} \n\nAppliquez 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 m27(numberOfPeople) => + "${Intl.plural(numberOfPeople, zero: 'Partagez avec des personnes spécifiques', one: 'Partagé avec 1 personne', other: 'Partagé avec ${numberOfPeople} des gens')}"; + + static String m28(emailIDs) => "Partagé avec ${emailIDs}"; + + static String m29(fileType) => + "Ce ${fileType} sera supprimé de votre appareil."; + + static String m30(fileType) => + "Ce ${fileType} est à la fois dans ente et votre appareil."; + + static String m31(fileType) => "Ce ${fileType} sera supprimé de ente."; + + static String m32(storageAmountInGB) => "${storageAmountInGB} Go"; + + static String m34(endDate) => "Votre abonnement sera annulé le ${endDate}"; + + static String m35(completed, total) => + "${completed}/${total} souvenirs préservés"; + + static String m36(storageAmountInGB) => + "Ils obtiennent aussi ${storageAmountInGB} Go"; + + static String m37(email) => "Ceci est l\'ID de vérification de ${email}"; + + static String m38(email) => "Vérifier ${email}"; + + static String m40(count) => + "${Intl.plural(count, one: '${count} il y a un an', other: '${count} il y a des années')}"; + + static String m41(storageSaved) => + "Vous avez libéré ${storageSaved} avec succès !"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "aNewVersionOfEnteIsAvailable": MessageLookupByLibrary.simpleMessage( + "Une nouvelle version de Wire est disponible."), + "about": MessageLookupByLibrary.simpleMessage("À propos"), + "account": MessageLookupByLibrary.simpleMessage("Compte"), + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("Bienvenue !"), + "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( + "Je comprends que si je perds mon mot de passe, je risque de perdre mes données puisque mes données sont chiffrées de bout en bout."), + "activeSessions": + MessageLookupByLibrary.simpleMessage("Sessions actives"), + "addANewEmail": + MessageLookupByLibrary.simpleMessage("Ajouter un nouvel email"), + "addCollaborator": + MessageLookupByLibrary.simpleMessage("Ajouter un collaborateur"), + "addItem": m42, + "addMore": MessageLookupByLibrary.simpleMessage("Ajouter Plus"), + "addToAlbum": + MessageLookupByLibrary.simpleMessage("Ajouter à l\'album"), + "addToEnte": MessageLookupByLibrary.simpleMessage("Ajouter à ente"), + "addViewer": + MessageLookupByLibrary.simpleMessage("Ajouter un observateur"), + "addedAs": MessageLookupByLibrary.simpleMessage("Ajouté comme"), + "addedSuccessfullyTo": m44, + "addingToFavorites": + MessageLookupByLibrary.simpleMessage("Ajout aux favoris..."), + "advanced": MessageLookupByLibrary.simpleMessage("Avancé"), + "advancedSettings": MessageLookupByLibrary.simpleMessage("Avancé"), + "after1Day": MessageLookupByLibrary.simpleMessage("Après 1 jour"), + "after1Hour": MessageLookupByLibrary.simpleMessage("Après 1 heure"), + "after1Month": MessageLookupByLibrary.simpleMessage("Après 1 mois"), + "after1Week": MessageLookupByLibrary.simpleMessage("Après 1 semaine"), + "after1Year": MessageLookupByLibrary.simpleMessage("Après 1 an"), + "albumOwner": MessageLookupByLibrary.simpleMessage("Propriétaire"), + "albumTitle": MessageLookupByLibrary.simpleMessage("Titre de l\'album"), + "albumUpdated": + MessageLookupByLibrary.simpleMessage("Album mis à jour"), + "albums": MessageLookupByLibrary.simpleMessage("Albums"), + "allClear": MessageLookupByLibrary.simpleMessage("✨ Tout est effacé"), + "allMemoriesPreserved": MessageLookupByLibrary.simpleMessage( + "Tous les souvenirs conservés"), + "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Autoriser les personnes avec le lien à ajouter des photos à l\'album partagé."), + "allowAddingPhotos": MessageLookupByLibrary.simpleMessage( + "Autoriser l\'ajout de photos"), + "allowDownloads": MessageLookupByLibrary.simpleMessage( + "Autoriser les téléchargements"), + "allowPeopleToAddPhotos": MessageLookupByLibrary.simpleMessage( + "Autoriser les personnes à ajouter des photos"), + "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), + "apply": MessageLookupByLibrary.simpleMessage("Appliquer"), + "applyCodeTitle": + MessageLookupByLibrary.simpleMessage("Utiliser le code"), + "archive": MessageLookupByLibrary.simpleMessage("Archiver"), + "archiving": + MessageLookupByLibrary.simpleMessage("Archivage en cours..."), + "areYouSureYouWantToCancel": MessageLookupByLibrary.simpleMessage( + "Es-tu sûre de vouloir annuler?"), + "areYouSureYouWantToChangeYourPlan": + MessageLookupByLibrary.simpleMessage( + "Êtes-vous certains de vouloir changer d\'offre ?"), + "areYouSureYouWantToExit": MessageLookupByLibrary.simpleMessage( + "Êtes-vous sûr de vouloir quitter ?"), + "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( + "Voulez-vous vraiment vous déconnecter ?"), + "areYouSureYouWantToRenew": MessageLookupByLibrary.simpleMessage( + "Êtes-vous sûr de vouloir renouveler ?"), + "askCancelReason": MessageLookupByLibrary.simpleMessage( + "Votre abonnement a été annulé. Souhaitez-vous partager la raison ?"), + "askDeleteReason": MessageLookupByLibrary.simpleMessage( + "Quelle est la principale raison pour laquelle vous supprimez votre compte ?"), + "askYourLovedOnesToShare": MessageLookupByLibrary.simpleMessage( + "Demandez à vos proches de partager"), + "authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage( + "Veuillez vous authentifier pour modifier les paramètres de l\'écran de verrouillage"), + "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( + "Veuillez vous authentifier pour modifier votre adresse e-mail"), + "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( + "Veuillez vous authentifier pour modifier votre mot de passe"), + "authToConfigureTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Veuillez vous authentifier pour configurer l\'authentification à deux facteurs"), + "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Veuillez vous authentifier pour débuter la suppression du compte"), + "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( + "Veuillez vous authentifier pour voir vos sessions actives"), + "authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage( + "Veuillez vous authentifier pour voir vos fichiers cachés"), + "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Veuillez vous authentifier pour afficher votre clé de récupération"), + "available": MessageLookupByLibrary.simpleMessage("Disponible"), + "backedUpFolders": + MessageLookupByLibrary.simpleMessage("Dossiers sauvegardés"), + "backup": MessageLookupByLibrary.simpleMessage("Sauvegarde"), + "backupOverMobileData": MessageLookupByLibrary.simpleMessage( + "Sauvegarde sur données mobiles"), + "backupSettings": + MessageLookupByLibrary.simpleMessage("Paramètres de la sauvegarde"), + "backupVideos": + MessageLookupByLibrary.simpleMessage("Sauvegarde des vidéos"), + "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "cachedData": + MessageLookupByLibrary.simpleMessage("Données mises en cache"), + "canNotUploadToAlbumsOwnedByOthers": MessageLookupByLibrary.simpleMessage( + "Impossible de télécharger dans les albums appartenant à d\'autres personnes"), + "canOnlyCreateLinkForFilesOwnedByYou": + MessageLookupByLibrary.simpleMessage( + "Ne peut créer de lien que pour les fichiers que vous possédez"), + "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( + "Vous ne pouvez supprimer que les fichiers que vous possédez"), + "cancel": MessageLookupByLibrary.simpleMessage("Annuler"), + "cancelOtherSubscription": m0, + "cancelSubscription": + MessageLookupByLibrary.simpleMessage("Annuler l\'abonnement"), + "cannotAddMorePhotosAfterBecomingViewer": m1, + "changeEmail": + MessageLookupByLibrary.simpleMessage("Modifier l\'e-mail"), + "changePassword": + MessageLookupByLibrary.simpleMessage("Modifier le mot de passe"), + "changePasswordTitle": + MessageLookupByLibrary.simpleMessage("Modifier le mot de passe"), + "changePermissions": + MessageLookupByLibrary.simpleMessage("Modifier les permissions ?"), + "checkForUpdates": + MessageLookupByLibrary.simpleMessage("Vérifier les mises à jour"), + "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( + "Veuillez consulter votre boîte de courriels (et les indésirables) pour compléter la vérification"), + "checking": MessageLookupByLibrary.simpleMessage("Vérification..."), + "claimFreeStorage": MessageLookupByLibrary.simpleMessage( + "Réclamer le stockage gratuit"), + "claimMore": MessageLookupByLibrary.simpleMessage("Réclamez plus !"), + "claimed": MessageLookupByLibrary.simpleMessage("Réclamée"), + "claimedStorageSoFar": m2, + "clearCaches": + MessageLookupByLibrary.simpleMessage("Nettoyer le cache"), + "close": MessageLookupByLibrary.simpleMessage("Fermer"), + "clubByCaptureTime": + MessageLookupByLibrary.simpleMessage("Durée du Club par capture"), + "codeAppliedPageTitle": + MessageLookupByLibrary.simpleMessage("Code appliqué"), + "codeCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Code copié dans le presse-papiers"), + "codeUsedByYou": + MessageLookupByLibrary.simpleMessage("Code utilisé par vous"), + "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( + "Créez un lien pour permettre aux gens 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 collecter des photos d\'événement."), + "collaborativeLink": + MessageLookupByLibrary.simpleMessage("Lien collaboratif"), + "collaborativeLinkCreatedFor": m45, + "collaborator": MessageLookupByLibrary.simpleMessage("Collaborateur"), + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": + MessageLookupByLibrary.simpleMessage( + "Les collaborateurs peuvent ajouter des photos et des vidéos à l\'album partagé."), + "collectEventPhotos": MessageLookupByLibrary.simpleMessage( + "Collecter des photos de l\'événement"), + "collectPhotos": + MessageLookupByLibrary.simpleMessage("Récupérer les photos"), + "confirm": MessageLookupByLibrary.simpleMessage("Confirmer"), + "confirm2FADisable": MessageLookupByLibrary.simpleMessage( + "Voulez-vous vraiment désactiver l\'authentification à deux facteurs ?"), + "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Confirmer la suppression du compte"), + "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( + "Oui, je veux supprimer définitivement ce compte et toutes ses données."), + "confirmPassword": + MessageLookupByLibrary.simpleMessage("Confirmer le mot de passe"), + "confirmPlanChange": MessageLookupByLibrary.simpleMessage( + "Confirmer le changement de l\'offre"), + "confirmRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Confirmer la clé de récupération"), + "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Confirmer la clé de récupération"), + "contactSupport": + MessageLookupByLibrary.simpleMessage("Contacter l\'assistance"), + "contactToManageSubscription": m4, + "continueLabel": MessageLookupByLibrary.simpleMessage("Continuer"), + "copyEmailAddress": + MessageLookupByLibrary.simpleMessage("Copier l’adresse e-mail"), + "copyLink": MessageLookupByLibrary.simpleMessage("Copier le lien"), + "copypasteThisCodentoYourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Copiez-collez ce code\ndans votre application d\'authentification"), + "couldNotFreeUpSpace": MessageLookupByLibrary.simpleMessage( + "Impossible de libérer de l\'espace"), + "createAccount": + MessageLookupByLibrary.simpleMessage("Créer un compte"), + "createAlbumActionHint": MessageLookupByLibrary.simpleMessage( + "Appuyez longuement pour sélectionner des photos et cliquez sur + pour créer un album"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("Créer un nouveau compte"), + "createOrSelectAlbum": MessageLookupByLibrary.simpleMessage( + "Créer ou sélectionner un album"), + "createPublicLink": + MessageLookupByLibrary.simpleMessage("Créer un lien public"), + "creatingLink": + MessageLookupByLibrary.simpleMessage("Création du lien..."), + "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( + "Mise à jour critique disponible"), + "currentUsageIs": MessageLookupByLibrary.simpleMessage( + "L\'utilisation actuelle est "), + "custom": MessageLookupByLibrary.simpleMessage("Personnaliser"), + "darkTheme": MessageLookupByLibrary.simpleMessage("Sombre"), + "decrypting": MessageLookupByLibrary.simpleMessage("Déchiffrage..."), + "deduplicateFiles": + MessageLookupByLibrary.simpleMessage("Déduplication de fichiers"), + "delete": MessageLookupByLibrary.simpleMessage("Supprimer"), + "deleteAccount": + MessageLookupByLibrary.simpleMessage("Supprimer mon compte"), + "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( + "Nous sommes désolés de vous voir partir. Veuillez partager vos commentaires pour nous aider à nous améliorer."), + "deleteAccountPermanentlyButton": MessageLookupByLibrary.simpleMessage( + "Supprimer définitivement le compte"), + "deleteAlbum": + MessageLookupByLibrary.simpleMessage("Supprimer l\'album"), + "deleteAlbumDialog": MessageLookupByLibrary.simpleMessage( + "Supprimer aussi les photos (et vidéos) présentes dans cet album depuis tous les autres albums dont ils font partie ?"), + "deleteAlbumsDialogBody": MessageLookupByLibrary.simpleMessage( + "Ceci supprimera tous les albums vides. Ceci est utile lorsque vous voulez réduire l\'encombrement dans votre liste d\'albums."), + "deleteAll": MessageLookupByLibrary.simpleMessage("Tout Supprimer"), + "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( + "Vous allez supprimer définitivement votre compte et toutes ses données.\nCette action est irréversible."), + "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( + "Veuillez envoyer un e-mail à account-deletion@ente.io à partir de votre adresse e-mail enregistrée."), + "deleteEmptyAlbums": + MessageLookupByLibrary.simpleMessage("Supprimer les albums vides"), + "deleteEmptyAlbumsWithQuestionMark": + MessageLookupByLibrary.simpleMessage( + "Supprimer les albums vides ?"), + "deleteFromBoth": + MessageLookupByLibrary.simpleMessage("Supprimer des deux"), + "deleteFromDevice": + MessageLookupByLibrary.simpleMessage("Supprimer de l\'appareil"), + "deleteFromEnte": + MessageLookupByLibrary.simpleMessage("Supprimer de ente"), + "deletePhotos": + MessageLookupByLibrary.simpleMessage("Supprimer des photos"), + "deleteProgress": m46, + "deleteReason1": MessageLookupByLibrary.simpleMessage( + "Il manque une fonction clé dont j\'ai besoin"), + "deleteReason2": MessageLookupByLibrary.simpleMessage( + "L\'application ou une certaine fonctionnalité ne se comporte pas \ncomme je pense qu\'elle devrait"), + "deleteReason3": MessageLookupByLibrary.simpleMessage( + "J\'ai trouvé un autre service que je préfère"), + "deleteReason4": + MessageLookupByLibrary.simpleMessage("Ma raison n\'est pas listée"), + "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( + "Votre demande sera traitée en moins de 72 heures."), + "deleteSharedAlbum": MessageLookupByLibrary.simpleMessage( + "Supprimer l\'album partagé ?"), + "deleteSharedAlbumDialogBody": MessageLookupByLibrary.simpleMessage( + "L\'album sera supprimé pour tout le monde\n\nVous perdrez l\'accès aux photos partagées dans cet album qui est détenues par d\'autres personnes"), + "deselectAll": + MessageLookupByLibrary.simpleMessage("Tout déselectionner"), + "details": MessageLookupByLibrary.simpleMessage("Détails"), + "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( + "Désactiver le verrouillage de l\'écran de l\'appareil lorsque ente est au premier plan et il y a une sauvegarde en cours. Ce n\'est normalement pas nécessaire, mais peut aider les gros téléchargements et les premières importations de grandes bibliothèques plus rapidement."), + "didYouKnow": MessageLookupByLibrary.simpleMessage("Le savais-tu ?"), + "disableAutoLock": MessageLookupByLibrary.simpleMessage( + "Désactiver le verrouillage automatique"), + "disableDownloadWarningBody": MessageLookupByLibrary.simpleMessage( + "Les téléspectateurs 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": m5, + "disableTwofactor": MessageLookupByLibrary.simpleMessage( + "Désactiver la double-authentification"), + "disablingTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Désactiver la double-authentification..."), + "discord": MessageLookupByLibrary.simpleMessage("Discord"), + "dismiss": MessageLookupByLibrary.simpleMessage("Rejeter"), + "doThisLater": MessageLookupByLibrary.simpleMessage("Plus tard"), + "done": MessageLookupByLibrary.simpleMessage("Terminé"), + "doubleYourStorage": MessageLookupByLibrary.simpleMessage( + "Doubler votre espace de stockage"), + "download": MessageLookupByLibrary.simpleMessage("Télécharger"), + "downloadFailed": + MessageLookupByLibrary.simpleMessage("Échec du téléchargement"), + "downloading": + MessageLookupByLibrary.simpleMessage("Téléchargement en cours..."), + "dropSupportEmail": m6, + "duplicateFileCountWithStorageSaved": m7, + "edit": MessageLookupByLibrary.simpleMessage("Éditer"), + "eligible": MessageLookupByLibrary.simpleMessage("éligible"), + "email": MessageLookupByLibrary.simpleMessage("E-mail"), + "emailChangedTo": m47, + "emailNoEnteAccount": m8, + "emailYourLogs": + MessageLookupByLibrary.simpleMessage("Envoyez vos logs par e-mail"), + "empty": MessageLookupByLibrary.simpleMessage("Vide"), + "emptyTrash": + MessageLookupByLibrary.simpleMessage("Vider la corbeille ?"), + "encryptingBackup": MessageLookupByLibrary.simpleMessage( + "Chiffrement de la sauvegarde..."), + "encryption": MessageLookupByLibrary.simpleMessage("Chiffrement"), + "encryptionKeys": + MessageLookupByLibrary.simpleMessage("Clés de chiffrement"), + "enteSubscriptionPitch": MessageLookupByLibrary.simpleMessage( + "ente conserve vos souvenirs, donc ils sont toujours disponibles pour vous, même si vous perdez votre appareil."), + "enteSubscriptionShareWithFamily": MessageLookupByLibrary.simpleMessage( + "Vous pouvez également ajouter votre famille à votre forfait."), + "enterAlbumName": + MessageLookupByLibrary.simpleMessage("Saisir un nom d\'album"), + "enterCode": MessageLookupByLibrary.simpleMessage("Entrer le code"), + "enterCodeDescription": MessageLookupByLibrary.simpleMessage( + "Entrez le code fourni par votre ami pour réclamer de l\'espace de stockage gratuit pour vous deux"), + "enterEmail": MessageLookupByLibrary.simpleMessage("Entrer e-mail"), + "enterFileName": + MessageLookupByLibrary.simpleMessage("Entrez le nom du fichier"), + "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Entrez un nouveau mot de passe que nous pouvons utiliser pour chiffrer vos données"), + "enterPassword": + MessageLookupByLibrary.simpleMessage("Saisissez le mot de passe"), + "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Entrez un mot de passe que nous pouvons utiliser pour chiffrer vos données"), + "enterReferralCode": MessageLookupByLibrary.simpleMessage( + "Entrez le code de parrainage"), + "enterThe6digitCodeFromnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Entrez le code à 6 chiffres de\nvotre application d\'authentification"), + "enterValidEmail": MessageLookupByLibrary.simpleMessage( + "Veuillez entrer une adresse email valide."), + "enterYourEmailAddress": + MessageLookupByLibrary.simpleMessage("Entrez votre adresse e-mail"), + "enterYourPassword": + MessageLookupByLibrary.simpleMessage("Entrez votre mot de passe"), + "enterYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Entrez votre clé de récupération"), + "error": MessageLookupByLibrary.simpleMessage("Erreur"), + "exif": MessageLookupByLibrary.simpleMessage("EXIF"), + "expiredLinkInfo": MessageLookupByLibrary.simpleMessage( + "Ce lien a expiré. Veuillez sélectionner un nouveau délai d\'expiration ou désactiver l\'expiration du lien."), + "exportLogs": MessageLookupByLibrary.simpleMessage("Exporter les logs"), + "exportYourData": + MessageLookupByLibrary.simpleMessage("Exportez vos données"), + "failedToApplyCode": MessageLookupByLibrary.simpleMessage( + "Impossible d\'appliquer le code"), + "failedToCancel": + MessageLookupByLibrary.simpleMessage("Échec de l\'annulation"), + "failedToFetchOriginalForEdit": MessageLookupByLibrary.simpleMessage( + "Impossible de récupérer l\'original pour l\'édition"), + "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( + "Impossible de récupérer les détails du parrainage. Veuillez réessayer plus tard."), + "failedToLoadAlbums": MessageLookupByLibrary.simpleMessage( + "Impossible de charger les albums"), + "failedToRenew": + MessageLookupByLibrary.simpleMessage("Échec du renouvellement"), + "familyPlans": MessageLookupByLibrary.simpleMessage("Forfaits famille"), + "faq": MessageLookupByLibrary.simpleMessage("FAQ"), + "faqs": MessageLookupByLibrary.simpleMessage("FAQ"), + "favorite": MessageLookupByLibrary.simpleMessage("Favori"), + "feedback": MessageLookupByLibrary.simpleMessage("Commentaires"), + "fileSavedToGallery": MessageLookupByLibrary.simpleMessage( + "Fichier enregistré dans la galerie"), + "filesDeleted": + MessageLookupByLibrary.simpleMessage("Fichiers supprimés"), + "forgotPassword": + MessageLookupByLibrary.simpleMessage("Mot de passe oublié"), + "freeStorageClaimed": + MessageLookupByLibrary.simpleMessage("Stockage gratuit réclamé"), + "freeStorageOnReferralSuccess": m9, + "freeStorageUsable": + MessageLookupByLibrary.simpleMessage("Stockage gratuit utilisable"), + "freeTrial": MessageLookupByLibrary.simpleMessage("Essai gratuit"), + "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage( + "Libérer de l\'espace sur l\'appareil"), + "general": MessageLookupByLibrary.simpleMessage("Général"), + "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( + "Génération des clés de chiffrement..."), + "googlePlayId": + MessageLookupByLibrary.simpleMessage("Identifiant Google Play"), + "hidden": MessageLookupByLibrary.simpleMessage("Masqué"), + "hide": MessageLookupByLibrary.simpleMessage("Masquer"), + "howItWorks": + MessageLookupByLibrary.simpleMessage("Comment ça fonctionne"), + "howToViewShareeVerificationID": MessageLookupByLibrary.simpleMessage( + "Demandez-leur d\'appuyer longuement sur leur adresse e-mail sur l\'écran des paramètres et de vérifier que les identifiants des deux appareils correspondent."), + "ignoredFolderUploadReason": MessageLookupByLibrary.simpleMessage( + "Certains fichiers de cet album sont ignorés parce qu\'ils avaient été précédemment supprimés de ente."), + "importing": + MessageLookupByLibrary.simpleMessage("Importation en cours..."), + "incorrectPasswordTitle": + MessageLookupByLibrary.simpleMessage("Mot de passe incorrect"), + "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage( + "La clé de récupération que vous avez entrée est incorrecte"), + "incorrectRecoveryKeyTitle": MessageLookupByLibrary.simpleMessage( + "Clé de récupération non valide"), + "insecureDevice": + MessageLookupByLibrary.simpleMessage("Appareil non sécurisé"), + "installManually": + MessageLookupByLibrary.simpleMessage("Installation manuelle"), + "invalidEmailAddress": + MessageLookupByLibrary.simpleMessage("Adresse e-mail invalide"), + "invalidKey": MessageLookupByLibrary.simpleMessage("Clé invalide"), + "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( + "La clé de récupération que vous avez saisie n\'est pas valide. Veuillez vous assurer qu\'elle "), + "inviteToEnte": MessageLookupByLibrary.simpleMessage("Inviter à ente"), + "inviteYourFriends": + MessageLookupByLibrary.simpleMessage("Invite tes ami(e)s"), + "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": m11, + "itemSelectedCount": m53, + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": + MessageLookupByLibrary.simpleMessage( + "Les éléments montrent le nombre de jours restants avant la suppression définitive"), + "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( + "Les éléments sélectionnés seront supprimés de cet album"), + "keepPhotos": + MessageLookupByLibrary.simpleMessage("Conserver les photos"), + "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( + "Veuillez nous aider avec cette information"), + "language": MessageLookupByLibrary.simpleMessage("Langue"), + "lastUpdated": + MessageLookupByLibrary.simpleMessage("Dernière mise à jour"), + "leaveAlbum": MessageLookupByLibrary.simpleMessage("Quitter l\'album"), + "leaveSharedAlbum": + MessageLookupByLibrary.simpleMessage("Quitter l\'album partagé?"), + "lightTheme": MessageLookupByLibrary.simpleMessage("Clair"), + "linkCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Lien copié dans le presse-papiers"), + "linkDeviceLimit": + MessageLookupByLibrary.simpleMessage("Limite d\'appareil"), + "linkEnabled": MessageLookupByLibrary.simpleMessage("Activé"), + "linkExpired": MessageLookupByLibrary.simpleMessage("Expiré"), + "linkExpiresOn": m12, + "linkExpiry": + MessageLookupByLibrary.simpleMessage("Expiration du lien"), + "linkHasExpired": + MessageLookupByLibrary.simpleMessage("Le lien a expiré"), + "linkNeverExpires": MessageLookupByLibrary.simpleMessage("Jamais"), + "loadingGallery": + MessageLookupByLibrary.simpleMessage("Chargement de la galerie..."), + "loadingMessage": + MessageLookupByLibrary.simpleMessage("Chargement de vos photos..."), + "localGallery": MessageLookupByLibrary.simpleMessage("Galerie locale"), + "lockButtonLabel": MessageLookupByLibrary.simpleMessage("Verrouiller"), + "lockScreenEnablePreSteps": MessageLookupByLibrary.simpleMessage( + "Pour activer l\'écran de verrouillage, veuillez configurer le code d\'accès de l\'appareil ou le verrouillage de l\'écran dans les paramètres de votre système."), + "lockscreen": + MessageLookupByLibrary.simpleMessage("Ecran de vérouillage"), + "logInLabel": MessageLookupByLibrary.simpleMessage("Se connecter"), + "loggingOut": MessageLookupByLibrary.simpleMessage("Deconnexion..."), + "loginTerms": MessageLookupByLibrary.simpleMessage( + "En cliquant sur connecter, j\'accepte les conditions d\'utilisation et la politique de confidentialité"), + "logout": MessageLookupByLibrary.simpleMessage("Déconnexion"), + "logsDialogBody": MessageLookupByLibrary.simpleMessage( + "Cela enverra des logs pour nous aider à déboguer votre problème. Veuillez noter que les noms de fichiers seront inclus pour aider à suivre les problèmes avec des fichiers spécifiques."), + "lostDevice": MessageLookupByLibrary.simpleMessage("Appareil perdu ?"), + "manage": MessageLookupByLibrary.simpleMessage("Gérer"), + "manageDeviceStorage": MessageLookupByLibrary.simpleMessage( + "Gérer le stockage de l\'appareil"), + "manageFamily": + MessageLookupByLibrary.simpleMessage("Gérer la famille"), + "manageLink": MessageLookupByLibrary.simpleMessage("Gérer le lien"), + "manageParticipants": MessageLookupByLibrary.simpleMessage("Gérer"), + "manageSubscription": + MessageLookupByLibrary.simpleMessage("Gérer l\'abonnement"), + "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), + "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), + "maxDeviceLimitSpikeHandling": m13, + "memoryCount": m14, + "merchandise": MessageLookupByLibrary.simpleMessage("Marchandise"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Modéré"), + "monthly": MessageLookupByLibrary.simpleMessage("Mensuel"), + "moveItem": m54, + "moveToAlbum": + MessageLookupByLibrary.simpleMessage("Déplacer vers l\'album"), + "movedSuccessfullyTo": m55, + "movedToTrash": + MessageLookupByLibrary.simpleMessage("Déplacé dans la corbeille"), + "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Déplacement des fichiers vers l\'album..."), + "name": MessageLookupByLibrary.simpleMessage("Nom"), + "never": MessageLookupByLibrary.simpleMessage("Jamais"), + "newAlbum": MessageLookupByLibrary.simpleMessage("Nouvel album"), + "newest": MessageLookupByLibrary.simpleMessage("Le plus récent"), + "no": MessageLookupByLibrary.simpleMessage("Non"), + "noDeviceThatCanBeDeleted": MessageLookupByLibrary.simpleMessage( + "Vous n\'avez pas de fichiers sur cet appareil qui peuvent être supprimés"), + "noDuplicates": MessageLookupByLibrary.simpleMessage("✨ Aucun doublon"), + "noRecoveryKey": + MessageLookupByLibrary.simpleMessage("Aucune clé de récupération?"), + "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( + "En raison de notre protocole de chiffrement de bout en bout, vos données ne peuvent pas être déchiffré sans votre mot de passe ou clé de récupération"), + "noResults": MessageLookupByLibrary.simpleMessage("Aucun résultat"), + "ok": MessageLookupByLibrary.simpleMessage("OK"), + "oops": MessageLookupByLibrary.simpleMessage("Oups"), + "oopsSomethingWentWrong": MessageLookupByLibrary.simpleMessage( + "Oups, une erreur est arrivée"), + "optionalAsShortAsYouLike": MessageLookupByLibrary.simpleMessage( + "Optionnel, aussi court que vous le souhaitez..."), + "orPickAnExistingOne": MessageLookupByLibrary.simpleMessage( + "Sélectionner un fichier existant"), + "password": MessageLookupByLibrary.simpleMessage("Mot de passe"), + "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( + "Le mot de passe a été modifié"), + "passwordLock": + MessageLookupByLibrary.simpleMessage("Mot de passe verrou"), + "passwordStrength": m15, + "passwordWarning": MessageLookupByLibrary.simpleMessage( + "Nous ne stockons pas ce mot de passe, donc si vous l\'oubliez, nous ne pouvons pas déchiffrer vos données"), + "paymentDetails": + MessageLookupByLibrary.simpleMessage("Détails de paiement"), + "pendingSync": + MessageLookupByLibrary.simpleMessage("Synchronisation en attente"), + "peopleUsingYourCode": MessageLookupByLibrary.simpleMessage( + "Personnes utilisant votre code"), + "permDeleteWarning": MessageLookupByLibrary.simpleMessage( + "Tous les éléments de la corbeille seront définitivement supprimés\n\nCette action ne peut pas être annulée"), + "permanentlyDelete": + MessageLookupByLibrary.simpleMessage("Supprimer définitivement"), + "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( + "Supprimer définitivement de l\'appareil ?"), + "photoGridSize": + MessageLookupByLibrary.simpleMessage("Taille de la grille photo"), + "photoSmallCase": MessageLookupByLibrary.simpleMessage("photo"), + "photosAddedByYouWillBeRemovedFromTheAlbum": + MessageLookupByLibrary.simpleMessage( + "Les photos ajoutées par vous seront retirées de l\'album"), + "playstoreSubscription": + MessageLookupByLibrary.simpleMessage("Abonnement au PlayStore"), + "pleaseEmailUsAt": m56, + "pleaseSendTheLogsTo": m57, + "pleaseTryAgain": + MessageLookupByLibrary.simpleMessage("Veuillez réessayer"), + "pleaseWait": + MessageLookupByLibrary.simpleMessage("Veuillez patienter..."), + "pleaseWaitForSometimeBeforeRetrying": + MessageLookupByLibrary.simpleMessage( + "Veuillez attendre quelque temps avant de réessayer"), + "preparingLogs": + MessageLookupByLibrary.simpleMessage("Préparation des journaux..."), + "pressAndHoldToPlayVideo": MessageLookupByLibrary.simpleMessage( + "Appuyez et maintenez enfoncé pour lire la vidéo"), + "privacy": MessageLookupByLibrary.simpleMessage("Confidentialité"), + "privacyPolicyTitle": MessageLookupByLibrary.simpleMessage( + "Politique de Confidentialité"), + "publicLinkCreated": + MessageLookupByLibrary.simpleMessage("Lien public créé"), + "publicLinkEnabled": + MessageLookupByLibrary.simpleMessage("Lien public activé"), + "rateUs": MessageLookupByLibrary.simpleMessage("Évaluez-nous"), + "rateUsOnStore": m18, + "recover": MessageLookupByLibrary.simpleMessage("Restaurer"), + "recoverAccount": + MessageLookupByLibrary.simpleMessage("Récupérer un compte"), + "recoverButton": MessageLookupByLibrary.simpleMessage("Récupérer"), + "recoveryKey": + MessageLookupByLibrary.simpleMessage("Clé de récupération"), + "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Clé de récupération copiée dans le presse-papiers"), + "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( + "Si vous oubliez votre mot de passe, la seule façon de récupérer vos données sera grâce à cette clé."), + "recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage( + "Nous ne stockons pas cette clé, veuillez enregistrer cette clé de 24 mots dans un endroit sûr."), + "recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage( + "Génial ! Votre clé de récupération est valide. Merci de votre vérification.\n\nN\'oubliez pas de garder votre clé de récupération sauvegardée."), + "recoveryKeyVerified": MessageLookupByLibrary.simpleMessage( + "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 entrer votre clé de récupération ici pour vous assurer que vous l\'avez enregistrée correctement."), + "recoverySuccessful": + MessageLookupByLibrary.simpleMessage("Récupération réussie !"), + "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( + "L\'appareil actuel n\'est pas assez puissant pour vérifier votre mot de passe, mais nous pouvons régénérer d\'une manière qui fonctionne avec tous les appareils.\n\nVeuillez vous connecter à l\'aide de votre clé de récupération et régénérer votre mot de passe (vous pouvez réutiliser le même si vous le souhaitez)."), + "recreatePasswordTitle": + MessageLookupByLibrary.simpleMessage("Recréer le mot de passe"), + "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( + "Parrainez des amis et 2x votre abonnement"), + "referralStep1": MessageLookupByLibrary.simpleMessage( + "1. Donnez ce code à vos amis"), + "referralStep2": MessageLookupByLibrary.simpleMessage( + "2. Ils s\'inscrivent à une offre payante"), + "referralStep3": m19, + "referrals": MessageLookupByLibrary.simpleMessage("Parrainages"), + "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( + "Les recommandations sont actuellement en pause"), + "remindToEmptyDeviceTrash": MessageLookupByLibrary.simpleMessage( + "Également vide \"récemment supprimé\" de \"Paramètres\" -> \"Stockage\" pour réclamer l\'espace libéré"), + "remindToEmptyEnteTrash": MessageLookupByLibrary.simpleMessage( + "Vide aussi votre \"Corbeille\" pour réclamer l\'espace libéré"), + "remoteImages": + MessageLookupByLibrary.simpleMessage("Images distantes"), + "remoteThumbnails": + MessageLookupByLibrary.simpleMessage("Miniatures distantes"), + "remoteVideos": + MessageLookupByLibrary.simpleMessage("Vidéos distantes"), + "remove": MessageLookupByLibrary.simpleMessage("Enlever"), + "removeDuplicates": + MessageLookupByLibrary.simpleMessage("Supprimer les doublons"), + "removeFromAlbum": + MessageLookupByLibrary.simpleMessage("Retirer de l\'album"), + "removeFromAlbumTitle": + MessageLookupByLibrary.simpleMessage("Retirer de l\'album ?"), + "removeFromFavorite": + MessageLookupByLibrary.simpleMessage("Retirer des favoris"), + "removeLink": MessageLookupByLibrary.simpleMessage("Supprimer le lien"), + "removeParticipant": + MessageLookupByLibrary.simpleMessage("Supprimer le participant"), + "removeParticipantBody": m20, + "removePublicLink": + MessageLookupByLibrary.simpleMessage("Supprimer le lien public"), + "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( + "Certains des objets que vous êtes en train de retirer ont été ajoutés par d\'autres personnes, vous perdrez l\'accès vers ces objets"), + "removeWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Enlever?"), + "removingFromFavorites": + MessageLookupByLibrary.simpleMessage("Suppression des favoris…"), + "rename": MessageLookupByLibrary.simpleMessage("Renommer"), + "renameAlbum": + MessageLookupByLibrary.simpleMessage("Renommer l\'album"), + "renameFile": + MessageLookupByLibrary.simpleMessage("Renommer le fichier"), + "renewSubscription": + MessageLookupByLibrary.simpleMessage("Renouveler l’abonnement"), + "renewsOn": m21, + "reportABug": MessageLookupByLibrary.simpleMessage("Signaler un bug"), + "reportBug": MessageLookupByLibrary.simpleMessage("Signaler un bug"), + "resendEmail": + MessageLookupByLibrary.simpleMessage("Renvoyer le courriel"), + "resetIgnoredFiles": MessageLookupByLibrary.simpleMessage( + "Réinitialiser les fichiers ignorés"), + "resetPasswordTitle": MessageLookupByLibrary.simpleMessage( + "Réinitialiser le mot de passe"), + "restore": MessageLookupByLibrary.simpleMessage("Restaurer"), + "restoreToAlbum": + MessageLookupByLibrary.simpleMessage("Restaurer vers l\'album"), + "restoringFiles": MessageLookupByLibrary.simpleMessage( + "Restauration des fichiers..."), + "retry": MessageLookupByLibrary.simpleMessage("Réessayer"), + "reviewDeduplicateItems": MessageLookupByLibrary.simpleMessage( + "Veuillez vérifier et supprimer les éléments que vous croyez dupliqués."), + "saveKey": MessageLookupByLibrary.simpleMessage("Enregistrer la clé"), + "saveYourRecoveryKeyIfYouHaventAlready": + MessageLookupByLibrary.simpleMessage( + "Enregistrez votre clé de récupération si vous ne l\'avez pas déjà fait"), + "scanCode": MessageLookupByLibrary.simpleMessage("Scanner le code"), + "scanThisBarcodeWithnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Scannez ce code-barres avec\nvotre application d\'authentification"), + "searchByAlbumNameHint": + MessageLookupByLibrary.simpleMessage("Nom de l\'album"), + "security": MessageLookupByLibrary.simpleMessage("Sécurité"), + "selectAlbum": + MessageLookupByLibrary.simpleMessage("Sélectionner album"), + "selectAll": MessageLookupByLibrary.simpleMessage("Tout sélectionner"), + "selectFoldersForBackup": MessageLookupByLibrary.simpleMessage( + "Sélectionner les dossiers à sauvegarder"), + "selectReason": + MessageLookupByLibrary.simpleMessage("Sélectionner une raison"), + "selectYourPlan": + MessageLookupByLibrary.simpleMessage("Sélectionner votre offre"), + "selectedFilesAreNotOnEnte": MessageLookupByLibrary.simpleMessage( + "Les fichiers sélectionnés ne sont pas sur ente"), + "selectedFoldersWillBeEncryptedAndBackedUp": + MessageLookupByLibrary.simpleMessage( + "Les dossiers sélectionnés seront cryptés et sauvegardés"), + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": + MessageLookupByLibrary.simpleMessage( + "Les éléments sélectionnés seront supprimés de tous les albums et déplacés dans la corbeille."), + "selectedPhotos": m22, + "selectedPhotosWithYours": m23, + "send": MessageLookupByLibrary.simpleMessage("Envoyer"), + "sendEmail": MessageLookupByLibrary.simpleMessage("Envoyer un e-mail"), + "sendInvite": + MessageLookupByLibrary.simpleMessage("Envoyer Invitations"), + "sendLink": MessageLookupByLibrary.simpleMessage("Envoyer le lien"), + "sessionExpired": + MessageLookupByLibrary.simpleMessage("Session expirée"), + "setAPassword": + MessageLookupByLibrary.simpleMessage("Définir un mot de passe"), + "setAs": MessageLookupByLibrary.simpleMessage("Définir comme"), + "setPasswordTitle": + MessageLookupByLibrary.simpleMessage("Définir le mot de passe"), + "setupComplete": + MessageLookupByLibrary.simpleMessage("Configuration fini"), + "share": MessageLookupByLibrary.simpleMessage("Partager"), + "shareALink": MessageLookupByLibrary.simpleMessage("Partager le lien"), + "shareAlbumHint": MessageLookupByLibrary.simpleMessage( + "Ouvrez un album et appuyez sur le bouton de partage en haut à droite pour le partager."), + "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage( + "Partagez un album maintenant"), + "shareLink": MessageLookupByLibrary.simpleMessage("Partager le lien"), + "shareMyVerificationID": m24, + "shareTextConfirmOthersVerificationID": m25, + "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( + "Téléchargez ente pour que nous puissions facilement partager des photos et des vidéos de qualité originale\n\nhttps://ente.io/#download"), + "shareTextReferralCode": m26, + "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( + "Partager avec des utilisateurs non-ente"), + "shareWithPeopleSectionTitle": m27, + "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( + "Créez des albums partagés et collaboratifs avec d\'autres utilisateurs de ente, y compris des utilisateurs sur des plans gratuits."), + "sharedByMe": MessageLookupByLibrary.simpleMessage("Partagé par moi"), + "sharedWith": m28, + "sharing": MessageLookupByLibrary.simpleMessage("Partage..."), + "signUpTerms": MessageLookupByLibrary.simpleMessage( + "J\'accepte les conditions d\'utilisation et la politique de confidentialité"), + "singleFileDeleteFromDevice": m29, + "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( + "Il sera supprimé de tous les albums."), + "singleFileInBothLocalAndRemote": m30, + "singleFileInRemoteOnly": m31, + "skip": MessageLookupByLibrary.simpleMessage("Ignorer"), + "social": MessageLookupByLibrary.simpleMessage("Réseaux Sociaux"), + "someItemsAreInBothEnteAndYourDevice": + MessageLookupByLibrary.simpleMessage( + "Certains éléments sont à la fois dans ente et votre appareil."), + "someOfTheFilesYouAreTryingToDeleteAre": + MessageLookupByLibrary.simpleMessage( + "Certains des fichiers que vous essayez de supprimer ne sont disponibles que sur votre appareil et ne peuvent pas être récupérés s\'ils sont supprimés"), + "someoneSharingAlbumsWithYouShouldSeeTheSameId": + MessageLookupByLibrary.simpleMessage( + "Quelqu\'un qui partage des albums avec vous devrait voir le même ID sur son appareil."), + "somethingWentWrong": + MessageLookupByLibrary.simpleMessage("Un problème est survenu"), + "somethingWentWrongPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Quelque chose s\'est mal passé, veuillez recommencer"), + "sorry": MessageLookupByLibrary.simpleMessage("Désolé"), + "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( + "Désolé, impossible d\'ajouter aux favoris !"), + "sorryCouldNotRemoveFromFavorites": + MessageLookupByLibrary.simpleMessage( + "Désolé, impossible de supprimer des favoris !"), + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": + MessageLookupByLibrary.simpleMessage( + "Désolé, nous n\'avons pas pu générer de clés sécurisées sur cet appareil.\n\nVeuillez vous inscrire depuis un autre appareil."), + "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Succès"), + "storageInGB": m32, + "strongStrength": MessageLookupByLibrary.simpleMessage("Fort"), + "subWillBeCancelledOn": m34, + "subscribe": MessageLookupByLibrary.simpleMessage("S\'abonner"), + "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( + "Il semble que votre abonnement ait expiré. Veuillez vous abonner pour activer le partage."), + "subscription": MessageLookupByLibrary.simpleMessage("Abonnement"), + "success": MessageLookupByLibrary.simpleMessage("Succès"), + "successfullyArchived": + MessageLookupByLibrary.simpleMessage("Archivé avec succès"), + "successfullyUnarchived": + MessageLookupByLibrary.simpleMessage("Désarchivé avec succès"), + "suggestFeatures": MessageLookupByLibrary.simpleMessage( + "Suggérer des fonctionnalités"), + "support": MessageLookupByLibrary.simpleMessage("Support"), + "syncProgress": m35, + "syncStopped": + MessageLookupByLibrary.simpleMessage("Synchronisation arrêtée ?"), + "syncing": MessageLookupByLibrary.simpleMessage( + "En cours de synchronisation..."), + "systemTheme": MessageLookupByLibrary.simpleMessage("Système"), + "tapToCopy": MessageLookupByLibrary.simpleMessage("taper pour copier"), + "tapToEnterCode": + MessageLookupByLibrary.simpleMessage("Appuyez pour entrer un code"), + "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("Quitte"), + "terminateSession": + MessageLookupByLibrary.simpleMessage("Quitter la session ?"), + "terms": MessageLookupByLibrary.simpleMessage("Conditions"), + "termsOfServicesTitle": + MessageLookupByLibrary.simpleMessage("Conditions d\'utilisation"), + "thankYou": MessageLookupByLibrary.simpleMessage("Merci"), + "thankYouForSubscribing": + MessageLookupByLibrary.simpleMessage("Merci de vous être abonné !"), + "theDownloadCouldNotBeCompleted": MessageLookupByLibrary.simpleMessage( + "Le téléchargement n\'a pas pu être terminé"), + "theme": MessageLookupByLibrary.simpleMessage("Thème"), + "theseItemsWillBeDeletedFromYourDevice": + MessageLookupByLibrary.simpleMessage( + "Ces éléments seront supprimés de votre appareil."), + "theyAlsoGetXGb": m36, + "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( + "Ils seront supprimés de tous les albums."), + "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( + "Cette action ne peut pas être annulée"), + "thisAlbumAlreadyHDACollaborativeLink": + MessageLookupByLibrary.simpleMessage( + "Cet album a déjà un lien collaboratif"), + "thisCanBeUsedToRecoverYourAccountIfYou": + MessageLookupByLibrary.simpleMessage( + "Cela peut être utilisé pour récupérer votre compte si vous perdez votre deuxième facteur"), + "thisDevice": MessageLookupByLibrary.simpleMessage("Cet appareil"), + "thisIsPersonVerificationId": m37, + "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage( + "Ceci est votre ID de vérification"), + "thisWillLogYouOutOfTheFollowingDevice": + MessageLookupByLibrary.simpleMessage( + "Cela vous déconnectera de l\'appareil suivant :"), + "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( + "Cela vous déconnectera de cet appareil !"), + "todaysLogs": MessageLookupByLibrary.simpleMessage("Journaux du jour"), + "total": MessageLookupByLibrary.simpleMessage("total"), + "totalSize": MessageLookupByLibrary.simpleMessage("Taille totale"), + "trash": MessageLookupByLibrary.simpleMessage("Corbeille"), + "tryAgain": MessageLookupByLibrary.simpleMessage("Réessayer"), + "twitter": MessageLookupByLibrary.simpleMessage("Twitter"), + "twoMonthsFreeOnYearlyPlans": MessageLookupByLibrary.simpleMessage( + "2 mois gratuits sur les forfaits annuels"), + "twofactor": + MessageLookupByLibrary.simpleMessage("Double authentification"), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage( + "Authentification à deux facteurs"), + "twofactorSetup": MessageLookupByLibrary.simpleMessage( + "Configuration de l\'authentification à deux facteurs"), + "unarchive": MessageLookupByLibrary.simpleMessage("Désarchiver"), + "unarchiving": + MessageLookupByLibrary.simpleMessage("Désarchivage en cours..."), + "uncategorized": + MessageLookupByLibrary.simpleMessage("Aucune catégorie"), + "unhide": MessageLookupByLibrary.simpleMessage("Dévoiler"), + "unhideToAlbum": + MessageLookupByLibrary.simpleMessage("Afficher dans l\'album"), + "unhidingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Démasquage des fichiers vers l\'album"), + "unselectAll": + MessageLookupByLibrary.simpleMessage("Désélectionner tout"), + "update": MessageLookupByLibrary.simpleMessage("Mise à jour"), + "updateAvailable": MessageLookupByLibrary.simpleMessage( + "Une mise à jour est disponible"), + "updatingFolderSelection": MessageLookupByLibrary.simpleMessage( + "Mise à jour de la sélection du dossier..."), + "upgrade": MessageLookupByLibrary.simpleMessage("Améliorer"), + "uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Envoi des fichiers vers l\'album..."), + "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( + "Le stockage utilisable est limité par votre offre actuelle. Le stockage excédentaire deviendra automatiquement utilisable lorsque vous mettez à niveau votre offre."), + "usePublicLinksForPeopleNotOnEnte": MessageLookupByLibrary.simpleMessage( + "Utiliser des liens publics pour les personnes qui ne sont pas sur ente"), + "useRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Utiliser la clé de récupération"), + "verificationId": + MessageLookupByLibrary.simpleMessage("ID de vérification"), + "verify": MessageLookupByLibrary.simpleMessage("Vérifier"), + "verifyEmail": + MessageLookupByLibrary.simpleMessage("Vérifier l\'email"), + "verifyEmailID": m38, + "verifyPassword": + MessageLookupByLibrary.simpleMessage("Vérifier le mot de passe"), + "verifying": + MessageLookupByLibrary.simpleMessage("Validation en cours..."), + "verifyingRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Vérification de la clé de récupération..."), + "videoSmallCase": MessageLookupByLibrary.simpleMessage("vidéo"), + "viewActiveSessions": MessageLookupByLibrary.simpleMessage( + "Afficher les sessions actives"), + "viewLogs": + MessageLookupByLibrary.simpleMessage("Afficher les journaux"), + "viewRecoveryKey": + MessageLookupByLibrary.simpleMessage("Voir la clé de récupération"), + "viewer": MessageLookupByLibrary.simpleMessage("Observateur"), + "weAreOpenSource": + MessageLookupByLibrary.simpleMessage("Nous sommes open source !"), + "weDontSupportEditingPhotosAndAlbumsThatYouDont": + MessageLookupByLibrary.simpleMessage( + "Nous ne prenons pas en charge l\'édition des photos et des albums que vous ne possédez pas encore"), + "weakStrength": MessageLookupByLibrary.simpleMessage("Faible"), + "welcomeBack": MessageLookupByLibrary.simpleMessage("Bienvenue !"), + "yearly": MessageLookupByLibrary.simpleMessage("Annuel"), + "yearsAgo": m40, + "yes": MessageLookupByLibrary.simpleMessage("Oui"), + "yesCancel": MessageLookupByLibrary.simpleMessage("Oui, annuler"), + "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( + "Oui, convertir en observateur"), + "yesDelete": MessageLookupByLibrary.simpleMessage("Oui, supprimer"), + "yesLogout": + MessageLookupByLibrary.simpleMessage("Oui, se déconnecter"), + "yesRemove": MessageLookupByLibrary.simpleMessage("Oui, supprimer"), + "yesRenew": MessageLookupByLibrary.simpleMessage("Oui, renouveler"), + "you": MessageLookupByLibrary.simpleMessage("Vous"), + "youAreOnTheLatestVersion": MessageLookupByLibrary.simpleMessage( + "Vous êtes sur la dernière version"), + "youCanAtMaxDoubleYourStorage": MessageLookupByLibrary.simpleMessage( + "* Vous pouvez au maximum doubler votre espace de stockage"), + "youCanManageYourLinksInTheShareTab": + MessageLookupByLibrary.simpleMessage( + "Vous pouvez gérer vos liens dans l\'onglet Partage."), + "youCannotDowngradeToThisPlan": MessageLookupByLibrary.simpleMessage( + "Vous ne pouvez pas rétrograder vers cette offre"), + "youCannotShareWithYourself": MessageLookupByLibrary.simpleMessage( + "Vous ne pouvez pas partager avec vous-même"), + "youHaveSuccessfullyFreedUp": m41, + "yourAccountHasBeenDeleted": + MessageLookupByLibrary.simpleMessage("Votre compte a été supprimé"), + "yourPlanWasSuccessfullyDowngraded": + MessageLookupByLibrary.simpleMessage( + "Votre plan a été rétrogradé avec succès"), + "yourPlanWasSuccessfullyUpgraded": MessageLookupByLibrary.simpleMessage( + "Votre offre a été mise à jour avec succès"), + "yourPurchaseWasSuccessful": MessageLookupByLibrary.simpleMessage( + "Votre achat a été effectué avec succès"), + "yourStorageDetailsCouldNotBeFetched": + MessageLookupByLibrary.simpleMessage( + "Vos informations de stockage n\'ont pas pu être récupérées"), + "yourSubscriptionWasUpdatedSuccessfully": + MessageLookupByLibrary.simpleMessage( + "Votre abonnement a été mis à jour avec succès"), + "youveNoDuplicateFilesThatCanBeCleared": + MessageLookupByLibrary.simpleMessage( + "Vous n\'avez aucun fichier dédupliqué pouvant être nettoyé"), + "youveNoFilesInThisAlbumThatCanBeDeleted": + MessageLookupByLibrary.simpleMessage( + "Vous n\'avez pas de fichiers dans cet album qui peuvent être supprimés") + }; +} diff --git a/lib/generated/intl/messages_it.dart b/lib/generated/intl/messages_it.dart new file mode 100644 index 000000000..7b86cb248 --- /dev/null +++ b/lib/generated/intl/messages_it.dart @@ -0,0 +1,32 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a it 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 => 'it'; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("Bentornato!"), + "cancel": MessageLookupByLibrary.simpleMessage("Annulla"), + "email": MessageLookupByLibrary.simpleMessage("Email"), + "enterYourEmailAddress": MessageLookupByLibrary.simpleMessage( + "Inserisci il tuo indirizzo email") + }; +} diff --git a/lib/generated/intl/messages_ko.dart b/lib/generated/intl/messages_ko.dart new file mode 100644 index 000000000..8d8edc845 --- /dev/null +++ b/lib/generated/intl/messages_ko.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 ko 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 => 'ko'; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => {}; +} diff --git a/lib/generated/intl/messages_nl.dart b/lib/generated/intl/messages_nl.dart new file mode 100644 index 000000000..436d82c1d --- /dev/null +++ b/lib/generated/intl/messages_nl.dart @@ -0,0 +1,1306 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a nl 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 => 'nl'; + + static String m42(count) => + "${Intl.plural(count, one: 'Bestand toevoegen', other: 'Bestanden toevoegen')}"; + + static String m43(emailOrName) => "Toegevoegd door ${emailOrName}"; + + static String m44(albumName) => "Succesvol toegevoegd aan ${albumName}"; + + static String m0(paymentProvider) => + "Annuleer eerst uw bestaande abonnement bij ${paymentProvider}"; + + static String m1(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 m2(isFamilyMember, storageAmountInGb) => + "${Intl.select(isFamilyMember, { + 'true': + 'Jouw familie heeft ${storageAmountInGb} Gb geclaimd tot nu toe', + 'false': 'Je hebt ${storageAmountInGb} Gb geclaimd tot nu toe', + 'other': 'Je hebt ${storageAmountInGb} Gb geclaimd tot nu toe!', + })}"; + + static String m45(albumName) => + "Gezamenlijke link aangemaakt voor ${albumName}"; + + static String m3(familyAdminEmail) => + "Neem contact op met ${familyAdminEmail} om uw abonnement te beheren"; + + static String m4(provider) => + "Neem contact met ons op via support@ente.io om uw ${provider} abonnement te beheren."; + + static String m46(currentlyDeleting, totalCount) => + "Verwijderen van ${currentlyDeleting} / ${totalCount}"; + + static String m5(albumName) => + "Dit verwijdert de openbare link voor toegang tot \"${albumName}\"."; + + static String m6(supportEmail) => + "Stuur een e-mail naar ${supportEmail} vanaf het door jou geregistreerde e-mailadres"; + + static String m7(count, storageSaved) => + "Je hebt ${Intl.plural(count, one: '${count} dubbel bestand', other: '${count} dubbele bestanden')} opgeruimd, totaal (${storageSaved}!)"; + + static String m47(newEmail) => "E-mailadres gewijzigd naar ${newEmail}"; + + static String m8(email) => + "${email} heeft geen ente account.\n\nStuur ze een uitnodiging om foto\'s te delen."; + + static String m48(count, formattedNumber) => + "${Intl.plural(count, one: '1 bestand', other: '${formattedNumber} bestanden')} in dit album zijn veilig geback-upt"; + + static String m49(count, formattedNumber) => + "${Intl.plural(count, one: '1 bestand', other: '${formattedNumber} bestanden')} in dit album is veilig geback-upt"; + + static String m9(storageAmountInGB) => + "${storageAmountInGB} GB telkens als iemand zich aanmeldt voor een betaald abonnement en je code toepast"; + + static String m10(endDate) => "Gratis proefversie geldig tot ${endDate}"; + + static String m50(count) => + "U heeft nog steeds toegang tot ${Intl.plural(count, one: 'het', other: 'ze')} op ente zolang u een actief abonnement heeft"; + + static String m51(sizeInMBorGB) => "Maak ${sizeInMBorGB} vrij"; + + static String m52(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 m11(count) => + "${Intl.plural(count, one: '${count} item', other: '${count} items')}"; + + static String m53(count) => "${count} geselecteerd"; + + static String m12(expiryTime) => "Link vervalt op ${expiryTime}"; + + static String m13(maxValue) => + "Wanneer ingesteld op het maximum (${maxValue}), wordt het apparaatlimiet versoepeld om tijdelijke pieken van grote aantallen kijkers mogelijk te maken."; + + static String m14(count) => + "${Intl.plural(count, zero: 'geen herinneringen', one: '${count} herinnering', other: '${count} herinneringen')}"; + + static String m54(count) => + "${Intl.plural(count, one: 'Bestand verplaatsen', other: 'Bestanden verplaatsen')}"; + + static String m55(albumName) => "Succesvol verplaatst naar ${albumName}"; + + static String m15(passwordStrengthValue) => + "Wachtwoord sterkte: ${passwordStrengthValue}"; + + static String m16(providerName) => + "Praat met ${providerName} klantenservice als u in rekening bent gebracht"; + + static String m17(reason) => + "Helaas is uw betaling mislukt vanwege ${reason}"; + + static String m56(toEmail) => "Stuur ons een e-mail op ${toEmail}"; + + static String m57(toEmail) => + "Verstuur de logboeken alstublieft naar ${toEmail}"; + + static String m18(storeName) => "Beoordeel ons op ${storeName}"; + + static String m19(storageInGB) => + "Jullie krijgen allebei ${storageInGB} GB* gratis"; + + static String m20(userEmail) => + "${userEmail} zal worden verwijderd uit dit gedeelde album\n\nAlle door hen toegevoegde foto\'s worden ook uit het album verwijderd"; + + static String m21(endDate) => "Wordt verlengd op ${endDate}"; + + static String m22(count) => "${count} geselecteerd"; + + static String m23(count, yourCount) => + "${count} geselecteerd (${yourCount} van jou)"; + + static String m24(verificationID) => + "Hier is mijn verificatie-ID: ${verificationID} voor ente.io."; + + static String m25(verificationID) => + "Hey, kunt u bevestigen dat dit uw ente.io verificatie-ID is: ${verificationID}"; + + static String m26(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 m27(numberOfPeople) => + "${Intl.plural(numberOfPeople, zero: 'Deel met specifieke mensen', one: 'Gedeeld met 1 persoon', other: 'Gedeeld met ${numberOfPeople} mensen')}"; + + static String m28(emailIDs) => "Gedeeld met ${emailIDs}"; + + static String m29(fileType) => + "Dit ${fileType} zal worden verwijderd van jouw apparaat."; + + static String m30(fileType) => + "Dit ${fileType} staat zowel in ente als in jouw apparaat."; + + static String m31(fileType) => + "Dit ${fileType} zal worden verwijderd uit ente."; + + static String m32(storageAmountInGB) => "${storageAmountInGB} GB"; + + static String m33(id) => + "Uw ${id} is al aan een ander ente account gekoppeld.\nAls u uw ${id} wilt gebruiken met dit account, neem dan contact op met onze klantenservice"; + + static String m34(endDate) => "Uw abonnement loopt af op ${endDate}"; + + static String m35(completed, total) => + "${completed}/${total} herinneringen bewaard"; + + static String m36(storageAmountInGB) => + "Zij krijgen ook ${storageAmountInGB} GB"; + + static String m37(email) => "Dit is de verificatie-ID van ${email}"; + + static String m38(email) => "Verifieer ${email}"; + + static String m39(email) => + "We hebben een e-mail gestuurd naar ${email}"; + + static String m40(count) => + "${Intl.plural(count, one: '${count} jaar geleden', other: '${count} jaren geleden')}"; + + static String m41(storageSaved) => + "Je hebt ${storageSaved} succesvol vrijgemaakt!"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "aNewVersionOfEnteIsAvailable": MessageLookupByLibrary.simpleMessage( + "Er is een nieuwe versie van ente beschikbaar."), + "about": MessageLookupByLibrary.simpleMessage("Over"), + "account": MessageLookupByLibrary.simpleMessage("Account"), + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("Welkom terug!"), + "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( + "Ik begrijp dat als ik mijn wachtwoord verlies, ik mijn gegevens kan verliezen omdat mijn gegevens end-to-end versleuteld zijn."), + "activeSessions": + MessageLookupByLibrary.simpleMessage("Actieve sessies"), + "addANewEmail": + MessageLookupByLibrary.simpleMessage("Nieuw e-mailadres toevoegen"), + "addCollaborator": + MessageLookupByLibrary.simpleMessage("Samenwerker toevoegen"), + "addItem": m42, + "addLocation": + MessageLookupByLibrary.simpleMessage("Locatie toevoegen"), + "addLocationButton": MessageLookupByLibrary.simpleMessage("Toevoegen"), + "addMore": MessageLookupByLibrary.simpleMessage("Meer toevoegen"), + "addToAlbum": + MessageLookupByLibrary.simpleMessage("Toevoegen aan album"), + "addToEnte": MessageLookupByLibrary.simpleMessage("Toevoegen aan ente"), + "addViewer": MessageLookupByLibrary.simpleMessage("Voeg kijker toe"), + "addedAs": MessageLookupByLibrary.simpleMessage("Toegevoegd als"), + "addedBy": m43, + "addedSuccessfullyTo": m44, + "addingToFavorites": + MessageLookupByLibrary.simpleMessage("Toevoegen aan favorieten..."), + "advanced": MessageLookupByLibrary.simpleMessage("Geavanceerd"), + "advancedSettings": MessageLookupByLibrary.simpleMessage("Geavanceerd"), + "after1Day": MessageLookupByLibrary.simpleMessage("Na 1 dag"), + "after1Hour": MessageLookupByLibrary.simpleMessage("Na 1 uur"), + "after1Month": MessageLookupByLibrary.simpleMessage("Na 1 maand"), + "after1Week": MessageLookupByLibrary.simpleMessage("Na 1 week"), + "after1Year": MessageLookupByLibrary.simpleMessage("Na 1 jaar"), + "albumOwner": MessageLookupByLibrary.simpleMessage("Eigenaar"), + "albumTitle": MessageLookupByLibrary.simpleMessage("Albumtitel"), + "albumUpdated": + MessageLookupByLibrary.simpleMessage("Album bijgewerkt"), + "albums": MessageLookupByLibrary.simpleMessage("Albums"), + "allClear": MessageLookupByLibrary.simpleMessage("✨ Alles in orde"), + "allMemoriesPreserved": + MessageLookupByLibrary.simpleMessage("Alle herinneringen bewaard"), + "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Sta toe dat mensen met de link ook foto\'s kunnen toevoegen aan het gedeelde album."), + "allowAddingPhotos": + MessageLookupByLibrary.simpleMessage("Foto\'s toevoegen toestaan"), + "allowDownloads": + MessageLookupByLibrary.simpleMessage("Downloads toestaan"), + "allowPeopleToAddPhotos": MessageLookupByLibrary.simpleMessage( + "Mensen toestaan foto\'s toe te voegen"), + "androidIosWebDesktop": + MessageLookupByLibrary.simpleMessage("Android, iOS, Web, Desktop"), + "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), + "apply": MessageLookupByLibrary.simpleMessage("Toepassen"), + "applyCodeTitle": + MessageLookupByLibrary.simpleMessage("Code toepassen"), + "appstoreSubscription": + MessageLookupByLibrary.simpleMessage("PlayStore abonnement"), + "archive": MessageLookupByLibrary.simpleMessage("Archiveer"), + "archiveAlbum": + MessageLookupByLibrary.simpleMessage("Album archiveren"), + "archiving": MessageLookupByLibrary.simpleMessage("Archiveren..."), + "areYouSureThatYouWantToLeaveTheFamily": + MessageLookupByLibrary.simpleMessage( + "Weet u zeker dat u het familie abonnement wilt verlaten?"), + "areYouSureYouWantToCancel": MessageLookupByLibrary.simpleMessage( + "Weet u zeker dat u wilt opzeggen?"), + "areYouSureYouWantToChangeYourPlan": + MessageLookupByLibrary.simpleMessage( + "Weet u zeker dat u uw abonnement wilt wijzigen?"), + "areYouSureYouWantToExit": MessageLookupByLibrary.simpleMessage( + "Weet u zeker dat u wilt afsluiten?"), + "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( + "Weet je zeker dat je wilt uitloggen?"), + "areYouSureYouWantToRenew": MessageLookupByLibrary.simpleMessage( + "Weet u zeker dat u wilt verlengen?"), + "askCancelReason": MessageLookupByLibrary.simpleMessage( + "Uw abonnement is opgezegd. Wilt u de reden delen?"), + "askDeleteReason": MessageLookupByLibrary.simpleMessage( + "Wat is de voornaamste reden dat je jouw account verwijdert?"), + "askYourLovedOnesToShare": MessageLookupByLibrary.simpleMessage( + "Vraag uw dierbaren om te delen"), + "atAFalloutShelter": + MessageLookupByLibrary.simpleMessage("in een kernbunker"), + "authToChangeLockscreenSetting": MessageLookupByLibrary.simpleMessage( + "Graag verifiëren om de vergrendelscherm instellingen te wijzigen"), + "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( + "Gelieve te verifiëren om je e-mailadres te wijzigen"), + "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( + "Gelieve te verifiëren om je wachtwoord te wijzigen"), + "authToConfigureTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Graag verifiëren om tweestapsverificatie te configureren"), + "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Gelieve te verifiëren om het verwijderen van je account te starten"), + "authToViewYourActiveSessions": MessageLookupByLibrary.simpleMessage( + "Graag verifiëren om uw actieve sessies te bekijken"), + "authToViewYourHiddenFiles": MessageLookupByLibrary.simpleMessage( + "Gelieve te verifiëren om je verborgen bestanden te bekijken"), + "authToViewYourMemories": MessageLookupByLibrary.simpleMessage( + "Graag verifiëren om uw herinneringen te bekijken"), + "authToViewYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Graag verifiëren om uw herstelsleutel te bekijken"), + "authenticating": MessageLookupByLibrary.simpleMessage("Verifiëren..."), + "authenticationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Verificatie mislukt, probeer het opnieuw"), + "authenticationSuccessful": + MessageLookupByLibrary.simpleMessage("Verificatie geslaagd!"), + "available": MessageLookupByLibrary.simpleMessage("Beschikbaar"), + "backedUpFolders": + MessageLookupByLibrary.simpleMessage("Gebackupte mappen"), + "backup": MessageLookupByLibrary.simpleMessage("Back-up"), + "backupFailed": MessageLookupByLibrary.simpleMessage("Back-up mislukt"), + "backupOverMobileData": MessageLookupByLibrary.simpleMessage( + "Back-up maken via mobiele data"), + "backupSettings": + MessageLookupByLibrary.simpleMessage("Back-up instellingen"), + "backupVideos": + MessageLookupByLibrary.simpleMessage("Back-up video\'s"), + "blog": MessageLookupByLibrary.simpleMessage("Blog"), + "cachedData": MessageLookupByLibrary.simpleMessage("Cachegegevens"), + "calculating": MessageLookupByLibrary.simpleMessage("Berekenen..."), + "canNotUploadToAlbumsOwnedByOthers": + MessageLookupByLibrary.simpleMessage( + "Kan niet uploaden naar albums die van anderen zijn"), + "canOnlyCreateLinkForFilesOwnedByYou": + MessageLookupByLibrary.simpleMessage( + "Kan alleen een link maken voor bestanden die van u zijn"), + "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( + "Kan alleen bestanden verwijderen die jouw eigendom zijn"), + "cancel": MessageLookupByLibrary.simpleMessage("Annuleer"), + "cancelOtherSubscription": m0, + "cancelSubscription": + MessageLookupByLibrary.simpleMessage("Abonnement opzeggen"), + "cannotAddMorePhotosAfterBecomingViewer": m1, + "centerPoint": MessageLookupByLibrary.simpleMessage("Middelpunt"), + "changeEmail": MessageLookupByLibrary.simpleMessage("E-mail wijzigen"), + "changePassword": + MessageLookupByLibrary.simpleMessage("Wachtwoord wijzigen"), + "changePasswordTitle": + MessageLookupByLibrary.simpleMessage("Wachtwoord wijzigen"), + "changePermissions": + MessageLookupByLibrary.simpleMessage("Rechten aanpassen?"), + "checkForUpdates": + MessageLookupByLibrary.simpleMessage("Controleer op updates"), + "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( + "Controleer je inbox (en spam) om verificatie te voltooien"), + "checking": MessageLookupByLibrary.simpleMessage("Controleren..."), + "claimFreeStorage": + MessageLookupByLibrary.simpleMessage("Claim gratis opslag"), + "claimMore": MessageLookupByLibrary.simpleMessage("Claim meer!"), + "claimed": MessageLookupByLibrary.simpleMessage("Geclaimd"), + "claimedStorageSoFar": m2, + "clearCaches": MessageLookupByLibrary.simpleMessage("Cache legen"), + "click": MessageLookupByLibrary.simpleMessage("• Click"), + "clickOnTheOverflowMenu": + MessageLookupByLibrary.simpleMessage("• Klik op het menu"), + "close": MessageLookupByLibrary.simpleMessage("Sluiten"), + "clubByCaptureTime": + MessageLookupByLibrary.simpleMessage("Samenvoegen op tijd"), + "codeAppliedPageTitle": + MessageLookupByLibrary.simpleMessage("Code toegepast"), + "codeCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Code gekopieerd naar klembord"), + "codeUsedByYou": + MessageLookupByLibrary.simpleMessage("Code gebruikt door jou"), + "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( + "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": m45, + "collaborator": MessageLookupByLibrary.simpleMessage("Samenwerker"), + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": + MessageLookupByLibrary.simpleMessage( + "Samenwerkers kunnen foto\'s en video\'s toevoegen aan het gedeelde album."), + "collectEventPhotos": MessageLookupByLibrary.simpleMessage( + "Foto\'s van gebeurtenissen verzamelen"), + "collectPhotos": + MessageLookupByLibrary.simpleMessage("Foto\'s verzamelen"), + "color": MessageLookupByLibrary.simpleMessage("Kleur"), + "confirm": MessageLookupByLibrary.simpleMessage("Bevestig"), + "confirm2FADisable": MessageLookupByLibrary.simpleMessage( + "Weet u zeker dat u tweestapsverificatie wilt uitschakelen?"), + "confirmAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Account verwijderen bevestigen"), + "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( + "Ja, ik wil permanent mijn account inclusief alle gegevens verwijderen."), + "confirmPassword": + MessageLookupByLibrary.simpleMessage("Wachtwoord bevestigen"), + "confirmPlanChange": MessageLookupByLibrary.simpleMessage( + "Bevestig verandering van abonnement"), + "confirmRecoveryKey": + MessageLookupByLibrary.simpleMessage("Bevestig herstelsleutel"), + "confirmYourRecoveryKey": + MessageLookupByLibrary.simpleMessage("Bevestig herstelsleutel"), + "contactFamilyAdmin": m3, + "contactSupport": + MessageLookupByLibrary.simpleMessage("Contacteer ondersteuning"), + "contactToManageSubscription": m4, + "continueLabel": MessageLookupByLibrary.simpleMessage("Doorgaan"), + "continueOnFreeTrial": MessageLookupByLibrary.simpleMessage( + "Doorgaan met gratis proefversie"), + "copyEmailAddress": + MessageLookupByLibrary.simpleMessage("E-mailadres kopiëren"), + "copyLink": MessageLookupByLibrary.simpleMessage("Kopieer link"), + "copypasteThisCodentoYourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Kopieer en plak deze code\nnaar je authenticator app"), + "couldNotBackUpTryLater": MessageLookupByLibrary.simpleMessage( + "We konden uw gegevens niet back-uppen.\nWe zullen het later opnieuw proberen."), + "couldNotFreeUpSpace": + MessageLookupByLibrary.simpleMessage("Kon geen ruimte vrijmaken"), + "couldNotUpdateSubscription": MessageLookupByLibrary.simpleMessage( + "Kon abonnement niet wijzigen"), + "count": MessageLookupByLibrary.simpleMessage("Aantal"), + "createAccount": + MessageLookupByLibrary.simpleMessage("Account aanmaken"), + "createAlbumActionHint": MessageLookupByLibrary.simpleMessage( + "Lang indrukken om foto\'s te selecteren en klik + om een album te maken"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("Nieuw account aanmaken"), + "createOrSelectAlbum": + MessageLookupByLibrary.simpleMessage("Maak of selecteer album"), + "createPublicLink": + MessageLookupByLibrary.simpleMessage("Maak publieke link"), + "creatingLink": + MessageLookupByLibrary.simpleMessage("Link aanmaken..."), + "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( + "Belangrijke update beschikbaar"), + "currentUsageIs": + MessageLookupByLibrary.simpleMessage("Huidig gebruik is "), + "custom": MessageLookupByLibrary.simpleMessage("Aangepast"), + "darkTheme": MessageLookupByLibrary.simpleMessage("Donker"), + "decrypting": MessageLookupByLibrary.simpleMessage("Ontsleutelen..."), + "decryptingVideo": + MessageLookupByLibrary.simpleMessage("Video ontsleutelen..."), + "deduplicateFiles": MessageLookupByLibrary.simpleMessage( + "Dubbele bestanden verwijderen"), + "delete": MessageLookupByLibrary.simpleMessage("Verwijderen"), + "deleteAccount": + MessageLookupByLibrary.simpleMessage("Account verwijderen"), + "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( + "We vinden het jammer je te zien gaan. Deel je feedback om ons te helpen verbeteren."), + "deleteAccountPermanentlyButton": MessageLookupByLibrary.simpleMessage( + "Account permanent verwijderen"), + "deleteAlbum": MessageLookupByLibrary.simpleMessage("Verwijder album"), + "deleteAlbumDialog": MessageLookupByLibrary.simpleMessage( + "Verwijder de foto\'s (en video\'s) van dit album ook uit alle andere albums waar deze deel van uitmaken?"), + "deleteAlbumsDialogBody": MessageLookupByLibrary.simpleMessage( + "Hiermee worden alle lege albums verwijderd. Dit is handig wanneer je rommel in je albumlijst wilt verminderen."), + "deleteAll": MessageLookupByLibrary.simpleMessage("Alles Verwijderen"), + "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( + "Je staat op het punt je account en alle bijbehorende gegevens permanent te verwijderen.\nDeze actie is onomkeerbaar."), + "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( + "Stuur een e-mail naar account-deletion@ente.io vanaf het door jou geregistreerde e-mailadres."), + "deleteEmptyAlbums": + MessageLookupByLibrary.simpleMessage("Lege albums verwijderen"), + "deleteEmptyAlbumsWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Lege albums verwijderen?"), + "deleteFromBoth": + MessageLookupByLibrary.simpleMessage("Verwijder van beide"), + "deleteFromDevice": + MessageLookupByLibrary.simpleMessage("Verwijder van apparaat"), + "deleteFromEnte": + MessageLookupByLibrary.simpleMessage("Verwijder van ente"), + "deleteLocation": + MessageLookupByLibrary.simpleMessage("Verwijder locatie"), + "deletePhotos": + MessageLookupByLibrary.simpleMessage("Foto\'s verwijderen"), + "deleteProgress": m46, + "deleteReason1": MessageLookupByLibrary.simpleMessage( + "Ik mis een belangrijke functie"), + "deleteReason2": MessageLookupByLibrary.simpleMessage( + "De app of een bepaalde functie functioneert niet \nzoals ik verwacht"), + "deleteReason3": MessageLookupByLibrary.simpleMessage( + "Ik heb een andere dienst gevonden die me beter bevalt"), + "deleteReason4": MessageLookupByLibrary.simpleMessage( + "Mijn reden wordt niet vermeld"), + "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( + "Je verzoek wordt binnen 72 uur verwerkt."), + "deleteSharedAlbum": + MessageLookupByLibrary.simpleMessage("Gedeeld album verwijderen?"), + "deleteSharedAlbumDialogBody": MessageLookupByLibrary.simpleMessage( + "Het album wordt verwijderd voor iedereen\n\nJe verliest de toegang tot gedeelde foto\'s in dit album die eigendom zijn van anderen"), + "deselectAll": + MessageLookupByLibrary.simpleMessage("Alles deselecteren"), + "designedToOutlive": MessageLookupByLibrary.simpleMessage( + "Ontworpen om levenslang mee te gaan"), + "details": MessageLookupByLibrary.simpleMessage("Details"), + "devAccountChanged": MessageLookupByLibrary.simpleMessage( + "Het ontwikkelaarsaccount dat we gebruiken om te publiceren in de App Store is veranderd. Daarom moet je opnieuw inloggen.\n\nOnze excuses voor het ongemak, helaas was dit onvermijdelijk."), + "deviceFilesAutoUploading": MessageLookupByLibrary.simpleMessage( + "Bestanden toegevoegd aan dit album van dit apparaat zullen automatisch geüpload worden naar ente."), + "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( + "Schakel de schermvergrendeling van het apparaat uit wanneer ente op de voorgrond is en er een back-up aan de gang is. Dit is normaal gesproken niet nodig, maar kan grote uploads en initiële imports van grote mappen sneller laten verlopen."), + "didYouKnow": MessageLookupByLibrary.simpleMessage("Wist u dat?"), + "disableAutoLock": MessageLookupByLibrary.simpleMessage( + "Automatisch vergrendelen uitschakelen"), + "disableDownloadWarningBody": MessageLookupByLibrary.simpleMessage( + "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": m5, + "disableTwofactor": MessageLookupByLibrary.simpleMessage( + "Tweestapsverificatie uitschakelen"), + "disablingTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage( + "Tweestapsverificatie uitschakelen..."), + "discord": MessageLookupByLibrary.simpleMessage("Discord"), + "dismiss": MessageLookupByLibrary.simpleMessage("Afwijzen"), + "doThisLater": MessageLookupByLibrary.simpleMessage("Doe dit later"), + "doYouWantToDiscardTheEditsYouHaveMade": + MessageLookupByLibrary.simpleMessage( + "Wilt u de bewerkingen die u hebt gemaakt annuleren?"), + "done": MessageLookupByLibrary.simpleMessage("Voltooid"), + "doubleYourStorage": + MessageLookupByLibrary.simpleMessage("Verdubbel uw opslagruimte"), + "download": MessageLookupByLibrary.simpleMessage("Downloaden"), + "downloadFailed": + MessageLookupByLibrary.simpleMessage("Download mislukt"), + "downloading": MessageLookupByLibrary.simpleMessage("Downloaden..."), + "dropSupportEmail": m6, + "duplicateFileCountWithStorageSaved": m7, + "edit": MessageLookupByLibrary.simpleMessage("Bewerken"), + "editsSaved": + MessageLookupByLibrary.simpleMessage("Bewerkingen opgeslagen"), + "eligible": MessageLookupByLibrary.simpleMessage("gerechtigd"), + "email": MessageLookupByLibrary.simpleMessage("E-mail"), + "emailChangedTo": m47, + "emailNoEnteAccount": m8, + "emailYourLogs": + MessageLookupByLibrary.simpleMessage("E-mail uw logboeken"), + "empty": MessageLookupByLibrary.simpleMessage("Leeg"), + "emptyTrash": + MessageLookupByLibrary.simpleMessage("Prullenbak leegmaken?"), + "encryptingBackup": + MessageLookupByLibrary.simpleMessage("Back-up versleutelen..."), + "encryption": MessageLookupByLibrary.simpleMessage("Encryptie"), + "encryptionKeys": + MessageLookupByLibrary.simpleMessage("Encryptiesleutels"), + "endtoendEncryptedByDefault": MessageLookupByLibrary.simpleMessage( + "Standaard end-to-end versleuteld"), + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": + MessageLookupByLibrary.simpleMessage( + "ente kan bestanden alleen versleutelen en bewaren als u toegang tot ze geeft"), + "enteSubscriptionPitch": MessageLookupByLibrary.simpleMessage( + "ente bewaart uw herinneringen, zodat ze altijd beschikbaar voor u zijn, zelfs als u uw apparaat verliest."), + "enteSubscriptionShareWithFamily": MessageLookupByLibrary.simpleMessage( + "Je familie kan ook aan je abonnement worden toegevoegd."), + "enterAlbumName": + MessageLookupByLibrary.simpleMessage("Voer albumnaam in"), + "enterCode": MessageLookupByLibrary.simpleMessage("Voer code in"), + "enterCodeDescription": MessageLookupByLibrary.simpleMessage( + "Voer de code van de vriend in om gratis opslag voor jullie beiden te claimen"), + "enterEmail": + MessageLookupByLibrary.simpleMessage("Voer e-mailadres in"), + "enterFileName": + MessageLookupByLibrary.simpleMessage("Geef bestandsnaam op"), + "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Voer een nieuw wachtwoord in dat we kunnen gebruiken om je gegevens te versleutelen"), + "enterPassword": + MessageLookupByLibrary.simpleMessage("Voer wachtwoord in"), + "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Voer een wachtwoord in dat we kunnen gebruiken om je gegevens te versleutelen"), + "enterReferralCode": + MessageLookupByLibrary.simpleMessage("Voer verwijzingscode in"), + "enterThe6digitCodeFromnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Voer de 6-cijferige code van je verificatie-app in"), + "enterValidEmail": MessageLookupByLibrary.simpleMessage( + "Voer een geldig e-mailadres in."), + "enterYourEmailAddress": + MessageLookupByLibrary.simpleMessage("Voer uw e-mailadres in"), + "enterYourPassword": + MessageLookupByLibrary.simpleMessage("Voer je wachtwoord in"), + "enterYourRecoveryKey": + MessageLookupByLibrary.simpleMessage("Voer je herstelcode in"), + "error": MessageLookupByLibrary.simpleMessage("Foutmelding"), + "everywhere": MessageLookupByLibrary.simpleMessage("overal"), + "exif": MessageLookupByLibrary.simpleMessage("EXIF"), + "existingUser": + MessageLookupByLibrary.simpleMessage("Bestaande gebruiker"), + "expiredLinkInfo": MessageLookupByLibrary.simpleMessage( + "Deze link is verlopen. Selecteer een nieuwe vervaltijd of schakel de vervaldatum uit."), + "exportLogs": + MessageLookupByLibrary.simpleMessage("Logboek exporteren"), + "exportYourData": + MessageLookupByLibrary.simpleMessage("Exporteer je gegevens"), + "failedToApplyCode": + MessageLookupByLibrary.simpleMessage("Code toepassen mislukt"), + "failedToCancel": + MessageLookupByLibrary.simpleMessage("Opzeggen mislukt"), + "failedToFetchOriginalForEdit": MessageLookupByLibrary.simpleMessage( + "Fout bij ophalen origineel voor bewerking"), + "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( + "Kan geen verwijzingsgegevens ophalen. Probeer het later nog eens."), + "failedToLoadAlbums": + MessageLookupByLibrary.simpleMessage("Laden van albums mislukt"), + "failedToRenew": + MessageLookupByLibrary.simpleMessage("Verlengen mislukt"), + "failedToVerifyPaymentStatus": MessageLookupByLibrary.simpleMessage( + "Betalingsstatus verifiëren mislukt"), + "familyPlans": + MessageLookupByLibrary.simpleMessage("Familie abonnement"), + "faq": MessageLookupByLibrary.simpleMessage("Veelgestelde vragen"), + "faqs": MessageLookupByLibrary.simpleMessage("Veelgestelde vragen"), + "favorite": + MessageLookupByLibrary.simpleMessage("Toevoegen aan favorieten"), + "feedback": MessageLookupByLibrary.simpleMessage("Feedback"), + "fileSavedToGallery": MessageLookupByLibrary.simpleMessage( + "Bestand opgeslagen in galerij"), + "filesBackedUpFromDevice": m48, + "filesBackedUpInAlbum": m49, + "filesDeleted": + MessageLookupByLibrary.simpleMessage("Bestanden verwijderd"), + "flip": MessageLookupByLibrary.simpleMessage("Omdraaien"), + "forYourMemories": + MessageLookupByLibrary.simpleMessage("voor uw herinneringen"), + "forgotPassword": + MessageLookupByLibrary.simpleMessage("Wachtwoord vergeten"), + "freeStorageClaimed": + MessageLookupByLibrary.simpleMessage("Gratis opslag geclaimd"), + "freeStorageOnReferralSuccess": m9, + "freeStorageUsable": + MessageLookupByLibrary.simpleMessage("Gratis opslag bruikbaar"), + "freeTrial": MessageLookupByLibrary.simpleMessage("Gratis proefversie"), + "freeTrialValidTill": m10, + "freeUpAccessPostDelete": m50, + "freeUpAmount": m51, + "freeUpDeviceSpace": + MessageLookupByLibrary.simpleMessage("Apparaatruimte vrijmaken"), + "freeUpSpace": MessageLookupByLibrary.simpleMessage("Ruimte vrijmaken"), + "freeUpSpaceSaving": m52, + "galleryMemoryLimitInfo": MessageLookupByLibrary.simpleMessage( + "Tot 1000 herinneringen getoond in de galerij"), + "general": MessageLookupByLibrary.simpleMessage("Algemeen"), + "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( + "Encryptiesleutels genereren..."), + "googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"), + "grantPermission": + MessageLookupByLibrary.simpleMessage("Toestemming verlenen"), + "groupNearbyPhotos": + MessageLookupByLibrary.simpleMessage("Groep foto\'s in de buurt"), + "hidden": MessageLookupByLibrary.simpleMessage("Verborgen"), + "hide": MessageLookupByLibrary.simpleMessage("Verbergen"), + "howItWorks": MessageLookupByLibrary.simpleMessage("Hoe het werkt"), + "howToViewShareeVerificationID": MessageLookupByLibrary.simpleMessage( + "Vraag hen om hun e-mailadres lang in te drukken op het instellingenscherm en te controleren dat de ID\'s op beide apparaten overeenkomen."), + "ignoredFolderUploadReason": MessageLookupByLibrary.simpleMessage( + "Sommige bestanden in dit album worden genegeerd voor de upload omdat ze eerder van ente zijn verwijderd."), + "importing": MessageLookupByLibrary.simpleMessage("Importeren...."), + "incorrectCode": MessageLookupByLibrary.simpleMessage("Onjuiste code"), + "incorrectPasswordTitle": + MessageLookupByLibrary.simpleMessage("Onjuist wachtwoord"), + "incorrectRecoveryKey": + MessageLookupByLibrary.simpleMessage("Onjuiste herstelsleutel"), + "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage( + "De ingevoerde herstelsleutel is onjuist"), + "incorrectRecoveryKeyTitle": + MessageLookupByLibrary.simpleMessage("Onjuiste herstelsleutel"), + "insecureDevice": + MessageLookupByLibrary.simpleMessage("Onveilig apparaat"), + "installManually": + MessageLookupByLibrary.simpleMessage("Installeer handmatig"), + "invalidEmailAddress": + MessageLookupByLibrary.simpleMessage("Ongeldig e-mailadres"), + "invalidKey": MessageLookupByLibrary.simpleMessage("Ongeldige sleutel"), + "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( + "De herstelsleutel die je hebt ingevoerd is niet geldig. Zorg ervoor dat deze 24 woorden bevat en controleer de spelling van elk van deze woorden.\n\nAls je een oudere herstelcode hebt ingevoerd, zorg ervoor dat deze 64 tekens lang is, en controleer ze allemaal."), + "invite": MessageLookupByLibrary.simpleMessage("Uitnodigen"), + "inviteToEnte": + MessageLookupByLibrary.simpleMessage("Uitnodigen voor ente"), + "inviteYourFriends": + MessageLookupByLibrary.simpleMessage("Vrienden uitnodigen"), + "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": m11, + "itemSelectedCount": m53, + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": + MessageLookupByLibrary.simpleMessage( + "Bestanden tonen het aantal resterende dagen voordat ze permanent worden verwijderd"), + "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( + "Geselecteerde items zullen worden verwijderd uit dit album"), + "keepPhotos": MessageLookupByLibrary.simpleMessage("Foto\'s behouden"), + "kiloMeterUnit": MessageLookupByLibrary.simpleMessage("km"), + "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( + "Help ons alsjeblieft met deze informatie"), + "language": MessageLookupByLibrary.simpleMessage("Taal"), + "lastUpdated": MessageLookupByLibrary.simpleMessage("Laatst gewijzigd"), + "leave": MessageLookupByLibrary.simpleMessage("Verlaten"), + "leaveAlbum": MessageLookupByLibrary.simpleMessage("Album verlaten"), + "leaveFamily": + MessageLookupByLibrary.simpleMessage("Familie abonnement verlaten"), + "leaveSharedAlbum": + MessageLookupByLibrary.simpleMessage("Gedeeld album verlaten?"), + "light": MessageLookupByLibrary.simpleMessage("Licht"), + "lightTheme": MessageLookupByLibrary.simpleMessage("Licht"), + "linkCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Link gekopieerd naar klembord"), + "linkDeviceLimit": + MessageLookupByLibrary.simpleMessage("Apparaat limiet"), + "linkEnabled": MessageLookupByLibrary.simpleMessage("Ingeschakeld"), + "linkExpired": MessageLookupByLibrary.simpleMessage("Verlopen"), + "linkExpiresOn": m12, + "linkExpiry": MessageLookupByLibrary.simpleMessage("Vervaldatum"), + "linkHasExpired": + MessageLookupByLibrary.simpleMessage("Link is vervallen"), + "linkNeverExpires": MessageLookupByLibrary.simpleMessage("Nooit"), + "loadMessage1": MessageLookupByLibrary.simpleMessage( + "U kunt uw abonnement met uw familie delen"), + "loadMessage2": MessageLookupByLibrary.simpleMessage( + "We hebben tot nu toe meer dan tien miljoen herinneringen bewaard"), + "loadMessage3": MessageLookupByLibrary.simpleMessage( + "We bewaren 3 kopieën van uw bestanden, één in een ondergrondse kernbunker"), + "loadMessage4": MessageLookupByLibrary.simpleMessage( + "Al onze apps zijn open source"), + "loadMessage5": MessageLookupByLibrary.simpleMessage( + "Onze broncode en cryptografie zijn extern gecontroleerd en geverifieerd"), + "loadMessage6": MessageLookupByLibrary.simpleMessage( + "Je kunt links naar je albums delen met je dierbaren"), + "loadMessage7": MessageLookupByLibrary.simpleMessage( + "Onze mobiele apps draaien op de achtergrond om alle nieuwe foto\'s die je maakt te versleutelen en te back-uppen"), + "loadMessage8": MessageLookupByLibrary.simpleMessage( + "web.ente.io heeft een vlotte uploader"), + "loadMessage9": MessageLookupByLibrary.simpleMessage( + "We gebruiken Xchacha20Poly1305 om uw gegevens veilig te versleutelen"), + "loadingExifData": + MessageLookupByLibrary.simpleMessage("EXIF-gegevens laden..."), + "loadingGallery": + MessageLookupByLibrary.simpleMessage("Laden van gallerij..."), + "loadingMessage": + MessageLookupByLibrary.simpleMessage("Uw foto\'s laden..."), + "localGallery": MessageLookupByLibrary.simpleMessage("Lokale galerij"), + "location": MessageLookupByLibrary.simpleMessage("Locatie"), + "locationName": MessageLookupByLibrary.simpleMessage("Locatie naam"), + "locationTagFeatureDescription": MessageLookupByLibrary.simpleMessage( + "Een locatie tag groept alle foto\'s die binnen een bepaalde straal van een foto zijn genomen"), + "lockButtonLabel": MessageLookupByLibrary.simpleMessage("Vergrendel"), + "lockScreenEnablePreSteps": MessageLookupByLibrary.simpleMessage( + "Om vergrendelscherm in te schakelen, moet u een toegangscode of schermvergrendeling instellen in uw systeeminstellingen."), + "lockscreen": MessageLookupByLibrary.simpleMessage("Vergrendelscherm"), + "logInLabel": MessageLookupByLibrary.simpleMessage("Inloggen"), + "loggingOut": MessageLookupByLibrary.simpleMessage("Uitloggen..."), + "loginTerms": MessageLookupByLibrary.simpleMessage( + "Door op inloggen te klikken, ga ik akkoord met de gebruiksvoorwaarden en privacybeleid"), + "logout": MessageLookupByLibrary.simpleMessage("Uitloggen"), + "logsDialogBody": MessageLookupByLibrary.simpleMessage( + "Dit zal logboeken verzenden om ons te helpen uw probleem op te lossen. Houd er rekening mee dat bestandsnamen zullen worden meegenomen om problemen met specifieke bestanden bij te houden."), + "longpressOnAnItemToViewInFullscreen": MessageLookupByLibrary.simpleMessage( + "Houd een bestand lang ingedrukt om te bekijken op volledig scherm"), + "lostDevice": + MessageLookupByLibrary.simpleMessage("Apparaat verloren?"), + "manage": MessageLookupByLibrary.simpleMessage("Beheren"), + "manageDeviceStorage": + MessageLookupByLibrary.simpleMessage("Apparaatopslag beheren"), + "manageFamily": + MessageLookupByLibrary.simpleMessage("Familie abonnement beheren"), + "manageLink": MessageLookupByLibrary.simpleMessage("Beheer link"), + "manageParticipants": MessageLookupByLibrary.simpleMessage("Beheren"), + "manageSubscription": + MessageLookupByLibrary.simpleMessage("Abonnement beheren"), + "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), + "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), + "maxDeviceLimitSpikeHandling": m13, + "memoryCount": m14, + "merchandise": MessageLookupByLibrary.simpleMessage("Merchandise"), + "mobileWebDesktop": + MessageLookupByLibrary.simpleMessage("Mobiel, Web, Desktop"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Matig"), + "monthly": MessageLookupByLibrary.simpleMessage("Maandelijks"), + "moveItem": m54, + "moveToAlbum": + MessageLookupByLibrary.simpleMessage("Verplaats naar album"), + "movedSuccessfullyTo": m55, + "movedToTrash": + MessageLookupByLibrary.simpleMessage("Naar prullenbak verplaatst"), + "movingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Bestanden verplaatsen naar album..."), + "name": MessageLookupByLibrary.simpleMessage("Naam"), + "never": MessageLookupByLibrary.simpleMessage("Nooit"), + "newAlbum": MessageLookupByLibrary.simpleMessage("Nieuw album"), + "newToEnte": MessageLookupByLibrary.simpleMessage("Nieuw bij ente"), + "newest": MessageLookupByLibrary.simpleMessage("Nieuwste"), + "no": MessageLookupByLibrary.simpleMessage("Nee"), + "noDeviceThatCanBeDeleted": MessageLookupByLibrary.simpleMessage( + "Je hebt geen bestanden op dit apparaat die verwijderd kunnen worden"), + "noDuplicates": + MessageLookupByLibrary.simpleMessage("✨ Geen duplicaten"), + "noExifData": + MessageLookupByLibrary.simpleMessage("Geen EXIF gegevens"), + "noHiddenPhotosOrVideos": MessageLookupByLibrary.simpleMessage( + "Geen verborgen foto\'s of video\'s"), + "noPhotosAreBeingBackedUpRightNow": + MessageLookupByLibrary.simpleMessage( + "Er worden momenteel geen foto\'s geback-upt"), + "noRecoveryKey": + MessageLookupByLibrary.simpleMessage("Geen herstelcode?"), + "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( + "Door de aard van ons end-to-end encryptieprotocol kunnen je gegevens niet worden ontsleuteld zonder je wachtwoord of herstelsleutel"), + "noResults": MessageLookupByLibrary.simpleMessage("Geen resultaten"), + "noResultsFound": + MessageLookupByLibrary.simpleMessage("Geen resultaten gevonden"), + "nothingToSeeHere": + MessageLookupByLibrary.simpleMessage("Nog niets te zien hier! 👀"), + "ok": MessageLookupByLibrary.simpleMessage("Oké"), + "onDevice": MessageLookupByLibrary.simpleMessage("Op het apparaat"), + "onEnte": MessageLookupByLibrary.simpleMessage( + "Op ente"), + "oops": MessageLookupByLibrary.simpleMessage("Oeps"), + "oopsCouldNotSaveEdits": MessageLookupByLibrary.simpleMessage( + "Oeps, kon bewerkingen niet opslaan"), + "oopsSomethingWentWrong": + MessageLookupByLibrary.simpleMessage("Oeps, er is iets misgegaan"), + "openTheItem": MessageLookupByLibrary.simpleMessage("• Open het item"), + "optionalAsShortAsYouLike": MessageLookupByLibrary.simpleMessage( + "Optioneel, zo kort als je wilt..."), + "orPickAnExistingOne": + MessageLookupByLibrary.simpleMessage("Of kies een bestaande"), + "password": MessageLookupByLibrary.simpleMessage("Wachtwoord"), + "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( + "Wachtwoord succesvol aangepast"), + "passwordLock": MessageLookupByLibrary.simpleMessage("Wachtwoord slot"), + "passwordStrength": m15, + "passwordWarning": MessageLookupByLibrary.simpleMessage( + "Wij slaan dit wachtwoord niet op, dus als je het vergeet, kunnen we je gegevens niet ontsleutelen"), + "paymentDetails": + MessageLookupByLibrary.simpleMessage("Betaalgegevens"), + "paymentFailed": + MessageLookupByLibrary.simpleMessage("Betaling mislukt"), + "paymentFailedTalkToProvider": m16, + "paymentFailedWithReason": m17, + "pendingSync": MessageLookupByLibrary.simpleMessage( + "Synchronisatie in behandeling"), + "peopleUsingYourCode": MessageLookupByLibrary.simpleMessage( + "Mensen die jouw code gebruiken"), + "permDeleteWarning": MessageLookupByLibrary.simpleMessage( + "Alle bestanden in de prullenbak zullen permanent worden verwijderd\n\nDeze actie kan niet ongedaan worden gemaakt"), + "permanentlyDelete": + MessageLookupByLibrary.simpleMessage("Permanent verwijderen"), + "permanentlyDeleteFromDevice": MessageLookupByLibrary.simpleMessage( + "Permanent verwijderen van apparaat?"), + "photoGridSize": + MessageLookupByLibrary.simpleMessage("Foto raster grootte"), + "photoSmallCase": MessageLookupByLibrary.simpleMessage("foto"), + "photosAddedByYouWillBeRemovedFromTheAlbum": + MessageLookupByLibrary.simpleMessage( + "Foto\'s toegevoegd door u zullen worden verwijderd uit het album"), + "pickCenterPoint": + MessageLookupByLibrary.simpleMessage("Kies middelpunt"), + "playstoreSubscription": + MessageLookupByLibrary.simpleMessage("PlayStore abonnement"), + "pleaseContactSupportAndWeWillBeHappyToHelp": + MessageLookupByLibrary.simpleMessage( + "Neem alstublieft contact op met support@ente.io en we helpen u graag!"), + "pleaseContactSupportIfTheProblemPersists": + MessageLookupByLibrary.simpleMessage( + "Neem contact op met klantenservice als het probleem aanhoudt"), + "pleaseEmailUsAt": m56, + "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage( + "Geef alstublieft toestemming"), + "pleaseLoginAgain": + MessageLookupByLibrary.simpleMessage("Log opnieuw in"), + "pleaseSendTheLogsTo": m57, + "pleaseTryAgain": + MessageLookupByLibrary.simpleMessage("Probeer het nog eens"), + "pleaseVerifyTheCodeYouHaveEntered": + MessageLookupByLibrary.simpleMessage( + "Controleer de code die u hebt ingevoerd"), + "pleaseWait": + MessageLookupByLibrary.simpleMessage("Een ogenblik geduld..."), + "pleaseWaitDeletingAlbum": MessageLookupByLibrary.simpleMessage( + "Een ogenblik geduld, album wordt verwijderd"), + "pleaseWaitForSometimeBeforeRetrying": + MessageLookupByLibrary.simpleMessage( + "Gelieve even te wachten voordat u opnieuw probeert"), + "preparingLogs": + MessageLookupByLibrary.simpleMessage("Logboeken voorbereiden..."), + "preserveMore": MessageLookupByLibrary.simpleMessage("Meer bewaren"), + "pressAndHoldToPlayVideo": MessageLookupByLibrary.simpleMessage( + "Ingedrukt houden om video af te spelen"), + "privacy": MessageLookupByLibrary.simpleMessage("Privacy"), + "privacyPolicyTitle": + MessageLookupByLibrary.simpleMessage("Privacybeleid"), + "privateBackups": + MessageLookupByLibrary.simpleMessage("Privé back-ups"), + "privateSharing": MessageLookupByLibrary.simpleMessage("Privé delen"), + "publicLinkCreated": + MessageLookupByLibrary.simpleMessage("Publieke link aangemaakt"), + "publicLinkEnabled": + MessageLookupByLibrary.simpleMessage("Publieke link ingeschakeld"), + "radius": MessageLookupByLibrary.simpleMessage("Straal"), + "rateTheApp": MessageLookupByLibrary.simpleMessage("Beoordeel de app"), + "rateUs": MessageLookupByLibrary.simpleMessage("Beoordeel ons"), + "rateUsOnStore": m18, + "recover": MessageLookupByLibrary.simpleMessage("Herstellen"), + "recoverAccount": + MessageLookupByLibrary.simpleMessage("Account herstellen"), + "recoverButton": MessageLookupByLibrary.simpleMessage("Herstellen"), + "recoveryKey": MessageLookupByLibrary.simpleMessage("Herstelsleutel"), + "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Herstelsleutel gekopieerd naar klembord"), + "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( + "Als je je wachtwoord vergeet, kun je alleen met deze sleutel je gegevens herstellen."), + "recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage( + "We slaan deze sleutel niet op, bewaar deze 24 woorden sleutel op een veilige plaats."), + "recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage( + "Super! Je herstelsleutel is geldig. Bedankt voor het verifiëren.\n\nVergeet niet om je herstelsleutel veilig te bewaren."), + "recoveryKeyVerified": MessageLookupByLibrary.simpleMessage( + "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."), + "recoverySuccessful": + MessageLookupByLibrary.simpleMessage("Herstel succesvol!"), + "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( + "Wachtwoord opnieuw instellen"), + "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "referFriendsAnd2xYourPlan": MessageLookupByLibrary.simpleMessage( + "Verwijs vrienden en 2x uw abonnement"), + "referralStep1": MessageLookupByLibrary.simpleMessage( + "1. Geef deze code aan je vrienden"), + "referralStep2": MessageLookupByLibrary.simpleMessage( + "2. Ze registreren voor een betaald plan"), + "referralStep3": m19, + "referrals": MessageLookupByLibrary.simpleMessage("Referenties"), + "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( + "Verwijzingen zijn momenteel gepauzeerd"), + "remindToEmptyDeviceTrash": MessageLookupByLibrary.simpleMessage( + "Leeg ook \"Onlangs verwijderd\" uit \"Instellingen\" -> \"Opslag\" om de vrij gekomen ruimte te benutten"), + "remindToEmptyEnteTrash": MessageLookupByLibrary.simpleMessage( + "Leeg ook uw \"Prullenbak\" om de vrij gekomen ruimte te benutten"), + "remoteImages": + MessageLookupByLibrary.simpleMessage("Externe afbeeldingen"), + "remoteThumbnails": + MessageLookupByLibrary.simpleMessage("Externe thumbnails"), + "remoteVideos": + MessageLookupByLibrary.simpleMessage("Externe video\'s"), + "remove": MessageLookupByLibrary.simpleMessage("Verwijder"), + "removeDuplicates": + MessageLookupByLibrary.simpleMessage("Duplicaten verwijderen"), + "removeFromAlbum": + MessageLookupByLibrary.simpleMessage("Verwijder uit album"), + "removeFromAlbumTitle": + MessageLookupByLibrary.simpleMessage("Uit album verwijderen?"), + "removeFromFavorite": + MessageLookupByLibrary.simpleMessage("Verwijderen uit favorieten"), + "removeLink": MessageLookupByLibrary.simpleMessage("Verwijder link"), + "removeParticipant": + MessageLookupByLibrary.simpleMessage("Deelnemer verwijderen"), + "removeParticipantBody": m20, + "removePublicLink": + MessageLookupByLibrary.simpleMessage("Verwijder publieke link"), + "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage( + "Sommige van de items die je verwijdert zijn door andere mensen toegevoegd, en je verliest de toegang daartoe"), + "removeWithQuestionMark": + MessageLookupByLibrary.simpleMessage("Verwijder?"), + "removingFromFavorites": MessageLookupByLibrary.simpleMessage( + "Verwijderen uit favorieten..."), + "rename": MessageLookupByLibrary.simpleMessage("Naam wijzigen"), + "renameAlbum": + MessageLookupByLibrary.simpleMessage("Albumnaam wijzigen"), + "renameFile": + MessageLookupByLibrary.simpleMessage("Bestandsnaam wijzigen"), + "renewSubscription": + MessageLookupByLibrary.simpleMessage("Abonnement verlengen"), + "renewsOn": m21, + "reportABug": MessageLookupByLibrary.simpleMessage("Een fout melden"), + "reportBug": MessageLookupByLibrary.simpleMessage("Fout melden"), + "resendEmail": + MessageLookupByLibrary.simpleMessage("E-mail opnieuw versturen"), + "resetIgnoredFiles": + MessageLookupByLibrary.simpleMessage("Reset genegeerde bestanden"), + "resetPasswordTitle": + MessageLookupByLibrary.simpleMessage("Wachtwoord resetten"), + "restore": MessageLookupByLibrary.simpleMessage("Herstellen"), + "restoreToAlbum": + MessageLookupByLibrary.simpleMessage("Terugzetten naar album"), + "restoringFiles": + MessageLookupByLibrary.simpleMessage("Bestanden herstellen..."), + "retry": MessageLookupByLibrary.simpleMessage("Opnieuw"), + "reviewDeduplicateItems": MessageLookupByLibrary.simpleMessage( + "Controleer en verwijder de bestanden die u denkt dat dubbel zijn."), + "rotateLeft": MessageLookupByLibrary.simpleMessage("Roteer links"), + "rotateRight": MessageLookupByLibrary.simpleMessage("Rechtsom draaien"), + "safelyStored": + MessageLookupByLibrary.simpleMessage("Veilig opgeslagen"), + "save": MessageLookupByLibrary.simpleMessage("Opslaan"), + "saveCopy": MessageLookupByLibrary.simpleMessage("Kopie opslaan"), + "saveKey": MessageLookupByLibrary.simpleMessage("Bewaar sleutel"), + "saveYourRecoveryKeyIfYouHaventAlready": + MessageLookupByLibrary.simpleMessage( + "Sla je herstelsleutel op als je dat nog niet gedaan hebt"), + "saving": MessageLookupByLibrary.simpleMessage("Opslaan..."), + "scanCode": MessageLookupByLibrary.simpleMessage("Scan code"), + "scanThisBarcodeWithnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Scan deze barcode met\nje authenticator app"), + "searchByAlbumNameHint": + MessageLookupByLibrary.simpleMessage("Albumnaam"), + "searchByExamples": MessageLookupByLibrary.simpleMessage( + "• Albumnamen (bijv. \"Camera\")\n• Types van bestanden (bijv. \"Video\'s\", \".gif\")\n• Jaren en maanden (bijv. \"2022\", \"januari\")\n• Feestdagen (bijv. \"Kerstmis\")\n• Fotobeschrijvingen (bijv. \"#fun\")"), + "searchHintText": MessageLookupByLibrary.simpleMessage( + "Albums, maanden, dagen, jaren, ..."), + "security": MessageLookupByLibrary.simpleMessage("Beveiliging"), + "selectAlbum": MessageLookupByLibrary.simpleMessage("Album selecteren"), + "selectAll": MessageLookupByLibrary.simpleMessage("Selecteer alles"), + "selectFoldersForBackup": MessageLookupByLibrary.simpleMessage( + "Selecteer mappen voor back-up"), + "selectLanguage": + MessageLookupByLibrary.simpleMessage("Taal selecteren"), + "selectReason": MessageLookupByLibrary.simpleMessage("Selecteer reden"), + "selectYourPlan": + MessageLookupByLibrary.simpleMessage("Kies uw abonnement"), + "selectedFilesAreNotOnEnte": MessageLookupByLibrary.simpleMessage( + "Geselecteerde bestanden staan niet op ente"), + "selectedFoldersWillBeEncryptedAndBackedUp": + MessageLookupByLibrary.simpleMessage( + "Geselecteerde mappen worden versleuteld en geback-upt"), + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": + MessageLookupByLibrary.simpleMessage( + "Geselecteerde bestanden worden verwijderd uit alle albums en verplaatst naar de prullenbak."), + "selectedPhotos": m22, + "selectedPhotosWithYours": m23, + "send": MessageLookupByLibrary.simpleMessage("Verzenden"), + "sendEmail": MessageLookupByLibrary.simpleMessage("E-mail versturen"), + "sendInvite": + MessageLookupByLibrary.simpleMessage("Stuur een uitnodiging"), + "sendLink": MessageLookupByLibrary.simpleMessage("Stuur link"), + "sessionExpired": + MessageLookupByLibrary.simpleMessage("Sessie verlopen"), + "setAPassword": + MessageLookupByLibrary.simpleMessage("Stel een wachtwoord in"), + "setAs": MessageLookupByLibrary.simpleMessage("Instellen als"), + "setPasswordTitle": + MessageLookupByLibrary.simpleMessage("Wachtwoord instellen"), + "setupComplete": MessageLookupByLibrary.simpleMessage("Setup voltooid"), + "share": MessageLookupByLibrary.simpleMessage("Delen"), + "shareALink": MessageLookupByLibrary.simpleMessage("Deel een link"), + "shareAlbumHint": MessageLookupByLibrary.simpleMessage( + "Open een album en tik op de deelknop rechts bovenaan om te delen."), + "shareAnAlbumNow": + MessageLookupByLibrary.simpleMessage("Deel nu een album"), + "shareLink": MessageLookupByLibrary.simpleMessage("Link delen"), + "shareMyVerificationID": m24, + "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage( + "Deel alleen met de mensen die u wilt"), + "shareTextConfirmOthersVerificationID": m25, + "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( + "Download ente zodat we gemakkelijk foto\'s en video\'s van originele kwaliteit kunnen delen\n\nhttps://ente.io/#download"), + "shareTextReferralCode": m26, + "shareWithNonenteUsers": MessageLookupByLibrary.simpleMessage( + "Delen met niet-ente gebruikers"), + "shareWithPeopleSectionTitle": m27, + "shareYourFirstAlbum": + MessageLookupByLibrary.simpleMessage("Deel jouw eerste album"), + "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( + "Maak gedeelde en collaboratieve albums met andere ente gebruikers, inclusief gebruikers met gratis abonnementen."), + "sharedByMe": MessageLookupByLibrary.simpleMessage("Gedeeld door mij"), + "sharedWith": m28, + "sharedWithMe": MessageLookupByLibrary.simpleMessage("Gedeeld met mij"), + "sharing": MessageLookupByLibrary.simpleMessage("Delen..."), + "signUpTerms": MessageLookupByLibrary.simpleMessage( + "Ik ga akkoord met de gebruiksvoorwaarden en privacybeleid"), + "singleFileDeleteFromDevice": m29, + "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage( + "Het wordt uit alle albums verwijderd."), + "singleFileInBothLocalAndRemote": m30, + "singleFileInRemoteOnly": m31, + "skip": MessageLookupByLibrary.simpleMessage("Overslaan"), + "social": MessageLookupByLibrary.simpleMessage("Sociale media"), + "someItemsAreInBothEnteAndYourDevice": MessageLookupByLibrary.simpleMessage( + "Sommige bestanden bevinden zich in zowel ente als op uw apparaat."), + "someOfTheFilesYouAreTryingToDeleteAre": + MessageLookupByLibrary.simpleMessage( + "Sommige bestanden die u probeert te verwijderen zijn alleen beschikbaar op uw apparaat en kunnen niet hersteld worden als deze verwijderd worden"), + "someoneSharingAlbumsWithYouShouldSeeTheSameId": + MessageLookupByLibrary.simpleMessage( + "Iemand die albums met je deelt zou hetzelfde ID op hun apparaat moeten zien."), + "somethingWentWrong": + MessageLookupByLibrary.simpleMessage("Er ging iets mis"), + "somethingWentWrongPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Er is iets fout gegaan, probeer het opnieuw"), + "sorry": MessageLookupByLibrary.simpleMessage("Sorry"), + "sorryCouldNotAddToFavorites": MessageLookupByLibrary.simpleMessage( + "Sorry, kon niet aan favorieten worden toegevoegd!"), + "sorryCouldNotRemoveFromFavorites": + MessageLookupByLibrary.simpleMessage( + "Sorry, kon niet uit favorieten worden verwijderd!"), + "sorryTheCodeYouveEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "Sorry, de ingevoerde code is onjuist"), + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": + MessageLookupByLibrary.simpleMessage( + "Sorry, we konden geen beveiligde sleutels genereren op dit apparaat.\n\nGelieve je aan te melden vanaf een ander apparaat."), + "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Succes"), + "startBackup": MessageLookupByLibrary.simpleMessage("Back-up starten"), + "storageInGB": m32, + "storageLimitExceeded": + MessageLookupByLibrary.simpleMessage("Opslaglimiet overschreden"), + "strongStrength": MessageLookupByLibrary.simpleMessage("Sterk"), + "subAlreadyLinkedErrMessage": m33, + "subWillBeCancelledOn": m34, + "subscribe": MessageLookupByLibrary.simpleMessage("Abonneer"), + "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( + "Het lijkt erop dat je abonnement is verlopen. Abonneer om delen mogelijk te maken."), + "subscription": MessageLookupByLibrary.simpleMessage("Abonnement"), + "success": MessageLookupByLibrary.simpleMessage("Succes"), + "successfullyArchived": + MessageLookupByLibrary.simpleMessage("Succesvol gearchiveerd"), + "successfullyUnarchived": MessageLookupByLibrary.simpleMessage( + "Succesvol uit archief gehaald"), + "suggestFeatures": + MessageLookupByLibrary.simpleMessage("Features voorstellen"), + "support": MessageLookupByLibrary.simpleMessage("Ondersteuning"), + "syncProgress": m35, + "syncStopped": + MessageLookupByLibrary.simpleMessage("Synchronisatie gestopt"), + "syncing": MessageLookupByLibrary.simpleMessage("Synchroniseren..."), + "systemTheme": MessageLookupByLibrary.simpleMessage("Systeem"), + "tapToCopy": MessageLookupByLibrary.simpleMessage("tik om te kopiëren"), + "tapToEnterCode": + MessageLookupByLibrary.simpleMessage("Tik om code in te voeren"), + "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"), + "terminateSession": + MessageLookupByLibrary.simpleMessage("Sessie beëindigen?"), + "terms": MessageLookupByLibrary.simpleMessage("Voorwaarden"), + "termsOfServicesTitle": + MessageLookupByLibrary.simpleMessage("Voorwaarden"), + "thankYou": MessageLookupByLibrary.simpleMessage("Bedankt"), + "thankYouForSubscribing": MessageLookupByLibrary.simpleMessage( + "Dank je wel voor het abonneren!"), + "theDownloadCouldNotBeCompleted": MessageLookupByLibrary.simpleMessage( + "De download kon niet worden voltooid"), + "theRecoveryKeyYouEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage( + "De ingevoerde herstelsleutel is onjuist"), + "theme": MessageLookupByLibrary.simpleMessage("Thema"), + "theseItemsWillBeDeletedFromYourDevice": + MessageLookupByLibrary.simpleMessage( + "Deze bestanden zullen worden verwijderd van uw apparaat."), + "theyAlsoGetXGb": m36, + "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage( + "Ze zullen uit alle albums worden verwijderd."), + "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage( + "Deze actie kan niet ongedaan gemaakt worden"), + "thisAlbumAlreadyHDACollaborativeLink": + MessageLookupByLibrary.simpleMessage( + "Dit album heeft al een gezamenlijke link"), + "thisCanBeUsedToRecoverYourAccountIfYou": + MessageLookupByLibrary.simpleMessage( + "Dit kan worden gebruikt om je account te herstellen als je je tweede factor verliest"), + "thisDevice": MessageLookupByLibrary.simpleMessage("Dit apparaat"), + "thisEmailIsAlreadyInUse": MessageLookupByLibrary.simpleMessage( + "Dit e-mailadres is al in gebruik"), + "thisImageHasNoExifData": MessageLookupByLibrary.simpleMessage( + "Deze foto heeft geen exif gegevens"), + "thisIsPersonVerificationId": m37, + "thisIsYourVerificationId": + MessageLookupByLibrary.simpleMessage("Dit is uw verificatie-ID"), + "thisWillLogYouOutOfTheFollowingDevice": + MessageLookupByLibrary.simpleMessage( + "Dit zal je uitloggen van het volgende apparaat:"), + "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( + "Dit zal je uitloggen van dit apparaat!"), + "time": MessageLookupByLibrary.simpleMessage("Tijd"), + "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage( + "Om een foto of video te verbergen"), + "todaysLogs": + MessageLookupByLibrary.simpleMessage("Logboeken van vandaag"), + "total": MessageLookupByLibrary.simpleMessage("totaal"), + "totalSize": MessageLookupByLibrary.simpleMessage("Totale grootte"), + "trash": MessageLookupByLibrary.simpleMessage("Prullenbak"), + "tryAgain": MessageLookupByLibrary.simpleMessage("Probeer opnieuw"), + "turnOnBackupForAutoUpload": MessageLookupByLibrary.simpleMessage( + "Schakel back-up in om bestanden die toegevoegd zijn aan deze map op dit apparaat automatisch te uploaden."), + "twitter": MessageLookupByLibrary.simpleMessage("Twitter"), + "twoMonthsFreeOnYearlyPlans": MessageLookupByLibrary.simpleMessage( + "Krijg 2 maanden gratis op jaarlijkse abonnementen"), + "twofactor": + MessageLookupByLibrary.simpleMessage("Tweestapsverificatie"), + "twofactorAuthenticationHasBeenDisabled": + MessageLookupByLibrary.simpleMessage( + "Tweestapsverificatie is uitgeschakeld"), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage("Tweestapsverificatie"), + "twofactorAuthenticationSuccessfullyReset": + MessageLookupByLibrary.simpleMessage( + "Tweestapsverificatie succesvol gereset"), + "twofactorSetup": + MessageLookupByLibrary.simpleMessage("Tweestapsverificatie"), + "unarchive": MessageLookupByLibrary.simpleMessage("Uit archief halen"), + "unarchiveAlbum": + MessageLookupByLibrary.simpleMessage("Album uit archief halen"), + "unarchiving": + MessageLookupByLibrary.simpleMessage("Uit het archief halen..."), + "uncategorized": + MessageLookupByLibrary.simpleMessage("Ongecategoriseerd"), + "unhide": MessageLookupByLibrary.simpleMessage("Zichtbaar maken"), + "unhideToAlbum": + MessageLookupByLibrary.simpleMessage("Zichtbaar maken in album"), + "unhidingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Bestanden zichtbaar maken in album"), + "unlock": MessageLookupByLibrary.simpleMessage("Ontgrendelen"), + "unselectAll": + MessageLookupByLibrary.simpleMessage("Deselecteer alles"), + "update": MessageLookupByLibrary.simpleMessage("Update"), + "updateAvailable": + MessageLookupByLibrary.simpleMessage("Update beschikbaar"), + "updatingFolderSelection": + MessageLookupByLibrary.simpleMessage("Map selectie bijwerken..."), + "upgrade": MessageLookupByLibrary.simpleMessage("Upgraden"), + "uploadingFilesToAlbum": MessageLookupByLibrary.simpleMessage( + "Bestanden worden geüpload naar album..."), + "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( + "Bruikbare opslag is beperkt door je huidige abonnement. Buitensporige geclaimde opslag zal automatisch bruikbaar worden wanneer je je abonnement upgrade."), + "usePublicLinksForPeopleNotOnEnte": + MessageLookupByLibrary.simpleMessage( + "Gebruik publieke links voor mensen die niet op ente zitten"), + "useRecoveryKey": + MessageLookupByLibrary.simpleMessage("Herstelcode gebruiken"), + "useSelectedPhoto": + MessageLookupByLibrary.simpleMessage("Gebruik geselecteerde foto"), + "verificationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Verificatie mislukt, probeer het opnieuw"), + "verificationId": + MessageLookupByLibrary.simpleMessage("Verificatie ID"), + "verify": MessageLookupByLibrary.simpleMessage("Verifiëren"), + "verifyEmail": MessageLookupByLibrary.simpleMessage("Bevestig e-mail"), + "verifyEmailID": m38, + "verifyPassword": + MessageLookupByLibrary.simpleMessage("Bevestig wachtwoord"), + "verifying": MessageLookupByLibrary.simpleMessage("Verifiëren..."), + "verifyingRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Herstelsleutel verifiëren..."), + "videoSmallCase": MessageLookupByLibrary.simpleMessage("video"), + "viewActiveSessions": + MessageLookupByLibrary.simpleMessage("Actieve sessies bekijken"), + "viewAllExifData": + MessageLookupByLibrary.simpleMessage("Bekijk alle EXIF gegevens"), + "viewLogs": MessageLookupByLibrary.simpleMessage("Logboeken bekijken"), + "viewRecoveryKey": + MessageLookupByLibrary.simpleMessage("Toon herstelsleutel"), + "viewer": MessageLookupByLibrary.simpleMessage("Kijker"), + "visitWebToManage": MessageLookupByLibrary.simpleMessage( + "Bezoek alstublieft web.ente.io om uw abonnement te beheren"), + "weAreOpenSource": + MessageLookupByLibrary.simpleMessage("We zijn open source!"), + "weDontSupportEditingPhotosAndAlbumsThatYouDont": + MessageLookupByLibrary.simpleMessage( + "We ondersteunen het bewerken van foto\'s en albums waar je niet de eigenaar van bent nog niet"), + "weHaveSendEmailTo": m39, + "weakStrength": MessageLookupByLibrary.simpleMessage("Zwak"), + "welcomeBack": MessageLookupByLibrary.simpleMessage("Welkom terug!"), + "yearly": MessageLookupByLibrary.simpleMessage("Jaarlijks"), + "yearsAgo": m40, + "yes": MessageLookupByLibrary.simpleMessage("Ja"), + "yesCancel": MessageLookupByLibrary.simpleMessage("Ja, opzeggen"), + "yesConvertToViewer": + MessageLookupByLibrary.simpleMessage("Ja, converteren naar viewer"), + "yesDelete": MessageLookupByLibrary.simpleMessage("Ja, verwijderen"), + "yesDiscardChanges": + MessageLookupByLibrary.simpleMessage("Ja, wijzigingen negeren"), + "yesLogout": MessageLookupByLibrary.simpleMessage("Ja, log uit"), + "yesRemove": MessageLookupByLibrary.simpleMessage("Ja, verwijderen"), + "yesRenew": MessageLookupByLibrary.simpleMessage("Ja, verlengen"), + "you": MessageLookupByLibrary.simpleMessage("Jij"), + "youAreOnAFamilyPlan": MessageLookupByLibrary.simpleMessage( + "U bent onderdeel van een familie abonnement!"), + "youAreOnTheLatestVersion": + MessageLookupByLibrary.simpleMessage("Je hebt de laatste versie"), + "youCanAtMaxDoubleYourStorage": MessageLookupByLibrary.simpleMessage( + "* Je kunt maximaal je opslag verdubbelen"), + "youCanManageYourLinksInTheShareTab": + MessageLookupByLibrary.simpleMessage( + "U kunt uw links beheren in het tabblad \'Delen\'."), + "youCanTrySearchingForADifferentQuery": + MessageLookupByLibrary.simpleMessage( + "U kunt proberen een andere zoekopdracht te vinden."), + "youCannotDowngradeToThisPlan": MessageLookupByLibrary.simpleMessage( + "U kunt niet downgraden naar dit abonnement"), + "youCannotShareWithYourself": MessageLookupByLibrary.simpleMessage( + "Je kunt niet met jezelf delen"), + "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage( + "U heeft geen gearchiveerde bestanden."), + "youHaveSuccessfullyFreedUp": m41, + "yourAccountHasBeenDeleted": + MessageLookupByLibrary.simpleMessage("Je account is verwijderd"), + "yourPlanWasSuccessfullyDowngraded": + MessageLookupByLibrary.simpleMessage( + "Uw abonnement is succesvol gedegradeerd"), + "yourPlanWasSuccessfullyUpgraded": MessageLookupByLibrary.simpleMessage( + "Uw abonnement is succesvol opgewaardeerd"), + "yourPurchaseWasSuccessful": + MessageLookupByLibrary.simpleMessage("Uw betaling is geslaagd"), + "yourStorageDetailsCouldNotBeFetched": + MessageLookupByLibrary.simpleMessage( + "Uw opslaggegevens konden niet worden opgehaald"), + "yourSubscriptionHasExpired": + MessageLookupByLibrary.simpleMessage("Uw abonnement is verlopen"), + "yourSubscriptionWasUpdatedSuccessfully": + MessageLookupByLibrary.simpleMessage( + "Uw abonnement is succesvol bijgewerkt"), + "yourVerificationCodeHasExpired": MessageLookupByLibrary.simpleMessage( + "Uw verificatiecode is verlopen"), + "youveNoDuplicateFilesThatCanBeCleared": + MessageLookupByLibrary.simpleMessage( + "Je hebt geen dubbele bestanden die kunnen worden gewist"), + "youveNoFilesInThisAlbumThatCanBeDeleted": + MessageLookupByLibrary.simpleMessage( + "Je hebt geen bestanden in dit album die verwijderd kunnen worden") + }; +} diff --git a/lib/generated/intl/messages_no.dart b/lib/generated/intl/messages_no.dart new file mode 100644 index 000000000..7687b21c6 --- /dev/null +++ b/lib/generated/intl/messages_no.dart @@ -0,0 +1,49 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a no 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 => 'no'; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("Velkommen tilbake!"), + "askDeleteReason": MessageLookupByLibrary.simpleMessage( + "Hva er hovedårsaken til at du sletter kontoen din?"), + "cancel": MessageLookupByLibrary.simpleMessage("Avbryt"), + "confirmAccountDeletion": + MessageLookupByLibrary.simpleMessage("Bekreft sletting av konto"), + "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( + "Ja, jeg ønsker å slette denne kontoen og all dataen dens permanent."), + "deleteAccount": MessageLookupByLibrary.simpleMessage("Slett konto"), + "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( + "Vi er lei oss for at du forlater oss. Gi oss gjerne en tilbakemelding så vi kan forbedre oss."), + "email": MessageLookupByLibrary.simpleMessage("E-post"), + "enterValidEmail": MessageLookupByLibrary.simpleMessage( + "Vennligst skriv inn en gyldig e-postadresse."), + "enterYourEmailAddress": MessageLookupByLibrary.simpleMessage( + "Skriv inn e-postadressen din"), + "feedback": MessageLookupByLibrary.simpleMessage("Tilbakemelding"), + "invalidEmailAddress": + MessageLookupByLibrary.simpleMessage("Ugyldig e-postadresse"), + "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( + "Vær vennlig og hjelp oss med denne informasjonen"), + "verify": MessageLookupByLibrary.simpleMessage("Bekreft") + }; +} diff --git a/lib/generated/intl/messages_pl.dart b/lib/generated/intl/messages_pl.dart new file mode 100644 index 000000000..0b6fb12d1 --- /dev/null +++ b/lib/generated/intl/messages_pl.dart @@ -0,0 +1,182 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a pl 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 => 'pl'; + + static String m15(passwordStrengthValue) => + "Siła hasła: ${passwordStrengthValue}"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("Witaj ponownie!"), + "activeSessions": MessageLookupByLibrary.simpleMessage("Aktywne sesje"), + "askDeleteReason": MessageLookupByLibrary.simpleMessage( + "Jaka jest przyczyna usunięcia konta?"), + "cancel": MessageLookupByLibrary.simpleMessage("Anuluj"), + "changeEmail": + MessageLookupByLibrary.simpleMessage("Zmień adres e-mail"), + "changePasswordTitle": + MessageLookupByLibrary.simpleMessage("Zmień hasło"), + "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( + "Sprawdź swoją skrzynkę odbiorczą (i spam), aby zakończyć weryfikację"), + "codeCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Kod został skopiowany do schowka"), + "confirm": MessageLookupByLibrary.simpleMessage("Potwierdź"), + "confirmAccountDeletion": + MessageLookupByLibrary.simpleMessage("Potwierdź usunięcie konta"), + "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( + "Tak, chcę trwale usunąć konto i wszystkie dane z nim powiązane."), + "confirmPassword": + MessageLookupByLibrary.simpleMessage("Powtórz hasło"), + "contactSupport": MessageLookupByLibrary.simpleMessage( + "Skontaktuj się z pomocą techniczną"), + "continueLabel": MessageLookupByLibrary.simpleMessage("Kontynuuj"), + "createAccount": MessageLookupByLibrary.simpleMessage("Stwórz konto"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("Stwórz nowe konto"), + "decrypting": + MessageLookupByLibrary.simpleMessage("Odszyfrowywanie..."), + "deleteAccount": MessageLookupByLibrary.simpleMessage("Usuń konto"), + "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( + "Przykro nam, że odchodzisz. Wyjaśnij nam, dlaczego nas opuszczasz, aby pomóc ulepszać nasze usługi."), + "deleteAccountPermanentlyButton": + MessageLookupByLibrary.simpleMessage("Usuń konto na stałe"), + "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( + "Zamierzasz trwale usunąć swoje konto i wszystkie jego dane.\nTa akcja jest nieodwracalna."), + "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( + "Wyślij wiadomość e-mail na account-deletion@ente.io z zarejestrowanego adresu e-mail."), + "deleteReason1": MessageLookupByLibrary.simpleMessage( + "Brakuje kluczowej funkcji, której potrzebuję"), + "deleteReason2": MessageLookupByLibrary.simpleMessage( + "Aplikacja lub określona funkcja nie \nzachowuje się tak, jak sądzę, że powinna"), + "deleteReason3": MessageLookupByLibrary.simpleMessage( + "Znalazłem inną, lepszą usługę"), + "deleteReason4": MessageLookupByLibrary.simpleMessage( + "Inna, niewymieniona wyżej przyczyna"), + "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( + "Twoje żądanie zostanie przetworzone w ciągu 72 godzin."), + "doThisLater": MessageLookupByLibrary.simpleMessage("Spróbuj później"), + "email": MessageLookupByLibrary.simpleMessage("Adres e-mail"), + "encryption": MessageLookupByLibrary.simpleMessage("Szyfrowanie"), + "enterCode": MessageLookupByLibrary.simpleMessage("Wprowadź kod"), + "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Wprowadź nowe hasło, którego możemy użyć do zaszyfrowania Twoich danych"), + "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Wprowadź hasło, którego możemy użyć do zaszyfrowania Twoich danych"), + "enterValidEmail": MessageLookupByLibrary.simpleMessage( + "Podaj poprawny adres e-mail."), + "enterYourEmailAddress": + MessageLookupByLibrary.simpleMessage("Podaj swój adres e-mail"), + "enterYourPassword": + MessageLookupByLibrary.simpleMessage("Wprowadź hasło"), + "enterYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Wprowadź swój klucz odzyskiwania"), + "feedback": MessageLookupByLibrary.simpleMessage("Informacja zwrotna"), + "forgotPassword": + MessageLookupByLibrary.simpleMessage("Nie pamiętam hasła"), + "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( + "Generowanie kluczy szyfrujących..."), + "howItWorks": MessageLookupByLibrary.simpleMessage("Jak to działa"), + "incorrectPasswordTitle": + MessageLookupByLibrary.simpleMessage("Nieprawidłowe hasło"), + "incorrectRecoveryKeyBody": + MessageLookupByLibrary.simpleMessage("Kod jest nieprawidłowy"), + "incorrectRecoveryKeyTitle": MessageLookupByLibrary.simpleMessage( + "Nieprawidłowy klucz odzyskiwania"), + "invalidEmailAddress": + MessageLookupByLibrary.simpleMessage("Nieprawidłowy adres e-mail"), + "kindlyHelpUsWithThisInformation": + MessageLookupByLibrary.simpleMessage("Pomóż nam z tą informacją"), + "logInLabel": MessageLookupByLibrary.simpleMessage("Zaloguj się"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Umiarkowana"), + "noRecoveryKey": + MessageLookupByLibrary.simpleMessage("Brak klucza odzyskiwania?"), + "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( + "Ze względu na charakter naszego protokołu szyfrowania end-to-end, dane nie mogą być odszyfrowane bez hasła lub klucza odzyskiwania"), + "ok": MessageLookupByLibrary.simpleMessage("Ok"), + "oops": MessageLookupByLibrary.simpleMessage("Ups"), + "password": MessageLookupByLibrary.simpleMessage("Hasło"), + "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage( + "Hasło zostało pomyślnie zmienione"), + "passwordStrength": m15, + "passwordWarning": MessageLookupByLibrary.simpleMessage( + "Nie przechowujemy tego hasła, więc jeśli go zapomnisz, nie będziemy w stanie odszyfrować Twoich danych"), + "pleaseTryAgain": + MessageLookupByLibrary.simpleMessage("Spróbuj ponownie"), + "pleaseWait": MessageLookupByLibrary.simpleMessage("Proszę czekać..."), + "privacyPolicyTitle": + MessageLookupByLibrary.simpleMessage("Polityka prywatności"), + "recoverAccount": + MessageLookupByLibrary.simpleMessage("Odzyskaj konto"), + "recoverButton": MessageLookupByLibrary.simpleMessage("Odzyskaj"), + "recoveryKey": + MessageLookupByLibrary.simpleMessage("Klucz odzyskiwania"), + "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Klucz odzyskiwania został skopiowany do schowka"), + "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( + "Jeśli zapomnisz hasła, jedynym sposobem odzyskania danych jest ten klucz."), + "recoverySuccessful": + MessageLookupByLibrary.simpleMessage("Odzyskano pomyślnie!"), + "resendEmail": + MessageLookupByLibrary.simpleMessage("Wyślij e-mail ponownie"), + "resetPasswordTitle": + MessageLookupByLibrary.simpleMessage("Zresetuj hasło"), + "saveKey": MessageLookupByLibrary.simpleMessage("Zapisz klucz"), + "selectReason": MessageLookupByLibrary.simpleMessage("Wybierz powód"), + "sendEmail": MessageLookupByLibrary.simpleMessage("Wyślij e-mail"), + "setPasswordTitle": MessageLookupByLibrary.simpleMessage("Ustaw hasło"), + "signUpTerms": MessageLookupByLibrary.simpleMessage( + "Akceptuję warunki korzystania z usługi i politykę prywatności"), + "somethingWentWrongPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Coś poszło nie tak, spróbuj ponownie"), + "sorry": MessageLookupByLibrary.simpleMessage("Przepraszamy"), + "strongStrength": MessageLookupByLibrary.simpleMessage("Silne"), + "terminate": MessageLookupByLibrary.simpleMessage("Zakończ"), + "terminateSession": + MessageLookupByLibrary.simpleMessage("Zakończyć sesję?"), + "termsOfServicesTitle": + MessageLookupByLibrary.simpleMessage("Regulamin"), + "thisDevice": MessageLookupByLibrary.simpleMessage("To urządzenie"), + "thisWillLogYouOutOfTheFollowingDevice": + MessageLookupByLibrary.simpleMessage( + "To wyloguje Cię z tego urządzenia:"), + "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( + "To wyloguje Cię z tego urządzenia!"), + "tryAgain": MessageLookupByLibrary.simpleMessage("Spróbuj ponownie"), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage( + "Uwierzytelnianie dwuskładnikowe"), + "twofactorSetup": MessageLookupByLibrary.simpleMessage( + "Uwierzytelnianie dwuskładnikowe"), + "useRecoveryKey": + MessageLookupByLibrary.simpleMessage("Użyj kodu odzyskiwania"), + "verify": MessageLookupByLibrary.simpleMessage("Weryfikuj"), + "verifyEmail": + MessageLookupByLibrary.simpleMessage("Zweryfikuj adres e-mail"), + "verifyPassword": + MessageLookupByLibrary.simpleMessage("Zweryfikuj hasło"), + "weakStrength": MessageLookupByLibrary.simpleMessage("Słabe"), + "welcomeBack": MessageLookupByLibrary.simpleMessage("Witaj ponownie!"), + "yourAccountHasBeenDeleted": + MessageLookupByLibrary.simpleMessage("Twoje konto zostało usunięte") + }; +} diff --git a/lib/generated/intl/messages_pt.dart b/lib/generated/intl/messages_pt.dart new file mode 100644 index 000000000..0be5df695 --- /dev/null +++ b/lib/generated/intl/messages_pt.dart @@ -0,0 +1,427 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a 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'; + + static String m1(user) => + "${user} Não poderá adicionar mais fotos a este álbum\n\nEles ainda poderão remover as fotos existentes adicionadas por eles"; + + static String m2(isFamilyMember, storageAmountInGb) => + "${Intl.select(isFamilyMember, { + 'true': + 'Sua família reeinvindicou ${storageAmountInGb} GB até agora', + 'false': 'Você reeinvindicou ${storageAmountInGb} Gb até agora', + 'other': 'Você reeinvindicou ${storageAmountInGb} Gb até agora', + })}"; + + static String m5(albumName) => + "Isso removerá o link público para acessar \"${albumName}\"."; + + static String m6(supportEmail) => + "Por favor, envie um e-mail para ${supportEmail} a partir do seu endereço de e-mail registrado"; + + static String m9(storageAmountInGB) => + "${storageAmountInGB} GB cada vez que alguém se inscrever para um plano pago e aplica o seu código"; + + static String m15(passwordStrengthValue) => + "Segurança da senha: ${passwordStrengthValue}"; + + static String m19(storageInGB) => "3. Ambos ganham ${storageInGB} GB* grátis"; + + static String m20(userEmail) => + "${userEmail} será removido deste álbum compartilhado\n\nQuaisquer fotos adicionadas por eles também serão removidas do álbum"; + + static String m26(referralCode, referralStorageInGB) => + "Código de referência do ente: ${referralCode} \n\nAplique em Configurações → Geral → Indicações para obter ${referralStorageInGB} GB gratuitamente após a sua inscrição em um plano pago\n\nhttps://ente.io"; + + static String m32(storageAmountInGB) => "${storageAmountInGB} GB"; + + static String m36(storageAmountInGB) => + "Eles também recebem ${storageAmountInGB} GB"; + + static String m39(email) => "Enviamos um e-mail à ${email}"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "aNewVersionOfEnteIsAvailable": MessageLookupByLibrary.simpleMessage( + "Uma nova versão do ente está disponível."), + "accountWelcomeBack": + MessageLookupByLibrary.simpleMessage("Bem-vindo 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"), + "addANewEmail": + MessageLookupByLibrary.simpleMessage("Adicionar um novo email"), + "addCollaborator": + MessageLookupByLibrary.simpleMessage("Adicionar colaborador"), + "addMore": MessageLookupByLibrary.simpleMessage("Adicione mais"), + "addViewer": + MessageLookupByLibrary.simpleMessage("Adicionar visualizador"), + "addedAs": MessageLookupByLibrary.simpleMessage("Adicionado como"), + "addingToFavorites": MessageLookupByLibrary.simpleMessage( + "Adicionando aos favoritos..."), + "albumOwner": MessageLookupByLibrary.simpleMessage("Proprietário"), + "allowAddPhotosDescription": MessageLookupByLibrary.simpleMessage( + "Permita que as pessoas com o link também adicionem fotos ao álbum compartilhado."), + "allowAddingPhotos": + MessageLookupByLibrary.simpleMessage("Permitir adicionar fotos"), + "allowDownloads": + MessageLookupByLibrary.simpleMessage("Permitir transferências"), + "areYouSureYouWantToLogout": MessageLookupByLibrary.simpleMessage( + "Você tem certeza que deseja encerrar a sessão?"), + "askDeleteReason": MessageLookupByLibrary.simpleMessage( + "Qual é o principal motivo para você excluir sua conta?"), + "authToChangeYourEmail": MessageLookupByLibrary.simpleMessage( + "Por favor, autentique-se para alterar seu e-mail"), + "authToChangeYourPassword": MessageLookupByLibrary.simpleMessage( + "Por favor, autentique-se para alterar sua senha"), + "authToInitiateAccountDeletion": MessageLookupByLibrary.simpleMessage( + "Por favor, autentique-se para iniciar a exclusão de conta"), + "canOnlyRemoveFilesOwnedByYou": MessageLookupByLibrary.simpleMessage( + "Só é possível remover arquivos de sua propriedade"), + "cancel": MessageLookupByLibrary.simpleMessage("Cancelar"), + "cannotAddMorePhotosAfterBecomingViewer": m1, + "changeEmail": MessageLookupByLibrary.simpleMessage("Mudar e-mail"), + "changePassword": + MessageLookupByLibrary.simpleMessage("Mude sua senha"), + "changePasswordTitle": + MessageLookupByLibrary.simpleMessage("Mude sua senha"), + "changePermissions": + MessageLookupByLibrary.simpleMessage("Alterar permissões?"), + "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( + "Verifique sua caixa de entrada (e ‘spam’) para concluir a verificação"), + "claimFreeStorage": MessageLookupByLibrary.simpleMessage( + "Solicitar armazenamento gratuito"), + "claimMore": MessageLookupByLibrary.simpleMessage("Reivindique mais!"), + "claimed": MessageLookupByLibrary.simpleMessage("Reivindicado"), + "claimedStorageSoFar": m2, + "codeCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Código copiado para a área de transferência"), + "codeUsedByYou": + MessageLookupByLibrary.simpleMessage("Código usado por você"), + "collaborator": MessageLookupByLibrary.simpleMessage("Colaborador"), + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": + MessageLookupByLibrary.simpleMessage( + "Os colaboradores podem adicionar fotos e vídeos ao álbum compartilhado."), + "confirm": MessageLookupByLibrary.simpleMessage("Confirme"), + "confirmAccountDeletion": + MessageLookupByLibrary.simpleMessage("Confirmar exclusão da conta"), + "confirmDeletePrompt": MessageLookupByLibrary.simpleMessage( + "Sim, desejo excluir permanentemente esta conta e todos os seus dados."), + "confirmPassword": + MessageLookupByLibrary.simpleMessage("Confirme sua senha"), + "confirmRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Confirme a chave de recuperação"), + "confirmYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Confirme sua chave de recuperação"), + "contactSupport": + MessageLookupByLibrary.simpleMessage("Falar com o suporte"), + "continueLabel": MessageLookupByLibrary.simpleMessage("Continuar"), + "copypasteThisCodentoYourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Copie e cole este código\npara seu aplicativo autenticador"), + "createAccount": + MessageLookupByLibrary.simpleMessage("Criar uma conta"), + "createNewAccount": + MessageLookupByLibrary.simpleMessage("Criar nova conta"), + "creatingLink": MessageLookupByLibrary.simpleMessage("Criando link..."), + "criticalUpdateAvailable": MessageLookupByLibrary.simpleMessage( + "Atualização crítica disponível"), + "decrypting": + MessageLookupByLibrary.simpleMessage("Descriptografando..."), + "deleteAccount": MessageLookupByLibrary.simpleMessage("Deletar conta"), + "deleteAccountFeedbackPrompt": MessageLookupByLibrary.simpleMessage( + "Lamentamos ver você partir. Por favor, compartilhe seus comentários para nos ajudar 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 dos quais eles fazem parte?"), + "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage( + "Você está prestes a excluir permanentemente sua conta e todos os seus dados.\nEsta ação é irreversível."), + "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( + "Por favor, envie um e-mail para account-deletion@ente.io a partir do seu endereço de e-mail registrado."), + "deletePhotos": MessageLookupByLibrary.simpleMessage("Excluir fotos"), + "deleteReason1": MessageLookupByLibrary.simpleMessage( + "Está faltando um recurso-chave que eu preciso"), + "deleteReason2": MessageLookupByLibrary.simpleMessage( + "O aplicativo ou um determinado recurso não\nestá funcionando como eu acredito que deveria"), + "deleteReason3": MessageLookupByLibrary.simpleMessage( + "Encontrei outro serviço que gosto mais"), + "deleteReason4": + MessageLookupByLibrary.simpleMessage("Meu motivo não está listado"), + "deleteRequestSLAText": MessageLookupByLibrary.simpleMessage( + "Sua solicitação será processada 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"), + "details": MessageLookupByLibrary.simpleMessage("Detalhes"), + "disableDownloadWarningBody": MessageLookupByLibrary.simpleMessage( + "Os espectadores ainda podem tirar screenshots ou salvar uma cópia de suas fotos usando ferramentas externas"), + "disableDownloadWarningTitle": + MessageLookupByLibrary.simpleMessage("Observe"), + "disableLinkMessage": m5, + "doThisLater": + MessageLookupByLibrary.simpleMessage("Fazer isso mais tarde"), + "dropSupportEmail": m6, + "eligible": MessageLookupByLibrary.simpleMessage("elegível"), + "email": MessageLookupByLibrary.simpleMessage("E-mail"), + "encryption": MessageLookupByLibrary.simpleMessage("Criptografia"), + "encryptionKeys": + MessageLookupByLibrary.simpleMessage("Chaves de criptografia"), + "enterCode": MessageLookupByLibrary.simpleMessage("Coloque o código"), + "enterEmail": MessageLookupByLibrary.simpleMessage("Digite o email"), + "enterNewPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Insira uma senha nova para criptografar seus dados"), + "enterPasswordToEncrypt": MessageLookupByLibrary.simpleMessage( + "Insira a senha para criptografar seus dados"), + "enterThe6digitCodeFromnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Digite o código de 6 dígitos de\nseu aplicativo autenticador"), + "enterValidEmail": MessageLookupByLibrary.simpleMessage( + "Por, favor insira um endereço de e-mail válido."), + "enterYourEmailAddress": MessageLookupByLibrary.simpleMessage( + "Insira o seu endereço de e-mail"), + "enterYourPassword": + MessageLookupByLibrary.simpleMessage("Insira sua senha"), + "enterYourRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Digite sua chave de recuperação"), + "exportYourData": + MessageLookupByLibrary.simpleMessage("Exportar seus dados"), + "failedToFetchReferralDetails": MessageLookupByLibrary.simpleMessage( + "Não foi possível buscar informações do produto. Por favor, tente novamente mais tarde."), + "faq": MessageLookupByLibrary.simpleMessage("Perguntas frequentes"), + "feedback": MessageLookupByLibrary.simpleMessage("Opinião"), + "forgotPassword": + MessageLookupByLibrary.simpleMessage("Esqueceu sua senha"), + "freeStorageClaimed": MessageLookupByLibrary.simpleMessage( + "Armazenamento gratuito reivindicado"), + "freeStorageOnReferralSuccess": m9, + "freeStorageUsable": MessageLookupByLibrary.simpleMessage( + "Armazenamento livre utilizável"), + "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage( + "Gerando chaves de criptografia..."), + "howItWorks": MessageLookupByLibrary.simpleMessage("Como funciona"), + "incorrectPasswordTitle": + MessageLookupByLibrary.simpleMessage("Senha incorreta"), + "incorrectRecoveryKeyBody": MessageLookupByLibrary.simpleMessage( + "A chave de recuperação que você digitou está incorreta"), + "incorrectRecoveryKeyTitle": MessageLookupByLibrary.simpleMessage( + "Chave de recuperação incorreta"), + "insecureDevice": + MessageLookupByLibrary.simpleMessage("Dispositivo não seguro"), + "installManually": + MessageLookupByLibrary.simpleMessage("Instalar manualmente"), + "invalidEmailAddress": + MessageLookupByLibrary.simpleMessage("Endereço de e-mail invalido"), + "invalidKey": MessageLookupByLibrary.simpleMessage("Chave inválida"), + "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( + "A chave de recuperação que você digitou não é válida. Certifique-se de que contém 24 palavras e verifique a ortografia de cada uma.\n\nSe você inseriu um código de recuperação mais antigo, verifique se ele tem 64 caracteres e verifique cada um deles."), + "inviteToEnte": + MessageLookupByLibrary.simpleMessage("Convidar para o ente"), + "inviteYourFriends": + MessageLookupByLibrary.simpleMessage("Convide seus amigos"), + "itemsWillBeRemovedFromAlbum": MessageLookupByLibrary.simpleMessage( + "Os itens selecionados serão removidos deste álbum"), + "keepPhotos": MessageLookupByLibrary.simpleMessage("Manter fotos"), + "kindlyHelpUsWithThisInformation": MessageLookupByLibrary.simpleMessage( + "Ajude-nos com esta informação"), + "linkDeviceLimit": + MessageLookupByLibrary.simpleMessage("Limite do dispositivo"), + "linkExpired": MessageLookupByLibrary.simpleMessage("Expirado"), + "linkExpiry": MessageLookupByLibrary.simpleMessage("Expiração do link"), + "logInLabel": MessageLookupByLibrary.simpleMessage("Login"), + "loginTerms": MessageLookupByLibrary.simpleMessage( + "Ao clicar em login, eu concordo com os termos de serviço e a política de privacidade"), + "logout": MessageLookupByLibrary.simpleMessage("Encerrar sessão"), + "lostDevice": + MessageLookupByLibrary.simpleMessage("Dispositivo perdido?"), + "manage": MessageLookupByLibrary.simpleMessage("Gerenciar"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("Moderada"), + "noRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Nenhuma 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"), + "ok": MessageLookupByLibrary.simpleMessage("Ok"), + "oops": MessageLookupByLibrary.simpleMessage("Ops"), + "oopsSomethingWentWrong": + MessageLookupByLibrary.simpleMessage("Ops! Algo deu errado"), + "orPickAnExistingOne": + MessageLookupByLibrary.simpleMessage("Ou escolha um existente"), + "password": MessageLookupByLibrary.simpleMessage("Senha"), + "passwordChangedSuccessfully": + MessageLookupByLibrary.simpleMessage("Senha alterada com sucesso"), + "passwordLock": + MessageLookupByLibrary.simpleMessage("Bloqueio de senha"), + "passwordStrength": m15, + "passwordWarning": MessageLookupByLibrary.simpleMessage( + "Nós não salvamos essa senha, se você esquecer nós não poderemos descriptografar seus dados"), + "peopleUsingYourCode": + MessageLookupByLibrary.simpleMessage("Pessoas que usam seu código"), + "pleaseTryAgain": + MessageLookupByLibrary.simpleMessage("Por favor, tente novamente"), + "pleaseWait": + MessageLookupByLibrary.simpleMessage("Por favor, aguarde..."), + "privacyPolicyTitle": + MessageLookupByLibrary.simpleMessage("Política de Privacidade"), + "recover": MessageLookupByLibrary.simpleMessage("Recuperar"), + "recoverAccount": + MessageLookupByLibrary.simpleMessage("Recuperar conta"), + "recoverButton": MessageLookupByLibrary.simpleMessage("Recuperar"), + "recoveryKey": + MessageLookupByLibrary.simpleMessage("Chave de recuperação"), + "recoveryKeyCopiedToClipboard": MessageLookupByLibrary.simpleMessage( + "Chaves de recuperação foram copiadas para a área de transferência"), + "recoveryKeyOnForgotPassword": MessageLookupByLibrary.simpleMessage( + "Caso você esqueça sua senha, a única maneira de recuperar seus dados é com essa chave."), + "recoveryKeySaveDescription": MessageLookupByLibrary.simpleMessage( + "Não armazenamos essa chave, por favor, salve essa chave de 24 palavras em um lugar seguro."), + "recoveryKeySuccessBody": MessageLookupByLibrary.simpleMessage( + "Ótimo! Sua chave de recuperação é válida. Obrigado por verificar.\n\nLembre-se de manter o backup seguro de sua chave de recuperação."), + "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ê esquecer sua senha. Você pode encontrar sua chave de recuperação em Configurações > Conta.\n\nDigite sua chave de recuperação aqui para verificar se você a salvou corretamente."), + "recoverySuccessful": + MessageLookupByLibrary.simpleMessage("Recuperação bem sucedida!"), + "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( + "O dispositivo atual não é poderoso o suficiente para verificar sua senha, mas podemos regenerar de uma forma que funcione com todos os dispositivos.\n\nPor favor, faça o login usando sua chave de recuperação e recrie sua senha (você pode usar o mesmo novamente se desejar)."), + "recreatePasswordTitle": + MessageLookupByLibrary.simpleMessage("Restabeleça sua senha"), + "referralStep1": MessageLookupByLibrary.simpleMessage( + "Envie esse código aos seus amigos"), + "referralStep2": MessageLookupByLibrary.simpleMessage( + "2. Eles se inscrevem em um plano pago"), + "referralStep3": m19, + "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage( + "Referências estão atualmente pausadas"), + "remove": MessageLookupByLibrary.simpleMessage("Remover"), + "removeFromAlbum": + MessageLookupByLibrary.simpleMessage("Remover do álbum"), + "removeFromAlbumTitle": + MessageLookupByLibrary.simpleMessage("Remover do álbum?"), + "removeParticipant": + MessageLookupByLibrary.simpleMessage("Remover participante"), + "removeParticipantBody": m20, + "removePublicLink": + 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("Excluir?"), + "removingFromFavorites": + MessageLookupByLibrary.simpleMessage("Removendo dos favoritos..."), + "resendEmail": MessageLookupByLibrary.simpleMessage("Reenviar e-mail"), + "resetPasswordTitle": + MessageLookupByLibrary.simpleMessage("Restabeleça sua senha"), + "saveKey": MessageLookupByLibrary.simpleMessage("Salvar chave"), + "saveYourRecoveryKeyIfYouHaventAlready": + MessageLookupByLibrary.simpleMessage( + "Salve sua chave de recuperação, caso ainda não o tenha feito"), + "scanCode": MessageLookupByLibrary.simpleMessage("Escanear código"), + "scanThisBarcodeWithnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage( + "Escaneie este código de barras com\nseu aplicativo autenticador"), + "selectReason": + MessageLookupByLibrary.simpleMessage("Selecione o motivo"), + "sendEmail": MessageLookupByLibrary.simpleMessage("Enviar e-mail"), + "setPasswordTitle": MessageLookupByLibrary.simpleMessage( + "Chave: definaSenha\n→ definaSenha"), + "setupComplete": + MessageLookupByLibrary.simpleMessage("Configuração concluída"), + "shareTextReferralCode": m26, + "sharing": MessageLookupByLibrary.simpleMessage("Compartilhando..."), + "signUpTerms": MessageLookupByLibrary.simpleMessage( + "Eu concordo com os termos de serviço e a política de privacidade"), + "somethingWentWrongPleaseTryAgain": + MessageLookupByLibrary.simpleMessage( + "Algo deu errado. Por favor, tente outra vez"), + "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!"), + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": + MessageLookupByLibrary.simpleMessage( + "Desculpe, não foi possível gerar chaves seguras neste dispositivo.\n\npor favor, faça o login com um dispositivo diferente."), + "storageInGB": m32, + "strongStrength": MessageLookupByLibrary.simpleMessage("Forte"), + "subscribe": MessageLookupByLibrary.simpleMessage("Inscrever-se"), + "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage( + "Parece que sua assinatura expirou. Por favor inscreva-se para ativar o compartilhamento."), + "tapToCopy": MessageLookupByLibrary.simpleMessage("toque para copiar"), + "tapToEnterCode": + MessageLookupByLibrary.simpleMessage("Clica para inserir código"), + "terminate": MessageLookupByLibrary.simpleMessage("Terminar"), + "terminateSession": + MessageLookupByLibrary.simpleMessage("Encerrar sessão?"), + "termsOfServicesTitle": MessageLookupByLibrary.simpleMessage("Termos"), + "theyAlsoGetXGb": m36, + "thisCanBeUsedToRecoverYourAccountIfYou": + MessageLookupByLibrary.simpleMessage( + "Isso pode ser usado para recuperar sua conta se você perder seu segundo fator"), + "thisDevice": MessageLookupByLibrary.simpleMessage("Este aparelho"), + "thisWillLogYouOutOfTheFollowingDevice": + MessageLookupByLibrary.simpleMessage( + "Isso fará com que você saia do seguinte dispositivo:"), + "thisWillLogYouOutOfThisDevice": MessageLookupByLibrary.simpleMessage( + "Isso fará com que você saia deste dispositivo!"), + "total": MessageLookupByLibrary.simpleMessage("total"), + "tryAgain": MessageLookupByLibrary.simpleMessage("Tente novamente"), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage( + "Autenticação de dois fatores"), + "twofactorSetup": MessageLookupByLibrary.simpleMessage( + "Autenticação de dois fatores"), + "update": MessageLookupByLibrary.simpleMessage("Atualização"), + "updateAvailable": + MessageLookupByLibrary.simpleMessage("Atualização disponível"), + "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( + "Armazenamento utilizável é limitado pelo seu plano atual. O armazenamento reivindicado em excesso se tornará utilizável automaticamente quando você fizer a melhoria do seu plano."), + "useRecoveryKey": + MessageLookupByLibrary.simpleMessage("Usar chave de recuperação"), + "verify": MessageLookupByLibrary.simpleMessage("Verificar"), + "verifyEmail": MessageLookupByLibrary.simpleMessage("Verificar email"), + "verifyPassword": + MessageLookupByLibrary.simpleMessage("Verificar senha"), + "verifyingRecoveryKey": MessageLookupByLibrary.simpleMessage( + "Verificando chave de recuperação..."), + "viewRecoveryKey": + MessageLookupByLibrary.simpleMessage("Ver chave de recuperação"), + "viewer": MessageLookupByLibrary.simpleMessage("Visualizador"), + "weHaveSendEmailTo": m39, + "weakStrength": MessageLookupByLibrary.simpleMessage("Fraca"), + "welcomeBack": + MessageLookupByLibrary.simpleMessage("Bem-vindo de volta!"), + "yesConvertToViewer": MessageLookupByLibrary.simpleMessage( + "Sim, converter para visualizador"), + "yesLogout": + MessageLookupByLibrary.simpleMessage("Sim, terminar sessão"), + "yesRemove": MessageLookupByLibrary.simpleMessage("Sim, excluir"), + "you": MessageLookupByLibrary.simpleMessage("Você"), + "youCanAtMaxDoubleYourStorage": MessageLookupByLibrary.simpleMessage( + "* Você pode duplicar seu armazenamento no máximo"), + "yourAccountHasBeenDeleted": + MessageLookupByLibrary.simpleMessage("Sua conta foi deletada") + }; +} diff --git a/lib/generated/intl/messages_zh.dart b/lib/generated/intl/messages_zh.dart new file mode 100644 index 000000000..52ed0bfae --- /dev/null +++ b/lib/generated/intl/messages_zh.dart @@ -0,0 +1,1055 @@ +// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart +// This is a library that provides messages for a zh 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 => 'zh'; + + static String m42(count) => + "${Intl.plural(count, one: '添加一个项目', other: '添加一些项目')}"; + + static String m43(emailOrName) => "由 ${emailOrName} 添加"; + + static String m44(albumName) => "成功添加到 ${albumName}"; + + static String m0(paymentProvider) => "请先取消您现有的订阅 ${paymentProvider}"; + + static String m1(user) => "${user} 将无法添加更多照片到此相册\n\n他们仍然能够删除他们添加的现有照片"; + + static String m2(isFamilyMember, storageAmountInGb) => + "${Intl.select(isFamilyMember, { + 'true': '到目前为止,您的家庭已经领取了 ${storageAmountInGb} Gb', + 'false': '到目前为止,您已经领取了 ${storageAmountInGb} Gb', + 'other': '到目前为止,您已经领取了${storageAmountInGb} Gb', + })}"; + + static String m45(albumName) => "为 ${albumName} 创建了协作链接"; + + static String m3(familyAdminEmail) => + "请联系 ${familyAdminEmail} 来管理您的订阅"; + + static String m4(provider) => + "请通过support@ente.io 用英语联系我们来管理您的 ${provider} 订阅。"; + + static String m46(currentlyDeleting, totalCount) => + "正在删除 ${currentlyDeleting} /共 ${totalCount}"; + + static String m5(albumName) => "这将删除用于访问\"${albumName}\"的公共链接。"; + + static String m6(supportEmail) => "请从您注册的电子邮件地址拖放一封邮件到 ${supportEmail}"; + + static String m7(count, storageSaved) => + "您已经清理了 ${Intl.plural(count, other: '${count} 个重复文件')}, 释放了 (${storageSaved}!)"; + + static String m47(newEmail) => "电子邮件已更改为 ${newEmail}"; + + static String m8(email) => "${email} 没有 ente 账户。\n\n向他们发送分享照片的邀请。"; + + static String m48(count, formattedNumber) => + "此设备上的 ${Intl.plural(count, one: '1 个文件', other: '${formattedNumber} 个文件')} 已安全备份"; + + static String m49(count, formattedNumber) => + "此相册中的 ${Intl.plural(count, one: '1 个文件', other: '${formattedNumber} 个文件')} 已安全备份"; + + static String m9(storageAmountInGB) => + "每当有人注册付费计划时${storageAmountInGB} GB 并应用了您的代码"; + + static String m10(endDate) => "免费试用有效期至 ${endDate}"; + + static String m50(count) => + "只要您有有效的订阅,您仍然可以在 ente 上访问 ${Intl.plural(count, one: 'it', other: 'them')}"; + + static String m51(sizeInMBorGB) => "释放 ${sizeInMBorGB}"; + + static String m52(count, formattedSize) => + "${Intl.plural(count, one: '它可以从设备中删除以释放 ${formattedSize}', other: '它们可以从设备中删除以释放 ${formattedSize}')}"; + + static String m11(count) => + "${Intl.plural(count, one: '${count} 个项目', other: '${count} 个项目')}"; + + static String m53(count) => "已选择 ${count} 个"; + + static String m12(expiryTime) => "链接将在 ${expiryTime} 过期"; + + static String m13(maxValue) => + "当设置为最大值 (${maxValue}) 时,设备限制将放宽以允许大量查看者查看的临时高峰。"; + + static String m14(count) => + "${Intl.plural(count, zero: '没有回忆', one: '${count} 个回忆', other: '${count} 个回忆')}"; + + static String m54(count) => + "${Intl.plural(count, one: '移动一个项目', other: '移动一些项目')}"; + + static String m55(albumName) => "成功移动到 ${albumName}"; + + static String m15(passwordStrengthValue) => "密码强度: ${passwordStrengthValue}"; + + static String m16(providerName) => "如果您被收取费用,请用英语与 ${providerName} 的客服聊天"; + + static String m17(reason) => "很抱歉,您的支付因 ${reason} 而失败"; + + static String m56(toEmail) => "请给我们发送电子邮件至 ${toEmail}"; + + static String m57(toEmail) => "请将日志发送至 \n${toEmail}"; + + static String m18(storeName) => "在 ${storeName} 上给我们评分"; + + static String m19(storageInGB) => "3. 你都可以免费获得 ${storageInGB} GB*"; + + static String m20(userEmail) => + "${userEmail} 将从这个共享相册中删除\n\nTA们添加的任何照片也将从相册中删除"; + + static String m21(endDate) => "在 ${endDate} 前续费"; + + static String m22(count) => "已选择 ${count} 个"; + + static String m23(count, yourCount) => "选择了 ${count} 个 (您的 ${yourCount} 个)"; + + static String m24(verificationID) => "这是我的ente.io 的验证 ID: ${verificationID}。"; + + static String m25(verificationID) => + "嘿,你能确认这是你的 ente.io 验证 ID:${verificationID}"; + + static String m26(referralCode, referralStorageInGB) => + "ente转发码: ${referralCode} \n\n在设置 → 常规 → 推荐中应用它以在注册付费计划后可以免费获得 ${referralStorageInGB} GB\n\nhttps://ente.io"; + + static String m27(numberOfPeople) => + "${Intl.plural(numberOfPeople, zero: '与特定人员共享', one: '与 1 人共享', other: '与 ${numberOfPeople} 人共享')}"; + + static String m28(emailIDs) => "与 ${emailIDs} 共享"; + + static String m29(fileType) => "此 ${fileType} 将从您的设备中删除。"; + + static String m30(fileType) => "此 ${fileType} 同时在ente和您的设备中。"; + + static String m31(fileType) => "此 ${fileType} 将从ente中删除。"; + + static String m32(storageAmountInGB) => "${storageAmountInGB} GB"; + + static String m33(id) => + "您的 ${id} 已经链接到另一个ente账户。\n如果您想要通过此账户使用您的 ${id} ,请联系我们的客服\'\'"; + + static String m34(endDate) => "您的订阅将于 ${endDate} 取消"; + + static String m35(completed, total) => "已保存的回忆 ${completed}/共 ${total}"; + + static String m36(storageAmountInGB) => "他们也会获得 ${storageAmountInGB} GB"; + + static String m37(email) => "这是 ${email} 的验证ID"; + + static String m38(email) => "验证 ${email}"; + + static String m39(email) => "我们已经发送邮件到 ${email}"; + + static String m40(count) => + "${Intl.plural(count, one: '${count} 年前', other: '${count} 年前')}"; + + static String m41(storageSaved) => "您已成功释放了 ${storageSaved}!"; + + final messages = _notInlinedMessages(_notInlinedMessages); + static Map _notInlinedMessages(_) => { + "aNewVersionOfEnteIsAvailable": + MessageLookupByLibrary.simpleMessage("有新版本的 ente 可供使用。"), + "about": MessageLookupByLibrary.simpleMessage("关于"), + "account": MessageLookupByLibrary.simpleMessage("账户"), + "accountWelcomeBack": MessageLookupByLibrary.simpleMessage("欢迎回来!"), + "ackPasswordLostWarning": MessageLookupByLibrary.simpleMessage( + "我明白,如果我丢失密码,我可能会丢失我的数据,因为我的数据是 端到端加密的。"), + "activeSessions": MessageLookupByLibrary.simpleMessage("已登录的设备"), + "addANewEmail": MessageLookupByLibrary.simpleMessage("添加新的电子邮件"), + "addCollaborator": MessageLookupByLibrary.simpleMessage("添加协作者"), + "addItem": m42, + "addLocation": MessageLookupByLibrary.simpleMessage("添加地点"), + "addLocationButton": MessageLookupByLibrary.simpleMessage("添加"), + "addMore": MessageLookupByLibrary.simpleMessage("添加更多"), + "addToAlbum": MessageLookupByLibrary.simpleMessage("添加到相册"), + "addToEnte": MessageLookupByLibrary.simpleMessage("添加到 ente"), + "addViewer": MessageLookupByLibrary.simpleMessage("添加查看者"), + "addedAs": MessageLookupByLibrary.simpleMessage("已添加为"), + "addedBy": m43, + "addedSuccessfullyTo": m44, + "addingToFavorites": MessageLookupByLibrary.simpleMessage("正在添加到收藏..."), + "advanced": MessageLookupByLibrary.simpleMessage("高级设置"), + "advancedSettings": MessageLookupByLibrary.simpleMessage("高级设置"), + "after1Day": MessageLookupByLibrary.simpleMessage("1天后"), + "after1Hour": MessageLookupByLibrary.simpleMessage("1小时后"), + "after1Month": MessageLookupByLibrary.simpleMessage("1个月后"), + "after1Week": MessageLookupByLibrary.simpleMessage("1 周后"), + "after1Year": MessageLookupByLibrary.simpleMessage("1 年后"), + "albumOwner": MessageLookupByLibrary.simpleMessage("所有者"), + "albumTitle": MessageLookupByLibrary.simpleMessage("相册标题"), + "albumUpdated": MessageLookupByLibrary.simpleMessage("相册已更新"), + "albums": MessageLookupByLibrary.simpleMessage("相册"), + "allClear": MessageLookupByLibrary.simpleMessage("✨ 全部清除"), + "allMemoriesPreserved": + MessageLookupByLibrary.simpleMessage("所有回忆都已保存"), + "allowAddPhotosDescription": + MessageLookupByLibrary.simpleMessage("允许具有链接的人也将照片添加到共享相册。"), + "allowAddingPhotos": MessageLookupByLibrary.simpleMessage("允许添加照片"), + "allowDownloads": MessageLookupByLibrary.simpleMessage("允许下载"), + "allowPeopleToAddPhotos": + MessageLookupByLibrary.simpleMessage("允许人们添加照片"), + "androidIosWebDesktop": + MessageLookupByLibrary.simpleMessage("安卓, iOS, 网页端, 桌面端"), + "appleId": MessageLookupByLibrary.simpleMessage("Apple ID"), + "apply": MessageLookupByLibrary.simpleMessage("应用"), + "applyCodeTitle": MessageLookupByLibrary.simpleMessage("应用代码"), + "appstoreSubscription": + 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("您确定要退出登录吗?"), + "areYouSureYouWantToRenew": + MessageLookupByLibrary.simpleMessage("您确定要续费吗?"), + "askCancelReason": + MessageLookupByLibrary.simpleMessage("您的订阅已取消。您想分享原因吗?"), + "askDeleteReason": + MessageLookupByLibrary.simpleMessage("您删除账户的主要原因是什么?"), + "askYourLovedOnesToShare": + MessageLookupByLibrary.simpleMessage("请您的亲人分享"), + "atAFalloutShelter": MessageLookupByLibrary.simpleMessage("在一个保护所中"), + "authToChangeLockscreenSetting": + MessageLookupByLibrary.simpleMessage("请验证以更改锁屏设置"), + "authToChangeYourEmail": + MessageLookupByLibrary.simpleMessage("请验证以更改您的电子邮件"), + "authToChangeYourPassword": + MessageLookupByLibrary.simpleMessage("请验证以更改密码"), + "authToConfigureTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage("请进行身份验证以配置双重身份验证"), + "authToInitiateAccountDeletion": + MessageLookupByLibrary.simpleMessage("请进行身份验证以启动账户删除"), + "authToViewYourActiveSessions": + MessageLookupByLibrary.simpleMessage("请验证以查看您的活动会话"), + "authToViewYourHiddenFiles": + MessageLookupByLibrary.simpleMessage("请验证以查看您的隐藏文件"), + "authToViewYourMemories": + MessageLookupByLibrary.simpleMessage("请验证以查看您的回忆"), + "authToViewYourRecoveryKey": + MessageLookupByLibrary.simpleMessage("请验证以查看您的恢复密钥"), + "authenticating": MessageLookupByLibrary.simpleMessage("正在验证..."), + "authenticationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage("身份验证失败,请重试"), + "authenticationSuccessful": + MessageLookupByLibrary.simpleMessage("验证成功"), + "available": MessageLookupByLibrary.simpleMessage("可用"), + "backedUpFolders": MessageLookupByLibrary.simpleMessage("已备份的文件夹"), + "backup": MessageLookupByLibrary.simpleMessage("备份"), + "backupFailed": MessageLookupByLibrary.simpleMessage("备份失败"), + "backupOverMobileData": + MessageLookupByLibrary.simpleMessage("通过移动数据备份"), + "backupSettings": MessageLookupByLibrary.simpleMessage("备份设置"), + "backupVideos": MessageLookupByLibrary.simpleMessage("备份视频"), + "blog": MessageLookupByLibrary.simpleMessage("博客"), + "cachedData": MessageLookupByLibrary.simpleMessage("缓存数据"), + "calculating": MessageLookupByLibrary.simpleMessage("正在计算..."), + "canNotUploadToAlbumsOwnedByOthers": + MessageLookupByLibrary.simpleMessage("无法上传到他人拥有的相册中"), + "canOnlyCreateLinkForFilesOwnedByYou": + MessageLookupByLibrary.simpleMessage("只能为您拥有的文件创建链接"), + "canOnlyRemoveFilesOwnedByYou": + MessageLookupByLibrary.simpleMessage("只能删除您拥有的文件"), + "cancel": MessageLookupByLibrary.simpleMessage("取消"), + "cancelOtherSubscription": m0, + "cancelSubscription": MessageLookupByLibrary.simpleMessage("取消订阅"), + "cannotAddMorePhotosAfterBecomingViewer": m1, + "centerPoint": MessageLookupByLibrary.simpleMessage("中心点"), + "changeEmail": MessageLookupByLibrary.simpleMessage("修改邮箱"), + "changePassword": MessageLookupByLibrary.simpleMessage("修改密码"), + "changePasswordTitle": MessageLookupByLibrary.simpleMessage("修改密码"), + "changePermissions": MessageLookupByLibrary.simpleMessage("要修改权限吗?"), + "checkForUpdates": MessageLookupByLibrary.simpleMessage("检查更新"), + "checkInboxAndSpamFolder": MessageLookupByLibrary.simpleMessage( + "请检查您的收件箱 (或者是在您的“垃圾邮件”列表内) 以完成验证"), + "checking": MessageLookupByLibrary.simpleMessage("正在检查..."), + "claimFreeStorage": MessageLookupByLibrary.simpleMessage("领取免费存储"), + "claimMore": MessageLookupByLibrary.simpleMessage("领取更多!"), + "claimed": MessageLookupByLibrary.simpleMessage("已领取"), + "claimedStorageSoFar": m2, + "clearCaches": MessageLookupByLibrary.simpleMessage("清除缓存"), + "click": MessageLookupByLibrary.simpleMessage("• 点击"), + "clickOnTheOverflowMenu": + MessageLookupByLibrary.simpleMessage("• 点击溢出菜单"), + "close": MessageLookupByLibrary.simpleMessage("关闭"), + "clubByCaptureTime": MessageLookupByLibrary.simpleMessage("按抓取时间断开"), + "codeAppliedPageTitle": MessageLookupByLibrary.simpleMessage("代码已应用"), + "codeCopiedToClipboard": + MessageLookupByLibrary.simpleMessage("代码已复制到剪贴板"), + "codeUsedByYou": MessageLookupByLibrary.simpleMessage("您所使用的代码"), + "collabLinkSectionDescription": MessageLookupByLibrary.simpleMessage( + "创建一个链接以允许人们在您的共享相册中添加和查看照片,而无需应用程序或账户。 非常适合收集活动照片。"), + "collaborativeLink": MessageLookupByLibrary.simpleMessage("协作链接"), + "collaborativeLinkCreatedFor": m45, + "collaborator": MessageLookupByLibrary.simpleMessage("协作者"), + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": + MessageLookupByLibrary.simpleMessage("协作者可以将照片和视频添加到共享相册中。"), + "collectEventPhotos": MessageLookupByLibrary.simpleMessage("收集活动照片"), + "collectPhotos": MessageLookupByLibrary.simpleMessage("收集照片"), + "color": MessageLookupByLibrary.simpleMessage("颜色"), + "confirm": MessageLookupByLibrary.simpleMessage("确认"), + "confirm2FADisable": + MessageLookupByLibrary.simpleMessage("您确定要禁用双因素认证吗?"), + "confirmAccountDeletion": + MessageLookupByLibrary.simpleMessage("确认删除账户"), + "confirmDeletePrompt": + MessageLookupByLibrary.simpleMessage("是的,我想永久删除此账户及其相关数据."), + "confirmPassword": MessageLookupByLibrary.simpleMessage("请确认密码"), + "confirmPlanChange": MessageLookupByLibrary.simpleMessage("确认更改计划"), + "confirmRecoveryKey": MessageLookupByLibrary.simpleMessage("确认恢复密钥"), + "confirmYourRecoveryKey": + MessageLookupByLibrary.simpleMessage("确认您的恢复密钥"), + "contactFamilyAdmin": m3, + "contactSupport": MessageLookupByLibrary.simpleMessage("联系支持"), + "contactToManageSubscription": m4, + "continueLabel": MessageLookupByLibrary.simpleMessage("继续"), + "continueOnFreeTrial": 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("计数"), + "createAccount": MessageLookupByLibrary.simpleMessage("创建账户"), + "createAlbumActionHint": + MessageLookupByLibrary.simpleMessage("长按选择照片,然后点击 + 创建相册"), + "createNewAccount": MessageLookupByLibrary.simpleMessage("创建新账号"), + "createOrSelectAlbum": MessageLookupByLibrary.simpleMessage("创建或选择相册"), + "createPublicLink": MessageLookupByLibrary.simpleMessage("创建公开链接"), + "creatingLink": MessageLookupByLibrary.simpleMessage("正在创建链接..."), + "criticalUpdateAvailable": + MessageLookupByLibrary.simpleMessage("可用的关键更新"), + "currentUsageIs": MessageLookupByLibrary.simpleMessage("当前用量 "), + "custom": MessageLookupByLibrary.simpleMessage("自定义"), + "darkTheme": 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( + "您将要永久删除您的账户及其所有数据。\n此操作是不可逆的。"), + "deleteEmailRequest": MessageLookupByLibrary.simpleMessage( + "请从您注册的电子邮件地址发送电子邮件到 account-delettion@ente.io。"), + "deleteEmptyAlbums": MessageLookupByLibrary.simpleMessage("删除空相册"), + "deleteEmptyAlbumsWithQuestionMark": + MessageLookupByLibrary.simpleMessage("要删除空相册吗?"), + "deleteFromBoth": MessageLookupByLibrary.simpleMessage("同时从两者中删除"), + "deleteFromDevice": MessageLookupByLibrary.simpleMessage("从设备中删除"), + "deleteFromEnte": MessageLookupByLibrary.simpleMessage("从ente 中删除"), + "deleteLocation": MessageLookupByLibrary.simpleMessage("删除位置"), + "deletePhotos": MessageLookupByLibrary.simpleMessage("删除照片"), + "deleteProgress": m46, + "deleteReason1": MessageLookupByLibrary.simpleMessage("找不到我想要的功能"), + "deleteReason2": + MessageLookupByLibrary.simpleMessage("应用或某个功能不会有 \n行为。我认为它应该有的"), + "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("详情"), + "devAccountChanged": MessageLookupByLibrary.simpleMessage( + "我们用于在 App Store 上发布 ente 的开发者账户已更改。 因此,您将需要重新登录。\n\n对于给您带来的不便,我们深表歉意,但这是不可避免的。"), + "deviceFilesAutoUploading": + MessageLookupByLibrary.simpleMessage("添加到此设备相册的文件将自动上传到 ente。"), + "deviceLockExplanation": MessageLookupByLibrary.simpleMessage( + "当 ente 在前台并且正在进行备份时禁用设备屏幕锁定。 这通常不需要,但可以帮助大型库的大上传和初始导入更快地完成。"), + "didYouKnow": MessageLookupByLibrary.simpleMessage("您知道吗?"), + "disableAutoLock": MessageLookupByLibrary.simpleMessage("禁用自动锁定"), + "disableDownloadWarningBody": + MessageLookupByLibrary.simpleMessage("查看者仍然可以使用外部工具截图或保存您的照片副本"), + "disableDownloadWarningTitle": + MessageLookupByLibrary.simpleMessage("请注意"), + "disableLinkMessage": m5, + "disableTwofactor": MessageLookupByLibrary.simpleMessage("禁用双因素认证"), + "disablingTwofactorAuthentication": + MessageLookupByLibrary.simpleMessage("正在禁用双因素认证..."), + "discord": MessageLookupByLibrary.simpleMessage("Discord"), + "dismiss": MessageLookupByLibrary.simpleMessage("忽略"), + "doThisLater": MessageLookupByLibrary.simpleMessage("稍后再做"), + "doYouWantToDiscardTheEditsYouHaveMade": + MessageLookupByLibrary.simpleMessage("您想要放弃您所做的编辑吗?"), + "done": MessageLookupByLibrary.simpleMessage("已完成"), + "doubleYourStorage": + MessageLookupByLibrary.simpleMessage("将您的存储空间增加一倍"), + "download": MessageLookupByLibrary.simpleMessage("下载"), + "downloadFailed": MessageLookupByLibrary.simpleMessage("下載失敗"), + "downloading": MessageLookupByLibrary.simpleMessage("正在下载..."), + "dropSupportEmail": m6, + "duplicateFileCountWithStorageSaved": m7, + "edit": MessageLookupByLibrary.simpleMessage("编辑"), + "editsSaved": MessageLookupByLibrary.simpleMessage("已保存编辑"), + "eligible": MessageLookupByLibrary.simpleMessage("符合资格"), + "email": MessageLookupByLibrary.simpleMessage("电子邮件地址"), + "emailChangedTo": m47, + "emailNoEnteAccount": m8, + "emailYourLogs": MessageLookupByLibrary.simpleMessage("通过电子邮件发送您的日志"), + "empty": MessageLookupByLibrary.simpleMessage("空的"), + "emptyTrash": MessageLookupByLibrary.simpleMessage("要清空回收站吗?"), + "encryptingBackup": MessageLookupByLibrary.simpleMessage("正在加密备份..."), + "encryption": MessageLookupByLibrary.simpleMessage("加密"), + "encryptionKeys": MessageLookupByLibrary.simpleMessage("加密密钥"), + "endtoendEncryptedByDefault": + MessageLookupByLibrary.simpleMessage("默认端到端加密"), + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": + MessageLookupByLibrary.simpleMessage("只有您授予访问权限,ente 才能加密和保存文件"), + "enteSubscriptionPitch": MessageLookupByLibrary.simpleMessage( + "ente 会保留您的回忆,因此即使您丢失了设备,它们也始终可供您使用。"), + "enteSubscriptionShareWithFamily": + MessageLookupByLibrary.simpleMessage("您的家人也可以添加到您的计划中。"), + "enterAlbumName": MessageLookupByLibrary.simpleMessage("输入相册名称"), + "enterCode": MessageLookupByLibrary.simpleMessage("输入代码"), + "enterCodeDescription": + MessageLookupByLibrary.simpleMessage("输入您的朋友提供的代码来为您申请免费存储"), + "enterEmail": MessageLookupByLibrary.simpleMessage("输入电子邮件"), + "enterFileName": MessageLookupByLibrary.simpleMessage("请输入文件名"), + "enterNewPasswordToEncrypt": + MessageLookupByLibrary.simpleMessage("输入我们可以用来加密您的数据的新密码"), + "enterPassword": MessageLookupByLibrary.simpleMessage("输入密码"), + "enterPasswordToEncrypt": + MessageLookupByLibrary.simpleMessage("输入我们可以用来加密您的数据的密码"), + "enterReferralCode": MessageLookupByLibrary.simpleMessage("输入推荐代码"), + "enterThe6digitCodeFromnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage("从你的身份验证器应用中\n输入6位数字代码"), + "enterValidEmail": + MessageLookupByLibrary.simpleMessage("请输入一个有效的电子邮件地址。"), + "enterYourEmailAddress": + MessageLookupByLibrary.simpleMessage("请输入您的电子邮件地址"), + "enterYourPassword": MessageLookupByLibrary.simpleMessage("输入您的密码"), + "enterYourRecoveryKey": + MessageLookupByLibrary.simpleMessage("输入您的恢复密钥"), + "error": MessageLookupByLibrary.simpleMessage("错误"), + "everywhere": MessageLookupByLibrary.simpleMessage("随时随地"), + "exif": MessageLookupByLibrary.simpleMessage("EXIF"), + "existingUser": MessageLookupByLibrary.simpleMessage("现有用户"), + "expiredLinkInfo": + MessageLookupByLibrary.simpleMessage("此链接已过期。请选择新的过期时间或禁用链接过期。"), + "exportLogs": MessageLookupByLibrary.simpleMessage("导出日志"), + "exportYourData": MessageLookupByLibrary.simpleMessage("导出您的数据"), + "failedToApplyCode": MessageLookupByLibrary.simpleMessage("无法应用代码"), + "failedToCancel": MessageLookupByLibrary.simpleMessage("取消失败"), + "failedToFetchOriginalForEdit": + MessageLookupByLibrary.simpleMessage("无法获取原始编辑"), + "failedToFetchReferralDetails": + MessageLookupByLibrary.simpleMessage("无法获取引荐详细信息。 请稍后再试。"), + "failedToLoadAlbums": MessageLookupByLibrary.simpleMessage("加载相册失败"), + "failedToRenew": MessageLookupByLibrary.simpleMessage("续费失败"), + "failedToVerifyPaymentStatus": + MessageLookupByLibrary.simpleMessage("验证支付状态失败"), + "familyPlans": MessageLookupByLibrary.simpleMessage("家庭计划"), + "faq": MessageLookupByLibrary.simpleMessage("常见问题"), + "faqs": MessageLookupByLibrary.simpleMessage("常见问题"), + "favorite": MessageLookupByLibrary.simpleMessage("收藏"), + "feedback": MessageLookupByLibrary.simpleMessage("反馈"), + "fileSavedToGallery": MessageLookupByLibrary.simpleMessage("文件已保存到相册"), + "filesBackedUpFromDevice": m48, + "filesBackedUpInAlbum": m49, + "filesDeleted": MessageLookupByLibrary.simpleMessage("文件已删除"), + "flip": MessageLookupByLibrary.simpleMessage("上下翻转"), + "forYourMemories": MessageLookupByLibrary.simpleMessage("为您的回忆"), + "forgotPassword": MessageLookupByLibrary.simpleMessage("忘记密码"), + "freeStorageClaimed": MessageLookupByLibrary.simpleMessage("已领取的免费存储"), + "freeStorageOnReferralSuccess": m9, + "freeStorageUsable": MessageLookupByLibrary.simpleMessage("可用的免费存储"), + "freeTrial": MessageLookupByLibrary.simpleMessage("免费试用"), + "freeTrialValidTill": m10, + "freeUpAccessPostDelete": m50, + "freeUpAmount": m51, + "freeUpDeviceSpace": MessageLookupByLibrary.simpleMessage("释放设备空间"), + "freeUpSpace": MessageLookupByLibrary.simpleMessage("释放空间"), + "freeUpSpaceSaving": m52, + "galleryMemoryLimitInfo": + MessageLookupByLibrary.simpleMessage("在图库中显示最多1000个回忆"), + "general": MessageLookupByLibrary.simpleMessage("通用"), + "generatingEncryptionKeys": + MessageLookupByLibrary.simpleMessage("正在生成加密密钥..."), + "googlePlayId": MessageLookupByLibrary.simpleMessage("Google Play ID"), + "grantPermission": MessageLookupByLibrary.simpleMessage("授予权限"), + "groupNearbyPhotos": MessageLookupByLibrary.simpleMessage("将附近的照片分组"), + "hidden": MessageLookupByLibrary.simpleMessage("已隐藏"), + "hide": MessageLookupByLibrary.simpleMessage("隐藏"), + "howItWorks": MessageLookupByLibrary.simpleMessage("工作原理"), + "howToViewShareeVerificationID": MessageLookupByLibrary.simpleMessage( + "请让他们在设置屏幕上长按他们的电子邮件地址,并验证两台设备上的 ID 是否匹配。"), + "ignoredFolderUploadReason": MessageLookupByLibrary.simpleMessage( + "此相册中的某些文件在上传时被忽略,因为它们之前已从 ente 中删除。"), + "importing": MessageLookupByLibrary.simpleMessage("正在导入..."), + "incorrectCode": MessageLookupByLibrary.simpleMessage("代码错误"), + "incorrectPasswordTitle": MessageLookupByLibrary.simpleMessage("密码错误"), + "incorrectRecoveryKey": + MessageLookupByLibrary.simpleMessage("不正确的恢复密钥"), + "incorrectRecoveryKeyBody": + MessageLookupByLibrary.simpleMessage("您输入的恢复密钥不正确"), + "incorrectRecoveryKeyTitle": + MessageLookupByLibrary.simpleMessage("不正确的恢复密钥"), + "insecureDevice": MessageLookupByLibrary.simpleMessage("设备不安全"), + "installManually": MessageLookupByLibrary.simpleMessage("手动安装"), + "invalidEmailAddress": + MessageLookupByLibrary.simpleMessage("无效的电子邮件地址"), + "invalidKey": MessageLookupByLibrary.simpleMessage("无效的密钥"), + "invalidRecoveryKey": MessageLookupByLibrary.simpleMessage( + "您输入的恢复密钥无效。请确保它包含24个单词,并检查每个单词的拼写。\n\n如果您输入了旧的恢复码,请确保它长度为64个字符,并检查其中每个字符。"), + "invite": MessageLookupByLibrary.simpleMessage("邀请"), + "inviteToEnte": MessageLookupByLibrary.simpleMessage("邀请到 ente"), + "inviteYourFriends": MessageLookupByLibrary.simpleMessage("邀请您的朋友"), + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": + MessageLookupByLibrary.simpleMessage( + "看起来出了点问题。 请稍后重试。 如果错误仍然存在,请联系我们的支持团队。"), + "itemCount": m11, + "itemSelectedCount": m53, + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": + MessageLookupByLibrary.simpleMessage("项目显示永久删除前剩余的天数"), + "itemsWillBeRemovedFromAlbum": + MessageLookupByLibrary.simpleMessage("所选项目将从此相册中移除"), + "keepPhotos": MessageLookupByLibrary.simpleMessage("保留照片"), + "kiloMeterUnit": MessageLookupByLibrary.simpleMessage("公里"), + "kindlyHelpUsWithThisInformation": + MessageLookupByLibrary.simpleMessage("请帮助我们了解这个信息"), + "language": MessageLookupByLibrary.simpleMessage("语言"), + "lastUpdated": MessageLookupByLibrary.simpleMessage("最后更新"), + "leave": MessageLookupByLibrary.simpleMessage("离开"), + "leaveAlbum": MessageLookupByLibrary.simpleMessage("离开相册"), + "leaveFamily": MessageLookupByLibrary.simpleMessage("离开家庭计划"), + "leaveSharedAlbum": MessageLookupByLibrary.simpleMessage("要离开共享相册吗?"), + "light": MessageLookupByLibrary.simpleMessage("浅色"), + "lightTheme": MessageLookupByLibrary.simpleMessage("浅色"), + "linkCopiedToClipboard": + MessageLookupByLibrary.simpleMessage("链接已复制到剪贴板"), + "linkDeviceLimit": MessageLookupByLibrary.simpleMessage("设备限制"), + "linkEnabled": MessageLookupByLibrary.simpleMessage("已启用"), + "linkExpired": MessageLookupByLibrary.simpleMessage("已过期"), + "linkExpiresOn": m12, + "linkExpiry": MessageLookupByLibrary.simpleMessage("链接过期"), + "linkHasExpired": MessageLookupByLibrary.simpleMessage("链接已过期"), + "linkNeverExpires": MessageLookupByLibrary.simpleMessage("永不"), + "loadMessage1": MessageLookupByLibrary.simpleMessage("您可以与家庭分享您的订阅"), + "loadMessage2": + MessageLookupByLibrary.simpleMessage("到目前为止,我们已经保存了1 000多万个回忆"), + "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( + "我们使用 Xchacha20Poly1305 加密技术来安全地加密您的数据"), + "loadingExifData": + MessageLookupByLibrary.simpleMessage("正在加载 EXIF 数据..."), + "loadingGallery": MessageLookupByLibrary.simpleMessage("正在加载图库..."), + "loadingMessage": MessageLookupByLibrary.simpleMessage("正在加载您的照片..."), + "localGallery": MessageLookupByLibrary.simpleMessage("本地相册"), + "location": MessageLookupByLibrary.simpleMessage("地理位置"), + "locationName": MessageLookupByLibrary.simpleMessage("地点名称"), + "locationTagFeatureDescription": + MessageLookupByLibrary.simpleMessage("位置标签将在照片的某个半径范围内拍摄的所有照片进行分组"), + "lockButtonLabel": MessageLookupByLibrary.simpleMessage("锁定"), + "lockScreenEnablePreSteps": + MessageLookupByLibrary.simpleMessage("要启用锁屏,请在系统设置中设置设备密码或屏幕锁定。"), + "lockscreen": MessageLookupByLibrary.simpleMessage("锁屏"), + "logInLabel": MessageLookupByLibrary.simpleMessage("登录"), + "loggingOut": MessageLookupByLibrary.simpleMessage("正在退出登录..."), + "loginTerms": MessageLookupByLibrary.simpleMessage( + "点击登录后,我同意 服务条款隐私政策"), + "logout": MessageLookupByLibrary.simpleMessage("退出登录"), + "logsDialogBody": MessageLookupByLibrary.simpleMessage( + "这将跨日志发送以帮助我们调试您的问题。 请注意,将包含文件名以帮助跟踪特定文件的问题。"), + "longpressOnAnItemToViewInFullscreen": + MessageLookupByLibrary.simpleMessage("长按一个项目来全屏查看"), + "lostDevice": MessageLookupByLibrary.simpleMessage("丢失了设备吗?"), + "manage": MessageLookupByLibrary.simpleMessage("管理"), + "manageDeviceStorage": MessageLookupByLibrary.simpleMessage("管理设备存储"), + "manageFamily": MessageLookupByLibrary.simpleMessage("管理家庭计划"), + "manageLink": MessageLookupByLibrary.simpleMessage("管理链接"), + "manageParticipants": MessageLookupByLibrary.simpleMessage("管理"), + "manageSubscription": MessageLookupByLibrary.simpleMessage("管理订阅"), + "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"), + "matrix": MessageLookupByLibrary.simpleMessage("Matrix"), + "maxDeviceLimitSpikeHandling": m13, + "memoryCount": m14, + "merchandise": MessageLookupByLibrary.simpleMessage("商品"), + "mobileWebDesktop": + MessageLookupByLibrary.simpleMessage("移动端, 网页端, 桌面端"), + "moderateStrength": MessageLookupByLibrary.simpleMessage("中等"), + "monthly": MessageLookupByLibrary.simpleMessage("每月"), + "moveItem": m54, + "moveToAlbum": MessageLookupByLibrary.simpleMessage("移动到相册"), + "movedSuccessfullyTo": m55, + "movedToTrash": MessageLookupByLibrary.simpleMessage("已移至回收站"), + "movingFilesToAlbum": + MessageLookupByLibrary.simpleMessage("正在将文件移动到相册..."), + "name": MessageLookupByLibrary.simpleMessage("名称"), + "never": MessageLookupByLibrary.simpleMessage("永不"), + "newAlbum": MessageLookupByLibrary.simpleMessage("新建相册"), + "newToEnte": MessageLookupByLibrary.simpleMessage("刚来到ente"), + "newest": MessageLookupByLibrary.simpleMessage("最新"), + "no": MessageLookupByLibrary.simpleMessage("否"), + "noDeviceThatCanBeDeleted": + MessageLookupByLibrary.simpleMessage("您在此设备上没有可被删除的文件"), + "noDuplicates": MessageLookupByLibrary.simpleMessage("✨ 没有重复内容"), + "noExifData": MessageLookupByLibrary.simpleMessage("无 EXIF 数据"), + "noHiddenPhotosOrVideos": + MessageLookupByLibrary.simpleMessage("没有隐藏的照片或视频"), + "noPhotosAreBeingBackedUpRightNow": + MessageLookupByLibrary.simpleMessage("目前没有照片正在备份"), + "noRecoveryKey": MessageLookupByLibrary.simpleMessage("没有恢复密钥吗?"), + "noRecoveryKeyNoDecryption": MessageLookupByLibrary.simpleMessage( + "由于我们端到端加密协议的性质,如果没有您的密码或恢复密钥,您的数据将无法解密"), + "noResults": MessageLookupByLibrary.simpleMessage("无结果"), + "noResultsFound": MessageLookupByLibrary.simpleMessage("未找到任何结果"), + "nothingToSeeHere": MessageLookupByLibrary.simpleMessage("这里空空如也! 👀"), + "ok": MessageLookupByLibrary.simpleMessage("OK"), + "onDevice": MessageLookupByLibrary.simpleMessage("在设备上"), + "onEnte": MessageLookupByLibrary.simpleMessage( + "在 ente 上"), + "oops": MessageLookupByLibrary.simpleMessage("哎呀"), + "oopsCouldNotSaveEdits": + MessageLookupByLibrary.simpleMessage("糟糕,无法保存编辑"), + "oopsSomethingWentWrong": + MessageLookupByLibrary.simpleMessage("哎呀,似乎出了点问题"), + "openTheItem": MessageLookupByLibrary.simpleMessage("• 打开该项目"), + "optionalAsShortAsYouLike": + MessageLookupByLibrary.simpleMessage("可选的,按您喜欢的短语..."), + "orPickAnExistingOne": + MessageLookupByLibrary.simpleMessage("或者选择一个现有的"), + "password": MessageLookupByLibrary.simpleMessage("密码"), + "passwordChangedSuccessfully": + MessageLookupByLibrary.simpleMessage("密码修改成功"), + "passwordLock": MessageLookupByLibrary.simpleMessage("密码锁"), + "passwordStrength": m15, + "passwordWarning": MessageLookupByLibrary.simpleMessage( + "我们不储存这个密码,所以如果忘记, 我们不能解密您的数据"), + "paymentDetails": MessageLookupByLibrary.simpleMessage("付款明细"), + "paymentFailed": MessageLookupByLibrary.simpleMessage("支付失败"), + "paymentFailedTalkToProvider": m16, + "paymentFailedWithReason": m17, + "pendingSync": MessageLookupByLibrary.simpleMessage("正在等待同步"), + "peopleUsingYourCode": MessageLookupByLibrary.simpleMessage("使用您的代码的人"), + "permDeleteWarning": + MessageLookupByLibrary.simpleMessage("回收站中的所有项目将被永久删除\n\n此操作无法撤消"), + "permanentlyDelete": MessageLookupByLibrary.simpleMessage("永久删除"), + "permanentlyDeleteFromDevice": + MessageLookupByLibrary.simpleMessage("要从设备中永久删除吗?"), + "photoGridSize": MessageLookupByLibrary.simpleMessage("照片网格大小"), + "photoSmallCase": MessageLookupByLibrary.simpleMessage("照片"), + "photosAddedByYouWillBeRemovedFromTheAlbum": + MessageLookupByLibrary.simpleMessage("您添加的照片将从相册中移除"), + "pickCenterPoint": MessageLookupByLibrary.simpleMessage("选择中心点"), + "playstoreSubscription": + MessageLookupByLibrary.simpleMessage("PlayStore 订阅"), + "pleaseContactSupportAndWeWillBeHappyToHelp": + MessageLookupByLibrary.simpleMessage( + "请用英语联系 support@ente.io ,我们将乐意提供帮助!"), + "pleaseContactSupportIfTheProblemPersists": + MessageLookupByLibrary.simpleMessage("如果问题仍然存在,请联系支持"), + "pleaseEmailUsAt": m56, + "pleaseGrantPermissions": MessageLookupByLibrary.simpleMessage("请授予权限"), + "pleaseLoginAgain": MessageLookupByLibrary.simpleMessage("请重新登录"), + "pleaseSendTheLogsTo": m57, + "pleaseTryAgain": MessageLookupByLibrary.simpleMessage("请重试"), + "pleaseVerifyTheCodeYouHaveEntered": + MessageLookupByLibrary.simpleMessage("请验证您输入的代码"), + "pleaseWait": MessageLookupByLibrary.simpleMessage("请稍候..."), + "pleaseWaitDeletingAlbum": + MessageLookupByLibrary.simpleMessage("请稍候,正在删除相册"), + "pleaseWaitForSometimeBeforeRetrying": + MessageLookupByLibrary.simpleMessage("请稍等片刻后再重试"), + "preparingLogs": MessageLookupByLibrary.simpleMessage("正在准备日志..."), + "preserveMore": MessageLookupByLibrary.simpleMessage("保留更多"), + "pressAndHoldToPlayVideo": + MessageLookupByLibrary.simpleMessage("按住以播放视频"), + "privacy": MessageLookupByLibrary.simpleMessage("隐私"), + "privacyPolicyTitle": MessageLookupByLibrary.simpleMessage("隐私政策"), + "privateBackups": MessageLookupByLibrary.simpleMessage("私人备份"), + "privateSharing": MessageLookupByLibrary.simpleMessage("私人共享"), + "publicLinkCreated": MessageLookupByLibrary.simpleMessage("公共链接已创建"), + "publicLinkEnabled": MessageLookupByLibrary.simpleMessage("公开链接已启用"), + "radius": MessageLookupByLibrary.simpleMessage("半径"), + "raiseTicket": MessageLookupByLibrary.simpleMessage("提升工单"), + "rateTheApp": MessageLookupByLibrary.simpleMessage("为此应用评分"), + "rateUs": MessageLookupByLibrary.simpleMessage("给我们评分"), + "rateUsOnStore": m18, + "recover": MessageLookupByLibrary.simpleMessage("恢复"), + "recoverAccount": MessageLookupByLibrary.simpleMessage("恢复账户"), + "recoverButton": MessageLookupByLibrary.simpleMessage("恢复"), + "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请在此输入您的恢复密钥以确认您已经正确地保存了它。"), + "recoverySuccessful": MessageLookupByLibrary.simpleMessage("恢复成功!"), + "recreatePasswordBody": MessageLookupByLibrary.simpleMessage( + "当前设备的功能不足以验证您的密码,但我们可以以适用于所有设备的方式重新生成。\n\n请使用您的恢复密钥登录并重新生成您的密码(如果您愿意,可以再次使用相同的密码)。"), + "recreatePasswordTitle": MessageLookupByLibrary.simpleMessage("重新创建密码"), + "reddit": MessageLookupByLibrary.simpleMessage("Reddit"), + "referFriendsAnd2xYourPlan": + MessageLookupByLibrary.simpleMessage("推荐朋友和 2 倍您的计划"), + "referralStep1": MessageLookupByLibrary.simpleMessage("1. 将此代码提供给您的朋友"), + "referralStep2": MessageLookupByLibrary.simpleMessage("2. 他们注册一个付费计划"), + "referralStep3": m19, + "referrals": MessageLookupByLibrary.simpleMessage("推荐人"), + "referralsAreCurrentlyPaused": + MessageLookupByLibrary.simpleMessage("推荐已暂停"), + "remindToEmptyDeviceTrash": MessageLookupByLibrary.simpleMessage( + "同时从“设置”->“存储”中清空“最近删除”以领取释放的空间"), + "remindToEmptyEnteTrash": + MessageLookupByLibrary.simpleMessage("同时清空您的“回收站”以领取释放的空间"), + "remoteImages": MessageLookupByLibrary.simpleMessage("远程图像"), + "remoteThumbnails": MessageLookupByLibrary.simpleMessage("远程缩略图"), + "remoteVideos": MessageLookupByLibrary.simpleMessage("远程视频"), + "remove": MessageLookupByLibrary.simpleMessage("移除"), + "removeDuplicates": MessageLookupByLibrary.simpleMessage("移除重复内容"), + "removeFromAlbum": MessageLookupByLibrary.simpleMessage("从相册中移除"), + "removeFromAlbumTitle": + MessageLookupByLibrary.simpleMessage("要从相册中移除吗?"), + "removeFromFavorite": MessageLookupByLibrary.simpleMessage("从收藏中移除"), + "removeLink": MessageLookupByLibrary.simpleMessage("移除链接"), + "removeParticipant": MessageLookupByLibrary.simpleMessage("移除参与者"), + "removeParticipantBody": m20, + "removePublicLink": MessageLookupByLibrary.simpleMessage("删除公开链接"), + "removeShareItemsWarning": + MessageLookupByLibrary.simpleMessage("您要删除的某些项目是由其他人添加的,您将无法访问它们"), + "removeWithQuestionMark": MessageLookupByLibrary.simpleMessage("要移除吗?"), + "removingFromFavorites": + MessageLookupByLibrary.simpleMessage("正在从收藏中删除..."), + "rename": MessageLookupByLibrary.simpleMessage("重命名"), + "renameAlbum": MessageLookupByLibrary.simpleMessage("重命名相册"), + "renameFile": MessageLookupByLibrary.simpleMessage("重命名文件"), + "renewSubscription": MessageLookupByLibrary.simpleMessage("续费订阅"), + "renewsOn": m21, + "reportABug": MessageLookupByLibrary.simpleMessage("报告错误"), + "reportBug": MessageLookupByLibrary.simpleMessage("报告错误"), + "resendEmail": MessageLookupByLibrary.simpleMessage("重新发送电子邮件"), + "resetIgnoredFiles": MessageLookupByLibrary.simpleMessage("重置忽略的文件"), + "resetPasswordTitle": MessageLookupByLibrary.simpleMessage("重置密码"), + "restore": MessageLookupByLibrary.simpleMessage("恢复"), + "restoreToAlbum": MessageLookupByLibrary.simpleMessage("恢复到相册"), + "restoringFiles": MessageLookupByLibrary.simpleMessage("正在恢复文件..."), + "retry": MessageLookupByLibrary.simpleMessage("重试"), + "reviewDeduplicateItems": + MessageLookupByLibrary.simpleMessage("请检查并删除您认为重复的项目。"), + "rotateLeft": MessageLookupByLibrary.simpleMessage("向左旋转"), + "rotateRight": MessageLookupByLibrary.simpleMessage("向右旋转"), + "safelyStored": MessageLookupByLibrary.simpleMessage("安全存储"), + "save": MessageLookupByLibrary.simpleMessage("保存"), + "saveCopy": MessageLookupByLibrary.simpleMessage("保存副本"), + "saveKey": MessageLookupByLibrary.simpleMessage("保存密钥"), + "saveYourRecoveryKeyIfYouHaventAlready": + MessageLookupByLibrary.simpleMessage("如果你还没有就请保存你的恢复密钥"), + "saving": MessageLookupByLibrary.simpleMessage("正在保存..."), + "scanCode": MessageLookupByLibrary.simpleMessage("扫描代码"), + "scanThisBarcodeWithnyourAuthenticatorApp": + MessageLookupByLibrary.simpleMessage("用您的身份验证器应用\n扫描此条码"), + "searchByAlbumNameHint": MessageLookupByLibrary.simpleMessage("相册名称"), + "searchByExamples": MessageLookupByLibrary.simpleMessage( + "• 相册名称(例如“相机”)\n• 文件类型(例如“视频”、“.gif”)\n• 年份和月份(例如“2022”、“一月”)\n• 假期(例如“圣诞节”)\n• 照片说明(例如“#和女儿独居,好开心啊”)"), + "searchHintText": MessageLookupByLibrary.simpleMessage("相册,月,日,年,..."), + "security": MessageLookupByLibrary.simpleMessage("安全"), + "selectAlbum": MessageLookupByLibrary.simpleMessage("选择相册"), + "selectAll": MessageLookupByLibrary.simpleMessage("全选"), + "selectFoldersForBackup": + MessageLookupByLibrary.simpleMessage("选择要备份的文件夹"), + "selectLanguage": MessageLookupByLibrary.simpleMessage("选择语言"), + "selectReason": MessageLookupByLibrary.simpleMessage("选择原因"), + "selectYourPlan": MessageLookupByLibrary.simpleMessage("选择您的计划"), + "selectedFilesAreNotOnEnte": + MessageLookupByLibrary.simpleMessage("所选文件不在ente上"), + "selectedFoldersWillBeEncryptedAndBackedUp": + MessageLookupByLibrary.simpleMessage("所选文件夹将被加密和备份"), + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": + MessageLookupByLibrary.simpleMessage("所选项目将从所有相册中删除并移动到回收站。"), + "selectedPhotos": m22, + "selectedPhotosWithYours": m23, + "send": MessageLookupByLibrary.simpleMessage("发送"), + "sendEmail": MessageLookupByLibrary.simpleMessage("发送电子邮件"), + "sendInvite": MessageLookupByLibrary.simpleMessage("发送邀请"), + "sendLink": MessageLookupByLibrary.simpleMessage("发送链接"), + "sessionExpired": MessageLookupByLibrary.simpleMessage("会话已过期"), + "setAPassword": MessageLookupByLibrary.simpleMessage("设置密码"), + "setAs": MessageLookupByLibrary.simpleMessage("设置为"), + "setPasswordTitle": MessageLookupByLibrary.simpleMessage("设置密码"), + "setupComplete": MessageLookupByLibrary.simpleMessage("设置完成"), + "share": MessageLookupByLibrary.simpleMessage("分享"), + "shareALink": MessageLookupByLibrary.simpleMessage("分享链接"), + "shareAlbumHint": + MessageLookupByLibrary.simpleMessage("打开相册并点击右上角的分享按钮进行分享"), + "shareAnAlbumNow": MessageLookupByLibrary.simpleMessage("立即分享相册"), + "shareLink": MessageLookupByLibrary.simpleMessage("分享链接"), + "shareMyVerificationID": m24, + "shareOnlyWithThePeopleYouWant": + MessageLookupByLibrary.simpleMessage("仅与您想要的人分享"), + "shareTextConfirmOthersVerificationID": m25, + "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage( + "下载 ente,以便我们轻松分享原始质量的照片和视频\n\nhttps://ente.io/#download"), + "shareTextReferralCode": m26, + "shareWithNonenteUsers": + MessageLookupByLibrary.simpleMessage("与非ente 用户分享"), + "shareWithPeopleSectionTitle": m27, + "shareYourFirstAlbum": + MessageLookupByLibrary.simpleMessage("分享您的第一个相册"), + "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage( + "与其他ente用户创建共享和协作相册,包括免费计划的用户。"), + "sharedByMe": MessageLookupByLibrary.simpleMessage("由我共享的"), + "sharedWith": m28, + "sharedWithMe": MessageLookupByLibrary.simpleMessage("与我共享"), + "sharing": MessageLookupByLibrary.simpleMessage("正在分享..."), + "signUpTerms": MessageLookupByLibrary.simpleMessage( + "我同意 服务条款隐私政策"), + "singleFileDeleteFromDevice": m29, + "singleFileDeleteHighlight": + MessageLookupByLibrary.simpleMessage("它将从所有相册中删除。"), + "singleFileInBothLocalAndRemote": m30, + "singleFileInRemoteOnly": m31, + "skip": MessageLookupByLibrary.simpleMessage("略过"), + "social": MessageLookupByLibrary.simpleMessage("社交"), + "someItemsAreInBothEnteAndYourDevice": + MessageLookupByLibrary.simpleMessage("有些项目既在ente 也在您的设备中。"), + "someOfTheFilesYouAreTryingToDeleteAre": + MessageLookupByLibrary.simpleMessage("您要删除的部分文件仅在您的设备上可用,且删除后无法恢复"), + "someoneSharingAlbumsWithYouShouldSeeTheSameId": + MessageLookupByLibrary.simpleMessage("与您共享相册的人应该会在他们的设备上看到相同的 ID。"), + "somethingWentWrong": MessageLookupByLibrary.simpleMessage("出了些问题"), + "somethingWentWrongPleaseTryAgain": + MessageLookupByLibrary.simpleMessage("出了点问题,请重试"), + "sorry": MessageLookupByLibrary.simpleMessage("抱歉"), + "sorryCouldNotAddToFavorites": + MessageLookupByLibrary.simpleMessage("抱歉,无法添加到收藏!"), + "sorryCouldNotRemoveFromFavorites": + MessageLookupByLibrary.simpleMessage("抱歉,无法从收藏中移除!"), + "sorryTheCodeYouveEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage("抱歉,您输入的代码不正确"), + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": + MessageLookupByLibrary.simpleMessage( + "抱歉,我们无法在此设备上生成安全密钥。\n\n请使用其他设备注册。"), + "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ 成功"), + "startBackup": MessageLookupByLibrary.simpleMessage("开始备份"), + "storageInGB": m32, + "storageLimitExceeded": MessageLookupByLibrary.simpleMessage("已超出存储限制"), + "strongStrength": MessageLookupByLibrary.simpleMessage("强"), + "subAlreadyLinkedErrMessage": m33, + "subWillBeCancelledOn": m34, + "subscribe": MessageLookupByLibrary.simpleMessage("订阅"), + "subscribeToEnableSharing": + MessageLookupByLibrary.simpleMessage("您的订阅似乎已过期。请订阅以启用分享。"), + "subscription": MessageLookupByLibrary.simpleMessage("订阅"), + "success": MessageLookupByLibrary.simpleMessage("成功"), + "successfullyArchived": MessageLookupByLibrary.simpleMessage("归档成功"), + "successfullyUnarchived": + MessageLookupByLibrary.simpleMessage("取消归档成功"), + "suggestFeatures": MessageLookupByLibrary.simpleMessage("建议新功能"), + "support": MessageLookupByLibrary.simpleMessage("支持"), + "syncProgress": m35, + "syncStopped": MessageLookupByLibrary.simpleMessage("同步已停止"), + "syncing": MessageLookupByLibrary.simpleMessage("正在同步···"), + "systemTheme": MessageLookupByLibrary.simpleMessage("系统"), + "tapToCopy": MessageLookupByLibrary.simpleMessage("点击以复制"), + "tapToEnterCode": MessageLookupByLibrary.simpleMessage("点击以输入代码"), + "tempErrorContactSupportIfPersists": + MessageLookupByLibrary.simpleMessage( + "看起来出了点问题。 请稍后重试。 如果错误仍然存在,请联系我们的支持团队。"), + "terminate": MessageLookupByLibrary.simpleMessage("终止"), + "terminateSession": MessageLookupByLibrary.simpleMessage("是否终止会话?"), + "terms": MessageLookupByLibrary.simpleMessage("使用条款"), + "termsOfServicesTitle": MessageLookupByLibrary.simpleMessage("使用条款"), + "thankYou": MessageLookupByLibrary.simpleMessage("非常感谢您"), + "thankYouForSubscribing": + MessageLookupByLibrary.simpleMessage("感谢您的订阅!"), + "theDownloadCouldNotBeCompleted": + MessageLookupByLibrary.simpleMessage("未能完成下载"), + "theRecoveryKeyYouEnteredIsIncorrect": + MessageLookupByLibrary.simpleMessage("您输入的恢复密钥不正确"), + "theme": MessageLookupByLibrary.simpleMessage("主题"), + "theseItemsWillBeDeletedFromYourDevice": + MessageLookupByLibrary.simpleMessage("这些项目将从您的设备中删除。"), + "theyAlsoGetXGb": m36, + "theyWillBeDeletedFromAllAlbums": + MessageLookupByLibrary.simpleMessage("他们将从所有相册中删除。"), + "thisActionCannotBeUndone": + MessageLookupByLibrary.simpleMessage("此操作无法撤销"), + "thisAlbumAlreadyHDACollaborativeLink": + MessageLookupByLibrary.simpleMessage("此相册已经有一个协作链接"), + "thisCanBeUsedToRecoverYourAccountIfYou": + MessageLookupByLibrary.simpleMessage("如果您丢失了双因素,这可以用来恢复您的账户"), + "thisDevice": MessageLookupByLibrary.simpleMessage("此设备"), + "thisEmailIsAlreadyInUse": + MessageLookupByLibrary.simpleMessage("这个邮箱地址已经被使用"), + "thisImageHasNoExifData": + MessageLookupByLibrary.simpleMessage("此图像没有Exif 数据"), + "thisIsPersonVerificationId": m37, + "thisIsYourVerificationId": + MessageLookupByLibrary.simpleMessage("这是您的验证 ID"), + "thisWillLogYouOutOfTheFollowingDevice": + MessageLookupByLibrary.simpleMessage("这将使您在以下设备中退出登录:"), + "thisWillLogYouOutOfThisDevice": + MessageLookupByLibrary.simpleMessage("这将使您在此设备上退出登录!"), + "time": MessageLookupByLibrary.simpleMessage("时间"), + "toHideAPhotoOrVideo": MessageLookupByLibrary.simpleMessage("隐藏照片或视频"), + "todaysLogs": MessageLookupByLibrary.simpleMessage("当天日志"), + "total": MessageLookupByLibrary.simpleMessage("总计"), + "totalSize": MessageLookupByLibrary.simpleMessage("总大小"), + "trash": MessageLookupByLibrary.simpleMessage("回收站"), + "tryAgain": MessageLookupByLibrary.simpleMessage("请再试一次"), + "turnOnBackupForAutoUpload": + MessageLookupByLibrary.simpleMessage("打开备份以自动上传添加到此设备文件夹的文件。"), + "twitter": MessageLookupByLibrary.simpleMessage("Twitter"), + "twoMonthsFreeOnYearlyPlans": + MessageLookupByLibrary.simpleMessage("在年度计划上免费获得 2 个月"), + "twofactor": MessageLookupByLibrary.simpleMessage("两因素认证"), + "twofactorAuthenticationHasBeenDisabled": + MessageLookupByLibrary.simpleMessage("双因素认证已被禁用"), + "twofactorAuthenticationPageTitle": + MessageLookupByLibrary.simpleMessage("双因素认证"), + "twofactorAuthenticationSuccessfullyReset": + MessageLookupByLibrary.simpleMessage("成功重置双因素认证"), + "twofactorSetup": MessageLookupByLibrary.simpleMessage("双因素认证设置"), + "unarchive": MessageLookupByLibrary.simpleMessage("取消存档"), + "unarchiveAlbum": MessageLookupByLibrary.simpleMessage("取消存档相册"), + "unarchiving": MessageLookupByLibrary.simpleMessage("正在取消归档..."), + "uncategorized": MessageLookupByLibrary.simpleMessage("未分类的"), + "unhide": MessageLookupByLibrary.simpleMessage("取消隐藏"), + "unhideToAlbum": MessageLookupByLibrary.simpleMessage("取消隐藏到相册"), + "unhidingFilesToAlbum": + MessageLookupByLibrary.simpleMessage("正在取消隐藏文件到相册"), + "unlock": MessageLookupByLibrary.simpleMessage("解锁"), + "unselectAll": MessageLookupByLibrary.simpleMessage("取消全部选择"), + "update": MessageLookupByLibrary.simpleMessage("更新"), + "updateAvailable": MessageLookupByLibrary.simpleMessage("有可用的更新"), + "updatingFolderSelection": + MessageLookupByLibrary.simpleMessage("正在更新文件夹选择..."), + "upgrade": MessageLookupByLibrary.simpleMessage("升级"), + "uploadingFilesToAlbum": + MessageLookupByLibrary.simpleMessage("正在将文件上传到相册..."), + "usableReferralStorageInfo": MessageLookupByLibrary.simpleMessage( + "可用存储空间受您当前计划的限制。 当您升级您的计划时,超出要求的存储空间将自动变为可用。"), + "usePublicLinksForPeopleNotOnEnte": + MessageLookupByLibrary.simpleMessage("为不在ente 上的人使用公共链接"), + "useRecoveryKey": MessageLookupByLibrary.simpleMessage("使用恢复密钥"), + "useSelectedPhoto": MessageLookupByLibrary.simpleMessage("使用所选照片"), + "verificationFailedPleaseTryAgain": + MessageLookupByLibrary.simpleMessage("验证失败,请重试"), + "verificationId": MessageLookupByLibrary.simpleMessage("验证 ID"), + "verify": MessageLookupByLibrary.simpleMessage("验证"), + "verifyEmail": MessageLookupByLibrary.simpleMessage("验证电子邮件"), + "verifyEmailID": m38, + "verifyPassword": MessageLookupByLibrary.simpleMessage("验证密码"), + "verifying": MessageLookupByLibrary.simpleMessage("正在验证..."), + "verifyingRecoveryKey": + MessageLookupByLibrary.simpleMessage("正在验证恢复密钥..."), + "videoSmallCase": MessageLookupByLibrary.simpleMessage("视频"), + "viewActiveSessions": MessageLookupByLibrary.simpleMessage("查看活动会话"), + "viewAllExifData": MessageLookupByLibrary.simpleMessage("查看所有 EXIF 数据"), + "viewLogs": MessageLookupByLibrary.simpleMessage("查看日志"), + "viewRecoveryKey": MessageLookupByLibrary.simpleMessage("查看恢复密钥"), + "viewer": MessageLookupByLibrary.simpleMessage("查看者"), + "visitWebToManage": + MessageLookupByLibrary.simpleMessage("请访问 web.ente.io 来管理您的订阅"), + "weAreOpenSource": MessageLookupByLibrary.simpleMessage("我们是开源的 !"), + "weDontSupportEditingPhotosAndAlbumsThatYouDont": + MessageLookupByLibrary.simpleMessage("我们不支持编辑您尚未拥有的照片和相册"), + "weHaveSendEmailTo": m39, + "weakStrength": MessageLookupByLibrary.simpleMessage("弱"), + "welcomeBack": MessageLookupByLibrary.simpleMessage("欢迎回来!"), + "yearly": MessageLookupByLibrary.simpleMessage("每年"), + "yearsAgo": m40, + "yes": MessageLookupByLibrary.simpleMessage("是"), + "yesCancel": MessageLookupByLibrary.simpleMessage("是的,取消"), + "yesConvertToViewer": MessageLookupByLibrary.simpleMessage("是的,转换为查看者"), + "yesDelete": MessageLookupByLibrary.simpleMessage("是的, 删除"), + "yesDiscardChanges": MessageLookupByLibrary.simpleMessage("是的,放弃更改"), + "yesLogout": MessageLookupByLibrary.simpleMessage("是的,退出登陆"), + "yesRemove": MessageLookupByLibrary.simpleMessage("是,移除"), + "yesRenew": MessageLookupByLibrary.simpleMessage("是的,续费"), + "you": MessageLookupByLibrary.simpleMessage("您"), + "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": m41, + "yourAccountHasBeenDeleted": + 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("您在此相册中没有可以删除的文件") + }; +} diff --git a/lib/generated/l10n.dart b/lib/generated/l10n.dart new file mode 100644 index 000000000..f0a2752b8 --- /dev/null +++ b/lib/generated/l10n.dart @@ -0,0 +1,6829 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND +import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; +import 'intl/messages_all.dart'; + +// ************************************************************************** +// Generator: Flutter Intl IDE plugin +// Made by Localizely +// ************************************************************************** + +// ignore_for_file: non_constant_identifier_names, lines_longer_than_80_chars +// ignore_for_file: join_return_with_assignment, prefer_final_in_for_each +// ignore_for_file: avoid_redundant_argument_values, avoid_escaping_inner_quotes + +class S { + S(); + + static S? _current; + + static S get current { + assert(_current != null, + 'No instance of S was loaded. Try to initialize the S delegate before accessing S.current.'); + return _current!; + } + + static const AppLocalizationDelegate delegate = AppLocalizationDelegate(); + + static Future load(Locale locale) { + final name = (locale.countryCode?.isEmpty ?? false) + ? locale.languageCode + : locale.toString(); + final localeName = Intl.canonicalizedLocale(name); + return initializeMessages(localeName).then((_) { + Intl.defaultLocale = localeName; + final instance = S(); + S._current = instance; + + return instance; + }); + } + + static S of(BuildContext context) { + final instance = S.maybeOf(context); + assert(instance != null, + 'No instance of S present in the widget tree. Did you add S.delegate in localizationsDelegates?'); + return instance!; + } + + static S? maybeOf(BuildContext context) { + return Localizations.of(context, S); + } + + /// `Enter your email address` + String get enterYourEmailAddress { + return Intl.message( + 'Enter your email address', + name: 'enterYourEmailAddress', + desc: '', + args: [], + ); + } + + /// `Welcome back!` + String get accountWelcomeBack { + return Intl.message( + 'Welcome back!', + name: 'accountWelcomeBack', + desc: '', + args: [], + ); + } + + /// `Email` + String get email { + return Intl.message( + 'Email', + name: 'email', + desc: '', + args: [], + ); + } + + /// `Cancel` + String get cancel { + return Intl.message( + 'Cancel', + name: 'cancel', + desc: '', + args: [], + ); + } + + /// `Verify` + String get verify { + return Intl.message( + 'Verify', + name: 'verify', + desc: '', + args: [], + ); + } + + /// `Invalid email address` + String get invalidEmailAddress { + return Intl.message( + 'Invalid email address', + name: 'invalidEmailAddress', + desc: '', + args: [], + ); + } + + /// `Please enter a valid email address.` + String get enterValidEmail { + return Intl.message( + 'Please enter a valid email address.', + name: 'enterValidEmail', + desc: '', + args: [], + ); + } + + /// `Delete account` + String get deleteAccount { + return Intl.message( + 'Delete account', + name: 'deleteAccount', + desc: '', + args: [], + ); + } + + /// `What is the main reason you are deleting your account?` + String get askDeleteReason { + return Intl.message( + 'What is the main reason you are deleting your account?', + name: 'askDeleteReason', + desc: '', + args: [], + ); + } + + /// `We are sorry to see you go. Please share your feedback to help us improve.` + String get deleteAccountFeedbackPrompt { + return Intl.message( + 'We are sorry to see you go. Please share your feedback to help us improve.', + name: 'deleteAccountFeedbackPrompt', + desc: '', + args: [], + ); + } + + /// `Feedback` + String get feedback { + return Intl.message( + 'Feedback', + name: 'feedback', + desc: '', + args: [], + ); + } + + /// `Kindly help us with this information` + String get kindlyHelpUsWithThisInformation { + return Intl.message( + 'Kindly help us with this information', + name: 'kindlyHelpUsWithThisInformation', + desc: '', + args: [], + ); + } + + /// `Yes, I want to permanently delete this account and all its data.` + String get confirmDeletePrompt { + return Intl.message( + 'Yes, I want to permanently delete this account and all its data.', + name: 'confirmDeletePrompt', + desc: '', + args: [], + ); + } + + /// `Confirm Account Deletion` + String get confirmAccountDeletion { + return Intl.message( + 'Confirm Account Deletion', + name: 'confirmAccountDeletion', + desc: '', + args: [], + ); + } + + /// `You are about to permanently delete your account and all its data.\nThis action is irreversible.` + String get deleteConfirmDialogBody { + return Intl.message( + 'You are about to permanently delete your account and all its data.\nThis action is irreversible.', + name: 'deleteConfirmDialogBody', + desc: '', + args: [], + ); + } + + /// `Delete Account Permanently` + String get deleteAccountPermanentlyButton { + return Intl.message( + 'Delete Account Permanently', + name: 'deleteAccountPermanentlyButton', + desc: '', + args: [], + ); + } + + /// `Your account has been deleted` + String get yourAccountHasBeenDeleted { + return Intl.message( + 'Your account has been deleted', + name: 'yourAccountHasBeenDeleted', + desc: '', + args: [], + ); + } + + /// `Select reason` + String get selectReason { + return Intl.message( + 'Select reason', + name: 'selectReason', + desc: '', + args: [], + ); + } + + /// `It’s missing a key feature that I need` + String get deleteReason1 { + return Intl.message( + 'It’s missing a key feature that I need', + name: 'deleteReason1', + desc: '', + args: [], + ); + } + + /// `The app or a certain feature does not \nbehave as I think it should` + String get deleteReason2 { + return Intl.message( + 'The app or a certain feature does not \nbehave as I think it should', + name: 'deleteReason2', + desc: '', + args: [], + ); + } + + /// `I found another service that I like better` + String get deleteReason3 { + return Intl.message( + 'I found another service that I like better', + name: 'deleteReason3', + desc: '', + args: [], + ); + } + + /// `My reason isn’t listed` + String get deleteReason4 { + return Intl.message( + 'My reason isn’t listed', + name: 'deleteReason4', + desc: '', + args: [], + ); + } + + /// `Send email` + String get sendEmail { + return Intl.message( + 'Send email', + name: 'sendEmail', + desc: '', + args: [], + ); + } + + /// `Your request will be processed within 72 hours.` + String get deleteRequestSLAText { + return Intl.message( + 'Your request will be processed within 72 hours.', + name: 'deleteRequestSLAText', + desc: '', + args: [], + ); + } + + /// `Please send an email to account-deletion@ente.io from your registered email address.` + String get deleteEmailRequest { + return Intl.message( + 'Please send an email to account-deletion@ente.io from your registered email address.', + name: 'deleteEmailRequest', + desc: '', + args: [], + ); + } + + /// `Ok` + String get ok { + return Intl.message( + 'Ok', + name: 'ok', + desc: '', + args: [], + ); + } + + /// `Create account` + String get createAccount { + return Intl.message( + 'Create account', + name: 'createAccount', + desc: '', + args: [], + ); + } + + /// `Create new account` + String get createNewAccount { + return Intl.message( + 'Create new account', + name: 'createNewAccount', + desc: '', + args: [], + ); + } + + /// `Password` + String get password { + return Intl.message( + 'Password', + name: 'password', + desc: '', + args: [], + ); + } + + /// `Confirm password` + String get confirmPassword { + return Intl.message( + 'Confirm password', + name: 'confirmPassword', + desc: '', + args: [], + ); + } + + /// `Active sessions` + String get activeSessions { + return Intl.message( + 'Active sessions', + name: 'activeSessions', + desc: '', + args: [], + ); + } + + /// `Oops` + String get oops { + return Intl.message( + 'Oops', + name: 'oops', + desc: '', + args: [], + ); + } + + /// `Something went wrong, please try again` + String get somethingWentWrongPleaseTryAgain { + return Intl.message( + 'Something went wrong, please try again', + name: 'somethingWentWrongPleaseTryAgain', + desc: '', + args: [], + ); + } + + /// `This will log you out of this device!` + String get thisWillLogYouOutOfThisDevice { + return Intl.message( + 'This will log you out of this device!', + name: 'thisWillLogYouOutOfThisDevice', + desc: '', + args: [], + ); + } + + /// `This will log you out of the following device:` + String get thisWillLogYouOutOfTheFollowingDevice { + return Intl.message( + 'This will log you out of the following device:', + name: 'thisWillLogYouOutOfTheFollowingDevice', + desc: '', + args: [], + ); + } + + /// `Terminate session?` + String get terminateSession { + return Intl.message( + 'Terminate session?', + name: 'terminateSession', + desc: '', + args: [], + ); + } + + /// `Terminate` + String get terminate { + return Intl.message( + 'Terminate', + name: 'terminate', + desc: '', + args: [], + ); + } + + /// `This device` + String get thisDevice { + return Intl.message( + 'This device', + name: 'thisDevice', + desc: '', + args: [], + ); + } + + /// `Recover` + String get recoverButton { + return Intl.message( + 'Recover', + name: 'recoverButton', + desc: '', + args: [], + ); + } + + /// `Recovery successful!` + String get recoverySuccessful { + return Intl.message( + 'Recovery successful!', + name: 'recoverySuccessful', + desc: '', + args: [], + ); + } + + /// `Decrypting...` + String get decrypting { + return Intl.message( + 'Decrypting...', + name: 'decrypting', + desc: '', + args: [], + ); + } + + /// `Incorrect recovery key` + String get incorrectRecoveryKeyTitle { + return Intl.message( + 'Incorrect recovery key', + name: 'incorrectRecoveryKeyTitle', + desc: '', + args: [], + ); + } + + /// `The recovery key you entered is incorrect` + String get incorrectRecoveryKeyBody { + return Intl.message( + 'The recovery key you entered is incorrect', + name: 'incorrectRecoveryKeyBody', + desc: '', + args: [], + ); + } + + /// `Forgot password` + String get forgotPassword { + return Intl.message( + 'Forgot password', + name: 'forgotPassword', + desc: '', + args: [], + ); + } + + /// `Enter your recovery key` + String get enterYourRecoveryKey { + return Intl.message( + 'Enter your recovery key', + name: 'enterYourRecoveryKey', + desc: '', + args: [], + ); + } + + /// `No recovery key?` + String get noRecoveryKey { + return Intl.message( + 'No recovery key?', + name: 'noRecoveryKey', + desc: '', + args: [], + ); + } + + /// `Sorry` + String get sorry { + return Intl.message( + 'Sorry', + name: 'sorry', + desc: '', + args: [], + ); + } + + /// `Due to the nature of our end-to-end encryption protocol, your data cannot be decrypted without your password or recovery key` + String get noRecoveryKeyNoDecryption { + return Intl.message( + 'Due to the nature of our end-to-end encryption protocol, your data cannot be decrypted without your password or recovery key', + name: 'noRecoveryKeyNoDecryption', + desc: '', + args: [], + ); + } + + /// `Verify email` + String get verifyEmail { + return Intl.message( + 'Verify email', + name: 'verifyEmail', + desc: '', + args: [], + ); + } + + /// `Please check your inbox (and spam) to complete verification` + String get checkInboxAndSpamFolder { + return Intl.message( + 'Please check your inbox (and spam) to complete verification', + name: 'checkInboxAndSpamFolder', + desc: '', + args: [], + ); + } + + /// `Tap to enter code` + String get tapToEnterCode { + return Intl.message( + 'Tap to enter code', + name: 'tapToEnterCode', + desc: '', + args: [], + ); + } + + /// `Resend email` + String get resendEmail { + return Intl.message( + 'Resend email', + name: 'resendEmail', + desc: '', + args: [], + ); + } + + /// `We have sent a mail to {email}` + String weHaveSendEmailTo(String email) { + return Intl.message( + 'We have sent a mail to $email', + name: 'weHaveSendEmailTo', + desc: 'Text to indicate that we have sent a mail to the user', + args: [email], + ); + } + + /// `Set password` + String get setPasswordTitle { + return Intl.message( + 'Set password', + name: 'setPasswordTitle', + desc: '', + args: [], + ); + } + + /// `Change password` + String get changePasswordTitle { + return Intl.message( + 'Change password', + name: 'changePasswordTitle', + desc: '', + args: [], + ); + } + + /// `Reset password` + String get resetPasswordTitle { + return Intl.message( + 'Reset password', + name: 'resetPasswordTitle', + desc: '', + args: [], + ); + } + + /// `Encryption keys` + String get encryptionKeys { + return Intl.message( + 'Encryption keys', + name: 'encryptionKeys', + desc: '', + args: [], + ); + } + + /// `We don't store this password, so if you forget, we cannot decrypt your data` + String get passwordWarning { + return Intl.message( + 'We don\'t store this password, so if you forget, we cannot decrypt your data', + name: 'passwordWarning', + desc: '', + args: [], + ); + } + + /// `Enter a password we can use to encrypt your data` + String get enterPasswordToEncrypt { + return Intl.message( + 'Enter a password we can use to encrypt your data', + name: 'enterPasswordToEncrypt', + desc: '', + args: [], + ); + } + + /// `Enter a new password we can use to encrypt your data` + String get enterNewPasswordToEncrypt { + return Intl.message( + 'Enter a new password we can use to encrypt your data', + name: 'enterNewPasswordToEncrypt', + desc: '', + args: [], + ); + } + + /// `Weak` + String get weakStrength { + return Intl.message( + 'Weak', + name: 'weakStrength', + desc: '', + args: [], + ); + } + + /// `Strong` + String get strongStrength { + return Intl.message( + 'Strong', + name: 'strongStrength', + desc: '', + args: [], + ); + } + + /// `Moderate` + String get moderateStrength { + return Intl.message( + 'Moderate', + name: 'moderateStrength', + desc: '', + args: [], + ); + } + + /// `Password strength: {passwordStrengthValue}` + String passwordStrength(String passwordStrengthValue) { + return Intl.message( + 'Password strength: $passwordStrengthValue', + name: 'passwordStrength', + desc: 'Text to indicate the password strength', + args: [passwordStrengthValue], + ); + } + + /// `Password changed successfully` + String get passwordChangedSuccessfully { + return Intl.message( + 'Password changed successfully', + name: 'passwordChangedSuccessfully', + desc: '', + args: [], + ); + } + + /// `Generating encryption keys...` + String get generatingEncryptionKeys { + return Intl.message( + 'Generating encryption keys...', + name: 'generatingEncryptionKeys', + desc: '', + args: [], + ); + } + + /// `Please wait...` + String get pleaseWait { + return Intl.message( + 'Please wait...', + name: 'pleaseWait', + desc: '', + args: [], + ); + } + + /// `Continue` + String get continueLabel { + return Intl.message( + 'Continue', + name: 'continueLabel', + desc: '', + args: [], + ); + } + + /// `Insecure device` + String get insecureDevice { + return Intl.message( + 'Insecure device', + name: 'insecureDevice', + desc: '', + args: [], + ); + } + + /// `Sorry, we could not generate secure keys on this device.\n\nplease sign up from a different device.` + String get sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease { + return Intl.message( + 'Sorry, we could not generate secure keys on this device.\n\nplease sign up from a different device.', + name: 'sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease', + desc: '', + args: [], + ); + } + + /// `How it works` + String get howItWorks { + return Intl.message( + 'How it works', + name: 'howItWorks', + desc: '', + args: [], + ); + } + + /// `Encryption` + String get encryption { + return Intl.message( + 'Encryption', + name: 'encryption', + desc: '', + args: [], + ); + } + + /// `I understand that if I lose my password, I may lose my data since my data is end-to-end encrypted.` + String get ackPasswordLostWarning { + return Intl.message( + 'I understand that if I lose my password, I may lose my data since my data is end-to-end encrypted.', + name: 'ackPasswordLostWarning', + desc: '', + args: [], + ); + } + + /// `Privacy Policy` + String get privacyPolicyTitle { + return Intl.message( + 'Privacy Policy', + name: 'privacyPolicyTitle', + desc: '', + args: [], + ); + } + + /// `Terms` + String get termsOfServicesTitle { + return Intl.message( + 'Terms', + name: 'termsOfServicesTitle', + desc: '', + args: [], + ); + } + + /// `I agree to the terms of service and privacy policy` + String get signUpTerms { + return Intl.message( + 'I agree to the terms of service and privacy policy', + name: 'signUpTerms', + desc: '', + args: [], + ); + } + + /// `Log in` + String get logInLabel { + return Intl.message( + 'Log in', + name: 'logInLabel', + desc: '', + args: [], + ); + } + + /// `By clicking log in, I agree to the terms of service and privacy policy` + String get loginTerms { + return Intl.message( + 'By clicking log in, I agree to the terms of service and privacy policy', + name: 'loginTerms', + desc: '', + args: [], + ); + } + + /// `Change email` + String get changeEmail { + return Intl.message( + 'Change email', + name: 'changeEmail', + desc: '', + args: [], + ); + } + + /// `Enter your password` + String get enterYourPassword { + return Intl.message( + 'Enter your password', + name: 'enterYourPassword', + desc: '', + args: [], + ); + } + + /// `Welcome back!` + String get welcomeBack { + return Intl.message( + 'Welcome back!', + name: 'welcomeBack', + desc: '', + args: [], + ); + } + + /// `Contact support` + String get contactSupport { + return Intl.message( + 'Contact support', + name: 'contactSupport', + desc: '', + args: [], + ); + } + + /// `Incorrect password` + String get incorrectPasswordTitle { + return Intl.message( + 'Incorrect password', + name: 'incorrectPasswordTitle', + desc: '', + args: [], + ); + } + + /// `Please try again` + String get pleaseTryAgain { + return Intl.message( + 'Please try again', + name: 'pleaseTryAgain', + desc: '', + args: [], + ); + } + + /// `Recreate password` + String get recreatePasswordTitle { + return Intl.message( + 'Recreate password', + name: 'recreatePasswordTitle', + desc: '', + args: [], + ); + } + + /// `Use recovery key` + String get useRecoveryKey { + return Intl.message( + 'Use recovery key', + name: 'useRecoveryKey', + desc: '', + args: [], + ); + } + + /// `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).` + String get recreatePasswordBody { + return Intl.message( + '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).', + name: 'recreatePasswordBody', + desc: '', + args: [], + ); + } + + /// `Verify password` + String get verifyPassword { + return Intl.message( + 'Verify password', + name: 'verifyPassword', + desc: '', + args: [], + ); + } + + /// `Recovery key` + String get recoveryKey { + return Intl.message( + 'Recovery key', + name: 'recoveryKey', + desc: '', + args: [], + ); + } + + /// `If you forget your password, the only way you can recover your data is with this key.` + String get recoveryKeyOnForgotPassword { + return Intl.message( + 'If you forget your password, the only way you can recover your data is with this key.', + name: 'recoveryKeyOnForgotPassword', + desc: '', + args: [], + ); + } + + /// `We don't store this key, please save this 24 word key in a safe place.` + String get recoveryKeySaveDescription { + return Intl.message( + 'We don\'t store this key, please save this 24 word key in a safe place.', + name: 'recoveryKeySaveDescription', + desc: '', + args: [], + ); + } + + /// `Do this later` + String get doThisLater { + return Intl.message( + 'Do this later', + name: 'doThisLater', + desc: '', + args: [], + ); + } + + /// `Save key` + String get saveKey { + return Intl.message( + 'Save key', + name: 'saveKey', + desc: '', + args: [], + ); + } + + /// `Recovery key copied to clipboard` + String get recoveryKeyCopiedToClipboard { + return Intl.message( + 'Recovery key copied to clipboard', + name: 'recoveryKeyCopiedToClipboard', + desc: '', + args: [], + ); + } + + /// `Recover account` + String get recoverAccount { + return Intl.message( + 'Recover account', + name: 'recoverAccount', + desc: '', + args: [], + ); + } + + /// `Recover` + String get recover { + return Intl.message( + 'Recover', + name: 'recover', + desc: '', + args: [], + ); + } + + /// `Please drop an email to {supportEmail} from your registered email address` + String dropSupportEmail(String supportEmail) { + return Intl.message( + 'Please drop an email to $supportEmail from your registered email address', + name: 'dropSupportEmail', + desc: '', + args: [supportEmail], + ); + } + + /// `Two-factor setup` + String get twofactorSetup { + return Intl.message( + 'Two-factor setup', + name: 'twofactorSetup', + desc: '', + args: [], + ); + } + + /// `Enter code` + String get enterCode { + return Intl.message( + 'Enter code', + name: 'enterCode', + desc: '', + args: [], + ); + } + + /// `Scan code` + String get scanCode { + return Intl.message( + 'Scan code', + name: 'scanCode', + desc: '', + args: [], + ); + } + + /// `Code copied to clipboard` + String get codeCopiedToClipboard { + return Intl.message( + 'Code copied to clipboard', + name: 'codeCopiedToClipboard', + desc: '', + args: [], + ); + } + + /// `Copy-paste this code\nto your authenticator app` + String get copypasteThisCodentoYourAuthenticatorApp { + return Intl.message( + 'Copy-paste this code\nto your authenticator app', + name: 'copypasteThisCodentoYourAuthenticatorApp', + desc: '', + args: [], + ); + } + + /// `tap to copy` + String get tapToCopy { + return Intl.message( + 'tap to copy', + name: 'tapToCopy', + desc: '', + args: [], + ); + } + + /// `Scan this barcode with\nyour authenticator app` + String get scanThisBarcodeWithnyourAuthenticatorApp { + return Intl.message( + 'Scan this barcode with\nyour authenticator app', + name: 'scanThisBarcodeWithnyourAuthenticatorApp', + desc: '', + args: [], + ); + } + + /// `Enter the 6-digit code from\nyour authenticator app` + String get enterThe6digitCodeFromnyourAuthenticatorApp { + return Intl.message( + 'Enter the 6-digit code from\nyour authenticator app', + name: 'enterThe6digitCodeFromnyourAuthenticatorApp', + desc: '', + args: [], + ); + } + + /// `Confirm` + String get confirm { + return Intl.message( + 'Confirm', + name: 'confirm', + desc: '', + args: [], + ); + } + + /// `Setup complete` + String get setupComplete { + return Intl.message( + 'Setup complete', + name: 'setupComplete', + desc: '', + args: [], + ); + } + + /// `Save your recovery key if you haven't already` + String get saveYourRecoveryKeyIfYouHaventAlready { + return Intl.message( + 'Save your recovery key if you haven\'t already', + name: 'saveYourRecoveryKeyIfYouHaventAlready', + desc: '', + args: [], + ); + } + + /// `This can be used to recover your account if you lose your second factor` + String get thisCanBeUsedToRecoverYourAccountIfYou { + return Intl.message( + 'This can be used to recover your account if you lose your second factor', + name: 'thisCanBeUsedToRecoverYourAccountIfYou', + desc: '', + args: [], + ); + } + + /// `Two-factor authentication` + String get twofactorAuthenticationPageTitle { + return Intl.message( + 'Two-factor authentication', + name: 'twofactorAuthenticationPageTitle', + desc: '', + args: [], + ); + } + + /// `Lost device?` + String get lostDevice { + return Intl.message( + 'Lost device?', + name: 'lostDevice', + desc: '', + args: [], + ); + } + + /// `Verifying recovery key...` + String get verifyingRecoveryKey { + return Intl.message( + 'Verifying recovery key...', + name: 'verifyingRecoveryKey', + desc: '', + args: [], + ); + } + + /// `Recovery key verified` + String get recoveryKeyVerified { + return Intl.message( + 'Recovery key verified', + name: 'recoveryKeyVerified', + desc: '', + args: [], + ); + } + + /// `Great! Your recovery key is valid. Thank you for verifying.\n\nPlease remember to keep your recovery key safely backed up.` + String get recoveryKeySuccessBody { + return Intl.message( + 'Great! Your recovery key is valid. Thank you for verifying.\n\nPlease remember to keep your recovery key safely backed up.', + name: 'recoveryKeySuccessBody', + desc: '', + args: [], + ); + } + + /// `The recovery key you entered is not valid. Please make sure it contains 24 words, and check the spelling of each.\n\nIf you entered an older recovery code, make sure it is 64 characters long, and check each of them.` + String get invalidRecoveryKey { + return Intl.message( + 'The recovery key you entered is not valid. Please make sure it contains 24 words, and check the spelling of each.\n\nIf you entered an older recovery code, make sure it is 64 characters long, and check each of them.', + name: 'invalidRecoveryKey', + desc: '', + args: [], + ); + } + + /// `Invalid key` + String get invalidKey { + return Intl.message( + 'Invalid key', + name: 'invalidKey', + desc: '', + args: [], + ); + } + + /// `Try again` + String get tryAgain { + return Intl.message( + 'Try again', + name: 'tryAgain', + desc: '', + args: [], + ); + } + + /// `View recovery key` + String get viewRecoveryKey { + return Intl.message( + 'View recovery key', + name: 'viewRecoveryKey', + desc: '', + args: [], + ); + } + + /// `Confirm recovery key` + String get confirmRecoveryKey { + return Intl.message( + 'Confirm recovery key', + name: 'confirmRecoveryKey', + desc: '', + args: [], + ); + } + + /// `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.` + String get recoveryKeyVerifyReason { + return Intl.message( + '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.', + name: 'recoveryKeyVerifyReason', + desc: '', + args: [], + ); + } + + /// `Confirm your recovery key` + String get confirmYourRecoveryKey { + return Intl.message( + 'Confirm your recovery key', + name: 'confirmYourRecoveryKey', + desc: '', + args: [], + ); + } + + /// `Add viewer` + String get addViewer { + return Intl.message( + 'Add viewer', + name: 'addViewer', + desc: '', + args: [], + ); + } + + /// `Add collaborator` + String get addCollaborator { + return Intl.message( + 'Add collaborator', + name: 'addCollaborator', + desc: '', + args: [], + ); + } + + /// `Add a new email` + String get addANewEmail { + return Intl.message( + 'Add a new email', + name: 'addANewEmail', + desc: '', + args: [], + ); + } + + /// `Or pick an existing one` + String get orPickAnExistingOne { + return Intl.message( + 'Or pick an existing one', + name: 'orPickAnExistingOne', + desc: '', + args: [], + ); + } + + /// `Collaborators can add photos and videos to the shared album.` + String get collaboratorsCanAddPhotosAndVideosToTheSharedAlbum { + return Intl.message( + 'Collaborators can add photos and videos to the shared album.', + name: 'collaboratorsCanAddPhotosAndVideosToTheSharedAlbum', + desc: '', + args: [], + ); + } + + /// `Enter email` + String get enterEmail { + return Intl.message( + 'Enter email', + name: 'enterEmail', + desc: '', + args: [], + ); + } + + /// `Owner` + String get albumOwner { + return Intl.message( + 'Owner', + name: 'albumOwner', + desc: 'Role of the album owner', + args: [], + ); + } + + /// `You` + String get you { + return Intl.message( + 'You', + name: 'you', + desc: '', + args: [], + ); + } + + /// `Collaborator` + String get collaborator { + return Intl.message( + 'Collaborator', + name: 'collaborator', + desc: '', + args: [], + ); + } + + /// `Add more` + String get addMore { + return Intl.message( + 'Add more', + name: 'addMore', + desc: 'Button text to add more collaborators/viewers', + args: [], + ); + } + + /// `Viewer` + String get viewer { + return Intl.message( + 'Viewer', + name: 'viewer', + desc: '', + args: [], + ); + } + + /// `Remove` + String get remove { + return Intl.message( + 'Remove', + name: 'remove', + desc: '', + args: [], + ); + } + + /// `Remove participant` + String get removeParticipant { + return Intl.message( + 'Remove participant', + name: 'removeParticipant', + desc: 'menuSectionTitle for removing a participant', + args: [], + ); + } + + /// `Manage` + String get manage { + return Intl.message( + 'Manage', + name: 'manage', + desc: '', + args: [], + ); + } + + /// `Added as` + String get addedAs { + return Intl.message( + 'Added as', + name: 'addedAs', + desc: '', + args: [], + ); + } + + /// `Change permissions?` + String get changePermissions { + return Intl.message( + 'Change permissions?', + name: 'changePermissions', + desc: '', + args: [], + ); + } + + /// `Yes, convert to viewer` + String get yesConvertToViewer { + return Intl.message( + 'Yes, convert to viewer', + name: 'yesConvertToViewer', + desc: '', + args: [], + ); + } + + /// `{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` + String cannotAddMorePhotosAfterBecomingViewer(Object user) { + return Intl.message( + '$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', + name: 'cannotAddMorePhotosAfterBecomingViewer', + desc: '', + args: [user], + ); + } + + /// `Allow adding photos` + String get allowAddingPhotos { + return Intl.message( + 'Allow adding photos', + name: 'allowAddingPhotos', + desc: 'Switch button to enable uploading photos to a public link', + args: [], + ); + } + + /// `Allow people with the link to also add photos to the shared album.` + String get allowAddPhotosDescription { + return Intl.message( + 'Allow people with the link to also add photos to the shared album.', + name: 'allowAddPhotosDescription', + desc: '', + args: [], + ); + } + + /// `Password lock` + String get passwordLock { + return Intl.message( + 'Password lock', + name: 'passwordLock', + desc: '', + args: [], + ); + } + + /// `Please note` + String get disableDownloadWarningTitle { + return Intl.message( + 'Please note', + name: 'disableDownloadWarningTitle', + desc: '', + args: [], + ); + } + + /// `Viewers can still take screenshots or save a copy of your photos using external tools` + String get disableDownloadWarningBody { + return Intl.message( + 'Viewers can still take screenshots or save a copy of your photos using external tools', + name: 'disableDownloadWarningBody', + desc: '', + args: [], + ); + } + + /// `Allow downloads` + String get allowDownloads { + return Intl.message( + 'Allow downloads', + name: 'allowDownloads', + desc: '', + args: [], + ); + } + + /// `Device limit` + String get linkDeviceLimit { + return Intl.message( + 'Device limit', + name: 'linkDeviceLimit', + desc: '', + args: [], + ); + } + + /// `Link expiry` + String get linkExpiry { + return Intl.message( + 'Link expiry', + name: 'linkExpiry', + desc: '', + args: [], + ); + } + + /// `Expired` + String get linkExpired { + return Intl.message( + 'Expired', + name: 'linkExpired', + desc: '', + args: [], + ); + } + + /// `Enabled` + String get linkEnabled { + return Intl.message( + 'Enabled', + name: 'linkEnabled', + desc: '', + args: [], + ); + } + + /// `Never` + String get linkNeverExpires { + return Intl.message( + 'Never', + name: 'linkNeverExpires', + desc: '', + args: [], + ); + } + + /// `This link has expired. Please select a new expiry time or disable link expiry.` + String get expiredLinkInfo { + return Intl.message( + 'This link has expired. Please select a new expiry time or disable link expiry.', + name: 'expiredLinkInfo', + desc: '', + args: [], + ); + } + + /// `Set a password` + String get setAPassword { + return Intl.message( + 'Set a password', + name: 'setAPassword', + desc: '', + args: [], + ); + } + + /// `Lock` + String get lockButtonLabel { + return Intl.message( + 'Lock', + name: 'lockButtonLabel', + desc: '', + args: [], + ); + } + + /// `Enter password` + String get enterPassword { + return Intl.message( + 'Enter password', + name: 'enterPassword', + desc: '', + args: [], + ); + } + + /// `Remove link` + String get removeLink { + return Intl.message( + 'Remove link', + name: 'removeLink', + desc: '', + args: [], + ); + } + + /// `Manage link` + String get manageLink { + return Intl.message( + 'Manage link', + name: 'manageLink', + desc: '', + args: [], + ); + } + + /// `Link will expire on {expiryTime}` + String linkExpiresOn(Object expiryTime) { + return Intl.message( + 'Link will expire on $expiryTime', + name: 'linkExpiresOn', + desc: '', + args: [expiryTime], + ); + } + + /// `Album updated` + String get albumUpdated { + return Intl.message( + 'Album updated', + name: 'albumUpdated', + desc: '', + args: [], + ); + } + + /// `When set to the maximum ({maxValue}), the device limit will be relaxed to allow for temporary spikes of large number of viewers.` + String maxDeviceLimitSpikeHandling(int maxValue) { + return Intl.message( + 'When set to the maximum ($maxValue), the device limit will be relaxed to allow for temporary spikes of large number of viewers.', + name: 'maxDeviceLimitSpikeHandling', + desc: '', + args: [maxValue], + ); + } + + /// `Never` + String get never { + return Intl.message( + 'Never', + name: 'never', + desc: '', + args: [], + ); + } + + /// `Custom` + String get custom { + return Intl.message( + 'Custom', + name: 'custom', + desc: 'Label for setting custom value for link expiry', + args: [], + ); + } + + /// `After 1 hour` + String get after1Hour { + return Intl.message( + 'After 1 hour', + name: 'after1Hour', + desc: '', + args: [], + ); + } + + /// `After 1 day` + String get after1Day { + return Intl.message( + 'After 1 day', + name: 'after1Day', + desc: '', + args: [], + ); + } + + /// `After 1 week` + String get after1Week { + return Intl.message( + 'After 1 week', + name: 'after1Week', + desc: '', + args: [], + ); + } + + /// `After 1 month` + String get after1Month { + return Intl.message( + 'After 1 month', + name: 'after1Month', + desc: '', + args: [], + ); + } + + /// `After 1 year` + String get after1Year { + return Intl.message( + 'After 1 year', + name: 'after1Year', + desc: '', + args: [], + ); + } + + /// `Manage` + String get manageParticipants { + return Intl.message( + 'Manage', + name: 'manageParticipants', + desc: '', + args: [], + ); + } + + /// `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.` + String get collabLinkSectionDescription { + return Intl.message( + '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.', + name: 'collabLinkSectionDescription', + desc: '', + args: [], + ); + } + + /// `Collect photos` + String get collectPhotos { + return Intl.message( + 'Collect photos', + name: 'collectPhotos', + desc: '', + args: [], + ); + } + + /// `Collaborative link` + String get collaborativeLink { + return Intl.message( + 'Collaborative link', + name: 'collaborativeLink', + desc: '', + args: [], + ); + } + + /// `Share with non-ente users` + String get shareWithNonenteUsers { + return Intl.message( + 'Share with non-ente users', + name: 'shareWithNonenteUsers', + desc: '', + args: [], + ); + } + + /// `Create public link` + String get createPublicLink { + return Intl.message( + 'Create public link', + name: 'createPublicLink', + desc: '', + args: [], + ); + } + + /// `Send link` + String get sendLink { + return Intl.message( + 'Send link', + name: 'sendLink', + desc: '', + args: [], + ); + } + + /// `Copy link` + String get copyLink { + return Intl.message( + 'Copy link', + name: 'copyLink', + desc: '', + args: [], + ); + } + + /// `Link has expired` + String get linkHasExpired { + return Intl.message( + 'Link has expired', + name: 'linkHasExpired', + desc: '', + args: [], + ); + } + + /// `Public link enabled` + String get publicLinkEnabled { + return Intl.message( + 'Public link enabled', + name: 'publicLinkEnabled', + desc: '', + args: [], + ); + } + + /// `Share a link` + String get shareALink { + return Intl.message( + 'Share a link', + name: 'shareALink', + desc: '', + args: [], + ); + } + + /// `Create shared and collaborative albums with other ente users, including users on free plans.` + String get sharedAlbumSectionDescription { + return Intl.message( + 'Create shared and collaborative albums with other ente users, including users on free plans.', + name: 'sharedAlbumSectionDescription', + desc: '', + args: [], + ); + } + + /// `{numberOfPeople, plural, =0 {Share with specific people} =1 {Shared with 1 person} other {Shared with {numberOfPeople} people}}` + String shareWithPeopleSectionTitle(int numberOfPeople) { + return Intl.plural( + numberOfPeople, + zero: 'Share with specific people', + one: 'Shared with 1 person', + other: 'Shared with $numberOfPeople people', + name: 'shareWithPeopleSectionTitle', + desc: '', + args: [numberOfPeople], + ); + } + + /// `This is your Verification ID` + String get thisIsYourVerificationId { + return Intl.message( + 'This is your Verification ID', + name: 'thisIsYourVerificationId', + desc: '', + args: [], + ); + } + + /// `Someone sharing albums with you should see the same ID on their device.` + String get someoneSharingAlbumsWithYouShouldSeeTheSameId { + return Intl.message( + 'Someone sharing albums with you should see the same ID on their device.', + name: 'someoneSharingAlbumsWithYouShouldSeeTheSameId', + desc: '', + args: [], + ); + } + + /// `Please ask them to long-press their email address on the settings screen, and verify that the IDs on both devices match.` + String get howToViewShareeVerificationID { + return Intl.message( + 'Please ask them to long-press their email address on the settings screen, and verify that the IDs on both devices match.', + name: 'howToViewShareeVerificationID', + desc: '', + args: [], + ); + } + + /// `This is {email}'s Verification ID` + String thisIsPersonVerificationId(String email) { + return Intl.message( + 'This is $email\'s Verification ID', + name: 'thisIsPersonVerificationId', + desc: '', + args: [email], + ); + } + + /// `Verification ID` + String get verificationId { + return Intl.message( + 'Verification ID', + name: 'verificationId', + desc: '', + args: [], + ); + } + + /// `Verify {email}` + String verifyEmailID(Object email) { + return Intl.message( + 'Verify $email', + name: 'verifyEmailID', + desc: '', + args: [email], + ); + } + + /// `{email} does not have an ente account.\n\nSend them an invite to share photos.` + String emailNoEnteAccount(Object email) { + return Intl.message( + '$email does not have an ente account.\n\nSend them an invite to share photos.', + name: 'emailNoEnteAccount', + desc: '', + args: [email], + ); + } + + /// `Here's my verification ID: {verificationID} for ente.io.` + String shareMyVerificationID(Object verificationID) { + return Intl.message( + 'Here\'s my verification ID: $verificationID for ente.io.', + name: 'shareMyVerificationID', + desc: '', + args: [verificationID], + ); + } + + /// `Hey, can you confirm that this is your ente.io verification ID: {verificationID}` + String shareTextConfirmOthersVerificationID(Object verificationID) { + return Intl.message( + 'Hey, can you confirm that this is your ente.io verification ID: $verificationID', + name: 'shareTextConfirmOthersVerificationID', + desc: '', + args: [verificationID], + ); + } + + /// `Something went wrong` + String get somethingWentWrong { + return Intl.message( + 'Something went wrong', + name: 'somethingWentWrong', + desc: '', + args: [], + ); + } + + /// `Send invite` + String get sendInvite { + return Intl.message( + 'Send invite', + name: 'sendInvite', + desc: '', + args: [], + ); + } + + /// `Download ente so we can easily share original quality photos and videos\n\nhttps://ente.io/#download` + String get shareTextRecommendUsingEnte { + return Intl.message( + 'Download ente so we can easily share original quality photos and videos\n\nhttps://ente.io/#download', + name: 'shareTextRecommendUsingEnte', + desc: '', + args: [], + ); + } + + /// `Done` + String get done { + return Intl.message( + 'Done', + name: 'done', + desc: '', + args: [], + ); + } + + /// `Apply code` + String get applyCodeTitle { + return Intl.message( + 'Apply code', + name: 'applyCodeTitle', + desc: '', + args: [], + ); + } + + /// `Enter the code provided by your friend to claim free storage for both of you` + String get enterCodeDescription { + return Intl.message( + 'Enter the code provided by your friend to claim free storage for both of you', + name: 'enterCodeDescription', + desc: '', + args: [], + ); + } + + /// `Apply` + String get apply { + return Intl.message( + 'Apply', + name: 'apply', + desc: '', + args: [], + ); + } + + /// `Failed to apply code` + String get failedToApplyCode { + return Intl.message( + 'Failed to apply code', + name: 'failedToApplyCode', + desc: '', + args: [], + ); + } + + /// `Enter referral code` + String get enterReferralCode { + return Intl.message( + 'Enter referral code', + name: 'enterReferralCode', + desc: '', + args: [], + ); + } + + /// `Code applied` + String get codeAppliedPageTitle { + return Intl.message( + 'Code applied', + name: 'codeAppliedPageTitle', + desc: '', + args: [], + ); + } + + /// `{storageAmountInGB} GB` + String storageInGB(Object storageAmountInGB) { + return Intl.message( + '$storageAmountInGB GB', + name: 'storageInGB', + desc: '', + args: [storageAmountInGB], + ); + } + + /// `Claimed` + String get claimed { + return Intl.message( + 'Claimed', + name: 'claimed', + desc: 'Used to indicate storage claimed, like 10GB Claimed', + args: [], + ); + } + + /// `Details` + String get details { + return Intl.message( + 'Details', + name: 'details', + desc: '', + args: [], + ); + } + + /// `Claim more!` + String get claimMore { + return Intl.message( + 'Claim more!', + name: 'claimMore', + desc: '', + args: [], + ); + } + + /// `They also get {storageAmountInGB} GB` + String theyAlsoGetXGb(Object storageAmountInGB) { + return Intl.message( + 'They also get $storageAmountInGB GB', + name: 'theyAlsoGetXGb', + desc: '', + args: [storageAmountInGB], + ); + } + + /// `{storageAmountInGB} GB each time someone signs up for a paid plan and applies your code` + String freeStorageOnReferralSuccess(Object storageAmountInGB) { + return Intl.message( + '$storageAmountInGB GB each time someone signs up for a paid plan and applies your code', + name: 'freeStorageOnReferralSuccess', + desc: '', + args: [storageAmountInGB], + ); + } + + /// `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` + String shareTextReferralCode( + Object referralCode, Object referralStorageInGB) { + return Intl.message( + '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', + name: 'shareTextReferralCode', + desc: '', + args: [referralCode, referralStorageInGB], + ); + } + + /// `Claim free storage` + String get claimFreeStorage { + return Intl.message( + 'Claim free storage', + name: 'claimFreeStorage', + desc: '', + args: [], + ); + } + + /// `Invite your friends` + String get inviteYourFriends { + return Intl.message( + 'Invite your friends', + name: 'inviteYourFriends', + desc: '', + args: [], + ); + } + + /// `Unable to fetch referral details. Please try again later.` + String get failedToFetchReferralDetails { + return Intl.message( + 'Unable to fetch referral details. Please try again later.', + name: 'failedToFetchReferralDetails', + desc: '', + args: [], + ); + } + + /// `1. Give this code to your friends` + String get referralStep1 { + return Intl.message( + '1. Give this code to your friends', + name: 'referralStep1', + desc: '', + args: [], + ); + } + + /// `2. They sign up for a paid plan` + String get referralStep2 { + return Intl.message( + '2. They sign up for a paid plan', + name: 'referralStep2', + desc: '', + args: [], + ); + } + + /// `3. Both of you get {storageInGB} GB* free` + String referralStep3(Object storageInGB) { + return Intl.message( + '3. Both of you get $storageInGB GB* free', + name: 'referralStep3', + desc: '', + args: [storageInGB], + ); + } + + /// `Referrals are currently paused` + String get referralsAreCurrentlyPaused { + return Intl.message( + 'Referrals are currently paused', + name: 'referralsAreCurrentlyPaused', + desc: '', + args: [], + ); + } + + /// `* You can at max double your storage` + String get youCanAtMaxDoubleYourStorage { + return Intl.message( + '* You can at max double your storage', + name: 'youCanAtMaxDoubleYourStorage', + desc: '', + args: [], + ); + } + + /// `{isFamilyMember, select, 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!}}` + String claimedStorageSoFar(String isFamilyMember, int storageAmountInGb) { + return 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!', + }, + name: 'claimedStorageSoFar', + desc: '', + args: [isFamilyMember, storageAmountInGb], + ); + } + + /// `This is my name: {nameValue}, my age is {ageValue}` + String thisIsMyName(Object nameValue, Object ageValue) { + return Intl.message( + 'This is my name: $nameValue, my age is $ageValue', + name: 'thisIsMyName', + desc: '', + args: [nameValue, ageValue], + ); + } + + /// `FAQ` + String get faq { + return Intl.message( + 'FAQ', + name: 'faq', + desc: '', + args: [], + ); + } + + /// `Oops, something went wrong` + String get oopsSomethingWentWrong { + return Intl.message( + 'Oops, something went wrong', + name: 'oopsSomethingWentWrong', + desc: '', + args: [], + ); + } + + /// `People using your code` + String get peopleUsingYourCode { + return Intl.message( + 'People using your code', + name: 'peopleUsingYourCode', + desc: '', + args: [], + ); + } + + /// `eligible` + String get eligible { + return Intl.message( + 'eligible', + name: 'eligible', + desc: '', + args: [], + ); + } + + /// `total` + String get total { + return Intl.message( + 'total', + name: 'total', + desc: '', + args: [], + ); + } + + /// `Code used by you` + String get codeUsedByYou { + return Intl.message( + 'Code used by you', + name: 'codeUsedByYou', + desc: '', + args: [], + ); + } + + /// `Free storage claimed` + String get freeStorageClaimed { + return Intl.message( + 'Free storage claimed', + name: 'freeStorageClaimed', + desc: '', + args: [], + ); + } + + /// `Free storage usable` + String get freeStorageUsable { + return Intl.message( + 'Free storage usable', + name: 'freeStorageUsable', + desc: '', + args: [], + ); + } + + /// `Usable storage is limited by your current plan. Excess claimed storage will automatically become usable when you upgrade your plan.` + String get usableReferralStorageInfo { + return Intl.message( + 'Usable storage is limited by your current plan. Excess claimed storage will automatically become usable when you upgrade your plan.', + name: 'usableReferralStorageInfo', + desc: '', + args: [], + ); + } + + /// `Remove from album?` + String get removeFromAlbumTitle { + return Intl.message( + 'Remove from album?', + name: 'removeFromAlbumTitle', + desc: '', + args: [], + ); + } + + /// `Remove from album` + String get removeFromAlbum { + return Intl.message( + 'Remove from album', + name: 'removeFromAlbum', + desc: '', + args: [], + ); + } + + /// `Selected items will be removed from this album` + String get itemsWillBeRemovedFromAlbum { + return Intl.message( + 'Selected items will be removed from this album', + name: 'itemsWillBeRemovedFromAlbum', + desc: '', + args: [], + ); + } + + /// `Some of the items you are removing were added by other people, and you will lose access to them` + String get removeShareItemsWarning { + return Intl.message( + 'Some of the items you are removing were added by other people, and you will lose access to them', + name: 'removeShareItemsWarning', + desc: '', + args: [], + ); + } + + /// `Adding to favorites...` + String get addingToFavorites { + return Intl.message( + 'Adding to favorites...', + name: 'addingToFavorites', + desc: '', + args: [], + ); + } + + /// `Removing from favorites...` + String get removingFromFavorites { + return Intl.message( + 'Removing from favorites...', + name: 'removingFromFavorites', + desc: '', + args: [], + ); + } + + /// `Sorry, could not add to favorites!` + String get sorryCouldNotAddToFavorites { + return Intl.message( + 'Sorry, could not add to favorites!', + name: 'sorryCouldNotAddToFavorites', + desc: '', + args: [], + ); + } + + /// `Sorry, could not remove from favorites!` + String get sorryCouldNotRemoveFromFavorites { + return Intl.message( + 'Sorry, could not remove from favorites!', + name: 'sorryCouldNotRemoveFromFavorites', + desc: '', + args: [], + ); + } + + /// `Looks like your subscription has expired. Please subscribe to enable sharing.` + String get subscribeToEnableSharing { + return Intl.message( + 'Looks like your subscription has expired. Please subscribe to enable sharing.', + name: 'subscribeToEnableSharing', + desc: '', + args: [], + ); + } + + /// `Subscribe` + String get subscribe { + return Intl.message( + 'Subscribe', + name: 'subscribe', + desc: '', + args: [], + ); + } + + /// `Can only remove files owned by you` + String get canOnlyRemoveFilesOwnedByYou { + return Intl.message( + 'Can only remove files owned by you', + name: 'canOnlyRemoveFilesOwnedByYou', + desc: '', + args: [], + ); + } + + /// `Delete shared album?` + String get deleteSharedAlbum { + return Intl.message( + 'Delete shared album?', + name: 'deleteSharedAlbum', + desc: '', + args: [], + ); + } + + /// `Delete album` + String get deleteAlbum { + return Intl.message( + 'Delete album', + name: 'deleteAlbum', + desc: '', + args: [], + ); + } + + /// `Also delete the photos (and videos) present in this album from all other albums they are part of?` + String get deleteAlbumDialog { + return Intl.message( + 'Also delete the photos (and videos) present in this album from all other albums they are part of?', + name: 'deleteAlbumDialog', + desc: '', + args: [], + ); + } + + /// `The album will be deleted for everyone\n\nYou will lose access to shared photos in this album that are owned by others` + String get deleteSharedAlbumDialogBody { + return Intl.message( + 'The album will be deleted for everyone\n\nYou will lose access to shared photos in this album that are owned by others', + name: 'deleteSharedAlbumDialogBody', + desc: '', + args: [], + ); + } + + /// `Yes, remove` + String get yesRemove { + return Intl.message( + 'Yes, remove', + name: 'yesRemove', + desc: '', + args: [], + ); + } + + /// `Creating link...` + String get creatingLink { + return Intl.message( + 'Creating link...', + name: 'creatingLink', + desc: '', + args: [], + ); + } + + /// `Remove?` + String get removeWithQuestionMark { + return Intl.message( + 'Remove?', + name: 'removeWithQuestionMark', + desc: '', + args: [], + ); + } + + /// `{userEmail} will be removed from this shared album\n\nAny photos added by them will also be removed from the album` + String removeParticipantBody(Object userEmail) { + return Intl.message( + '$userEmail will be removed from this shared album\n\nAny photos added by them will also be removed from the album', + name: 'removeParticipantBody', + desc: '', + args: [userEmail], + ); + } + + /// `Keep Photos` + String get keepPhotos { + return Intl.message( + 'Keep Photos', + name: 'keepPhotos', + desc: '', + args: [], + ); + } + + /// `Delete photos` + String get deletePhotos { + return Intl.message( + 'Delete photos', + name: 'deletePhotos', + desc: '', + args: [], + ); + } + + /// `Invite to ente` + String get inviteToEnte { + return Intl.message( + 'Invite to ente', + name: 'inviteToEnte', + desc: '', + args: [], + ); + } + + /// `Remove public link` + String get removePublicLink { + return Intl.message( + 'Remove public link', + name: 'removePublicLink', + desc: '', + args: [], + ); + } + + /// `This will remove the public link for accessing "{albumName}".` + String disableLinkMessage(Object albumName) { + return Intl.message( + 'This will remove the public link for accessing "$albumName".', + name: 'disableLinkMessage', + desc: '', + args: [albumName], + ); + } + + /// `Sharing...` + String get sharing { + return Intl.message( + 'Sharing...', + name: 'sharing', + desc: '', + args: [], + ); + } + + /// `You cannot share with yourself` + String get youCannotShareWithYourself { + return Intl.message( + 'You cannot share with yourself', + name: 'youCannotShareWithYourself', + desc: '', + args: [], + ); + } + + /// `Archive` + String get archive { + return Intl.message( + 'Archive', + name: 'archive', + desc: '', + args: [], + ); + } + + /// `Long press to select photos and click + to create an album` + String get createAlbumActionHint { + return Intl.message( + 'Long press to select photos and click + to create an album', + name: 'createAlbumActionHint', + desc: '', + args: [], + ); + } + + /// `Importing....` + String get importing { + return Intl.message( + 'Importing....', + name: 'importing', + desc: '', + args: [], + ); + } + + /// `Failed to load albums` + String get failedToLoadAlbums { + return Intl.message( + 'Failed to load albums', + name: 'failedToLoadAlbums', + desc: '', + args: [], + ); + } + + /// `Hidden` + String get hidden { + return Intl.message( + 'Hidden', + name: 'hidden', + desc: '', + args: [], + ); + } + + /// `Please authenticate to view your hidden files` + String get authToViewYourHiddenFiles { + return Intl.message( + 'Please authenticate to view your hidden files', + name: 'authToViewYourHiddenFiles', + desc: '', + args: [], + ); + } + + /// `Trash` + String get trash { + return Intl.message( + 'Trash', + name: 'trash', + desc: '', + args: [], + ); + } + + /// `Uncategorized` + String get uncategorized { + return Intl.message( + 'Uncategorized', + name: 'uncategorized', + desc: '', + args: [], + ); + } + + /// `video` + String get videoSmallCase { + return Intl.message( + 'video', + name: 'videoSmallCase', + desc: '', + args: [], + ); + } + + /// `photo` + String get photoSmallCase { + return Intl.message( + 'photo', + name: 'photoSmallCase', + desc: '', + args: [], + ); + } + + /// `It will be deleted from all albums.` + String get singleFileDeleteHighlight { + return Intl.message( + 'It will be deleted from all albums.', + name: 'singleFileDeleteHighlight', + desc: '', + args: [], + ); + } + + /// `This {fileType} is in both ente and your device.` + String singleFileInBothLocalAndRemote(Object fileType) { + return Intl.message( + 'This $fileType is in both ente and your device.', + name: 'singleFileInBothLocalAndRemote', + desc: '', + args: [fileType], + ); + } + + /// `This {fileType} will be deleted from ente.` + String singleFileInRemoteOnly(Object fileType) { + return Intl.message( + 'This $fileType will be deleted from ente.', + name: 'singleFileInRemoteOnly', + desc: '', + args: [fileType], + ); + } + + /// `This {fileType} will be deleted from your device.` + String singleFileDeleteFromDevice(Object fileType) { + return Intl.message( + 'This $fileType will be deleted from your device.', + name: 'singleFileDeleteFromDevice', + desc: '', + args: [fileType], + ); + } + + /// `Delete from ente` + String get deleteFromEnte { + return Intl.message( + 'Delete from ente', + name: 'deleteFromEnte', + desc: '', + args: [], + ); + } + + /// `Yes, delete` + String get yesDelete { + return Intl.message( + 'Yes, delete', + name: 'yesDelete', + desc: '', + args: [], + ); + } + + /// `Moved to trash` + String get movedToTrash { + return Intl.message( + 'Moved to trash', + name: 'movedToTrash', + desc: '', + args: [], + ); + } + + /// `Delete from device` + String get deleteFromDevice { + return Intl.message( + 'Delete from device', + name: 'deleteFromDevice', + desc: '', + args: [], + ); + } + + /// `Delete from both` + String get deleteFromBoth { + return Intl.message( + 'Delete from both', + name: 'deleteFromBoth', + desc: '', + args: [], + ); + } + + /// `New album` + String get newAlbum { + return Intl.message( + 'New album', + name: 'newAlbum', + desc: '', + args: [], + ); + } + + /// `Albums` + String get albums { + return Intl.message( + 'Albums', + name: 'albums', + desc: '', + args: [], + ); + } + + /// `{count, plural, zero{no memories} one{{count} memory} other{{count} memories}}` + String memoryCount(int count) { + return Intl.plural( + count, + zero: 'no memories', + one: '$count memory', + other: '$count memories', + name: 'memoryCount', + desc: 'The text to display the number of memories', + args: [count], + ); + } + + /// `{count} selected` + String selectedPhotos(int count) { + return Intl.message( + '$count selected', + name: 'selectedPhotos', + desc: 'Display the number of selected photos', + args: [count], + ); + } + + /// `{count} selected ({yourCount} yours)` + String selectedPhotosWithYours(int count, int yourCount) { + return Intl.message( + '$count selected ($yourCount yours)', + name: 'selectedPhotosWithYours', + desc: + 'Display the number of selected photos, including the number of selected photos owned by the user', + args: [count, yourCount], + ); + } + + /// `Advanced` + String get advancedSettings { + return Intl.message( + 'Advanced', + name: 'advancedSettings', + desc: 'The text to display in the advanced settings section', + args: [], + ); + } + + /// `Photo grid size` + String get photoGridSize { + return Intl.message( + 'Photo grid size', + name: 'photoGridSize', + desc: '', + args: [], + ); + } + + /// `Manage device storage` + String get manageDeviceStorage { + return Intl.message( + 'Manage device storage', + name: 'manageDeviceStorage', + desc: '', + args: [], + ); + } + + /// `Select folders for backup` + String get selectFoldersForBackup { + return Intl.message( + 'Select folders for backup', + name: 'selectFoldersForBackup', + desc: '', + args: [], + ); + } + + /// `Selected folders will be encrypted and backed up` + String get selectedFoldersWillBeEncryptedAndBackedUp { + return Intl.message( + 'Selected folders will be encrypted and backed up', + name: 'selectedFoldersWillBeEncryptedAndBackedUp', + desc: '', + args: [], + ); + } + + /// `Unselect all` + String get unselectAll { + return Intl.message( + 'Unselect all', + name: 'unselectAll', + desc: '', + args: [], + ); + } + + /// `Select all` + String get selectAll { + return Intl.message( + 'Select all', + name: 'selectAll', + desc: '', + args: [], + ); + } + + /// `Skip` + String get skip { + return Intl.message( + 'Skip', + name: 'skip', + desc: '', + args: [], + ); + } + + /// `Updating folder selection...` + String get updatingFolderSelection { + return Intl.message( + 'Updating folder selection...', + name: 'updatingFolderSelection', + desc: '', + args: [], + ); + } + + /// `{count, plural, one{{count} item} other{{count} items}}` + String itemCount(num count) { + return Intl.plural( + count, + one: '$count item', + other: '$count items', + name: 'itemCount', + desc: '', + args: [count], + ); + } + + /// `{count, plural, one{{count} year ago} other{{count} years ago}}` + String yearsAgo(num count) { + return Intl.plural( + count, + one: '$count year ago', + other: '$count years ago', + name: 'yearsAgo', + desc: '', + args: [count], + ); + } + + /// `Backup settings` + String get backupSettings { + return Intl.message( + 'Backup settings', + name: 'backupSettings', + desc: '', + args: [], + ); + } + + /// `Backup over mobile data` + String get backupOverMobileData { + return Intl.message( + 'Backup over mobile data', + name: 'backupOverMobileData', + desc: '', + args: [], + ); + } + + /// `Backup videos` + String get backupVideos { + return Intl.message( + 'Backup videos', + name: 'backupVideos', + desc: '', + args: [], + ); + } + + /// `Disable auto lock` + String get disableAutoLock { + return Intl.message( + 'Disable auto lock', + name: 'disableAutoLock', + desc: '', + args: [], + ); + } + + /// `Disable the device screen lock when ente is in the foreground and there is a backup in progress. This is normally not needed, but may help big uploads and initial imports of large libraries complete faster.` + String get deviceLockExplanation { + return Intl.message( + 'Disable the device screen lock when ente is in the foreground and there is a backup in progress. This is normally not needed, but may help big uploads and initial imports of large libraries complete faster.', + name: 'deviceLockExplanation', + desc: '', + args: [], + ); + } + + /// `About` + String get about { + return Intl.message( + 'About', + name: 'about', + desc: '', + args: [], + ); + } + + /// `We are open source!` + String get weAreOpenSource { + return Intl.message( + 'We are open source!', + name: 'weAreOpenSource', + desc: '', + args: [], + ); + } + + /// `Privacy` + String get privacy { + return Intl.message( + 'Privacy', + name: 'privacy', + desc: '', + args: [], + ); + } + + /// `Terms` + String get terms { + return Intl.message( + 'Terms', + name: 'terms', + desc: '', + args: [], + ); + } + + /// `Check for updates` + String get checkForUpdates { + return Intl.message( + 'Check for updates', + name: 'checkForUpdates', + desc: '', + args: [], + ); + } + + /// `Checking...` + String get checking { + return Intl.message( + 'Checking...', + name: 'checking', + desc: '', + args: [], + ); + } + + /// `You are on the latest version` + String get youAreOnTheLatestVersion { + return Intl.message( + 'You are on the latest version', + name: 'youAreOnTheLatestVersion', + desc: '', + args: [], + ); + } + + /// `Account` + String get account { + return Intl.message( + 'Account', + name: 'account', + desc: '', + args: [], + ); + } + + /// `Manage subscription` + String get manageSubscription { + return Intl.message( + 'Manage subscription', + name: 'manageSubscription', + desc: '', + args: [], + ); + } + + /// `Please authenticate to change your email` + String get authToChangeYourEmail { + return Intl.message( + 'Please authenticate to change your email', + name: 'authToChangeYourEmail', + desc: '', + args: [], + ); + } + + /// `Change password` + String get changePassword { + return Intl.message( + 'Change password', + name: 'changePassword', + desc: '', + args: [], + ); + } + + /// `Please authenticate to change your password` + String get authToChangeYourPassword { + return Intl.message( + 'Please authenticate to change your password', + name: 'authToChangeYourPassword', + desc: '', + args: [], + ); + } + + /// `Export your data` + String get exportYourData { + return Intl.message( + 'Export your data', + name: 'exportYourData', + desc: '', + args: [], + ); + } + + /// `Logout` + String get logout { + return Intl.message( + 'Logout', + name: 'logout', + desc: '', + args: [], + ); + } + + /// `Please authenticate to initiate account deletion` + String get authToInitiateAccountDeletion { + return Intl.message( + 'Please authenticate to initiate account deletion', + name: 'authToInitiateAccountDeletion', + desc: '', + args: [], + ); + } + + /// `Are you sure you want to logout?` + String get areYouSureYouWantToLogout { + return Intl.message( + 'Are you sure you want to logout?', + name: 'areYouSureYouWantToLogout', + desc: '', + args: [], + ); + } + + /// `Yes, logout` + String get yesLogout { + return Intl.message( + 'Yes, logout', + name: 'yesLogout', + desc: '', + args: [], + ); + } + + /// `A new version of ente is available.` + String get aNewVersionOfEnteIsAvailable { + return Intl.message( + 'A new version of ente is available.', + name: 'aNewVersionOfEnteIsAvailable', + desc: '', + args: [], + ); + } + + /// `Update` + String get update { + return Intl.message( + 'Update', + name: 'update', + desc: '', + args: [], + ); + } + + /// `Install manually` + String get installManually { + return Intl.message( + 'Install manually', + name: 'installManually', + desc: '', + args: [], + ); + } + + /// `Critical update available` + String get criticalUpdateAvailable { + return Intl.message( + 'Critical update available', + name: 'criticalUpdateAvailable', + desc: '', + args: [], + ); + } + + /// `Update available` + String get updateAvailable { + return Intl.message( + 'Update available', + name: 'updateAvailable', + desc: '', + args: [], + ); + } + + /// `Downloading...` + String get downloading { + return Intl.message( + 'Downloading...', + name: 'downloading', + desc: '', + args: [], + ); + } + + /// `The download could not be completed` + String get theDownloadCouldNotBeCompleted { + return Intl.message( + 'The download could not be completed', + name: 'theDownloadCouldNotBeCompleted', + desc: '', + args: [], + ); + } + + /// `Retry` + String get retry { + return Intl.message( + 'Retry', + name: 'retry', + desc: '', + args: [], + ); + } + + /// `Backed up folders` + String get backedUpFolders { + return Intl.message( + 'Backed up folders', + name: 'backedUpFolders', + desc: '', + args: [], + ); + } + + /// `Backup` + String get backup { + return Intl.message( + 'Backup', + name: 'backup', + desc: '', + args: [], + ); + } + + /// `Free up device space` + String get freeUpDeviceSpace { + return Intl.message( + 'Free up device space', + name: 'freeUpDeviceSpace', + desc: '', + args: [], + ); + } + + /// `✨ All clear` + String get allClear { + return Intl.message( + '✨ All clear', + name: 'allClear', + desc: '', + args: [], + ); + } + + /// `You've no files on this device that can be deleted` + String get noDeviceThatCanBeDeleted { + return Intl.message( + 'You\'ve no files on this device that can be deleted', + name: 'noDeviceThatCanBeDeleted', + desc: '', + args: [], + ); + } + + /// `Remove duplicates` + String get removeDuplicates { + return Intl.message( + 'Remove duplicates', + name: 'removeDuplicates', + desc: '', + args: [], + ); + } + + /// `✨ No duplicates` + String get noDuplicates { + return Intl.message( + '✨ No duplicates', + name: 'noDuplicates', + desc: '', + args: [], + ); + } + + /// `You've no duplicate files that can be cleared` + String get youveNoDuplicateFilesThatCanBeCleared { + return Intl.message( + 'You\'ve no duplicate files that can be cleared', + name: 'youveNoDuplicateFilesThatCanBeCleared', + desc: '', + args: [], + ); + } + + /// `Success` + String get success { + return Intl.message( + 'Success', + name: 'success', + desc: '', + args: [], + ); + } + + /// `Rate us` + String get rateUs { + return Intl.message( + 'Rate us', + name: 'rateUs', + desc: '', + args: [], + ); + } + + /// `Also empty "Recently Deleted" from "Settings" -> "Storage" to claim the freed space` + String get remindToEmptyDeviceTrash { + return Intl.message( + 'Also empty "Recently Deleted" from "Settings" -> "Storage" to claim the freed space', + name: 'remindToEmptyDeviceTrash', + desc: '', + args: [], + ); + } + + /// `You have successfully freed up {storageSaved}!` + String youHaveSuccessfullyFreedUp(String storageSaved) { + return Intl.message( + 'You have successfully freed up $storageSaved!', + name: 'youHaveSuccessfullyFreedUp', + desc: + 'The text to display when the user has successfully freed up storage', + args: [storageSaved], + ); + } + + /// `Also empty your "Trash" to claim the freed up space` + String get remindToEmptyEnteTrash { + return Intl.message( + 'Also empty your "Trash" to claim the freed up space', + name: 'remindToEmptyEnteTrash', + desc: '', + args: [], + ); + } + + /// `✨ Success` + String get sparkleSuccess { + return Intl.message( + '✨ Success', + name: 'sparkleSuccess', + desc: '', + args: [], + ); + } + + /// `Your have cleaned up {count, plural, one{{count} duplicate file} other{{count} duplicate files}}, saving ({storageSaved}!)` + String duplicateFileCountWithStorageSaved(int count, String storageSaved) { + return Intl.message( + 'Your have cleaned up ${Intl.plural(count, one: '$count duplicate file', other: '$count duplicate files')}, saving ($storageSaved!)', + name: 'duplicateFileCountWithStorageSaved', + desc: + 'The text to display when the user has successfully cleaned up duplicate files', + args: [count, storageSaved], + ); + } + + /// `Family plans` + String get familyPlans { + return Intl.message( + 'Family plans', + name: 'familyPlans', + desc: '', + args: [], + ); + } + + /// `Referrals` + String get referrals { + return Intl.message( + 'Referrals', + name: 'referrals', + desc: '', + args: [], + ); + } + + /// `Advanced` + String get advanced { + return Intl.message( + 'Advanced', + name: 'advanced', + desc: '', + args: [], + ); + } + + /// `General` + String get general { + return Intl.message( + 'General', + name: 'general', + desc: '', + args: [], + ); + } + + /// `Security` + String get security { + return Intl.message( + 'Security', + name: 'security', + desc: '', + args: [], + ); + } + + /// `Please authenticate to view your recovery key` + String get authToViewYourRecoveryKey { + return Intl.message( + 'Please authenticate to view your recovery key', + name: 'authToViewYourRecoveryKey', + desc: '', + args: [], + ); + } + + /// `Two-factor` + String get twofactor { + return Intl.message( + 'Two-factor', + name: 'twofactor', + desc: '', + args: [], + ); + } + + /// `Please authenticate to configure two-factor authentication` + String get authToConfigureTwofactorAuthentication { + return Intl.message( + 'Please authenticate to configure two-factor authentication', + name: 'authToConfigureTwofactorAuthentication', + desc: '', + args: [], + ); + } + + /// `Lockscreen` + String get lockscreen { + return Intl.message( + 'Lockscreen', + name: 'lockscreen', + desc: '', + args: [], + ); + } + + /// `Please authenticate to change lockscreen setting` + String get authToChangeLockscreenSetting { + return Intl.message( + 'Please authenticate to change lockscreen setting', + name: 'authToChangeLockscreenSetting', + desc: '', + args: [], + ); + } + + /// `To enable lockscreen, please setup device passcode or screen lock in your system settings.` + String get lockScreenEnablePreSteps { + return Intl.message( + 'To enable lockscreen, please setup device passcode or screen lock in your system settings.', + name: 'lockScreenEnablePreSteps', + desc: '', + args: [], + ); + } + + /// `View active sessions` + String get viewActiveSessions { + return Intl.message( + 'View active sessions', + name: 'viewActiveSessions', + desc: '', + args: [], + ); + } + + /// `Please authenticate to view your active sessions` + String get authToViewYourActiveSessions { + return Intl.message( + 'Please authenticate to view your active sessions', + name: 'authToViewYourActiveSessions', + desc: '', + args: [], + ); + } + + /// `Disable two-factor` + String get disableTwofactor { + return Intl.message( + 'Disable two-factor', + name: 'disableTwofactor', + desc: '', + args: [], + ); + } + + /// `Are you sure you want to disable two-factor authentication?` + String get confirm2FADisable { + return Intl.message( + 'Are you sure you want to disable two-factor authentication?', + name: 'confirm2FADisable', + desc: '', + args: [], + ); + } + + /// `No` + String get no { + return Intl.message( + 'No', + name: 'no', + desc: '', + args: [], + ); + } + + /// `Yes` + String get yes { + return Intl.message( + 'Yes', + name: 'yes', + desc: '', + args: [], + ); + } + + /// `Social` + String get social { + return Intl.message( + 'Social', + name: 'social', + desc: '', + args: [], + ); + } + + /// `Rate us on {storeName}` + String rateUsOnStore(Object storeName) { + return Intl.message( + 'Rate us on $storeName', + name: 'rateUsOnStore', + desc: '', + args: [storeName], + ); + } + + /// `Blog` + String get blog { + return Intl.message( + 'Blog', + name: 'blog', + desc: '', + args: [], + ); + } + + /// `Merchandise` + String get merchandise { + return Intl.message( + 'Merchandise', + name: 'merchandise', + desc: '', + args: [], + ); + } + + /// `Twitter` + String get twitter { + return Intl.message( + 'Twitter', + name: 'twitter', + desc: '', + args: [], + ); + } + + /// `Mastodon` + String get mastodon { + return Intl.message( + 'Mastodon', + name: 'mastodon', + desc: '', + args: [], + ); + } + + /// `Matrix` + String get matrix { + return Intl.message( + 'Matrix', + name: 'matrix', + desc: '', + args: [], + ); + } + + /// `Discord` + String get discord { + return Intl.message( + 'Discord', + name: 'discord', + desc: '', + args: [], + ); + } + + /// `Reddit` + String get reddit { + return Intl.message( + 'Reddit', + name: 'reddit', + desc: '', + args: [], + ); + } + + /// `Your storage details could not be fetched` + String get yourStorageDetailsCouldNotBeFetched { + return Intl.message( + 'Your storage details could not be fetched', + name: 'yourStorageDetailsCouldNotBeFetched', + desc: '', + args: [], + ); + } + + /// `Report a bug` + String get reportABug { + return Intl.message( + 'Report a bug', + name: 'reportABug', + desc: '', + args: [], + ); + } + + /// `Report bug` + String get reportBug { + return Intl.message( + 'Report bug', + name: 'reportBug', + desc: '', + args: [], + ); + } + + /// `Suggest features` + String get suggestFeatures { + return Intl.message( + 'Suggest features', + name: 'suggestFeatures', + desc: '', + args: [], + ); + } + + /// `Support` + String get support { + return Intl.message( + 'Support', + name: 'support', + desc: '', + args: [], + ); + } + + /// `Theme` + String get theme { + return Intl.message( + 'Theme', + name: 'theme', + desc: '', + args: [], + ); + } + + /// `Light` + String get lightTheme { + return Intl.message( + 'Light', + name: 'lightTheme', + desc: '', + args: [], + ); + } + + /// `Dark` + String get darkTheme { + return Intl.message( + 'Dark', + name: 'darkTheme', + desc: '', + args: [], + ); + } + + /// `System` + String get systemTheme { + return Intl.message( + 'System', + name: 'systemTheme', + desc: '', + args: [], + ); + } + + /// `Free trial` + String get freeTrial { + return Intl.message( + 'Free trial', + name: 'freeTrial', + desc: '', + args: [], + ); + } + + /// `Select your plan` + String get selectYourPlan { + return Intl.message( + 'Select your plan', + name: 'selectYourPlan', + desc: '', + args: [], + ); + } + + /// `ente preserves your memories, so they're always available to you, even if you lose your device.` + String get enteSubscriptionPitch { + return Intl.message( + 'ente preserves your memories, so they\'re always available to you, even if you lose your device.', + name: 'enteSubscriptionPitch', + desc: '', + args: [], + ); + } + + /// `Your family can be added to your plan as well.` + String get enteSubscriptionShareWithFamily { + return Intl.message( + 'Your family can be added to your plan as well.', + name: 'enteSubscriptionShareWithFamily', + desc: '', + args: [], + ); + } + + /// `Current usage is ` + String get currentUsageIs { + return Intl.message( + 'Current usage is ', + name: 'currentUsageIs', + desc: 'This text is followed by storage usaged', + args: [], + ); + } + + /// `FAQs` + String get faqs { + return Intl.message( + 'FAQs', + name: 'faqs', + desc: '', + args: [], + ); + } + + /// `Renews on {endDate}` + String renewsOn(Object endDate) { + return Intl.message( + 'Renews on $endDate', + name: 'renewsOn', + desc: '', + args: [endDate], + ); + } + + /// `Free trial valid till {endDate}` + String freeTrialValidTill(Object endDate) { + return Intl.message( + 'Free trial valid till $endDate', + name: 'freeTrialValidTill', + desc: '', + args: [endDate], + ); + } + + /// `Your subscription will be cancelled on {endDate}` + String subWillBeCancelledOn(Object endDate) { + return Intl.message( + 'Your subscription will be cancelled on $endDate', + name: 'subWillBeCancelledOn', + desc: '', + args: [endDate], + ); + } + + /// `Subscription` + String get subscription { + return Intl.message( + 'Subscription', + name: 'subscription', + desc: '', + args: [], + ); + } + + /// `Payment details` + String get paymentDetails { + return Intl.message( + 'Payment details', + name: 'paymentDetails', + desc: '', + args: [], + ); + } + + /// `Manage Family` + String get manageFamily { + return Intl.message( + 'Manage Family', + name: 'manageFamily', + desc: '', + args: [], + ); + } + + /// `Please contact us at support@ente.io to manage your {provider} subscription.` + String contactToManageSubscription(Object provider) { + return Intl.message( + 'Please contact us at support@ente.io to manage your $provider subscription.', + name: 'contactToManageSubscription', + desc: '', + args: [provider], + ); + } + + /// `Renew subscription` + String get renewSubscription { + return Intl.message( + 'Renew subscription', + name: 'renewSubscription', + desc: '', + args: [], + ); + } + + /// `Cancel subscription` + String get cancelSubscription { + return Intl.message( + 'Cancel subscription', + name: 'cancelSubscription', + desc: '', + args: [], + ); + } + + /// `Are you sure you want to renew?` + String get areYouSureYouWantToRenew { + return Intl.message( + 'Are you sure you want to renew?', + name: 'areYouSureYouWantToRenew', + desc: '', + args: [], + ); + } + + /// `Yes, Renew` + String get yesRenew { + return Intl.message( + 'Yes, Renew', + name: 'yesRenew', + desc: '', + args: [], + ); + } + + /// `Are you sure you want to cancel?` + String get areYouSureYouWantToCancel { + return Intl.message( + 'Are you sure you want to cancel?', + name: 'areYouSureYouWantToCancel', + desc: '', + args: [], + ); + } + + /// `Yes, cancel` + String get yesCancel { + return Intl.message( + 'Yes, cancel', + name: 'yesCancel', + desc: '', + args: [], + ); + } + + /// `Failed to renew` + String get failedToRenew { + return Intl.message( + 'Failed to renew', + name: 'failedToRenew', + desc: '', + args: [], + ); + } + + /// `Failed to cancel` + String get failedToCancel { + return Intl.message( + 'Failed to cancel', + name: 'failedToCancel', + desc: '', + args: [], + ); + } + + /// `2 months free on yearly plans` + String get twoMonthsFreeOnYearlyPlans { + return Intl.message( + '2 months free on yearly plans', + name: 'twoMonthsFreeOnYearlyPlans', + desc: '', + args: [], + ); + } + + /// `Monthly` + String get monthly { + return Intl.message( + 'Monthly', + name: 'monthly', + desc: 'The text to display for monthly plans', + args: [], + ); + } + + /// `Yearly` + String get yearly { + return Intl.message( + 'Yearly', + name: 'yearly', + desc: 'The text to display for yearly plans', + args: [], + ); + } + + /// `Confirm plan change` + String get confirmPlanChange { + return Intl.message( + 'Confirm plan change', + name: 'confirmPlanChange', + desc: '', + args: [], + ); + } + + /// `Are you sure you want to change your plan?` + String get areYouSureYouWantToChangeYourPlan { + return Intl.message( + 'Are you sure you want to change your plan?', + name: 'areYouSureYouWantToChangeYourPlan', + desc: '', + args: [], + ); + } + + /// `You cannot downgrade to this plan` + String get youCannotDowngradeToThisPlan { + return Intl.message( + 'You cannot downgrade to this plan', + name: 'youCannotDowngradeToThisPlan', + desc: '', + args: [], + ); + } + + /// `Please cancel your existing subscription from {paymentProvider} first` + String cancelOtherSubscription(String paymentProvider) { + return Intl.message( + 'Please cancel your existing subscription from $paymentProvider first', + name: 'cancelOtherSubscription', + desc: + 'The text to display when the user has an existing subscription from a different payment provider', + args: [paymentProvider], + ); + } + + /// `Optional, as short as you like...` + String get optionalAsShortAsYouLike { + return Intl.message( + 'Optional, as short as you like...', + name: 'optionalAsShortAsYouLike', + desc: '', + args: [], + ); + } + + /// `Send` + String get send { + return Intl.message( + 'Send', + name: 'send', + desc: '', + args: [], + ); + } + + /// `Your subscription was cancelled. Would you like to share the reason?` + String get askCancelReason { + return Intl.message( + 'Your subscription was cancelled. Would you like to share the reason?', + name: 'askCancelReason', + desc: '', + args: [], + ); + } + + /// `Thank you for subscribing!` + String get thankYouForSubscribing { + return Intl.message( + 'Thank you for subscribing!', + name: 'thankYouForSubscribing', + desc: '', + args: [], + ); + } + + /// `Your purchase was successful` + String get yourPurchaseWasSuccessful { + return Intl.message( + 'Your purchase was successful', + name: 'yourPurchaseWasSuccessful', + desc: '', + args: [], + ); + } + + /// `Your plan was successfully upgraded` + String get yourPlanWasSuccessfullyUpgraded { + return Intl.message( + 'Your plan was successfully upgraded', + name: 'yourPlanWasSuccessfullyUpgraded', + desc: '', + args: [], + ); + } + + /// `Your plan was successfully downgraded` + String get yourPlanWasSuccessfullyDowngraded { + return Intl.message( + 'Your plan was successfully downgraded', + name: 'yourPlanWasSuccessfullyDowngraded', + desc: '', + args: [], + ); + } + + /// `Your subscription was updated successfully` + String get yourSubscriptionWasUpdatedSuccessfully { + return Intl.message( + 'Your subscription was updated successfully', + name: 'yourSubscriptionWasUpdatedSuccessfully', + desc: '', + args: [], + ); + } + + /// `Google Play ID` + String get googlePlayId { + return Intl.message( + 'Google Play ID', + name: 'googlePlayId', + desc: '', + args: [], + ); + } + + /// `Apple ID` + String get appleId { + return Intl.message( + 'Apple ID', + name: 'appleId', + desc: '', + args: [], + ); + } + + /// `PlayStore subscription` + String get playstoreSubscription { + return Intl.message( + 'PlayStore subscription', + name: 'playstoreSubscription', + desc: '', + args: [], + ); + } + + /// `AppStore subscription` + String get appstoreSubscription { + return Intl.message( + 'AppStore subscription', + name: 'appstoreSubscription', + desc: '', + args: [], + ); + } + + /// `Your {id} is already linked to another ente account.\nIf you would like to use your {id} with this account, please contact our support''` + String subAlreadyLinkedErrMessage(Object id) { + return Intl.message( + 'Your $id is already linked to another ente account.\nIf you would like to use your $id with this account, please contact our support\'\'', + name: 'subAlreadyLinkedErrMessage', + desc: '', + args: [id], + ); + } + + /// `Please visit web.ente.io to manage your subscription` + String get visitWebToManage { + return Intl.message( + 'Please visit web.ente.io to manage your subscription', + name: 'visitWebToManage', + desc: '', + args: [], + ); + } + + /// `Could not update subscription` + String get couldNotUpdateSubscription { + return Intl.message( + 'Could not update subscription', + name: 'couldNotUpdateSubscription', + desc: '', + args: [], + ); + } + + /// `Please contact support@ente.io and we will be happy to help!` + String get pleaseContactSupportAndWeWillBeHappyToHelp { + return Intl.message( + 'Please contact support@ente.io and we will be happy to help!', + name: 'pleaseContactSupportAndWeWillBeHappyToHelp', + desc: '', + args: [], + ); + } + + /// `Payment failed` + String get paymentFailed { + return Intl.message( + 'Payment failed', + name: 'paymentFailed', + desc: '', + args: [], + ); + } + + /// `Please talk to {providerName} support if you were charged` + String paymentFailedTalkToProvider(String providerName) { + return Intl.message( + 'Please talk to $providerName support if you were charged', + name: 'paymentFailedTalkToProvider', + desc: 'The text to display when the payment failed', + args: [providerName], + ); + } + + /// `Continue on free trial` + String get continueOnFreeTrial { + return Intl.message( + 'Continue on free trial', + name: 'continueOnFreeTrial', + desc: '', + args: [], + ); + } + + /// `Are you sure you want to exit?` + String get areYouSureYouWantToExit { + return Intl.message( + 'Are you sure you want to exit?', + name: 'areYouSureYouWantToExit', + desc: '', + args: [], + ); + } + + /// `Thank you` + String get thankYou { + return Intl.message( + 'Thank you', + name: 'thankYou', + desc: '', + args: [], + ); + } + + /// `Failed to verify payment status` + String get failedToVerifyPaymentStatus { + return Intl.message( + 'Failed to verify payment status', + name: 'failedToVerifyPaymentStatus', + desc: '', + args: [], + ); + } + + /// `Please wait for sometime before retrying` + String get pleaseWaitForSometimeBeforeRetrying { + return Intl.message( + 'Please wait for sometime before retrying', + name: 'pleaseWaitForSometimeBeforeRetrying', + desc: '', + args: [], + ); + } + + /// `Unfortunately your payment failed due to {reason}` + String paymentFailedWithReason(Object reason) { + return Intl.message( + 'Unfortunately your payment failed due to $reason', + name: 'paymentFailedWithReason', + desc: '', + args: [reason], + ); + } + + /// `You are on a family plan!` + String get youAreOnAFamilyPlan { + return Intl.message( + 'You are on a family plan!', + name: 'youAreOnAFamilyPlan', + desc: '', + args: [], + ); + } + + /// `Please contact {familyAdminEmail} to manage your subscription` + String contactFamilyAdmin(Object familyAdminEmail) { + return Intl.message( + 'Please contact $familyAdminEmail to manage your subscription', + name: 'contactFamilyAdmin', + desc: '', + args: [familyAdminEmail], + ); + } + + /// `Leave family` + String get leaveFamily { + return Intl.message( + 'Leave family', + name: 'leaveFamily', + desc: '', + args: [], + ); + } + + /// `Are you sure that you want to leave the family plan?` + String get areYouSureThatYouWantToLeaveTheFamily { + return Intl.message( + 'Are you sure that you want to leave the family plan?', + name: 'areYouSureThatYouWantToLeaveTheFamily', + desc: '', + args: [], + ); + } + + /// `Leave` + String get leave { + return Intl.message( + 'Leave', + name: 'leave', + desc: '', + args: [], + ); + } + + /// `Rate the app` + String get rateTheApp { + return Intl.message( + 'Rate the app', + name: 'rateTheApp', + desc: '', + args: [], + ); + } + + /// `Start backup` + String get startBackup { + return Intl.message( + 'Start backup', + name: 'startBackup', + desc: '', + args: [], + ); + } + + /// `No photos are being backed up right now` + String get noPhotosAreBeingBackedUpRightNow { + return Intl.message( + 'No photos are being backed up right now', + name: 'noPhotosAreBeingBackedUpRightNow', + desc: '', + args: [], + ); + } + + /// `Preserve more` + String get preserveMore { + return Intl.message( + 'Preserve more', + name: 'preserveMore', + desc: '', + args: [], + ); + } + + /// `Existing user` + String get existingUser { + return Intl.message( + 'Existing user', + name: 'existingUser', + desc: '', + args: [], + ); + } + + /// `Private backups` + String get privateBackups { + return Intl.message( + 'Private backups', + name: 'privateBackups', + desc: '', + args: [], + ); + } + + /// `for your memories` + String get forYourMemories { + return Intl.message( + 'for your memories', + name: 'forYourMemories', + desc: '', + args: [], + ); + } + + /// `End-to-end encrypted by default` + String get endtoendEncryptedByDefault { + return Intl.message( + 'End-to-end encrypted by default', + name: 'endtoendEncryptedByDefault', + desc: '', + args: [], + ); + } + + /// `Safely stored` + String get safelyStored { + return Intl.message( + 'Safely stored', + name: 'safelyStored', + desc: '', + args: [], + ); + } + + /// `at a fallout shelter` + String get atAFalloutShelter { + return Intl.message( + 'at a fallout shelter', + name: 'atAFalloutShelter', + desc: '', + args: [], + ); + } + + /// `Designed to outlive` + String get designedToOutlive { + return Intl.message( + 'Designed to outlive', + name: 'designedToOutlive', + desc: '', + args: [], + ); + } + + /// `Available` + String get available { + return Intl.message( + 'Available', + name: 'available', + desc: '', + args: [], + ); + } + + /// `everywhere` + String get everywhere { + return Intl.message( + 'everywhere', + name: 'everywhere', + desc: '', + args: [], + ); + } + + /// `Android, iOS, Web, Desktop` + String get androidIosWebDesktop { + return Intl.message( + 'Android, iOS, Web, Desktop', + name: 'androidIosWebDesktop', + desc: '', + args: [], + ); + } + + /// `Mobile, Web, Desktop` + String get mobileWebDesktop { + return Intl.message( + 'Mobile, Web, Desktop', + name: 'mobileWebDesktop', + desc: '', + args: [], + ); + } + + /// `New to ente` + String get newToEnte { + return Intl.message( + 'New to ente', + name: 'newToEnte', + desc: '', + args: [], + ); + } + + /// `Please login again` + String get pleaseLoginAgain { + return Intl.message( + 'Please login again', + name: 'pleaseLoginAgain', + desc: '', + args: [], + ); + } + + /// `The developer account we use to publish ente on App Store has changed. Because of this, you will need to login again.\n\nOur apologies for the inconvenience, but this was unavoidable.` + String get devAccountChanged { + return Intl.message( + 'The developer account we use to publish ente on App Store has changed. Because of this, you will need to login again.\n\nOur apologies for the inconvenience, but this was unavoidable.', + name: 'devAccountChanged', + desc: '', + args: [], + ); + } + + /// `Your subscription has expired` + String get yourSubscriptionHasExpired { + return Intl.message( + 'Your subscription has expired', + name: 'yourSubscriptionHasExpired', + desc: '', + args: [], + ); + } + + /// `Storage limit exceeded` + String get storageLimitExceeded { + return Intl.message( + 'Storage limit exceeded', + name: 'storageLimitExceeded', + desc: '', + args: [], + ); + } + + /// `Upgrade` + String get upgrade { + return Intl.message( + 'Upgrade', + name: 'upgrade', + desc: '', + args: [], + ); + } + + /// `Raise ticket` + String get raiseTicket { + return Intl.message( + 'Raise ticket', + name: 'raiseTicket', + desc: + 'Button text for raising a support tickets in case of unhandled errors during backup', + args: [], + ); + } + + /// `Backup failed` + String get backupFailed { + return Intl.message( + 'Backup failed', + name: 'backupFailed', + desc: '', + args: [], + ); + } + + /// `We could not backup your data.\nWe will retry later.` + String get couldNotBackUpTryLater { + return Intl.message( + 'We could not backup your data.\nWe will retry later.', + name: 'couldNotBackUpTryLater', + desc: '', + args: [], + ); + } + + /// `ente can encrypt and preserve files only if you grant access to them` + String get enteCanEncryptAndPreserveFilesOnlyIfYouGrant { + return Intl.message( + 'ente can encrypt and preserve files only if you grant access to them', + name: 'enteCanEncryptAndPreserveFilesOnlyIfYouGrant', + desc: '', + args: [], + ); + } + + /// `Please grant permissions` + String get pleaseGrantPermissions { + return Intl.message( + 'Please grant permissions', + name: 'pleaseGrantPermissions', + desc: '', + args: [], + ); + } + + /// `Grant permission` + String get grantPermission { + return Intl.message( + 'Grant permission', + name: 'grantPermission', + desc: '', + args: [], + ); + } + + /// `Private sharing` + String get privateSharing { + return Intl.message( + 'Private sharing', + name: 'privateSharing', + desc: '', + args: [], + ); + } + + /// `Share only with the people you want` + String get shareOnlyWithThePeopleYouWant { + return Intl.message( + 'Share only with the people you want', + name: 'shareOnlyWithThePeopleYouWant', + desc: '', + args: [], + ); + } + + /// `Use public links for people not on ente` + String get usePublicLinksForPeopleNotOnEnte { + return Intl.message( + 'Use public links for people not on ente', + name: 'usePublicLinksForPeopleNotOnEnte', + desc: '', + args: [], + ); + } + + /// `Allow people to add photos` + String get allowPeopleToAddPhotos { + return Intl.message( + 'Allow people to add photos', + name: 'allowPeopleToAddPhotos', + desc: '', + args: [], + ); + } + + /// `Share an album now` + String get shareAnAlbumNow { + return Intl.message( + 'Share an album now', + name: 'shareAnAlbumNow', + desc: '', + args: [], + ); + } + + /// `Collect event photos` + String get collectEventPhotos { + return Intl.message( + 'Collect event photos', + name: 'collectEventPhotos', + desc: '', + args: [], + ); + } + + /// `Session expired` + String get sessionExpired { + return Intl.message( + 'Session expired', + name: 'sessionExpired', + desc: '', + args: [], + ); + } + + /// `Logging out...` + String get loggingOut { + return Intl.message( + 'Logging out...', + name: 'loggingOut', + desc: '', + args: [], + ); + } + + /// `On device` + String get onDevice { + return Intl.message( + 'On device', + name: 'onDevice', + desc: 'The text displayed above folders/albums stored on device', + args: [], + ); + } + + /// `On ente` + String get onEnte { + return Intl.message( + 'On ente', + name: 'onEnte', + desc: 'The text displayed above albums backed up to ente', + args: [], + ); + } + + /// `Name` + String get name { + return Intl.message( + 'Name', + name: 'name', + desc: '', + args: [], + ); + } + + /// `Newest` + String get newest { + return Intl.message( + 'Newest', + name: 'newest', + desc: '', + args: [], + ); + } + + /// `Last updated` + String get lastUpdated { + return Intl.message( + 'Last updated', + name: 'lastUpdated', + desc: '', + args: [], + ); + } + + /// `Delete empty albums` + String get deleteEmptyAlbums { + return Intl.message( + 'Delete empty albums', + name: 'deleteEmptyAlbums', + desc: '', + args: [], + ); + } + + /// `Delete empty albums?` + String get deleteEmptyAlbumsWithQuestionMark { + return Intl.message( + 'Delete empty albums?', + name: 'deleteEmptyAlbumsWithQuestionMark', + desc: '', + args: [], + ); + } + + /// `This will delete all empty albums. This is useful when you want to reduce the clutter in your album list.` + String get deleteAlbumsDialogBody { + return Intl.message( + 'This will delete all empty albums. This is useful when you want to reduce the clutter in your album list.', + name: 'deleteAlbumsDialogBody', + desc: '', + args: [], + ); + } + + /// `Deleting {currentlyDeleting} / {totalCount}` + String deleteProgress(Object currentlyDeleting, Object totalCount) { + return Intl.message( + 'Deleting $currentlyDeleting / $totalCount', + name: 'deleteProgress', + desc: '', + args: [currentlyDeleting, totalCount], + ); + } + + /// `Permanently delete` + String get permanentlyDelete { + return Intl.message( + 'Permanently delete', + name: 'permanentlyDelete', + desc: '', + args: [], + ); + } + + /// `Can only create link for files owned by you` + String get canOnlyCreateLinkForFilesOwnedByYou { + return Intl.message( + 'Can only create link for files owned by you', + name: 'canOnlyCreateLinkForFilesOwnedByYou', + desc: '', + args: [], + ); + } + + /// `Public link created` + String get publicLinkCreated { + return Intl.message( + 'Public link created', + name: 'publicLinkCreated', + desc: '', + args: [], + ); + } + + /// `You can manage your links in the share tab.` + String get youCanManageYourLinksInTheShareTab { + return Intl.message( + 'You can manage your links in the share tab.', + name: 'youCanManageYourLinksInTheShareTab', + desc: '', + args: [], + ); + } + + /// `Link copied to clipboard` + String get linkCopiedToClipboard { + return Intl.message( + 'Link copied to clipboard', + name: 'linkCopiedToClipboard', + desc: '', + args: [], + ); + } + + /// `Restore` + String get restore { + return Intl.message( + 'Restore', + name: 'restore', + desc: + 'Display text for an action which triggers a restore of item from trash', + args: [], + ); + } + + /// `Move to album` + String get moveToAlbum { + return Intl.message( + 'Move to album', + name: 'moveToAlbum', + desc: '', + args: [], + ); + } + + /// `Unhide` + String get unhide { + return Intl.message( + 'Unhide', + name: 'unhide', + desc: '', + args: [], + ); + } + + /// `Unarchive` + String get unarchive { + return Intl.message( + 'Unarchive', + name: 'unarchive', + desc: '', + args: [], + ); + } + + /// `Favorite` + String get favorite { + return Intl.message( + 'Favorite', + name: 'favorite', + desc: '', + args: [], + ); + } + + /// `Remove from favorite` + String get removeFromFavorite { + return Intl.message( + 'Remove from favorite', + name: 'removeFromFavorite', + desc: '', + args: [], + ); + } + + /// `Share link` + String get shareLink { + return Intl.message( + 'Share link', + name: 'shareLink', + desc: '', + args: [], + ); + } + + /// `Add to ente` + String get addToEnte { + return Intl.message( + 'Add to ente', + name: 'addToEnte', + desc: '', + args: [], + ); + } + + /// `Add to album` + String get addToAlbum { + return Intl.message( + 'Add to album', + name: 'addToAlbum', + desc: '', + args: [], + ); + } + + /// `Delete` + String get delete { + return Intl.message( + 'Delete', + name: 'delete', + desc: '', + args: [], + ); + } + + /// `Hide` + String get hide { + return Intl.message( + 'Hide', + name: 'hide', + desc: '', + args: [], + ); + } + + /// `{count} selected` + String itemSelectedCount(int count) { + return Intl.message( + '$count selected', + name: 'itemSelectedCount', + desc: 'Text to indicate number of items selected', + args: [count], + ); + } + + /// `Share` + String get share { + return Intl.message( + 'Share', + name: 'share', + desc: '', + args: [], + ); + } + + /// `Unhide to album` + String get unhideToAlbum { + return Intl.message( + 'Unhide to album', + name: 'unhideToAlbum', + desc: '', + args: [], + ); + } + + /// `Restore to album` + String get restoreToAlbum { + return Intl.message( + 'Restore to album', + name: 'restoreToAlbum', + desc: '', + args: [], + ); + } + + /// `{count, plural, one {Move item} other {Move items}}` + String moveItem(num count) { + return Intl.plural( + count, + one: 'Move item', + other: 'Move items', + name: 'moveItem', + desc: 'Page title while moving one or more items to an album', + args: [count], + ); + } + + /// `{count, plural, one {Add item} other {Add items}}` + String addItem(num count) { + return Intl.plural( + count, + one: 'Add item', + other: 'Add items', + name: 'addItem', + desc: 'Page title while adding one or more items to album', + args: [count], + ); + } + + /// `Create or select album` + String get createOrSelectAlbum { + return Intl.message( + 'Create or select album', + name: 'createOrSelectAlbum', + desc: '', + args: [], + ); + } + + /// `Select album` + String get selectAlbum { + return Intl.message( + 'Select album', + name: 'selectAlbum', + desc: '', + args: [], + ); + } + + /// `Album name` + String get searchByAlbumNameHint { + return Intl.message( + 'Album name', + name: 'searchByAlbumNameHint', + desc: '', + args: [], + ); + } + + /// `Album title` + String get albumTitle { + return Intl.message( + 'Album title', + name: 'albumTitle', + desc: '', + args: [], + ); + } + + /// `Enter album name` + String get enterAlbumName { + return Intl.message( + 'Enter album name', + name: 'enterAlbumName', + desc: '', + args: [], + ); + } + + /// `Restoring files...` + String get restoringFiles { + return Intl.message( + 'Restoring files...', + name: 'restoringFiles', + desc: '', + args: [], + ); + } + + /// `Moving files to album...` + String get movingFilesToAlbum { + return Intl.message( + 'Moving files to album...', + name: 'movingFilesToAlbum', + desc: '', + args: [], + ); + } + + /// `Unhiding files to album` + String get unhidingFilesToAlbum { + return Intl.message( + 'Unhiding files to album', + name: 'unhidingFilesToAlbum', + desc: '', + args: [], + ); + } + + /// `Can not upload to albums owned by others` + String get canNotUploadToAlbumsOwnedByOthers { + return Intl.message( + 'Can not upload to albums owned by others', + name: 'canNotUploadToAlbumsOwnedByOthers', + desc: '', + args: [], + ); + } + + /// `Uploading files to album...` + String get uploadingFilesToAlbum { + return Intl.message( + 'Uploading files to album...', + name: 'uploadingFilesToAlbum', + desc: '', + args: [], + ); + } + + /// `Added successfully to {albumName}` + String addedSuccessfullyTo(Object albumName) { + return Intl.message( + 'Added successfully to $albumName', + name: 'addedSuccessfullyTo', + desc: '', + args: [albumName], + ); + } + + /// `Moved successfully to {albumName}` + String movedSuccessfullyTo(Object albumName) { + return Intl.message( + 'Moved successfully to $albumName', + name: 'movedSuccessfullyTo', + desc: '', + args: [albumName], + ); + } + + /// `This album already has a collaborative link` + String get thisAlbumAlreadyHDACollaborativeLink { + return Intl.message( + 'This album already has a collaborative link', + name: 'thisAlbumAlreadyHDACollaborativeLink', + desc: '', + args: [], + ); + } + + /// `Collaborative link created for {albumName}` + String collaborativeLinkCreatedFor(Object albumName) { + return Intl.message( + 'Collaborative link created for $albumName', + name: 'collaborativeLinkCreatedFor', + desc: '', + args: [albumName], + ); + } + + /// `Ask your loved ones to share` + String get askYourLovedOnesToShare { + return Intl.message( + 'Ask your loved ones to share', + name: 'askYourLovedOnesToShare', + desc: '', + args: [], + ); + } + + /// `Invite` + String get invite { + return Intl.message( + 'Invite', + name: 'invite', + desc: '', + args: [], + ); + } + + /// `Share your first album` + String get shareYourFirstAlbum { + return Intl.message( + 'Share your first album', + name: 'shareYourFirstAlbum', + desc: '', + args: [], + ); + } + + /// `Shared with {emailIDs}` + String sharedWith(Object emailIDs) { + return Intl.message( + 'Shared with $emailIDs', + name: 'sharedWith', + desc: '', + args: [emailIDs], + ); + } + + /// `Shared with me` + String get sharedWithMe { + return Intl.message( + 'Shared with me', + name: 'sharedWithMe', + desc: '', + args: [], + ); + } + + /// `Shared by me` + String get sharedByMe { + return Intl.message( + 'Shared by me', + name: 'sharedByMe', + desc: '', + args: [], + ); + } + + /// `Double your storage` + String get doubleYourStorage { + return Intl.message( + 'Double your storage', + name: 'doubleYourStorage', + desc: '', + args: [], + ); + } + + /// `Refer friends and 2x your plan` + String get referFriendsAnd2xYourPlan { + return Intl.message( + 'Refer friends and 2x your plan', + name: 'referFriendsAnd2xYourPlan', + desc: '', + args: [], + ); + } + + /// `Open an album and tap the share button on the top right to share.` + String get shareAlbumHint { + return Intl.message( + 'Open an album and tap the share button on the top right to share.', + name: 'shareAlbumHint', + desc: '', + args: [], + ); + } + + /// `Items show the number of days remaining before permanent deletion` + String get itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion { + return Intl.message( + 'Items show the number of days remaining before permanent deletion', + name: 'itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion', + desc: '', + args: [], + ); + } + + /// `Delete All` + String get deleteAll { + return Intl.message( + 'Delete All', + name: 'deleteAll', + desc: '', + args: [], + ); + } + + /// `Rename album` + String get renameAlbum { + return Intl.message( + 'Rename album', + name: 'renameAlbum', + desc: '', + args: [], + ); + } + + /// `Rename` + String get rename { + return Intl.message( + 'Rename', + name: 'rename', + desc: '', + args: [], + ); + } + + /// `Leave shared album?` + String get leaveSharedAlbum { + return Intl.message( + 'Leave shared album?', + name: 'leaveSharedAlbum', + desc: '', + args: [], + ); + } + + /// `Leave album` + String get leaveAlbum { + return Intl.message( + 'Leave album', + name: 'leaveAlbum', + desc: '', + args: [], + ); + } + + /// `Photos added by you will be removed from the album` + String get photosAddedByYouWillBeRemovedFromTheAlbum { + return Intl.message( + 'Photos added by you will be removed from the album', + name: 'photosAddedByYouWillBeRemovedFromTheAlbum', + desc: '', + args: [], + ); + } + + /// `You've no files in this album that can be deleted` + String get youveNoFilesInThisAlbumThatCanBeDeleted { + return Intl.message( + 'You\'ve no files in this album that can be deleted', + name: 'youveNoFilesInThisAlbumThatCanBeDeleted', + desc: '', + args: [], + ); + } + + /// `You don't have any archived items.` + String get youDontHaveAnyArchivedItems { + return Intl.message( + 'You don\'t have any archived items.', + name: 'youDontHaveAnyArchivedItems', + desc: '', + args: [], + ); + } + + /// `Some files in this album are ignored from upload because they had previously been deleted from ente.` + String get ignoredFolderUploadReason { + return Intl.message( + 'Some files in this album are ignored from upload because they had previously been deleted from ente.', + name: 'ignoredFolderUploadReason', + desc: '', + args: [], + ); + } + + /// `Reset ignored files` + String get resetIgnoredFiles { + return Intl.message( + 'Reset ignored files', + name: 'resetIgnoredFiles', + desc: '', + args: [], + ); + } + + /// `Files added to this device album will automatically get uploaded to ente.` + String get deviceFilesAutoUploading { + return Intl.message( + 'Files added to this device album will automatically get uploaded to ente.', + name: 'deviceFilesAutoUploading', + desc: '', + args: [], + ); + } + + /// `Turn on backup to automatically upload files added to this device folder to ente.` + String get turnOnBackupForAutoUpload { + return Intl.message( + 'Turn on backup to automatically upload files added to this device folder to ente.', + name: 'turnOnBackupForAutoUpload', + desc: '', + args: [], + ); + } + + /// `No hidden photos or videos` + String get noHiddenPhotosOrVideos { + return Intl.message( + 'No hidden photos or videos', + name: 'noHiddenPhotosOrVideos', + desc: '', + args: [], + ); + } + + /// `To hide a photo or video` + String get toHideAPhotoOrVideo { + return Intl.message( + 'To hide a photo or video', + name: 'toHideAPhotoOrVideo', + desc: '', + args: [], + ); + } + + /// `• Open the item` + String get openTheItem { + return Intl.message( + '• Open the item', + name: 'openTheItem', + desc: '', + args: [], + ); + } + + /// `• Click on the overflow menu` + String get clickOnTheOverflowMenu { + return Intl.message( + '• Click on the overflow menu', + name: 'clickOnTheOverflowMenu', + desc: '', + args: [], + ); + } + + /// `• Click` + String get click { + return Intl.message( + '• Click', + name: 'click', + desc: '', + args: [], + ); + } + + /// `Nothing to see here! 👀` + String get nothingToSeeHere { + return Intl.message( + 'Nothing to see here! 👀', + name: 'nothingToSeeHere', + desc: '', + args: [], + ); + } + + /// `Unarchive album` + String get unarchiveAlbum { + return Intl.message( + 'Unarchive album', + name: 'unarchiveAlbum', + desc: '', + args: [], + ); + } + + /// `Archive album` + String get archiveAlbum { + return Intl.message( + 'Archive album', + name: 'archiveAlbum', + desc: '', + args: [], + ); + } + + /// `Calculating...` + String get calculating { + return Intl.message( + 'Calculating...', + name: 'calculating', + desc: '', + args: [], + ); + } + + /// `Please wait, deleting album` + String get pleaseWaitDeletingAlbum { + return Intl.message( + 'Please wait, deleting album', + name: 'pleaseWaitDeletingAlbum', + desc: '', + args: [], + ); + } + + /// `Albums, months, days, years, ...` + String get searchHintText { + return Intl.message( + 'Albums, months, days, years, ...', + name: 'searchHintText', + desc: '', + args: [], + ); + } + + /// `• Album names (e.g. "Camera")\n• Types of files (e.g. "Videos", ".gif")\n• Years and months (e.g. "2022", "January")\n• Holidays (e.g. "Christmas")\n• Photo descriptions (e.g. “#fun”)` + String get searchByExamples { + return Intl.message( + '• Album names (e.g. "Camera")\n• Types of files (e.g. "Videos", ".gif")\n• Years and months (e.g. "2022", "January")\n• Holidays (e.g. "Christmas")\n• Photo descriptions (e.g. “#fun”)', + name: 'searchByExamples', + desc: '', + args: [], + ); + } + + /// `You can try searching for a different query.` + String get youCanTrySearchingForADifferentQuery { + return Intl.message( + 'You can try searching for a different query.', + name: 'youCanTrySearchingForADifferentQuery', + desc: '', + args: [], + ); + } + + /// `No results found` + String get noResultsFound { + return Intl.message( + 'No results found', + name: 'noResultsFound', + desc: '', + args: [], + ); + } + + /// `Added by {emailOrName}` + String addedBy(Object emailOrName) { + return Intl.message( + 'Added by $emailOrName', + name: 'addedBy', + desc: '', + args: [emailOrName], + ); + } + + /// `Loading EXIF data...` + String get loadingExifData { + return Intl.message( + 'Loading EXIF data...', + name: 'loadingExifData', + desc: '', + args: [], + ); + } + + /// `View all EXIF data` + String get viewAllExifData { + return Intl.message( + 'View all EXIF data', + name: 'viewAllExifData', + desc: '', + args: [], + ); + } + + /// `No EXIF data` + String get noExifData { + return Intl.message( + 'No EXIF data', + name: 'noExifData', + desc: '', + args: [], + ); + } + + /// `This image has no exif data` + String get thisImageHasNoExifData { + return Intl.message( + 'This image has no exif data', + name: 'thisImageHasNoExifData', + desc: '', + args: [], + ); + } + + /// `EXIF` + String get exif { + return Intl.message( + 'EXIF', + name: 'exif', + desc: '', + args: [], + ); + } + + /// `No results` + String get noResults { + return Intl.message( + 'No results', + name: 'noResults', + desc: '', + args: [], + ); + } + + /// `We don't support editing photos and albums that you don't own yet` + String get weDontSupportEditingPhotosAndAlbumsThatYouDont { + return Intl.message( + 'We don\'t support editing photos and albums that you don\'t own yet', + name: 'weDontSupportEditingPhotosAndAlbumsThatYouDont', + desc: '', + args: [], + ); + } + + /// `Failed to fetch original for edit` + String get failedToFetchOriginalForEdit { + return Intl.message( + 'Failed to fetch original for edit', + name: 'failedToFetchOriginalForEdit', + desc: '', + args: [], + ); + } + + /// `Close` + String get close { + return Intl.message( + 'Close', + name: 'close', + desc: '', + args: [], + ); + } + + /// `Set as` + String get setAs { + return Intl.message( + 'Set as', + name: 'setAs', + desc: '', + args: [], + ); + } + + /// `File saved to gallery` + String get fileSavedToGallery { + return Intl.message( + 'File saved to gallery', + name: 'fileSavedToGallery', + desc: '', + args: [], + ); + } + + /// `Download` + String get download { + return Intl.message( + 'Download', + name: 'download', + desc: '', + args: [], + ); + } + + /// `Press and hold to play video` + String get pressAndHoldToPlayVideo { + return Intl.message( + 'Press and hold to play video', + name: 'pressAndHoldToPlayVideo', + desc: '', + args: [], + ); + } + + /// `Download failed` + String get downloadFailed { + return Intl.message( + 'Download failed', + name: 'downloadFailed', + desc: '', + args: [], + ); + } + + /// `Deduplicate Files` + String get deduplicateFiles { + return Intl.message( + 'Deduplicate Files', + name: 'deduplicateFiles', + desc: '', + args: [], + ); + } + + /// `Deselect all` + String get deselectAll { + return Intl.message( + 'Deselect all', + name: 'deselectAll', + desc: '', + args: [], + ); + } + + /// `Please review and delete the items you believe are duplicates.` + String get reviewDeduplicateItems { + return Intl.message( + 'Please review and delete the items you believe are duplicates.', + name: 'reviewDeduplicateItems', + desc: '', + args: [], + ); + } + + /// `Club by capture time` + String get clubByCaptureTime { + return Intl.message( + 'Club by capture time', + name: 'clubByCaptureTime', + desc: '', + args: [], + ); + } + + /// `Count` + String get count { + return Intl.message( + 'Count', + name: 'count', + desc: '', + args: [], + ); + } + + /// `Total size` + String get totalSize { + return Intl.message( + 'Total size', + name: 'totalSize', + desc: '', + args: [], + ); + } + + /// `Time` + String get time { + return Intl.message( + 'Time', + name: 'time', + desc: '', + args: [], + ); + } + + /// `Long-press on an item to view in full-screen` + String get longpressOnAnItemToViewInFullscreen { + return Intl.message( + 'Long-press on an item to view in full-screen', + name: 'longpressOnAnItemToViewInFullscreen', + desc: '', + args: [], + ); + } + + /// `Decrypting video...` + String get decryptingVideo { + return Intl.message( + 'Decrypting video...', + name: 'decryptingVideo', + desc: '', + args: [], + ); + } + + /// `Please authenticate to view your memories` + String get authToViewYourMemories { + return Intl.message( + 'Please authenticate to view your memories', + name: 'authToViewYourMemories', + desc: '', + args: [], + ); + } + + /// `Unlock` + String get unlock { + return Intl.message( + 'Unlock', + name: 'unlock', + desc: '', + args: [], + ); + } + + /// `Free up space` + String get freeUpSpace { + return Intl.message( + 'Free up space', + name: 'freeUpSpace', + desc: '', + args: [], + ); + } + + /// `{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}}}` + String freeUpSpaceSaving(num count, Object formattedSize) { + return 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', + name: 'freeUpSpaceSaving', + desc: + 'Text to tell user how much space they can free up by deleting items from the device', + args: [count, formattedSize], + ); + } + + /// `{count, plural, one {1 file} other {{formattedNumber} files}} in this album has been backed up safely` + String filesBackedUpInAlbum(int count, String formattedNumber) { + return Intl.message( + '${Intl.plural(count, one: '1 file', other: '$formattedNumber files')} in this album has been backed up safely', + name: 'filesBackedUpInAlbum', + desc: 'Text to tell user how many files have been backed up in the album', + args: [count, formattedNumber], + ); + } + + /// `{count, plural, one {1 file} other {{formattedNumber} files}} on this device have been backed up safely` + String filesBackedUpFromDevice(int count, String formattedNumber) { + return Intl.message( + '${Intl.plural(count, one: '1 file', other: '$formattedNumber files')} on this device have been backed up safely', + name: 'filesBackedUpFromDevice', + desc: + 'Text to tell user how many files have been backed up from this device', + args: [count, formattedNumber], + ); + } + + /// `You can still access {count, plural, one {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', + name: 'freeUpAccessPostDelete', + desc: '', + args: [count], + ); + } + + /// `Free up {sizeInMBorGB}` + String freeUpAmount(Object sizeInMBorGB) { + return Intl.message( + 'Free up $sizeInMBorGB', + name: 'freeUpAmount', + desc: '', + args: [sizeInMBorGB], + ); + } + + /// `This email is already in use` + String get thisEmailIsAlreadyInUse { + return Intl.message( + 'This email is already in use', + name: 'thisEmailIsAlreadyInUse', + desc: '', + args: [], + ); + } + + /// `Incorrect code` + String get incorrectCode { + return Intl.message( + 'Incorrect code', + name: 'incorrectCode', + desc: '', + args: [], + ); + } + + /// `Authentication failed, please try again` + String get authenticationFailedPleaseTryAgain { + return Intl.message( + 'Authentication failed, please try again', + name: 'authenticationFailedPleaseTryAgain', + desc: '', + args: [], + ); + } + + /// `Verification failed, please try again` + String get verificationFailedPleaseTryAgain { + return Intl.message( + 'Verification failed, please try again', + name: 'verificationFailedPleaseTryAgain', + desc: '', + args: [], + ); + } + + /// `Authenticating...` + String get authenticating { + return Intl.message( + 'Authenticating...', + name: 'authenticating', + desc: '', + args: [], + ); + } + + /// `Authentication successful!` + String get authenticationSuccessful { + return Intl.message( + 'Authentication successful!', + name: 'authenticationSuccessful', + desc: '', + args: [], + ); + } + + /// `Incorrect recovery key` + String get incorrectRecoveryKey { + return Intl.message( + 'Incorrect recovery key', + name: 'incorrectRecoveryKey', + desc: '', + args: [], + ); + } + + /// `The recovery key you entered is incorrect` + String get theRecoveryKeyYouEnteredIsIncorrect { + return Intl.message( + 'The recovery key you entered is incorrect', + name: 'theRecoveryKeyYouEnteredIsIncorrect', + desc: '', + args: [], + ); + } + + /// `Two-factor authentication successfully reset` + String get twofactorAuthenticationSuccessfullyReset { + return Intl.message( + 'Two-factor authentication successfully reset', + name: 'twofactorAuthenticationSuccessfullyReset', + desc: '', + args: [], + ); + } + + /// `Please verify the code you have entered` + String get pleaseVerifyTheCodeYouHaveEntered { + return Intl.message( + 'Please verify the code you have entered', + name: 'pleaseVerifyTheCodeYouHaveEntered', + desc: '', + args: [], + ); + } + + /// `Please contact support if the problem persists` + String get pleaseContactSupportIfTheProblemPersists { + return Intl.message( + 'Please contact support if the problem persists', + name: 'pleaseContactSupportIfTheProblemPersists', + desc: '', + args: [], + ); + } + + /// `Two-factor authentication has been disabled` + String get twofactorAuthenticationHasBeenDisabled { + return Intl.message( + 'Two-factor authentication has been disabled', + name: 'twofactorAuthenticationHasBeenDisabled', + desc: '', + args: [], + ); + } + + /// `Sorry, the code you've entered is incorrect` + String get sorryTheCodeYouveEnteredIsIncorrect { + return Intl.message( + 'Sorry, the code you\'ve entered is incorrect', + name: 'sorryTheCodeYouveEnteredIsIncorrect', + desc: '', + args: [], + ); + } + + /// `Your verification code has expired` + String get yourVerificationCodeHasExpired { + return Intl.message( + 'Your verification code has expired', + name: 'yourVerificationCodeHasExpired', + desc: '', + args: [], + ); + } + + /// `Email changed to {newEmail}` + String emailChangedTo(Object newEmail) { + return Intl.message( + 'Email changed to $newEmail', + name: 'emailChangedTo', + desc: '', + args: [newEmail], + ); + } + + /// `Verifying...` + String get verifying { + return Intl.message( + 'Verifying...', + name: 'verifying', + desc: '', + args: [], + ); + } + + /// `Disabling two-factor authentication...` + String get disablingTwofactorAuthentication { + return Intl.message( + 'Disabling two-factor authentication...', + name: 'disablingTwofactorAuthentication', + desc: '', + args: [], + ); + } + + /// `All memories preserved` + String get allMemoriesPreserved { + return Intl.message( + 'All memories preserved', + name: 'allMemoriesPreserved', + desc: '', + args: [], + ); + } + + /// `Loading gallery...` + String get loadingGallery { + return Intl.message( + 'Loading gallery...', + name: 'loadingGallery', + desc: '', + args: [], + ); + } + + /// `Syncing...` + String get syncing { + return Intl.message( + 'Syncing...', + name: 'syncing', + desc: '', + args: [], + ); + } + + /// `Encrypting backup...` + String get encryptingBackup { + return Intl.message( + 'Encrypting backup...', + name: 'encryptingBackup', + desc: '', + args: [], + ); + } + + /// `Sync stopped` + String get syncStopped { + return Intl.message( + 'Sync stopped', + name: 'syncStopped', + desc: '', + args: [], + ); + } + + /// `{completed}/{total} memories preserved` + String syncProgress(int completed, int total) { + return Intl.message( + '$completed/$total memories preserved', + name: 'syncProgress', + desc: 'Text to tell user how many memories have been preserved', + args: [completed, total], + ); + } + + /// `Archiving...` + String get archiving { + return Intl.message( + 'Archiving...', + name: 'archiving', + desc: '', + args: [], + ); + } + + /// `Unarchiving...` + String get unarchiving { + return Intl.message( + 'Unarchiving...', + name: 'unarchiving', + desc: '', + args: [], + ); + } + + /// `Successfully archived` + String get successfullyArchived { + return Intl.message( + 'Successfully archived', + name: 'successfullyArchived', + desc: '', + args: [], + ); + } + + /// `Successfully unarchived` + String get successfullyUnarchived { + return Intl.message( + 'Successfully unarchived', + name: 'successfullyUnarchived', + desc: '', + args: [], + ); + } + + /// `Rename file` + String get renameFile { + return Intl.message( + 'Rename file', + name: 'renameFile', + desc: '', + args: [], + ); + } + + /// `Enter file name` + String get enterFileName { + return Intl.message( + 'Enter file name', + name: 'enterFileName', + desc: '', + args: [], + ); + } + + /// `Files deleted` + String get filesDeleted { + return Intl.message( + 'Files deleted', + name: 'filesDeleted', + desc: '', + args: [], + ); + } + + /// `Selected files are not on ente` + String get selectedFilesAreNotOnEnte { + return Intl.message( + 'Selected files are not on ente', + name: 'selectedFilesAreNotOnEnte', + desc: '', + args: [], + ); + } + + /// `This action cannot be undone` + String get thisActionCannotBeUndone { + return Intl.message( + 'This action cannot be undone', + name: 'thisActionCannotBeUndone', + desc: '', + args: [], + ); + } + + /// `Empty trash?` + String get emptyTrash { + return Intl.message( + 'Empty trash?', + name: 'emptyTrash', + desc: '', + args: [], + ); + } + + /// `All items in trash will be permanently deleted\n\nThis action cannot be undone` + String get permDeleteWarning { + return Intl.message( + 'All items in trash will be permanently deleted\n\nThis action cannot be undone', + name: 'permDeleteWarning', + desc: '', + args: [], + ); + } + + /// `Empty` + String get empty { + return Intl.message( + 'Empty', + name: 'empty', + desc: '', + args: [], + ); + } + + /// `Could not free up space` + String get couldNotFreeUpSpace { + return Intl.message( + 'Could not free up space', + name: 'couldNotFreeUpSpace', + desc: '', + args: [], + ); + } + + /// `Permanently delete from device?` + String get permanentlyDeleteFromDevice { + return Intl.message( + 'Permanently delete from device?', + name: 'permanentlyDeleteFromDevice', + desc: '', + args: [], + ); + } + + /// `Some of the files you are trying to delete are only available on your device and cannot be recovered if deleted` + String get someOfTheFilesYouAreTryingToDeleteAre { + return Intl.message( + 'Some of the files you are trying to delete are only available on your device and cannot be recovered if deleted', + name: 'someOfTheFilesYouAreTryingToDeleteAre', + desc: '', + args: [], + ); + } + + /// `They will be deleted from all albums.` + String get theyWillBeDeletedFromAllAlbums { + return Intl.message( + 'They will be deleted from all albums.', + name: 'theyWillBeDeletedFromAllAlbums', + desc: '', + args: [], + ); + } + + /// `Some items are in both ente and your device.` + String get someItemsAreInBothEnteAndYourDevice { + return Intl.message( + 'Some items are in both ente and your device.', + name: 'someItemsAreInBothEnteAndYourDevice', + desc: '', + args: [], + ); + } + + /// `Selected items will be deleted from all albums and moved to trash.` + String get selectedItemsWillBeDeletedFromAllAlbumsAndMoved { + return Intl.message( + 'Selected items will be deleted from all albums and moved to trash.', + name: 'selectedItemsWillBeDeletedFromAllAlbumsAndMoved', + desc: '', + args: [], + ); + } + + /// `These items will be deleted from your device.` + String get theseItemsWillBeDeletedFromYourDevice { + return Intl.message( + 'These items will be deleted from your device.', + name: 'theseItemsWillBeDeletedFromYourDevice', + desc: '', + args: [], + ); + } + + /// `It looks like something went wrong. Please retry after some time. If the error persists, please contact our support team.` + String get itLooksLikeSomethingWentWrongPleaseRetryAfterSome { + return Intl.message( + 'It looks like something went wrong. Please retry after some time. If the error persists, please contact our support team.', + name: 'itLooksLikeSomethingWentWrongPleaseRetryAfterSome', + desc: '', + args: [], + ); + } + + /// `Error` + String get error { + return Intl.message( + 'Error', + name: 'error', + desc: '', + args: [], + ); + } + + /// `It looks like something went wrong. Please retry after some time. If the error persists, please contact our support team.` + String get tempErrorContactSupportIfPersists { + return Intl.message( + 'It looks like something went wrong. Please retry after some time. If the error persists, please contact our support team.', + name: 'tempErrorContactSupportIfPersists', + desc: '', + args: [], + ); + } + + /// `Cached data` + String get cachedData { + return Intl.message( + 'Cached data', + name: 'cachedData', + desc: '', + args: [], + ); + } + + /// `Clear caches` + String get clearCaches { + return Intl.message( + 'Clear caches', + name: 'clearCaches', + desc: '', + args: [], + ); + } + + /// `Remote images` + String get remoteImages { + return Intl.message( + 'Remote images', + name: 'remoteImages', + desc: '', + args: [], + ); + } + + /// `Remote videos` + String get remoteVideos { + return Intl.message( + 'Remote videos', + name: 'remoteVideos', + desc: '', + args: [], + ); + } + + /// `Remote thumbnails` + String get remoteThumbnails { + return Intl.message( + 'Remote thumbnails', + name: 'remoteThumbnails', + desc: '', + args: [], + ); + } + + /// `Pending sync` + String get pendingSync { + return Intl.message( + 'Pending sync', + name: 'pendingSync', + desc: '', + args: [], + ); + } + + /// `Local gallery` + String get localGallery { + return Intl.message( + 'Local gallery', + name: 'localGallery', + desc: '', + args: [], + ); + } + + /// `Today's logs` + String get todaysLogs { + return Intl.message( + 'Today\'s logs', + name: 'todaysLogs', + desc: '', + args: [], + ); + } + + /// `View logs` + String get viewLogs { + return Intl.message( + 'View logs', + name: 'viewLogs', + desc: '', + args: [], + ); + } + + /// `This will send across logs to help us debug your issue. Please note that file names will be included to help track issues with specific files.` + String get logsDialogBody { + return Intl.message( + 'This will send across logs to help us debug your issue. Please note that file names will be included to help track issues with specific files.', + name: 'logsDialogBody', + desc: '', + args: [], + ); + } + + /// `Preparing logs...` + String get preparingLogs { + return Intl.message( + 'Preparing logs...', + name: 'preparingLogs', + desc: '', + args: [], + ); + } + + /// `Email your logs` + String get emailYourLogs { + return Intl.message( + 'Email your logs', + name: 'emailYourLogs', + desc: '', + args: [], + ); + } + + /// `Please send the logs to \n{toEmail}` + String pleaseSendTheLogsTo(Object toEmail) { + return Intl.message( + 'Please send the logs to \n$toEmail', + name: 'pleaseSendTheLogsTo', + desc: '', + args: [toEmail], + ); + } + + /// `Copy email address` + String get copyEmailAddress { + return Intl.message( + 'Copy email address', + name: 'copyEmailAddress', + desc: '', + args: [], + ); + } + + /// `Export logs` + String get exportLogs { + return Intl.message( + 'Export logs', + name: 'exportLogs', + desc: '', + args: [], + ); + } + + /// `Please email us at {toEmail}` + String pleaseEmailUsAt(Object toEmail) { + return Intl.message( + 'Please email us at $toEmail', + name: 'pleaseEmailUsAt', + desc: '', + args: [toEmail], + ); + } + + /// `Dismiss` + String get dismiss { + return Intl.message( + 'Dismiss', + name: 'dismiss', + desc: '', + args: [], + ); + } + + /// `Did you know?` + String get didYouKnow { + return Intl.message( + 'Did you know?', + name: 'didYouKnow', + desc: '', + args: [], + ); + } + + /// `Loading your photos...` + String get loadingMessage { + return Intl.message( + 'Loading your photos...', + name: 'loadingMessage', + desc: '', + args: [], + ); + } + + /// `You can share your subscription with your family` + String get loadMessage1 { + return Intl.message( + 'You can share your subscription with your family', + name: 'loadMessage1', + desc: '', + args: [], + ); + } + + /// `We have preserved over 10 million memories so far` + String get loadMessage2 { + return Intl.message( + 'We have preserved over 10 million memories so far', + name: 'loadMessage2', + desc: '', + args: [], + ); + } + + /// `We keep 3 copies of your data, one in an underground fallout shelter` + String get loadMessage3 { + return Intl.message( + 'We keep 3 copies of your data, one in an underground fallout shelter', + name: 'loadMessage3', + desc: '', + args: [], + ); + } + + /// `All our apps are open source` + String get loadMessage4 { + return Intl.message( + 'All our apps are open source', + name: 'loadMessage4', + desc: '', + args: [], + ); + } + + /// `Our source code and cryptography have been externally audited` + String get loadMessage5 { + return Intl.message( + 'Our source code and cryptography have been externally audited', + name: 'loadMessage5', + desc: '', + args: [], + ); + } + + /// `You can share links to your albums with your loved ones` + String get loadMessage6 { + return Intl.message( + 'You can share links to your albums with your loved ones', + name: 'loadMessage6', + desc: '', + args: [], + ); + } + + /// `Our mobile apps run in the background to encrypt and backup any new photos you click` + String get loadMessage7 { + return Intl.message( + 'Our mobile apps run in the background to encrypt and backup any new photos you click', + name: 'loadMessage7', + desc: '', + args: [], + ); + } + + /// `web.ente.io has a slick uploader` + String get loadMessage8 { + return Intl.message( + 'web.ente.io has a slick uploader', + name: 'loadMessage8', + desc: '', + args: [], + ); + } + + /// `We use Xchacha20Poly1305 to safely encrypt your data` + String get loadMessage9 { + return Intl.message( + 'We use Xchacha20Poly1305 to safely encrypt your data', + name: 'loadMessage9', + desc: '', + args: [], + ); + } + + /// `Language` + String get language { + return Intl.message( + 'Language', + name: 'language', + desc: '', + args: [], + ); + } + + /// `Select Language` + String get selectLanguage { + return Intl.message( + 'Select Language', + name: 'selectLanguage', + desc: '', + args: [], + ); + } + + /// `Location name` + String get locationName { + return Intl.message( + 'Location name', + name: 'locationName', + desc: '', + args: [], + ); + } + + /// `Add location` + String get addLocation { + return Intl.message( + 'Add location', + name: 'addLocation', + desc: '', + args: [], + ); + } + + /// `Group nearby photos` + String get groupNearbyPhotos { + return Intl.message( + 'Group nearby photos', + name: 'groupNearbyPhotos', + desc: '', + args: [], + ); + } + + /// `Location` + String get location { + return Intl.message( + 'Location', + name: 'location', + desc: '', + args: [], + ); + } + + /// `km` + String get kiloMeterUnit { + return Intl.message( + 'km', + name: 'kiloMeterUnit', + desc: '', + args: [], + ); + } + + /// `Add` + String get addLocationButton { + return Intl.message( + 'Add', + name: 'addLocationButton', + desc: '', + args: [], + ); + } + + /// `Radius` + String get radius { + return Intl.message( + 'Radius', + name: 'radius', + desc: '', + args: [], + ); + } + + /// `A location tag groups all photos that were taken within some radius of a photo` + String get locationTagFeatureDescription { + return Intl.message( + 'A location tag groups all photos that were taken within some radius of a photo', + name: 'locationTagFeatureDescription', + desc: '', + args: [], + ); + } + + /// `Up to 1000 memories shown in gallery` + String get galleryMemoryLimitInfo { + return Intl.message( + 'Up to 1000 memories shown in gallery', + name: 'galleryMemoryLimitInfo', + desc: '', + args: [], + ); + } + + /// `Save` + String get save { + return Intl.message( + 'Save', + name: 'save', + desc: '', + args: [], + ); + } + + /// `Center point` + String get centerPoint { + return Intl.message( + 'Center point', + name: 'centerPoint', + desc: '', + args: [], + ); + } + + /// `Pick center point` + String get pickCenterPoint { + return Intl.message( + 'Pick center point', + name: 'pickCenterPoint', + desc: '', + args: [], + ); + } + + /// `Use selected photo` + String get useSelectedPhoto { + return Intl.message( + 'Use selected photo', + name: 'useSelectedPhoto', + desc: '', + args: [], + ); + } + + /// `Edit` + String get edit { + return Intl.message( + 'Edit', + name: 'edit', + desc: '', + args: [], + ); + } + + /// `Delete location` + String get deleteLocation { + return Intl.message( + 'Delete location', + name: 'deleteLocation', + desc: '', + args: [], + ); + } + + /// `Rotate left` + String get rotateLeft { + return Intl.message( + 'Rotate left', + name: 'rotateLeft', + desc: '', + args: [], + ); + } + + /// `Flip` + String get flip { + return Intl.message( + 'Flip', + name: 'flip', + desc: '', + args: [], + ); + } + + /// `Rotate right` + String get rotateRight { + return Intl.message( + 'Rotate right', + name: 'rotateRight', + desc: '', + args: [], + ); + } + + /// `Save copy` + String get saveCopy { + return Intl.message( + 'Save copy', + name: 'saveCopy', + desc: '', + args: [], + ); + } + + /// `Light` + String get light { + return Intl.message( + 'Light', + name: 'light', + desc: '', + args: [], + ); + } + + /// `Color` + String get color { + return Intl.message( + 'Color', + name: 'color', + desc: '', + args: [], + ); + } + + /// `Yes, discard changes` + String get yesDiscardChanges { + return Intl.message( + 'Yes, discard changes', + name: 'yesDiscardChanges', + desc: '', + args: [], + ); + } + + /// `Do you want to discard the edits you have made?` + String get doYouWantToDiscardTheEditsYouHaveMade { + return Intl.message( + 'Do you want to discard the edits you have made?', + name: 'doYouWantToDiscardTheEditsYouHaveMade', + desc: '', + args: [], + ); + } + + /// `Saving...` + String get saving { + return Intl.message( + 'Saving...', + name: 'saving', + desc: '', + args: [], + ); + } + + /// `Edits saved` + String get editsSaved { + return Intl.message( + 'Edits saved', + name: 'editsSaved', + desc: '', + args: [], + ); + } + + /// `Oops, could not save edits` + String get oopsCouldNotSaveEdits { + return Intl.message( + 'Oops, could not save edits', + name: 'oopsCouldNotSaveEdits', + desc: '', + args: [], + ); + } +} + +class AppLocalizationDelegate extends LocalizationsDelegate { + const AppLocalizationDelegate(); + + List get supportedLocales { + return const [ + Locale.fromSubtags(languageCode: 'en'), + Locale.fromSubtags(languageCode: 'cs'), + Locale.fromSubtags(languageCode: 'de'), + Locale.fromSubtags(languageCode: 'es'), + Locale.fromSubtags(languageCode: 'fr'), + Locale.fromSubtags(languageCode: 'it'), + Locale.fromSubtags(languageCode: 'ko'), + Locale.fromSubtags(languageCode: 'nl'), + Locale.fromSubtags(languageCode: 'no'), + Locale.fromSubtags(languageCode: 'pl'), + Locale.fromSubtags(languageCode: 'pt'), + Locale.fromSubtags(languageCode: 'zh'), + ]; + } + + @override + bool isSupported(Locale locale) => _isSupported(locale); + @override + Future load(Locale locale) => S.load(locale); + @override + bool shouldReload(AppLocalizationDelegate old) => false; + + bool _isSupported(Locale locale) { + for (var supportedLocale in supportedLocales) { + if (supportedLocale.languageCode == locale.languageCode) { + return true; + } + } + return false; + } +} diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index 02957ae3c..2d2308a24 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -1,12 +1,727 @@ { - "enterYourEmailAddress": "Geben Sie Ihre E-Mail-Adresse ein", + "enterYourEmailAddress": "Gib deine E-Mail-Adresse ein", "accountWelcomeBack": "Willkommen zurück!", "email": "E-Mail", "cancel": "Abbrechen", + "verify": "Überprüfen", + "invalidEmailAddress": "Ungültige E-Mail-Adresse", + "enterValidEmail": "Bitte gib eine gültige E-Mail-Adresse ein.", "deleteAccount": "Konto löschen", + "askDeleteReason": "Was ist der Hauptgrund für die Löschung deines Kontos?", + "deleteAccountFeedbackPrompt": "Wir bedauern sehr, dass du dein Konto löschen möchtest. Du würdest uns sehr helfen, wenn du uns kurz einige Gründe hierfür nennen könntest.", "feedback": "Rückmeldung", + "kindlyHelpUsWithThisInformation": "Bitte gib diese Daten ein", + "confirmDeletePrompt": "Ja, ich möchte dieses Konto und alle enthaltenen Daten endgültig und unwiderruflich löschen.", + "confirmAccountDeletion": "Kontolöschung bestätigen", + "deleteConfirmDialogBody": "Du bist dabei, dein Konto und alle gespeicherten Daten dauerhaft zu löschen.\nDiese Aktion ist unwiderrufbar.", + "deleteAccountPermanentlyButton": "Konto unwiderruflich löschen", + "yourAccountHasBeenDeleted": "Dein Benutzerkonto wurde gelöscht", + "selectReason": "Grund auswählen", + "deleteReason1": "Es fehlt eine zentrale Funktion, die ich benötige", + "deleteReason2": "Die App oder eine bestimmte Funktion verhält sich nicht so wie gedacht", + "deleteReason3": "Ich habe einen anderen Dienst gefunden, der mir mehr zusagt", + "deleteReason4": "Mein Grund ist nicht aufgeführt", + "sendEmail": "E-Mail senden", + "deleteRequestSLAText": "Deine Anfrage wird innerhalb von 72 Stunden bearbeitet.", + "deleteEmailRequest": "Bitte sende eine E-Mail an account-deletion@ente.io von Deiner bei uns hinterlegten E-Mail-Adresse.", + "ok": "Ok", + "createAccount": "Konto erstellen", "createNewAccount": "Neues Konto erstellen", "password": "Passwort", + "confirmPassword": "Passwort wiederholen", "activeSessions": "Aktive Sitzungen", - "insecureDevice": "Unsicheres Gerät" + "oops": "Hoppla", + "somethingWentWrongPleaseTryAgain": "Ein Fehler ist aufgetreten, bitte versuche es erneut", + "thisWillLogYouOutOfThisDevice": "Dadurch wirst du von diesem Gerät abgemeldet!", + "thisWillLogYouOutOfTheFollowingDevice": "Dadurch wirst du von folgendem Gerät abgemeldet:", + "terminateSession": "Sitzungen beenden?", + "terminate": "Beenden", + "thisDevice": "Dieses Gerät", + "recoverButton": "Wiederherstellen", + "recoverySuccessful": "Wiederherstellung erfolgreich!", + "decrypting": "Wird entschlüsselt...", + "incorrectRecoveryKeyTitle": "Falscher Wiederherstellungs-Schlüssel", + "incorrectRecoveryKeyBody": "Der eingegebene Schlüssel ist ungültig", + "forgotPassword": "Passwort vergessen", + "enterYourRecoveryKey": "Gib deinen Wiederherstellungs-Schlüssel ein", + "noRecoveryKey": "Kein Wiederherstellungs-Schlüssel?", + "sorry": "Entschuldigung", + "noRecoveryKeyNoDecryption": "Aufgrund unseres Ende-zu-Ende-Verschlüsselungsprotokolls können deine Daten nicht ohne dein Passwort oder deinen Wiederherstellungs-Schlüssel entschlüsselt werden", + "verifyEmail": "E-Mail-Adresse verifizieren", + "checkInboxAndSpamFolder": "Bitte überprüfe deinen E-Mail-Posteingang (und Spam), um die Verifizierung abzuschließen", + "tapToEnterCode": "Antippen, um den Code einzugeben", + "resendEmail": "E-Mail erneut senden", + "weHaveSendEmailTo": "Wir haben eine E-Mail an {email} gesendet", + "@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": "Passwort festlegen", + "changePasswordTitle": "Passwort ändern", + "resetPasswordTitle": "Passwort zurücksetzen", + "encryptionKeys": "Verschlüsselungscode", + "passwordWarning": "Wir speichern dieses Passwort nicht. Wenn du es vergisst, können wir deine Daten nicht entschlüsseln", + "enterPasswordToEncrypt": "Gib ein Passwort ein, mit dem wir deine Daten verschlüsseln können", + "enterNewPasswordToEncrypt": "Gib ein neues Passwort ein, mit dem wir deine Daten verschlüsseln können", + "weakStrength": "Schwach", + "strongStrength": "Stark", + "moderateStrength": "Mittel", + "passwordStrength": "Passwortstärke: {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": "Passwort erfolgreich geändert", + "generatingEncryptionKeys": "Generierung von Verschlüsselungscodes...", + "pleaseWait": "Bitte warten...", + "continueLabel": "Weiter", + "insecureDevice": "Unsicheres Gerät", + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Es tut uns leid, wir konnten keine sicheren Schlüssel auf diesem Gerät generieren.\n\nBitte starte die Registrierung auf einem anderen Gerät.", + "howItWorks": "So funktioniert's", + "encryption": "Verschlüsselung", + "ackPasswordLostWarning": "Ich verstehe, dass ich meine Daten verlieren kann, wenn ich mein Passwort vergesse, da meine Daten Ende-zu-Ende-verschlüsselt sind.", + "privacyPolicyTitle": "Datenschutzerklärung", + "termsOfServicesTitle": "Nutzungsbedingungen", + "signUpTerms": "Ich stimme den Nutzungsbedingungen und der Datenschutzerklärung zu", + "logInLabel": "Anmelden", + "loginTerms": "Mit dem Klick auf \"Anmelden\" stimme ich den Nutzungsbedingungen und der Datenschutzerklärung zu", + "changeEmail": "E-Mail-Adresse ändern", + "enterYourPassword": "Passwort eingeben", + "welcomeBack": "Willkommen zurück!", + "contactSupport": "Support kontaktieren", + "incorrectPasswordTitle": "Falsches Passwort", + "pleaseTryAgain": "Bitte versuche es erneut", + "recreatePasswordTitle": "Passwort wiederherstellen", + "useRecoveryKey": "Wiederherstellungs-Schlüssel verwenden", + "recreatePasswordBody": "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).", + "verifyPassword": "Passwort überprüfen", + "recoveryKey": "Wiederherstellungs-Schlüssel", + "recoveryKeyOnForgotPassword": "Falls du dein Passwort vergisst, kannst du deine Daten allein mit diesem Schlüssel wiederherstellen.", + "recoveryKeySaveDescription": "Wir speichern diesen Schlüssel nicht. Bitte speichere diese Schlüssel aus 24 Wörtern an einem sicheren Ort.", + "doThisLater": "Später machen", + "saveKey": "Schlüssel speichern", + "recoveryKeyCopiedToClipboard": "Wiederherstellungs-Schlüssel in die Zwischenablage kopiert", + "recoverAccount": "Konto wiederherstellen", + "recover": "Wiederherstellen", + "dropSupportEmail": "Bitte sende eine E-Mail an {supportEmail} von deiner registrierten E-Mail-Adresse", + "@dropSupportEmail": { + "placeholders": { + "supportEmail": { + "description": "The support email address", + "type": "String", + "example": "support@ente.io" + } + } + }, + "twofactorSetup": "Zweiten Faktor (2FA) einrichten", + "enterCode": "Code eingeben", + "scanCode": "Code scannen", + "codeCopiedToClipboard": "Code in Zwischenablage kopiert", + "copypasteThisCodentoYourAuthenticatorApp": "Kopiere diesen Code\nin deine Authentifizierungs-App", + "tapToCopy": "zum Kopieren antippen", + "scanThisBarcodeWithnyourAuthenticatorApp": "Scanne diesen Code mit \ndeiner Authentifizierungs-App", + "enterThe6digitCodeFromnyourAuthenticatorApp": "Gib den 6-stelligen Code aus\ndeiner Authentifizierungs-App ein", + "confirm": "Bestätigen", + "setupComplete": "Einrichtung abgeschlossen", + "saveYourRecoveryKeyIfYouHaventAlready": "Sichere deinen Wiederherstellungs-Schlüssel, falls noch nicht geschehen", + "thisCanBeUsedToRecoverYourAccountIfYou": "Dies kann verwendet werden, um dein Konto wiederherzustellen, wenn du deinen zweiten Faktor (2FA) verlierst", + "twofactorAuthenticationPageTitle": "Zwei-Faktor-Authentifizierung", + "lostDevice": "Gerät verloren?", + "verifyingRecoveryKey": "Wiederherstellungs-Schlüssel wird überprüft...", + "recoveryKeyVerified": "Wiederherstellungs-Schlüssel überprüft", + "recoveryKeySuccessBody": "Sehr gut! Ihr Wiederherstellungsschlüssel ist gültig. Vielen Dank für die Verifizierung.\n\nBitte vergessen Sie nicht eine Kopie Ihres Wiederherstellungsschlüssels sicher aufzubewahren.", + "invalidRecoveryKey": "Der von Ihnen eingegebene Wiederherstellungsschlüssel ist nicht gültig. Bitte stellen Sie sicher das aus 24 Wörtern zusammen gesetzt ist und jedes dieser Worte richtig geschrieben wurde.\n\nSollten Sie den Wiederherstellungscode eingegeben haben, stellen Sie bitte sicher, dass dieser 64 Worte lang ist und ebenfall richtig geschrieben wurde.", + "invalidKey": "Ungültiger Schlüssel", + "tryAgain": "Erneut versuchen", + "viewRecoveryKey": "Wiederherstellungsschlüssel anzeigen", + "confirmRecoveryKey": "Wiederherstellungsschlüssel bestätigen", + "recoveryKeyVerifyReason": "Ihr Wiederherstellungsschlüssel ist die einzige Möglichkeit Ihre Fotos wieder herzustellen, sollten Sie Ihr Passwort vergessen haben. Sie können diesen unter \"Einstellungen\" und dann \"Konto\" wieder finden.\n\nBitte geben Sie unten Ihren Wiederherstellungsschlüssel ein um sicher zu stellen, dass Sie ihn korrekt hinterlegt haben.", + "confirmYourRecoveryKey": "Bestätigen Sie ihren Wiederherstellungsschlüssel", + "addViewer": "Album teilen", + "addCollaborator": "Bearbeiter hinzufügen", + "addANewEmail": "Neue E-Mail-Adresse hinzufügen", + "orPickAnExistingOne": "Oder eine Vorherige auswählen", + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": "Bearbeiter können Fotos & Videos zu dem geteilten Album hinzufügen.", + "enterEmail": "E-Mail eingeben", + "albumOwner": "Besitzer", + "@albumOwner": { + "description": "Role of the album owner" + }, + "you": "Sie", + "collaborator": "Bearbeiter", + "addMore": "Mehr hinzufügen", + "@addMore": { + "description": "Button text to add more collaborators/viewers" + }, + "viewer": "Zuschauer", + "remove": "Entfernen", + "removeParticipant": "Teilnehmer entfernen", + "@removeParticipant": { + "description": "menuSectionTitle for removing a participant" + }, + "manage": "Verwalten", + "addedAs": "Hinzugefügt als", + "changePermissions": "Berechtigungen ändern?", + "yesConvertToViewer": "Ja, zu \"Beobachter\" ändern", + "cannotAddMorePhotosAfterBecomingViewer": "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", + "allowAddingPhotos": "Hinzufügen von Fotos erlauben", + "@allowAddingPhotos": { + "description": "Switch button to enable uploading photos to a public link" + }, + "allowAddPhotosDescription": "Erlaube Nutzern mit diesem Link ebenfalls Fotos zu diesem geteilten Album hinzuzufügen.", + "passwordLock": "Passwort Sperre", + "disableDownloadWarningTitle": "Bitte beachten Sie:", + "disableDownloadWarningBody": "Zuschauer können weiterhin Screenshots oder mit anderen externen Programmen Kopien der Bilder machen.", + "allowDownloads": "Downloads erlauben", + "linkDeviceLimit": "Geräte Limit", + "linkExpiry": "Ablaufdatum des Links", + "linkExpired": "Abgelaufen", + "linkEnabled": "Aktiviert", + "linkNeverExpires": "Niemals", + "expiredLinkInfo": "Dieser Link ist abgelaufen. Bitte wählen Sie ein neues Ablaufdatum oder deaktivieren Sie das Ablaufdatum des Links.", + "setAPassword": "Passwort setzen", + "lockButtonLabel": "Sperren", + "enterPassword": "Passwort eingeben", + "removeLink": "Link entfernen", + "manageLink": "Link verwalten", + "linkExpiresOn": "Link läuft am {expiryTime} ab", + "albumUpdated": "Album aktualisiert", + "maxDeviceLimitSpikeHandling": "Wenn auf den Höchstwert von {maxValue} gesetzt, dann wird das Limit gelockert um potenzielle Höchstlasten unterstützen zu können.", + "@maxDeviceLimitSpikeHandling": { + "placeholders": { + "maxValue": { + "type": "int", + "example": "100" + } + } + }, + "never": "Niemals", + "custom": "Benutzerdefiniert", + "@custom": { + "description": "Label for setting custom value for link expiry" + }, + "after1Hour": "Nach 1. Stunde", + "after1Day": "Nach einem Tag", + "after1Week": "Nach 1 Woche", + "after1Month": "Nach 1 Monat", + "after1Year": "Nach 1 Jahr", + "manageParticipants": "Verwalten", + "collabLinkSectionDescription": "Erstelle einen Link, um anderen zu ermöglichen, Fotos in deinem geteilten Album hinzuzufügen und zu sehen - ohne dass diese ein Konto von ente.io oder die App benötigen. Ideal, um Fotos von Events zu sammeln.", + "collectPhotos": "Fotos sammeln", + "collaborativeLink": "Gemeinschaftlicher Link", + "shareWithNonenteUsers": "Mit Nicht-Ente-Benutzern teilen", + "createPublicLink": "Öffentlichen Link erstellen", + "sendLink": "Link senden", + "copyLink": "Link kopieren", + "linkHasExpired": "Link ist abgelaufen", + "publicLinkEnabled": "Öffentlicher Link aktiviert", + "shareALink": "Einen Link teilen", + "sharedAlbumSectionDescription": "Erstelle gemeinsame Alben mit anderen ente Benutzern, einschließlich solchen im kostenlosen Tarif.", + "shareWithPeopleSectionTitle": "{numberOfPeople, plural, =0 {Teile mit bestimmten Personen} =1 {Teilen mit 1 Person} other {Teilen mit {numberOfPeople} Personen}}", + "@shareWithPeopleSectionTitle": { + "placeholders": { + "numberOfPeople": { + "type": "int", + "example": "2" + } + } + }, + "thisIsYourVerificationId": "Dies ist deine Verifizierungs-ID", + "someoneSharingAlbumsWithYouShouldSeeTheSameId": "Jemand, der Alben mit dir teilt, sollte die gleiche ID auf seinem Gerät sehen.", + "howToViewShareeVerificationID": "Bitte sie, auf den Einstellungs Bildschirm ihre E-Mail-Adresse lange anzuklicken und zu überprüfen, dass die IDs auf beiden Geräten übereinstimmen.", + "thisIsPersonVerificationId": "Dies ist {email}s Verifizierungs-ID", + "@thisIsPersonVerificationId": { + "placeholders": { + "email": { + "type": "String", + "example": "someone@ente.io" + } + } + }, + "verificationId": "Verifizierungs-ID", + "verifyEmailID": "Verifiziere {email}", + "emailNoEnteAccount": "{email} hat kein Ente-Konto.\n\nSenden Sie eine Einladung, um Fotos zu teilen.", + "shareMyVerificationID": "Hier ist meine Verifizierungs-ID: {verificationID} für ente.io.", + "shareTextConfirmOthersVerificationID": "Hey, kannst du bestätigen, dass dies deine ente.io Verifizierungs-ID ist: {verificationID}", + "somethingWentWrong": "Irgendetwas ging schief", + "sendInvite": "Einladung senden", + "shareTextRecommendUsingEnte": "Lade ente herunter, damit wir einfach Fotos und Videos in höchster Qualität teilen können\n\nhttps://ente.io/#download", + "done": "Fertig", + "applyCodeTitle": "Code nutzen", + "enterCodeDescription": "Gib den Code deines Freundes ein, damit sie beide kostenlosen Speicherplatz erhalten", + "apply": "Anwenden", + "failedToApplyCode": "Der Code konnte nicht aktiviert werden", + "enterReferralCode": "Gib den Weiterempfehlungs-Code ein", + "codeAppliedPageTitle": "Code eingelöst", + "storageInGB": "{storageAmountInGB} GB", + "claimed": "Eingelöst", + "@claimed": { + "description": "Used to indicate storage claimed, like 10GB Claimed" + }, + "details": "Details", + "claimMore": "Mehr einlösen!", + "theyAlsoGetXGb": "Diese erhalten auch {storageAmountInGB} GB", + "freeStorageOnReferralSuccess": "{storageAmountInGB} GB jedes Mal, wenn sich jemand mit deinem Code für einen bezahlten Tarif anmeldet", + "shareTextReferralCode": "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", + "claimFreeStorage": "Freien Speicher einlösen", + "inviteYourFriends": "Lade deine Freunde ein", + "failedToFetchReferralDetails": "Die Weiterempfehlungs-Details können nicht abgerufen werden. Bitte versuche es später erneut.", + "referralStep1": "1. Gib diesen Code an deine Freunde", + "referralStep2": "2. Sie schließen ein bezahltes Abo ab", + "referralStep3": "3. Ihr beide erhaltet {storageInGB} GB* kostenlos", + "referralsAreCurrentlyPaused": "Einlösungen sind derzeit pausiert", + "youCanAtMaxDoubleYourStorage": "* Du kannst deinen Speicher maximal verdoppeln", + "claimedStorageSoFar": "{isFamilyMember, select, true {Deine Familiengruppe hat bereits {storageAmountInGb} GB erhalten} false {Du hast bereits {storageAmountInGb} GB erhalten} other {Du hast bereits {storageAmountInGb} Gb erhalten!}}", + "@claimedStorageSoFar": { + "placeholders": { + "isFamilyMember": { + "type": "String", + "example": "true" + }, + "storageAmountInGb": { + "type": "int", + "example": "10" + } + } + }, + "faq": "Häufig gestellte Fragen", + "oopsSomethingWentWrong": "Ups. Leider ist ein Fehler aufgetreten", + "peopleUsingYourCode": "Leute, die deinen Code verwenden", + "eligible": "zulässig", + "total": "Gesamt", + "codeUsedByYou": "Von dir benutzter Code", + "freeStorageClaimed": "Kostenlos hinzugefügter Speicherplatz", + "freeStorageUsable": "Freier Speicherplatz nutzbar", + "usableReferralStorageInfo": "Der verwendbare Speicherplatz ist von deinem aktuellen Abonnement eingeschränkt. Überschüssiger, beanspruchter Speicherplatz wird automatisch verwendbar werden, wenn du ein höheres Abonnement buchst.", + "removeFromAlbumTitle": "Aus Album entfernen?", + "removeFromAlbum": "Aus Album entfernen", + "itemsWillBeRemovedFromAlbum": "Ausgewählte Elemente werden aus diesem Album entfernt", + "removeShareItemsWarning": "Einige der Elemente, die du entfernst, wurden von anderen Nutzern hinzugefügt und du wirst den Zugriff auf sie verlieren", + "addingToFavorites": "Wird zu Favoriten hinzugefügt...", + "removingFromFavorites": "Wird aus Favoriten entfernt...", + "sorryCouldNotAddToFavorites": "Konnte leider nicht zu den Favoriten hinzugefügt werden!", + "sorryCouldNotRemoveFromFavorites": "Konnte leider nicht aus den Favoriten entfernt werden!", + "subscribeToEnableSharing": "Sieht aus, als sei dein Abonnement abgelaufen. Bitte abonniere, um das Teilen zu aktivieren.", + "subscribe": "Abonnieren", + "canOnlyRemoveFilesOwnedByYou": "Du kannst nur Dateien entfernen, die dir gehören", + "deleteSharedAlbum": "Geteiltes Album löschen?", + "deleteAlbum": "Album löschen", + "deleteAlbumDialog": "Auch die Fotos (und Videos) in diesem Album aus allen anderen Alben löschen, die sie enthalten?", + "deleteSharedAlbumDialogBody": "Dieses Album wird für alle gelöscht\n\nDu wirst den Zugriff auf geteilte Fotos in diesem Album, die anderen gehören, verlieren", + "yesRemove": "Ja, entfernen", + "creatingLink": "Erstelle Link...", + "removeWithQuestionMark": "Entfernen?", + "removeParticipantBody": "{userEmail} wird aus diesem geteilten Album entfernt\n\nAlle von ihnen hinzugefügte Fotos werden ebenfalls aus dem Album entfernt", + "keepPhotos": "Fotos behalten", + "deletePhotos": "Fotos löschen", + "inviteToEnte": "Zu ente einladen", + "removePublicLink": "Öffentlichen Link entfernen", + "disableLinkMessage": "Der öffentliche Link zum Zugriff auf \"{albumName}\" wird entfernt.", + "sharing": "Teilt...", + "youCannotShareWithYourself": "Du kannst nicht mit dir selbst teilen", + "archive": "Archiv", + "createAlbumActionHint": "Drücke lange um Fotos auszuwählen und klicke + um ein Album zu erstellen", + "importing": "Importiert....", + "failedToLoadAlbums": "Laden der Alben fehlgeschlagen", + "hidden": "Versteckt", + "authToViewYourHiddenFiles": "Bitte authentifizieren, um die versteckten Dateien anzusehen", + "trash": "Papierkorb", + "uncategorized": "Unkategorisiert", + "videoSmallCase": "Video", + "photoSmallCase": "Foto", + "singleFileDeleteHighlight": "Es wird aus allen Alben gelöscht.", + "singleFileInBothLocalAndRemote": "Dieses {fileType} existiert auf ente.io und deinem Gerät.", + "singleFileInRemoteOnly": "Dieses {fileType} wird auf ente.io gelöscht.", + "singleFileDeleteFromDevice": "Dieses {fileType} wird von deinem Gerät gelöscht.", + "deleteFromEnte": "Auf ente.io löschen", + "yesDelete": "Ja, löschen", + "movedToTrash": "In den Papierkorb verschoben", + "deleteFromDevice": "Vom Gerät löschen", + "deleteFromBoth": "Aus beidem löschen", + "newAlbum": "Neues Album", + "albums": "Alben", + "memoryCount": "{count, plural, zero{keine Erinnerungsstücke} one{{count} Erinnerung} other{{count} Erinnerungsstücke}}", + "@memoryCount": { + "description": "The text to display the number of memories", + "type": "text", + "placeholders": { + "count": { + "example": "1", + "type": "int" + } + } + }, + "selectedPhotos": "{count} ausgewählt", + "@selectedPhotos": { + "description": "Display the number of selected photos", + "type": "text", + "placeholders": { + "count": { + "example": "5", + "type": "int" + } + } + }, + "selectedPhotosWithYours": "{count} ausgewählt ({yourCount} von Ihnen)", + "@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": "Erweitert", + "@advancedSettings": { + "description": "The text to display in the advanced settings section" + }, + "photoGridSize": "Fotorastergröße", + "manageDeviceStorage": "Gerätespeicher verwalten", + "selectFoldersForBackup": "Ordner für Sicherung auswählen", + "selectedFoldersWillBeEncryptedAndBackedUp": "Ausgewählte Ordner werden verschlüsselt und gesichert", + "unselectAll": "Alle demarkieren", + "selectAll": "Alle markieren", + "skip": "Überspringen", + "updatingFolderSelection": "Ordnerauswahl wird aktualisiert...", + "itemCount": "{count, plural, one{{count} Objekt} other{{count} Objekte}}", + "yearsAgo": "{count, plural, one{vor einem Jahr} other{vor {count} Jahren}}", + "backupSettings": "Backup-Einstellungen", + "backupOverMobileData": "Über mobile Daten sichern", + "backupVideos": "Videos sichern", + "disableAutoLock": "Automatische Sperre deaktivieren", + "deviceLockExplanation": "Das Sperren des Gerätes verhindern, solange 'ente' im Vordergrund geöffnet ist und eine Sicherung läuft. \nDies wird für gewöhnlich nicht benötigt, kann aber dabei helfen große Transfers schneller durchzuführen.", + "about": "Allgemeine Informationen", + "weAreOpenSource": "Unser Quellcode ist offen einsehbar!", + "privacy": "Datenschutz", + "terms": "Nutzungsbedingungen", + "checkForUpdates": "Nach Aktualisierungen suchen", + "checking": "Wird geprüft...", + "youAreOnTheLatestVersion": "Sie sind auf der neuesten Version", + "account": "Konto", + "manageSubscription": "Abonnement verwalten", + "authToChangeYourEmail": "Bitte authentifizieren, um deine E-Mail-Adresse zu ändern", + "changePassword": "Passwort ändern", + "authToChangeYourPassword": "Bitte authentifizieren, um das Passwort zu ändern", + "exportYourData": "Daten exportieren", + "logout": "Ausloggen", + "authToInitiateAccountDeletion": "Bitte authentifizieren, um die Löschung des Kontos einzuleiten", + "areYouSureYouWantToLogout": "Sind sie sicher, dass Sie sich abmelden wollen?", + "yesLogout": "Ja, ausloggen", + "aNewVersionOfEnteIsAvailable": "Eine neuere Version von 'ente' ist verfügbar.", + "update": "Updaten", + "installManually": "Manuell installieren", + "criticalUpdateAvailable": "Kritisches Update ist verfügbar!", + "updateAvailable": "Update verfügbar", + "downloading": "Wird heruntergeladen...", + "theDownloadCouldNotBeCompleted": "Der Download konnte nicht abgeschlossen werden", + "retry": "Erneut versuchen", + "backedUpFolders": "Gesicherte Ordner", + "backup": "Backup", + "freeUpDeviceSpace": "Gerätespeicher freiräumen", + "allClear": "✨ Alles klar", + "noDeviceThatCanBeDeleted": "Du hast keine Dateien auf diesem Gerät, die gelöscht werden können", + "removeDuplicates": "Duplikate entfernen", + "noDuplicates": "✨ Keine Duplikate", + "youveNoDuplicateFilesThatCanBeCleared": "Du hast keine Duplikate, die gelöscht werden können", + "success": "Abgeschlossen", + "rateUs": "Bewerte uns", + "remindToEmptyDeviceTrash": "Lösche auch Dateien aus \"Kürzlich gelöscht\" unter \"Einstellungen\" -> \"Speicher\" um freien Speicher zu erhalten", + "youHaveSuccessfullyFreedUp": "Du hast {storageSaved} erfolgreich freigegeben!", + "@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": "Leere auch deinen \"Papierkorb\", um freien Platz zu erhalten", + "sparkleSuccess": "✨ Abgeschlossen", + "duplicateFileCountWithStorageSaved": "Du hast {count, plural, one{{count} duplizierte Datei} other{{count} dupliziere Dateien}} gelöscht und ({storageSaved}!) freigegeben", + "@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": "Familientarif", + "referrals": "Weiterempfehlungen", + "advanced": "Erweitert", + "general": "Allgemein", + "security": "Sicherheit", + "authToViewYourRecoveryKey": "Bitte authentifizieren, um deinen Wiederherstellungs-Schlüssel anzusehen", + "twofactor": "Zwei-Faktor", + "authToConfigureTwofactorAuthentication": "Bitte authentifizieren, um Zwei-Faktor-Authentifizierung zu konfigurieren", + "lockscreen": "Sperrbildschirm", + "authToChangeLockscreenSetting": "Bitte authentifizieren, um die Sperrbildschirm-Einstellung zu ändern", + "lockScreenEnablePreSteps": "Um den Sperrbildschirm zu aktivieren, legen Sie bitte den Geräte-Passcode oder die Bildschirmsperre in den Systemeinstellungen fest.", + "viewActiveSessions": "Aktive Sitzungen anzeigen", + "authToViewYourActiveSessions": "Bitte authentifizieren, um die aktiven Sitzungen anzusehen", + "disableTwofactor": "Zweiten Faktor (2FA) deaktivieren", + "confirm2FADisable": "Bist du sicher, dass du die Zwei-Faktor-Authentifizierung (2FA) deaktivieren willst?", + "no": "Nein", + "yes": "Ja", + "social": "Social Media", + "rateUsOnStore": "Bewerte uns auf {storeName}", + "blog": "Blog", + "merchandise": "Merchandise", + "twitter": "Twitter", + "mastodon": "Mastodon", + "matrix": "Matrix", + "discord": "Discord", + "reddit": "Reddit", + "yourStorageDetailsCouldNotBeFetched": "Details zum Speicherplatz konnten nicht abgerufen werden", + "reportABug": "Fehler melden", + "reportBug": "Fehler melden", + "suggestFeatures": "Verbesserung vorschlagen", + "support": "Support", + "theme": "Theme", + "lightTheme": "Hell", + "darkTheme": "Dunkel", + "systemTheme": "System", + "freeTrial": "Kostenlose Testphase", + "selectYourPlan": "Wähle dein Abo aus", + "enteSubscriptionPitch": "ente sichert deine Erinnerungsstücke, sodass sie immer für dich verfügbar sind, auch wenn du dein Gerät verlieren solltest.", + "enteSubscriptionShareWithFamily": "Deine Familie kann zu deinem Abo hinzugefügt werden.", + "currentUsageIs": "Aktuell genutzt werden ", + "@currentUsageIs": { + "description": "This text is followed by storage usaged", + "examples": { + "0": "Current usage is 1.2 GB" + }, + "type": "text" + }, + "faqs": "FAQs", + "renewsOn": "Erneuert am {endDate}", + "freeTrialValidTill": "Kostenlose Demo verfügbar bis zum {endDate}", + "subWillBeCancelledOn": "Ihr Abo endet am {endDate}", + "subscription": "Abonnement", + "paymentDetails": "Zahlungsdetails", + "manageFamily": "Familiengruppe verwalten", + "contactToManageSubscription": "Bitte kontaktieren Sie uns über support@ente.io, um Ihr {provider} Abo zu verwalten.", + "renewSubscription": "Abonnement erneuern", + "cancelSubscription": "Abonnement kündigen", + "areYouSureYouWantToRenew": "Bist du sicher, dass du verlängern möchtest?", + "yesRenew": "Ja, erneuern", + "areYouSureYouWantToCancel": "Bist du sicher, dass du kündigen willst?", + "yesCancel": "Ja, kündigen", + "failedToRenew": "Erneuern fehlgeschlagen", + "failedToCancel": "Kündigung fehlgeschlagen", + "twoMonthsFreeOnYearlyPlans": "2 Monate kostenlos beim jährlichen Bezahlen", + "monthly": "Monatlich", + "@monthly": { + "description": "The text to display for monthly plans", + "type": "text" + }, + "yearly": "Jährlich", + "@yearly": { + "description": "The text to display for yearly plans", + "type": "text" + }, + "confirmPlanChange": "Aboänderungen bestätigen", + "areYouSureYouWantToChangeYourPlan": "Sind Sie sicher, dass Sie Ihren Tarif ändern möchten?", + "youCannotDowngradeToThisPlan": "Sie können nicht auf diesen Tarif wechseln", + "cancelOtherSubscription": "Bitte kündigen Sie Ihr aktuelles Abo über {paymentProvider} zuerst", + "@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": "Bei Bedarf auch so kurz wie Sie wollen...", + "send": "Absenden", + "askCancelReason": "Ihr Abonnement wurde gekündigt. Möchten Sie uns den Grund mitteilen?", + "thankYouForSubscribing": "Danke fürs Abonnieren!", + "yourPurchaseWasSuccessful": "Ihr Einkauf war erfolgreich!", + "yourPlanWasSuccessfullyUpgraded": "Ihr Abo wurde erfolgreich aufgestuft", + "yourPlanWasSuccessfullyDowngraded": "Ihr Tarif wurde erfolgreich heruntergestuft", + "yourSubscriptionWasUpdatedSuccessfully": "Dein Abonnement wurde erfolgreich aktualisiert.", + "googlePlayId": "Google Play ID", + "appleId": "Apple ID", + "playstoreSubscription": "PlayStore Abo", + "appstoreSubscription": "AppStore Abo", + "subAlreadyLinkedErrMessage": "Ihr {id} ist bereits mit einem anderen 'ente'-Konto verknüpft.\nWenn Sie Ihre {id} mit diesem Konto verwenden möchten, kontaktieren Sie bitte unseren Support'", + "visitWebToManage": "Bitte rufen Sie \"web.ente.io\" auf um ihr Abo zu verwalten", + "couldNotUpdateSubscription": "Abo konnte nicht aktualisiert werden", + "pleaseContactSupportAndWeWillBeHappyToHelp": "Bitte kontaktieren Sie uns über support@ente.io wo wir Ihnen gerne weiterhelfen.", + "paymentFailed": "Zahlung fehlgeschlagen", + "paymentFailedTalkToProvider": "Bitte kontaktiere den Support von {providerName}, falls etwas abgebucht wurde", + "@paymentFailedTalkToProvider": { + "description": "The text to display when the payment failed", + "type": "text", + "placeholders": { + "providerName": { + "example": "AppStore|PlayStore", + "type": "String" + } + } + }, + "continueOnFreeTrial": "Mit kostenloser Testversion fortfahren", + "areYouSureYouWantToExit": "Möchtest du Vorgang wirklich abbrechen?", + "thankYou": "Vielen Dank", + "failedToVerifyPaymentStatus": "Überprüfung des Zahlungsstatus fehlgeschlagen", + "pleaseWaitForSometimeBeforeRetrying": "Bitte warte kurz, bevor du es erneut versuchst", + "paymentFailedWithReason": "Leider ist deine Zahlung aus folgendem Grund fehlgeschlagen: {reason}", + "youAreOnAFamilyPlan": "Du bist im Familien-Tarif!", + "contactFamilyAdmin": "Bitte kontaktiere {familyAdminEmail} um dein Abo zu verwalten", + "leaveFamily": "Familienabo verlassen", + "areYouSureThatYouWantToLeaveTheFamily": "Bist du sicher, dass du den Familien-Tarif verlassen möchtest?", + "leave": "Verlassen", + "rateTheApp": "App bewerten", + "startBackup": "Sicherung starten", + "noPhotosAreBeingBackedUpRightNow": "Momentan werden keine Fotos gesichert", + "preserveMore": "Mehr Daten sichern", + "existingUser": "Existierender Benutzer", + "privateBackups": "Private Sicherungen", + "forYourMemories": "Als Erinnerung", + "endtoendEncryptedByDefault": "Automatisch Ende-zu-Ende-verschlüsselt", + "safelyStored": "Gesichert", + "atAFalloutShelter": "in einem ehemaligen Luftschutzbunker", + "designedToOutlive": "Entwickelt um zu bewahren", + "available": "Verfügbar", + "everywhere": "überall", + "androidIosWebDesktop": "Android, iOS, Web, Desktop", + "mobileWebDesktop": "Mobil, Web, Desktop", + "newToEnte": "Neu bei ente", + "pleaseLoginAgain": "Bitte logge dich erneut ein", + "devAccountChanged": "Das Entwicklerkonto, das wir verwenden, um ente im App Store zu veröffentlichen, hat sich geändert. Aus diesem Grund musst du dich erneut anmelden.\n\nWir entschuldigen uns für die Unannehmlichkeiten, aber das war unvermeidlich.", + "yourSubscriptionHasExpired": "Dein Abonnement ist abgelaufen", + "storageLimitExceeded": "Speichergrenze überschritten", + "upgrade": "Upgrade", + "backupFailed": "Sicherung fehlgeschlagen", + "couldNotBackUpTryLater": "Deine Daten konnten nicht gesichert werden.\nWir versuchen es später erneut.", + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": "ente kann Dateien nur verschlüsselt sichern, wenn du uns darauf Zugriff gewährst", + "pleaseGrantPermissions": "Bitte erteile die nötigen Berechtigungen", + "grantPermission": "Zugriff gewähren", + "privateSharing": "Privates Teilen", + "shareOnlyWithThePeopleYouWant": "Teile mit ausgewählten Personen", + "usePublicLinksForPeopleNotOnEnte": "Nutze öffentliche Links für Personen ohne ente.io Konto", + "allowPeopleToAddPhotos": "Erlaube anderen das Hinzufügen von Fotos", + "shareAnAlbumNow": "Teile jetzt ein Album", + "collectEventPhotos": "Gemeinsam Event-Fotos sammeln", + "sessionExpired": "Sitzung abgelaufen", + "loggingOut": "Abmeldung...", + "@onDevice": { + "description": "The text displayed above folders/albums stored on device", + "type": "text" + }, + "onDevice": "Auf dem Gerät", + "name": "Name", + "newest": "Zuletzt", + "lastUpdated": "Zuletzt aktualisiert", + "deleteEmptyAlbums": "Leere Alben löschen", + "deleteEmptyAlbumsWithQuestionMark": "Leere Alben löschen?", + "deleteAlbumsDialogBody": "Damit werden alle leeren Alben gelöscht. Dies ist nützlich, wenn du das Durcheinander in deiner Albenliste verringern möchtest.", + "restore": "Wiederherstellen", + "@restore": { + "description": "Display text for an action which triggers a restore of item from trash", + "type": "text" + }, + "moveToAlbum": "Zum Album verschieben", + "unarchive": "Dearchivieren", + "favorite": "Favorit", + "shareLink": "Link teilen", + "addToEnte": "Zu ente hinzufügen", + "addToAlbum": "Zum Album hinzufügen", + "delete": "Löschen", + "share": "Teilen", + "searchByAlbumNameHint": "Name des Albums", + "albumTitle": "Albumtitel", + "enterAlbumName": "Albumname eingeben", + "restoringFiles": "Dateien werden wiederhergestellt...", + "invite": "Einladen", + "shareYourFirstAlbum": "Teile dein erstes Album", + "sharedWith": "Geteilt mit {emailIDs}", + "sharedWithMe": "Mit mir geteilt", + "sharedByMe": "Von mir geteilt", + "doubleYourStorage": "Speicherplatz verdoppeln", + "referFriendsAnd2xYourPlan": "Begeistere Freunde für uns und verdopple deinen Speicher", + "shareAlbumHint": "Öffne ein Album und tippe auf den Teilen-Button oben rechts, um zu teilen.", + "renameAlbum": "Album umbenennen", + "rename": "Umbenennen", + "leaveSharedAlbum": "Geteiltes Album verlassen?", + "leaveAlbum": "Album verlassen", + "photosAddedByYouWillBeRemovedFromTheAlbum": "Von dir hinzugefügte Fotos werden vom Album entfernt", + "youveNoFilesInThisAlbumThatCanBeDeleted": "Du hast keine Dateien in diesem Album, die gelöscht werden können", + "youDontHaveAnyArchivedItems": "Du hast keine archivierten Elemente.", + "ignoredFolderUploadReason": "Einige Dateien in diesem Album werden beim Upload ignoriert, weil sie zuvor auf ente gelöscht wurden.", + "resetIgnoredFiles": "Ignorierte Dateien zurücksetzen", + "deviceFilesAutoUploading": "Dateien, die zu diesem Album hinzugefügt werden, werden automatisch zu ente hochgeladen.", + "turnOnBackupForAutoUpload": "Aktiviere die Sicherung, um automatisch neu hinzugefügte Dateien dieses Ordners auf ente hochzuladen.", + "noHiddenPhotosOrVideos": "Keine versteckten Fotos oder Videos", + "nothingToSeeHere": "Hier gibt es nichts zu sehen! 👀", + "unarchiveAlbum": "Album dearchivieren", + "archiveAlbum": "Album archivieren", + "pleaseWaitDeletingAlbum": "Bitte warten, Album wird gelöscht", + "noResultsFound": "Keine Ergebnisse gefunden", + "loadingExifData": "Lade Exif-Daten...", + "viewAllExifData": "Alle Exif-Daten anzeigen", + "noExifData": "Keine Exif-Daten", + "thisImageHasNoExifData": "Dieses Bild hat keine Exif-Daten", + "exif": "EXIF", + "noResults": "Keine Ergebnisse", + "close": "Schließen", + "setAs": "Festlegen als", + "fileSavedToGallery": "Datei in Galerie gespeichert", + "download": "Herunterladen", + "downloadFailed": "Herunterladen fehlgeschlagen", + "authToViewYourMemories": "Bitte authentifizieren, um deine Erinnerungsstücke anzusehen", + "twofactorAuthenticationSuccessfullyReset": "Zwei-Faktor-Authentifizierung (2FA) erfolgreich zurückgesetzt", + "twofactorAuthenticationHasBeenDisabled": "Zwei-Faktor-Authentifizierung (2FA) wurde deaktiviert", + "disablingTwofactorAuthentication": "Zwei-Faktor-Authentifizierung (2FA) wird deaktiviert...", + "allMemoriesPreserved": "Alle Erinnerungsstücke gesichert", + "syncProgress": "{completed}/{total} Erinnerungsstücke gesichert", + "@syncProgress": { + "description": "Text to tell user how many memories have been preserved", + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "loadMessage2": "Wir haben bereits mehr als 10 Millionen Erinnerungsstücke gesichert", + "galleryMemoryLimitInfo": "Bis zu 1000 Erinnerungsstücke angezeigt in der Galerie", + "rotateRight": "Nach rechts drehen", + "saveCopy": "Kopie speichern", + "color": "Farbe", + "yesDiscardChanges": "Ja, Änderungen verwerfen", + "doYouWantToDiscardTheEditsYouHaveMade": "Möchtest du deine Änderungen verwerfen?", + "saving": "Speichern...", + "editsSaved": "Änderungen gespeichert" } \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 347a3b8f2..943c42e99 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -51,7 +51,17 @@ "checkInboxAndSpamFolder": "Please check your inbox (and spam) to complete verification", "tapToEnterCode": "Tap to enter code", "resendEmail": "Resend email", - "weveSentAMailTo": "We've sent a mail to", + "weHaveSendEmailTo": "We have sent a mail to {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": "Set password", "changePasswordTitle": "Change password", "resetPasswordTitle": "Reset password", @@ -85,7 +95,7 @@ "ackPasswordLostWarning": "I understand that if I lose my password, I may lose my data since my data is end-to-end encrypted.", "privacyPolicyTitle": "Privacy Policy", "termsOfServicesTitle": "Terms", - "signUpTerms" : "I agree to the terms of service and privacy policy", + "signUpTerms": "I agree to the terms of service and privacy policy", "logInLabel": "Log in", "loginTerms": "By clicking log in, I agree to the terms of service and privacy policy", "changeEmail": "Change email", @@ -613,6 +623,11 @@ "storageLimitExceeded": "Storage limit exceeded", "upgrade": "Upgrade", "raiseTicket": "Raise ticket", + "@raiseTicket": { + "description": "Button text for raising a support tickets in case of unhandled errors during backup", + "type": "text" + }, + "backupFailed": "Backup failed", "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", @@ -626,6 +641,16 @@ "collectEventPhotos": "Collect event photos", "sessionExpired": "Session expired", "loggingOut": "Logging out...", + "@onDevice": { + "description": "The text displayed above folders/albums stored on device", + "type": "text" + }, + "onDevice": "On device", + "@onEnte": { + "description": "The text displayed above albums backed up to ente", + "type": "text" + }, + "onEnte": "On ente", "name": "Name", "newest": "Newest", "lastUpdated": "Last updated", @@ -721,7 +746,7 @@ "calculating": "Calculating...", "pleaseWaitDeletingAlbum": "Please wait, deleting album", "searchHintText": "Albums, months, days, years, ...", - "searchByExamples": "\u2022 Album names (e.g. \"Camera\")\n\u2022 Types of files (e.g. \"Videos\", \".gif\")\n\u2022 Years and months (e.g. \"2022\", \"January\")\n\u2022 Holidays (e.g. \"Christmas\")\n\u2022 Photo descriptions (e.g. “#fun”)", + "searchByExamples": "• Album names (e.g. \"Camera\")\n• Types of files (e.g. \"Videos\", \".gif\")\n• Years and months (e.g. \"2022\", \"January\")\n• Holidays (e.g. \"Christmas\")\n• Photo descriptions (e.g. “#fun”)", "youCanTrySearchingForADifferentQuery": "You can try searching for a different query.", "noResultsFound": "No results found", "addedBy": "Added by {emailOrName}", @@ -756,7 +781,7 @@ "@filesBackedUpInAlbum": { "description": "Text to tell user how many files have been backed up in the album", "placeholders": { - "count" :{ + "count": { "example": "1", "type": "int" }, @@ -771,7 +796,7 @@ "@filesBackedUpFromDevice": { "description": "Text to tell user how many files have been backed up from this device", "placeholders": { - "count" :{ + "count": { "example": "1", "type": "int" }, @@ -788,7 +813,7 @@ "freeUpAccessPostDelete": "You can still access {count, plural, one {it} other {them}} on ente as long as you have an active subscription", "@freeUpAccessPostDelete": { "placeholders": { - "count" :{ + "count": { "example": "1", "type": "int" } @@ -821,7 +846,7 @@ "@syncProgress": { "description": "Text to tell user how many memories have been preserved", "placeholders": { - "completed" :{ + "completed": { "type": "int" }, "total": { @@ -880,5 +905,31 @@ "loadMessage8": "web.ente.io has a slick uploader", "loadMessage9": "We use Xchacha20Poly1305 to safely encrypt your data", "language": "Language", - "selectLanguage": "Select Language" -} + "selectLanguage": "Select Language", + "locationName": "Location name", + "addLocation": "Add location", + "groupNearbyPhotos": "Group nearby photos", + "location": "Location", + "kiloMeterUnit": "km", + "addLocationButton": "Add", + "radius": "Radius", + "locationTagFeatureDescription": "A location tag groups all photos that were taken within some radius of a photo", + "galleryMemoryLimitInfo": "Up to 1000 memories shown in gallery", + "save": "Save", + "centerPoint": "Center point", + "pickCenterPoint": "Pick center point", + "useSelectedPhoto": "Use selected photo", + "edit": "Edit", + "deleteLocation": "Delete location", + "rotateLeft": "Rotate left", + "flip": "Flip", + "rotateRight": "Rotate right", + "saveCopy": "Save copy", + "light": "Light", + "color": "Color", + "yesDiscardChanges": "Yes, discard changes", + "doYouWantToDiscardTheEditsYouHaveMade": "Do you want to discard the edits you have made?", + "saving": "Saving...", + "editsSaved": "Edits saved", + "oopsCouldNotSaveEdits": "Oops, could not save edits" +} \ No newline at end of file diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index 9e26dfeeb..6554002e2 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -1 +1,933 @@ -{} \ No newline at end of file +{ + "enterYourEmailAddress": "Escribe tu correo electrónico", + "accountWelcomeBack": "¡Bienvenido de nuevo!", + "email": "Correo electrónico", + "cancel": "Cancelar", + "verify": "Verificar", + "invalidEmailAddress": "Dirección de correo electrónico no válida", + "enterValidEmail": "Por favor, introduzca una dirección de correo electrónico válida.", + "deleteAccount": "Eliminar cuenta", + "askDeleteReason": "¿Cuál es la razón principal por la que eliminas tu cuenta?", + "deleteAccountFeedbackPrompt": "Lamentamos que te vayas. Por favor, explícanos el motivo para ayudarnos a mejorar.", + "feedback": "Sugerencias", + "kindlyHelpUsWithThisInformation": "Por favor ayúdanos con esta información", + "confirmDeletePrompt": "Sí, quiero eliminar permanentemente esta cuenta y todos sus datos.", + "confirmAccountDeletion": "Corfirmar borrado de cuenta", + "deleteConfirmDialogBody": "Está a punto de eliminar permanentemente su cuenta y todos sus datos.\nEsta acción es irreversible.", + "deleteAccountPermanentlyButton": "Eliminar Cuenta Permanentemente", + "yourAccountHasBeenDeleted": "Su cuenta ha sido eliminada", + "selectReason": "Seleccionar motivo", + "deleteReason1": "Falta una característica clave que necesito", + "deleteReason2": "La aplicación o una característica determinada no \nse 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", + "sendEmail": "Enviar correo electrónico", + "deleteRequestSLAText": "Su solicitud será procesada dentro de 72 horas.", + "deleteEmailRequest": "Por favor, envíe un correo electrónico a account-deletion@ente.io desde su dirección de correo electrónico registrada.", + "ok": "Aceptar", + "createAccount": "Crear cuenta", + "createNewAccount": "Crear nueva cuenta", + "password": "Contraseña", + "confirmPassword": "Confirmar contraseña", + "activeSessions": "Sesiónes activas", + "oops": "Ups", + "somethingWentWrongPleaseTryAgain": "Algo salió mal, por favor inténtalo de nuevo", + "thisWillLogYouOutOfThisDevice": "¡Esto cerrará la sesión de este dispositivo!", + "thisWillLogYouOutOfTheFollowingDevice": "Esto cerrará la sesión del siguiente dispositivo:", + "terminateSession": "¿Terminar sesión?", + "terminate": "Terminar", + "thisDevice": "Este dispositivo", + "recoverButton": "Recuperar", + "recoverySuccessful": "¡Recuperación exitosa!", + "decrypting": "Descifrando...", + "incorrectRecoveryKeyTitle": "Clave de recuperación incorrecta", + "incorrectRecoveryKeyBody": "La clave de recuperación introducida es incorrecta", + "forgotPassword": "Olvidé mi contraseña", + "enterYourRecoveryKey": "Introduzca su clave de recuperación", + "noRecoveryKey": "¿Sin clave de recuperación?", + "sorry": "Lo sentimos", + "noRecoveryKeyNoDecryption": "Debido a la naturaleza de nuestro protocolo de cifrado de extremo a extremo, sus datos no pueden ser descifrados sin su contraseña o clave de recuperación", + "verifyEmail": "Verificar correo electrónico", + "checkInboxAndSpamFolder": "Revisa tu bandeja de entrada (y spam) para completar la verificación", + "tapToEnterCode": "Toca para introducir el código", + "resendEmail": "Reenviar correo electrónico", + "weHaveSendEmailTo": "Hemos enviado un correo a {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": "Establecer contraseña", + "changePasswordTitle": "Cambiar contraseña", + "resetPasswordTitle": "Restablecer contraseña", + "encryptionKeys": "Claves de cifrado", + "passwordWarning": "No almacenamos esta contraseña, así que si la olvidas, no podemos descifrar tus datos", + "enterPasswordToEncrypt": "Introduzca una contraseña que podamos usar para cifrar sus datos", + "enterNewPasswordToEncrypt": "Introduzca una nueva contraseña que podamos usar para cifrar sus datos", + "weakStrength": "Poco segura", + "strongStrength": "Segura", + "moderateStrength": "Moderada", + "passwordStrength": "Seguridad de la contraseña : {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": "Contraseña cambiada correctamente", + "generatingEncryptionKeys": "Generando claves de encriptación...", + "pleaseWait": "Por favor, espere...", + "continueLabel": "Continuar", + "insecureDevice": "Dispositivo inseguro", + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Lo sentimos, no hemos podido generar claves seguras en este dispositivo.\n\nRegístrate desde un dispositivo diferente.", + "howItWorks": "Cómo funciona", + "encryption": "Cifrado", + "ackPasswordLostWarning": "Entiendo que si pierdo mi contraseña podría perder mis datos, ya que mis datos están cifrados de extremo a extremo.", + "privacyPolicyTitle": "Política de Privacidad", + "termsOfServicesTitle": "Términos", + "signUpTerms": "Estoy de acuerdo con los términos del servicio y la política de privacidad", + "logInLabel": "Iniciar sesión", + "loginTerms": "Al hacer clic en iniciar sesión, acepto los términos de servicio y la política de privacidad", + "changeEmail": "Cambiar correo electrónico", + "enterYourPassword": "Ingrese su contraseña", + "welcomeBack": "¡Bienvenido de nuevo!", + "contactSupport": "Contactar con soporte", + "incorrectPasswordTitle": "Contraseña incorrecta", + "pleaseTryAgain": "Por favor, inténtalo nuevamente", + "recreatePasswordTitle": "Recrear contraseña", + "useRecoveryKey": "Usar clave de recuperación", + "recreatePasswordBody": "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).", + "verifyPassword": "Verificar contraseña", + "recoveryKey": "Clave de recuperación", + "recoveryKeyOnForgotPassword": "Si olvida su contraseña, la única forma de recuperar sus datos es con esta clave.", + "recoveryKeySaveDescription": "Nosotros no almacenamos esta clave, por favor guarde dicha clave de 24 palabras en un lugar seguro.", + "doThisLater": "Hacer esto más tarde", + "saveKey": "Guardar Clave", + "recoveryKeyCopiedToClipboard": "Clave de recuperación copiada al portapapeles", + "recoverAccount": "Recuperar cuenta", + "recover": "Recuperar", + "dropSupportEmail": "Por favor, envíe un email a {supportEmail} desde su dirección de correo electrónico registrada", + "@dropSupportEmail": { + "placeholders": { + "supportEmail": { + "description": "The support email address", + "type": "String", + "example": "support@ente.io" + } + } + }, + "twofactorSetup": "Configuración de dos pasos", + "enterCode": "Introduzca el código", + "scanCode": "Escanear código", + "codeCopiedToClipboard": "Código copiado al portapapeles", + "copypasteThisCodentoYourAuthenticatorApp": "Copiar y pegar este código\na su aplicación de autenticador", + "tapToCopy": "toque para copiar", + "scanThisBarcodeWithnyourAuthenticatorApp": "Escanea este código QR con tu aplicación de autenticación", + "enterThe6digitCodeFromnyourAuthenticatorApp": "Ingrese el código de seis dígitos de su aplicación de autenticación", + "confirm": "Confirmar", + "setupComplete": "Configuración completa", + "saveYourRecoveryKeyIfYouHaventAlready": "Guarda tu clave de recuperación si aún no lo has hecho", + "thisCanBeUsedToRecoverYourAccountIfYou": "Esto puede utilizarse para recuperar su cuenta si pierde su segundo factor", + "twofactorAuthenticationPageTitle": "Autenticación en dos pasos", + "lostDevice": "¿Perdió su dispositivo?", + "verifyingRecoveryKey": "Verificando clave de recuperación...", + "recoveryKeyVerified": "Clave de recuperación verificada", + "recoveryKeySuccessBody": "¡Genial! Su clave de recuperación es válida. Gracias por verificar.\n\nPor favor, recuerde mantener su clave de recuperación segura.", + "invalidRecoveryKey": "La clave de recuperación introducida no es válida. Por favor, asegúrese de que contiene 24 palabras y compruebe la ortografía de cada una.\n\nSi ha introducido un código de recuperación antiguo, asegúrese de que tiene 64 caracteres de largo y compruebe cada uno de ellos.", + "invalidKey": "Clave inválida", + "tryAgain": "Inténtelo de nuevo", + "viewRecoveryKey": "Ver código de recuperación", + "confirmRecoveryKey": "Confirmar clave de recuperación", + "recoveryKeyVerifyReason": "Su clave de recuperación es la única forma de recuperar sus fotos si olvida su contraseña. Puede encontrar su clave de recuperación en Ajustes > Cuenta.\n\nPor favor, introduzca su clave de recuperación aquí para verificar que la ha guardado correctamente.", + "confirmYourRecoveryKey": "Confirme su clave de recuperación", + "addViewer": "Añadir espectador", + "addCollaborator": "Agregar colaborador", + "addANewEmail": "Agregar nuevo correo electrónico", + "orPickAnExistingOne": "O elige uno existente", + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": "Colaboradores pueden añadir fotos y videos al álbum compartido.", + "enterEmail": "Ingresar correo electrónico ", + "albumOwner": "Propietario", + "@albumOwner": { + "description": "Role of the album owner" + }, + "you": "Usted", + "collaborator": "Colaborador", + "addMore": "Añadir más", + "@addMore": { + "description": "Button text to add more collaborators/viewers" + }, + "viewer": "Espectador", + "remove": "Quitar", + "removeParticipant": "Quitar participante", + "@removeParticipant": { + "description": "menuSectionTitle for removing a participant" + }, + "manage": "Administrar", + "addedAs": "Agregado como", + "changePermissions": "¿Cambiar permisos?", + "yesConvertToViewer": "Sí, convertir a espectador", + "cannotAddMorePhotosAfterBecomingViewer": "{user} no podrá añadir más fotos a este álbum\n\nTodavía podrán eliminar las fotos ya añadidas por ellos", + "allowAddingPhotos": "Permitir añadir fotos", + "@allowAddingPhotos": { + "description": "Switch button to enable uploading photos to a public link" + }, + "allowAddPhotosDescription": "Permitir a las personas con el enlace añadir fotos al álbum compartido.", + "passwordLock": "Bloqueo por contraseña", + "disableDownloadWarningTitle": "Por favor tenga en cuenta", + "disableDownloadWarningBody": "Los espectadores todavía pueden tomar capturas de pantalla o guardar una copia de sus fotos usando herramientas externas", + "allowDownloads": "Permitir descargas", + "linkDeviceLimit": "Límite del dispositivo", + "linkExpiry": "Enlace vence", + "linkExpired": "Vencido", + "linkEnabled": "Habilitado", + "linkNeverExpires": "Nunca", + "expiredLinkInfo": "Este enlace ha caducado. Por favor, seleccione una nueva fecha de caducidad o deshabilite la fecha de caducidad.", + "setAPassword": "Establecer una contraseña", + "lockButtonLabel": "Bloquear", + "enterPassword": "Introduzca contraseña", + "removeLink": "Eliminar enlace", + "manageLink": "Administrar enlace", + "linkExpiresOn": "El enlace caducará en {expiryTime}", + "albumUpdated": "Álbum actualizado", + "maxDeviceLimitSpikeHandling": "Cuando se establece al máximo ({maxValue}), el límite del dispositivo se relajará para permitir picos temporales de un gran número de espectadores.", + "@maxDeviceLimitSpikeHandling": { + "placeholders": { + "maxValue": { + "type": "int", + "example": "100" + } + } + }, + "never": "Nunca", + "custom": "Personalizado", + "@custom": { + "description": "Label for setting custom value for link expiry" + }, + "after1Hour": "Después de 1 hora", + "after1Day": "Después de un día", + "after1Week": "Después de una semana", + "after1Month": "Después de un mes", + "after1Year": "Después de un año", + "manageParticipants": "Administrar", + "collabLinkSectionDescription": "Crea un enlace para que la gente pueda añadir y ver fotos en tu álbum compartido sin necesidad de la aplicación ente o una cuenta. Genial para recolectar fotos de eventos.", + "collectPhotos": "Recolectar fotos", + "collaborativeLink": "Enlace colaborativo", + "shareWithNonenteUsers": "Compartir con usuarios no ente", + "createPublicLink": "Crear enlace público", + "sendLink": "Enviar enlace", + "copyLink": "Copiar enlace", + "linkHasExpired": "El enlace ha caducado", + "publicLinkEnabled": "Enlace público habilitado", + "shareALink": "Compartir un enlace", + "sharedAlbumSectionDescription": "Crear álbumes compartidos y colaborativos con otros usuarios ente, incluyendo usuarios en planes gratuitos.", + "shareWithPeopleSectionTitle": "{numberOfPeople, plural, =0 {Compartir con personas específicas} =1 {Compartido con 1 persona} other {Compartido con {numberOfPeople} personas}}", + "@shareWithPeopleSectionTitle": { + "placeholders": { + "numberOfPeople": { + "type": "int", + "example": "2" + } + } + }, + "thisIsYourVerificationId": "Esta es tu ID de verificación", + "someoneSharingAlbumsWithYouShouldSeeTheSameId": "Alguien compartiendo álbumes con usted debería ver el mismo ID en su dispositivo.", + "howToViewShareeVerificationID": "Por favor, pídeles que mantengan presionada su dirección de correo electrónico en la pantalla de ajustes, y verifique que los IDs de ambos dispositivos coincidan.", + "thisIsPersonVerificationId": "Este es el ID de verificación de {email}", + "@thisIsPersonVerificationId": { + "placeholders": { + "email": { + "type": "String", + "example": "someone@ente.io" + } + } + }, + "verificationId": "ID de verificación", + "verifyEmailID": "Verificar {email}", + "emailNoEnteAccount": "{email} no tiene una cuenta ente.\n\nEnvíale una invitación para compartir fotos.", + "shareMyVerificationID": "Aquí está mi ID de verificación: {verificationID} para ente.io.", + "shareTextConfirmOthersVerificationID": "Hola, ¿puedes confirmar que esta es tu ID de verificación ente.io: {verificationID}?", + "somethingWentWrong": "Algo salió mal", + "sendInvite": "Enviar invitación", + "shareTextRecommendUsingEnte": "Descarga ente para que podamos compartir fácilmente fotos y videos en su calidad original\n\nhttps://ente.io/#download", + "done": "Hecho", + "applyCodeTitle": "Usar código", + "enterCodeDescription": "Introduce el código proporcionado por tu amigo para reclamar almacenamiento gratuito para ambos", + "apply": "Aplicar", + "failedToApplyCode": "Error al aplicar el código", + "enterReferralCode": "Ingresar código de referencia", + "codeAppliedPageTitle": "Código aplicado", + "storageInGB": "{storageAmountInGB} GB", + "claimed": "Reclamado", + "@claimed": { + "description": "Used to indicate storage claimed, like 10GB Claimed" + }, + "details": "Detalles", + "claimMore": "¡Reclama más!", + "theyAlsoGetXGb": "También obtienen {storageAmountInGB} GB", + "freeStorageOnReferralSuccess": "{storageAmountInGB} GB cada vez que alguien se registra en un plan de pago y aplica tu código", + "shareTextReferralCode": "ente código de referencia: {referralCode} \n\nAplicarlo en Ajustes → General → Referencias para obtener {referralStorageInGB} GB gratis después de registrarse en un plan de pago\n\nhttps://ente.io", + "claimFreeStorage": "Reclamar almacenamiento gratis", + "inviteYourFriends": "Invita a tus amigos", + "failedToFetchReferralDetails": "No se pueden obtener los detalles de la referencia. Por favor, inténtalo de nuevo más tarde.", + "referralStep1": "1. Dale este código a tus amigos", + "referralStep2": "2. Se inscriben a un plan pagado", + "referralStep3": "3. Ambos obtienen {storageInGB} GB* gratis", + "referralsAreCurrentlyPaused": "Las referencias están actualmente en pausa", + "youCanAtMaxDoubleYourStorage": "* Puedes al máximo duplicar tu almacenamiento", + "claimedStorageSoFar": "{isFamilyMember, select, true {Su familia ha reclamado {storageAmountInGb} Gb hasta el momento} false {Tú has reclamado {storageAmountInGb} Gb hasta el momento} other {¡Tú has reclamado {storageAmountInGb} Gb hasta el momento!}}", + "@claimedStorageSoFar": { + "placeholders": { + "isFamilyMember": { + "type": "String", + "example": "true" + }, + "storageAmountInGb": { + "type": "int", + "example": "10" + } + } + }, + "faq": "Preguntas Frecuentes", + "oopsSomethingWentWrong": "Ups, algo salió mal", + "peopleUsingYourCode": "Personas usando tu código", + "eligible": "elegible", + "total": "total", + "codeUsedByYou": "Código usado por ti", + "freeStorageClaimed": "Almacenamiento gratuito reclamado", + "freeStorageUsable": "Almacenamiento libre disponible", + "usableReferralStorageInfo": "El almacenamiento utilizable está limitado por su plan actual. El exceso de almacenamiento reclamado se volverá automáticamente utilizable cuando actualice su plan.", + "removeFromAlbumTitle": "¿Quitar del álbum?", + "removeFromAlbum": "Quitar del álbum", + "itemsWillBeRemovedFromAlbum": "Los elementos seleccionados serán removidos de este álbum", + "removeShareItemsWarning": "Algunos de los elementos que estás eliminando fueron añadidos por otras personas, y perderás el acceso a ellos", + "addingToFavorites": "Añadiendo a favoritos...", + "removingFromFavorites": "Quitando de favoritos...", + "sorryCouldNotAddToFavorites": "¡Lo sentimos, no se pudo añadir a favoritos!", + "sorryCouldNotRemoveFromFavorites": "¡Lo sentimos, no se pudo quitar de favoritos!", + "subscribeToEnableSharing": "Parece que su suscripción ha caducado. Por favor, suscríbase para habilitar el compartir.", + "subscribe": "Suscribirse", + "canOnlyRemoveFilesOwnedByYou": "Sólo puede eliminar archivos de tu propiedad", + "deleteSharedAlbum": "¿Borrar álbum compartido?", + "deleteAlbum": "Borrar álbum", + "deleteAlbumDialog": "¿También eliminar las fotos (y los vídeos) presentes en este álbum de todos los otros álbumes de los que forman parte?", + "deleteSharedAlbumDialogBody": "El álbum se eliminará para todos\n\nPerderás el acceso a las fotos compartidas en este álbum que son propiedad de otros", + "yesRemove": "Sí, quitar", + "creatingLink": "Creando enlace...", + "removeWithQuestionMark": "Quitar?", + "removeParticipantBody": "{userEmail} será eliminado de este álbum compartido\n\nCualquier foto añadida por ellos también será eliminada del álbum", + "keepPhotos": "Conservar las fotos", + "deletePhotos": "Borrar las fotos", + "inviteToEnte": "Invitar a ente", + "removePublicLink": "Quitar enlace público", + "disableLinkMessage": "Esto eliminará el enlace público para acceder a \"{albumName}\".", + "sharing": "Compartiendo...", + "youCannotShareWithYourself": "No puedes compartir contigo mismo", + "archive": "Archivo", + "createAlbumActionHint": "Mantenga presionado para seleccionar fotos y haga clic en + para crear un álbum", + "importing": "Importando....", + "failedToLoadAlbums": "Error al cargar álbumes", + "hidden": "Oculto", + "authToViewYourHiddenFiles": "Por favor, autentifiquese para ver sus archivos ocultos", + "trash": "Papelera", + "uncategorized": "Sin categorizar", + "videoSmallCase": "vídeo", + "photoSmallCase": "foto", + "singleFileDeleteHighlight": "Se borrará de todos los álbumes.", + "singleFileInBothLocalAndRemote": "Este {fileType} está tanto en ente como en tu dispositivo.", + "singleFileInRemoteOnly": "Este {fileType} se eliminará de ente.", + "singleFileDeleteFromDevice": "Este {fileType} se eliminará de tu dispositivo.", + "deleteFromEnte": "Eliminar de ente", + "yesDelete": "Sí, eliminar", + "movedToTrash": "Movido a la papelera", + "deleteFromDevice": "Eliminar del dispositivo", + "deleteFromBoth": "Eliminar de ambos", + "newAlbum": "Nuevo álbum", + "albums": "Álbunes", + "memoryCount": "{count, plural, zero{no recuerdos} one{{count} recuerdo} other{{count} recuerdos}}\n", + "@memoryCount": { + "description": "The text to display the number of memories", + "type": "text", + "placeholders": { + "count": { + "example": "1", + "type": "int" + } + } + }, + "selectedPhotos": "{count} seleccionados", + "@selectedPhotos": { + "description": "Display the number of selected photos", + "type": "text", + "placeholders": { + "count": { + "example": "5", + "type": "int" + } + } + }, + "selectedPhotosWithYours": "{count} seleccionados ({yourCount} tuyos)", + "@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": "Avanzado", + "@advancedSettings": { + "description": "The text to display in the advanced settings section" + }, + "photoGridSize": "Tamaño de la cuadrícula de fotos", + "manageDeviceStorage": "Administrar almacenamiento del dispositivo", + "selectFoldersForBackup": "Seleccionar carpetas para el respaldo", + "selectedFoldersWillBeEncryptedAndBackedUp": "Las carpetas seleccionadas se cifrarán y se respaldarán", + "unselectAll": "Desmarcar todos", + "selectAll": "Seleccionar todos", + "skip": "Omitir", + "updatingFolderSelection": "Actualizando la selección de carpeta...", + "itemCount": "{count, plural, one{{count} elemento} other{{count} elementos}}", + "yearsAgo": "{count, plural, one{{count} hace un año} other{{count} hace años}}", + "backupSettings": "Ajustes de copia de seguridad", + "backupOverMobileData": "Copia de seguridad usando datos móviles", + "backupVideos": "Respaldar vídeos", + "disableAutoLock": "Desactivar autobloqueo", + "deviceLockExplanation": "Deshabilita el bloqueo de pantalla del dispositivo cuando ente está en primer plano y hay una copia de seguridad en curso. Normalmente esto no es necesario, pero puede ayudar a que las grandes cargas y las importaciones iniciales de grandes bibliotecas se completen más rápido.", + "about": "Acerca de", + "weAreOpenSource": "¡Somos de código abierto!", + "privacy": "Privacidad", + "terms": "Términos", + "checkForUpdates": "Comprobar actualizaciónes", + "checking": "Comprobando...", + "youAreOnTheLatestVersion": "Estás usando la última versión", + "account": "Cuenta", + "manageSubscription": "Administrar tu suscripción", + "authToChangeYourEmail": "Por favor, autentifíquese para cambiar su correo electrónico", + "changePassword": "Cambiar contraseña", + "authToChangeYourPassword": "Por favor, autentifíquese para cambiar su contraseña", + "exportYourData": "Exportar tus datos", + "logout": "Cerrar sesión", + "authToInitiateAccountDeletion": "Por favor, autentifíquese para iniciar la eliminación de la cuenta", + "areYouSureYouWantToLogout": "¿Seguro que quiere cerrar la sesión?", + "yesLogout": "Sí, cerrar sesión", + "aNewVersionOfEnteIsAvailable": "Hay una nueva versión de ente disponible.", + "update": "Actualizar", + "installManually": "Instalar manualmente", + "criticalUpdateAvailable": "Actualización crítica disponible", + "updateAvailable": "Actualizacion disponible", + "downloading": "Descargando...", + "theDownloadCouldNotBeCompleted": "No se ha podido completar la descarga", + "retry": "Reintentar", + "backedUpFolders": "Carpetas respaldadas", + "backup": "Copia de respaldo", + "freeUpDeviceSpace": "Liberar espacio del dispositivo", + "allClear": "✨ Todo limpio", + "noDeviceThatCanBeDeleted": "No tienes archivos en este dispositivo que puedan ser borrados", + "removeDuplicates": "Eliminar duplicados", + "noDuplicates": "✨ Sin duplicados", + "youveNoDuplicateFilesThatCanBeCleared": "No tienes archivos duplicados que puedan ser borrados", + "success": "Éxito", + "rateUs": "Califícanos", + "remindToEmptyDeviceTrash": "También vacía \"Eliminado Recientemente\" de \"Configuración\" -> \"Almacenamiento\" para reclamar el espacio libre", + "youHaveSuccessfullyFreedUp": "¡Has liberado {storageSaved} con éxito!", + "@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": "También vacía tu \"Papelera\" para reclamar el espacio liberado", + "sparkleSuccess": "✨ Éxito", + "duplicateFileCountWithStorageSaved": "¡Has limpiado {count, plural, one{{count} archivo duplicado} other{{count} archivos duplicados}}, ahorrando ({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": "Planes familiares", + "referrals": "Referidos", + "advanced": "Avanzado", + "general": "General", + "security": "Seguridad", + "authToViewYourRecoveryKey": "Por favor, autentifíquese para ver su clave de recuperación", + "twofactor": "Dos factores", + "authToConfigureTwofactorAuthentication": "Por favor autentificar para configurar autenticación de dos factores", + "lockscreen": "Pantalla de bloqueo", + "authToChangeLockscreenSetting": "Por favor autentificar para cambiar la configuración de bloqueo de pantalla", + "lockScreenEnablePreSteps": "Para activar la pantalla de bloqueo, por favor configure el código de acceso del dispositivo o el bloqueo de pantalla en los ajustes de su sistema.", + "viewActiveSessions": "Ver sesiones activas", + "authToViewYourActiveSessions": "Por favor, autentifíquese para ver sus sesiones activas", + "disableTwofactor": "Deshabilitar dos factores", + "confirm2FADisable": "¿Estás seguro de que desea deshabilitar la autenticación de doble factor?", + "no": "No", + "yes": "Sí", + "social": "Social", + "rateUsOnStore": "Califícanos en {storeName}", + "blog": "Blog", + "merchandise": "Mercancías", + "twitter": "Twitter", + "mastodon": "Mastodon", + "matrix": "Matrix", + "discord": "Discord", + "reddit": "Reddit", + "yourStorageDetailsCouldNotBeFetched": "Tus datos de almacenamiento no se han podido obtener", + "reportABug": "Reportar un error", + "reportBug": "Reportar error", + "suggestFeatures": "Sugerir una característica", + "support": "Soporte", + "theme": "Tema", + "lightTheme": "Claro", + "darkTheme": "Oscuro", + "systemTheme": "Sistema", + "freeTrial": "Prueba gratuita", + "selectYourPlan": "Elegir tu suscripción", + "enteSubscriptionPitch": "ente conserva tus recuerdos, así que siempre están disponibles para ti, incluso si pierdes tu dispositivo.", + "enteSubscriptionShareWithFamily": "Tu familia también puede ser agregada a tu plan.", + "currentUsageIs": "El uso actual es ", + "@currentUsageIs": { + "description": "This text is followed by storage usaged", + "examples": { + "0": "Current usage is 1.2 GB" + }, + "type": "text" + }, + "faqs": "Preguntas frecuentes", + "renewsOn": "Se renueva el {endDate}", + "freeTrialValidTill": "Prueba gratuita válida hasta{endDate}", + "subWillBeCancelledOn": "Tu suscripción se cancelará el {endDate}", + "subscription": "Suscripción", + "paymentDetails": "Detalles de pago", + "manageFamily": "Administrar familia", + "contactToManageSubscription": "Por favor, contáctenos en support@ente.io para gestionar su suscripción a {provider}.", + "renewSubscription": "Renovar suscripción", + "cancelSubscription": "Cancelar suscripción", + "areYouSureYouWantToRenew": "¿Estás seguro de que quieres renovar?", + "yesRenew": "Sí, Renovar", + "areYouSureYouWantToCancel": "¿Estás seguro de que quieres cancelar?", + "yesCancel": "Sí, cancelar", + "failedToRenew": "Renovación fallida", + "failedToCancel": "Error al cancelar", + "twoMonthsFreeOnYearlyPlans": "2 meses gratis en planes anuales", + "monthly": "Mensual", + "@monthly": { + "description": "The text to display for monthly plans", + "type": "text" + }, + "yearly": "Anualmente", + "@yearly": { + "description": "The text to display for yearly plans", + "type": "text" + }, + "confirmPlanChange": "Confirmar los cambios en el plan", + "areYouSureYouWantToChangeYourPlan": "¿Estás seguro de que quieres cambiar tu plan?", + "youCannotDowngradeToThisPlan": "No puedes degradar a este plan", + "cancelOtherSubscription": "Por favor, cancele primero su suscripción 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, tan corto como quieras...", + "send": "Enviar", + "askCancelReason": "Tu suscripción ha sido cancelada. ¿Quieres compartir el motivo?", + "thankYouForSubscribing": "¡Gracias por suscribirte!", + "yourPurchaseWasSuccessful": "Tu compra ha sido exitosa", + "yourPlanWasSuccessfullyUpgraded": "Tu plan se ha actualizado correctamente", + "yourPlanWasSuccessfullyDowngraded": "Tu plan ha sido degradado con éxito", + "yourSubscriptionWasUpdatedSuccessfully": "Tu suscripción se ha actualizado con éxito", + "googlePlayId": "ID de Google Play", + "appleId": "ID de Apple", + "playstoreSubscription": "Suscripción en la PlayStore", + "appstoreSubscription": "Suscripción en la AppStore", + "subAlreadyLinkedErrMessage": "Su {id} ya está vinculado a otra cuenta ente.\nSi desea utilizar su {id} con esta cuenta, póngase en contacto con nuestro servicio de asistencia''", + "visitWebToManage": "Por favor visite web.ente.io para administrar su suscripción", + "couldNotUpdateSubscription": "No se pudo actualizar la suscripción", + "pleaseContactSupportAndWeWillBeHappyToHelp": "¡Por favor, contacta con support@ente.io y estaremos encantados de ayudar!", + "paymentFailed": "Pago fallido", + "paymentFailedTalkToProvider": "Por favor hable con el soporte de {providerName} si se le cobró", + "@paymentFailedTalkToProvider": { + "description": "The text to display when the payment failed", + "type": "text", + "placeholders": { + "providerName": { + "example": "AppStore|PlayStore", + "type": "String" + } + } + }, + "continueOnFreeTrial": "Continuar con el plan gratuito", + "areYouSureYouWantToExit": "¿Seguro que quieres salir?", + "thankYou": "Gracias", + "failedToVerifyPaymentStatus": "Error al verificar el estado de su pago", + "pleaseWaitForSometimeBeforeRetrying": "Por favor espere un momento antes de volver a intentarlo", + "paymentFailedWithReason": "Lamentablemente tu pago falló debido a {reason}", + "youAreOnAFamilyPlan": "¡Estás en un plan familiar!", + "contactFamilyAdmin": "Por favor contacta con {familyAdminEmail} para administrar tu suscripción", + "leaveFamily": "Abandonar plan familiar", + "areYouSureThatYouWantToLeaveTheFamily": "¿Está seguro de que desea abandonar el plan familiar?", + "leave": "Abandonar", + "rateTheApp": "Evalúa la aplicación", + "startBackup": "Iniciar copia de seguridad", + "noPhotosAreBeingBackedUpRightNow": "No se están respaldando fotos ahora mismo", + "preserveMore": "Preservar más", + "existingUser": "Usuario existente", + "privateBackups": "Copias de seguridad privadas", + "forYourMemories": "para tus recuerdos", + "endtoendEncryptedByDefault": "Encriptado de extremo a extremo por defecto", + "safelyStored": "Almacenado con seguridad", + "atAFalloutShelter": "en un refugio blindado", + "designedToOutlive": "Diseñado para sobrevivir", + "available": "Disponible", + "everywhere": "todas partes", + "androidIosWebDesktop": "Android, iOS, Web, Computadora", + "mobileWebDesktop": "Celular, Web, Computadora", + "newToEnte": "Nuevo en ente", + "pleaseLoginAgain": "Por favor, vuelva a iniciar sesión", + "devAccountChanged": "La cuenta de desarrollador que utilizamos para publicar ente en la App Store ha cambiado. Por eso, tendrás que iniciar sesión de nuevo.\n\nNuestras disculpas por las molestias, pero esto era inevitable.", + "yourSubscriptionHasExpired": "Tu suscripción ha caducado", + "storageLimitExceeded": "Límite de datos excedido", + "upgrade": "Mejorar", + "raiseTicket": "Generar ticket", + "@raiseTicket": { + "description": "Button text for raising a support tickets in case of unhandled errors during backup", + "type": "text" + }, + "backupFailed": "La copia de seguridad ha fallado", + "couldNotBackUpTryLater": "No pudimos hacer una copia de seguridad de tus datos.\nVolveremos a intentarlo más tarde.", + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": "ente puede cifrar y preservar archivos sólo si concede acceso a ellos", + "pleaseGrantPermissions": "Por favor, concede permiso", + "grantPermission": "Conceder permiso", + "privateSharing": "Compartir en privado", + "shareOnlyWithThePeopleYouWant": "Comparte sólo con la gente que quieres", + "usePublicLinksForPeopleNotOnEnte": "Usa enlaces públicos para personas que no están en ente", + "allowPeopleToAddPhotos": "Permitir que la gente añada fotos", + "shareAnAlbumNow": "Compartir un álbum ahora", + "collectEventPhotos": "Recopilar fotos del evento", + "sessionExpired": "La sesión ha expirado", + "loggingOut": "Cerrando sesión...", + "@onDevice": { + "description": "The text displayed above folders/albums stored on device", + "type": "text" + }, + "onDevice": "En el dispositivo", + "@onEnte": { + "description": "The text displayed above albums backed up to ente", + "type": "text" + }, + "onEnte": "En ente", + "name": "Nombre", + "newest": "Más reciente", + "lastUpdated": "Última actualización", + "deleteEmptyAlbums": "Eliminar álbunes vacíos", + "deleteEmptyAlbumsWithQuestionMark": "¿Eliminar álbunes vacíos?", + "deleteAlbumsDialogBody": "Esto eliminará todos los álbunes vacíos. Esto es útil cuando quieres reducir el desorden en tu lista de álbumes.", + "deleteProgress": "Borrando {currentlyDeleting} / {totalCount}", + "permanentlyDelete": "Borrar permanentemente", + "canOnlyCreateLinkForFilesOwnedByYou": "Sólo puedes crear un enlace para archivos de tu propiedad", + "publicLinkCreated": "Enlace público creado", + "youCanManageYourLinksInTheShareTab": "Puedes administrar tus enlaces en la pestaña compartir.", + "linkCopiedToClipboard": "Enlace copiado al portapapeles", + "restore": "Restaurar", + "@restore": { + "description": "Display text for an action which triggers a restore of item from trash", + "type": "text" + }, + "moveToAlbum": "Mover al álbum", + "unhide": "Dejar de ocultar", + "unarchive": "Desarchivar", + "favorite": "Favorito", + "removeFromFavorite": "Quitar de favoritos", + "shareLink": "Compartir enlace", + "addToEnte": "Añadir a ente", + "addToAlbum": "Añadir al álbum", + "delete": "Eliminar", + "hide": "Ocultar", + "itemSelectedCount": "{count} seleccionados", + "@itemSelectedCount": { + "description": "Text to indicate number of items selected", + "placeholders": { + "count": { + "example": "1|2|3", + "type": "int" + } + } + }, + "share": "Compartir", + "unhideToAlbum": "Hacer visible al álbum", + "restoreToAlbum": "Restaurar al álbum", + "moveItem": "{count, plural, one {Mover elemento} other {Mover elementos}}", + "@moveItem": { + "description": "Page title while moving one or more items to an album" + }, + "addItem": "{count, plural, one {Agregar elemento} other {Agregar elementos}}}", + "@addItem": { + "description": "Page title while adding one or more items to album" + }, + "createOrSelectAlbum": "Crear o seleccionar álbum", + "selectAlbum": "Seleccionar álbum", + "searchByAlbumNameHint": "Nombre del álbum", + "albumTitle": "Título del álbum", + "enterAlbumName": "Introduzca el nombre del álbum", + "restoringFiles": "Restaurando los archivos...", + "movingFilesToAlbum": "Moviendo archivos al álbum...", + "unhidingFilesToAlbum": "Desocultar archivos al álbum", + "canNotUploadToAlbumsOwnedByOthers": "No se puede subir a álbumes propiedad de otros", + "uploadingFilesToAlbum": "Subiendo archivos al álbum...", + "addedSuccessfullyTo": "Añadido exitosamente a {albumName}", + "movedSuccessfullyTo": "Movido exitosamente a {albumName}", + "thisAlbumAlreadyHDACollaborativeLink": "Este álbum ya tiene un enlace de colaboración", + "collaborativeLinkCreatedFor": "Enlace colaborativo creado para {albumName}", + "askYourLovedOnesToShare": "Pide a tus seres queridos que compartan", + "invite": "Invitar", + "shareYourFirstAlbum": "Comparte tu primer álbum", + "sharedWith": "Compartido con {emailIDs}", + "sharedWithMe": "Compartido conmigo", + "sharedByMe": "Compartido por mí", + "doubleYourStorage": "Duplica tu almacenamiento", + "referFriendsAnd2xYourPlan": "Refiere a amigos y 2x su plan", + "shareAlbumHint": "Abre un álbum y pulsa el botón compartir en la parte superior derecha para compartir.", + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": "Los artículos muestran el número de días restantes antes de ser borrados permanente", + "deleteAll": "Borrar Todo", + "renameAlbum": "Renombrar álbum", + "rename": "Renombrar", + "leaveSharedAlbum": "¿Dejar álbum compartido?", + "leaveAlbum": "Abandonar álbum", + "photosAddedByYouWillBeRemovedFromTheAlbum": "Las fotos añadidas por ti serán removidas del álbum", + "youveNoFilesInThisAlbumThatCanBeDeleted": "No tienes archivos en este álbum que puedan ser borrados", + "youDontHaveAnyArchivedItems": "No tienes nada de elementos archivados.", + "ignoredFolderUploadReason": "Algunos archivos de este álbum son ignorados de la carga porque previamente habían sido borrados de ente.", + "resetIgnoredFiles": "Restablecer archivos ignorados", + "deviceFilesAutoUploading": "Los archivos añadidos a este álbum de dispositivo se subirán automáticamente a ente.", + "turnOnBackupForAutoUpload": "Activar la copia de seguridad para subir automáticamente archivos añadidos a la carpeta de este dispositivo hacia ente.", + "noHiddenPhotosOrVideos": "No hay fotos ni vídeos ocultos", + "toHideAPhotoOrVideo": "Para ocultar una foto o video", + "openTheItem": "• Abrir el elemento", + "clickOnTheOverflowMenu": "• Haga clic en el menú desbordante", + "click": "• Click", + "nothingToSeeHere": "¡No hay nada que ver aquí! 👀", + "unarchiveAlbum": "Desarchivar álbum", + "archiveAlbum": "Archivar álbum", + "calculating": "Calculando...", + "pleaseWaitDeletingAlbum": "Por favor espere, borrando álbum", + "searchHintText": "Álbunes, meses, días, años, ...", + "searchByExamples": "• Nombres de álbumes (por ejemplo, \"Cámara\")\n• Tipos de archivos (por ejemplo, \"Videos\", \".gif\")\n• Años y meses (por ejemplo, \"2022\", \"Enero\")\n• Vacaciones (por ejemplo, \"Navidad\")\n• Descripciones fotográficas (por ejemplo, \"#diversión\")", + "youCanTrySearchingForADifferentQuery": "Puedes intentar buscar una consulta diferente.", + "noResultsFound": "No se han encontrado resultados", + "addedBy": "Añadido por {emailOrName}", + "loadingExifData": "Cargando datos EXIF...", + "viewAllExifData": "Ver todos los datos EXIF", + "noExifData": "No hay datos EXIF", + "thisImageHasNoExifData": "Esta imagen no tiene datos exif", + "exif": "EXIF", + "noResults": "Sin resultados", + "weDontSupportEditingPhotosAndAlbumsThatYouDont": "No admitimos la edición de fotos y álbunes que aún no son tuyos", + "failedToFetchOriginalForEdit": "No se pudo obtener el original para editar", + "close": "Cerrar", + "setAs": "Establecer como", + "fileSavedToGallery": "Archivo guardado en la galería", + "download": "Descargar", + "pressAndHoldToPlayVideo": "Presiona y mantén presionado para reproducir el video", + "downloadFailed": "Descarga fallida", + "deduplicateFiles": "Deduplicar archivos", + "deselectAll": "Deseleccionar todo", + "reviewDeduplicateItems": "Por favor, revise y elimine los elementos que cree que están duplicados.", + "clubByCaptureTime": "Agrupar por tiempo de captura", + "count": "Cuenta", + "totalSize": "Tamaño total", + "time": "Tiempo", + "longpressOnAnItemToViewInFullscreen": "Pulsación prolongada en un elemento para ver en pantalla completa", + "decryptingVideo": "Descifrando video...", + "authToViewYourMemories": "Por favor autentifique para ver sus memorias", + "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}}}", + "filesBackedUpInAlbum": "{count, plural, one {1 archivo} other {{formattedNumber} archivos}} en este álbum ha sido respaldado de forma segura", + "@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 archivo} other {{formattedNumber} archivos}} en este dispositivo han sido respaldados de forma segura", + "@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": "Aún puedes acceder {count, plural, one {si} other {entonces}} en ente mientras mantengas una suscripción activa", + "@freeUpAccessPostDelete": { + "placeholders": { + "count": { + "example": "1", + "type": "int" + } + } + }, + "freeUpAmount": "Liberar {sizeInMBorGB}", + "thisEmailIsAlreadyInUse": "Este correo electrónico ya está en uso", + "incorrectCode": "Código incorrecto", + "authenticationFailedPleaseTryAgain": "Error de autenticación, por favor inténtalo de nuevo", + "verificationFailedPleaseTryAgain": "Verificación fallida, por favor intenta nuevamente", + "authenticating": "Autenticando...", + "authenticationSuccessful": "¡Autenticación exitosa!", + "incorrectRecoveryKey": "Clave de recuperación incorrecta", + "theRecoveryKeyYouEnteredIsIncorrect": "La clave de recuperación introducida es incorrecta", + "twofactorAuthenticationSuccessfullyReset": "Autenticación de doble factor restablecida con éxito", + "pleaseVerifyTheCodeYouHaveEntered": "Por favor verifique el código que ha introducido", + "pleaseContactSupportIfTheProblemPersists": "Por favor contacte a soporte técnico si el problema persiste", + "twofactorAuthenticationHasBeenDisabled": "La autenticación de dos factores fue deshabilitada", + "sorryTheCodeYouveEnteredIsIncorrect": "Lo sentimos, el código que ha introducido es incorrecto", + "yourVerificationCodeHasExpired": "Tu código de verificación ha expirado", + "emailChangedTo": "Correo cambiado a {newEmail}", + "verifying": "Verificando...", + "disablingTwofactorAuthentication": "Deshabilitando la autenticación de dos factores...", + "allMemoriesPreserved": "Todos los recuerdos preservados", + "loadingGallery": "Cargando galería...", + "syncing": "Sincronizando...", + "encryptingBackup": "Cifrando copia de seguridad...", + "syncStopped": "Sincronización detenida", + "syncProgress": "{completed}/{total} recuerdos conservados", + "@syncProgress": { + "description": "Text to tell user how many memories have been preserved", + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "archiving": "Archivando...", + "unarchiving": "Desarchivando...", + "successfullyArchived": "Archivado correctamente", + "successfullyUnarchived": "Desarchivado correctamente", + "renameFile": "Renombrar archivo", + "enterFileName": "Introduzca el nombre del archivo", + "filesDeleted": "Archivos eliminados", + "selectedFilesAreNotOnEnte": "Los archivos seleccionados no están en ente", + "thisActionCannotBeUndone": "Esta acción no se puede deshacer", + "emptyTrash": "¿Vaciar la papelera?", + "permDeleteWarning": "Todos los elementos de la papelera serán eliminados permanentemente\n\nEsta acción no se puede deshacer", + "empty": "Vaciar", + "couldNotFreeUpSpace": "No se pudo liberar espacio", + "permanentlyDeleteFromDevice": "¿Eliminar permanentemente del dispositivo?", + "someOfTheFilesYouAreTryingToDeleteAre": "Algunos de los archivos que estás intentando eliminar sólo están disponibles en tu dispositivo y no se pueden recuperar si se eliminan", + "theyWillBeDeletedFromAllAlbums": "Se borrarán de todos los álbumes.", + "someItemsAreInBothEnteAndYourDevice": "Algunos elementos están tanto en ente como en tu dispositivo.", + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": "Los archivos seleccionados serán eliminados de todos los álbumes y movidos a la papelera.", + "theseItemsWillBeDeletedFromYourDevice": "Estos elementos se eliminarán de tu dispositivo.", + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "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.", + "error": "Error", + "tempErrorContactSupportIfPersists": "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.", + "cachedData": "Datos almacenados en caché", + "clearCaches": "Limpiar caché", + "remoteImages": "Imágenes remotas", + "remoteVideos": "Videos remotos", + "remoteThumbnails": "Miniaturas remotas", + "pendingSync": "Sincronización pendiente", + "localGallery": "Galería local", + "todaysLogs": "Registros de hoy", + "viewLogs": "Ver Registros", + "logsDialogBody": "Esto enviará registros para ayudarnos a depurar su problema. Tenga en cuenta que los nombres de los archivos se incluirán para ayudar a rastrear problemas con archivos específicos.", + "preparingLogs": "Preparando registros...", + "emailYourLogs": "Envíe sus registros por correo electrónico", + "pleaseSendTheLogsTo": "Por favor, envíe los registros a {toEmail}", + "copyEmailAddress": "Copiar dirección de correo electrónico", + "exportLogs": "Exportar registros", + "pleaseEmailUsAt": "Por favor, envíanos un correo electrónico a {toEmail}", + "dismiss": "Descartar", + "didYouKnow": "¿Sabías que?", + "loadingMessage": "Cargando tus fotos...", + "loadMessage1": "Puedes compartir tu suscripción con tu familia", + "loadMessage2": "Hasta ahora hemos conservado más de 10 millones de recuerdos", + "loadMessage3": "Guardamos 3 copias de sus datos, una en un refugio subterráneo", + "loadMessage4": "Todas nuestras aplicaciones son de código abierto", + "loadMessage5": "Nuestro código fuente y criptografía han sido auditados externamente", + "loadMessage6": "Puedes compartir enlaces a tus álbumes con tus seres queridos", + "loadMessage7": "Nuestras aplicaciones móviles se ejecutan en segundo plano para cifrar y hacer copias de seguridad de las nuevas fotos que hagas clic", + "loadMessage8": "web.ente.io tiene un cargador sofisticado", + "loadMessage9": "Utilizamos Xchacha20Poly1305 para cifrar tus datos de forma segura", + "language": "Idioma", + "selectLanguage": "Seleccionar idioma", + "locationName": "Nombre de la ubicación", + "addLocation": "Agregar ubicación", + "groupNearbyPhotos": "Agrupar fotos cercanas", + "location": "Ubicación", + "kiloMeterUnit": "km", + "addLocationButton": "Añadir", + "radius": "Radio", + "locationTagFeatureDescription": "Una etiqueta de ubicación agrupa todas las fotos que fueron tomadas dentro de un radio de una foto", + "galleryMemoryLimitInfo": "Hasta 1000 memorias mostradas en la galería", + "save": "Guardar", + "centerPoint": "Punto central", + "pickCenterPoint": "Elegir punto central", + "useSelectedPhoto": "Usar foto seleccionada", + "edit": "Editar", + "deleteLocation": "Borrar la ubicación", + "rotateLeft": "Girar a la izquierda", + "flip": "Voltear", + "rotateRight": "Girar a la derecha", + "saveCopy": "Guardar copia", + "light": "Claro", + "color": "Color", + "yesDiscardChanges": "Sí, descartar cambios", + "doYouWantToDiscardTheEditsYouHaveMade": "¿Quieres descartar las ediciones que has hecho?", + "saving": "Saving...", + "editsSaved": "Ediciones guardadas", + "oopsCouldNotSaveEdits": "Ups, no se pudieron guardar las ediciónes" +} \ No newline at end of file diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 881a937fd..e762cbe01 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -51,7 +51,6 @@ "checkInboxAndSpamFolder": "Veuillez consulter votre boîte de courriels (et les indésirables) pour compléter la vérification", "tapToEnterCode": "Appuyez pour entrer un code", "resendEmail": "Renvoyer le courriel", - "weveSentAMailTo": "Nous avons envoyé un email à", "setPasswordTitle": "Définir le mot de passe", "changePasswordTitle": "Modifier le mot de passe", "resetPasswordTitle": "Réinitialiser le mot de passe", @@ -96,6 +95,7 @@ "pleaseTryAgain": "Veuillez réessayer", "recreatePasswordTitle": "Recréer le mot de passe", "useRecoveryKey": "Utiliser la clé de récupération", + "recreatePasswordBody": "L'appareil actuel n'est pas assez puissant pour vérifier votre mot de passe, mais nous pouvons régénérer d'une manière qui fonctionne avec tous les appareils.\n\nVeuillez vous connecter à l'aide de votre clé de récupération et régénérer votre mot de passe (vous pouvez réutiliser le même si vous le souhaitez).", "verifyPassword": "Vérifier le mot de passe", "recoveryKey": "Clé de récupération", "recoveryKeyOnForgotPassword": "Si vous oubliez votre mot de passe, la seule façon de récupérer vos données sera grâce à cette clé.", @@ -182,6 +182,78 @@ "linkNeverExpires": "Jamais", "expiredLinkInfo": "Ce lien a expiré. Veuillez sélectionner un nouveau délai d'expiration ou désactiver l'expiration du lien.", "setAPassword": "Définir un mot de passe", + "lockButtonLabel": "Verrouiller", + "enterPassword": "Saisissez le mot de passe", + "removeLink": "Supprimer le lien", + "manageLink": "Gérer le lien", + "linkExpiresOn": "Le lien expirera le {expiryTime}", + "albumUpdated": "Album mis à jour", + "maxDeviceLimitSpikeHandling": "Lorsqu'elle est définie au maximum ({maxValue}), la limite de l'appareil sera assouplie pour permettre des pointes temporaires d'un grand nombre de téléspectateurs.", + "@maxDeviceLimitSpikeHandling": { + "placeholders": { + "maxValue": { + "type": "int", + "example": "100" + } + } + }, + "never": "Jamais", + "custom": "Personnaliser", + "@custom": { + "description": "Label for setting custom value for link expiry" + }, + "after1Hour": "Après 1 heure", + "after1Day": "Après 1 jour", + "after1Week": "Après 1 semaine", + "after1Month": "Après 1 mois", + "after1Year": "Après 1 an", + "manageParticipants": "Gérer", + "collabLinkSectionDescription": "Créez un lien pour permettre aux gens 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 collecter des photos d'événement.", + "collectPhotos": "Récupérer les photos", + "collaborativeLink": "Lien collaboratif", + "shareWithNonenteUsers": "Partager avec des utilisateurs non-ente", + "createPublicLink": "Créer un lien public", + "sendLink": "Envoyer le lien", + "copyLink": "Copier le lien", + "linkHasExpired": "Le lien a expiré", + "publicLinkEnabled": "Lien public activé", + "shareALink": "Partager le lien", + "sharedAlbumSectionDescription": "Créez des albums partagés et collaboratifs avec d'autres utilisateurs de ente, y compris des utilisateurs sur des plans gratuits.", + "shareWithPeopleSectionTitle": "{numberOfPeople, plural, =0 {Partagez avec des personnes spécifiques} =1 {Partagé avec 1 personne} other {Partagé avec {numberOfPeople} des gens}}", + "@shareWithPeopleSectionTitle": { + "placeholders": { + "numberOfPeople": { + "type": "int", + "example": "2" + } + } + }, + "thisIsYourVerificationId": "Ceci est votre ID de vérification", + "someoneSharingAlbumsWithYouShouldSeeTheSameId": "Quelqu'un qui partage des albums avec vous devrait voir le même ID sur son appareil.", + "howToViewShareeVerificationID": "Demandez-leur d'appuyer longuement sur leur adresse e-mail sur l'écran des paramètres et de vérifier que les identifiants des deux appareils correspondent.", + "thisIsPersonVerificationId": "Ceci est l'ID de vérification de {email}", + "@thisIsPersonVerificationId": { + "placeholders": { + "email": { + "type": "String", + "example": "someone@ente.io" + } + } + }, + "verificationId": "ID de vérification", + "verifyEmailID": "Vérifier {email}", + "emailNoEnteAccount": "{email} n'a pas de compte ente.\n\nEnvoyez une invitation pour partager des photos.", + "shareMyVerificationID": "Voici mon ID de vérification : {verificationID} pour ente.io.", + "shareTextConfirmOthersVerificationID": "Hé, pouvez-vous confirmer qu'il s'agit de votre ID de vérification ente.io : {verificationID}", + "somethingWentWrong": "Un problème est survenu", + "sendInvite": "Envoyer Invitations", + "shareTextRecommendUsingEnte": "Téléchargez ente pour que nous puissions facilement partager des photos et des vidéos de qualité originale\n\nhttps://ente.io/#download", + "done": "Terminé", + "applyCodeTitle": "Utiliser le code", + "enterCodeDescription": "Entrez le code fourni par votre ami pour réclamer de l'espace de stockage gratuit pour vous deux", + "apply": "Appliquer", + "failedToApplyCode": "Impossible d'appliquer le code", + "enterReferralCode": "Entrez le code de parrainage", "codeAppliedPageTitle": "Code appliqué", "storageInGB": "{storageAmountInGB} Go", "claimed": "Réclamée", @@ -195,5 +267,464 @@ "shareTextReferralCode": "code de parrainage ente : {referralCode} \n\nAppliquez 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", "claimFreeStorage": "Réclamer le stockage gratuit", "inviteYourFriends": "Invite tes ami(e)s", - "failedToFetchReferralDetails": "Impossible de récupérer les détails du parrainage. Veuillez réessayer plus tard." + "failedToFetchReferralDetails": "Impossible de récupérer les détails du parrainage. Veuillez réessayer plus tard.", + "referralStep1": "1. Donnez ce code à vos amis", + "referralStep2": "2. Ils s'inscrivent à une offre payante", + "referralStep3": "3. Vous recevez tous les deux {storageInGB} GB* gratuits", + "referralsAreCurrentlyPaused": "Les recommandations sont actuellement en pause", + "youCanAtMaxDoubleYourStorage": "* Vous pouvez au maximum doubler votre espace de stockage", + "claimedStorageSoFar": "{isFamilyMember, select, true {Votre famille a demandé {storageAmountInGb} Gb jusqu'à présent} false {Vous avez réclamé {storageAmountInGb} Gb jusqu'à présent} other {Vous avez réclamé {storageAmountInGb} Gbjusqu'à présent!}}", + "@claimedStorageSoFar": { + "placeholders": { + "isFamilyMember": { + "type": "String", + "example": "true" + }, + "storageAmountInGb": { + "type": "int", + "example": "10" + } + } + }, + "faq": "FAQ", + "oopsSomethingWentWrong": "Oups, une erreur est arrivée", + "peopleUsingYourCode": "Personnes utilisant votre code", + "eligible": "éligible", + "total": "total", + "codeUsedByYou": "Code utilisé par vous", + "freeStorageClaimed": "Stockage gratuit réclamé", + "freeStorageUsable": "Stockage gratuit utilisable", + "usableReferralStorageInfo": "Le stockage utilisable est limité par votre offre actuelle. Le stockage excédentaire deviendra automatiquement utilisable lorsque vous mettez à niveau votre offre.", + "removeFromAlbumTitle": "Retirer de l'album ?", + "removeFromAlbum": "Retirer de l'album", + "itemsWillBeRemovedFromAlbum": "Les éléments sélectionnés seront supprimés de cet album", + "removeShareItemsWarning": "Certains des objets que vous êtes en train de retirer ont été ajoutés par d'autres personnes, vous perdrez l'accès vers ces objets", + "addingToFavorites": "Ajout aux favoris...", + "removingFromFavorites": "Suppression des favoris…", + "sorryCouldNotAddToFavorites": "Désolé, impossible d'ajouter aux favoris !", + "sorryCouldNotRemoveFromFavorites": "Désolé, impossible de supprimer des favoris !", + "subscribeToEnableSharing": "Il semble que votre abonnement ait expiré. Veuillez vous abonner pour activer le partage.", + "subscribe": "S'abonner", + "canOnlyRemoveFilesOwnedByYou": "Vous ne pouvez supprimer que les fichiers que vous possédez", + "deleteSharedAlbum": "Supprimer l'album partagé ?", + "deleteAlbum": "Supprimer l'album", + "deleteAlbumDialog": "Supprimer aussi les photos (et vidéos) présentes dans cet album depuis tous les autres albums dont ils font partie ?", + "deleteSharedAlbumDialogBody": "L'album sera supprimé pour tout le monde\n\nVous perdrez l'accès aux photos partagées dans cet album qui est détenues par d'autres personnes", + "yesRemove": "Oui, supprimer", + "creatingLink": "Création du lien...", + "removeWithQuestionMark": "Enlever?", + "removeParticipantBody": "{userEmail} sera retiré de cet album partagé\n\nToutes les photos ajoutées par eux seront également retirées de l'album", + "keepPhotos": "Conserver les photos", + "deletePhotos": "Supprimer des photos", + "inviteToEnte": "Inviter à ente", + "removePublicLink": "Supprimer le lien public", + "disableLinkMessage": "Cela supprimera le lien public pour accéder à \"{albumName}\".", + "sharing": "Partage...", + "youCannotShareWithYourself": "Vous ne pouvez pas partager avec vous-même", + "archive": "Archiver", + "createAlbumActionHint": "Appuyez longuement pour sélectionner des photos et cliquez sur + pour créer un album", + "importing": "Importation en cours...", + "failedToLoadAlbums": "Impossible de charger les albums", + "hidden": "Masqué", + "authToViewYourHiddenFiles": "Veuillez vous authentifier pour voir vos fichiers cachés", + "trash": "Corbeille", + "uncategorized": "Aucune catégorie", + "videoSmallCase": "vidéo", + "photoSmallCase": "photo", + "singleFileDeleteHighlight": "Il sera supprimé de tous les albums.", + "singleFileInBothLocalAndRemote": "Ce {fileType} est à la fois dans ente et votre appareil.", + "singleFileInRemoteOnly": "Ce {fileType} sera supprimé de ente.", + "singleFileDeleteFromDevice": "Ce {fileType} sera supprimé de votre appareil.", + "deleteFromEnte": "Supprimer de ente", + "yesDelete": "Oui, supprimer", + "movedToTrash": "Déplacé dans la corbeille", + "deleteFromDevice": "Supprimer de l'appareil", + "deleteFromBoth": "Supprimer des deux", + "newAlbum": "Nouvel album", + "albums": "Albums", + "memoryCount": "{count, plural, one{{count} mémoire} other{{count} souvenirs}}", + "@memoryCount": { + "description": "The text to display the number of memories", + "type": "text", + "placeholders": { + "count": { + "example": "1", + "type": "int" + } + } + }, + "selectedPhotos": "{count} sélectionné", + "@selectedPhotos": { + "description": "Display the number of selected photos", + "type": "text", + "placeholders": { + "count": { + "example": "5", + "type": "int" + } + } + }, + "selectedPhotosWithYours": "{count} sélectionné ({yourCount} votre)", + "@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": "Avancé", + "@advancedSettings": { + "description": "The text to display in the advanced settings section" + }, + "photoGridSize": "Taille de la grille photo", + "manageDeviceStorage": "Gérer le stockage de l'appareil", + "selectFoldersForBackup": "Sélectionner les dossiers à sauvegarder", + "selectedFoldersWillBeEncryptedAndBackedUp": "Les dossiers sélectionnés seront cryptés et sauvegardés", + "unselectAll": "Désélectionner tout", + "selectAll": "Tout sélectionner", + "skip": "Ignorer", + "updatingFolderSelection": "Mise à jour de la sélection du dossier...", + "itemCount": "{count, plural, one{{count} objet} other{{count} objets}}", + "yearsAgo": "{count, plural, one{{count} il y a un an} other{{count} il y a des années}}", + "backupSettings": "Paramètres de la sauvegarde", + "backupOverMobileData": "Sauvegarde sur données mobiles", + "backupVideos": "Sauvegarde des vidéos", + "disableAutoLock": "Désactiver le verrouillage automatique", + "deviceLockExplanation": "Désactiver le verrouillage de l'écran de l'appareil lorsque ente est au premier plan et il y a une sauvegarde en cours. Ce n'est normalement pas nécessaire, mais peut aider les gros téléchargements et les premières importations de grandes bibliothèques plus rapidement.", + "about": "À propos", + "weAreOpenSource": "Nous sommes open source !", + "privacy": "Confidentialité", + "terms": "Conditions", + "checkForUpdates": "Vérifier les mises à jour", + "checking": "Vérification...", + "youAreOnTheLatestVersion": "Vous êtes sur la dernière version", + "account": "Compte", + "manageSubscription": "Gérer l'abonnement", + "authToChangeYourEmail": "Veuillez vous authentifier pour modifier votre adresse e-mail", + "changePassword": "Modifier le mot de passe", + "authToChangeYourPassword": "Veuillez vous authentifier pour modifier votre mot de passe", + "exportYourData": "Exportez vos données", + "logout": "Déconnexion", + "authToInitiateAccountDeletion": "Veuillez vous authentifier pour débuter la suppression du compte", + "areYouSureYouWantToLogout": "Voulez-vous vraiment vous déconnecter ?", + "yesLogout": "Oui, se déconnecter", + "aNewVersionOfEnteIsAvailable": "Une nouvelle version de Wire est disponible.", + "update": "Mise à jour", + "installManually": "Installation manuelle", + "criticalUpdateAvailable": "Mise à jour critique disponible", + "updateAvailable": "Une mise à jour est disponible", + "downloading": "Téléchargement en cours...", + "theDownloadCouldNotBeCompleted": "Le téléchargement n'a pas pu être terminé", + "retry": "Réessayer", + "backedUpFolders": "Dossiers sauvegardés", + "backup": "Sauvegarde", + "freeUpDeviceSpace": "Libérer de l'espace sur l'appareil", + "allClear": "✨ Tout est effacé", + "noDeviceThatCanBeDeleted": "Vous n'avez pas de fichiers sur cet appareil qui peuvent être supprimés", + "removeDuplicates": "Supprimer les doublons", + "noDuplicates": "✨ Aucun doublon", + "youveNoDuplicateFilesThatCanBeCleared": "Vous n'avez aucun fichier dé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é", + "youHaveSuccessfullyFreedUp": "Vous avez libéré {storageSaved} avec succès !", + "@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": "Vide aussi votre \"Corbeille\" pour réclamer l'espace libéré", + "sparkleSuccess": "✨ Succès", + "duplicateFileCountWithStorageSaved": "Vous avez nettoyé {count, plural, one{{count} fichier dupliqué} other{{count} fichiers dupliqués}}, sauvegarde ({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": "Forfaits famille", + "referrals": "Parrainages", + "advanced": "Avancé", + "general": "Général", + "security": "Sécurité", + "authToViewYourRecoveryKey": "Veuillez vous authentifier pour afficher votre clé de récupération", + "twofactor": "Double authentification", + "authToConfigureTwofactorAuthentication": "Veuillez vous authentifier pour configurer l'authentification à deux facteurs", + "lockscreen": "Ecran de vérouillage", + "authToChangeLockscreenSetting": "Veuillez vous authentifier pour modifier les paramètres de l'écran de verrouillage", + "lockScreenEnablePreSteps": "Pour activer l'écran de verrouillage, veuillez configurer le code d'accès de l'appareil ou le verrouillage de l'écran dans les paramètres de votre système.", + "viewActiveSessions": "Afficher les sessions actives", + "authToViewYourActiveSessions": "Veuillez vous authentifier pour voir vos sessions actives", + "disableTwofactor": "Désactiver la double-authentification", + "confirm2FADisable": "Voulez-vous vraiment désactiver l'authentification à deux facteurs ?", + "no": "Non", + "yes": "Oui", + "social": "Réseaux Sociaux", + "rateUsOnStore": "Notez-nous sur {storeName}", + "blog": "Blog", + "merchandise": "Marchandise", + "twitter": "Twitter", + "mastodon": "Mastodon", + "matrix": "Matrix", + "discord": "Discord", + "reddit": "Reddit", + "yourStorageDetailsCouldNotBeFetched": "Vos informations de stockage n'ont pas pu être récupérées", + "reportABug": "Signaler un bug", + "reportBug": "Signaler un bug", + "suggestFeatures": "Suggérer des fonctionnalités", + "support": "Support", + "theme": "Thème", + "lightTheme": "Clair", + "darkTheme": "Sombre", + "systemTheme": "Système", + "freeTrial": "Essai gratuit", + "selectYourPlan": "Sélectionner votre offre", + "enteSubscriptionPitch": "ente conserve vos souvenirs, donc ils sont toujours disponibles pour vous, même si vous perdez votre appareil.", + "enteSubscriptionShareWithFamily": "Vous pouvez également ajouter votre famille à votre forfait.", + "currentUsageIs": "L'utilisation actuelle est ", + "@currentUsageIs": { + "description": "This text is followed by storage usaged", + "examples": { + "0": "Current usage is 1.2 GB" + }, + "type": "text" + }, + "faqs": "FAQ", + "renewsOn": "Renouvellement le {endDate}", + "subWillBeCancelledOn": "Votre abonnement sera annulé le {endDate}", + "subscription": "Abonnement", + "paymentDetails": "Détails de paiement", + "manageFamily": "Gérer la famille", + "contactToManageSubscription": "Veuillez nous contacter à support@ente.io pour gérer votre abonnement {provider}.", + "renewSubscription": "Renouveler l’abonnement", + "cancelSubscription": "Annuler l'abonnement", + "areYouSureYouWantToRenew": "Êtes-vous sûr de vouloir renouveler ?", + "yesRenew": "Oui, renouveler", + "areYouSureYouWantToCancel": "Es-tu sûre de vouloir annuler?", + "yesCancel": "Oui, annuler", + "failedToRenew": "Échec du renouvellement", + "failedToCancel": "Échec de l'annulation", + "twoMonthsFreeOnYearlyPlans": "2 mois gratuits sur les forfaits annuels", + "monthly": "Mensuel", + "@monthly": { + "description": "The text to display for monthly plans", + "type": "text" + }, + "yearly": "Annuel", + "@yearly": { + "description": "The text to display for yearly plans", + "type": "text" + }, + "confirmPlanChange": "Confirmer le changement de l'offre", + "areYouSureYouWantToChangeYourPlan": "Êtes-vous certains de vouloir changer d'offre ?", + "youCannotDowngradeToThisPlan": "Vous ne pouvez pas rétrograder vers cette offre", + "cancelOtherSubscription": "Veuillez d'abord annuler votre abonnement existant 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": "Optionnel, aussi court que vous le souhaitez...", + "send": "Envoyer", + "askCancelReason": "Votre abonnement a été annulé. Souhaitez-vous partager la raison ?", + "thankYouForSubscribing": "Merci de vous être abonné !", + "yourPurchaseWasSuccessful": "Votre achat a été effectué avec succès", + "yourPlanWasSuccessfullyUpgraded": "Votre offre a été mise à jour avec succès", + "yourPlanWasSuccessfullyDowngraded": "Votre plan a été rétrogradé avec succès", + "yourSubscriptionWasUpdatedSuccessfully": "Votre abonnement a été mis à jour avec succès", + "googlePlayId": "Identifiant Google Play", + "appleId": "Apple ID", + "playstoreSubscription": "Abonnement au PlayStore", + "areYouSureYouWantToExit": "Êtes-vous sûr de vouloir quitter ?", + "thankYou": "Merci", + "pleaseWaitForSometimeBeforeRetrying": "Veuillez attendre quelque temps avant de réessayer", + "available": "Disponible", + "upgrade": "Améliorer", + "usePublicLinksForPeopleNotOnEnte": "Utiliser des liens publics pour les personnes qui ne sont pas sur ente", + "allowPeopleToAddPhotos": "Autoriser les personnes à ajouter des photos", + "shareAnAlbumNow": "Partagez un album maintenant", + "collectEventPhotos": "Collecter des photos de l'événement", + "sessionExpired": "Session expirée", + "loggingOut": "Deconnexion...", + "name": "Nom", + "newest": "Le plus récent", + "lastUpdated": "Dernière mise à jour", + "deleteEmptyAlbums": "Supprimer les albums vides", + "deleteEmptyAlbumsWithQuestionMark": "Supprimer les albums vides ?", + "deleteAlbumsDialogBody": "Ceci supprimera tous les albums vides. Ceci est utile lorsque vous voulez réduire l'encombrement dans votre liste d'albums.", + "deleteProgress": "Suppression de {currentlyDeleting} / {totalCount}", + "permanentlyDelete": "Supprimer définitivement", + "canOnlyCreateLinkForFilesOwnedByYou": "Ne peut créer de lien que pour les fichiers que vous possédez", + "publicLinkCreated": "Lien public créé", + "youCanManageYourLinksInTheShareTab": "Vous pouvez gérer vos liens dans l'onglet Partage.", + "linkCopiedToClipboard": "Lien copié dans le presse-papiers", + "restore": "Restaurer", + "@restore": { + "description": "Display text for an action which triggers a restore of item from trash", + "type": "text" + }, + "moveToAlbum": "Déplacer vers l'album", + "unhide": "Dévoiler", + "unarchive": "Désarchiver", + "favorite": "Favori", + "removeFromFavorite": "Retirer des favoris", + "shareLink": "Partager le lien", + "addToEnte": "Ajouter à ente", + "addToAlbum": "Ajouter à l'album", + "delete": "Supprimer", + "hide": "Masquer", + "itemSelectedCount": "{count} sélectionné", + "@itemSelectedCount": { + "description": "Text to indicate number of items selected", + "placeholders": { + "count": { + "example": "1|2|3", + "type": "int" + } + } + }, + "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éer ou sélectionner un album", + "selectAlbum": "Sélectionner album", + "searchByAlbumNameHint": "Nom de l'album", + "albumTitle": "Titre de l'album", + "enterAlbumName": "Saisir un nom d'album", + "restoringFiles": "Restauration des fichiers...", + "movingFilesToAlbum": "Déplacement des fichiers vers l'album...", + "unhidingFilesToAlbum": "Démasquage des fichiers vers l'album", + "canNotUploadToAlbumsOwnedByOthers": "Impossible de télécharger dans les albums appartenant à d'autres personnes", + "uploadingFilesToAlbum": "Envoi des fichiers vers l'album...", + "addedSuccessfullyTo": "Ajouté avec succès à {albumName}", + "movedSuccessfullyTo": "Déplacé avec succès vers {albumName}", + "thisAlbumAlreadyHDACollaborativeLink": "Cet album a déjà un lien collaboratif", + "collaborativeLinkCreatedFor": "Lien collaboratif créé pour {albumName}", + "askYourLovedOnesToShare": "Demandez à vos proches de partager", + "sharedWith": "Partagé avec {emailIDs}", + "sharedByMe": "Partagé par moi", + "doubleYourStorage": "Doubler votre espace de stockage", + "referFriendsAnd2xYourPlan": "Parrainez des amis et 2x votre abonnement", + "shareAlbumHint": "Ouvrez un album et appuyez sur le bouton de partage en haut à droite pour le partager.", + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": "Les éléments montrent le nombre de jours restants avant la suppression définitive", + "deleteAll": "Tout Supprimer", + "renameAlbum": "Renommer l'album", + "rename": "Renommer", + "leaveSharedAlbum": "Quitter l'album partagé?", + "leaveAlbum": "Quitter l'album", + "photosAddedByYouWillBeRemovedFromTheAlbum": "Les photos ajoutées par vous seront retirées de l'album", + "youveNoFilesInThisAlbumThatCanBeDeleted": "Vous n'avez pas de fichiers dans cet album qui peuvent être supprimés", + "ignoredFolderUploadReason": "Certains fichiers de cet album sont ignorés parce qu'ils avaient été précédemment supprimés de ente.", + "resetIgnoredFiles": "Réinitialiser les fichiers ignorés", + "exif": "EXIF", + "noResults": "Aucun résultat", + "weDontSupportEditingPhotosAndAlbumsThatYouDont": "Nous ne prenons pas en charge l'édition des photos et des albums que vous ne possédez pas encore", + "failedToFetchOriginalForEdit": "Impossible de récupérer l'original pour l'édition", + "close": "Fermer", + "setAs": "Définir comme", + "fileSavedToGallery": "Fichier enregistré dans la galerie", + "download": "Télécharger", + "pressAndHoldToPlayVideo": "Appuyez et maintenez enfoncé pour lire la vidéo", + "downloadFailed": "Échec du téléchargement", + "deduplicateFiles": "Déduplication de fichiers", + "deselectAll": "Tout déselectionner", + "reviewDeduplicateItems": "Veuillez vérifier et supprimer les éléments que vous croyez dupliqués.", + "clubByCaptureTime": "Durée du Club par capture", + "totalSize": "Taille totale", + "emailChangedTo": "L'e-mail a été changé en {newEmail}", + "verifying": "Validation en cours...", + "disablingTwofactorAuthentication": "Désactiver la double-authentification...", + "allMemoriesPreserved": "Tous les souvenirs conservés", + "loadingGallery": "Chargement de la galerie...", + "syncing": "En cours de synchronisation...", + "encryptingBackup": "Chiffrement de la sauvegarde...", + "syncStopped": "Synchronisation arrêtée ?", + "syncProgress": "{completed}/{total} souvenirs préservés", + "@syncProgress": { + "description": "Text to tell user how many memories have been preserved", + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "archiving": "Archivage en cours...", + "unarchiving": "Désarchivage en cours...", + "successfullyArchived": "Archivé avec succès", + "successfullyUnarchived": "Désarchivé avec succès", + "renameFile": "Renommer le fichier", + "enterFileName": "Entrez le nom du fichier", + "filesDeleted": "Fichiers supprimés", + "selectedFilesAreNotOnEnte": "Les fichiers sélectionnés ne sont pas sur ente", + "thisActionCannotBeUndone": "Cette action ne peut pas être annulée", + "emptyTrash": "Vider la corbeille ?", + "permDeleteWarning": "Tous les éléments de la corbeille seront définitivement supprimés\n\nCette action ne peut pas être annulée", + "empty": "Vide", + "couldNotFreeUpSpace": "Impossible de libérer de l'espace", + "permanentlyDeleteFromDevice": "Supprimer définitivement de l'appareil ?", + "someOfTheFilesYouAreTryingToDeleteAre": "Certains des fichiers que vous essayez de supprimer ne sont disponibles que sur votre appareil et ne peuvent pas être récupérés s'ils sont supprimés", + "theyWillBeDeletedFromAllAlbums": "Ils seront supprimés de tous les albums.", + "someItemsAreInBothEnteAndYourDevice": "Certains éléments sont à la fois dans ente et votre appareil.", + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": "Les éléments sélectionnés seront supprimés de tous les albums et déplacés dans la corbeille.", + "theseItemsWillBeDeletedFromYourDevice": "Ces éléments seront supprimés de votre appareil.", + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "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.", + "error": "Erreur", + "tempErrorContactSupportIfPersists": "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.", + "cachedData": "Données mises en cache", + "clearCaches": "Nettoyer le cache", + "remoteImages": "Images distantes", + "remoteVideos": "Vidéos distantes", + "remoteThumbnails": "Miniatures distantes", + "pendingSync": "Synchronisation en attente", + "localGallery": "Galerie locale", + "todaysLogs": "Journaux du jour", + "viewLogs": "Afficher les journaux", + "logsDialogBody": "Cela enverra des logs pour nous aider à déboguer votre problème. Veuillez noter que les noms de fichiers seront inclus pour aider à suivre les problèmes avec des fichiers spécifiques.", + "preparingLogs": "Préparation des journaux...", + "emailYourLogs": "Envoyez vos logs par e-mail", + "pleaseSendTheLogsTo": "Envoyez les logs à {toEmail}", + "copyEmailAddress": "Copier l’adresse e-mail", + "exportLogs": "Exporter les logs", + "pleaseEmailUsAt": "Merci de nous envoyer un e-mail à {toEmail}", + "dismiss": "Rejeter", + "didYouKnow": "Le savais-tu ?", + "loadingMessage": "Chargement de vos photos...", + "language": "Langue", + "edit": "Éditer" } \ No newline at end of file diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index 9e26dfeeb..87ef1e399 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -1 +1,6 @@ -{} \ No newline at end of file +{ + "enterYourEmailAddress": "Inserisci il tuo indirizzo email", + "accountWelcomeBack": "Bentornato!", + "email": "Email", + "cancel": "Annulla" +} \ No newline at end of file diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb index 23f945e2b..10931c097 100644 --- a/lib/l10n/intl_nl.arb +++ b/lib/l10n/intl_nl.arb @@ -1,5 +1,5 @@ { - "enterYourEmailAddress": "Voer je e-mailadres in", + "enterYourEmailAddress": "Voer uw e-mailadres in", "accountWelcomeBack": "Welkom terug!", "email": "E-mail", "cancel": "Annuleer", @@ -51,7 +51,17 @@ "checkInboxAndSpamFolder": "Controleer je inbox (en spam) om verificatie te voltooien", "tapToEnterCode": "Tik om code in te voeren", "resendEmail": "E-mail opnieuw versturen", - "weveSentAMailTo": "We hebben een e-mail gestuurd naar", + "weHaveSendEmailTo": "We hebben een e-mail gestuurd naar {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": "Wachtwoord instellen", "changePasswordTitle": "Wachtwoord wijzigen", "resetPasswordTitle": "Wachtwoord resetten", @@ -96,6 +106,7 @@ "pleaseTryAgain": "Probeer het nog eens", "recreatePasswordTitle": "Wachtwoord opnieuw instellen", "useRecoveryKey": "Herstelcode gebruiken", + "recreatePasswordBody": "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).", "verifyPassword": "Bevestig wachtwoord", "recoveryKey": "Herstelsleutel", "recoveryKeyOnForgotPassword": "Als je je wachtwoord vergeet, kun je alleen met deze sleutel je gegevens herstellen.", @@ -132,6 +143,7 @@ "verifyingRecoveryKey": "Herstelsleutel verifiëren...", "recoveryKeyVerified": "Herstel sleutel geverifieerd", "recoveryKeySuccessBody": "Super! Je herstelsleutel is geldig. Bedankt voor het verifiëren.\n\nVergeet niet om je herstelsleutel veilig te bewaren.", + "invalidRecoveryKey": "De herstelsleutel die je hebt ingevoerd is niet geldig. Zorg ervoor dat deze 24 woorden bevat en controleer de spelling van elk van deze woorden.\n\nAls je een oudere herstelcode hebt ingevoerd, zorg ervoor dat deze 64 tekens lang is, en controleer ze allemaal.", "invalidKey": "Ongeldige sleutel", "tryAgain": "Probeer opnieuw", "viewRecoveryKey": "Toon herstelsleutel", @@ -216,6 +228,87 @@ "copyLink": "Kopieer link", "linkHasExpired": "Link is vervallen", "publicLinkEnabled": "Publieke link ingeschakeld", + "shareALink": "Deel een link", + "sharedAlbumSectionDescription": "Maak gedeelde en collaboratieve albums met andere ente gebruikers, inclusief gebruikers met gratis abonnementen.", + "shareWithPeopleSectionTitle": "{numberOfPeople, plural, =0 {Deel met specifieke mensen} =1 {Gedeeld met 1 persoon} other {Gedeeld met {numberOfPeople} mensen}}", + "@shareWithPeopleSectionTitle": { + "placeholders": { + "numberOfPeople": { + "type": "int", + "example": "2" + } + } + }, + "thisIsYourVerificationId": "Dit is uw verificatie-ID", + "someoneSharingAlbumsWithYouShouldSeeTheSameId": "Iemand die albums met je deelt zou hetzelfde ID op hun apparaat moeten zien.", + "howToViewShareeVerificationID": "Vraag hen om hun e-mailadres lang in te drukken op het instellingenscherm en te controleren dat de ID's op beide apparaten overeenkomen.", + "thisIsPersonVerificationId": "Dit is de verificatie-ID van {email}", + "@thisIsPersonVerificationId": { + "placeholders": { + "email": { + "type": "String", + "example": "someone@ente.io" + } + } + }, + "verificationId": "Verificatie ID", + "verifyEmailID": "Verifieer {email}", + "emailNoEnteAccount": "{email} heeft geen ente account.\n\nStuur ze een uitnodiging om foto's te delen.", + "shareMyVerificationID": "Hier is mijn verificatie-ID: {verificationID} voor ente.io.", + "shareTextConfirmOthersVerificationID": "Hey, kunt u bevestigen dat dit uw ente.io verificatie-ID is: {verificationID}", + "somethingWentWrong": "Er ging iets mis", + "sendInvite": "Stuur een uitnodiging", + "shareTextRecommendUsingEnte": "Download ente zodat we gemakkelijk foto's en video's van originele kwaliteit kunnen delen\n\nhttps://ente.io/#download", + "done": "Voltooid", + "applyCodeTitle": "Code toepassen", + "enterCodeDescription": "Voer de code van de vriend in om gratis opslag voor jullie beiden te claimen", + "apply": "Toepassen", + "failedToApplyCode": "Code toepassen mislukt", + "enterReferralCode": "Voer verwijzingscode in", + "codeAppliedPageTitle": "Code toegepast", + "storageInGB": "{storageAmountInGB} GB", + "claimed": "Geclaimd", + "@claimed": { + "description": "Used to indicate storage claimed, like 10GB Claimed" + }, + "details": "Details", + "claimMore": "Claim meer!", + "theyAlsoGetXGb": "Zij krijgen ook {storageAmountInGB} GB", + "freeStorageOnReferralSuccess": "{storageAmountInGB} GB telkens als iemand zich aanmeldt voor een betaald abonnement en je code toepast", + "shareTextReferralCode": "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", + "claimFreeStorage": "Claim gratis opslag", + "inviteYourFriends": "Vrienden uitnodigen", + "failedToFetchReferralDetails": "Kan geen verwijzingsgegevens ophalen. Probeer het later nog eens.", + "referralStep1": "1. Geef deze code aan je vrienden", + "referralStep2": "2. Ze registreren voor een betaald plan", + "referralStep3": "Jullie krijgen allebei {storageInGB} GB* gratis", + "referralsAreCurrentlyPaused": "Verwijzingen zijn momenteel gepauzeerd", + "youCanAtMaxDoubleYourStorage": "* Je kunt maximaal je opslag verdubbelen", + "claimedStorageSoFar": "{isFamilyMember, select, true {Jouw familie heeft {storageAmountInGb} Gb geclaimd tot nu toe} false {Je hebt {storageAmountInGb} Gb geclaimd tot nu toe} other {Je hebt {storageAmountInGb} Gb geclaimd tot nu toe!}}", + "@claimedStorageSoFar": { + "placeholders": { + "isFamilyMember": { + "type": "String", + "example": "true" + }, + "storageAmountInGb": { + "type": "int", + "example": "10" + } + } + }, + "faq": "Veelgestelde vragen", + "oopsSomethingWentWrong": "Oeps, er is iets misgegaan", + "peopleUsingYourCode": "Mensen die jouw code gebruiken", + "eligible": "gerechtigd", + "total": "totaal", + "codeUsedByYou": "Code gebruikt door jou", + "freeStorageClaimed": "Gratis opslag geclaimd", + "freeStorageUsable": "Gratis opslag bruikbaar", + "usableReferralStorageInfo": "Bruikbare opslag is beperkt door je huidige abonnement. Buitensporige geclaimde opslag zal automatisch bruikbaar worden wanneer je je abonnement upgrade.", + "removeFromAlbumTitle": "Uit album verwijderen?", + "removeFromAlbum": "Verwijder uit album", + "itemsWillBeRemovedFromAlbum": "Geselecteerde items zullen worden verwijderd uit dit album", "removeShareItemsWarning": "Sommige van de items die je verwijdert zijn door andere mensen toegevoegd, en je verliest de toegang daartoe", "addingToFavorites": "Toevoegen aan favorieten...", "removingFromFavorites": "Verwijderen uit favorieten...", @@ -340,5 +433,496 @@ "updateAvailable": "Update beschikbaar", "downloading": "Downloaden...", "theDownloadCouldNotBeCompleted": "De download kon niet worden voltooid", - "retry": "Opnieuw" + "retry": "Opnieuw", + "backedUpFolders": "Gebackupte mappen", + "backup": "Back-up", + "freeUpDeviceSpace": "Apparaatruimte vrijmaken", + "allClear": "✨ Alles in orde", + "noDeviceThatCanBeDeleted": "Je hebt geen bestanden op dit apparaat die verwijderd kunnen worden", + "removeDuplicates": "Duplicaten verwijderen", + "noDuplicates": "✨ Geen duplicaten", + "youveNoDuplicateFilesThatCanBeCleared": "Je hebt geen dubbele bestanden die kunnen worden gewist", + "success": "Succes", + "rateUs": "Beoordeel ons", + "remindToEmptyDeviceTrash": "Leeg ook \"Onlangs verwijderd\" uit \"Instellingen\" -> \"Opslag\" om de vrij gekomen ruimte te benutten", + "youHaveSuccessfullyFreedUp": "Je hebt {storageSaved} succesvol vrijgemaakt!", + "@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": "Leeg ook uw \"Prullenbak\" om de vrij gekomen ruimte te benutten", + "sparkleSuccess": "✨ Succes", + "duplicateFileCountWithStorageSaved": "Je hebt {count, plural, one{{count} dubbel bestand} other{{count} dubbele bestanden}} opgeruimd, totaal ({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": "Familie abonnement", + "referrals": "Referenties", + "advanced": "Geavanceerd", + "general": "Algemeen", + "security": "Beveiliging", + "authToViewYourRecoveryKey": "Graag verifiëren om uw herstelsleutel te bekijken", + "twofactor": "Tweestapsverificatie", + "authToConfigureTwofactorAuthentication": "Graag verifiëren om tweestapsverificatie te configureren", + "lockscreen": "Vergrendelscherm", + "authToChangeLockscreenSetting": "Graag verifiëren om de vergrendelscherm instellingen te wijzigen", + "lockScreenEnablePreSteps": "Om vergrendelscherm in te schakelen, moet u een toegangscode of schermvergrendeling instellen in uw systeeminstellingen.", + "viewActiveSessions": "Actieve sessies bekijken", + "authToViewYourActiveSessions": "Graag verifiëren om uw actieve sessies te bekijken", + "disableTwofactor": "Tweestapsverificatie uitschakelen", + "confirm2FADisable": "Weet u zeker dat u tweestapsverificatie wilt uitschakelen?", + "no": "Nee", + "yes": "Ja", + "social": "Sociale media", + "rateUsOnStore": "Beoordeel ons op {storeName}", + "blog": "Blog", + "merchandise": "Merchandise", + "twitter": "Twitter", + "mastodon": "Mastodon", + "matrix": "Matrix", + "discord": "Discord", + "reddit": "Reddit", + "yourStorageDetailsCouldNotBeFetched": "Uw opslaggegevens konden niet worden opgehaald", + "reportABug": "Een fout melden", + "reportBug": "Fout melden", + "suggestFeatures": "Features voorstellen", + "support": "Ondersteuning", + "theme": "Thema", + "lightTheme": "Licht", + "darkTheme": "Donker", + "systemTheme": "Systeem", + "freeTrial": "Gratis proefversie", + "selectYourPlan": "Kies uw abonnement", + "enteSubscriptionPitch": "ente bewaart uw herinneringen, zodat ze altijd beschikbaar voor u zijn, zelfs als u uw apparaat verliest.", + "enteSubscriptionShareWithFamily": "Je familie kan ook aan je abonnement worden toegevoegd.", + "currentUsageIs": "Huidig gebruik is ", + "@currentUsageIs": { + "description": "This text is followed by storage usaged", + "examples": { + "0": "Current usage is 1.2 GB" + }, + "type": "text" + }, + "faqs": "Veelgestelde vragen", + "renewsOn": "Wordt verlengd op {endDate}", + "freeTrialValidTill": "Gratis proefversie geldig tot {endDate}", + "subWillBeCancelledOn": "Uw abonnement loopt af op {endDate}", + "subscription": "Abonnement", + "paymentDetails": "Betaalgegevens", + "manageFamily": "Familie abonnement beheren", + "contactToManageSubscription": "Neem contact met ons op via support@ente.io om uw {provider} abonnement te beheren.", + "renewSubscription": "Abonnement verlengen", + "cancelSubscription": "Abonnement opzeggen", + "areYouSureYouWantToRenew": "Weet u zeker dat u wilt verlengen?", + "yesRenew": "Ja, verlengen", + "areYouSureYouWantToCancel": "Weet u zeker dat u wilt opzeggen?", + "yesCancel": "Ja, opzeggen", + "failedToRenew": "Verlengen mislukt", + "failedToCancel": "Opzeggen mislukt", + "twoMonthsFreeOnYearlyPlans": "Krijg 2 maanden gratis op jaarlijkse abonnementen", + "monthly": "Maandelijks", + "@monthly": { + "description": "The text to display for monthly plans", + "type": "text" + }, + "yearly": "Jaarlijks", + "@yearly": { + "description": "The text to display for yearly plans", + "type": "text" + }, + "confirmPlanChange": "Bevestig verandering van abonnement", + "areYouSureYouWantToChangeYourPlan": "Weet u zeker dat u uw abonnement wilt wijzigen?", + "youCannotDowngradeToThisPlan": "U kunt niet downgraden naar dit abonnement", + "cancelOtherSubscription": "Annuleer eerst uw bestaande abonnement bij {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": "Optioneel, zo kort als je wilt...", + "send": "Verzenden", + "askCancelReason": "Uw abonnement is opgezegd. Wilt u de reden delen?", + "thankYouForSubscribing": "Dank je wel voor het abonneren!", + "yourPurchaseWasSuccessful": "Uw betaling is geslaagd", + "yourPlanWasSuccessfullyUpgraded": "Uw abonnement is succesvol opgewaardeerd", + "yourPlanWasSuccessfullyDowngraded": "Uw abonnement is succesvol gedegradeerd", + "yourSubscriptionWasUpdatedSuccessfully": "Uw abonnement is succesvol bijgewerkt", + "googlePlayId": "Google Play ID", + "appleId": "Apple ID", + "playstoreSubscription": "PlayStore abonnement", + "appstoreSubscription": "PlayStore abonnement", + "subAlreadyLinkedErrMessage": "Uw {id} is al aan een ander ente account gekoppeld.\nAls u uw {id} wilt gebruiken met dit account, neem dan contact op met onze klantenservice", + "visitWebToManage": "Bezoek alstublieft web.ente.io om uw abonnement te beheren", + "couldNotUpdateSubscription": "Kon abonnement niet wijzigen", + "pleaseContactSupportAndWeWillBeHappyToHelp": "Neem alstublieft contact op met support@ente.io en we helpen u graag!", + "paymentFailed": "Betaling mislukt", + "paymentFailedTalkToProvider": "Praat met {providerName} klantenservice als u in rekening bent gebracht", + "@paymentFailedTalkToProvider": { + "description": "The text to display when the payment failed", + "type": "text", + "placeholders": { + "providerName": { + "example": "AppStore|PlayStore", + "type": "String" + } + } + }, + "continueOnFreeTrial": "Doorgaan met gratis proefversie", + "areYouSureYouWantToExit": "Weet u zeker dat u wilt afsluiten?", + "thankYou": "Bedankt", + "failedToVerifyPaymentStatus": "Betalingsstatus verifiëren mislukt", + "pleaseWaitForSometimeBeforeRetrying": "Gelieve even te wachten voordat u opnieuw probeert", + "paymentFailedWithReason": "Helaas is uw betaling mislukt vanwege {reason}", + "youAreOnAFamilyPlan": "U bent onderdeel van een familie abonnement!", + "contactFamilyAdmin": "Neem contact op met {familyAdminEmail} om uw abonnement te beheren", + "leaveFamily": "Familie abonnement verlaten", + "areYouSureThatYouWantToLeaveTheFamily": "Weet u zeker dat u het familie abonnement wilt verlaten?", + "leave": "Verlaten", + "rateTheApp": "Beoordeel de app", + "startBackup": "Back-up starten", + "noPhotosAreBeingBackedUpRightNow": "Er worden momenteel geen foto's geback-upt", + "preserveMore": "Meer bewaren", + "existingUser": "Bestaande gebruiker", + "privateBackups": "Privé back-ups", + "forYourMemories": "voor uw herinneringen", + "endtoendEncryptedByDefault": "Standaard end-to-end versleuteld", + "safelyStored": "Veilig opgeslagen", + "atAFalloutShelter": "in een kernbunker", + "designedToOutlive": "Ontworpen om levenslang mee te gaan", + "available": "Beschikbaar", + "everywhere": "overal", + "androidIosWebDesktop": "Android, iOS, Web, Desktop", + "mobileWebDesktop": "Mobiel, Web, Desktop", + "newToEnte": "Nieuw bij ente", + "pleaseLoginAgain": "Log opnieuw in", + "devAccountChanged": "Het ontwikkelaarsaccount dat we gebruiken om te publiceren in de App Store is veranderd. Daarom moet je opnieuw inloggen.\n\nOnze excuses voor het ongemak, helaas was dit onvermijdelijk.", + "yourSubscriptionHasExpired": "Uw abonnement is verlopen", + "storageLimitExceeded": "Opslaglimiet overschreden", + "upgrade": "Upgraden", + "backupFailed": "Back-up mislukt", + "couldNotBackUpTryLater": "We konden uw gegevens niet back-uppen.\nWe zullen het later opnieuw proberen.", + "enteCanEncryptAndPreserveFilesOnlyIfYouGrant": "ente kan bestanden alleen versleutelen en bewaren als u toegang tot ze geeft", + "pleaseGrantPermissions": "Geef alstublieft toestemming", + "grantPermission": "Toestemming verlenen", + "privateSharing": "Privé delen", + "shareOnlyWithThePeopleYouWant": "Deel alleen met de mensen die u wilt", + "usePublicLinksForPeopleNotOnEnte": "Gebruik publieke links voor mensen die niet op ente zitten", + "allowPeopleToAddPhotos": "Mensen toestaan foto's toe te voegen", + "shareAnAlbumNow": "Deel nu een album", + "collectEventPhotos": "Foto's van gebeurtenissen verzamelen", + "sessionExpired": "Sessie verlopen", + "loggingOut": "Uitloggen...", + "@onDevice": { + "description": "The text displayed above folders/albums stored on device", + "type": "text" + }, + "onDevice": "Op het apparaat", + "@onEnte": { + "description": "The text displayed above albums backed up to ente", + "type": "text" + }, + "onEnte": "Op ente", + "name": "Naam", + "newest": "Nieuwste", + "lastUpdated": "Laatst gewijzigd", + "deleteEmptyAlbums": "Lege albums verwijderen", + "deleteEmptyAlbumsWithQuestionMark": "Lege albums verwijderen?", + "deleteAlbumsDialogBody": "Hiermee worden alle lege albums verwijderd. Dit is handig wanneer je rommel in je albumlijst wilt verminderen.", + "deleteProgress": "Verwijderen van {currentlyDeleting} / {totalCount}", + "permanentlyDelete": "Permanent verwijderen", + "canOnlyCreateLinkForFilesOwnedByYou": "Kan alleen een link maken voor bestanden die van u zijn", + "publicLinkCreated": "Publieke link aangemaakt", + "youCanManageYourLinksInTheShareTab": "U kunt uw links beheren in het tabblad 'Delen'.", + "linkCopiedToClipboard": "Link gekopieerd naar klembord", + "restore": "Herstellen", + "@restore": { + "description": "Display text for an action which triggers a restore of item from trash", + "type": "text" + }, + "moveToAlbum": "Verplaats naar album", + "unhide": "Zichtbaar maken", + "unarchive": "Uit archief halen", + "favorite": "Toevoegen aan favorieten", + "removeFromFavorite": "Verwijderen uit favorieten", + "shareLink": "Link delen", + "addToEnte": "Toevoegen aan ente", + "addToAlbum": "Toevoegen aan album", + "delete": "Verwijderen", + "hide": "Verbergen", + "itemSelectedCount": "{count} geselecteerd", + "@itemSelectedCount": { + "description": "Text to indicate number of items selected", + "placeholders": { + "count": { + "example": "1|2|3", + "type": "int" + } + } + }, + "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", + "albumTitle": "Albumtitel", + "enterAlbumName": "Voer albumnaam in", + "restoringFiles": "Bestanden herstellen...", + "movingFilesToAlbum": "Bestanden verplaatsen naar album...", + "unhidingFilesToAlbum": "Bestanden zichtbaar maken in album", + "canNotUploadToAlbumsOwnedByOthers": "Kan niet uploaden naar albums die van anderen zijn", + "uploadingFilesToAlbum": "Bestanden worden geüpload naar album...", + "addedSuccessfullyTo": "Succesvol toegevoegd aan {albumName}", + "movedSuccessfullyTo": "Succesvol verplaatst naar {albumName}", + "thisAlbumAlreadyHDACollaborativeLink": "Dit album heeft al een gezamenlijke link", + "collaborativeLinkCreatedFor": "Gezamenlijke link aangemaakt voor {albumName}", + "askYourLovedOnesToShare": "Vraag uw dierbaren om te delen", + "invite": "Uitnodigen", + "shareYourFirstAlbum": "Deel jouw eerste album", + "sharedWith": "Gedeeld met {emailIDs}", + "sharedWithMe": "Gedeeld met mij", + "sharedByMe": "Gedeeld door mij", + "doubleYourStorage": "Verdubbel uw opslagruimte", + "referFriendsAnd2xYourPlan": "Verwijs vrienden en 2x uw abonnement", + "shareAlbumHint": "Open een album en tik op de deelknop rechts bovenaan om te delen.", + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": "Bestanden tonen het aantal resterende dagen voordat ze permanent worden verwijderd", + "deleteAll": "Alles Verwijderen", + "renameAlbum": "Albumnaam wijzigen", + "rename": "Naam wijzigen", + "leaveSharedAlbum": "Gedeeld album verlaten?", + "leaveAlbum": "Album verlaten", + "photosAddedByYouWillBeRemovedFromTheAlbum": "Foto's toegevoegd door u zullen worden verwijderd uit het album", + "youveNoFilesInThisAlbumThatCanBeDeleted": "Je hebt geen bestanden in dit album die verwijderd kunnen worden", + "youDontHaveAnyArchivedItems": "U heeft geen gearchiveerde bestanden.", + "ignoredFolderUploadReason": "Sommige bestanden in dit album worden genegeerd voor de upload omdat ze eerder van ente zijn verwijderd.", + "resetIgnoredFiles": "Reset genegeerde bestanden", + "deviceFilesAutoUploading": "Bestanden toegevoegd aan dit album van dit apparaat zullen automatisch geüpload worden naar ente.", + "turnOnBackupForAutoUpload": "Schakel back-up in om bestanden die toegevoegd zijn aan deze map op dit apparaat automatisch te uploaden.", + "noHiddenPhotosOrVideos": "Geen verborgen foto's of video's", + "toHideAPhotoOrVideo": "Om een foto of video te verbergen", + "openTheItem": "• Open het item", + "clickOnTheOverflowMenu": "• Klik op het menu", + "click": "• Click", + "nothingToSeeHere": "Nog niets te zien hier! 👀", + "unarchiveAlbum": "Album uit archief halen", + "archiveAlbum": "Album archiveren", + "calculating": "Berekenen...", + "pleaseWaitDeletingAlbum": "Een ogenblik geduld, album wordt verwijderd", + "searchHintText": "Albums, maanden, dagen, jaren, ...", + "searchByExamples": "• Albumnamen (bijv. \"Camera\")\n• Types van bestanden (bijv. \"Video's\", \".gif\")\n• Jaren en maanden (bijv. \"2022\", \"januari\")\n• Feestdagen (bijv. \"Kerstmis\")\n• Fotobeschrijvingen (bijv. \"#fun\")", + "youCanTrySearchingForADifferentQuery": "U kunt proberen een andere zoekopdracht te vinden.", + "noResultsFound": "Geen resultaten gevonden", + "addedBy": "Toegevoegd door {emailOrName}", + "loadingExifData": "EXIF-gegevens laden...", + "viewAllExifData": "Bekijk alle EXIF gegevens", + "noExifData": "Geen EXIF gegevens", + "thisImageHasNoExifData": "Deze foto heeft geen exif gegevens", + "exif": "EXIF", + "noResults": "Geen resultaten", + "weDontSupportEditingPhotosAndAlbumsThatYouDont": "We ondersteunen het bewerken van foto's en albums waar je niet de eigenaar van bent nog niet", + "failedToFetchOriginalForEdit": "Fout bij ophalen origineel voor bewerking", + "close": "Sluiten", + "setAs": "Instellen als", + "fileSavedToGallery": "Bestand opgeslagen in galerij", + "download": "Downloaden", + "pressAndHoldToPlayVideo": "Ingedrukt houden om video af te spelen", + "downloadFailed": "Download mislukt", + "deduplicateFiles": "Dubbele bestanden verwijderen", + "deselectAll": "Alles deselecteren", + "reviewDeduplicateItems": "Controleer en verwijder de bestanden die u denkt dat dubbel zijn.", + "clubByCaptureTime": "Samenvoegen op tijd", + "count": "Aantal", + "totalSize": "Totale grootte", + "time": "Tijd", + "longpressOnAnItemToViewInFullscreen": "Houd een bestand lang ingedrukt om te bekijken op volledig scherm", + "decryptingVideo": "Video ontsleutelen...", + "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", + "placeholders": { + "count": { + "example": "1", + "type": "int" + }, + "formattedNumber": { + "content": "{formattedNumber}", + "example": "1,000", + "type": "String" + } + } + }, + "filesBackedUpFromDevice": "{count, plural, one {1 bestand} other {{formattedNumber} bestanden}} in dit album zijn veilig geback-upt", + "@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": "U heeft nog steeds toegang tot {count, plural, one {het} other {ze}} op ente zolang u een actief abonnement heeft", + "@freeUpAccessPostDelete": { + "placeholders": { + "count": { + "example": "1", + "type": "int" + } + } + }, + "freeUpAmount": "Maak {sizeInMBorGB} vrij", + "thisEmailIsAlreadyInUse": "Dit e-mailadres is al in gebruik", + "incorrectCode": "Onjuiste code", + "authenticationFailedPleaseTryAgain": "Verificatie mislukt, probeer het opnieuw", + "verificationFailedPleaseTryAgain": "Verificatie mislukt, probeer het opnieuw", + "authenticating": "Verifiëren...", + "authenticationSuccessful": "Verificatie geslaagd!", + "incorrectRecoveryKey": "Onjuiste herstelsleutel", + "theRecoveryKeyYouEnteredIsIncorrect": "De ingevoerde herstelsleutel is onjuist", + "twofactorAuthenticationSuccessfullyReset": "Tweestapsverificatie succesvol gereset", + "pleaseVerifyTheCodeYouHaveEntered": "Controleer de code die u hebt ingevoerd", + "pleaseContactSupportIfTheProblemPersists": "Neem contact op met klantenservice als het probleem aanhoudt", + "twofactorAuthenticationHasBeenDisabled": "Tweestapsverificatie is uitgeschakeld", + "sorryTheCodeYouveEnteredIsIncorrect": "Sorry, de ingevoerde code is onjuist", + "yourVerificationCodeHasExpired": "Uw verificatiecode is verlopen", + "emailChangedTo": "E-mailadres gewijzigd naar {newEmail}", + "verifying": "Verifiëren...", + "disablingTwofactorAuthentication": "Tweestapsverificatie uitschakelen...", + "allMemoriesPreserved": "Alle herinneringen bewaard", + "loadingGallery": "Laden van gallerij...", + "syncing": "Synchroniseren...", + "encryptingBackup": "Back-up versleutelen...", + "syncStopped": "Synchronisatie gestopt", + "syncProgress": "{completed}/{total} herinneringen bewaard", + "@syncProgress": { + "description": "Text to tell user how many memories have been preserved", + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "archiving": "Archiveren...", + "unarchiving": "Uit het archief halen...", + "successfullyArchived": "Succesvol gearchiveerd", + "successfullyUnarchived": "Succesvol uit archief gehaald", + "renameFile": "Bestandsnaam wijzigen", + "enterFileName": "Geef bestandsnaam op", + "filesDeleted": "Bestanden verwijderd", + "selectedFilesAreNotOnEnte": "Geselecteerde bestanden staan niet op ente", + "thisActionCannotBeUndone": "Deze actie kan niet ongedaan gemaakt worden", + "emptyTrash": "Prullenbak leegmaken?", + "permDeleteWarning": "Alle bestanden in de prullenbak zullen permanent worden verwijderd\n\nDeze actie kan niet ongedaan worden gemaakt", + "empty": "Leeg", + "couldNotFreeUpSpace": "Kon geen ruimte vrijmaken", + "permanentlyDeleteFromDevice": "Permanent verwijderen van apparaat?", + "someOfTheFilesYouAreTryingToDeleteAre": "Sommige bestanden die u probeert te verwijderen zijn alleen beschikbaar op uw apparaat en kunnen niet hersteld worden als deze verwijderd worden", + "theyWillBeDeletedFromAllAlbums": "Ze zullen uit alle albums worden verwijderd.", + "someItemsAreInBothEnteAndYourDevice": "Sommige bestanden bevinden zich in zowel ente als op uw apparaat.", + "selectedItemsWillBeDeletedFromAllAlbumsAndMoved": "Geselecteerde bestanden worden verwijderd uit alle albums en verplaatst naar de prullenbak.", + "theseItemsWillBeDeletedFromYourDevice": "Deze bestanden zullen worden verwijderd van uw apparaat.", + "itLooksLikeSomethingWentWrongPleaseRetryAfterSome": "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.", + "error": "Foutmelding", + "tempErrorContactSupportIfPersists": "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.", + "cachedData": "Cachegegevens", + "clearCaches": "Cache legen", + "remoteImages": "Externe afbeeldingen", + "remoteVideos": "Externe video's", + "remoteThumbnails": "Externe thumbnails", + "pendingSync": "Synchronisatie in behandeling", + "localGallery": "Lokale galerij", + "todaysLogs": "Logboeken van vandaag", + "viewLogs": "Logboeken bekijken", + "logsDialogBody": "Dit zal logboeken verzenden om ons te helpen uw probleem op te lossen. Houd er rekening mee dat bestandsnamen zullen worden meegenomen om problemen met specifieke bestanden bij te houden.", + "preparingLogs": "Logboeken voorbereiden...", + "emailYourLogs": "E-mail uw logboeken", + "pleaseSendTheLogsTo": "Verstuur de logboeken alstublieft naar {toEmail}", + "copyEmailAddress": "E-mailadres kopiëren", + "exportLogs": "Logboek exporteren", + "pleaseEmailUsAt": "Stuur ons een e-mail op {toEmail}", + "dismiss": "Afwijzen", + "didYouKnow": "Wist u dat?", + "loadingMessage": "Uw foto's laden...", + "loadMessage1": "U kunt uw abonnement met uw familie delen", + "loadMessage2": "We hebben tot nu toe meer dan tien miljoen herinneringen bewaard", + "loadMessage3": "We bewaren 3 kopieën van uw bestanden, één in een ondergrondse kernbunker", + "loadMessage4": "Al onze apps zijn open source", + "loadMessage5": "Onze broncode en cryptografie zijn extern gecontroleerd en geverifieerd", + "loadMessage6": "Je kunt links naar je albums delen met je dierbaren", + "loadMessage7": "Onze mobiele apps draaien op de achtergrond om alle nieuwe foto's die je maakt te versleutelen en te back-uppen", + "loadMessage8": "web.ente.io heeft een vlotte uploader", + "loadMessage9": "We gebruiken Xchacha20Poly1305 om uw gegevens veilig te versleutelen", + "language": "Taal", + "selectLanguage": "Taal selecteren", + "locationName": "Locatie naam", + "addLocation": "Locatie toevoegen", + "groupNearbyPhotos": "Groep foto's in de buurt", + "location": "Locatie", + "kiloMeterUnit": "km", + "addLocationButton": "Toevoegen", + "radius": "Straal", + "locationTagFeatureDescription": "Een locatie tag groept alle foto's die binnen een bepaalde straal van een foto zijn genomen", + "galleryMemoryLimitInfo": "Tot 1000 herinneringen getoond in de galerij", + "save": "Opslaan", + "centerPoint": "Middelpunt", + "pickCenterPoint": "Kies middelpunt", + "useSelectedPhoto": "Gebruik geselecteerde foto", + "edit": "Bewerken", + "deleteLocation": "Verwijder locatie", + "rotateLeft": "Roteer links", + "flip": "Omdraaien", + "rotateRight": "Rechtsom draaien", + "saveCopy": "Kopie opslaan", + "light": "Licht", + "color": "Kleur", + "yesDiscardChanges": "Ja, wijzigingen negeren", + "doYouWantToDiscardTheEditsYouHaveMade": "Wilt u de bewerkingen die u hebt gemaakt annuleren?", + "saving": "Opslaan...", + "editsSaved": "Bewerkingen opgeslagen", + "oopsCouldNotSaveEdits": "Oeps, kon bewerkingen niet opslaan" } \ No newline at end of file diff --git a/lib/l10n/intl_no.arb b/lib/l10n/intl_no.arb new file mode 100644 index 000000000..d66d7e382 --- /dev/null +++ b/lib/l10n/intl_no.arb @@ -0,0 +1,16 @@ +{ + "enterYourEmailAddress": "Skriv inn e-postadressen din", + "accountWelcomeBack": "Velkommen tilbake!", + "email": "E-post", + "cancel": "Avbryt", + "verify": "Bekreft", + "invalidEmailAddress": "Ugyldig e-postadresse", + "enterValidEmail": "Vennligst skriv inn en gyldig e-postadresse.", + "deleteAccount": "Slett konto", + "askDeleteReason": "Hva er hovedårsaken til at du sletter kontoen din?", + "deleteAccountFeedbackPrompt": "Vi er lei oss for at du forlater oss. Gi oss gjerne en tilbakemelding så vi kan forbedre oss.", + "feedback": "Tilbakemelding", + "kindlyHelpUsWithThisInformation": "Vær vennlig og hjelp oss med denne informasjonen", + "confirmDeletePrompt": "Ja, jeg ønsker å slette denne kontoen og all dataen dens permanent.", + "confirmAccountDeletion": "Bekreft sletting av konto" +} \ No newline at end of file diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index 9e26dfeeb..777ba1380 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -1 +1,104 @@ -{} \ No newline at end of file +{ + "enterYourEmailAddress": "Podaj swój adres e-mail", + "accountWelcomeBack": "Witaj ponownie!", + "email": "Adres e-mail", + "cancel": "Anuluj", + "verify": "Weryfikuj", + "invalidEmailAddress": "Nieprawidłowy adres e-mail", + "enterValidEmail": "Podaj poprawny adres e-mail.", + "deleteAccount": "Usuń konto", + "askDeleteReason": "Jaka jest przyczyna usunięcia konta?", + "deleteAccountFeedbackPrompt": "Przykro nam, że odchodzisz. Wyjaśnij nam, dlaczego nas opuszczasz, aby pomóc ulepszać nasze usługi.", + "feedback": "Informacja zwrotna", + "kindlyHelpUsWithThisInformation": "Pomóż nam z tą informacją", + "confirmDeletePrompt": "Tak, chcę trwale usunąć konto i wszystkie dane z nim powiązane.", + "confirmAccountDeletion": "Potwierdź usunięcie konta", + "deleteConfirmDialogBody": "Zamierzasz trwale usunąć swoje konto i wszystkie jego dane.\nTa akcja jest nieodwracalna.", + "deleteAccountPermanentlyButton": "Usuń konto na stałe", + "yourAccountHasBeenDeleted": "Twoje konto zostało usunięte", + "selectReason": "Wybierz powód", + "deleteReason1": "Brakuje kluczowej funkcji, której potrzebuję", + "deleteReason2": "Aplikacja lub określona funkcja nie \nzachowuje się tak, jak sądzę, że powinna", + "deleteReason3": "Znalazłem inną, lepszą usługę", + "deleteReason4": "Inna, niewymieniona wyżej przyczyna", + "sendEmail": "Wyślij e-mail", + "deleteRequestSLAText": "Twoje żądanie zostanie przetworzone w ciągu 72 godzin.", + "deleteEmailRequest": "Wyślij wiadomość e-mail na account-deletion@ente.io z zarejestrowanego adresu e-mail.", + "ok": "Ok", + "createAccount": "Stwórz konto", + "createNewAccount": "Stwórz nowe konto", + "password": "Hasło", + "confirmPassword": "Powtórz hasło", + "activeSessions": "Aktywne sesje", + "oops": "Ups", + "somethingWentWrongPleaseTryAgain": "Coś poszło nie tak, spróbuj ponownie", + "thisWillLogYouOutOfThisDevice": "To wyloguje Cię z tego urządzenia!", + "thisWillLogYouOutOfTheFollowingDevice": "To wyloguje Cię z tego urządzenia:", + "terminateSession": "Zakończyć sesję?", + "terminate": "Zakończ", + "thisDevice": "To urządzenie", + "recoverButton": "Odzyskaj", + "recoverySuccessful": "Odzyskano pomyślnie!", + "decrypting": "Odszyfrowywanie...", + "incorrectRecoveryKeyTitle": "Nieprawidłowy klucz odzyskiwania", + "incorrectRecoveryKeyBody": "Kod jest nieprawidłowy", + "forgotPassword": "Nie pamiętam hasła", + "enterYourRecoveryKey": "Wprowadź swój klucz odzyskiwania", + "noRecoveryKey": "Brak klucza odzyskiwania?", + "sorry": "Przepraszamy", + "noRecoveryKeyNoDecryption": "Ze względu na charakter naszego protokołu szyfrowania end-to-end, dane nie mogą być odszyfrowane bez hasła lub klucza odzyskiwania", + "verifyEmail": "Zweryfikuj adres e-mail", + "checkInboxAndSpamFolder": "Sprawdź swoją skrzynkę odbiorczą (i spam), aby zakończyć weryfikację", + "resendEmail": "Wyślij e-mail ponownie", + "setPasswordTitle": "Ustaw hasło", + "changePasswordTitle": "Zmień hasło", + "resetPasswordTitle": "Zresetuj hasło", + "passwordWarning": "Nie przechowujemy tego hasła, więc jeśli go zapomnisz, nie będziemy w stanie odszyfrować Twoich danych", + "enterPasswordToEncrypt": "Wprowadź hasło, którego możemy użyć do zaszyfrowania Twoich danych", + "enterNewPasswordToEncrypt": "Wprowadź nowe hasło, którego możemy użyć do zaszyfrowania Twoich danych", + "weakStrength": "Słabe", + "strongStrength": "Silne", + "moderateStrength": "Umiarkowana", + "passwordStrength": "Siła hasła: {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": "Hasło zostało pomyślnie zmienione", + "generatingEncryptionKeys": "Generowanie kluczy szyfrujących...", + "pleaseWait": "Proszę czekać...", + "continueLabel": "Kontynuuj", + "howItWorks": "Jak to działa", + "encryption": "Szyfrowanie", + "privacyPolicyTitle": "Polityka prywatności", + "termsOfServicesTitle": "Regulamin", + "signUpTerms": "Akceptuję warunki korzystania z usługi i politykę prywatności", + "logInLabel": "Zaloguj się", + "changeEmail": "Zmień adres e-mail", + "enterYourPassword": "Wprowadź hasło", + "welcomeBack": "Witaj ponownie!", + "contactSupport": "Skontaktuj się z pomocą techniczną", + "incorrectPasswordTitle": "Nieprawidłowe hasło", + "pleaseTryAgain": "Spróbuj ponownie", + "useRecoveryKey": "Użyj kodu odzyskiwania", + "verifyPassword": "Zweryfikuj hasło", + "recoveryKey": "Klucz odzyskiwania", + "recoveryKeyOnForgotPassword": "Jeśli zapomnisz hasła, jedynym sposobem odzyskania danych jest ten klucz.", + "doThisLater": "Spróbuj później", + "saveKey": "Zapisz klucz", + "recoveryKeyCopiedToClipboard": "Klucz odzyskiwania został skopiowany do schowka", + "recoverAccount": "Odzyskaj konto", + "twofactorSetup": "Uwierzytelnianie dwuskładnikowe", + "enterCode": "Wprowadź kod", + "codeCopiedToClipboard": "Kod został skopiowany do schowka", + "confirm": "Potwierdź", + "twofactorAuthenticationPageTitle": "Uwierzytelnianie dwuskładnikowe", + "tryAgain": "Spróbuj ponownie" +} \ No newline at end of file diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index 9e26dfeeb..5b104dbe8 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -1 +1,270 @@ -{} \ No newline at end of file +{ + "enterYourEmailAddress": "Insira o seu endereço de e-mail", + "accountWelcomeBack": "Bem-vindo de volta!", + "email": "E-mail", + "cancel": "Cancelar", + "verify": "Verificar", + "invalidEmailAddress": "Endereço de e-mail invalido", + "enterValidEmail": "Por, favor insira um endereço de e-mail válido.", + "deleteAccount": "Deletar conta", + "askDeleteReason": "Qual é o principal motivo para você excluir sua conta?", + "deleteAccountFeedbackPrompt": "Lamentamos ver você partir. Por favor, compartilhe seus comentários para nos ajudar a melhorar.", + "feedback": "Opinião", + "kindlyHelpUsWithThisInformation": "Ajude-nos com esta informação", + "confirmDeletePrompt": "Sim, desejo excluir permanentemente esta conta e todos os seus dados.", + "confirmAccountDeletion": "Confirmar exclusão da conta", + "deleteConfirmDialogBody": "Você está prestes a excluir permanentemente sua conta e todos os seus dados.\nEsta ação é irreversível.", + "deleteAccountPermanentlyButton": "Excluir conta permanentemente", + "yourAccountHasBeenDeleted": "Sua conta foi deletada", + "selectReason": "Selecione o motivo", + "deleteReason1": "Está faltando um recurso-chave que eu preciso", + "deleteReason2": "O aplicativo ou um determinado recurso não\nestá funcionando como eu acredito que deveria", + "deleteReason3": "Encontrei outro serviço que gosto mais", + "deleteReason4": "Meu motivo não está listado", + "sendEmail": "Enviar e-mail", + "deleteRequestSLAText": "Sua solicitação será processada em até 72 horas.", + "deleteEmailRequest": "Por favor, envie um e-mail para account-deletion@ente.io a partir do seu endereço de e-mail registrado.", + "ok": "Ok", + "createAccount": "Criar uma conta", + "createNewAccount": "Criar nova conta", + "password": "Senha", + "confirmPassword": "Confirme sua senha", + "activeSessions": "Sessões ativas", + "oops": "Ops", + "somethingWentWrongPleaseTryAgain": "Algo deu errado. Por favor, tente outra vez", + "thisWillLogYouOutOfThisDevice": "Isso fará com que você saia deste dispositivo!", + "thisWillLogYouOutOfTheFollowingDevice": "Isso fará com que você saia do seguinte dispositivo:", + "terminateSession": "Encerrar sessão?", + "terminate": "Terminar", + "thisDevice": "Este aparelho", + "recoverButton": "Recuperar", + "recoverySuccessful": "Recuperação bem sucedida!", + "decrypting": "Descriptografando...", + "incorrectRecoveryKeyTitle": "Chave de recuperação incorreta", + "incorrectRecoveryKeyBody": "A chave de recuperação que você digitou está incorreta", + "forgotPassword": "Esqueceu sua senha", + "enterYourRecoveryKey": "Digite sua chave de recuperação", + "noRecoveryKey": "Nenhuma 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 email", + "checkInboxAndSpamFolder": "Verifique sua caixa de entrada (e ‘spam’) para concluir a verificação", + "tapToEnterCode": "Clica 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": "Chave: definaSenha\n→ definaSenha", + "changePasswordTitle": "Mude sua senha", + "resetPasswordTitle": "Restabeleça sua senha", + "encryptionKeys": "Chaves de criptografia", + "passwordWarning": "Nós não salvamos essa senha, se você esquecer nós não poderemos descriptografar seus dados", + "enterPasswordToEncrypt": "Insira a senha para criptografar seus dados", + "enterNewPasswordToEncrypt": "Insira uma senha nova para criptografar seus dados", + "weakStrength": "Fraca", + "strongStrength": "Forte", + "moderateStrength": "Moderada", + "passwordStrength": "Seguranç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": "Por favor, aguarde...", + "continueLabel": "Continuar", + "insecureDevice": "Dispositivo não seguro", + "sorryWeCouldNotGenerateSecureKeysOnThisDevicennplease": "Desculpe, não foi possível gerar chaves seguras neste dispositivo.\n\npor favor, faça o login 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": "Login", + "loginTerms": "Ao clicar em login, eu concordo com os termos de serviço e a política de privacidade", + "changeEmail": "Mudar e-mail", + "enterYourPassword": "Insira sua senha", + "welcomeBack": "Bem-vindo de volta!", + "contactSupport": "Falar com o suporte", + "incorrectPasswordTitle": "Senha incorreta", + "pleaseTryAgain": "Por favor, tente novamente", + "recreatePasswordTitle": "Restabeleça sua senha", + "useRecoveryKey": "Usar chave de recuperação", + "recreatePasswordBody": "O dispositivo atual não é poderoso o suficiente para verificar sua senha, mas podemos regenerar de uma forma que funcione com todos os dispositivos.\n\nPor favor, faça o login usando sua chave de recuperação e recrie sua senha (você pode usar o mesmo 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 essa chave.", + "recoveryKeySaveDescription": "Não armazenamos essa chave, por favor, salve essa chave de 24 palavras em um lugar seguro.", + "doThisLater": "Fazer isso mais tarde", + "saveKey": "Salvar chave", + "recoveryKeyCopiedToClipboard": "Chaves de recuperação foram copiadas para a área de transferência", + "recoverAccount": "Recuperar conta", + "recover": "Recuperar", + "dropSupportEmail": "Por favor, 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": "Autenticação de dois fatores", + "enterCode": "Coloque 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 seu aplicativo autenticador", + "tapToCopy": "toque para copiar", + "scanThisBarcodeWithnyourAuthenticatorApp": "Escaneie este código de barras com\nseu aplicativo autenticador", + "enterThe6digitCodeFromnyourAuthenticatorApp": "Digite o código de 6 dígitos de\nseu aplicativo autenticador", + "confirm": "Confirme", + "setupComplete": "Configuração concluída", + "saveYourRecoveryKeyIfYouHaventAlready": "Salve sua chave de recuperação, caso ainda não o tenha feito", + "thisCanBeUsedToRecoverYourAccountIfYou": "Isso pode ser usado para recuperar sua conta se você perder seu segundo fator", + "twofactorAuthenticationPageTitle": "Autenticação de dois fatores", + "lostDevice": "Dispositivo perdido?", + "verifyingRecoveryKey": "Verificando chave de recuperação...", + "recoveryKeyVerified": "Chave de recuperação verificada", + "recoveryKeySuccessBody": "Ótimo! Sua chave de recuperação é válida. Obrigado por verificar.\n\nLembre-se de manter o backup seguro de sua chave de recuperação.", + "invalidRecoveryKey": "A chave de recuperação que você digitou não é válida. Certifique-se de que contém 24 palavras e verifique a ortografia de cada uma.\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": "Confirme a chave de recuperação", + "recoveryKeyVerifyReason": "Sua chave de recuperação é a única maneira de recuperar suas fotos se você esquecer sua senha. Você pode encontrar sua chave de recuperação em Configurações > Conta.\n\nDigite 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 email", + "orPickAnExistingOne": "Ou escolha um existente", + "collaboratorsCanAddPhotosAndVideosToTheSharedAlbum": "Os colaboradores podem adicionar fotos e vídeos ao álbum compartilhado.", + "enterEmail": "Digite o email", + "albumOwner": "Proprietário", + "@albumOwner": { + "description": "Role of the album owner" + }, + "you": "Você", + "collaborator": "Colaborador", + "addMore": "Adicione 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 poderão remover as fotos existentes adicionadas por eles", + "allowAddingPhotos": "Permitir adicionar fotos", + "@allowAddingPhotos": { + "description": "Switch button to enable uploading photos to a public link" + }, + "allowAddPhotosDescription": "Permita que as pessoas com o link também adicionem fotos ao álbum compartilhado.", + "passwordLock": "Bloqueio de senha", + "disableDownloadWarningTitle": "Observe", + "disableDownloadWarningBody": "Os espectadores ainda podem tirar screenshots ou salvar uma cópia de suas fotos usando ferramentas externas", + "allowDownloads": "Permitir transferências", + "linkDeviceLimit": "Limite do dispositivo", + "linkExpiry": "Expiração do link", + "linkExpired": "Expirado", + "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 para um plano pago e aplica o seu código", + "shareTextReferralCode": "Código de referência do ente: {referralCode} \n\nAplique em Configurações → Geral → Indicações para obter {referralStorageInGB} GB gratuitamente após a sua inscrição em um plano pago\n\nhttps://ente.io", + "claimFreeStorage": "Solicitar armazenamento gratuito", + "inviteYourFriends": "Convide seus amigos", + "failedToFetchReferralDetails": "Não foi possível buscar informações do produto. Por favor, tente novamente mais tarde.", + "referralStep1": "Envie esse código aos seus amigos", + "referralStep2": "2. Eles se inscrevem em um plano pago", + "referralStep3": "3. Ambos ganham {storageInGB} GB* grátis", + "referralsAreCurrentlyPaused": "Referências estão atualmente pausadas", + "youCanAtMaxDoubleYourStorage": "* Você pode duplicar seu armazenamento no máximo", + "claimedStorageSoFar": "{isFamilyMember, select,true {Sua família reeinvindicou {storageAmountInGb} GB até agora}false {Você reeinvindicou {storageAmountInGb} Gb até agora}other {Você reeinvindicou {storageAmountInGb} Gb até agora}}", + "@claimedStorageSoFar": { + "placeholders": { + "isFamilyMember": { + "type": "String", + "example": "true" + }, + "storageAmountInGb": { + "type": "int", + "example": "10" + } + } + }, + "faq": "Perguntas frequentes", + "oopsSomethingWentWrong": "Ops! Algo deu errado", + "peopleUsingYourCode": "Pessoas que usam seu código", + "eligible": "elegível", + "total": "total", + "codeUsedByYou": "Código usado por você", + "freeStorageClaimed": "Armazenamento gratuito reivindicado", + "freeStorageUsable": "Armazenamento livre utilizável", + "usableReferralStorageInfo": "Armazenamento utilizável é limitado pelo seu plano atual. O armazenamento reivindicado em excesso se tornará utilizável automaticamente quando você fizer a melhoria do 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": "Parece que sua assinatura expirou. Por favor inscreva-se para ativar o compartilhamento.", + "subscribe": "Inscrever-se", + "canOnlyRemoveFilesOwnedByYou": "Só é possível 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 dos quais 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": "Excluir?", + "removeParticipantBody": "{userEmail} será removido deste álbum compartilhado\n\nQuaisquer fotos adicionadas por eles também serão removidas do álbum", + "keepPhotos": "Manter fotos", + "deletePhotos": "Excluir fotos", + "inviteToEnte": "Convidar para o ente", + "removePublicLink": "Remover link público", + "disableLinkMessage": "Isso removerá o link público para acessar \"{albumName}\".", + "sharing": "Compartilhando...", + "authToChangeYourEmail": "Por favor, autentique-se para alterar seu e-mail", + "changePassword": "Mude sua senha", + "authToChangeYourPassword": "Por favor, autentique-se para alterar sua senha", + "exportYourData": "Exportar seus dados", + "logout": "Encerrar sessão", + "authToInitiateAccountDeletion": "Por favor, autentique-se para iniciar a exclusão de conta", + "areYouSureYouWantToLogout": "Você tem certeza que deseja encerrar a sessão?", + "yesLogout": "Sim, terminar sessão", + "aNewVersionOfEnteIsAvailable": "Uma nova versão do ente está disponível.", + "update": "Atualização", + "installManually": "Instalar manualmente", + "criticalUpdateAvailable": "Atualização crítica disponível", + "updateAvailable": "Atualização disponível" +} \ No newline at end of file diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb new file mode 100644 index 000000000..a09428f86 --- /dev/null +++ b/lib/l10n/intl_zh.arb @@ -0,0 +1,933 @@ +{ + "enterYourEmailAddress": "请输入您的电子邮件地址", + "accountWelcomeBack": "欢迎回来!", + "email": "电子邮件地址", + "cancel": "取消", + "verify": "验证", + "invalidEmailAddress": "无效的电子邮件地址", + "enterValidEmail": "请输入一个有效的电子邮件地址。", + "deleteAccount": "删除账户", + "askDeleteReason": "您删除账户的主要原因是什么?", + "deleteAccountFeedbackPrompt": "我们很抱歉看到您离开。请分享您的反馈以帮助我们改进。", + "feedback": "反馈", + "kindlyHelpUsWithThisInformation": "请帮助我们了解这个信息", + "confirmDeletePrompt": "是的,我想永久删除此账户及其相关数据.", + "confirmAccountDeletion": "确认删除账户", + "deleteConfirmDialogBody": "您将要永久删除您的账户及其所有数据。\n此操作是不可逆的。", + "deleteAccountPermanentlyButton": "永久删除账户", + "yourAccountHasBeenDeleted": "您的账户已删除", + "selectReason": "选择原因", + "deleteReason1": "找不到我想要的功能", + "deleteReason2": "应用或某个功能不会有 \n行为。我认为它应该有的", + "deleteReason3": "我找到了另一个我喜欢更好的服务", + "deleteReason4": "我的原因未被列出", + "sendEmail": "发送电子邮件", + "deleteRequestSLAText": "您的请求将在 72 小时内处理。", + "deleteEmailRequest": "请从您注册的电子邮件地址发送电子邮件到 account-delettion@ente.io。", + "ok": "OK", + "createAccount": "创建账户", + "createNewAccount": "创建新账号", + "password": "密码", + "confirmPassword": "请确认密码", + "activeSessions": "已登录的设备", + "oops": "哎呀", + "somethingWentWrongPleaseTryAgain": "出了点问题,请重试", + "thisWillLogYouOutOfThisDevice": "这将使您在此设备上退出登录!", + "thisWillLogYouOutOfTheFollowingDevice": "这将使您在以下设备中退出登录:", + "terminateSession": "是否终止会话?", + "terminate": "终止", + "thisDevice": "此设备", + "recoverButton": "恢复", + "recoverySuccessful": "恢复成功!", + "decrypting": "解密中...", + "incorrectRecoveryKeyTitle": "不正确的恢复密钥", + "incorrectRecoveryKeyBody": "您输入的恢复密钥不正确", + "forgotPassword": "忘记密码", + "enterYourRecoveryKey": "输入您的恢复密钥", + "noRecoveryKey": "没有恢复密钥吗?", + "sorry": "抱歉", + "noRecoveryKeyNoDecryption": "由于我们端到端加密协议的性质,如果没有您的密码或恢复密钥,您的数据将无法解密", + "verifyEmail": "验证电子邮件", + "checkInboxAndSpamFolder": "请检查您的收件箱 (或者是在您的“垃圾邮件”列表内) 以完成验证", + "tapToEnterCode": "点击以输入代码", + "resendEmail": "重新发送电子邮件", + "weHaveSendEmailTo": "我们已经发送邮件到 {email}", + "@weHaveSendEmailTo": { + "description": "Text to indicate that we have sent a mail to the user", + "placeholders": { + "email": { + "description": "The email address of the user", + "type": "String", + "example": "example@ente.io" + } + } + }, + "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": "从你的身份验证器应用中\n输入6位数字代码", + "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": "密码锁", + "disableDownloadWarningTitle": "请注意", + "disableDownloadWarningBody": "查看者仍然可以使用外部工具截图或保存您的照片副本", + "allowDownloads": "允许下载", + "linkDeviceLimit": "设备限制", + "linkExpiry": "链接过期", + "linkExpired": "已过期", + "linkEnabled": "已启用", + "linkNeverExpires": "永不", + "expiredLinkInfo": "此链接已过期。请选择新的过期时间或禁用链接过期。", + "setAPassword": "设置密码", + "lockButtonLabel": "锁定", + "enterPassword": "输入密码", + "removeLink": "移除链接", + "manageLink": "管理链接", + "linkExpiresOn": "链接将在 {expiryTime} 过期", + "albumUpdated": "相册已更新", + "maxDeviceLimitSpikeHandling": "当设置为最大值 ({maxValue}) 时,设备限制将放宽以允许大量查看者查看的临时高峰。", + "@maxDeviceLimitSpikeHandling": { + "placeholders": { + "maxValue": { + "type": "int", + "example": "100" + } + } + }, + "never": "永不", + "custom": "自定义", + "@custom": { + "description": "Label for setting custom value for link expiry" + }, + "after1Hour": "1小时后", + "after1Day": "1天后", + "after1Week": "1 周后", + "after1Month": "1个月后", + "after1Year": "1 年后", + "manageParticipants": "管理", + "collabLinkSectionDescription": "创建一个链接以允许人们在您的共享相册中添加和查看照片,而无需应用程序或账户。 非常适合收集活动照片。", + "collectPhotos": "收集照片", + "collaborativeLink": "协作链接", + "shareWithNonenteUsers": "与非ente 用户分享", + "createPublicLink": "创建公开链接", + "sendLink": "发送链接", + "copyLink": "复制链接", + "linkHasExpired": "链接已过期", + "publicLinkEnabled": "公开链接已启用", + "shareALink": "分享链接", + "sharedAlbumSectionDescription": "与其他ente用户创建共享和协作相册,包括免费计划的用户。", + "shareWithPeopleSectionTitle": "{numberOfPeople, plural, =0 {与特定人员共享} =1 {与 1 人共享} other {与 {numberOfPeople} 人共享}}", + "@shareWithPeopleSectionTitle": { + "placeholders": { + "numberOfPeople": { + "type": "int", + "example": "2" + } + } + }, + "thisIsYourVerificationId": "这是您的验证 ID", + "someoneSharingAlbumsWithYouShouldSeeTheSameId": "与您共享相册的人应该会在他们的设备上看到相同的 ID。", + "howToViewShareeVerificationID": "请让他们在设置屏幕上长按他们的电子邮件地址,并验证两台设备上的 ID 是否匹配。", + "thisIsPersonVerificationId": "这是 {email} 的验证ID", + "@thisIsPersonVerificationId": { + "placeholders": { + "email": { + "type": "String", + "example": "someone@ente.io" + } + } + }, + "verificationId": "验证 ID", + "verifyEmailID": "验证 {email}", + "emailNoEnteAccount": "{email} 没有 ente 账户。\n\n向他们发送分享照片的邀请。", + "shareMyVerificationID": "这是我的ente.io 的验证 ID: {verificationID}。", + "shareTextConfirmOthersVerificationID": "嘿,你能确认这是你的 ente.io 验证 ID:{verificationID}", + "somethingWentWrong": "出了些问题", + "sendInvite": "发送邀请", + "shareTextRecommendUsingEnte": "下载 ente,以便我们轻松分享原始质量的照片和视频\n\nhttps://ente.io/#download", + "done": "已完成", + "applyCodeTitle": "应用代码", + "enterCodeDescription": "输入您的朋友提供的代码来为您申请免费存储", + "apply": "应用", + "failedToApplyCode": "无法应用代码", + "enterReferralCode": "输入推荐代码", + "codeAppliedPageTitle": "代码已应用", + "storageInGB": "{storageAmountInGB} GB", + "claimed": "已领取", + "@claimed": { + "description": "Used to indicate storage claimed, like 10GB Claimed" + }, + "details": "详情", + "claimMore": "领取更多!", + "theyAlsoGetXGb": "他们也会获得 {storageAmountInGB} GB", + "freeStorageOnReferralSuccess": "每当有人注册付费计划时{storageAmountInGB} GB 并应用了您的代码", + "shareTextReferralCode": "ente转发码: {referralCode} \n\n在设置 → 常规 → 推荐中应用它以在注册付费计划后可以免费获得 {referralStorageInGB} GB\n\nhttps://ente.io", + "claimFreeStorage": "领取免费存储", + "inviteYourFriends": "邀请您的朋友", + "failedToFetchReferralDetails": "无法获取引荐详细信息。 请稍后再试。", + "referralStep1": "1. 将此代码提供给您的朋友", + "referralStep2": "2. 他们注册一个付费计划", + "referralStep3": "3. 你都可以免费获得 {storageInGB} GB*", + "referralsAreCurrentlyPaused": "推荐已暂停", + "youCanAtMaxDoubleYourStorage": "* 您最多可以将您的存储空间增加一倍", + "claimedStorageSoFar": "{isFamilyMember, select, true {到目前为止,您的家庭已经领取了 {storageAmountInGb} Gb} false {到目前为止,您已经领取了 {storageAmountInGb} Gb} other {到目前为止,您已经领取了{storageAmountInGb} Gb}}", + "@claimedStorageSoFar": { + "placeholders": { + "isFamilyMember": { + "type": "String", + "example": "true" + }, + "storageAmountInGb": { + "type": "int", + "example": "10" + } + } + }, + "faq": "常见问题", + "oopsSomethingWentWrong": "哎呀,似乎出了点问题", + "peopleUsingYourCode": "使用您的代码的人", + "eligible": "符合资格", + "total": "总计", + "codeUsedByYou": "您所使用的代码", + "freeStorageClaimed": "已领取的免费存储", + "freeStorageUsable": "可用的免费存储", + "usableReferralStorageInfo": "可用存储空间受您当前计划的限制。 当您升级您的计划时,超出要求的存储空间将自动变为可用。", + "removeFromAlbumTitle": "要从相册中移除吗?", + "removeFromAlbum": "从相册中移除", + "itemsWillBeRemovedFromAlbum": "所选项目将从此相册中移除", + "removeShareItemsWarning": "您要删除的某些项目是由其他人添加的,您将无法访问它们", + "addingToFavorites": "正在添加到收藏...", + "removingFromFavorites": "正在从收藏中删除...", + "sorryCouldNotAddToFavorites": "抱歉,无法添加到收藏!", + "sorryCouldNotRemoveFromFavorites": "抱歉,无法从收藏中移除!", + "subscribeToEnableSharing": "您的订阅似乎已过期。请订阅以启用分享。", + "subscribe": "订阅", + "canOnlyRemoveFilesOwnedByYou": "只能删除您拥有的文件", + "deleteSharedAlbum": "要删除共享相册吗?", + "deleteAlbum": "删除相册", + "deleteAlbumDialog": "也删除此相册中存在的照片(和视频),从 他们所加入的所有 其他相册?", + "deleteSharedAlbumDialogBody": "将为所有人删除相册\n\n您将无法访问此相册中他人拥有的共享照片", + "yesRemove": "是,移除", + "creatingLink": "正在创建链接...", + "removeWithQuestionMark": "要移除吗?", + "removeParticipantBody": "{userEmail} 将从这个共享相册中删除\n\nTA们添加的任何照片也将从相册中删除", + "keepPhotos": "保留照片", + "deletePhotos": "删除照片", + "inviteToEnte": "邀请到 ente", + "removePublicLink": "删除公开链接", + "disableLinkMessage": "这将删除用于访问\"{albumName}\"的公共链接。", + "sharing": "正在分享...", + "youCannotShareWithYourself": "莫开玩笑,您不能与自己分享", + "archive": "存档", + "createAlbumActionHint": "长按选择照片,然后点击 + 创建相册", + "importing": "正在导入...", + "failedToLoadAlbums": "加载相册失败", + "hidden": "已隐藏", + "authToViewYourHiddenFiles": "请验证以查看您的隐藏文件", + "trash": "回收站", + "uncategorized": "未分类的", + "videoSmallCase": "视频", + "photoSmallCase": "照片", + "singleFileDeleteHighlight": "它将从所有相册中删除。", + "singleFileInBothLocalAndRemote": "此 {fileType} 同时在ente和您的设备中。", + "singleFileInRemoteOnly": "此 {fileType} 将从ente中删除。", + "singleFileDeleteFromDevice": "此 {fileType} 将从您的设备中删除。", + "deleteFromEnte": "从ente 中删除", + "yesDelete": "是的, 删除", + "movedToTrash": "已移至回收站", + "deleteFromDevice": "从设备中删除", + "deleteFromBoth": "同时从两者中删除", + "newAlbum": "新建相册", + "albums": "相册", + "memoryCount": "{count, plural, zero{没有回忆} one{{count} 个回忆} other{{count} 个回忆}}", + "@memoryCount": { + "description": "The text to display the number of memories", + "type": "text", + "placeholders": { + "count": { + "example": "1", + "type": "int" + } + } + }, + "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": "管理设备存储", + "selectFoldersForBackup": "选择要备份的文件夹", + "selectedFoldersWillBeEncryptedAndBackedUp": "所选文件夹将被加密和备份", + "unselectAll": "取消全部选择", + "selectAll": "全选", + "skip": "略过", + "updatingFolderSelection": "正在更新文件夹选择...", + "itemCount": "{count, plural, one{{count} 个项目} other{{count} 个项目}}", + "yearsAgo": "{count, plural, one{{count} 年前} other{{count} 年前}}", + "backupSettings": "备份设置", + "backupOverMobileData": "通过移动数据备份", + "backupVideos": "备份视频", + "disableAutoLock": "禁用自动锁定", + "deviceLockExplanation": "当 ente 在前台并且正在进行备份时禁用设备屏幕锁定。 这通常不需要,但可以帮助大型库的大上传和初始导入更快地完成。", + "about": "关于", + "weAreOpenSource": "我们是开源的 !", + "privacy": "隐私", + "terms": "使用条款", + "checkForUpdates": "检查更新", + "checking": "正在检查...", + "youAreOnTheLatestVersion": "当前为最新版本", + "account": "账户", + "manageSubscription": "管理订阅", + "authToChangeYourEmail": "请验证以更改您的电子邮件", + "changePassword": "修改密码", + "authToChangeYourPassword": "请验证以更改密码", + "exportYourData": "导出您的数据", + "logout": "退出登录", + "authToInitiateAccountDeletion": "请进行身份验证以启动账户删除", + "areYouSureYouWantToLogout": "您确定要退出登录吗?", + "yesLogout": "是的,退出登陆", + "aNewVersionOfEnteIsAvailable": "有新版本的 ente 可供使用。", + "update": "更新", + "installManually": "手动安装", + "criticalUpdateAvailable": "可用的关键更新", + "updateAvailable": "有可用的更新", + "downloading": "正在下载...", + "theDownloadCouldNotBeCompleted": "未能完成下载", + "retry": "重试", + "backedUpFolders": "已备份的文件夹", + "backup": "备份", + "freeUpDeviceSpace": "释放设备空间", + "allClear": "✨ 全部清除", + "noDeviceThatCanBeDeleted": "您在此设备上没有可被删除的文件", + "removeDuplicates": "移除重复内容", + "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, 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": "推荐人", + "advanced": "高级设置", + "general": "通用", + "security": "安全", + "authToViewYourRecoveryKey": "请验证以查看您的恢复密钥", + "twofactor": "两因素认证", + "authToConfigureTwofactorAuthentication": "请进行身份验证以配置双重身份验证", + "lockscreen": "锁屏", + "authToChangeLockscreenSetting": "请验证以更改锁屏设置", + "lockScreenEnablePreSteps": "要启用锁屏,请在系统设置中设置设备密码或屏幕锁定。", + "viewActiveSessions": "查看活动会话", + "authToViewYourActiveSessions": "请验证以查看您的活动会话", + "disableTwofactor": "禁用双因素认证", + "confirm2FADisable": "您确定要禁用双因素认证吗?", + "no": "否", + "yes": "是", + "social": "社交", + "rateUsOnStore": "在 {storeName} 上给我们评分", + "blog": "博客", + "merchandise": "商品", + "twitter": "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 usaged", + "examples": { + "0": "Current usage is 1.2 GB" + }, + "type": "text" + }, + "faqs": "常见问题", + "renewsOn": "在 {endDate} 前续费", + "freeTrialValidTill": "免费试用有效期至 {endDate}", + "subWillBeCancelledOn": "您的订阅将于 {endDate} 取消", + "subscription": "订阅", + "paymentDetails": "付款明细", + "manageFamily": "管理家庭计划", + "contactToManageSubscription": "请通过support@ente.io 用英语联系我们来管理您的 {provider} 订阅。", + "renewSubscription": "续费订阅", + "cancelSubscription": "取消订阅", + "areYouSureYouWantToRenew": "您确定要续费吗?", + "yesRenew": "是的,续费", + "areYouSureYouWantToCancel": "您确定要取消吗?", + "yesCancel": "是的,取消", + "failedToRenew": "续费失败", + "failedToCancel": "取消失败", + "twoMonthsFreeOnYearlyPlans": "在年度计划上免费获得 2 个月", + "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 ID", + "appleId": "Apple ID", + "playstoreSubscription": "PlayStore 订阅", + "appstoreSubscription": "AppStore 订阅", + "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": "请稍等片刻后再重试", + "paymentFailedWithReason": "很抱歉,您的支付因 {reason} 而失败", + "youAreOnAFamilyPlan": "你在一个家庭计划中!", + "contactFamilyAdmin": "请联系 {familyAdminEmail} 来管理您的订阅", + "leaveFamily": "离开家庭计划", + "areYouSureThatYouWantToLeaveTheFamily": "您确定要离开家庭计划吗?", + "leave": "离开", + "rateTheApp": "为此应用评分", + "startBackup": "开始备份", + "noPhotosAreBeingBackedUpRightNow": "目前没有照片正在备份", + "preserveMore": "保留更多", + "existingUser": "现有用户", + "privateBackups": "私人备份", + "forYourMemories": "为您的回忆", + "endtoendEncryptedByDefault": "默认端到端加密", + "safelyStored": "安全存储", + "atAFalloutShelter": "在一个保护所中", + "designedToOutlive": "经久耐用", + "available": "可用", + "everywhere": "随时随地", + "androidIosWebDesktop": "安卓, iOS, 网页端, 桌面端", + "mobileWebDesktop": "移动端, 网页端, 桌面端", + "newToEnte": "刚来到ente", + "pleaseLoginAgain": "请重新登录", + "devAccountChanged": "我们用于在 App Store 上发布 ente 的开发者账户已更改。 因此,您将需要重新登录。\n\n对于给您带来的不便,我们深表歉意,但这是不可避免的。", + "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}", + "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": "分享链接", + "addToEnte": "添加到 ente", + "addToAlbum": "添加到相册", + "delete": "删除", + "hide": "隐藏", + "itemSelectedCount": "已选择 {count} 个", + "@itemSelectedCount": { + "description": "Text to indicate number of items selected", + "placeholders": { + "count": { + "example": "1|2|3", + "type": "int" + } + } + }, + "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": "相册名称", + "albumTitle": "相册标题", + "enterAlbumName": "输入相册名称", + "restoringFiles": "正在恢复文件...", + "movingFilesToAlbum": "正在将文件移动到相册...", + "unhidingFilesToAlbum": "正在取消隐藏文件到相册", + "canNotUploadToAlbumsOwnedByOthers": "无法上传到他人拥有的相册中", + "uploadingFilesToAlbum": "正在将文件上传到相册...", + "addedSuccessfullyTo": "成功添加到 {albumName}", + "movedSuccessfullyTo": "成功移动到 {albumName}", + "thisAlbumAlreadyHDACollaborativeLink": "此相册已经有一个协作链接", + "collaborativeLinkCreatedFor": "为 {albumName} 创建了协作链接", + "askYourLovedOnesToShare": "请您的亲人分享", + "invite": "邀请", + "shareYourFirstAlbum": "分享您的第一个相册", + "sharedWith": "与 {emailIDs} 共享", + "sharedWithMe": "与我共享", + "sharedByMe": "由我共享的", + "doubleYourStorage": "将您的存储空间增加一倍", + "referFriendsAnd2xYourPlan": "推荐朋友和 2 倍您的计划", + "shareAlbumHint": "打开相册并点击右上角的分享按钮进行分享", + "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion": "项目显示永久删除前剩余的天数", + "deleteAll": "全部删除", + "renameAlbum": "重命名相册", + "rename": "重命名", + "leaveSharedAlbum": "要离开共享相册吗?", + "leaveAlbum": "离开相册", + "photosAddedByYouWillBeRemovedFromTheAlbum": "您添加的照片将从相册中移除", + "youveNoFilesInThisAlbumThatCanBeDeleted": "您在此相册中没有可以删除的文件", + "youDontHaveAnyArchivedItems": "您没有任何存档的项目。", + "ignoredFolderUploadReason": "此相册中的某些文件在上传时被忽略,因为它们之前已从 ente 中删除。", + "resetIgnoredFiles": "重置忽略的文件", + "deviceFilesAutoUploading": "添加到此设备相册的文件将自动上传到 ente。", + "turnOnBackupForAutoUpload": "打开备份以自动上传添加到此设备文件夹的文件。", + "noHiddenPhotosOrVideos": "没有隐藏的照片或视频", + "toHideAPhotoOrVideo": "隐藏照片或视频", + "openTheItem": "• 打开该项目", + "clickOnTheOverflowMenu": "• 点击溢出菜单", + "click": "• 点击", + "nothingToSeeHere": "这里空空如也! 👀", + "unarchiveAlbum": "取消存档相册", + "archiveAlbum": "存档相册", + "calculating": "正在计算...", + "pleaseWaitDeletingAlbum": "请稍候,正在删除相册", + "searchHintText": "相册,月,日,年,...", + "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": "文件已保存到相册", + "download": "下载", + "pressAndHoldToPlayVideo": "按住以播放视频", + "downloadFailed": "下載失敗", + "deduplicateFiles": "重复文件", + "deselectAll": "取消全选", + "reviewDeduplicateItems": "请检查并删除您认为重复的项目。", + "clubByCaptureTime": "按抓取时间断开", + "count": "计数", + "totalSize": "总大小", + "time": "时间", + "longpressOnAnItemToViewInFullscreen": "长按一个项目来全屏查看", + "decryptingVideo": "正在解密视频...", + "authToViewYourMemories": "请验证以查看您的回忆", + "unlock": "解锁", + "freeUpSpace": "释放空间", + "freeUpSpaceSaving": "{count, plural, one {它可以从设备中删除以释放 {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", + "placeholders": { + "count": { + "example": "1", + "type": "int" + }, + "formattedNumber": { + "content": "{formattedNumber}", + "example": "1,000", + "type": "String" + } + } + }, + "filesBackedUpFromDevice": "此设备上的 {count, plural, one {1 个文件} 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": "只要您有有效的订阅,您仍然可以在 ente 上访问 {count, plural, one {it} other {them}}", + "@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}", + "@syncProgress": { + "description": "Text to tell user how many memories have been preserved", + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "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": "看起来出了点问题。 请稍后重试。 如果错误仍然存在,请联系我们的支持团队。", + "cachedData": "缓存数据", + "clearCaches": "清除缓存", + "remoteImages": "远程图像", + "remoteVideos": "远程视频", + "remoteThumbnails": "远程缩略图", + "pendingSync": "正在等待同步", + "localGallery": "本地相册", + "todaysLogs": "当天日志", + "viewLogs": "查看日志", + "logsDialogBody": "这将跨日志发送以帮助我们调试您的问题。 请注意,将包含文件名以帮助跟踪特定文件的问题。", + "preparingLogs": "正在准备日志...", + "emailYourLogs": "通过电子邮件发送您的日志", + "pleaseSendTheLogsTo": "请将日志发送至 \n{toEmail}", + "copyEmailAddress": "复制电子邮件地址", + "exportLogs": "导出日志", + "pleaseEmailUsAt": "请给我们发送电子邮件至 {toEmail}", + "dismiss": "忽略", + "didYouKnow": "您知道吗?", + "loadingMessage": "正在加载您的照片...", + "loadMessage1": "您可以与家庭分享您的订阅", + "loadMessage2": "到目前为止,我们已经保存了1 000多万个回忆", + "loadMessage3": "我们保存你的3个数据副本,一个在地下安全屋中", + "loadMessage4": "我们所有的应用程序都是开源的", + "loadMessage5": "我们的源代码和加密技术已经由外部审计", + "loadMessage6": "您可以与您所爱的人分享您相册的链接", + "loadMessage7": "我们的移动应用程序在后台运行以加密和备份您点击的任何新照片", + "loadMessage8": "web.ente.io 有一个巧妙的上传器", + "loadMessage9": "我们使用 Xchacha20Poly1305 加密技术来安全地加密您的数据", + "language": "语言", + "selectLanguage": "选择语言", + "locationName": "地点名称", + "addLocation": "添加地点", + "groupNearbyPhotos": "将附近的照片分组", + "location": "地理位置", + "kiloMeterUnit": "公里", + "addLocationButton": "添加", + "radius": "半径", + "locationTagFeatureDescription": "位置标签将在照片的某个半径范围内拍摄的所有照片进行分组", + "galleryMemoryLimitInfo": "在图库中显示最多1000个回忆", + "save": "保存", + "centerPoint": "中心点", + "pickCenterPoint": "选择中心点", + "useSelectedPhoto": "使用所选照片", + "edit": "编辑", + "deleteLocation": "删除位置", + "rotateLeft": "向左旋转", + "flip": "上下翻转", + "rotateRight": "向右旋转", + "saveCopy": "保存副本", + "light": "浅色", + "color": "颜色", + "yesDiscardChanges": "是的,放弃更改", + "doYouWantToDiscardTheEditsYouHaveMade": "您想要放弃您所做的编辑吗?", + "saving": "正在保存...", + "editsSaved": "已保存编辑", + "oopsCouldNotSaveEdits": "糟糕,无法保存编辑" +} \ No newline at end of file diff --git a/lib/l10n/l10n.dart b/lib/l10n/l10n.dart index 71317185c..3b3287191 100644 --- a/lib/l10n/l10n.dart +++ b/lib/l10n/l10n.dart @@ -1,3 +1,4 @@ +import "package:flutter/foundation.dart"; import "package:flutter/widgets.dart"; import "package:photos/generated/l10n.dart"; import "package:shared_preferences/shared_preferences.dart"; @@ -9,11 +10,11 @@ extension AppLocalizationsX on BuildContext { // list of locales which are enabled for auth app. // Add more language to the list only when at least 90% of the strings are // translated in the corresponding language. -const List appSupportedLocales = [ - Locale('en'), - Locale('fr'), - Locale("nl") -]; +const List appSupportedLocales = kDebugMode + ? [Locale('en'), Locale('fr'), Locale("nl")] + : [ + Locale('en'), + ]; Locale localResolutionCallBack(locales, supportedLocales) { for (Locale locale in locales) { diff --git a/lib/main.dart b/lib/main.dart index f7ec32e06..d08535a03 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -257,7 +257,7 @@ Future _isRunningInForeground() async { final lastFGHeartBeatTime = DateTime.fromMicrosecondsSinceEpoch( prefs.getInt(kLastFGTaskHeartBeatTime) ?? 0, ); - _logger.info("Last FG heart beat @ ", lastFGHeartBeatTime.toString()); + _logger.info("Last FG heart beat @ $lastFGHeartBeatTime"); return lastFGHeartBeatTime.microsecondsSinceEpoch > (currentTime - kFGTaskDeathTimeoutInMicroseconds); } diff --git a/lib/models/file.dart b/lib/models/file.dart index 19a98a00d..62fca67b2 100644 --- a/lib/models/file.dart +++ b/lib/models/file.dart @@ -179,12 +179,25 @@ class File extends EnteFile { } } bool hasExifTime = false; - if (fileType == FileType.image && mediaUploadData.sourceFile != null) { - final exifTime = - await getCreationTimeFromEXIF(mediaUploadData.sourceFile!); - if (exifTime != null) { - hasExifTime = true; - creationTime = exifTime.microsecondsSinceEpoch; + if ((fileType == FileType.image || fileType == FileType.video) && + mediaUploadData.sourceFile != null) { + final exifData = await getExifFromSourceFile(mediaUploadData.sourceFile!); + if (exifData != null) { + if (fileType == FileType.image) { + final exifTime = await getCreationTimeFromEXIF(null, exifData); + if (exifTime != null) { + hasExifTime = true; + creationTime = exifTime.microsecondsSinceEpoch; + } + } + if (Platform.isAndroid) { + //Fix for missing location data in lower android versions. + final Location? exifLocation = locationFromExif(exifData); + if (exifLocation?.latitude != null && + exifLocation?.longitude != null) { + location = exifLocation; + } + } } } // Try to get the timestamp from fileName. In case of iOS, file names are @@ -298,7 +311,7 @@ class File extends EnteFile { bool get hasLocation { return location != null && - (location!.longitude != 0 || location!.latitude != 0); + ((location!.longitude ?? 0) != 0 || (location!.latitude ?? 0) != 0); } @override diff --git a/lib/models/location/location.dart b/lib/models/location/location.dart index 1349aba44..35ace4379 100644 --- a/lib/models/location/location.dart +++ b/lib/models/location/location.dart @@ -1,7 +1,6 @@ import 'package:freezed_annotation/freezed_annotation.dart'; part 'location.freezed.dart'; - part 'location.g.dart'; @freezed diff --git a/lib/models/location_tag/location_tag.dart b/lib/models/location_tag/location_tag.dart index 1901013d9..acbfdc3d6 100644 --- a/lib/models/location_tag/location_tag.dart +++ b/lib/models/location_tag/location_tag.dart @@ -1,5 +1,4 @@ import 'package:freezed_annotation/freezed_annotation.dart'; -import "package:photos/core/constants.dart"; import 'package:photos/models/location/location.dart'; part 'location_tag.freezed.dart'; @@ -10,7 +9,7 @@ class LocationTag with _$LocationTag { const LocationTag._(); const factory LocationTag({ required String name, - required int radius, + required double radius, required double aSquare, required double bSquare, required Location centerPoint, @@ -19,7 +18,7 @@ class LocationTag with _$LocationTag { factory LocationTag.fromJson(Map json) => _$LocationTagFromJson(json); - int get radiusIndex { + int radiusIndex(List radiusValues) { return radiusValues.indexOf(radius); } } diff --git a/lib/models/location_tag/location_tag.freezed.dart b/lib/models/location_tag/location_tag.freezed.dart index 88a88b483..2c0f795b6 100644 --- a/lib/models/location_tag/location_tag.freezed.dart +++ b/lib/models/location_tag/location_tag.freezed.dart @@ -21,7 +21,7 @@ LocationTag _$LocationTagFromJson(Map json) { /// @nodoc mixin _$LocationTag { String get name => throw _privateConstructorUsedError; - int get radius => throw _privateConstructorUsedError; + double get radius => throw _privateConstructorUsedError; double get aSquare => throw _privateConstructorUsedError; double get bSquare => throw _privateConstructorUsedError; Location get centerPoint => throw _privateConstructorUsedError; @@ -40,7 +40,7 @@ abstract class $LocationTagCopyWith<$Res> { @useResult $Res call( {String name, - int radius, + double radius, double aSquare, double bSquare, Location centerPoint}); @@ -75,7 +75,7 @@ class _$LocationTagCopyWithImpl<$Res, $Val extends LocationTag> radius: null == radius ? _value.radius : radius // ignore: cast_nullable_to_non_nullable - as int, + as double, aSquare: null == aSquare ? _value.aSquare : aSquare // ignore: cast_nullable_to_non_nullable @@ -110,7 +110,7 @@ abstract class _$$_LocationTagCopyWith<$Res> @useResult $Res call( {String name, - int radius, + double radius, double aSquare, double bSquare, Location centerPoint}); @@ -144,7 +144,7 @@ class __$$_LocationTagCopyWithImpl<$Res> radius: null == radius ? _value.radius : radius // ignore: cast_nullable_to_non_nullable - as int, + as double, aSquare: null == aSquare ? _value.aSquare : aSquare // ignore: cast_nullable_to_non_nullable @@ -178,7 +178,7 @@ class _$_LocationTag extends _LocationTag { @override final String name; @override - final int radius; + final double radius; @override final double aSquare; @override @@ -226,7 +226,7 @@ class _$_LocationTag extends _LocationTag { abstract class _LocationTag extends LocationTag { const factory _LocationTag( {required final String name, - required final int radius, + required final double radius, required final double aSquare, required final double bSquare, required final Location centerPoint}) = _$_LocationTag; @@ -238,7 +238,7 @@ abstract class _LocationTag extends LocationTag { @override String get name; @override - int get radius; + double get radius; @override double get aSquare; @override diff --git a/lib/models/location_tag/location_tag.g.dart b/lib/models/location_tag/location_tag.g.dart index 29bc59b35..2f159bf99 100644 --- a/lib/models/location_tag/location_tag.g.dart +++ b/lib/models/location_tag/location_tag.g.dart @@ -9,7 +9,7 @@ part of 'location_tag.dart'; _$_LocationTag _$$_LocationTagFromJson(Map json) => _$_LocationTag( name: json['name'] as String, - radius: json['radius'] as int, + radius: (json['radius'] as num).toDouble(), aSquare: (json['aSquare'] as num).toDouble(), bSquare: (json['bSquare'] as num).toDouble(), centerPoint: diff --git a/lib/models/magic_metadata.dart b/lib/models/magic_metadata.dart index ed40b1cfc..83ad53798 100644 --- a/lib/models/magic_metadata.dart +++ b/lib/models/magic_metadata.dart @@ -19,6 +19,8 @@ const pubMagicKeyCaption = "caption"; const pubMagicKeyUploaderName = "uploaderName"; const publicMagicKeyWidth = 'w'; const publicMagicKeyHeight = 'h'; +const pubMagicKeyLat = "lat"; +const pubMagicKeyLong = "long"; class MagicMetadata { // 0 -> visible @@ -48,6 +50,8 @@ class PubMagicMetadata { String? uploaderName; int? w; int? h; + double? lat; + double? long; PubMagicMetadata({ this.editedTime, @@ -56,6 +60,8 @@ class PubMagicMetadata { this.uploaderName, this.w, this.h, + this.lat, + this.long, }); factory PubMagicMetadata.fromEncodedJson(String encodedJson) => @@ -73,6 +79,8 @@ class PubMagicMetadata { uploaderName: map[pubMagicKeyUploaderName], w: map[publicMagicKeyWidth], h: map[publicMagicKeyHeight], + lat: map[pubMagicKeyLat], + long: map[pubMagicKeyLong], ); } } diff --git a/lib/models/search/generic_search_result.dart b/lib/models/search/generic_search_result.dart index 8d96bd085..9bb35e327 100644 --- a/lib/models/search/generic_search_result.dart +++ b/lib/models/search/generic_search_result.dart @@ -1,3 +1,4 @@ +import "package:flutter/cupertino.dart"; import 'package:photos/models/file.dart'; import 'package:photos/models/search/search_result.dart'; @@ -5,8 +6,9 @@ class GenericSearchResult extends SearchResult { final String _name; final List _files; final ResultType _type; + final Function(BuildContext context)? onResultTap; - GenericSearchResult(this._type, this._name, this._files); + GenericSearchResult(this._type, this._name, this._files, {this.onResultTap}); @override String name() { diff --git a/lib/models/typedefs.dart b/lib/models/typedefs.dart index bd53d57ff..c04aed6ec 100644 --- a/lib/models/typedefs.dart +++ b/lib/models/typedefs.dart @@ -2,10 +2,14 @@ import 'dart:async'; import "package:photos/models/location/location.dart"; -typedef FutureVoidCallback = Future Function(); typedef BoolCallBack = bool Function(); -typedef FutureVoidCallbackParamStr = Future Function(String); + typedef VoidCallbackParamStr = void Function(String); -typedef FutureOrVoidCallback = FutureOr Function(); typedef VoidCallbackParamInt = void Function(int); +typedef VoidCallbackParamDouble = Function(double); +typedef VoidCallbackParamListDouble = void Function(List); typedef VoidCallbackParamLocation = void Function(Location); + +typedef FutureVoidCallback = Future Function(); +typedef FutureOrVoidCallback = FutureOr Function(); +typedef FutureVoidCallbackParamStr = Future Function(String); diff --git a/lib/services/entity_service.dart b/lib/services/entity_service.dart index 5797a7591..a89b44f58 100644 --- a/lib/services/entity_service.dart +++ b/lib/services/entity_service.dart @@ -162,7 +162,7 @@ class EntityService { final EntityKey response = await _gateway.getKey(type); encryptedKey = response.encryptedKey; header = response.header; - _prefs.setString(_getEntityKeyPrefix(type), encryptedKey); + await _prefs.setString(_getEntityKeyPrefix(type), encryptedKey); _prefs.setString(_getEntityHeaderPrefix(type), header); } final entityKey = CryptoUtil.decryptSync( @@ -171,18 +171,15 @@ class EntityService { Sodium.base642bin(header), ); return entityKey; - } on EntityKeyNotFound catch (e) { - _logger.info( - "EntityKeyNotFound generating key for type $type ${e.stackTrace}"); + } on EntityKeyNotFound { + _logger.info("EntityKeyNotFound generating key for type $type"); final key = CryptoUtil.generateKey(); final encryptedKeyData = CryptoUtil.encryptSync(key, _config.getKey()!); - await _gateway.createKey( - type, - Sodium.bin2base64(encryptedKeyData.encryptedData!), - Sodium.bin2base64(encryptedKeyData.nonce!), - ); - _prefs.setString(_getEntityKeyPrefix(type), encryptedKey); - _prefs.setString(_getEntityHeaderPrefix(type), header); + encryptedKey = Sodium.bin2base64(encryptedKeyData.encryptedData!); + header = Sodium.bin2base64(encryptedKeyData.nonce!); + await _gateway.createKey(type, encryptedKey, header); + await _prefs.setString(_getEntityKeyPrefix(type), encryptedKey); + await _prefs.setString(_getEntityHeaderPrefix(type), header); return key; } catch (e, s) { _logger.severe("Failed to getOrCreateKey for type $type", e, s); diff --git a/lib/services/local_file_update_service.dart b/lib/services/local_file_update_service.dart index a8b33df64..7cdec9c4a 100644 --- a/lib/services/local_file_update_service.dart +++ b/lib/services/local_file_update_service.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:core'; import 'dart:io'; +import "package:collection/collection.dart"; import 'package:flutter/foundation.dart'; import 'package:logging/logging.dart'; import 'package:photos/core/configuration.dart'; @@ -11,7 +12,11 @@ import 'package:photos/db/file_updation_db.dart'; import 'package:photos/db/files_db.dart'; import 'package:photos/extensions/stop_watch.dart'; import 'package:photos/models/file.dart' as ente; +import "package:photos/models/location/location.dart"; +import "package:photos/models/magic_metadata.dart"; +import "package:photos/services/file_magic_service.dart"; import 'package:photos/services/files_service.dart'; +import "package:photos/utils/exif_util.dart"; import 'package:photos/utils/file_uploader_util.dart'; import 'package:photos/utils/file_util.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -22,11 +27,16 @@ class LocalFileUpdateService { late FileUpdationDB _fileUpdationDB; late SharedPreferences _prefs; late Logger _logger; - static const isLocationMigrationComplete = "fm_isLocationMigrationComplete"; - static const isLocalImportDone = "fm_IsLocalImportDone"; static const isBadCreationTimeImportDone = 'fm_badCreationTime'; static const isBadCreationTimeMigrationComplete = 'fm_badCreationTimeCompleted'; + static const isMissingLocationV2ImportDone = "fm_missingLocationV2ImportDone"; + static const isMissingLocationV2MigrationDone = + "fm_missingLocationV2MigrationDone"; + + static const isBadLocationCordImportDone = "fm_badLocationImportDone"; + static const isBadLocationCordMigrationDone = "fm_badLocationMigrationDone"; + Completer? _existingMigration; LocalFileUpdateService._privateConstructor() { @@ -55,6 +65,8 @@ class LocalFileUpdateService { await _markFilesWhichAreActuallyUpdated(); if (Platform.isAndroid) { await _migrationForFixingBadCreationTime(); + await _migrationFilesWithMissingLocationV2(); + await _migrationFilesWithBadLocationCord(); } } catch (e, s) { _logger.severe('failed to perform migration', e, s); @@ -210,4 +222,183 @@ class LocalFileUpdateService { watch.log("imported ${filesGeneratedID.length} files"); _prefs.setBool(isBadCreationTimeImportDone, true); } + + Future _migrationFilesWithMissingLocationV2() async { + if (_prefs.containsKey(isMissingLocationV2MigrationDone)) { + return; + } + await _importForMissingLocationV2(); + const int singleRunLimit = 10; + final List processedIDs = []; + try { + final localIDs = await _fileUpdationDB.getLocalIDsForPotentialReUpload( + singleRunLimit, + FileUpdationDB.missingLocationV2, + ); + if (localIDs.isEmpty) { + // everything is done + await _prefs.setBool(isMissingLocationV2MigrationDone, true); + return; + } + + final List enteFiles = await FilesDB.instance + .getFilesForLocalIDs(localIDs, Configuration.instance.getUserID()!); + // fine localIDs which are not present in enteFiles + final List missingLocalIDs = []; + for (String localID in localIDs) { + if (enteFiles.firstWhereOrNull((e) => e.localID == localID) == null) { + missingLocalIDs.add(localID); + } + } + processedIDs.addAll(missingLocalIDs); + + final List remoteFilesToUpdate = []; + final Map> fileIDToUpdateMetadata = {}; + + for (ente.File file in enteFiles) { + final Location? location = await tryLocationFromExif(file); + if (location != null && + (location.latitude ?? 0) != 0.0 && + (location.longitude ?? 0) != 0.0) { + remoteFilesToUpdate.add(file); + fileIDToUpdateMetadata[file.uploadedFileID!] = { + pubMagicKeyLat: location.latitude!, + pubMagicKeyLong: location.longitude! + }; + } else if (file.localID != null) { + processedIDs.add(file.localID!); + } + } + if (remoteFilesToUpdate.isNotEmpty) { + await FileMagicService.instance.updatePublicMagicMetadata( + remoteFilesToUpdate, + null, + metadataUpdateMap: fileIDToUpdateMetadata, + ); + for (ente.File file in remoteFilesToUpdate) { + if (file.localID != null) { + processedIDs.add(file.localID!); + } + } + } + } catch (e) { + _logger.severe("Failed to fix bad creationTime", e); + } finally { + await _fileUpdationDB.deleteByLocalIDs( + processedIDs, + FileUpdationDB.missingLocationV2, + ); + } + } + + Future _importForMissingLocationV2() async { + if (_prefs.containsKey(isMissingLocationV2ImportDone)) { + return; + } + _logger.info('_importForMissingLocationV2'); + final EnteWatch watch = EnteWatch("_importForMissingLocationV2"); + final int ownerID = Configuration.instance.getUserID()!; + final List localIDs = + await FilesDB.instance.getLocalIDsForFilesWithoutLocation(ownerID); + + await _fileUpdationDB.insertMultiple( + localIDs, + FileUpdationDB.missingLocationV2, + ); + watch.log("imported ${localIDs.length} files"); + await _prefs.setBool(isMissingLocationV2ImportDone, true); + } + + Future _migrationFilesWithBadLocationCord() async { + if (_prefs.containsKey(isBadLocationCordMigrationDone)) { + return; + } + await _importForBadLocationCord(); + const int singleRunLimit = 10; + final List processedIDs = []; + try { + final localIDs = await _fileUpdationDB.getLocalIDsForPotentialReUpload( + singleRunLimit, + FileUpdationDB.badLocationCord, + ); + if (localIDs.isEmpty) { + // everything is done + await _prefs.setBool(isBadLocationCordMigrationDone, true); + return; + } + + final List enteFiles = await FilesDB.instance + .getFilesForLocalIDs(localIDs, Configuration.instance.getUserID()!); + // fine localIDs which are not present in enteFiles + final List missingLocalIDs = []; + for (String localID in localIDs) { + if (enteFiles.firstWhereOrNull((e) => e.localID == localID) == null) { + missingLocalIDs.add(localID); + } + } + processedIDs.addAll(missingLocalIDs); + + final List remoteFilesToUpdate = []; + final Map> fileIDToUpdateMetadata = {}; + + for (ente.File file in enteFiles) { + final Location? location = await tryLocationFromExif(file); + if (location != null && + (location.latitude ?? 0) != 0.0 && + (location.longitude ?? 0) != 0.0) { + // check if the location is already correct + if (file.location != null && + file.location?.longitude == location.latitude && + file.location?.longitude == location.longitude) { + processedIDs.add(file.localID!); + } else { + remoteFilesToUpdate.add(file); + fileIDToUpdateMetadata[file.uploadedFileID!] = { + pubMagicKeyLat: location.latitude!, + pubMagicKeyLong: location.longitude! + }; + } + } else if (file.localID != null) { + processedIDs.add(file.localID!); + } + } + if (remoteFilesToUpdate.isNotEmpty) { + await FileMagicService.instance.updatePublicMagicMetadata( + remoteFilesToUpdate, + null, + metadataUpdateMap: fileIDToUpdateMetadata, + ); + for (ente.File file in remoteFilesToUpdate) { + if (file.localID != null) { + processedIDs.add(file.localID!); + } + } + } + } catch (e) { + _logger.severe("Failed to fix bad location cord", e); + } finally { + await _fileUpdationDB.deleteByLocalIDs( + processedIDs, + FileUpdationDB.badLocationCord, + ); + } + } + + Future _importForBadLocationCord() async { + if (_prefs.containsKey(isBadLocationCordImportDone)) { + return; + } + _logger.info('_importForBadLocationCord'); + final EnteWatch watch = EnteWatch("_importForBadLocationCord"); + final int ownerID = Configuration.instance.getUserID()!; + final List localIDs = await FilesDB.instance + .getFilesWithLocationUploadedBtw20AprTo15May2023(ownerID); + + await _fileUpdationDB.insertMultiple( + localIDs, + FileUpdationDB.badLocationCord, + ); + watch.log("imported ${localIDs.length} files"); + await _prefs.setBool(isBadLocationCordImportDone, true); + } } diff --git a/lib/services/local_sync_service.dart b/lib/services/local_sync_service.dart index eb79aeb18..43443a3ae 100644 --- a/lib/services/local_sync_service.dart +++ b/lib/services/local_sync_service.dart @@ -30,7 +30,6 @@ class LocalSyncService { static const kDbUpdationTimeKey = "db_updation_time"; static const kHasCompletedFirstImportKey = "has_completed_firstImport"; - static const hasImportedDeviceCollections = "has_imported_device_collections"; static const kHasGrantedPermissionsKey = "has_granted_permissions"; static const kPermissionStateKey = "permission_state"; @@ -111,9 +110,7 @@ class LocalSyncService { } if (!hasCompletedFirstImport()) { await _prefs.setBool(kHasCompletedFirstImportKey, true); - // mark device collection has imported on first import await _refreshDeviceFolderCountAndCover(isFirstSync: true); - await _prefs.setBool(hasImportedDeviceCollections, true); _logger.fine("first gallery import finished"); Bus.instance .fire(SyncStatusUpdate(SyncStatus.completedFirstGalleryImport)); @@ -139,37 +136,9 @@ class LocalSyncService { if (hasUpdated && !isFirstSync) { Bus.instance.fire(BackupFoldersUpdatedEvent()); } - // migrate the backed up folder settings after first import is done remove - // after 6 months? - if (!_prefs.containsKey(hasImportedDeviceCollections) && - _prefs.containsKey(kHasCompletedFirstImportKey)) { - await _migrateOldSettings(result); - } return hasUpdated; } - Future _migrateOldSettings( - List> result, - ) async { - final pathsToBackUp = Configuration.instance.getPathsToBackUp(); - final entriesToBackUp = Map.fromEntries( - result - .where((element) => pathsToBackUp.contains(element.item1.name)) - .map((e) => MapEntry(e.item1.id, true)), - ); - if (entriesToBackUp.isNotEmpty) { - await _db.updateDevicePathSyncStatus(entriesToBackUp); - Bus.instance.fire(BackupFoldersUpdatedEvent()); - } - await Configuration.instance - .setHasSelectedAnyBackupFolder(pathsToBackUp.isNotEmpty); - await _prefs.setBool(hasImportedDeviceCollections, true); - } - - bool isDeviceFileMigrationDone() { - return _prefs.containsKey(hasImportedDeviceCollections); - } - Future syncAll() async { if (!Configuration.instance.isLoggedIn()) { _logger.warning("syncCall called when user is not logged in"); @@ -285,7 +254,6 @@ class LocalSyncService { await FilesDB.instance.deleteDB(); for (var element in [ kHasCompletedFirstImportKey, - hasImportedDeviceCollections, kDbUpdationTimeKey, "has_synced_edit_time", "has_selected_all_folders_for_backup", diff --git a/lib/services/location_service.dart b/lib/services/location_service.dart index f9e44ec1c..35c7fe7c7 100644 --- a/lib/services/location_service.dart +++ b/lib/services/location_service.dart @@ -38,7 +38,7 @@ class LocationService { Future addLocation( String location, Location centerPoint, - int radius, + double radius, ) async { //The area enclosed by the location tag will be a circle on a 3D spherical //globe and an ellipse on a 2D Mercator projection (2D map) @@ -46,19 +46,23 @@ class LocationService { //Converting the unit from kilometers to degrees for a and b as that is //the unit on the caritesian plane - final a = - (radius * _scaleFactor(centerPoint.latitude!)) / kilometersPerDegree; - final b = radius / kilometersPerDegree; - final locationTag = LocationTag( - name: location, - radius: radius, - aSquare: a * a, - bSquare: b * b, - centerPoint: centerPoint, - ); - await EntityService.instance - .addOrUpdate(EntityType.location, json.encode(locationTag.toJson())); - Bus.instance.fire(LocationTagUpdatedEvent(LocTagEventType.add)); + try { + final a = + (radius * _scaleFactor(centerPoint.latitude!)) / kilometersPerDegree; + final b = radius / kilometersPerDegree; + final locationTag = LocationTag( + name: location, + radius: radius, + aSquare: a * a, + bSquare: b * b, + centerPoint: centerPoint, + ); + await EntityService.instance + .addOrUpdate(EntityType.location, json.encode(locationTag.toJson())); + Bus.instance.fire(LocationTagUpdatedEvent(LocTagEventType.add)); + } catch (e, s) { + _logger.severe("Failed to add location tag", e, s); + } } ///The area bounded by the location tag becomes more elliptical with increase @@ -97,7 +101,7 @@ class LocationService { bool isFileInsideLocationTag( Location centerPoint, Location fileCoordinates, - int radius, + double radius, ) { final a = (radius * _scaleFactor(centerPoint.latitude!)) / kilometersPerDegree; @@ -130,7 +134,7 @@ class LocationService { ///Will only update if there is a change in the locationTag's properties Future updateLocationTag({ required LocalEntity locationTagEntity, - int? newRadius, + double? newRadius, Location? newCenterPoint, String? newName, }) async { @@ -194,19 +198,40 @@ class LocationService { } class GPSData { - final String latRef; - final List lat; - final String longRef; - final List long; + final String? latRef; + final List? lat; + final String? longRef; + final List? long; GPSData(this.latRef, this.lat, this.longRef, this.long); - Location toLocationObj() { - final latSign = latRef == "N" ? 1 : -1; - final longSign = longRef == "E" ? 1 : -1; + Location? toLocationObj() { + final int latSign; + final int longSign; + if (lat == null || long == null) { + return null; + } + if (lat!.length < 3 || long!.length < 3) { + return null; + } + if (latRef == null && longRef == null) { + latSign = lat!.any((element) => element < 0) ? -1 : 1; + longSign = long!.any((element) => element < 0) ? -1 : 1; + + for (var element in lat!) { + lat![lat!.indexOf(element)] = element.abs(); + } + for (var element in long!) { + long![long!.indexOf(element)] = element.abs(); + } + } else { + latSign = latRef == "N" ? 1 : -1; + longSign = longRef == "E" ? 1 : -1; + } + return Location( - latitude: latSign * lat[0] + lat[1] / 60 + lat[2] / 3600, - longitude: longSign * long[0] + long[1] / 60 + long[2] / 3600, + latitude: latSign * (lat![0] + lat![1] / 60 + lat![2] / 3600), + longitude: longSign * (long![0] + long![1] / 60 + long![2] / 3600), ); } } diff --git a/lib/services/search_service.dart b/lib/services/search_service.dart index 96c048173..6fc0e68b5 100644 --- a/lib/services/search_service.dart +++ b/lib/services/search_service.dart @@ -9,13 +9,17 @@ import 'package:photos/models/collection.dart'; import 'package:photos/models/collection_items.dart'; import 'package:photos/models/file.dart'; import 'package:photos/models/file_type.dart'; +import "package:photos/models/local_entity_data.dart"; import "package:photos/models/location_tag/location_tag.dart"; import 'package:photos/models/search/album_search_result.dart'; import 'package:photos/models/search/generic_search_result.dart'; import 'package:photos/models/search/search_result.dart'; import 'package:photos/services/collections_service.dart'; import "package:photos/services/location_service.dart"; +import "package:photos/states/location_screen_state.dart"; +import "package:photos/ui/viewer/location/location_screen.dart"; import 'package:photos/utils/date_time_util.dart'; +import "package:photos/utils/navigation_util.dart"; import 'package:tuple/tuple.dart'; class SearchService { @@ -226,41 +230,82 @@ class SearchService { Future> getLocationResults( String query, ) async { - final locations = - (await LocationService.instance.getLocationTags()).map((e) => e.item); - final Map> result = {}; + final locationTagEntities = + (await LocationService.instance.getLocationTags()); + final Map, List> result = {}; + final bool showNoLocationTag = query.length > 2 && + "No Location Tag".toLowerCase().startsWith(query.toLowerCase()); final List searchResults = []; - for (LocationTag tag in locations) { - if (tag.name.toLowerCase().contains(query.toLowerCase())) { + for (LocalEntity tag in locationTagEntities) { + if (tag.item.name.toLowerCase().contains(query.toLowerCase())) { result[tag] = []; } } - if (result.isEmpty) { + if (result.isEmpty && !showNoLocationTag) { return searchResults; } final allFiles = await _getAllFiles(); for (File file in allFiles) { if (file.hasLocation) { - for (LocationTag tag in result.keys) { + for (LocalEntity tag in result.keys) { if (LocationService.instance.isFileInsideLocationTag( - tag.centerPoint, + tag.item.centerPoint, file.location!, - tag.radius, + tag.item.radius, )) { result[tag]!.add(file); } } } } - for (MapEntry> entry in result.entries) { + if (showNoLocationTag) { + _logger.fine("finding photos with no location"); + // find files that have location but the file's location is not inside + // any location tag + final noLocationTagFiles = allFiles.where((file) { + if (!file.hasLocation) { + return false; + } + for (LocalEntity tag in locationTagEntities) { + if (LocationService.instance.isFileInsideLocationTag( + tag.item.centerPoint, + file.location!, + tag.item.radius, + )) { + return false; + } + } + return true; + }).toList(); + if (noLocationTagFiles.isNotEmpty) { + searchResults.add( + GenericSearchResult( + ResultType.fileType, + "No Location Tag", + noLocationTagFiles, + ), + ); + } + } + for (MapEntry, List> entry + in result.entries) { if (entry.value.isNotEmpty) { searchResults.add( GenericSearchResult( ResultType.location, - entry.key.name, + entry.key.item.name, entry.value, + onResultTap: (ctx) { + routeToPage( + ctx, + LocationScreenStateProvider( + entry.key, + const LocationScreen(), + ), + ); + }, ), ); } diff --git a/lib/services/update_service.dart b/lib/services/update_service.dart index ce989aa2e..486e4493d 100644 --- a/lib/services/update_service.dart +++ b/lib/services/update_service.dart @@ -16,7 +16,7 @@ class UpdateService { static final UpdateService instance = UpdateService._privateConstructor(); static const kUpdateAvailableShownTimeKey = "update_available_shown_time_key"; static const changeLogVersionKey = "update_change_log_key"; - static const currentChangeLogVersion = 7; + static const currentChangeLogVersion = 8; LatestVersionInfo? _latestVersion; final _logger = Logger("UpdateService"); diff --git a/lib/states/location_state.dart b/lib/states/location_state.dart index c2c525c7a..93131a730 100644 --- a/lib/states/location_state.dart +++ b/lib/states/location_state.dart @@ -1,5 +1,6 @@ import "dart:async"; +import "package:collection/collection.dart"; import "package:flutter/material.dart"; import "package:photos/core/constants.dart"; import "package:photos/core/event_bus.dart"; @@ -27,20 +28,29 @@ class LocationTagStateProvider extends StatefulWidget { } class _LocationTagStateProviderState extends State { - int _selectedRaduisIndex = defaultRadiusValueIndex; + late double _selectedRadius; + late Location? _centerPoint; late LocalEntity? _locationTagEntity; final Debouncer _selectedRadiusDebouncer = Debouncer(const Duration(milliseconds: 300)); late final StreamSubscription _locTagEntityListener; + late final List _radiusValues; + @override void initState() { _locationTagEntity = widget.locationTagEntity; _centerPoint = widget.centerPoint; assert(_centerPoint != null || _locationTagEntity != null); _centerPoint = _locationTagEntity?.item.centerPoint ?? _centerPoint!; - _selectedRaduisIndex = - _locationTagEntity?.item.radiusIndex ?? defaultRadiusValueIndex; + + ///If the location tag has a custom radius value, we add the custom radius + ///value to the list of default radius values only for this location tag and + ///keep it in the state of this widget. + _radiusValues = _getRadiusValuesOfLocTag(_locationTagEntity?.item.radius); + + _selectedRadius = _locationTagEntity?.item.radius ?? defaultRadiusValue; + _locTagEntityListener = Bus.instance.on().listen((event) { _locationTagUpdateListener(event); @@ -57,10 +67,11 @@ class _LocationTagStateProviderState extends State { void _locationTagUpdateListener(LocationTagUpdatedEvent event) { if (event.type == LocTagEventType.update) { if (event.updatedLocTagEntities!.first.id == _locationTagEntity!.id) { - //Update state when locationTag is updated. setState(() { final updatedLocTagEntity = event.updatedLocTagEntities!.first; - _selectedRaduisIndex = updatedLocTagEntity.item.radiusIndex; + + _selectedRadius = updatedLocTagEntity.item.radius; + _centerPoint = updatedLocTagEntity.item.centerPoint; _locationTagEntity = updatedLocTagEntity; }); @@ -68,12 +79,12 @@ class _LocationTagStateProviderState extends State { } } - void _updateSelectedIndex(int index) { + void _updateSelectedRadius(double radius) { _selectedRadiusDebouncer.cancelDebounce(); _selectedRadiusDebouncer.run(() async { if (mounted) { setState(() { - _selectedRaduisIndex = index; + _selectedRadius = radius; }); } }); @@ -87,14 +98,42 @@ class _LocationTagStateProviderState extends State { } } + void _updateRadiusValues(List radiusValues) { + if (mounted) { + setState(() { + for (double radiusValue in radiusValues) { + if (!_radiusValues.contains(radiusValue)) { + _radiusValues.add(radiusValue); + } + } + _radiusValues.sort(); + }); + } + } + + ///Returns the list of radius values for the location tag entity. If radius of + ///the location tag is not present in the default list, it returns the list + ///with the custom radius value. + List _getRadiusValuesOfLocTag(double? radiusOfLocTag) { + final radiusValues = [...defaultRadiusValues]; + if (radiusOfLocTag != null && + !defaultRadiusValues.contains(radiusOfLocTag)) { + radiusValues.add(radiusOfLocTag); + radiusValues.sort(); + } + return radiusValues; + } + @override Widget build(BuildContext context) { return InheritedLocationTagData( - _selectedRaduisIndex, + _selectedRadius, _centerPoint!, - _updateSelectedIndex, + _updateSelectedRadius, _locationTagEntity, _updateCenterPoint, + _updateRadiusValues, + _radiusValues, child: widget.child, ); } @@ -102,18 +141,22 @@ class _LocationTagStateProviderState extends State { ///This InheritedWidget's state is used in add & edit location sheets class InheritedLocationTagData extends InheritedWidget { - final int selectedRadiusIndex; + final double selectedRadius; final Location centerPoint; //locationTag is null when we are creating a new location tag in add location sheet final LocalEntity? locationTagEntity; - final VoidCallbackParamInt updateSelectedIndex; + final VoidCallbackParamDouble updateSelectedRadius; final VoidCallbackParamLocation updateCenterPoint; + final VoidCallbackParamListDouble updateRadiusValues; + final List radiusValues; const InheritedLocationTagData( - this.selectedRadiusIndex, + this.selectedRadius, this.centerPoint, - this.updateSelectedIndex, + this.updateSelectedRadius, this.locationTagEntity, - this.updateCenterPoint, { + this.updateCenterPoint, + this.updateRadiusValues, + this.radiusValues, { required super.child, super.key, }); @@ -125,7 +168,10 @@ class InheritedLocationTagData extends InheritedWidget { @override bool updateShouldNotify(InheritedLocationTagData oldWidget) { - return oldWidget.selectedRadiusIndex != selectedRadiusIndex || + print(selectedRadius); + print(oldWidget.selectedRadius != selectedRadius); + return oldWidget.selectedRadius != selectedRadius || + !oldWidget.radiusValues.equals(radiusValues) || oldWidget.centerPoint != centerPoint || oldWidget.locationTagEntity != locationTagEntity; } diff --git a/lib/ui/account/ott_verification_page.dart b/lib/ui/account/ott_verification_page.dart index b0b36cde8..6f2915eeb 100644 --- a/lib/ui/account/ott_verification_page.dart +++ b/lib/ui/account/ott_verification_page.dart @@ -4,6 +4,7 @@ import "package:photos/generated/l10n.dart"; import 'package:photos/services/user_service.dart'; import 'package:photos/ui/common/dynamic_fab.dart'; import 'package:step_progress_indicator/step_progress_indicator.dart'; +import "package:styled_text/styled_text.dart"; class OTTVerificationPage extends StatefulWidget { final String email; @@ -108,24 +109,21 @@ class _OTTVerificationPageState extends State { children: [ Padding( padding: const EdgeInsets.fromLTRB(0, 0, 0, 12), - child: RichText( - text: TextSpan( - style: Theme.of(context) - .textTheme - .subtitle1! - .copyWith(fontSize: 14), - children: [ - TextSpan(text: S.of(context).weveSentAMailTo), - TextSpan( - text: widget.email, - style: TextStyle( - color: Theme.of(context) - .colorScheme - .greenAlternative, - ), - ) - ], - ), + child: StyledText( + text: S.of(context).weHaveSendEmailTo(widget.email), + style: Theme.of(context) + .textTheme + .subtitle1! + .copyWith(fontSize: 14), + tags: { + 'green': StyledTextTag( + style: TextStyle( + color: Theme.of(context) + .colorScheme + .greenAlternative, + ), + ), + }, ), ), Text( diff --git a/lib/ui/account/password_reentry_page.dart b/lib/ui/account/password_reentry_page.dart index 1547f56ac..15c7318df 100644 --- a/lib/ui/account/password_reentry_page.dart +++ b/lib/ui/account/password_reentry_page.dart @@ -246,7 +246,9 @@ class _PasswordReentryPageState extends State { behavior: HitTestBehavior.opaque, onTap: () async { final dialog = createProgressDialog( - context, S.of(context).pleaseWait); + context, + S.of(context).pleaseWait, + ); await dialog.show(); await Configuration.instance.logout(); await dialog.hide(); diff --git a/lib/ui/actions/file/file_actions.dart b/lib/ui/actions/file/file_actions.dart index e88c917fd..9be0e5814 100644 --- a/lib/ui/actions/file/file_actions.dart +++ b/lib/ui/actions/file/file_actions.dart @@ -135,7 +135,11 @@ Future showDetailsSheet(BuildContext context, File file) async { final colorScheme = getEnteColorScheme(context); return showBarModalBottomSheet( topControl: const SizedBox.shrink(), - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(0)), + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(5), + ), + ), backgroundColor: colorScheme.backgroundElevated, barrierColor: backdropFaintDark, context: context, diff --git a/lib/ui/collection_action_sheet.dart b/lib/ui/collection_action_sheet.dart index cae6b2a7a..6841b412f 100644 --- a/lib/ui/collection_action_sheet.dart +++ b/lib/ui/collection_action_sheet.dart @@ -139,7 +139,10 @@ class _CollectionActionSheetState extends State { BottomOfTitleBarWidget( title: TitleBarTitleWidget( title: _actionName( - context, widget.actionType, filesCount), + context, + widget.actionType, + filesCount, + ), ), caption: widget.showOptionToCreateNewAlbum ? S.of(context).createOrSelectAlbum diff --git a/lib/ui/collections/device_folders_grid_view_widget.dart b/lib/ui/collections/device_folders_grid_view_widget.dart index 1bef5404a..0c6ed7344 100644 --- a/lib/ui/collections/device_folders_grid_view_widget.dart +++ b/lib/ui/collections/device_folders_grid_view_widget.dart @@ -9,7 +9,6 @@ import 'package:photos/events/backup_folders_updated_event.dart'; import 'package:photos/events/local_photos_updated_event.dart'; import "package:photos/generated/l10n.dart"; import 'package:photos/models/device_collection.dart'; -import 'package:photos/services/local_sync_service.dart'; import 'package:photos/ui/collections/device_folder_icon_widget.dart'; import 'package:photos/ui/common/loading_widget.dart'; import 'package:photos/ui/viewer/gallery/empty_state.dart'; @@ -51,8 +50,6 @@ class _DeviceFoldersGridViewWidgetState Widget build(BuildContext context) { debugPrint("${(DeviceFoldersGridViewWidget).toString()} - $_loadReason"); final logger = Logger((_DeviceFoldersGridViewWidgetState).toString()); - final bool isMigrationDone = - LocalSyncService.instance.isDeviceFileMigrationDone(); return Padding( padding: const EdgeInsets.symmetric(horizontal: 8), child: SizedBox( @@ -65,13 +62,9 @@ class _DeviceFoldersGridViewWidgetState builder: (context, snapshot) { if (snapshot.hasData) { return snapshot.data!.isEmpty - ? Padding( - padding: const EdgeInsets.all(22), - child: (isMigrationDone - ? const EmptyState() - : EmptyState( - text: S.of(context).importing, - )), + ? const Padding( + padding: EdgeInsets.all(22), + child: EmptyState(), ) : ListView.builder( shrinkWrap: true, diff --git a/lib/ui/collections/section_title.dart b/lib/ui/collections/section_title.dart index 670afa6a5..ce8e1822a 100644 --- a/lib/ui/collections/section_title.dart +++ b/lib/ui/collections/section_title.dart @@ -1,10 +1,12 @@ import 'package:flutter/material.dart'; +import "package:photos/generated/l10n.dart"; import 'package:photos/theme/ente_theme.dart'; import 'package:photos/theme/text_style.dart'; +import "package:styled_text/styled_text.dart"; class SectionTitle extends StatelessWidget { final String? title; - final RichText? titleWithBrand; + final Widget? titleWithBrand; const SectionTitle({ this.title, @@ -40,22 +42,21 @@ class SectionTitle extends StatelessWidget { } } -RichText getOnEnteSection(BuildContext context) { +Widget getOnEnteSection(BuildContext context) { final EnteTextTheme textTheme = getEnteTextTheme(context); - return RichText( - text: TextSpan( - children: [ - TextSpan( - text: "On ", - style: TextStyle( - fontWeight: FontWeight.w600, - fontFamily: 'Inter', - fontSize: 21, - color: textTheme.brandSmall.color, - ), - ), - TextSpan(text: "ente", style: textTheme.brandSmall), - ], + + return StyledText( + text: S.of(context).onEnte, + style: TextStyle( + fontWeight: FontWeight.w600, + fontFamily: 'Inter', + fontSize: 21, + color: textTheme.brandSmall.color, ), + tags: { + 'branding': StyledTextTag( + style: textTheme.brandSmall, + ), + }, ); } diff --git a/lib/ui/collections_gallery_widget.dart b/lib/ui/collections_gallery_widget.dart index 2591138cf..6fe3ef975 100644 --- a/lib/ui/collections_gallery_widget.dart +++ b/lib/ui/collections_gallery_widget.dart @@ -147,7 +147,7 @@ class _CollectionsGalleryWidgetState extends State child: Column( children: [ const SizedBox(height: 12), - const SectionTitle(title: "On device"), + SectionTitle(title: S.of(context).onDevice), const SizedBox(height: 12), const DeviceFoldersGridViewWidget(), Row( diff --git a/lib/ui/collections_list_widget.dart b/lib/ui/collections_list_widget.dart index 9c63fc231..10112ff85 100644 --- a/lib/ui/collections_list_widget.dart +++ b/lib/ui/collections_list_widget.dart @@ -259,7 +259,9 @@ class CollectionsListWidget extends StatelessWidget { ); } showShortToast( - context, S.of(context).thisAlbumAlreadyHDACollaborativeLink); + context, + S.of(context).thisAlbumAlreadyHDACollaborativeLink, + ); return Future.value(false); } else { try { diff --git a/lib/ui/components/album_horizontal_list_widget.dart b/lib/ui/components/album_horizontal_list_widget.dart index 575cd49a7..d89d3ef43 100644 --- a/lib/ui/components/album_horizontal_list_widget.dart +++ b/lib/ui/components/album_horizontal_list_widget.dart @@ -47,56 +47,63 @@ class _AlbumHorizontalListWidgetState extends State { @override Widget build(BuildContext context) { debugPrint('$runtimeType widget build'); - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), - child: Text( - S.of(context).albums, - style: getEnteTextTheme(context).large, - ), - ), - FutureBuilder>( - future: widget.collectionsFuture(), - builder: (context, snapshot) { - if (snapshot.hasError) { - _logger.severe("failed to fetch albums", snapshot.error); - return Text(S.of(context).somethingWentWrong); - } else if (snapshot.hasData) { - if (snapshot.data!.isEmpty) { - return const SizedBox.shrink(); - } - final collectionsWithThumbnail = - snapshot.data as List; - return Align( - alignment: Alignment.centerLeft, - child: SizedBox( - height: 147, //139 + 8 (calculated from figma design) - child: ListView.separated( - separatorBuilder: (context, index) => - const SizedBox(width: 4), - scrollDirection: Axis.horizontal, - itemCount: collectionsWithThumbnail.length, - padding: const EdgeInsets.symmetric(horizontal: 8), - itemBuilder: (context, index) { - final item = collectionsWithThumbnail[index]; - return CollectionItem( - item, - 120, - shouldRender: true, - showFileCount: false, - ); - }, + return FutureBuilder>( + future: widget.collectionsFuture(), + builder: (context, snapshot) { + if (snapshot.hasError) { + _logger.severe("failed to fetch albums", snapshot.error); + return Text(S.of(context).somethingWentWrong); + } else if (snapshot.hasData) { + if (snapshot.data!.isEmpty) { + return const SizedBox.shrink(); + } + final collectionsWithThumbnail = + snapshot.data as List; + return Padding( + padding: const EdgeInsets.only(bottom: 24, top: 8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: + const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + child: Text( + S.of(context).albums, + style: getEnteTextTheme(context).large, ), ), - ); - } else { - return const EnteLoadingWidget(); - } - }, - ), - ], + Align( + alignment: Alignment.centerLeft, + child: SizedBox( + height: 147, //139 + 8 (calculated from figma design) + child: ListView.separated( + separatorBuilder: (context, index) => + const SizedBox(width: 4), + scrollDirection: Axis.horizontal, + itemCount: collectionsWithThumbnail.length, + padding: const EdgeInsets.symmetric(horizontal: 8), + itemBuilder: (context, index) { + final item = collectionsWithThumbnail[index]; + return CollectionItem( + item, + 120, + shouldRender: true, + showFileCount: false, + ); + }, + ), + ), + ), + ], + ), + ); + } else { + return const Padding( + padding: EdgeInsets.only(bottom: 24, top: 8), + child: EnteLoadingWidget(), + ); + } + }, ); } } diff --git a/lib/ui/components/dialog_widget.dart b/lib/ui/components/dialog_widget.dart index a99e0dc9f..9d08569d0 100644 --- a/lib/ui/components/dialog_widget.dart +++ b/lib/ui/components/dialog_widget.dart @@ -1,6 +1,7 @@ import 'dart:math'; import 'package:flutter/material.dart'; +import "package:flutter/services.dart"; import 'package:photos/core/constants.dart'; import "package:photos/generated/l10n.dart"; import "package:photos/models/search/button_result.dart"; @@ -174,6 +175,9 @@ class TextInputDialog extends StatefulWidget { final TextCapitalization? textCapitalization; final bool alwaysShowSuccessState; final bool isPasswordInput; + final TextEditingController? textEditingController; + final List? textInputFormatter; + final TextInputType? textInputType; const TextInputDialog({ required this.title, this.body, @@ -191,6 +195,9 @@ class TextInputDialog extends StatefulWidget { this.showOnlyLoadingState = false, this.alwaysShowSuccessState = false, this.isPasswordInput = false, + this.textEditingController, + this.textInputFormatter, + this.textInputType, super.key, }); @@ -201,10 +208,28 @@ class TextInputDialog extends StatefulWidget { class _TextInputDialogState extends State { //the value of this ValueNotifier has no significance final _submitNotifier = ValueNotifier(false); + late final ValueNotifier _inputIsEmptyNotifier; + late final TextEditingController _textEditingController; + + @override + void initState() { + _textEditingController = + widget.textEditingController ?? TextEditingController(); + _inputIsEmptyNotifier = widget.initialValue?.isEmpty ?? true + ? ValueNotifier(true) + : ValueNotifier(false); + _textEditingController.addListener(() { + if (_textEditingController.text.isEmpty != _inputIsEmptyNotifier.value) { + _inputIsEmptyNotifier.value = _textEditingController.text.isEmpty; + } + }); + super.initState(); + } @override void dispose() { _submitNotifier.dispose(); + _inputIsEmptyNotifier.dispose(); super.dispose(); } @@ -251,6 +276,9 @@ class _TextInputDialogState extends State { textCapitalization: widget.textCapitalization, alwaysShowSuccessState: widget.alwaysShowSuccessState, isPasswordInput: widget.isPasswordInput, + textEditingController: _textEditingController, + textInputFormatter: widget.textInputFormatter, + textInputType: widget.textInputType, ), ), const SizedBox(height: 36), @@ -267,12 +295,18 @@ class _TextInputDialogState extends State { ), const SizedBox(width: 8), Expanded( - child: ButtonWidget( - buttonSize: ButtonSize.small, - buttonType: ButtonType.neutral, - labelText: widget.submitButtonLabel, - onTap: () async { - _submitNotifier.value = !_submitNotifier.value; + child: ValueListenableBuilder( + valueListenable: _inputIsEmptyNotifier, + builder: (context, bool value, _) { + return ButtonWidget( + buttonSize: ButtonSize.small, + buttonType: ButtonType.neutral, + labelText: widget.submitButtonLabel, + isDisabled: value, + onTap: () async { + _submitNotifier.value = !_submitNotifier.value; + }, + ); }, ), ), diff --git a/lib/ui/components/info_item_widget.dart b/lib/ui/components/info_item_widget.dart index 603899523..eb5e84328 100644 --- a/lib/ui/components/info_item_widget.dart +++ b/lib/ui/components/info_item_widget.dart @@ -10,12 +10,14 @@ class InfoItemWidget extends StatelessWidget { final String? title; final Future> subtitleSection; final bool hasChipButtons; + final VoidCallback? onTap; const InfoItemWidget({ required this.leadingIcon, this.editOnTap, this.title, required this.subtitleSection, this.hasChipButtons = false, + this.onTap, super.key, }); @@ -83,10 +85,17 @@ class InfoItemWidget extends StatelessWidget { Flexible( child: Padding( padding: const EdgeInsets.fromLTRB(12, 3.5, 16, 3.5), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: children, + child: GestureDetector( + behavior: HitTestBehavior.translucent, + onTap: onTap, + child: SizedBox( + width: double.infinity, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: children, + ), + ), ), ), ), diff --git a/lib/ui/components/menu_item_widget/menu_item_widget.dart b/lib/ui/components/menu_item_widget/menu_item_widget.dart index 112af62e2..21e88eb40 100644 --- a/lib/ui/components/menu_item_widget/menu_item_widget.dart +++ b/lib/ui/components/menu_item_widget/menu_item_widget.dart @@ -31,6 +31,7 @@ class MenuItemWidget extends StatefulWidget { final double trailingExtraMargin; final FutureVoidCallback? onTap; final VoidCallback? onDoubleTap; + final VoidCallback? onLongPress; final Color? menuItemColor; final bool alignCaptionedTextToLeft; @@ -74,6 +75,7 @@ class MenuItemWidget extends StatefulWidget { this.trailingExtraMargin = 0.0, this.onTap, this.onDoubleTap, + this.onLongPress, this.menuItemColor, this.alignCaptionedTextToLeft = false, this.singleBorderRadius = 4.0, @@ -144,6 +146,7 @@ class _MenuItemWidgetState extends State { : GestureDetector( onTap: _onTap, onDoubleTap: widget.onDoubleTap, + onLongPress: widget.onLongPress, onTapDown: _onTapDown, onTapUp: _onTapUp, onTapCancel: _onCancel, @@ -260,7 +263,9 @@ class _MenuItemWidgetState extends State { } bool hasPassedGestureCallbacks() { - return widget.onDoubleTap != null || widget.onTap != null; + return widget.onDoubleTap != null || + widget.onTap != null || + widget.onLongPress != null; } void _onTapUp(details) { diff --git a/lib/ui/components/text_input_widget.dart b/lib/ui/components/text_input_widget.dart index 1f1b0d5c3..f85ce1184 100644 --- a/lib/ui/components/text_input_widget.dart +++ b/lib/ui/components/text_input_widget.dart @@ -41,6 +41,8 @@ class TextInputWidget extends StatefulWidget { final VoidCallback? onCancel; final TextEditingController? textEditingController; final ValueNotifier? isEmptyNotifier; + final List? textInputFormatter; + final TextInputType? textInputType; const TextInputWidget({ this.onSubmit, this.onChange, @@ -67,6 +69,8 @@ class TextInputWidget extends StatefulWidget { this.onCancel, this.textEditingController, this.isEmptyNotifier, + this.textInputFormatter, + this.textInputType, super.key, }); @@ -90,12 +94,8 @@ class _TextInputWidgetState extends State { widget.cancelNotifier?.addListener(_onCancel); _textController = widget.textEditingController ?? TextEditingController(); - if (widget.initialValue != null) { - _textController.value = TextEditingValue( - text: widget.initialValue!, - selection: TextSelection.collapsed(offset: widget.initialValue!.length), - ); - } + _setInitialValue(); + if (widget.onChange != null) { _textController.addListener(() { widget.onChange!.call(_textController.text); @@ -143,13 +143,15 @@ class _TextInputWidgetState extends State { borderRadius: BorderRadius.all(Radius.circular(widget.borderRadius)), child: Material( child: TextFormField( + keyboardType: widget.textInputType, textCapitalization: widget.textCapitalization!, autofocus: widget.autoFocus ?? false, controller: _textController, focusNode: widget.focusNode, - inputFormatters: widget.maxLength != null - ? [LengthLimitingTextInputFormatter(50)] - : null, + inputFormatters: widget.textInputFormatter ?? + (widget.maxLength != null + ? [LengthLimitingTextInputFormatter(50)] + : null), obscureText: _obscureTextNotifier.value, decoration: InputDecoration( hintText: widget.hintText, @@ -343,6 +345,42 @@ class _TextInputWidgetState extends State { void _popNavigatorStack(BuildContext context, {Exception? e}) { Navigator.of(context).canPop() ? Navigator.of(context).pop(e) : null; } + + void _setInitialValue() { + if (widget.initialValue != null) { + final formattedInitialValue = _formatInitialValue( + widget.initialValue!, + widget.textInputFormatter, + ); + _textController.value = TextEditingValue( + text: formattedInitialValue, + selection: + TextSelection.collapsed(offset: formattedInitialValue.length), + ); + } + } + + String _formatInitialValue( + String initialValue, + List? formatters, + ) { + if (formatters == null || formatters.isEmpty) { + return initialValue; + } + + String formattedValue = initialValue; + + for (final formatter in formatters) { + formattedValue = formatter + .formatEditUpdate( + TextEditingValue.empty, + TextEditingValue(text: formattedValue), + ) + .text; + } + + return formattedValue; + } } //todo: Add clear and custom icon for suffic icon diff --git a/lib/ui/components/title_bar_title_widget.dart b/lib/ui/components/title_bar_title_widget.dart index 139bfb948..a685ea045 100644 --- a/lib/ui/components/title_bar_title_widget.dart +++ b/lib/ui/components/title_bar_title_widget.dart @@ -5,10 +5,12 @@ class TitleBarTitleWidget extends StatelessWidget { final String? title; final bool isTitleH2; final IconData? icon; + final VoidCallback? onTap; const TitleBarTitleWidget({ this.title, this.isTitleH2 = false, this.icon, + this.onTap, super.key, }); @@ -17,8 +19,9 @@ class TitleBarTitleWidget extends StatelessWidget { final textTheme = getEnteTextTheme(context); final colorTheme = getEnteColorScheme(context); if (title != null) { + late final Widget widget; if (icon != null) { - return Row( + widget = Row( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, children: [ @@ -34,20 +37,21 @@ class TitleBarTitleWidget extends StatelessWidget { ); } if (isTitleH2) { - return Text( + widget = Text( title!, style: textTheme.h2Bold, overflow: TextOverflow.ellipsis, maxLines: 1, ); } else { - return Text( + widget = Text( title!, style: textTheme.h3Bold, overflow: TextOverflow.ellipsis, maxLines: 1, ); } + return GestureDetector(onTap: onTap, child: widget); } return const SizedBox.shrink(); diff --git a/lib/ui/components/title_bar_widget.dart b/lib/ui/components/title_bar_widget.dart index 46fbd228d..e967883c1 100644 --- a/lib/ui/components/title_bar_widget.dart +++ b/lib/ui/components/title_bar_widget.dart @@ -149,11 +149,12 @@ class TitleWidget extends StatelessWidget { final String? title; final String? caption; final bool isTitleH2WithoutLeading; - const TitleWidget( - {this.title, - this.caption, - required this.isTitleH2WithoutLeading, - super.key}); + const TitleWidget({ + this.title, + this.caption, + required this.isTitleH2WithoutLeading, + super.key, + }); @override Widget build(BuildContext context) { @@ -189,8 +190,11 @@ class FlexibleSpaceBarWidget extends StatelessWidget { final String? flexibleSpaceCaption; final double toolbarHeight; const FlexibleSpaceBarWidget( - this.flexibleSpaceTitle, this.flexibleSpaceCaption, this.toolbarHeight, - {super.key}); + this.flexibleSpaceTitle, + this.flexibleSpaceCaption, + this.toolbarHeight, { + super.key, + }); @override Widget build(BuildContext context) { diff --git a/lib/ui/home/status_bar_widget.dart b/lib/ui/home/status_bar_widget.dart index f04662588..9b1b3a10a 100644 --- a/lib/ui/home/status_bar_widget.dart +++ b/lib/ui/home/status_bar_widget.dart @@ -101,7 +101,7 @@ class _StatusBarWidgetState extends State { _showErrorBanner ? HeaderErrorWidget(error: _syncError) : const SizedBox.shrink(), - !UserRemoteFlagService.instance.shouldShowRecoveryVerification() + UserRemoteFlagService.instance.shouldShowRecoveryVerification() ? Padding( padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 12), diff --git a/lib/ui/home_widget.dart b/lib/ui/home_widget.dart index 33995704a..441b960c5 100644 --- a/lib/ui/home_widget.dart +++ b/lib/ui/home_widget.dart @@ -23,6 +23,7 @@ import "package:photos/generated/l10n.dart"; import 'package:photos/models/selected_files.dart'; import 'package:photos/services/app_lifecycle_service.dart'; import 'package:photos/services/collections_service.dart'; +import "package:photos/services/entity_service.dart"; import 'package:photos/services/local_sync_service.dart'; import 'package:photos/services/update_service.dart'; import 'package:photos/services/user_service.dart'; @@ -321,6 +322,7 @@ class _HomeWidgetState extends State { return const LandingPageWidget(); } if (!LocalSyncService.instance.hasGrantedPermissions()) { + EntityService.instance.syncEntities(); return const GrantPermissionsWidget(); } if (!LocalSyncService.instance.hasCompletedFirstImport()) { @@ -349,6 +351,7 @@ class _HomeWidgetState extends State { !Configuration.instance.hasSelectedAnyBackupFolder() && !LocalSyncService.instance.hasGrantedLimitedPermissions() && CollectionsService.instance.getActiveCollections().isEmpty; + return Stack( children: [ Builder( diff --git a/lib/ui/notification/update/change_log_page.dart b/lib/ui/notification/update/change_log_page.dart index a548324fc..e2efbc5ec 100644 --- a/lib/ui/notification/update/change_log_page.dart +++ b/lib/ui/notification/update/change_log_page.dart @@ -1,5 +1,3 @@ -import "dart:io"; - import 'package:flutter/material.dart'; import "package:photos/generated/l10n.dart"; import 'package:photos/services/update_service.dart'; @@ -104,41 +102,27 @@ class _ChangeLogPageState extends State { Widget _getChangeLog() { final scrollController = ScrollController(); final List items = []; - items.add( - ChangeLogEntry( - "Referrals ✨", - "You can now double your storage by referring your friends and family. Both you and your loved ones will get 10 GB of storage when " - "they upgrade to a paid plan.\n\nGo to Settings -> General -> " - "Referrals to get started!", - ), - ); - if (Platform.isAndroid) { - items.add( - ChangeLogEntry( - "Pick Files", - "While sharing photos and videos through other apps, ente will now " - "be an option to pick files from. This means you can now easily" - " attach files backed up to ente.\n\nConsider this the first " - "step towards making ente your default gallery app!", - ), - ); - } items.add( ChangeLogEntry( - "Verification ID", - "Security of your end-to-end encryption with those you are sharing your " - "albums with can now be verified, with the help of Verification IDs." - "\n\nPlease click on the Verify button on the album sharing page to learn more.", + "Security Audit", + "It gives us immense joy to announce that ente's source code has been" + " successfully audited by Cure53, in collaboration with Symbolic " + "Software.\n\nTogether they have certified that ente's " + "architecture is sound and that our implementation across all " + "clients is cryptographically accurate.\n\nYou can find more " + "details at ente.io/blog.", ), ); items.add( ChangeLogEntry( - "Prettier Pixels", - "This release is also packed with a bunch of user interface improvements suggested by our community." - "\n\nWe have added more actions to your Memories section, introduced archived albums to your Archived section, improved the experience of the Trash screen and sprinkled a few more improvements here and there.", - isFeature: false, + "Location tags", + "This release includes a fresh, beautiful, privacy-friendly way to " + "search through your photos by location!\n\nTag a photo with a " + "location, define a radius, and ente will automatically cluster " + "all photos clicked within that area.\n\nOpen a photo, and click on" + " the Info button to get started!", ), ); diff --git a/lib/ui/payment/payment_web_page.dart b/lib/ui/payment/payment_web_page.dart index 099204432..3889894c5 100644 --- a/lib/ui/payment/payment_web_page.dart +++ b/lib/ui/payment/payment_web_page.dart @@ -229,7 +229,9 @@ class _PaymentWebPageState extends State { ? S.of(context).yourPurchaseWasSuccessful : S.of(context).yourSubscriptionWasUpdatedSuccessfully; await _showExitPageDialog( - title: S.of(context).thankYou, content: content); + title: S.of(context).thankYou, + content: content, + ); } catch (error) { _logger.severe(error); await _dialog.hide(); diff --git a/lib/ui/settings/general_section_widget.dart b/lib/ui/settings/general_section_widget.dart index 8e3138bc4..c006612fa 100644 --- a/lib/ui/settings/general_section_widget.dart +++ b/lib/ui/settings/general_section_widget.dart @@ -3,6 +3,7 @@ import "package:photos/app.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/l10n/l10n.dart"; import 'package:photos/services/billing_service.dart'; +import "package:photos/services/feature_flag_service.dart"; import 'package:photos/services/user_service.dart'; import 'package:photos/theme/ente_theme.dart'; import 'package:photos/ui/advanced_settings_screen.dart'; @@ -27,21 +28,10 @@ class GeneralSectionWidget extends StatelessWidget { } Widget _getSectionOptions(BuildContext context) { + final bool showLanguageChangeOption = + FeatureFlagService.instance.isInternalUserOrDebugBuild(); return Column( children: [ - sectionOptionSpacing, - MenuItemWidget( - captionedTextWidget: CaptionedTextWidget( - title: S.of(context).familyPlans, - ), - pressedColor: getEnteColorScheme(context).fillFaint, - trailingIcon: Icons.chevron_right_outlined, - trailingIconIsMuted: true, - showOnlyLoadingState: true, - onTap: () async { - await _onFamilyPlansTapped(context); - }, - ), sectionOptionSpacing, MenuItemWidget( captionedTextWidget: CaptionedTextWidget( @@ -59,6 +49,46 @@ class GeneralSectionWidget extends StatelessWidget { }, ), sectionOptionSpacing, + MenuItemWidget( + captionedTextWidget: CaptionedTextWidget( + title: S.of(context).familyPlans, + ), + pressedColor: getEnteColorScheme(context).fillFaint, + trailingIcon: Icons.chevron_right_outlined, + trailingIconIsMuted: true, + showOnlyLoadingState: true, + onTap: () async { + await _onFamilyPlansTapped(context); + }, + ), + sectionOptionSpacing, + showLanguageChangeOption + ? MenuItemWidget( + captionedTextWidget: + CaptionedTextWidget(title: S.of(context).language), + pressedColor: getEnteColorScheme(context).fillFaint, + trailingIcon: Icons.chevron_right_outlined, + trailingIconIsMuted: true, + onTap: () async { + final locale = await getLocale(); + routeToPage( + context, + LanguageSelectorPage( + appSupportedLocales, + (locale) async { + await setLocale(locale); + EnteApp.setLocale(context, locale); + S.load(locale); + }, + locale, + ), + ); + }, + ) + : const SizedBox.shrink(), + showLanguageChangeOption + ? sectionOptionSpacing + : const SizedBox.shrink(), MenuItemWidget( captionedTextWidget: CaptionedTextWidget( title: S.of(context).advanced, @@ -71,29 +101,6 @@ class GeneralSectionWidget extends StatelessWidget { }, ), sectionOptionSpacing, - MenuItemWidget( - captionedTextWidget: - CaptionedTextWidget(title: S.of(context).language), - pressedColor: getEnteColorScheme(context).fillFaint, - trailingIcon: Icons.chevron_right_outlined, - trailingIconIsMuted: true, - onTap: () async { - final locale = await getLocale(); - routeToPage( - context, - LanguageSelectorPage( - appSupportedLocales, - (locale) async { - await setLocale(locale); - EnteApp.setLocale(context, locale); - S.load(locale); - }, - locale, - ), - ); - }, - ), - sectionOptionSpacing, ], ); } diff --git a/lib/ui/settings/support_section_widget.dart b/lib/ui/settings/support_section_widget.dart index 8be5483e2..65c34eb0f 100644 --- a/lib/ui/settings/support_section_widget.dart +++ b/lib/ui/settings/support_section_widget.dart @@ -83,7 +83,7 @@ class SupportSectionWidget extends StatelessWidget { onTap: () async { await sendLogs(context, S.of(context).reportBug, bugsEmail); }, - onDoubleTap: () async { + onLongPress: () async { final zipFilePath = await getZippedLogsFile(context); await shareLogs(context, bugsEmail, zipFilePath); }, diff --git a/lib/ui/sharing/add_partipant_page.dart b/lib/ui/sharing/add_partipant_page.dart index 8c949f8d5..fe6510a5e 100644 --- a/lib/ui/sharing/add_partipant_page.dart +++ b/lib/ui/sharing/add_partipant_page.dart @@ -61,9 +61,11 @@ class _AddParticipantPage extends State { return Scaffold( resizeToAvoidBottomInset: isKeypadOpen, appBar: AppBar( - title: Text(widget.isAddingViewer - ? S.of(context).addViewer - : S.of(context).addCollaborator), + title: Text( + widget.isAddingViewer + ? S.of(context).addViewer + : S.of(context).addCollaborator, + ), ), body: Column( mainAxisAlignment: MainAxisAlignment.start, diff --git a/lib/ui/sharing/manage_album_participant.dart b/lib/ui/sharing/manage_album_participant.dart index 6e62c1c3d..f803185f7 100644 --- a/lib/ui/sharing/manage_album_participant.dart +++ b/lib/ui/sharing/manage_album_participant.dart @@ -116,7 +116,8 @@ class _ManageIndividualParticipantState body: S .of(context) .cannotAddMorePhotosAfterBecomingViewer( - widget.user.email), + widget.user.email, + ), isCritical: true, ); if (actionResult?.action != null) { diff --git a/lib/ui/tools/deduplicate_page.dart b/lib/ui/tools/deduplicate_page.dart index 49e010d92..ad29e33f8 100644 --- a/lib/ui/tools/deduplicate_page.dart +++ b/lib/ui/tools/deduplicate_page.dart @@ -49,16 +49,17 @@ class _DeduplicatePageState extends State { final Map _fileSizeMap = {}; late List _duplicates; bool? _shouldClubByCaptureTime = true; + bool toastShown = false; SortKey sortKey = SortKey.size; @override void initState() { - super.initState(); _duplicates = DeduplicationService.instance.clubDuplicatesByTime(widget.duplicates); _selectAllFilesButFirst(); - showShortToast(context, S.of(context).longpressOnAnItemToViewInFullscreen); + + super.initState(); } void _selectAllFilesButFirst() { @@ -77,6 +78,13 @@ class _DeduplicatePageState extends State { @override Widget build(BuildContext context) { + if (!toastShown) { + toastShown = true; + showShortToast( + context, + S.of(context).longpressOnAnItemToViewInFullscreen, + ); + } _sortDuplicates(); return Scaffold( appBar: AppBar( diff --git a/lib/ui/tools/editor/image_editor_page.dart b/lib/ui/tools/editor/image_editor_page.dart index 493f691c1..7cdd4c6df 100644 --- a/lib/ui/tools/editor/image_editor_page.dart +++ b/lib/ui/tools/editor/image_editor_page.dart @@ -12,6 +12,7 @@ import 'package:photo_manager/photo_manager.dart'; import 'package:photos/core/event_bus.dart'; import 'package:photos/db/files_db.dart'; import 'package:photos/events/local_photos_updated_event.dart'; +import "package:photos/generated/l10n.dart"; import 'package:photos/models/file.dart' as ente; import 'package:photos/models/location/location.dart'; import 'package:photos/services/sync_service.dart'; @@ -64,7 +65,7 @@ class _ImageEditorPageState extends State { return WillPopScope( onWillPop: () async { if (_hasBeenEdited()) { - await _showExitConfirmationDialog(); + await _showExitConfirmationDialog(context); } else { replacePage(context, DetailPage(widget.detailPageConfig)); } @@ -182,7 +183,7 @@ class _ImageEditorPageState extends State { ), const Padding(padding: EdgeInsets.all(2)), Text( - "Flip", + S.of(context).flip, style: subtitle2.copyWith( color: subtitle2.color!.withOpacity(0.8), ), @@ -212,7 +213,7 @@ class _ImageEditorPageState extends State { ), const Padding(padding: EdgeInsets.all(2)), Text( - "Rotate left", + S.of(context).rotateLeft, style: subtitle2.copyWith( color: subtitle2.color!.withOpacity(0.8), ), @@ -242,7 +243,7 @@ class _ImageEditorPageState extends State { ), const Padding(padding: EdgeInsets.all(2)), Text( - "Rotate right", + S.of(context).rotateRight, style: subtitle2.copyWith( color: subtitle2.color!.withOpacity(0.8), ), @@ -272,7 +273,7 @@ class _ImageEditorPageState extends State { ), const Padding(padding: EdgeInsets.all(2)), Text( - "Save copy", + S.of(context).saveCopy, style: subtitle2.copyWith( color: subtitle2.color!.withOpacity(0.8), ), @@ -285,7 +286,7 @@ class _ImageEditorPageState extends State { } Future _saveEdits() async { - final dialog = createProgressDialog(context, "Saving..."); + final dialog = createProgressDialog(context, S.of(context).saving); await dialog.show(); final ExtendedImageEditorState? state = editorKey.currentState; if (state == null) { @@ -304,7 +305,7 @@ class _ImageEditorPageState extends State { if (img == null) { _logger.severe("null rawImageData"); - showToast(context, "Something went wrong"); + showToast(context, S.of(context).somethingWentWrong); return; } @@ -330,7 +331,7 @@ class _ImageEditorPageState extends State { ); if (result == null) { _logger.severe("null result"); - showToast(context, "Something went wrong"); + showToast(context, S.of(context).somethingWentWrong); return; } _logger.info('Size before compression = ${result.length}'); @@ -351,7 +352,7 @@ class _ImageEditorPageState extends State { final AssetEntity? newAsset = await (PhotoManager.editor.saveImage(result, title: fileName)); final newFile = await ente.File.fromAsset( - widget.originalFile.deviceFolder!, + widget.originalFile.deviceFolder ?? '', newAsset!, ); @@ -371,7 +372,7 @@ class _ImageEditorPageState extends State { newFile.generatedID = await FilesDB.instance.insert(newFile); Bus.instance.fire(LocalPhotosUpdatedEvent([newFile], source: "editSave")); SyncService.instance.sync(); - showShortToast(context, "Edits saved"); + showShortToast(context, S.of(context).editsSaved); _logger.info("Original file " + widget.originalFile.toString()); _logger.info("Saved edits to file " + newFile.toString()); final existingFiles = widget.detailPageConfig.files; @@ -398,7 +399,7 @@ class _ImageEditorPageState extends State { ), ); } catch (e, s) { - showToast(context, "Oops, could not save edits"); + showToast(context, S.of(context).oopsCouldNotSaveEdits); _logger.severe(e, s); } finally { PhotoManager.startChangeNotify(); @@ -424,7 +425,7 @@ class _ImageEditorPageState extends State { SizedBox( width: 40, child: Text( - "Color", + S.of(context).color, style: subtitle2.copyWith( color: subtitle2.color!.withOpacity(0.8), ), @@ -470,7 +471,7 @@ class _ImageEditorPageState extends State { SizedBox( width: 40, child: Text( - "Light", + S.of(context).light, style: subtitle2.copyWith( color: subtitle2.color!.withOpacity(0.8), ), @@ -506,20 +507,20 @@ class _ImageEditorPageState extends State { ); } - Future _showExitConfirmationDialog() async { + Future _showExitConfirmationDialog(BuildContext context) async { final actionResult = await showActionSheet( context: context, buttons: [ - const ButtonWidget( - labelText: "Yes, discard changes", + ButtonWidget( + labelText: S.of(context).yesDiscardChanges, buttonType: ButtonType.critical, buttonSize: ButtonSize.large, shouldStickToDarkTheme: true, buttonAction: ButtonAction.first, isInAlert: true, ), - const ButtonWidget( - labelText: "No", + ButtonWidget( + labelText: S.of(context).no, buttonType: ButtonType.secondary, buttonSize: ButtonSize.large, buttonAction: ButtonAction.second, @@ -527,7 +528,7 @@ class _ImageEditorPageState extends State { isInAlert: true, ), ], - body: "Do you want to discard the edits you have made?", + body: S.of(context).doYouWantToDiscardTheEditsYouHaveMade, actionSheetType: ActionSheetType.defaultActionSheet, ); if (actionResult?.action != null && diff --git a/lib/ui/viewer/actions/file_selection_actions_widget.dart b/lib/ui/viewer/actions/file_selection_actions_widget.dart index c1f2aa061..cf3d96473 100644 --- a/lib/ui/viewer/actions/file_selection_actions_widget.dart +++ b/lib/ui/viewer/actions/file_selection_actions_widget.dart @@ -388,7 +388,9 @@ class _FileSelectionActionWidgetState extends State { Future _onCreatedSharedLinkClicked() async { if (split.ownedByCurrentUser.isEmpty) { showShortToast( - context, S.of(context).canOnlyCreateLinkForFilesOwnedByYou); + context, + S.of(context).canOnlyCreateLinkForFilesOwnedByYou, + ); return; } _cachedCollectionForSharedLink ??= await collectionActions diff --git a/lib/ui/viewer/file/fading_app_bar.dart b/lib/ui/viewer/file/fading_app_bar.dart index db9e64ae7..2464c2cc9 100644 --- a/lib/ui/viewer/file/fading_app_bar.dart +++ b/lib/ui/viewer/file/fading_app_bar.dart @@ -162,9 +162,11 @@ class FadingAppBarState extends State { const Padding( padding: EdgeInsets.all(8), ), - Text(isArchived - ? S.of(context).unarchive - : S.of(context).archive), + Text( + isArchived + ? S.of(context).unarchive + : S.of(context).archive, + ), ], ), ), diff --git a/lib/ui/viewer/file/file_details_widget.dart b/lib/ui/viewer/file/file_details_widget.dart index d7d168102..b7fba6c18 100644 --- a/lib/ui/viewer/file/file_details_widget.dart +++ b/lib/ui/viewer/file/file_details_widget.dart @@ -1,10 +1,12 @@ import "package:exif/exif.dart"; -import "package:flutter/cupertino.dart"; import "package:flutter/material.dart"; +import "package:logging/logging.dart"; import "package:photos/core/configuration.dart"; import "package:photos/models/file.dart"; import "package:photos/models/file_type.dart"; +import "package:photos/models/magic_metadata.dart"; import "package:photos/services/feature_flag_service.dart"; +import "package:photos/services/file_magic_service.dart"; import 'package:photos/theme/ente_theme.dart'; import 'package:photos/ui/components/buttons/icon_button_widget.dart'; import "package:photos/ui/components/divider_widget.dart"; @@ -50,20 +52,23 @@ class _FileDetailsWidgetState extends State { bool _isImage = false; late int _currentUserID; bool showExifListTile = false; - bool hasGPSData = false; + final ValueNotifier hasLocationData = ValueNotifier(false); + final Logger _logger = Logger("_FileDetailsWidgetState"); @override void initState() { debugPrint('file_details_sheet initState'); _currentUserID = Configuration.instance.getUserID()!; + hasLocationData.value = widget.file.hasLocation; _isImage = widget.file.fileType == FileType.image || widget.file.fileType == FileType.livePhoto; + _exifNotifier.addListener(() { - if (_exifNotifier.value != null) { - _generateExifForLocation(_exifNotifier.value!); - hasGPSData = _haGPSData(); + if (_exifNotifier.value != null && !widget.file.hasLocation) { + _updateLocationFromExif(_exifNotifier.value!).ignore(); } }); + if (_isImage) { _exifNotifier.addListener(() { if (_exifNotifier.value != null) { @@ -137,25 +142,23 @@ class _FileDetailsWidgetState extends State { }, ), ); - if (FeatureFlagService.instance.isInternalUserOrDebugBuild()) { - fileDetailsTiles.addAll([ - ValueListenableBuilder( - valueListenable: _exifNotifier, - builder: (context, _, __) { - return hasGPSData - ? Column( - children: [ - LocationTagsWidget( - widget.file.location!, - ), - const FileDetailsDivider(), - ], - ) - : const SizedBox.shrink(); - }, - ) - ]); - } + fileDetailsTiles.addAll([ + ValueListenableBuilder( + valueListenable: hasLocationData, + builder: (context, bool value, __) { + return value + ? Column( + children: [ + LocationTagsWidget( + widget.file.location!, + ), + const FileDetailsDivider(), + ], + ) + : const SizedBox.shrink(); + }, + ) + ]); if (_isImage) { fileDetailsTiles.addAll([ ValueListenableBuilder( @@ -231,35 +234,30 @@ class _FileDetailsWidgetState extends State { ); } - bool _haGPSData() { - final fileLocation = widget.file.location; - final hasLocation = (fileLocation != null && - fileLocation.latitude != null && - fileLocation.longitude != null) && - (fileLocation.latitude != 0 || fileLocation.longitude != 0); - return hasLocation; - } - - void _generateExifForLocation(Map exif) { - if (exif["GPS GPSLatitude"] != null) { - _exifData["lat"] = exif["GPS GPSLatitude"]! - .values - .toList() - .map((e) => ((e as Ratio).numerator / e.denominator)) - .toList(); + //This code is for updating the location of files in which location data is + //missing and the EXIF has location data. This is only happens for a + //certain specific minority of devices. + Future _updateLocationFromExif(Map exif) async { + // If the file is not uploaded or the file is not owned by the current user + // then we don't need to update the location. + if (!widget.file.isUploaded || widget.file.ownerID! != _currentUserID) { + return; } - if (exif["GPS GPSLongitude"] != null) { - _exifData["long"] = exif["GPS GPSLongitude"]! - .values - .toList() - .map((e) => ((e as Ratio).numerator / e.denominator)) - .toList(); - } - if (exif["GPS GPSLatitudeRef"] != null) { - _exifData["latRef"] = exif["GPS GPSLatitudeRef"].toString(); - } - if (exif["GPS GPSLongitudeRef"] != null) { - _exifData["longRef"] = exif["GPS GPSLongitudeRef"].toString(); + try { + final locationDataFromExif = locationFromExif(exif); + if (locationDataFromExif?.latitude != null && + locationDataFromExif?.longitude != null) { + widget.file.location = locationDataFromExif; + await FileMagicService.instance.updatePublicMagicMetadata([ + widget.file + ], { + pubMagicKeyLat: locationDataFromExif!.latitude, + pubMagicKeyLong: locationDataFromExif.longitude + }); + hasLocationData.value = true; + } + } catch (e, s) { + _logger.severe("Error while updating location from EXIF", e, s); } } diff --git a/lib/ui/viewer/file_details/location_tags_widget.dart b/lib/ui/viewer/file_details/location_tags_widget.dart index d3d8adb89..2fbc5b7de 100644 --- a/lib/ui/viewer/file_details/location_tags_widget.dart +++ b/lib/ui/viewer/file_details/location_tags_widget.dart @@ -3,11 +3,12 @@ import "dart:async"; import "package:flutter/material.dart"; import "package:photos/core/event_bus.dart"; import "package:photos/events/location_tag_updated_event.dart"; +import "package:photos/generated/l10n.dart"; import "package:photos/models/location/location.dart"; import "package:photos/services/location_service.dart"; import "package:photos/states/location_screen_state.dart"; +import "package:photos/theme/ente_theme.dart"; import "package:photos/ui/components/buttons/chip_button_widget.dart"; -import "package:photos/ui/components/buttons/inline_button_widget.dart"; import "package:photos/ui/components/info_item_widget.dart"; import 'package:photos/ui/viewer/location/add_location_sheet.dart'; import "package:photos/ui/viewer/location/location_screen.dart"; @@ -27,6 +28,7 @@ class _LocationTagsWidgetState extends State { bool? hasChipButtons; late Future> locationTagChips; late StreamSubscription _locTagUpdateListener; + VoidCallback? onTap; @override void initState() { locationTagChips = _getLocationTags(); @@ -55,6 +57,7 @@ class _LocationTagsWidgetState extends State { title: title, subtitleSection: locationTagChips, hasChipButtons: hasChipButtons ?? true, + onTap: onTap, ), ); } @@ -65,54 +68,54 @@ class _LocationTagsWidgetState extends State { if (locationTags.isEmpty) { if (mounted) { setState(() { - title = "Add location"; + title = S.of(context).addLocation; leadingIcon = Icons.add_location_alt_outlined; hasChipButtons = false; + onTap = () => showAddLocationSheet( + context, + widget.centerPoint, + ); }); } - return [ - InlineButtonWidget( - "Group nearby photos", - () => showAddLocationSheet( - context, - widget.centerPoint, - ), - ), + Text( + S.of(context).groupNearbyPhotos, + style: getEnteTextTheme(context).smallMuted, + ) ]; } else { if (mounted) { setState(() { - title = "Location"; + title = S.of(context).location; leadingIcon = Icons.pin_drop_outlined; hasChipButtons = true; + onTap = null; }); } + final result = locationTags + .map( + (locationTagEntity) => ChipButtonWidget( + locationTagEntity.item.name, + onTap: () { + routeToPage( + context, + LocationScreenStateProvider( + locationTagEntity, + const LocationScreen(), + ), + ); + }, + ), + ) + .toList(); + result.add( + ChipButtonWidget( + null, + leadingIcon: Icons.add_outlined, + onTap: () => showAddLocationSheet(context, widget.centerPoint), + ), + ); + return result; } - - final result = locationTags - .map( - (locationTagEntity) => ChipButtonWidget( - locationTagEntity.item.name, - onTap: () { - routeToPage( - context, - LocationScreenStateProvider( - locationTagEntity, - const LocationScreen(), - ), - ); - }, - ), - ) - .toList(); - result.add( - ChipButtonWidget( - null, - leadingIcon: Icons.add_outlined, - onTap: () => showAddLocationSheet(context, widget.centerPoint), - ), - ); - return result; } } diff --git a/lib/ui/viewer/gallery/archive_page.dart b/lib/ui/viewer/gallery/archive_page.dart index dc3c573d7..2d1c93e4b 100644 --- a/lib/ui/viewer/gallery/archive_page.dart +++ b/lib/ui/viewer/gallery/archive_page.dart @@ -67,11 +67,8 @@ class ArchivePage extends StatelessWidget { emptyState: EmptyState( text: S.of(context).youDontHaveAnyArchivedItems, ), - header: Padding( - padding: const EdgeInsets.only(bottom: 24, top: 8), - child: AlbumHorizontalListWidget( - CollectionsService.instance.getArchivedCollectionWithThumb, - ), + header: AlbumHorizontalListWidget( + CollectionsService.instance.getArchivedCollectionWithThumb, ), ); return Scaffold( diff --git a/lib/ui/viewer/gallery/gallery_app_bar_widget.dart b/lib/ui/viewer/gallery/gallery_app_bar_widget.dart index 19f4e9aab..f52d9831f 100644 --- a/lib/ui/viewer/gallery/gallery_app_bar_widget.dart +++ b/lib/ui/viewer/gallery/gallery_app_bar_widget.dart @@ -292,9 +292,11 @@ class _GalleryAppBarWidgetState extends State { const Padding( padding: EdgeInsets.all(8), ), - Text(isArchived - ? S.of(context).unarchiveAlbum - : S.of(context).archiveAlbum), + Text( + isArchived + ? S.of(context).unarchiveAlbum + : S.of(context).archiveAlbum, + ), ], ), ), diff --git a/lib/ui/viewer/location/add_location_sheet.dart b/lib/ui/viewer/location/add_location_sheet.dart index 906dd66b2..04fff36ad 100644 --- a/lib/ui/viewer/location/add_location_sheet.dart +++ b/lib/ui/viewer/location/add_location_sheet.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import "package:modal_bottom_sheet/modal_bottom_sheet.dart"; import "package:photos/core/constants.dart"; +import "package:photos/generated/l10n.dart"; import "package:photos/models/location/location.dart"; import "package:photos/services/location_service.dart"; import 'package:photos/states/location_state.dart'; @@ -50,14 +51,17 @@ class AddLocationSheet extends StatefulWidget { } class _AddLocationSheetState extends State { - //The value of these notifiers has no significance. + //The value of this notifier has no significance. //When memoriesCountNotifier is null, we show the loading widget in the //memories count section which also means the gallery is loading. final ValueNotifier _memoriesCountNotifier = ValueNotifier(null); + + //The value of this notifier has no significance. final ValueNotifier _submitNotifer = ValueNotifier(false); + final ValueNotifier _cancelNotifier = ValueNotifier(false); - final ValueNotifier _selectedRadiusIndexNotifier = - ValueNotifier(defaultRadiusValueIndex); + final ValueNotifier _selectedRadiusNotifier = + ValueNotifier(defaultRadiusValue); final _focusNode = FocusNode(); final _textEditingController = TextEditingController(); final _isEmptyNotifier = ValueNotifier(true); @@ -66,7 +70,7 @@ class _AddLocationSheetState extends State { @override void initState() { _focusNode.addListener(_focusNodeListener); - _selectedRadiusIndexNotifier.addListener(_selectedRadiusIndexListener); + _selectedRadiusNotifier.addListener(_selectedRadiusListener); super.initState(); } @@ -75,7 +79,7 @@ class _AddLocationSheetState extends State { _focusNode.removeListener(_focusNodeListener); _submitNotifer.dispose(); _cancelNotifier.dispose(); - _selectedRadiusIndexNotifier.dispose(); + _selectedRadiusNotifier.dispose(); super.dispose(); } @@ -87,10 +91,10 @@ class _AddLocationSheetState extends State { padding: const EdgeInsets.fromLTRB(0, 32, 0, 8), child: Column( children: [ - const Padding( - padding: EdgeInsets.only(bottom: 16), + Padding( + padding: const EdgeInsets.only(bottom: 16), child: BottomOfTitleBarWidget( - title: TitleBarTitleWidget(title: "Add location"), + title: TitleBarTitleWidget(title: S.of(context).addLocation), ), ), Expanded( @@ -109,7 +113,7 @@ class _AddLocationSheetState extends State { children: [ Expanded( child: TextInputWidget( - hintText: "Location name", + hintText: S.of(context).locationName, borderRadius: 2, focusNode: _focusNode, submitNotifier: _submitNotifer, @@ -117,6 +121,7 @@ class _AddLocationSheetState extends State { popNavAfterSubmission: false, shouldUnfocusOnClearOrSubmit: true, alwaysShowSuccessState: true, + textCapitalization: TextCapitalization.words, textEditingController: _textEditingController, isEmptyNotifier: _isEmptyNotifier, ), @@ -133,7 +138,7 @@ class _AddLocationSheetState extends State { key: ValueKey(value), buttonType: ButtonType.secondary, buttonSize: ButtonSize.small, - labelText: "Add", + labelText: S.of(context).addLocationButton, isDisabled: value, onTap: () async { _focusNode.unfocus(); @@ -147,11 +152,11 @@ class _AddLocationSheetState extends State { ), const SizedBox(height: 24), RadiusPickerWidget( - _selectedRadiusIndexNotifier, + _selectedRadiusNotifier, ), - const SizedBox(height: 24), + const SizedBox(height: 16), Text( - "A location tag groups all photos that were taken within some radius of a photo", + S.of(context).locationTagFeatureDescription, style: textTheme.smallMuted, ), ], @@ -167,7 +172,7 @@ class _AddLocationSheetState extends State { padding: const EdgeInsets.symmetric(horizontal: 16), child: ValueListenableBuilder( valueListenable: _memoriesCountNotifier, - builder: (context, value, _) { + builder: (context, int? value, _) { Widget widget; if (value == null) { widget = RepaintBoundary( @@ -184,14 +189,14 @@ class _AddLocationSheetState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - value == 1 ? "1 memory" : "$value memories", + S.of(context).memoryCount(value), style: textTheme.body, ), - if (value as int > 1000) + if (value > 1000) Padding( padding: const EdgeInsets.only(top: 2), child: Text( - "Up to 1000 memories shown in gallery", + S.of(context).galleryMemoryLimitInfo, style: textTheme.miniMuted, ), ), @@ -228,7 +233,8 @@ class _AddLocationSheetState extends State { Future _addLocationTag() async { final locationData = InheritedLocationTagData.of(context); final coordinates = locationData.centerPoint; - final radius = radiusValues[locationData.selectedRadiusIndex]; + final radius = locationData.selectedRadius; + await LocationService.instance.addLocation( _textEditingController.text.trim(), coordinates, @@ -254,11 +260,11 @@ class _AddLocationSheetState extends State { } } - void _selectedRadiusIndexListener() { + void _selectedRadiusListener() { InheritedLocationTagData.of( context, - ).updateSelectedIndex( - _selectedRadiusIndexNotifier.value, + ).updateSelectedRadius( + _selectedRadiusNotifier.value, ); _memoriesCountNotifier.value = null; } diff --git a/lib/ui/viewer/location/dynamic_location_gallery_widget.dart b/lib/ui/viewer/location/dynamic_location_gallery_widget.dart index d230f04ed..6f9793b3e 100644 --- a/lib/ui/viewer/location/dynamic_location_gallery_widget.dart +++ b/lib/ui/viewer/location/dynamic_location_gallery_widget.dart @@ -39,7 +39,8 @@ class _DynamicLocationGalleryWidgetState void initState() { final collectionsToHide = CollectionsService.instance.collectionsHiddenFromTimeline(); - fileLoadResult = FilesDB.instance.getAllUploadedAndSharedFiles( + fileLoadResult = + FilesDB.instance.fetchAllUploadedAndSharedFilesWithLocation( galleryLoadStartTime, galleryLoadEndTime, limit: null, @@ -54,7 +55,7 @@ class _DynamicLocationGalleryWidgetState @override Widget build(BuildContext context) { const galleryFilesLimit = 1000; - final selectedRadius = _selectedRadius(); + final selectedRadius = InheritedLocationTagData.of(context).selectedRadius; Future filterFiles() async { final FileLoadResult result = await fileLoadResult; //wait for ignored files to be removed after init @@ -120,11 +121,6 @@ class _DynamicLocationGalleryWidgetState ); } - int _selectedRadius() { - return radiusValues[ - InheritedLocationTagData.of(context).selectedRadiusIndex]; - } - double _galleryHeight(int fileCount) { final photoGridSize = LocalSettings.instance.getPhotoGridSize(); final totalWhiteSpaceBetweenPhotos = diff --git a/lib/ui/viewer/location/edit_center_point_tile_widget.dart b/lib/ui/viewer/location/edit_center_point_tile_widget.dart index a4e3e02d4..c9e9af853 100644 --- a/lib/ui/viewer/location/edit_center_point_tile_widget.dart +++ b/lib/ui/viewer/location/edit_center_point_tile_widget.dart @@ -1,8 +1,10 @@ import "package:flutter/material.dart"; +import "package:photos/generated/l10n.dart"; import "package:photos/models/file.dart"; import "package:photos/services/location_service.dart"; import "package:photos/states/location_state.dart"; import "package:photos/theme/ente_theme.dart"; +import "package:photos/ui/components/buttons/icon_button_widget.dart"; import "package:photos/ui/viewer/location/pick_center_point_widget.dart"; class EditCenterPointTileWidget extends StatelessWidget { @@ -15,8 +17,8 @@ class EditCenterPointTileWidget extends StatelessWidget { return Row( children: [ Container( - width: 48, - height: 48, + width: 52, + height: 52, color: colorScheme.fillFaint, child: Icon( Icons.location_on_outlined, @@ -32,16 +34,13 @@ class EditCenterPointTileWidget extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - "Center point", + S.of(context).centerPoint, style: textTheme.body, ), const SizedBox(height: 4), Text( LocationService.instance.convertLocationToDMS( - InheritedLocationTagData.of(context) - .locationTagEntity! - .item - .centerPoint, + InheritedLocationTagData.of(context).centerPoint, ), style: textTheme.miniMuted, ), @@ -49,8 +48,8 @@ class EditCenterPointTileWidget extends StatelessWidget { ), ), ), - IconButton( - onPressed: () async { + IconButtonWidget( + onTap: () async { final File? centerPointFile = await showPickCenterPointSheet( context, InheritedLocationTagData.of(context).locationTagEntity!, @@ -60,8 +59,8 @@ class EditCenterPointTileWidget extends StatelessWidget { .updateCenterPoint(centerPointFile.location!); } }, - icon: const Icon(Icons.edit), - color: getEnteColorScheme(context).strokeMuted, + icon: Icons.edit, + iconButtonType: IconButtonType.secondary, ), ], ); diff --git a/lib/ui/viewer/location/edit_location_sheet.dart b/lib/ui/viewer/location/edit_location_sheet.dart index 2506bb8be..78458cea2 100644 --- a/lib/ui/viewer/location/edit_location_sheet.dart +++ b/lib/ui/viewer/location/edit_location_sheet.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import "package:modal_bottom_sheet/modal_bottom_sheet.dart"; import "package:photos/core/constants.dart"; +import "package:photos/generated/l10n.dart"; import "package:photos/models/local_entity_data.dart"; import "package:photos/models/location_tag/location_tag.dart"; import "package:photos/services/location_service.dart"; @@ -60,8 +61,8 @@ class _EditLocationSheetState extends State { final ValueNotifier _memoriesCountNotifier = ValueNotifier(null); final ValueNotifier _submitNotifer = ValueNotifier(false); final ValueNotifier _cancelNotifier = ValueNotifier(false); - final ValueNotifier _selectedRadiusIndexNotifier = - ValueNotifier(defaultRadiusValueIndex); + final ValueNotifier _selectedRadiusNotifier = + ValueNotifier(defaultRadiusValue); final _focusNode = FocusNode(); final _textEditingController = TextEditingController(); final _isEmptyNotifier = ValueNotifier(false); @@ -70,7 +71,7 @@ class _EditLocationSheetState extends State { @override void initState() { _focusNode.addListener(_focusNodeListener); - _selectedRadiusIndexNotifier.addListener(_selectedRadiusIndexListener); + _selectedRadiusNotifier.addListener(_selectedRadiusListener); super.initState(); } @@ -79,7 +80,7 @@ class _EditLocationSheetState extends State { _focusNode.removeListener(_focusNodeListener); _submitNotifer.dispose(); _cancelNotifier.dispose(); - _selectedRadiusIndexNotifier.dispose(); + _selectedRadiusNotifier.dispose(); super.dispose(); } @@ -115,7 +116,7 @@ class _EditLocationSheetState extends State { children: [ Expanded( child: TextInputWidget( - hintText: "Location name", + hintText: S.of(context).locationName, borderRadius: 2, focusNode: _focusNode, submitNotifier: _submitNotifer, @@ -145,7 +146,7 @@ class _EditLocationSheetState extends State { key: ValueKey(value), buttonType: ButtonType.secondary, buttonSize: ButtonSize.small, - labelText: "Save", + labelText: S.of(context).save, isDisabled: value, onTap: () async { _focusNode.unfocus(); @@ -161,9 +162,9 @@ class _EditLocationSheetState extends State { const EditCenterPointTileWidget(), const SizedBox(height: 20), RadiusPickerWidget( - _selectedRadiusIndexNotifier, + _selectedRadiusNotifier, ), - const SizedBox(height: 24), + const SizedBox(height: 16), ], ), ), @@ -177,7 +178,7 @@ class _EditLocationSheetState extends State { padding: const EdgeInsets.symmetric(horizontal: 16), child: ValueListenableBuilder( valueListenable: _memoriesCountNotifier, - builder: (context, value, _) { + builder: (context, int? value, _) { Widget widget; if (value == null) { widget = RepaintBoundary( @@ -194,14 +195,14 @@ class _EditLocationSheetState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - value == 1 ? "1 memory" : "$value memories", + S.of(context).memoryCount(value), style: textTheme.body, ), - if (value as int > 1000) + if (value > 1000) Padding( padding: const EdgeInsets.only(top: 2), child: Text( - "Up to 1000 memories shown in gallery", + S.of(context).galleryMemoryLimitInfo, style: textTheme.miniMuted, ), ), @@ -239,7 +240,7 @@ class _EditLocationSheetState extends State { final locationTagState = InheritedLocationTagData.of(context); await LocationService.instance.updateLocationTag( locationTagEntity: locationTagState.locationTagEntity!, - newRadius: radiusValues[locationTagState.selectedRadiusIndex], + newRadius: locationTagState.selectedRadius, newName: _textEditingController.text.trim(), newCenterPoint: InheritedLocationTagData.of(context).centerPoint, ); @@ -263,11 +264,11 @@ class _EditLocationSheetState extends State { } } - void _selectedRadiusIndexListener() { + void _selectedRadiusListener() { InheritedLocationTagData.of( context, - ).updateSelectedIndex( - _selectedRadiusIndexNotifier.value, + ).updateSelectedRadius( + _selectedRadiusNotifier.value, ); _memoriesCountNotifier.value = null; } diff --git a/lib/ui/viewer/location/location_screen.dart b/lib/ui/viewer/location/location_screen.dart index 3365952c7..428f0d34e 100644 --- a/lib/ui/viewer/location/location_screen.dart +++ b/lib/ui/viewer/location/location_screen.dart @@ -5,6 +5,7 @@ import "package:photos/core/event_bus.dart"; import "package:photos/db/files_db.dart"; import "package:photos/events/files_updated_event.dart"; import "package:photos/events/local_photos_updated_event.dart"; +import "package:photos/generated/l10n.dart"; import "package:photos/models/file.dart"; import "package:photos/models/file_load_result.dart"; import "package:photos/models/gallery_type.dart"; @@ -82,7 +83,7 @@ class LocationScreenPopUpMenu extends StatelessWidget { PopupMenuItem( value: "edit", child: Text( - "Edit", + S.of(context).edit, style: textTheme.bodyBold, ), ), @@ -90,7 +91,7 @@ class LocationScreenPopUpMenu extends StatelessWidget { onTap: () {}, value: "delete", child: Text( - "Delete Location", + S.of(context).deleteLocation, style: textTheme.bodyBold.copyWith(color: warning500), ), ), @@ -135,7 +136,8 @@ class _LocationGalleryWidgetState extends State { void initState() { final collectionsToHide = CollectionsService.instance.collectionsHiddenFromTimeline(); - fileLoadResult = FilesDB.instance.getAllUploadedAndSharedFiles( + fileLoadResult = + FilesDB.instance.fetchAllUploadedAndSharedFilesWithLocation( galleryLoadStartTime, galleryLoadEndTime, limit: null, @@ -270,11 +272,17 @@ class _GalleryHeaderWidgetState extends State { width: double.infinity, child: TitleBarTitleWidget( title: locationName, + onTap: () { + showEditLocationSheet( + context, + InheritedLocationScreenState.of(context).locationTagEntity, + ); + }, ), ), ValueListenableBuilder( valueListenable: InheritedLocationScreenState.memoryCountNotifier, - builder: (context, value, _) { + builder: (context, int? value, _) { if (value == null) { return RepaintBoundary( child: EnteLoadingWidget( @@ -286,7 +294,7 @@ class _GalleryHeaderWidgetState extends State { ); } else { return Text( - value == 1 ? "1 memory" : "$value memories", + S.of(context).memoryCount(value), style: getEnteTextTheme(context).smallMuted, ); } diff --git a/lib/ui/viewer/location/pick_center_point_widget.dart b/lib/ui/viewer/location/pick_center_point_widget.dart index d046fbfea..2e3762cb2 100644 --- a/lib/ui/viewer/location/pick_center_point_widget.dart +++ b/lib/ui/viewer/location/pick_center_point_widget.dart @@ -2,8 +2,11 @@ import "dart:math"; import "package:flutter/material.dart"; import "package:modal_bottom_sheet/modal_bottom_sheet.dart"; -import "package:photos/core/configuration.dart"; +import "package:photos/core/constants.dart"; +import "package:photos/core/event_bus.dart"; import "package:photos/db/files_db.dart"; +import "package:photos/events/local_photos_updated_event.dart"; +import "package:photos/generated/l10n.dart"; import "package:photos/models/file.dart"; import "package:photos/models/file_load_result.dart"; import "package:photos/models/local_entity_data.dart"; @@ -75,8 +78,8 @@ class PickCenterPointWidget extends StatelessWidget { child: Column( children: [ BottomOfTitleBarWidget( - title: const TitleBarTitleWidget( - title: "Pick center point", + title: TitleBarTitleWidget( + title: S.of(context).pickCenterPoint, ), caption: locationTagEntity.item.name, ), @@ -88,38 +91,20 @@ class PickCenterPointWidget extends StatelessWidget { limit, asc, }) async { - final ownerID = - Configuration.instance.getUserID(); - final hasSelectedAllForBackup = Configuration - .instance - .hasSelectedAllFoldersForBackup(); final collectionsToHide = CollectionsService .instance .collectionsHiddenFromTimeline(); FileLoadResult result; - if (hasSelectedAllForBackup) { - result = await FilesDB.instance - .getAllLocalAndUploadedFiles( - creationStartTime, - creationEndTime, - ownerID!, - limit: limit, - asc: asc, - ignoredCollectionIDs: collectionsToHide, - ); - } else { - result = await FilesDB.instance - .getAllPendingOrUploadedFiles( - creationStartTime, - creationEndTime, - ownerID!, - limit: limit, - asc: asc, - ignoredCollectionIDs: collectionsToHide, - ); - } + result = await FilesDB.instance + .fetchAllUploadedAndSharedFilesWithLocation( + galleryLoadStartTime, + galleryLoadEndTime, + limit: null, + asc: false, + ignoredCollectionIDs: collectionsToHide, + ); - // hide ignored files from home page UI + // hide ignored files from UI final ignoredIDs = await IgnoredFilesService.instance.ignoredIDs; result.files.removeWhere( @@ -130,6 +115,8 @@ class PickCenterPointWidget extends StatelessWidget { ); return result; }, + reloadEvent: + Bus.instance.on(), tagPrefix: "pick_center_point_gallery", selectedFiles: selectedFiles, limitSelectionToOne: true, @@ -162,7 +149,7 @@ class PickCenterPointWidget extends StatelessWidget { key: ValueKey(value), isDisabled: !value, buttonType: ButtonType.neutral, - labelText: "Use selected photo", + labelText: S.of(context).useSelectedPhoto, onTap: () async { final selectedFile = selectedFiles.files.first; @@ -176,7 +163,7 @@ class PickCenterPointWidget extends StatelessWidget { ButtonWidget( buttonType: ButtonType.secondary, buttonAction: ButtonAction.cancel, - labelText: "Cancel", + labelText: S.of(context).cancel, onTap: () async { Navigator.of(context).pop(); }, diff --git a/lib/ui/viewer/location/radius_picker_widget.dart b/lib/ui/viewer/location/radius_picker_widget.dart index 89bd621b7..99d79a6e3 100644 --- a/lib/ui/viewer/location/radius_picker_widget.dart +++ b/lib/ui/viewer/location/radius_picker_widget.dart @@ -1,8 +1,11 @@ import "package:flutter/material.dart"; -import "package:photos/core/constants.dart"; +import "package:flutter/services.dart"; +import "package:logging/logging.dart"; +import "package:photos/generated/l10n.dart"; import "package:photos/states/location_state.dart"; import "package:photos/theme/colors.dart"; import "package:photos/theme/ente_theme.dart"; +import "package:photos/utils/dialog_util.dart"; class CustomTrackShape extends RoundedRectSliderTrackShape { @override @@ -20,11 +23,11 @@ class CustomTrackShape extends RoundedRectSliderTrackShape { } class RadiusPickerWidget extends StatefulWidget { - ///This notifier can be listened to get the selected radius index from - ///a parent widget. - final ValueNotifier selectedRadiusIndexNotifier; + ///This notifier can be listened from a parent widget to get the selected radius + final ValueNotifier selectedRadiusNotifier; + const RadiusPickerWidget( - this.selectedRadiusIndexNotifier, { + this.selectedRadiusNotifier, { super.key, }); @@ -33,6 +36,7 @@ class RadiusPickerWidget extends StatefulWidget { } class _RadiusPickerWidgetState extends State { + final _logger = Logger("RadiusPickerWidget"); @override void initState() { super.initState(); @@ -40,50 +44,62 @@ class _RadiusPickerWidgetState extends State { @override void didChangeDependencies() { - widget.selectedRadiusIndexNotifier.value = - InheritedLocationTagData.of(context).selectedRadiusIndex; + widget.selectedRadiusNotifier.value = + InheritedLocationTagData.of(context).selectedRadius; super.didChangeDependencies(); } @override Widget build(BuildContext context) { - final selectedRadiusIndex = widget.selectedRadiusIndexNotifier.value; - final radiusValue = radiusValues[selectedRadiusIndex]; + final radiusValues = InheritedLocationTagData.of(context).radiusValues; + final selectedRadius = widget.selectedRadiusNotifier.value; final textTheme = getEnteTextTheme(context); final colorScheme = getEnteColorScheme(context); + final roundedRadius = roundRadius(selectedRadius); return Row( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Container( - height: 48, - width: 48, - decoration: BoxDecoration( - color: colorScheme.fillFaint, - borderRadius: const BorderRadius.all(Radius.circular(2)), - ), - padding: const EdgeInsets.all(4), - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - flex: 6, - child: Text( - radiusValue.toString(), - style: radiusValue != 1200 - ? textTheme.largeBold - : textTheme.bodyBold, - textAlign: TextAlign.center, - ), + GestureDetector( + onTap: _customRadiusOnTap, + child: Container( + height: 52, + width: 52, + decoration: BoxDecoration( + color: colorScheme.fillFaint, + borderRadius: const BorderRadius.all(Radius.circular(2)), + border: Border.all( + color: colorScheme.strokeFainter, + width: 1, + strokeAlign: BorderSide.strokeAlignInside, ), - Expanded( - flex: 5, - child: Text( - "km", - style: textTheme.miniMuted, + ), + padding: const EdgeInsets.all(4), + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + flex: 6, + child: Center( + child: Text( + roundedRadius, + style: double.parse(roundedRadius) < 1000 + ? textTheme.largeBold + : textTheme.bodyBold, + textAlign: TextAlign.center, + ), + ), ), - ), - ], + Expanded( + flex: 5, + child: Text( + S.of(context).kiloMeterUnit, + style: textTheme.miniMuted, + ), + ), + ], + ), ), ), const SizedBox(width: 4), @@ -94,10 +110,11 @@ class _RadiusPickerWidgetState extends State { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - Text("Radius", style: textTheme.body), - const SizedBox(height: 10), + const SizedBox(height: 4), + Text(S.of(context).radius, style: textTheme.body), + const SizedBox(height: 16), SizedBox( - height: 12, + height: 16, child: SliderTheme( data: SliderThemeData( overlayColor: Colors.transparent, @@ -118,11 +135,11 @@ class _RadiusPickerWidgetState extends State { ), child: RepaintBoundary( child: Slider( - value: selectedRadiusIndex.toDouble(), + value: radiusValues.indexOf(selectedRadius).toDouble(), onChanged: (value) { setState(() { - widget.selectedRadiusIndexNotifier.value = - value.toInt(); + widget.selectedRadiusNotifier.value = + radiusValues[value.toInt()]; }); }, min: 0, @@ -139,4 +156,82 @@ class _RadiusPickerWidgetState extends State { ], ); } + + //9.99 -> 10, 9.0 -> 9, 5.02 -> 5, 5.09 -> 5.1 + //12.3 -> 12, 121.65 -> 122, 999.9 -> 1000 + String roundRadius(double radius) { + String result; + final roundedRadius = (radius * 10).round() / 10; + if (radius >= 10) { + result = roundedRadius.toStringAsFixed(0); + } else { + if (roundedRadius == roundedRadius.truncate()) { + result = roundedRadius.truncate().toString(); + } else { + result = roundedRadius.toStringAsFixed(1); + } + } + + return result; + } + + Future _customRadiusOnTap() async { + final result = await showTextInputDialog( + context, + title: "Custom radius", + onSubmit: (customRadius) async { + final radius = double.tryParse(customRadius); + if (radius != null) { + final locationTagState = InheritedLocationTagData.of(context); + locationTagState.updateRadiusValues([radius]); + if (mounted) { + setState(() { + widget.selectedRadiusNotifier.value = radius; + }); + } + } else { + throw Exception("Radius is null"); + } + }, + submitButtonLabel: "Done", + textInputFormatter: [NumberWithDecimalInputFormatter(maxValue: 10000)], + textInputType: const TextInputType.numberWithOptions(decimal: true), + message: "km", + alignMessage: Alignment.centerRight, + ); + if (result is Exception) { + await showGenericErrorDialog(context: context); + _logger.severe( + "Failed to create custom radius", + result, + ); + } + } +} + +class NumberWithDecimalInputFormatter extends TextInputFormatter { + final RegExp _pattern = RegExp(r'^(?:\d+(\.\d*)?)?$'); + final double maxValue; + + NumberWithDecimalInputFormatter({required this.maxValue}); + + @override + TextEditingValue formatEditUpdate( + TextEditingValue oldValue, + TextEditingValue newValue, + ) { + // Check if the new value matches the pattern + if (_pattern.hasMatch(newValue.text)) { + if (newValue.text.isEmpty) { + return newValue; + } + final newValueAsDouble = double.tryParse(newValue.text); + + // Check if the new value is within the allowed range + if (newValueAsDouble != null && newValueAsDouble <= maxValue) { + return newValue; + } + } + return oldValue; + } } diff --git a/lib/ui/viewer/search/search_suggestions.dart b/lib/ui/viewer/search/search_suggestions.dart index caea58bd0..e4b5ba64f 100644 --- a/lib/ui/viewer/search/search_suggestions.dart +++ b/lib/ui/viewer/search/search_suggestions.dart @@ -74,7 +74,12 @@ class SearchSuggestionsWidget extends StatelessWidget { } else if (result is FileSearchResult) { return FileSearchResultWidget(result); } else if (result is GenericSearchResult) { - return SearchResultWidget(result); + return SearchResultWidget( + result, + onResultTap: result.onResultTap != null + ? () => result.onResultTap!(context) + : null, + ); } else { Logger('SearchSuggestionsWidget') .info("Invalid/Unsupported value"); diff --git a/lib/ui/viewer/search/search_widget.dart b/lib/ui/viewer/search/search_widget.dart index ed206f486..ea1513e08 100644 --- a/lib/ui/viewer/search/search_widget.dart +++ b/lib/ui/viewer/search/search_widget.dart @@ -221,13 +221,6 @@ class _SearchWidgetState extends State { await _searchService.getCollectionSearchResults(query); allResults.addAll(collectionResults); - // if (FeatureFlagService.instance.isInternalUserOrDebugBuild() && - // query.startsWith("l:")) { - // final locationResults = await _searchService - // .getLocationSearchResults(query.replaceAll("l:", "")); - // allResults.addAll(locationResults); - // } - final monthResults = await _searchService.getMonthSearchResults(query); allResults.addAll(monthResults); diff --git a/lib/utils/dialog_util.dart b/lib/utils/dialog_util.dart index 740d6df3d..2c012bed8 100644 --- a/lib/utils/dialog_util.dart +++ b/lib/utils/dialog_util.dart @@ -3,6 +3,7 @@ import 'dart:math'; import 'package:confetti/confetti.dart'; import "package:dio/dio.dart"; import 'package:flutter/material.dart'; +import "package:flutter/services.dart"; import 'package:photos/core/constants.dart'; import "package:photos/generated/l10n.dart"; import "package:photos/models/search/button_result.dart"; @@ -303,6 +304,9 @@ Future showTextInputDialog( TextCapitalization textCapitalization = TextCapitalization.none, bool alwaysShowSuccessState = false, bool isPasswordInput = false, + TextEditingController? textEditingController, + List? textInputFormatter, + TextInputType? textInputType, }) { return showDialog( barrierColor: backdropFaintDark, @@ -330,6 +334,9 @@ Future showTextInputDialog( textCapitalization: textCapitalization, alwaysShowSuccessState: alwaysShowSuccessState, isPasswordInput: isPasswordInput, + textEditingController: textEditingController, + textInputFormatter: textInputFormatter, + textInputType: textInputType, ), ), ); diff --git a/lib/utils/exif_util.dart b/lib/utils/exif_util.dart index e6369a801..27e667e47 100644 --- a/lib/utils/exif_util.dart +++ b/lib/utils/exif_util.dart @@ -4,6 +4,8 @@ import 'package:exif/exif.dart'; import 'package:intl/intl.dart'; import 'package:logging/logging.dart'; import 'package:photos/models/file.dart'; +import "package:photos/models/location/location.dart"; +import "package:photos/services/location_service.dart"; import 'package:photos/utils/file_util.dart'; const kDateTimeOriginal = "EXIF DateTimeOriginal"; @@ -30,9 +32,23 @@ Future> getExif(File file) async { } } -Future getCreationTimeFromEXIF(io.File file) async { +Future?> getExifFromSourceFile(io.File originFile) async { try { - final exif = await readExifFromFile(file); + final exif = await readExifFromFile(originFile); + return exif; + } catch (e, s) { + _logger.severe("failed to get exif from origin file", e, s); + return null; + } +} + +Future getCreationTimeFromEXIF( + io.File? file, + Map? exifData, +) async { + try { + assert(file != null || exifData != null); + final exif = exifData ?? await readExifFromFile(file!); final exifTime = exif.containsKey(kDateTimeOriginal) ? exif[kDateTimeOriginal]!.printable : exif.containsKey(kImageDateTime) @@ -46,3 +62,57 @@ Future getCreationTimeFromEXIF(io.File file) async { } return null; } + +Location? locationFromExif(Map exif) { + try { + return _gpsDataFromExif(exif).toLocationObj(); + } catch (e, s) { + _logger.severe("failed to get location from exif", e, s); + return null; + } +} + +Future tryLocationFromExif(File file) async { + try { + final exif = await getExif(file); + return locationFromExif(exif); + } catch (e) { + _logger.severe("failed to get location from exif", e); + return null; + } +} + +GPSData _gpsDataFromExif(Map exif) { + final Map exifLocationData = { + "lat": null, + "long": null, + "latRef": null, + "longRef": null, + }; + if (exif["GPS GPSLatitude"] != null) { + exifLocationData["lat"] = exif["GPS GPSLatitude"]! + .values + .toList() + .map((e) => ((e as Ratio).numerator / e.denominator)) + .toList(); + } + if (exif["GPS GPSLongitude"] != null) { + exifLocationData["long"] = exif["GPS GPSLongitude"]! + .values + .toList() + .map((e) => ((e as Ratio).numerator / e.denominator)) + .toList(); + } + if (exif["GPS GPSLatitudeRef"] != null) { + exifLocationData["latRef"] = exif["GPS GPSLatitudeRef"].toString(); + } + if (exif["GPS GPSLongitudeRef"] != null) { + exifLocationData["longRef"] = exif["GPS GPSLongitudeRef"].toString(); + } + return GPSData( + exifLocationData["latRef"], + exifLocationData["lat"], + exifLocationData["longRef"], + exifLocationData["long"], + ); +} diff --git a/lib/utils/file_uploader.dart b/lib/utils/file_uploader.dart index f87be570a..175752d77 100644 --- a/lib/utils/file_uploader.dart +++ b/lib/utils/file_uploader.dart @@ -307,10 +307,16 @@ class FileUploader { debugPrint("File is already uploaded ${fileOnDisk.tag}"); return fileOnDisk; } + if ((file.localID ?? '') == '') { + _logger.severe('Trying to upload file with missing localID'); + return file; + } + + final String lockKey = file.localID!; try { await _uploadLocks.acquireLock( - file.localID!, + lockKey, _processType.toString(), DateTime.now().microsecondsSinceEpoch, ); @@ -515,6 +521,7 @@ class FileUploader { file, encryptedFilePath, encryptedThumbnailPath, + lockKey: lockKey, ); } } @@ -655,8 +662,9 @@ class FileUploader { bool uploadHardFailure, File file, String encryptedFilePath, - String encryptedThumbnailPath, - ) async { + String encryptedThumbnailPath, { + required String lockKey, + }) async { if (mediaUploadData != null && mediaUploadData.sourceFile != null) { // delete the file from app's internal cache if it was copied to app // for upload. On iOS, only remove the file from photo_manager/app cache @@ -674,7 +682,7 @@ class FileUploader { if (io.File(encryptedThumbnailPath).existsSync()) { await io.File(encryptedThumbnailPath).delete(); } - await _uploadLocks.releaseLock(file.localID!, _processType.toString()); + await _uploadLocks.releaseLock(lockKey, _processType.toString()); } Future _onInvalidFileError(File file, InvalidFileError e) async { diff --git a/lib/utils/share_util.dart b/lib/utils/share_util.dart index 1e8c063fb..43c2da825 100644 --- a/lib/utils/share_util.dart +++ b/lib/utils/share_util.dart @@ -114,7 +114,7 @@ Future> convertIncomingSharedMediaToFile( enteFile.fileType = media.type == SharedMediaType.IMAGE ? FileType.image : FileType.video; if (enteFile.fileType == FileType.image) { - final exifTime = await getCreationTimeFromEXIF(ioFile); + final exifTime = await getCreationTimeFromEXIF(ioFile, null); if (exifTime != null) { enteFile.creationTime = exifTime.microsecondsSinceEpoch; } diff --git a/pubspec.yaml b/pubspec.yaml index 90e1d8264..2b2e436ac 100644 --- a/pubspec.yaml +++ b/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: 0.7.39+439 +version: 0.7.44+444 environment: sdk: '>=2.17.0 <3.0.0' diff --git a/scripts/bump_version.sh b/scripts/bump_version.sh new file mode 100755 index 000000000..b147e5e15 --- /dev/null +++ b/scripts/bump_version.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# Exit immediately if a command exits with a non-zero status +set -e + +# Go to the project root directory +cd "$(dirname "$0")/.." + +# Check that the current branch is main +if [[ $(git rev-parse --abbrev-ref HEAD) != "main" ]]; then + echo "Error: Not on main branch" + exit 1 +fi + +# Check that there are no uncommitted changes +if [[ $(git diff-index --quiet HEAD --) != 0 ]]; then + echo "Error: There are uncommitted changes" + exit 1 +fi + +# Pull the latest changes from main branch +git pull origin main + +# Create a new branch with the current date and time as a suffix +new_branch="bump-version-$(date +'%Y%m%d%H%M%S')" +git checkout -b "$new_branch" + +# Find the version line in pubspec.yaml +version_line=$(grep -E '^version:' pubspec.yaml) + +# Extract and bump the version number and code +new_version=$(echo $version_line | awk -F '[.+]' '{printf "version: 0.%s.%d+%d", $2, $3+1, $4+1}') + +# Replace the version line in pubspec.yaml (macOS compatible) +sed -i '' "s/$version_line/$new_version/" pubspec.yaml + +# Commit the version bump with new_version in the commit message +git add pubspec.yaml +git commit -m "Bump version to $new_version" + +gh pr create --fill -r ashilkn --base main \ No newline at end of file diff --git a/translations/nl/full_description.txt b/translations/nl/full_description.txt new file mode 100644 index 000000000..da0877f72 --- /dev/null +++ b/translations/nl/full_description.txt @@ -0,0 +1,36 @@ +ente is een eenvoudige app om jouw foto's en video's automatisch te back-uppen en delen. + +Als je op zoek bent naar een privacy-vriendelijk alternatief voor Google Photos, dan ben je hier op de juiste plaats. Bij ente worden ze end-to-end encrypted (e2ee). Dit betekent dat alleen jij ze kunt bekijken. + +We hebben open-source apps op Android, iOS, web en Desktop, en je foto's zullen naadloos synchroniseren tussen al je apparaten op een end-to-end versleutelde (e2ee) manier. + +ente maakt het ook simpeler om album te delen met je dierbaren, zelfs als die ente niet gebruiken. Je kunt openbaar zichtbare links delen, waar anderen jouw album kunnen bekijken en er foto's aan toe kunnen voegen, zelfs zonder account of app. + +Jouw versleutelde gegevens worden drievoudig opgeslagen op meerdere locaties, waaronder een kernbunker in Parijs. Wij nemen opslag voor de lange termijn serieus, en zorgen ervoor dat je herinneringen minstens je hele leven bewaard worden. + +Ons doel is om de veiligste foto app ooit te maken, sluit je bij ons aan! + +FUNCTIES +- Backups van originele kwaliteit, omdat elke pixel belangrijk is +- Familieplannen, zodat je de opslag kunt delen met je familie +- Gezamenlijke albums, zodat je foto's kunt samenvoegen na een reis +- Gedeelde mappen, voor het geval je jouw partner wilt laten meegenieten van jouw "Camera" klikjes +- Album links, die met een wachtwoord beschermd kunnen worden +- Mogelijkheid om ruimte vrij te maken op je apparaat, door bestanden die veilig zijn geback-upt te verwijderen +- Menselijke klantenservice, omdat je het waard bent +- Beschrijvingen, zodat je je herinneringen kunt bijhouden en ze gemakkelijk kunt vinden +- Fotobewerker om de laatste finishing touches toe te voegen +- Favorieten, verbergen en herleven van je herinneringen, want ze zijn kostbaar +- Met één klik importeren vanuit Google, Apple, je harde schijf en meer +- Donker thema, omdat je foto's er goed in uit zien +- 2FA, 3FA, biometrische authenticatie +- en nog veel meer! + +TOESTEMMINGEN +ente heeft bepaalde machtigingen nodig om uw foto's op te slaan, die hier bekeken kunnen worden: https://github.com/ente-io/photos-app/blob/f-droid/android/permissions.md + +PRIJZEN +We bieden geen oneindig gratis plannen aan, omdat het voor ons belangrijk is dat we duurzaam blijven en de tand des tijds weerstaan. In plaats daarvan bieden we betaalbare plannen aan die je vrij kunt delen met je familie. Je kunt meer informatie vinden op ente.io. + +KLANTENSERVICE +Wij zijn trots op het bieden van menselijke klantenservice. Als je een betaalde klant bent, kun je contact opnemen met team@ente.io en binnen 24 uur een antwoord van ons verwachten. diff --git a/translations/nl/short_description.txt b/translations/nl/short_description.txt new file mode 100644 index 000000000..9590ece8f --- /dev/null +++ b/translations/nl/short_description.txt @@ -0,0 +1 @@ +ente is een end-to-end versteutelde app voor foto opslag \ No newline at end of file diff --git a/translations/nl/title.txt b/translations/nl/title.txt new file mode 100644 index 000000000..a73acd5c4 --- /dev/null +++ b/translations/nl/title.txt @@ -0,0 +1 @@ +ente - versleutelde foto opslag \ No newline at end of file diff --git a/translations/zh/full_description.txt b/translations/zh/full_description.txt new file mode 100644 index 000000000..08d4c433c --- /dev/null +++ b/translations/zh/full_description.txt @@ -0,0 +1,36 @@ +ente 是一个简单的应用程序来备份和分享您的照片和视频。 + +如果你一直在寻找一个隐私友好的可以替代Google Photos,你已经来到了正确的地方。 使用 Ente,它们以端到端加密 (e2ee) 的方式存储。 这意味着只有您可以查看它们。 + +我们在Android、iOS、web 和桌面上有开源应用, 和您的照片将以端到端加密方式无缝同步 (e2ee)。 + +即使您不是亲人,也可以轻松地与您的个人分享您的相册。 您可以分享可公开查看的链接,他们可以通过添加照片来查看您的相册并进行协作,即使没有帐户或应用。 + +您的加密数据已复制到三个不同的地点,包括巴黎的一个铺面掩体。 我们认真对待子孙后代,并确保您回忆比您长寿。 + +我们来这里是为了使最安全的照片应用成为新的应用程序,来加入我们的旅程! + +特色 +- 原始质量备份,因为每个像素都是重要的 +- 家庭计划,您可以与家人共享存储 +- 协作相册,您可以在旅行后将照片汇集在一起。 +- 共享文件夹,如果您想让您的伙伴享受您的“摄像头”点击 +- 可以用密码保护相册链接 +- 能够通过移除已经安全备份的文件释放空间 +- 人的支持,因为你值得这样做。 +- 描述,这样您可以描述您的回忆并轻松地找到 +- 图像编辑器,添加收尾工作 +- 收藏、隐藏和恢复您的回忆,因为它们是宝贵的 +- 单击从谷歌、苹果、您的硬盘和更多的软件导入 +- 黑暗主题,因为您的照片看起来很好 +- 2FA,3FA,生物鉴别认证 +- 还有更多的LOT! + +权限 +ente requests for certain permissions to serve the purpose of a photo storage provider, which can be reviewed here: https://github.com/ente-io/photos-app/blob/f-droid/android/permissions.md + +价格 +我们不会永远提供免费计划,因为我们必须保持可持续性,经受住时间的考验。 相反,我们提供您可以自由分享的负担得起的计划。 您可以在 ente. io找到更多信息。 相反,我们提供您可以自由分享的负担得起的计划。 您可以在 ente. io找到更多信息。 相反,我们提供您可以自由分享的负担得起的计划。 您可以在 ente.io找到更多信息。 + +支持 +我们对提供人的支持感到自豪。 我们对提供人的支持感到自豪。 如果您是我们的付费客户,您可以联系Team@ente.io并期待我们的团队在24小时内做出回应。 diff --git a/translations/zh/short_description.txt b/translations/zh/short_description.txt new file mode 100644 index 000000000..f03d1a37f --- /dev/null +++ b/translations/zh/short_description.txt @@ -0,0 +1 @@ +ente 是一个端到端加密的照片存储应用 \ No newline at end of file diff --git a/translations/zh/title.txt b/translations/zh/title.txt new file mode 100644 index 000000000..a976869b1 --- /dev/null +++ b/translations/zh/title.txt @@ -0,0 +1 @@ +ente - 加密照片存储 \ No newline at end of file