From cd6a2d66aa4d6c52815107301b305c12d7cf459b Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 20 Jul 2026 10:15:28 +0200 Subject: [PATCH 01/13] feat(l10n): single-source localization pipeline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add localization/ — one strings.json is the source of truth for every user-facing string, and a Bun CLI generates the platform files: loc migrate rebuild strings.json from existing platform files (one-time) loc validate structural checks (plural `other`, arg refs, coverage) loc generate emit .xcstrings (Apple) + per-language strings.xml (KMP) Canonical `{name}` placeholders are converted to each platform's positional printf tokens using declared arg types. Plurals use CLDR categories and emit native forms: xcstrings plural variations and Compose blocks. Migration folds the KMP `transfer_file_count_one`/`_other` pair into a single plural key, so `transferFileCountResource` now returns the plural resource and callers resolve it with pluralStringResource. --- apple/VniDrop/Resources/Localizable.xcstrings | 3608 ++++++++++------- localization/README.md | 87 + localization/bun.lock | 19 + localization/package.json | 18 + localization/schema.json | 72 + localization/src/cli.ts | 21 + localization/src/commands/generate.ts | 97 + localization/src/commands/migrate.ts | 195 + localization/src/commands/validate.ts | 55 + localization/src/config.ts | 24 + localization/src/lib/android-xml.ts | 96 + localization/src/lib/placeholders.ts | 98 + localization/src/lib/xcstrings.ts | 45 + localization/src/types.ts | 43 + localization/strings.json | 1741 ++++++++ localization/tsconfig.json | 14 + .../composeResources/values/strings.xml | 406 +- .../com/vnidrop/app/ui/state/AppUiModels.kt | 9 +- .../vnidrop/app/ui/state/AppUiModelsTest.kt | 9 +- 19 files changed, 4882 insertions(+), 1775 deletions(-) create mode 100644 localization/README.md create mode 100644 localization/bun.lock create mode 100644 localization/package.json create mode 100644 localization/schema.json create mode 100644 localization/src/cli.ts create mode 100644 localization/src/commands/generate.ts create mode 100644 localization/src/commands/migrate.ts create mode 100644 localization/src/commands/validate.ts create mode 100644 localization/src/config.ts create mode 100644 localization/src/lib/android-xml.ts create mode 100644 localization/src/lib/placeholders.ts create mode 100644 localization/src/lib/xcstrings.ts create mode 100644 localization/src/types.ts create mode 100644 localization/strings.json create mode 100644 localization/tsconfig.json diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index b34e4e2..8a0a4ba 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -1,2578 +1,3062 @@ { - "sourceLanguage" : "en", - "strings" : { - "%@" : { - + "sourceLanguage": "en", + "strings": { + "%@": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual" }, - "%@ · %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ · %2$@" + "%@ %@ · %@": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$@ %2$@ · %3$@" } } } }, - "%@ %@ · %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ %2$@ · %3$@" + "%@ · %@": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$@ · %2$@" } } } }, - "%@%%" : { - + "%@%%": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual" }, - "about_bug_report" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Report a bug" + "about_bug_report": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Report a bug" } } } }, - "about_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done." + "about_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done." } } } }, - "about_is_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "What VniDrop is" + "about_is_direct": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "A direct device-to-device transfer — your files go straight to the receiver." } } } }, - "about_is_direct" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "A direct device-to-device transfer — your files go straight to the receiver." + "about_is_encrypted": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash." } } } }, - "about_is_no_account" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Account-free — there’s nothing to sign up for." + "about_is_in_control": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation." } } } }, - "about_is_in_control" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "You decide who receives: approve each request, or open a transfer to anyone holding the invitation." + "about_is_no_account": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Account-free — there’s nothing to sign up for." } } } }, - "about_is_encrypted" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash." + "about_is_open": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Open source, released under the Apache 2.0 license." } } } }, - "about_is_open" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open source, released under the Apache 2.0 license." + "about_is_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "What VniDrop is" } } } }, - "about_isnt_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "What VniDrop isn’t" + "about_isnt_cloud": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer." } } } }, - "about_isnt_cloud" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer." + "about_isnt_public": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby." } } } }, - "about_isnt_sync" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Not a sync or backup service." + "about_isnt_sync": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Not a sync or backup service." } } } }, - "about_isnt_public" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby." + "about_isnt_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "What VniDrop isn’t" } } } }, - "about_privacy_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Privacy & security" + "about_license_label": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "License" } } } }, - "about_privacy_capability" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”" + "about_privacy": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Privacy policy" } } } }, - "about_privacy_deny" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests." + "about_privacy_capability": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”" } } } }, - "about_privacy_relay" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files." + "about_privacy_deny": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests." } } } }, - "about_privacy_local" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Received files are saved on your device and never silently overwrite an existing file." + "about_privacy_local": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Received files are saved on your device and never silently overwrite an existing file." } } } }, - "about_license_label" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "License" + "about_privacy_policy_label": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Privacy policy" } } } }, - "about_privacy_policy_label" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Privacy policy" + "about_privacy_relay": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files." } } } }, - "about_tagline" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Send files directly. Stay in control of who receives them." + "about_privacy_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Privacy & security" } } } }, - "about_privacy" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Privacy policy" + "about_tagline": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Send files directly. Stay in control of who receives them." } } } }, - "about_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "About" + "about_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "About" } } } }, - "appearance_auto_description" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Match this device’s light or dark appearance." + "appearance_auto_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Match this device’s light or dark appearance." } } } }, - "appearance_dark_mode" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dark mode" + "appearance_dark_mode": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Dark mode" } } } }, - "appearance_light_mode" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Light mode" + "appearance_light_mode": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Light mode" } } } }, - "appearance_system_mode" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "System" + "appearance_system_mode": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "System" } } } }, - "appearance_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Appearance" + "appearance_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Appearance" } } } }, - "approval_connection_request" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receive request" + "approval_connection_request": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Receive request" } } } }, - "approval_endpoint_id" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Device ID: %1$@" + "approval_endpoint_id": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Device ID: %1$@" } } } }, - "approval_nearby_device" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "A nearby device" + "approval_nearby_device": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "A nearby device" } } } }, - "approval_pending_count" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$d requests waiting" + "approval_pending_count": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$d requests waiting" } } } }, - "approval_request_body" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$@ wants to receive “%2$@”." + "approval_request_body": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$@ wants to receive “%2$@”." } } } }, - "battery_level_title" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Battery level" + "battery_level_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Battery level" } } } }, - "bug_report_contact_hint" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "name@example.com" + "bug_report_contact_hint": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "name@example.com" } } } }, - "bug_report_contact_label" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Contact email (optional)" + "bug_report_contact_label": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Contact email (optional)" } } } }, - "bug_report_expected_hint" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Describe what you expected to happen" + "bug_report_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted)." } } } }, - "bug_report_steps_hint" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "List the steps to reproduce the issue" + "bug_report_device_section": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Device information" } } } }, - "bug_report_what_hint" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Describe what happened" + "bug_report_expected_hint": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Describe what you expected to happen" } } } }, - "bug_report_description" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted)." + "bug_report_expected_label": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "What did you expect?" } } } }, - "bug_report_device_section" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Device information" + "bug_report_include_logs": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Include recent logs" } } } }, - "bug_report_expected_label" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "What did you expect?" + "bug_report_include_logs_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Helps us diagnose the issue. Sensitive values are redacted before sending." } } } }, - "bug_report_include_logs" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Include recent logs" + "bug_report_logs_size": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Log attachment size" } } } }, - "bug_report_include_logs_description" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Helps us diagnose the issue. Sensitive values are redacted before sending." + "bug_report_missing_expected": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Please describe what you expected." } } } }, - "bug_report_logs_size" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Log attachment size" + "bug_report_missing_what": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Please describe what happened." } } } }, - "bug_report_missing_expected" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Please describe what you expected." + "bug_report_steps_hint": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "List the steps to reproduce the issue" } } } }, - "bug_report_missing_what" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Please describe what happened." + "bug_report_steps_label": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Steps to reproduce (optional)" } } } }, - "bug_report_steps_label" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Steps to reproduce (optional)" + "bug_report_submit": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Submit report" } } } }, - "bug_report_submit" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Submit report" + "bug_report_submit_failed": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Could not submit the bug report. Try again later." } } } }, - "bug_report_submit_failed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Could not submit the bug report. Try again later." + "bug_report_submitted": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Thanks — your bug report was recorded." } } } }, - "bug_report_submitted" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thanks — your bug report was recorded." + "bug_report_submitting": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Submitting…" } } } }, - "bug_report_submitting" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Submitting…" + "bug_report_what_hint": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Describe what happened" } } } }, - "bug_report_what_label" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "What happened?" + "bug_report_what_label": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "What happened?" } } } }, - "button_approve" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Approve" + "button_approve": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Approve" } } } }, - "button_back" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Back" + "button_back": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Back" } } } }, - "button_cancel" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancel" + "button_cancel": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cancel" } } } }, - "button_cancel_receive" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancel" + "button_cancel_receive": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cancel" } } } }, - "button_change_files" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Change files" + "button_change_files": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Change files" } } } }, - "button_choose_files" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Choose files" + "button_choose_files": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose files" } } } }, - "button_choose_folder" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Choose folder" + "button_choose_folder": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose folder" } } } }, - "button_clear" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Clear" + "button_clear": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Clear" } } } }, - "button_close" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Close" + "button_close": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Close" } } } }, - "button_create_new_transfer" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "New transfer" + "button_create_new_transfer": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "New transfer" } } } }, - "button_delete_transfer" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Delete transfer" + "button_delete_transfer": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete transfer" } } } }, - "button_download_invitation" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Save .vnd file" + "button_download_invitation": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Save .vnd file" } } } }, - "button_native_share" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Share invitation" + "button_native_share": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Share invitation" } } } }, - "button_open_settings" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open Settings" + "button_open_settings": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Open Settings" } } } }, - "button_receive" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receive" + "button_receive": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Receive" } } } }, - "button_receive_files" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Start receiving" + "button_receive_files": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Start receiving" } } } }, - "button_refuse" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Refuse" + "button_refuse": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Refuse" } } } }, - "button_remove_file" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remove file" + "button_remove_file": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Remove file" } } } }, - "button_reset_default" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Use default" + "button_reset_default": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Use default" } } } }, - "button_retry" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Retry" + "button_retry": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Retry" } } } }, - "button_share_file" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Start sharing" + "button_share_file": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Start sharing" } } } }, - "button_sharing_file" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Preparing transfer…" + "button_sharing_file": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Preparing transfer…" } } } }, - "button_show_in_files" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Show in Files" + "button_show_in_files": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Show in Files" } } } }, - "button_write_nfc" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Write to NFC tag" + "button_write_nfc": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Write to NFC tag" } } } }, - "device_model_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Device model" + "device_model_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Device model" } } } }, - "device_name_title" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Device name" + "device_name_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Device name" } } } }, - "diagnostics_description" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included." + "diagnostics_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included." } } } }, - "diagnostics_disabled_message" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Diagnostics sharing is off." + "diagnostics_disabled_message": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Diagnostics sharing is off." } } } }, - "diagnostics_enabled_message" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Diagnostics sharing is on." + "diagnostics_enabled_message": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Diagnostics sharing is on." } } } }, - "diagnostics_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Share diagnostics" + "diagnostics_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Share diagnostics" } } } }, - "error_camera" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Camera access is required to scan a QR code." + "error_camera": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Camera access is required to scan a QR code." } } } }, - "error_device_info" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Could not load device information." + "error_device_info": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Could not load device information." } } } }, - "error_filesystem" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "VniDrop could not access the selected files or folder. Check permissions and try again." + "error_filesystem": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "VniDrop could not access the selected files or folder. Check permissions and try again." } } } }, - "error_generic" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Something went wrong. Try again." + "error_generic": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Something went wrong. Try again." } } } }, - "error_initialization" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "VniDrop could not finish starting up. Close the app and try again." + "error_initialization": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "VniDrop could not finish starting up. Close the app and try again." } } } }, - "error_invalid_ticket" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "This invitation could not be read. Ask the sender for a new one." + "error_invalid_ticket": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This invitation could not be read. Ask the sender for a new one." } } } }, - "error_invitation_empty" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "That invitation is empty. Try opening it again." + "error_invitation_empty": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "That invitation is empty. Try opening it again." } } } }, - "error_missing_native_library" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "The native VniDrop library is missing from this build." + "error_missing_native_library": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The native VniDrop library is missing from this build." } } } }, - "error_nfc" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "This NFC tag could not be used. Try another tag." + "error_nfc": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This NFC tag could not be used. Try another tag." } } } }, - "error_permission" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "The sender has not approved this transfer, or it was refused." + "error_permission": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The sender has not approved this transfer, or it was refused." } } } }, - "error_repository" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "VniDrop could not save transfer data on this device." + "error_repository": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "VniDrop could not save transfer data on this device." } } } }, - "error_selection_failed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Could not open the selected item. Try choosing it again." + "error_selection_failed": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Could not open the selected item. Try choosing it again." } } } }, - "error_share_empty" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Select at least one item to share." + "error_share_empty": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Select at least one item to share." } } } }, - "error_socket_bind" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "VniDrop could not open its network sockets on this device." + "error_socket_bind": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "VniDrop could not open its network sockets on this device." } } } }, - "error_starting_up" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "VniDrop is still starting. Open the invitation again in a moment." + "error_starting_up": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "VniDrop is still starting. Open the invitation again in a moment." } } } }, - "error_transfer" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "The transfer could not be completed. Check your connection and try again." + "error_transfer": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The transfer could not be completed. Check your connection and try again." } } } }, - "field_receiver_name" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receiver name" + "field_receiver_name": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Receiver name" } } } }, - "field_sender_name" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sender name" + "field_sender_name": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sender name" } } } }, - "field_transfer_name" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer name" + "field_transfer_name": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer name" } } } }, - "field_username" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Display name" + "field_username": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Display name" } } } }, - "folder_status_permission_required" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Permission needed" + "folder_status_permission_required": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Permission needed" } } } }, - "folder_status_unavailable" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Unavailable" + "folder_status_unavailable": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Unavailable" } } } }, - "folder_status_validating" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Checking folder…" + "folder_status_validating": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Checking folder…" } } } }, - "folder_status_writable" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ready" + "folder_status_writable": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Ready" } } } }, - "metadata_files" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Files" + "metadata_files": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Files" } } } }, - "metadata_size" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Size" + "metadata_size": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Size" } } } }, - "metadata_status" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Status" + "metadata_status": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Status" } } } }, - "nav_receive" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receive" + "nav_receive": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Receive" } } } }, - "nav_send" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Send" + "nav_send": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Send" } } } }, - "nav_settings" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Settings" + "nav_settings": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Settings" } } } }, - "network_title" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Network" + "network_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Network" } } } }, - "notifications_description" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Get notified about new receive requests while VniDrop is in the background." + "notifications_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Get notified about new receive requests while VniDrop is in the background." } } } }, - "notifications_enabled_message" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Notifications enabled." + "notifications_enabled_message": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Notifications enabled." } } } }, - "notifications_local_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Allow notifications" + "notifications_local_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Allow notifications" } } } }, - "notifications_permission_denied" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Notifications are turned off for VniDrop. You can enable them in Settings." + "notifications_permission_denied": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Notifications are turned off for VniDrop. You can enable them in Settings." } } } }, - "notifications_settings_open_failed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Could not open notification settings." + "notifications_settings_open_failed": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Could not open notification settings." } } } }, - "notifications_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Notifications" + "notifications_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Notifications" } } } }, - "notifications_unsupported" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Notifications are not available on this device." + "notifications_unsupported": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Notifications are not available on this device." } } } }, - "os_version_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Operating system" + "os_version_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Operating system" } } } }, - "preferences_receive_folder_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Save received transfers to" + "preferences_receive_folder_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Save received transfers to" } } } }, - "preferences_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Preferences" + "preferences_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Preferences" } } } }, - "progress_cancelled" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancelled" + "progress_cancelled": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cancelled" } } } }, - "progress_completed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Completed" + "progress_completed": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Completed" } } } }, - "progress_connected" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Connected" + "progress_connected": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Connected" } } } }, - "progress_connecting" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Connecting" + "progress_connecting": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Connecting" } } } }, - "progress_downloading" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Downloading" + "progress_downloading": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Downloading" } } } }, - "progress_failed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Failed" + "progress_failed": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Failed" } } } }, - "progress_getting_ready" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Getting ready" + "progress_getting_ready": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Getting ready" } } } }, - "progress_interrupted" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer interrupted" + "progress_interrupted": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer interrupted" } } } }, - "progress_preparing" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Preparing" + "progress_preparing": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Preparing" } } } }, - "progress_ready" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ready" + "progress_ready": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Ready" } } } }, - "progress_receiving" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receiving" + "progress_receiving": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Receiving" } } } }, - "progress_requesting_access" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Requesting access" + "progress_requesting_access": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Requesting access" } } } }, - "progress_saving" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Saving" + "progress_saving": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Saving" } } } }, - "progress_sending" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sending" + "progress_sending": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sending" } } } }, - "progress_sending_to_count" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sending to %lld" + "progress_sending_to_count": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sending to %lld" } } } }, - "progress_share_ready" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ready to share" + "progress_share_ready": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Ready to share" } } } }, - "progress_working" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Working…" + "progress_working": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Working…" } } } }, - "receive_choose_method_body" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Choose the invitation method available to you." + "receive_choose_method_body": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose the invitation method available to you." } } } }, - "receive_choose_method_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "How would you like to connect?" + "receive_choose_method_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "How would you like to connect?" } } } }, - "receive_clear_history" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Clear history" + "receive_clear_history": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Clear history" } } } }, - "receive_clear_history_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device." + "receive_clear_history_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device." } } } }, - "receive_clear_history_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Clear receive history?" + "receive_clear_history_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Clear receive history?" } } } }, - "receive_completed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer received." + "receive_completed": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer received." } } } }, - "receive_delete_history_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "“%1$@” will be removed from VniDrop’s history. The downloaded file will remain on this device." + "receive_delete_history_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "“%1$@” will be removed from VniDrop’s history. The downloaded file will remain on this device." } } } }, - "receive_delete_history_item" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Delete from receive history" + "receive_delete_history_item": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete from receive history" } } } }, - "receive_delete_history_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remove from history?" + "receive_delete_history_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Remove from history?" } } } }, - "receive_empty_body" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag." + "receive_empty_body": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag." } } } }, - "receive_empty_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nothing received yet" + "receive_empty_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Nothing received yet" } } } }, - "receive_history_cleared" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receive history cleared." + "receive_history_cleared": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Receive history cleared." } } } }, - "receive_history_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "History" + "receive_history_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "History" } } } }, - "receive_method_file" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open a .vnd invitation" + "receive_method_file": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Open a .vnd invitation" } } } }, - "receive_method_file_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Choose an invitation saved or shared to this device." + "receive_method_file_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose an invitation saved or shared to this device." } } } }, - "receive_method_nfc" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Read NFC tag" + "receive_method_nfc": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Read NFC tag" } } } }, - "receive_method_nfc_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hold this device near the sender’s invitation tag." + "receive_method_nfc_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Hold this device near the sender’s invitation tag." } } } }, - "receive_method_scan" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Scan QR code" + "receive_method_scan": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Scan QR code" } } } }, - "receive_method_scan_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Use the camera to scan the sender’s VniDrop code." + "receive_method_scan_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Use the camera to scan the sender’s VniDrop code." } } } }, - "receive_new_subtitle" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfers you’ve received on this device." + "receive_new_subtitle": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfers you’ve received on this device." } } } }, - "receive_nfc_waiting" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hold near the NFC tag…" + "receive_nfc_waiting": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Hold near the NFC tag…" } } } }, - "receive_open_files_failed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Couldn’t open VniDrop in Files." + "receive_open_files_failed": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Couldn’t open VniDrop in Files." } } } }, - "receive_review_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Review transfer" + "receive_review_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Review transfer" } } } }, - "receive_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receive" + "receive_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Receive" } } } }, - "receive_unknown_transfer" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "VniDrop transfer" + "receive_unknown_transfer": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "VniDrop transfer" } } } }, - "send_access_anyone" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anyone with this transfer" + "send_access_anyone": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Anyone with this transfer" } } } }, - "send_access_anyone_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "No approval is required. Only use this for items you are comfortable sharing." + "send_access_anyone_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "No approval is required. Only use this for items you are comfortable sharing." } } } }, - "send_access_anyone_warning" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items." + "send_access_anyone_warning": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items." } } } }, - "send_access_approval" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ask before each download" + "send_access_approval": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Ask before each download" } } } }, - "send_access_approval_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "You approve or refuse every new receiver." + "send_access_approval_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "You approve or refuse every new receiver." } } } }, - "send_access_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Who can receive it?" + "send_access_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Who can receive it?" } } } }, - "send_choose_file_body" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Select files or a folder from this device. You can review the selection before creating the transfer." + "send_choose_file_body": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Select files or a folder from this device. You can review the selection before creating the transfer." } } } }, - "send_choose_file_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Choose what to share" + "send_choose_file_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Choose what to share" } } } }, - "send_empty_body" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file." + "send_empty_body": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file." } } } }, - "send_empty_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nothing shared yet" + "send_empty_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Nothing shared yet" } } } }, - "send_file_size_unknown" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Size unavailable" + "send_file_size_unknown": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Size unavailable" } } } }, - "send_folder_label" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Folder" + "send_folder_label": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Folder" } } } }, - "send_new_transfer_description" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Create a new transfer" + "send_new_transfer_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Create a new transfer" } } } }, - "send_new_transfer_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "New transfer" + "send_new_transfer_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "New transfer" } } } }, - "send_review_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Review transfer" + "send_review_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Review transfer" } } } }, - "send_selected_files_count" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$d files selected" + "send_selected_files_count": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$d files selected" } } } }, - "send_subtitle" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfers you’re sharing from this device." + "send_stop_sharing": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stop sharing" } } } }, - "send_stop_sharing" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stop sharing" + "send_stop_sharing_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped." } } } }, - "send_stop_sharing_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped." + "send_subtitle": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfers you’re sharing from this device." } } } }, - "send_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Send" + "send_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Send" } } } }, - "send_transfer_created" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer created." + "send_transfer_created": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer created." } } } }, - "send_transfer_details_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer details" + "send_transfer_details_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer details" } } } }, - "send_transfers_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Your transfers" + "send_transfers_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Your transfers" } } } }, - "settings_subtitle" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Your name, where transfers are saved, appearance, and notifications." + "settings_subtitle": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Your name, where transfers are saved, appearance, and notifications." } } } }, - "settings_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Settings" + "settings_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Settings" } } } }, - "snackbar_dismiss" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dismiss" + "snackbar_dismiss": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Dismiss" } } } }, - "storage_calculating" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Calculating…" + "status_available": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Available" } } } }, - "storage_delete_transfers" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Delete all transfers" + "status_cancelled": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Cancelled" } } } }, - "storage_delete_transfers_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone." + "status_completed": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Completed" } } } }, - "storage_deleting" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deleting…" + "status_failed": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Failed" } } } }, - "storage_footer" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here." + "status_preparing": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Preparing" } } } }, - "storage_received_files" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Received files" + "status_receiving": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Receiving" } } } }, - "storage_temporary" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Temporary files" + "status_stopped": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Stopped" } } } }, - "storage_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Storage" + "storage_calculating": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Calculating…" } } } }, - "storage_total" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Total" + "storage_delete_transfers": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete all transfers" } } } }, - "storage_transfer_data" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer data" + "storage_delete_transfers_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone." } } } }, - "storage_transfers_deleted" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "All transfers deleted" + "storage_deleting": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Deleting…" } } } }, - "status_available" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Available" + "storage_footer": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here." } } } }, - "status_cancelled" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancelled" + "storage_received_files": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Received files" } } } }, - "status_completed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Completed" + "storage_temporary": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Temporary files" } } } }, - "status_failed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Failed" + "storage_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Storage" } } } }, - "status_preparing" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Preparing" + "storage_total": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Total" } } } }, - "status_receiving" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receiving" + "storage_transfer_data": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer data" } } } }, - "status_stopped" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stopped" + "storage_transfers_deleted": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "All transfers deleted" } } } }, - "transfer_activity_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "See important updates for this transfer" + "transfer_activity_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "See important updates for this transfer" } } } }, - "transfer_activity_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Activity" + "transfer_activity_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Activity" } } } }, - "transfer_delete_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "“%1$@” will stop being shared and its transfer history will be removed from this device." + "transfer_delete_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "“%1$@” will stop being shared and its transfer history will be removed from this device." } } } }, - "transfer_delete_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Delete transfer?" + "transfer_delete_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete transfer?" } } } }, - "transfer_deleted" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer deleted." + "transfer_deleted": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer deleted." } } } }, - "transfer_deleting" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deleting…" + "transfer_deleting": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Deleting…" } } } }, - "transfer_details_title" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer details" + "transfer_details_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer details" } } } }, - "transfer_event_approved" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receiver access approved" + "transfer_event_approved": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Receiver access approved" } } } }, - "transfer_event_completed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "A receiver completed the transfer" + "transfer_event_completed": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "A receiver completed the transfer" } } } }, - "transfer_event_connecting" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Connecting to sender" + "transfer_event_connecting": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Connecting to sender" } } } }, - "transfer_event_downloading" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Downloading" + "transfer_event_downloading": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Downloading" } } } }, - "transfer_event_failed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "The transfer encountered a problem" + "transfer_event_failed": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "The transfer encountered a problem" } } } }, - "transfer_event_preparing" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Preparing your transfer" + "transfer_event_preparing": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Preparing your transfer" } } } }, - "transfer_event_ready" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ready to share" + "transfer_event_ready": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Ready to share" } } } }, - "transfer_event_refused" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receiver access refused" + "transfer_event_refused": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Receiver access refused" } } } }, - "transfer_event_requested" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "A receiver requested access" + "transfer_event_requested": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "A receiver requested access" } } } }, - "transfer_event_saving" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Saving" + "transfer_event_saving": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Saving" } } } }, - "transfer_event_stopped" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sharing stopped" + "transfer_event_stopped": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Sharing stopped" } } } }, - "transfer_event_updated" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer updated" + "transfer_event_updated": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer updated" } } } }, - "transfer_file_count_one" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$d file" + "transfer_file_count": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%1$d file" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%1$d files" + } + } + } } } } }, - "transfer_file_count_other" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$d files" + "transfer_invitation_saved": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Invitation saved." } } } }, - "transfer_invitation_saved" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Invitation saved." + "transfer_nearby_device": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Nearby device" } } } }, - "transfer_nearby_device" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nearby device" + "transfer_nfc_unavailable": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "NFC tag writing is not available on this device." } } } }, - "transfer_nfc_unavailable" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "NFC tag writing is not available on this device." + "transfer_nfc_waiting": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Hold your device near a writable NFC tag." } } } }, - "transfer_nfc_waiting" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hold your device near a writable NFC tag." + "transfer_nfc_written": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Invitation written to the NFC tag." } } } }, - "transfer_nfc_written" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Invitation written to the NFC tag." + "transfer_no_activity": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "There is no activity to show yet." } } } }, - "transfer_no_activity" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "There is no activity to show yet." + "transfer_no_receivers": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Nobody has requested this transfer yet." } } } }, - "transfer_no_receivers" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nobody has requested this transfer yet." + "transfer_receiver_accepted": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Approved — waiting for completion" } } } }, - "transfer_receiver_accepted" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Approved — waiting for completion" + "transfer_receiver_completed": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Received successfully" } } } }, - "transfer_receiver_completed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Received successfully" + "transfer_receiver_expired": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Request expired" } } } }, - "transfer_receiver_expired" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Request expired" + "transfer_receiver_refused": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Request refused" } } } }, - "transfer_receiver_refused" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Request refused" + "transfer_receiver_requested": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Waiting for your approval" } } } }, - "transfer_receiver_requested" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Waiting for your approval" + "transfer_receiver_unknown": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Status unavailable" } } } }, - "transfer_receiver_unknown" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Status unavailable" + "transfer_receivers_completed_count": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$d completed" } } } }, - "transfer_receivers_completed_count" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$d completed" + "transfer_receivers_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Requests, approvals, and completed deliveries" } } } }, - "transfer_receivers_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Requests, approvals, and completed deliveries" + "transfer_receivers_pending": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "%1$d waiting" } } } }, - "transfer_receivers_pending" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$d waiting" + "transfer_receivers_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Receivers" } } } }, - "transfer_receivers_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receivers" + "transfer_scan_qr": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Scan with VniDrop to receive this transfer" } } } }, - "transfer_scan_qr" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Scan with VniDrop to receive this transfer" + "transfer_share_description": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "QR code, invitation file, and nearby options" } } } }, - "transfer_share_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "QR code, invitation file, and nearby options" + "transfer_share_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Share" } } } }, - "transfer_share_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Share" + "value_unavailable": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "Not available" } } } }, - "value_unavailable" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Not available" - } - } - } - }, - "version_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "App version" + "version_title": { + "comment": "TODO: describe where this appears.", + "extractionState": "manual", + "localizations": { + "en": { + "stringUnit": { + "state": "translated", + "value": "App version" } } } } }, - "version" : "1.0" -} \ No newline at end of file + "version": "1.0" +} diff --git a/localization/README.md b/localization/README.md new file mode 100644 index 0000000..d277173 --- /dev/null +++ b/localization/README.md @@ -0,0 +1,87 @@ +# Localization + +Single source of truth for every user-facing string, in [`strings.json`](strings.json). +A Bun CLI generates the platform-native files from it: + +| Target | Output | Notes | +| --- | --- | --- | +| `apple` | `apple/VniDrop/Resources/Localizable.xcstrings` | one catalog, all languages nested | +| `kmp` | `shared/src/commonMain/composeResources/values[-lang]/strings.xml` | one file per language | + +## Workflow + +```bash +cd localization +bun run src/cli.ts validate # structural checks (run before committing) +bun run src/cli.ts generate # regenerate .xcstrings + strings.xml from strings.json +bun run src/cli.ts migrate # one-time: rebuild strings.json from existing platform files +``` + +**Never edit the generated `.xcstrings` / `strings.xml` by hand** — edit `strings.json` and +regenerate. Regenerated output is deterministic (sorted keys), so diffs stay small. + +## `strings.json` format + +```jsonc +{ + "sourceLanguage": "en", + "supportedLanguages": ["en", "fr"], + "strings": { + "send_title": { + "context": "Send tab — screen title.", + "translations": { "en": "Send", "fr": "Envoyer" } + }, + + "send_selected_files_count": { + "context": "Send flow — number of files chosen before creating a transfer.", + "targets": ["kmp", "apple"], + "args": [{ "name": "count", "type": "int" }], + "plural": { + "en": { "one": "{count} file selected", "other": "{count} files selected" }, + "fr": { "one": "{count} fichier sélectionné", "other": "{count} fichiers sélectionnés" } + } + } + } +} +``` + +### Fields + +- **`context`** *(required)* — where the string appears and its purpose. Emitted as the + `.xcstrings` comment and an XML comment; also the note translators see. +- **`targets`** *(optional)* — `["kmp", "apple"]`. Omit to mean **all** targets. +- **`args`** *(optional)* — ordered list of `{ name, type }`, `type` ∈ `string | int | double`. + Referenced in text as `{name}`. +- **`translations`** — flat text per language. **Mutually exclusive with `plural`.** +- **`plural`** — per language, per [CLDR category](https://cldr.unicode.org/index/cldr-spec/plural-rules) + (`zero`, `one`, `two`, `few`, `many`, `other`). `other` is always required. + +### Placeholders + +Write named tokens `{count}`, `{name}` in text. The generator converts them to the right +positional token per platform, using the declared `type`: + +| type | Apple | Android/KMP | +| --- | --- | --- | +| `string` | `%N$@` | `%N$s` | +| `int` | `%N$d` | `%N$d` | +| `double` | `%N$f` | `%N$f` | + +A literal `%` in text is emitted as `%%` whenever the string has args. + +## Adding a language + +Add its code to `supportedLanguages`, fill in `translations` / `plural` for each key, then +`generate`. KMP gets a new `values-/strings.xml`; Apple gets the language inside the +single catalog. `validate` warns about any key still missing that language. + +## Migration notes (from the initial import) + +- Apple keys that were literal English strings (`"%@ · %@"`) were imported verbatim — rename + them to semantic keys and update the Swift call sites. +- Arg names default to `arg1`, `arg2`… (a lone int arg becomes `count`). Rename for clarity; + keep the `{token}` in text in sync. +- Folding `transfer_file_count_one` / `_other` into the plural key `transfer_file_count` + requires switching the KMP call site from `Res.string.transfer_file_count_one` to the + Compose plural API (`pluralStringResource(Res.plurals.transfer_file_count, count, count)`), + and the Apple side to automatic plural inflection. diff --git a/localization/bun.lock b/localization/bun.lock new file mode 100644 index 0000000..6d5f035 --- /dev/null +++ b/localization/bun.lock @@ -0,0 +1,19 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "vnidrop-localization", + "devDependencies": { + "bun-types": "^1.3.14", + }, + }, + }, + "packages": { + "@types/node": ["@types/node@26.1.1", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw=="], + + "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="], + + "undici-types": ["undici-types@8.3.0", "", {}, "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ=="], + } +} diff --git a/localization/package.json b/localization/package.json new file mode 100644 index 0000000..e78c781 --- /dev/null +++ b/localization/package.json @@ -0,0 +1,18 @@ +{ + "name": "vnidrop-localization", + "version": "0.1.0", + "private": true, + "type": "module", + "description": "Single-source localization for VniDrop: strings.json -> .xcstrings (Apple) + per-language strings.xml (KMP/Compose).", + "bin": { + "loc": "./src/cli.ts" + }, + "scripts": { + "migrate": "bun run src/cli.ts migrate", + "generate": "bun run src/cli.ts generate", + "validate": "bun run src/cli.ts validate" + }, + "devDependencies": { + "bun-types": "^1.3.14" + } +} diff --git a/localization/schema.json b/localization/schema.json new file mode 100644 index 0000000..4217690 --- /dev/null +++ b/localization/schema.json @@ -0,0 +1,72 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "VniDrop localization source", + "type": "object", + "required": ["sourceLanguage", "supportedLanguages", "strings"], + "additionalProperties": false, + "properties": { + "sourceLanguage": { "type": "string", "description": "Default/base language code, e.g. \"en\"." }, + "supportedLanguages": { + "type": "array", + "items": { "type": "string" }, + "minItems": 1, + "uniqueItems": true + }, + "strings": { + "type": "object", + "additionalProperties": { "$ref": "#/definitions/entry" } + } + }, + "definitions": { + "entry": { + "type": "object", + "required": ["context"], + "additionalProperties": false, + "oneOf": [ + { "required": ["translations"] }, + { "required": ["plural"] }, + { "not": { "anyOf": [{ "required": ["translations"] }, { "required": ["plural"] }] } } + ], + "properties": { + "context": { "type": "string" }, + "targets": { + "type": "array", + "items": { "enum": ["kmp", "apple"] }, + "uniqueItems": true + }, + "args": { + "type": "array", + "items": { + "type": "object", + "required": ["name", "type"], + "additionalProperties": false, + "properties": { + "name": { "type": "string", "pattern": "^[A-Za-z_][A-Za-z0-9_]*$" }, + "type": { "enum": ["string", "int", "double"] } + } + } + }, + "translations": { + "type": "object", + "additionalProperties": { "type": "string" } + }, + "plural": { + "type": "object", + "additionalProperties": { + "type": "object", + "required": ["other"], + "additionalProperties": false, + "properties": { + "zero": { "type": "string" }, + "one": { "type": "string" }, + "two": { "type": "string" }, + "few": { "type": "string" }, + "many": { "type": "string" }, + "other": { "type": "string" } + } + } + } + } + } + } +} diff --git a/localization/src/cli.ts b/localization/src/cli.ts new file mode 100644 index 0000000..bded606 --- /dev/null +++ b/localization/src/cli.ts @@ -0,0 +1,21 @@ +#!/usr/bin/env bun +import { migrate } from "./commands/migrate"; +import { generate } from "./commands/generate"; +import { validate } from "./commands/validate"; + +const [cmd] = process.argv.slice(2); + +switch (cmd) { + case "migrate": + await migrate(); + break; + case "generate": + await generate(); + break; + case "validate": + await validate(); + break; + default: + console.error(`Unknown command: ${cmd ?? "(none)"}\nUsage: loc `); + process.exit(1); +} diff --git a/localization/src/commands/generate.ts b/localization/src/commands/generate.ts new file mode 100644 index 0000000..6cff0bd --- /dev/null +++ b/localization/src/commands/generate.ts @@ -0,0 +1,97 @@ +/** + * Generate platform files from strings.json: + * - Apple: one Localizable.xcstrings (all languages nested). + * - KMP: one values[-lang]/strings.xml per supported language. + */ +import { mkdirSync } from "node:fs"; +import { join } from "node:path"; +import { + APPLE_XCSTRINGS, + kmpValuesDir, + KMP_RESOURCES, + STRINGS_JSON, +} from "../config"; +import { renderAndroid, type ParsedAndroid } from "../lib/android-xml"; +import { fromCanonical, type Flavor } from "../lib/placeholders"; +import { renderXcstrings, type XcCatalog, type XcEntry } from "../lib/xcstrings"; +import { targetsOf, type StringEntry, type StringsFile } from "../types"; + +function render(entry: StringEntry, text: string, flavor: Flavor): string { + return fromCanonical(text, entry.args ?? [], flavor); +} + +// ---- Apple ------------------------------------------------------------------ + +function buildXcstrings(doc: StringsFile): XcCatalog { + const strings: Record = {}; + + for (const [key, entry] of Object.entries(doc.strings)) { + if (!targetsOf(entry).includes("apple")) continue; + const xc: XcEntry = { extractionState: "manual" }; + if (entry.context) xc.comment = entry.context; + const localizations: XcEntry["localizations"] = {}; + + for (const lang of doc.supportedLanguages) { + const state = lang === doc.sourceLanguage ? "translated" : "needs_review"; + if (entry.plural) { + const forms = entry.plural[lang]; + if (!forms) continue; + const plural: Record = {}; + for (const [cat, value] of Object.entries(forms)) { + plural[cat] = { stringUnit: { state, value: render(entry, value, "apple") } }; + } + localizations[lang] = { variations: { plural } }; + } else { + const value = entry.translations?.[lang]; + if (value === undefined) continue; + localizations[lang] = { stringUnit: { state, value: render(entry, value, "apple") } }; + } + } + + if (Object.keys(localizations).length) xc.localizations = localizations; + strings[key] = xc; + } + + return { sourceLanguage: doc.sourceLanguage, strings, version: "1.0" }; +} + +// ---- KMP -------------------------------------------------------------------- + +function buildAndroid(doc: StringsFile, lang: string): ParsedAndroid { + const out: ParsedAndroid = { strings: [], plurals: [] }; + + for (const [key, entry] of Object.entries(doc.strings)) { + if (!targetsOf(entry).includes("kmp")) continue; + if (entry.plural) { + const forms = entry.plural[lang]; + if (!forms) continue; + const items: Record = {}; + for (const [cat, value] of Object.entries(forms)) { + items[cat] = render(entry, value, "android"); + } + out.plurals.push({ name: key, items }); + } else { + const value = entry.translations?.[lang]; + if (value === undefined) continue; + out.strings.push({ name: key, value: render(entry, value, "android") }); + } + } + return out; +} + +// ---- entry ------------------------------------------------------------------ + +export async function generate() { + const doc = JSON.parse(await Bun.file(STRINGS_JSON).text()) as StringsFile; + + await Bun.write(APPLE_XCSTRINGS, renderXcstrings(buildXcstrings(doc))); + console.log(`Wrote ${APPLE_XCSTRINGS}`); + + for (const lang of doc.supportedLanguages) { + const dir = join(KMP_RESOURCES, kmpValuesDir(lang, doc.sourceLanguage)); + mkdirSync(dir, { recursive: true }); + const file = join(dir, "strings.xml"); + await Bun.write(file, renderAndroid(buildAndroid(doc, lang))); + console.log(`Wrote ${file}`); + } +} diff --git a/localization/src/commands/migrate.ts b/localization/src/commands/migrate.ts new file mode 100644 index 0000000..a36818d --- /dev/null +++ b/localization/src/commands/migrate.ts @@ -0,0 +1,195 @@ +/** + * One-time migration: fold the existing .xcstrings (Apple) and Compose + * strings.xml (KMP) files into a single strings.json. + * + * - Placeholders are normalized to canonical `{argN}` tokens. + * - KMP `_one` / `_other` key pairs are folded into one plural entry. + * - `targets` is set from which platform(s) a key was found in. + * Arg names (`arg1`, `count`, …) and `context` are best-effort; curate by hand after. + */ +import { readdirSync } from "node:fs"; +import { join } from "node:path"; +import { APPLE_XCSTRINGS, KMP_RESOURCES, STRINGS_JSON } from "../config"; +import { parseAndroid } from "../lib/android-xml"; +import { parseXcstrings, type XcLocalization } from "../lib/xcstrings"; +import { toCanonical, type ParsedString } from "../lib/placeholders"; +import type { Arg, PluralForms, StringEntry, StringsFile, Target } from "../types"; + +const PLURAL_SUFFIXES = ["zero", "one", "two", "few", "many", "other"] as const; + +interface Draft { + targets: Set; + args?: Arg[]; + translations?: Record; + plural?: Record; + comment?: string; +} + +/** Give a friendlier name to a lone integer arg (common for counts). */ +function prettify(parsed: ParsedString): ParsedString { + if (parsed.args.length === 1 && parsed.args[0]!.type === "int") { + return { + text: parsed.text.replaceAll("{arg1}", "{count}"), + args: [{ name: "count", type: "int" }], + }; + } + return parsed; +} + +function ingest(draft: Draft, lang: string, raw: string) { + const p = prettify(toCanonical(raw)); + if (p.args.length) draft.args = p.args; + (draft.translations ??= {})[lang] = p.text; +} + +// ---- Apple (.xcstrings) ----------------------------------------------------- + +function unitValue(loc: XcLocalization | undefined): string | undefined { + return loc?.stringUnit?.value; +} + +async function readApple(drafts: Map) { + const cat = parseXcstrings(await Bun.file(APPLE_XCSTRINGS).text()); + for (const [key, entry] of Object.entries(cat.strings)) { + const draft = get(drafts, key); + draft.targets.add("apple"); + if (entry.comment) draft.comment = entry.comment; + for (const [lang, loc] of Object.entries(entry.localizations ?? {})) { + const plural = loc.variations?.plural; + if (plural) { + for (const [cat, unit] of Object.entries(plural)) { + const p = prettify(toCanonical(unit.stringUnit.value)); + if (p.args.length) draft.args = p.args; + ((draft.plural ??= {})[lang] ??= { other: "" } as PluralForms)[ + cat as keyof PluralForms + ] = p.text; + } + } else { + const v = unitValue(loc); + if (v !== undefined) ingest(draft, lang, v); + } + } + } +} + +// ---- KMP (compose strings.xml) --------------------------------------------- + +function pluralBaseOf(name: string): { base: string; cat: string } | null { + for (const suf of PLURAL_SUFFIXES) { + if (name.endsWith(`_${suf}`)) return { base: name.slice(0, -(suf.length + 1)), cat: suf }; + } + return null; +} + +async function readKmp(drafts: Map, sourceLanguage: string) { + const dirs = readdirSync(KMP_RESOURCES, { withFileTypes: true }) + .filter((d) => d.isDirectory() && (d.name === "values" || d.name.startsWith("values-"))) + .map((d) => d.name); + + for (const dir of dirs) { + const lang = dir === "values" ? sourceLanguage : dir.slice("values-".length); + const file = join(KMP_RESOURCES, dir, "strings.xml"); + if (!(await Bun.file(file).exists())) continue; + + const { strings, plurals } = parseAndroid(await Bun.file(file).text()); + for (const s of strings) { + const draft = get(drafts, s.name); + draft.targets.add("kmp"); + ingest(draft, lang, s.value); + } + // Real blocks (if any) fold directly into the base key. + for (const p of plurals) { + const draft = get(drafts, p.name); + draft.targets.add("kmp"); + for (const [cat, raw] of Object.entries(p.items)) { + const parsed = prettify(toCanonical(raw)); + if (parsed.args.length) draft.args = parsed.args; + ((draft.plural ??= {})[lang] ??= { other: "" } as PluralForms)[ + cat as keyof PluralForms + ] = parsed.text; + } + } + } +} + +/** + * Global fold: collapse flat `_` sibling keys (e.g. `_one`/`_other`) + * into one plural entry on ``, regardless of which platform they came from. + * Requires `other` plus at least one more category to avoid folding non-plurals. + */ +function foldPlurals(drafts: Map) { + const groups = new Map(); + for (const key of drafts.keys()) { + const pl = pluralBaseOf(key); + if (pl && drafts.get(key)!.translations) { + (groups.get(pl.base) ?? groups.set(pl.base, []).get(pl.base)!).push(key); + } + } + + for (const [base, keys] of groups) { + const cats = new Set(keys.map((k) => pluralBaseOf(k)!.cat)); + if (!cats.has("other") || cats.size < 2) continue; + + const target = get(drafts, base); + for (const key of keys) { + const cat = pluralBaseOf(key)!.cat as keyof PluralForms; + const src = drafts.get(key)!; + src.targets.forEach((t) => target.targets.add(t)); + if (src.args?.length) target.args = src.args; + target.comment ??= src.comment; + for (const [lang, text] of Object.entries(src.translations ?? {})) { + ((target.plural ??= {})[lang] ??= { other: "" } as PluralForms)[cat] = text; + } + drafts.delete(key); + } + } +} + +// ---- assembly --------------------------------------------------------------- + +function get(drafts: Map, key: string): Draft { + let d = drafts.get(key); + if (!d) drafts.set(key, (d = { targets: new Set() })); + return d; +} + +export async function migrate(sourceLanguage = "en") { + const drafts = new Map(); + await readApple(drafts); + await readKmp(drafts, sourceLanguage); + foldPlurals(drafts); + + const langs = new Set([sourceLanguage]); + const strings: Record = {}; + + for (const key of [...drafts.keys()].sort()) { + const d = drafts.get(key)!; + const entry: StringEntry = { context: d.comment ?? "TODO: describe where this appears." }; + + const targets = [...d.targets].sort() as Target[]; + if (targets.length && targets.length < 2) entry.targets = targets; + if (d.args?.length) entry.args = d.args; + + if (d.plural) { + entry.plural = d.plural; + Object.keys(d.plural).forEach((l) => langs.add(l)); + } else if (d.translations) { + entry.translations = d.translations; + Object.keys(d.translations).forEach((l) => langs.add(l)); + } + strings[key] = entry; + } + + const out: StringsFile = { + sourceLanguage, + supportedLanguages: [...langs].sort(), + strings, + }; + await Bun.write( + STRINGS_JSON, + JSON.stringify({ $schema: "./schema.json", ...out }, null, 2) + "\n", + ); + console.log( + `Wrote ${STRINGS_JSON}\n ${Object.keys(strings).length} keys, languages: ${[...langs].sort().join(", ")}`, + ); +} diff --git a/localization/src/commands/validate.ts b/localization/src/commands/validate.ts new file mode 100644 index 0000000..4f20ae8 --- /dev/null +++ b/localization/src/commands/validate.ts @@ -0,0 +1,55 @@ +/** Structural checks on strings.json. Exits non-zero on errors (warnings don't fail). */ +import { STRINGS_JSON } from "../config"; +import type { StringsFile } from "../types"; + +const TOKEN = /\{([A-Za-z_][A-Za-z0-9_]*)\}/g; + +export async function validate() { + const doc = JSON.parse(await Bun.file(STRINGS_JSON).text()) as StringsFile; + const errors: string[] = []; + const warnings: string[] = []; + + for (const [key, entry] of Object.entries(doc.strings)) { + const where = `"${key}"`; + const argNames = new Set((entry.args ?? []).map((a) => a.name)); + + if (entry.translations && entry.plural) { + errors.push(`${where}: has both "translations" and "plural" (pick one).`); + } + if (!entry.translations && !entry.plural) { + warnings.push(`${where}: no translations yet.`); + } + if (!entry.context?.trim() || entry.context.startsWith("TODO")) { + warnings.push(`${where}: missing/placeholder context.`); + } + + const texts: string[] = []; + if (entry.translations) texts.push(...Object.values(entry.translations)); + if (entry.plural) { + for (const [lang, forms] of Object.entries(entry.plural)) { + if (!forms.other?.trim()) errors.push(`${where} [${lang}]: plural missing required "other".`); + texts.push(...Object.values(forms)); + } + } + + for (const text of texts) { + for (const m of text.matchAll(TOKEN)) { + if (!argNames.has(m[1]!)) { + errors.push(`${where}: uses {${m[1]}} but no matching arg is declared.`); + } + } + } + + // Missing-language coverage (warn only). + for (const lang of doc.supportedLanguages) { + const present = entry.plural ? !!entry.plural[lang] : entry.translations?.[lang] !== undefined; + const anyTranslations = entry.translations || entry.plural; + if (anyTranslations && !present) warnings.push(`${where}: missing "${lang}".`); + } + } + + for (const w of warnings) console.warn(`warn ${w}`); + for (const e of errors) console.error(`error ${e}`); + console.log(`\n${Object.keys(doc.strings).length} keys — ${errors.length} error(s), ${warnings.length} warning(s).`); + if (errors.length) process.exit(1); +} diff --git a/localization/src/config.ts b/localization/src/config.ts new file mode 100644 index 0000000..8b9a6fd --- /dev/null +++ b/localization/src/config.ts @@ -0,0 +1,24 @@ +import { dirname, join, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; + +/** Repo root = parent of the localization/ directory. */ +export const REPO_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), "..", ".."); +export const LOC_DIR = join(REPO_ROOT, "localization"); +export const STRINGS_JSON = join(LOC_DIR, "strings.json"); + +/** Apple String Catalog — one file, all languages nested. */ +export const APPLE_XCSTRINGS = join( + REPO_ROOT, + "apple/VniDrop/Resources/Localizable.xcstrings", +); + +/** KMP / Compose Multiplatform resources root; one values[-lang]/strings.xml per language. */ +export const KMP_RESOURCES = join( + REPO_ROOT, + "shared/src/commonMain/composeResources", +); + +/** Directory holding a language's strings.xml under the compose resources root. */ +export function kmpValuesDir(lang: string, sourceLanguage: string): string { + return lang === sourceLanguage ? "values" : `values-${lang}`; +} diff --git a/localization/src/lib/android-xml.ts b/localization/src/lib/android-xml.ts new file mode 100644 index 0000000..ebe80de --- /dev/null +++ b/localization/src/lib/android-xml.ts @@ -0,0 +1,96 @@ +/** + * Read/write Compose Multiplatform (Android-style) strings.xml. + * The existing file is flat and machine-friendly, so we use a targeted parser + * rather than a full DOM. Handles and with XML entities and + * Android backslash escapes. + */ + +export interface AndroidString { + name: string; + value: string; +} +export interface AndroidPlural { + name: string; + items: Record; // quantity -> value +} + +export interface ParsedAndroid { + strings: AndroidString[]; + plurals: AndroidPlural[]; +} + +function decodeEntities(s: string): string { + return s + .replace(/&#x([0-9a-fA-F]+);/g, (_m, h) => String.fromCodePoint(parseInt(h, 16))) + .replace(/&#(\d+);/g, (_m, d) => String.fromCodePoint(parseInt(d, 10))) + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll(""", '"') + .replaceAll("'", "'") + .replaceAll("&", "&"); +} + +/** Reverse Android's leading/trailing-quote + backslash escapes into plain text. */ +function unescapeAndroid(raw: string): string { + let s = raw.trim(); + if (s.length >= 2 && s.startsWith('"') && s.endsWith('"')) { + s = s.slice(1, -1); + } + s = s + .replace(/\\n/g, "\n") + .replace(/\\t/g, "\t") + .replace(/\\'/g, "'") + .replace(/\\"/g, '"') + .replace(/\\@/g, "@") + .replace(/\\\\/g, "\\"); + return decodeEntities(s); +} + +export function parseAndroid(xml: string): ParsedAndroid { + const strings: AndroidString[] = []; + const plurals: AndroidPlural[] = []; + + const stringRe = /([\s\S]*?)<\/string>/g; + for (const m of xml.matchAll(stringRe)) { + strings.push({ name: m[1]!, value: unescapeAndroid(m[2]!) }); + } + + const pluralRe = /([\s\S]*?)<\/plurals>/g; + const itemRe = /([\s\S]*?)<\/item>/g; + for (const m of xml.matchAll(pluralRe)) { + const items: Record = {}; + for (const it of m[2]!.matchAll(itemRe)) { + items[it[1]!] = unescapeAndroid(it[2]!); + } + plurals.push({ name: m[1]!, items }); + } + + return { strings, plurals }; +} + +function escapeXmlText(s: string): string { + return s.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">"); +} + +/** Android needs apostrophes and quotes escaped, and quotes on leading/trailing whitespace. */ +function escapeAndroidValue(s: string): string { + let out = escapeXmlText(s).replace(/'/g, "\\'").replace(/\n/g, "\\n"); + if (out !== out.trim()) out = `"${out}"`; + return out; +} + +export function renderAndroid(parsed: ParsedAndroid): string { + const lines: string[] = ['', ""]; + for (const s of parsed.strings) { + lines.push(` ${escapeAndroidValue(s.value)}`); + } + for (const p of parsed.plurals) { + lines.push(` `); + for (const [q, v] of Object.entries(p.items)) { + lines.push(` ${escapeAndroidValue(v)}`); + } + lines.push(" "); + } + lines.push("", ""); + return lines.join("\n"); +} diff --git a/localization/src/lib/placeholders.ts b/localization/src/lib/placeholders.ts new file mode 100644 index 0000000..e68e7f6 --- /dev/null +++ b/localization/src/lib/placeholders.ts @@ -0,0 +1,98 @@ +/** + * Canonical placeholder handling. + * + * Canonical form (in strings.json) uses named tokens: `{count}`, `{name}`. + * Platform output uses positional printf tokens, resolved from the entry's + * ordered `args`: + * - Apple (.xcstrings): string -> %N$@ int -> %N$d double -> %N$f + * - Android (.xml): string -> %N$s int -> %N$d double -> %N$f + * A literal percent is written `%%` on both platforms whenever the string + * carries args (printf-active); canonical text stores it as a bare `%`. + */ +import type { Arg, ArgType } from "../types"; + +export type Flavor = "apple" | "android"; + +function stringToken(flavor: Flavor): string { + return flavor === "apple" ? "@" : "s"; +} + +function tokenForType(type: ArgType, flavor: Flavor): string { + switch (type) { + case "string": + return stringToken(flavor); + case "int": + return "d"; + case "double": + return "f"; + } +} + +/** Render canonical `{name}` text into a platform printf string. */ +export function fromCanonical( + text: string, + args: Arg[], + flavor: Flavor, +): string { + const hasArgs = args.length > 0; + const index = new Map(args.map((a, i) => [a.name, { i: i + 1, type: a.type }])); + + // Escape literal % first (only meaningful when printf-active). + let out = hasArgs ? text.replaceAll("%", "%%") : text; + + out = out.replace(/\{([A-Za-z_][A-Za-z0-9_]*)\}/g, (_whole, name: string) => { + const found = index.get(name); + if (!found) { + throw new Error( + `placeholder {${name}} has no matching arg (${args.map((a) => a.name).join(", ") || "none"})`, + ); + } + return `%${found.i}$${tokenForType(found.type, flavor)}`; + }); + + return out; +} + +export interface ParsedString { + /** Canonical text with `{argN}` tokens. */ + text: string; + /** Args discovered, ordered by first positional index. */ + args: Arg[]; +} + +// Matches an escaped literal `%%` or a printf specifier (positional or bare). +const CONV = /%%|%(?:(\d+)\$)?([@sdif])/g; + +function typeForConv(conv: string): ArgType { + if (conv === "@" || conv === "s") return "string"; + if (conv === "d" || conv === "i") return "int"; + return "double"; // f +} + +/** + * Parse a platform printf string back into canonical `{argN}` form, inferring + * arg names (`arg1`, `arg2`, ...) and types from the conversion specifiers. + * Handles positional (`%1$@`), bare (`%@`), and escaped literals (`%%`). + */ +export function toCanonical(raw: string): ParsedString { + const byIndex = new Map(); + let auto = 0; + + const text = raw.replace(CONV, (whole, pos: string | undefined, conv: string) => { + if (whole === "%%") return "%"; // literal percent, not a specifier + const idx = pos ? Number(pos) : ++auto; + const type = typeForConv(conv); + const existing = byIndex.get(idx); + if (existing && existing !== type) { + throw new Error(`arg ${idx} used with conflicting types in "${raw}"`); + } + byIndex.set(idx, type); + return `{arg${idx}}`; + }); + + const args: Arg[] = [...byIndex.keys()] + .sort((a, b) => a - b) + .map((idx) => ({ name: `arg${idx}`, type: byIndex.get(idx)! })); + + return { text, args }; +} diff --git a/localization/src/lib/xcstrings.ts b/localization/src/lib/xcstrings.ts new file mode 100644 index 0000000..dfd3eff --- /dev/null +++ b/localization/src/lib/xcstrings.ts @@ -0,0 +1,45 @@ +/** Read/write Apple String Catalog (.xcstrings) — a single JSON file, all languages nested. */ + +export type XcState = "new" | "translated" | "needs_review" | "stale"; + +export interface XcStringUnit { + state: XcState; + value: string; +} +export interface XcVariations { + plural?: Record; +} +export interface XcLocalization { + stringUnit?: XcStringUnit; + variations?: XcVariations; +} +export interface XcEntry { + comment?: string; + extractionState?: string; + localizations?: Record; +} +export interface XcCatalog { + sourceLanguage: string; + strings: Record; + version: string; +} + +export function parseXcstrings(json: string): XcCatalog { + return JSON.parse(json) as XcCatalog; +} + +/** Stable, Xcode-compatible serialization: 2-space indent, keys sorted, trailing newline. */ +export function renderXcstrings(cat: XcCatalog): string { + const sortDeep = (v: unknown): unknown => { + if (Array.isArray(v)) return v.map(sortDeep); + if (v && typeof v === "object") { + const out: Record = {}; + for (const k of Object.keys(v as Record).sort()) { + out[k] = sortDeep((v as Record)[k]); + } + return out; + } + return v; + }; + return JSON.stringify(sortDeep(cat), null, 2) + "\n"; +} diff --git a/localization/src/types.ts b/localization/src/types.ts new file mode 100644 index 0000000..086522a --- /dev/null +++ b/localization/src/types.ts @@ -0,0 +1,43 @@ +/** Canonical localization data model. See ../README.md for the full spec. */ + +/** Output targets a string can be emitted to. */ +export type Target = "kmp" | "apple"; +export const ALL_TARGETS: Target[] = ["kmp", "apple"]; + +/** Argument types, used to pick the right platform placeholder token. */ +export type ArgType = "string" | "int" | "double"; + +export interface Arg { + /** Name referenced inside translations as `{name}`. */ + name: string; + type: ArgType; +} + +/** CLDR plural categories. `other` is always required when `plural` is used. */ +export type PluralCategory = "zero" | "one" | "two" | "few" | "many" | "other"; +export type PluralForms = Partial> & { + other: string; +}; + +export interface StringEntry { + /** Where the string appears / its purpose. Emitted as xcstrings comment + xml comment. */ + context: string; + /** Defaults to all targets when omitted. */ + targets?: Target[]; + /** Ordered positional args referenced as `{name}` in translations. */ + args?: Arg[]; + /** Flat (non-plural) translations, keyed by language. Mutually exclusive with `plural`. */ + translations?: Record; + /** Plural translations, keyed by language then CLDR category. Mutually exclusive with `translations`. */ + plural?: Record; +} + +export interface StringsFile { + sourceLanguage: string; + supportedLanguages: string[]; + strings: Record; +} + +export function targetsOf(entry: StringEntry): Target[] { + return entry.targets ?? ALL_TARGETS; +} diff --git a/localization/strings.json b/localization/strings.json new file mode 100644 index 0000000..f3d3a68 --- /dev/null +++ b/localization/strings.json @@ -0,0 +1,1741 @@ +{ + "$schema": "./schema.json", + "sourceLanguage": "en", + "supportedLanguages": [ + "en" + ], + "strings": { + "%@": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ] + }, + "%@ %@ · %@": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "args": [ + { + "name": "arg1", + "type": "string" + }, + { + "name": "arg2", + "type": "string" + }, + { + "name": "arg3", + "type": "string" + } + ], + "translations": { + "en": "{arg1} {arg2} · {arg3}" + } + }, + "%@ · %@": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "args": [ + { + "name": "arg1", + "type": "string" + }, + { + "name": "arg2", + "type": "string" + } + ], + "translations": { + "en": "{arg1} · {arg2}" + } + }, + "%@%%": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ] + }, + "about_bug_report": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Report a bug" + } + }, + "about_description": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done." + } + }, + "about_is_direct": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "A direct device-to-device transfer — your files go straight to the receiver." + } + }, + "about_is_encrypted": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash." + } + }, + "about_is_in_control": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation." + } + }, + "about_is_no_account": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Account-free — there’s nothing to sign up for." + } + }, + "about_is_open": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Open source, released under the Apache 2.0 license." + } + }, + "about_is_title": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "What VniDrop is" + } + }, + "about_isnt_cloud": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer." + } + }, + "about_isnt_public": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby." + } + }, + "about_isnt_sync": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Not a sync or backup service." + } + }, + "about_isnt_title": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "What VniDrop isn’t" + } + }, + "about_license_label": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "License" + } + }, + "about_privacy": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Privacy policy" + } + }, + "about_privacy_capability": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”" + } + }, + "about_privacy_deny": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests." + } + }, + "about_privacy_local": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Received files are saved on your device and never silently overwrite an existing file." + } + }, + "about_privacy_policy_label": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Privacy policy" + } + }, + "about_privacy_relay": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files." + } + }, + "about_privacy_title": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Privacy & security" + } + }, + "about_tagline": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Send files directly. Stay in control of who receives them." + } + }, + "about_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "About" + } + }, + "appearance_auto_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Match this device’s light or dark appearance." + } + }, + "appearance_dark_mode": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Dark mode" + } + }, + "appearance_light_mode": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Light mode" + } + }, + "appearance_system_mode": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "System" + } + }, + "appearance_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Appearance" + } + }, + "approval_connection_request": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Receive request" + } + }, + "approval_endpoint_id": { + "context": "TODO: describe where this appears.", + "args": [ + { + "name": "arg1", + "type": "string" + } + ], + "translations": { + "en": "Device ID: {arg1}" + } + }, + "approval_nearby_device": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "A nearby device" + } + }, + "approval_pending_count": { + "context": "TODO: describe where this appears.", + "args": [ + { + "name": "count", + "type": "int" + } + ], + "translations": { + "en": "{count} requests waiting" + } + }, + "approval_request_body": { + "context": "TODO: describe where this appears.", + "args": [ + { + "name": "arg1", + "type": "string" + }, + { + "name": "arg2", + "type": "string" + } + ], + "translations": { + "en": "{arg1} wants to receive “{arg2}”." + } + }, + "battery_level_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Battery level" + } + }, + "bug_report_contact_hint": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "name@example.com" + } + }, + "bug_report_contact_label": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Contact email (optional)" + } + }, + "bug_report_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted)." + } + }, + "bug_report_device_section": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Device information" + } + }, + "bug_report_expected_hint": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Describe what you expected to happen" + } + }, + "bug_report_expected_label": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "What did you expect?" + } + }, + "bug_report_include_logs": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Include recent logs" + } + }, + "bug_report_include_logs_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Helps us diagnose the issue. Sensitive values are redacted before sending." + } + }, + "bug_report_logs_size": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Log attachment size" + } + }, + "bug_report_missing_expected": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Please describe what you expected." + } + }, + "bug_report_missing_what": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Please describe what happened." + } + }, + "bug_report_steps_hint": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "List the steps to reproduce the issue" + } + }, + "bug_report_steps_label": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Steps to reproduce (optional)" + } + }, + "bug_report_submit": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Submit report" + } + }, + "bug_report_submit_failed": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Could not submit the bug report. Try again later." + } + }, + "bug_report_submitted": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Thanks — your bug report was recorded." + } + }, + "bug_report_submitting": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Submitting…" + } + }, + "bug_report_what_hint": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Describe what happened" + } + }, + "bug_report_what_label": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "What happened?" + } + }, + "button_approve": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Approve" + } + }, + "button_back": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Back" + } + }, + "button_cancel": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Cancel" + } + }, + "button_cancel_receive": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Cancel" + } + }, + "button_change_files": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Change files" + } + }, + "button_choose_files": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Choose files" + } + }, + "button_choose_folder": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Choose folder" + } + }, + "button_clear": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Clear" + } + }, + "button_close": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Close" + } + }, + "button_create_new_transfer": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "New transfer" + } + }, + "button_delete_transfer": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Delete transfer" + } + }, + "button_download_invitation": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Save .vnd file" + } + }, + "button_native_share": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Share invitation" + } + }, + "button_open_settings": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Open Settings" + } + }, + "button_receive": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Receive" + } + }, + "button_receive_files": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Start receiving" + } + }, + "button_refuse": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Refuse" + } + }, + "button_remove_file": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Remove file" + } + }, + "button_reset_default": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Use default" + } + }, + "button_retry": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Retry" + } + }, + "button_share_file": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Start sharing" + } + }, + "button_sharing_file": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Preparing transfer…" + } + }, + "button_show_in_files": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Show in Files" + } + }, + "button_write_nfc": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Write to NFC tag" + } + }, + "device_model_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Device model" + } + }, + "device_name_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Device name" + } + }, + "diagnostics_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included." + } + }, + "diagnostics_disabled_message": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Diagnostics sharing is off." + } + }, + "diagnostics_enabled_message": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Diagnostics sharing is on." + } + }, + "diagnostics_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Share diagnostics" + } + }, + "error_camera": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Camera access is required to scan a QR code." + } + }, + "error_device_info": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Could not load device information." + } + }, + "error_filesystem": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "VniDrop could not access the selected files or folder. Check permissions and try again." + } + }, + "error_generic": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Something went wrong. Try again." + } + }, + "error_initialization": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "VniDrop could not finish starting up. Close the app and try again." + } + }, + "error_invalid_ticket": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "This invitation could not be read. Ask the sender for a new one." + } + }, + "error_invitation_empty": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "That invitation is empty. Try opening it again." + } + }, + "error_missing_native_library": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "The native VniDrop library is missing from this build." + } + }, + "error_nfc": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "This NFC tag could not be used. Try another tag." + } + }, + "error_permission": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "The sender has not approved this transfer, or it was refused." + } + }, + "error_repository": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "VniDrop could not save transfer data on this device." + } + }, + "error_selection_failed": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Could not open the selected item. Try choosing it again." + } + }, + "error_share_empty": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Select at least one item to share." + } + }, + "error_socket_bind": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "VniDrop could not open its network sockets on this device." + } + }, + "error_starting_up": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "VniDrop is still starting. Open the invitation again in a moment." + } + }, + "error_transfer": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "The transfer could not be completed. Check your connection and try again." + } + }, + "field_receiver_name": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Receiver name" + } + }, + "field_sender_name": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Sender name" + } + }, + "field_transfer_name": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Transfer name" + } + }, + "field_username": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Display name" + } + }, + "folder_status_permission_required": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Permission needed" + } + }, + "folder_status_unavailable": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Unavailable" + } + }, + "folder_status_validating": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Checking folder…" + } + }, + "folder_status_writable": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Ready" + } + }, + "metadata_files": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Files" + } + }, + "metadata_size": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Size" + } + }, + "metadata_status": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Status" + } + }, + "nav_receive": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Receive" + } + }, + "nav_send": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Send" + } + }, + "nav_settings": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Settings" + } + }, + "network_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Network" + } + }, + "notifications_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Get notified about new receive requests while VniDrop is in the background." + } + }, + "notifications_enabled_message": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Notifications enabled." + } + }, + "notifications_local_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Allow notifications" + } + }, + "notifications_permission_denied": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Notifications are turned off for VniDrop. You can enable them in Settings." + } + }, + "notifications_settings_open_failed": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Could not open notification settings." + } + }, + "notifications_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Notifications" + } + }, + "notifications_unsupported": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Notifications are not available on this device." + } + }, + "os_version_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Operating system" + } + }, + "preferences_receive_folder_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Save received transfers to" + } + }, + "preferences_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Preferences" + } + }, + "progress_cancelled": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Cancelled" + } + }, + "progress_completed": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Completed" + } + }, + "progress_connected": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Connected" + } + }, + "progress_connecting": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Connecting" + } + }, + "progress_downloading": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Downloading" + } + }, + "progress_failed": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Failed" + } + }, + "progress_getting_ready": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Getting ready" + } + }, + "progress_interrupted": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Transfer interrupted" + } + }, + "progress_preparing": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Preparing" + } + }, + "progress_ready": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Ready" + } + }, + "progress_receiving": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Receiving" + } + }, + "progress_requesting_access": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Requesting access" + } + }, + "progress_saving": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Saving" + } + }, + "progress_sending": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Sending" + } + }, + "progress_sending_to_count": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Sending to %lld" + } + }, + "progress_share_ready": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Ready to share" + } + }, + "progress_working": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Working…" + } + }, + "receive_choose_method_body": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Choose the invitation method available to you." + } + }, + "receive_choose_method_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "How would you like to connect?" + } + }, + "receive_clear_history": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Clear history" + } + }, + "receive_clear_history_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device." + } + }, + "receive_clear_history_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Clear receive history?" + } + }, + "receive_completed": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Transfer received." + } + }, + "receive_delete_history_description": { + "context": "TODO: describe where this appears.", + "args": [ + { + "name": "arg1", + "type": "string" + } + ], + "translations": { + "en": "“{arg1}” will be removed from VniDrop’s history. The downloaded file will remain on this device." + } + }, + "receive_delete_history_item": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Delete from receive history" + } + }, + "receive_delete_history_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Remove from history?" + } + }, + "receive_empty_body": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag." + } + }, + "receive_empty_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Nothing received yet" + } + }, + "receive_history_cleared": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Receive history cleared." + } + }, + "receive_history_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "History" + } + }, + "receive_method_file": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Open a .vnd invitation" + } + }, + "receive_method_file_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Choose an invitation saved or shared to this device." + } + }, + "receive_method_nfc": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Read NFC tag" + } + }, + "receive_method_nfc_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Hold this device near the sender’s invitation tag." + } + }, + "receive_method_scan": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Scan QR code" + } + }, + "receive_method_scan_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Use the camera to scan the sender’s VniDrop code." + } + }, + "receive_new_subtitle": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Transfers you’ve received on this device." + } + }, + "receive_nfc_waiting": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Hold near the NFC tag…" + } + }, + "receive_open_files_failed": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Couldn’t open VniDrop in Files." + } + }, + "receive_review_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Review transfer" + } + }, + "receive_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Receive" + } + }, + "receive_unknown_transfer": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "VniDrop transfer" + } + }, + "send_access_anyone": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Anyone with this transfer" + } + }, + "send_access_anyone_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "No approval is required. Only use this for items you are comfortable sharing." + } + }, + "send_access_anyone_warning": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items." + } + }, + "send_access_approval": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Ask before each download" + } + }, + "send_access_approval_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "You approve or refuse every new receiver." + } + }, + "send_access_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Who can receive it?" + } + }, + "send_choose_file_body": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Select files or a folder from this device. You can review the selection before creating the transfer." + } + }, + "send_choose_file_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Choose what to share" + } + }, + "send_empty_body": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file." + } + }, + "send_empty_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Nothing shared yet" + } + }, + "send_file_size_unknown": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Size unavailable" + } + }, + "send_folder_label": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Folder" + } + }, + "send_new_transfer_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Create a new transfer" + } + }, + "send_new_transfer_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "New transfer" + } + }, + "send_review_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Review transfer" + } + }, + "send_selected_files_count": { + "context": "TODO: describe where this appears.", + "args": [ + { + "name": "count", + "type": "int" + } + ], + "translations": { + "en": "{count} files selected" + } + }, + "send_stop_sharing": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Stop sharing" + } + }, + "send_stop_sharing_description": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped." + } + }, + "send_subtitle": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Transfers you’re sharing from this device." + } + }, + "send_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Send" + } + }, + "send_transfer_created": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Transfer created." + } + }, + "send_transfer_details_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Transfer details" + } + }, + "send_transfers_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Your transfers" + } + }, + "settings_subtitle": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Your name, where transfers are saved, appearance, and notifications." + } + }, + "settings_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Settings" + } + }, + "snackbar_dismiss": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Dismiss" + } + }, + "status_available": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Available" + } + }, + "status_cancelled": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Cancelled" + } + }, + "status_completed": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Completed" + } + }, + "status_failed": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Failed" + } + }, + "status_preparing": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Preparing" + } + }, + "status_receiving": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Receiving" + } + }, + "status_stopped": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Stopped" + } + }, + "storage_calculating": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Calculating…" + } + }, + "storage_delete_transfers": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Delete all transfers" + } + }, + "storage_delete_transfers_description": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone." + } + }, + "storage_deleting": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Deleting…" + } + }, + "storage_footer": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here." + } + }, + "storage_received_files": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Received files" + } + }, + "storage_temporary": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Temporary files" + } + }, + "storage_title": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Storage" + } + }, + "storage_total": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Total" + } + }, + "storage_transfer_data": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "Transfer data" + } + }, + "storage_transfers_deleted": { + "context": "TODO: describe where this appears.", + "targets": [ + "apple" + ], + "translations": { + "en": "All transfers deleted" + } + }, + "transfer_activity_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "See important updates for this transfer" + } + }, + "transfer_activity_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Activity" + } + }, + "transfer_delete_description": { + "context": "TODO: describe where this appears.", + "args": [ + { + "name": "arg1", + "type": "string" + } + ], + "translations": { + "en": "“{arg1}” will stop being shared and its transfer history will be removed from this device." + } + }, + "transfer_delete_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Delete transfer?" + } + }, + "transfer_deleted": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Transfer deleted." + } + }, + "transfer_deleting": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Deleting…" + } + }, + "transfer_details_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Transfer details" + } + }, + "transfer_event_approved": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Receiver access approved" + } + }, + "transfer_event_completed": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "A receiver completed the transfer" + } + }, + "transfer_event_connecting": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Connecting to sender" + } + }, + "transfer_event_downloading": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Downloading" + } + }, + "transfer_event_failed": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "The transfer encountered a problem" + } + }, + "transfer_event_preparing": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Preparing your transfer" + } + }, + "transfer_event_ready": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Ready to share" + } + }, + "transfer_event_refused": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Receiver access refused" + } + }, + "transfer_event_requested": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "A receiver requested access" + } + }, + "transfer_event_saving": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Saving" + } + }, + "transfer_event_stopped": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Sharing stopped" + } + }, + "transfer_event_updated": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Transfer updated" + } + }, + "transfer_file_count": { + "context": "TODO: describe where this appears.", + "args": [ + { + "name": "count", + "type": "int" + } + ], + "plural": { + "en": { + "other": "{count} files", + "one": "{count} file" + } + } + }, + "transfer_invitation_saved": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Invitation saved." + } + }, + "transfer_nearby_device": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Nearby device" + } + }, + "transfer_nfc_unavailable": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "NFC tag writing is not available on this device." + } + }, + "transfer_nfc_waiting": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Hold your device near a writable NFC tag." + } + }, + "transfer_nfc_written": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Invitation written to the NFC tag." + } + }, + "transfer_no_activity": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "There is no activity to show yet." + } + }, + "transfer_no_receivers": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Nobody has requested this transfer yet." + } + }, + "transfer_receiver_accepted": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Approved — waiting for completion" + } + }, + "transfer_receiver_completed": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Received successfully" + } + }, + "transfer_receiver_expired": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Request expired" + } + }, + "transfer_receiver_refused": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Request refused" + } + }, + "transfer_receiver_requested": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Waiting for your approval" + } + }, + "transfer_receiver_unknown": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Status unavailable" + } + }, + "transfer_receivers_completed_count": { + "context": "TODO: describe where this appears.", + "args": [ + { + "name": "count", + "type": "int" + } + ], + "translations": { + "en": "{count} completed" + } + }, + "transfer_receivers_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Requests, approvals, and completed deliveries" + } + }, + "transfer_receivers_pending": { + "context": "TODO: describe where this appears.", + "args": [ + { + "name": "count", + "type": "int" + } + ], + "translations": { + "en": "{count} waiting" + } + }, + "transfer_receivers_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Receivers" + } + }, + "transfer_scan_qr": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Scan with VniDrop to receive this transfer" + } + }, + "transfer_share_description": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "QR code, invitation file, and nearby options" + } + }, + "transfer_share_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Share" + } + }, + "value_unavailable": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "Not available" + } + }, + "version_title": { + "context": "TODO: describe where this appears.", + "translations": { + "en": "App version" + } + } + } +} diff --git a/localization/tsconfig.json b/localization/tsconfig.json new file mode 100644 index 0000000..9b4a7ec --- /dev/null +++ b/localization/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "lib": ["ESNext"], + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "types": ["bun-types"], + "strict": true, + "noUncheckedIndexedAccess": true, + "skipLibCheck": true, + "verbatimModuleSyntax": true + }, + "include": ["src"] +} diff --git a/shared/src/commonMain/composeResources/values/strings.xml b/shared/src/commonMain/composeResources/values/strings.xml index e866f8b..d8b7311 100644 --- a/shared/src/commonMain/composeResources/values/strings.xml +++ b/shared/src/commonMain/composeResources/values/strings.xml @@ -1,218 +1,220 @@ + - Send - Receive - Settings - Send - Transfers you’re sharing from this device. - Nothing shared yet - Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file. - New transfer - Your transfers - New transfer - Choose what to share - Select files or a folder from this device. You can review the selection before creating the transfer. - %1$d files selected - Folder - Remove file - Choose files - Change files - Review transfer - Who can receive it? - Ask before each download - You approve or refuse every new receiver. - Anyone with this transfer - No approval is required. Only use this for items you are comfortable sharing. - Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items. - Size unavailable - Transfer created. - Transfer details - Activity - See important updates for this transfer - Receivers - Requests, approvals, and completed deliveries - Share - QR code, invitation file, and nearby options - Delete transfer? - “%1$s” will stop being shared and its transfer history will be removed from this device. - Deleting… - Transfer deleted. - There is no activity to show yet. - Nobody has requested this transfer yet. - Waiting for your approval - Approved — waiting for completion - Request refused - Request expired - Received successfully - Status unavailable - Nearby device - Scan with VniDrop to receive this transfer - Write to NFC tag - Save .vnd file - Share invitation - NFC tag writing is not available on this device. - Hold your device near a writable NFC tag. - Invitation saved. - Invitation written to the NFC tag. - Preparing your transfer - Ready to share - A receiver requested access - Receiver access approved - Receiver access refused - A receiver completed the transfer - Sharing stopped - The transfer encountered a problem - Transfer updated - Start sharing - Preparing transfer… - Create a new transfer - Clear - Transfer details - Transfer name - Sender name - Refuse - Approve - Receive - Transfers you’ve received on this device. - Nothing received yet - Open a VniDrop invitation, scan a QR code, or hold near an NFC tag. - Start receiving - History - Clear history - Delete from receive history - Remove from history? - “%1$s” will be removed from VniDrop’s history. The downloaded file will remain on this device. - Clear receive history? - All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device. - Receive history cleared. - How would you like to connect? - Choose the invitation method available to you. - Open a .vnd invitation - Choose an invitation saved or shared to this device. - Scan QR code - Use the camera to scan the sender’s VniDrop code. - Read NFC tag - Hold this device near the sender’s invitation tag. - Hold near the NFC tag… - Review transfer - VniDrop transfer - Transfer received. - Show in Files - Couldn’t open VniDrop in Files. - Receiver name - Receive - Retry - Cancel - Receiving - Preparing - Ready - Ready to share - Connecting - Connected - Requesting access - Getting ready - Downloading - Saving - Sending - Completed - Cancelled - Failed - Transfer interrupted - Working… - Preparing - Available - Receiving - Completed - Cancelled - Stopped - Failed - %1$d waiting - %1$d completed - Downloading - Saving - Connecting to sender - %1$d file - %1$d files - - Settings - Your name, where transfers are saved, appearance, and notifications. - Appearance - Preferences - Display name - Save received transfers to - Choose folder - Use default - Back - Close - Cancel - Delete transfer - Ready - Permission needed - Unavailable - Checking folder… - System + Report a bug + Privacy policy + About + Match this device’s light or dark appearance. Dark mode Light mode - Match this device’s light or dark appearance. - About - Privacy policy - Report a bug - Share diagnostics - Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included. - Diagnostics sharing is on. - Diagnostics sharing is off. - Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted). - What happened? - What did you expect? - Steps to reproduce (optional) + System + Appearance + Receive request + Device ID: %1$s + A nearby device + %1$d requests waiting + %1$s wants to receive “%2$s”. + Battery level Contact email (optional) + Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted). + Device information + What did you expect? Include recent logs Helps us diagnose the issue. Sensitive values are redacted before sending. Log attachment size - Device information - Submit report - Submitting… - Thanks — your bug report was recorded. - Could not submit the bug report. Try again later. - Please describe what happened. Please describe what you expected. - App version - Device name - Device model - Operating system - Network - Battery level - Not available - Notifications - Allow notifications - Get notified about new receive requests while VniDrop is in the background. - Notifications are turned off for VniDrop. You can enable them in Settings. - Notifications are not available on this device. - Notifications enabled. - Could not open notification settings. + Please describe what happened. + Steps to reproduce (optional) + Submit report + Could not submit the bug report. Try again later. + Thanks — your bug report was recorded. + Submitting… + What happened? + Approve + Back + Cancel + Cancel + Change files + Choose files + Choose folder + Clear + Close + New transfer + Delete transfer + Save .vnd file + Share invitation Open Settings - Dismiss - Receive request - %1$s wants to receive “%2$s”. - A nearby device - Device ID: %1$s - %1$d requests waiting - Size - Files - Status + Receive + Start receiving + Refuse + Remove file + Use default + Retry + Start sharing + Preparing transfer… + Show in Files + Write to NFC tag + Device model + Device name + Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included. + Diagnostics sharing is off. + Diagnostics sharing is on. + Share diagnostics + Camera access is required to scan a QR code. + Could not load device information. + VniDrop could not access the selected files or folder. Check permissions and try again. Something went wrong. Try again. - VniDrop is still starting. Open the invitation again in a moment. + VniDrop could not finish starting up. Close the app and try again. This invitation could not be read. Ask the sender for a new one. That invitation is empty. Try opening it again. - The sender has not approved this transfer, or it was refused. - VniDrop could not access the selected files or folder. Check permissions and try again. - The transfer could not be completed. Check your connection and try again. - VniDrop could not save transfer data on this device. - VniDrop could not finish starting up. Close the app and try again. - VniDrop could not open its network sockets on this device. The native VniDrop library is missing from this build. - Could not open the selected item. Try choosing it again. - Could not load device information. This NFC tag could not be used. Try another tag. - Camera access is required to scan a QR code. + The sender has not approved this transfer, or it was refused. + VniDrop could not save transfer data on this device. + Could not open the selected item. Try choosing it again. Select at least one item to share. + VniDrop could not open its network sockets on this device. + VniDrop is still starting. Open the invitation again in a moment. + The transfer could not be completed. Check your connection and try again. + Receiver name + Sender name + Transfer name + Display name + Permission needed + Unavailable + Checking folder… + Ready + Files + Size + Status + Receive + Send + Settings + Network + Get notified about new receive requests while VniDrop is in the background. + Notifications enabled. + Allow notifications + Notifications are turned off for VniDrop. You can enable them in Settings. + Could not open notification settings. + Notifications + Notifications are not available on this device. + Operating system + Save received transfers to + Preferences + Cancelled + Completed + Connected + Connecting + Downloading + Failed + Getting ready + Transfer interrupted + Preparing + Ready + Receiving + Requesting access + Saving + Sending + Ready to share + Working… + Choose the invitation method available to you. + How would you like to connect? + Clear history + All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device. + Clear receive history? + Transfer received. + “%1$s” will be removed from VniDrop’s history. The downloaded file will remain on this device. + Delete from receive history + Remove from history? + Open a VniDrop invitation, scan a QR code, or hold near an NFC tag. + Nothing received yet + Receive history cleared. + History + Open a .vnd invitation + Choose an invitation saved or shared to this device. + Read NFC tag + Hold this device near the sender’s invitation tag. + Scan QR code + Use the camera to scan the sender’s VniDrop code. + Transfers you’ve received on this device. + Hold near the NFC tag… + Couldn’t open VniDrop in Files. + Review transfer + Receive + VniDrop transfer + Anyone with this transfer + No approval is required. Only use this for items you are comfortable sharing. + Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items. + Ask before each download + You approve or refuse every new receiver. + Who can receive it? + Select files or a folder from this device. You can review the selection before creating the transfer. + Choose what to share + Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file. + Nothing shared yet + Size unavailable + Folder + Create a new transfer + New transfer + Review transfer + %1$d files selected + Transfers you’re sharing from this device. + Send + Transfer created. + Transfer details + Your transfers + Your name, where transfers are saved, appearance, and notifications. + Settings + Dismiss + Available + Cancelled + Completed + Failed + Preparing + Receiving + Stopped + See important updates for this transfer + Activity + “%1$s” will stop being shared and its transfer history will be removed from this device. + Delete transfer? + Transfer deleted. + Deleting… + Transfer details + Receiver access approved + A receiver completed the transfer + Connecting to sender + Downloading + The transfer encountered a problem + Preparing your transfer + Ready to share + Receiver access refused + A receiver requested access + Saving + Sharing stopped + Transfer updated + Invitation saved. + Nearby device + NFC tag writing is not available on this device. + Hold your device near a writable NFC tag. + Invitation written to the NFC tag. + There is no activity to show yet. + Nobody has requested this transfer yet. + Approved — waiting for completion + Received successfully + Request expired + Request refused + Waiting for your approval + Status unavailable + %1$d completed + Requests, approvals, and completed deliveries + %1$d waiting + Receivers + Scan with VniDrop to receive this transfer + QR code, invitation file, and nearby options + Share + Not available + App version + + %1$d files + %1$d file + diff --git a/shared/src/commonMain/kotlin/com/vnidrop/app/ui/state/AppUiModels.kt b/shared/src/commonMain/kotlin/com/vnidrop/app/ui/state/AppUiModels.kt index 3adbf74..75288ba 100644 --- a/shared/src/commonMain/kotlin/com/vnidrop/app/ui/state/AppUiModels.kt +++ b/shared/src/commonMain/kotlin/com/vnidrop/app/ui/state/AppUiModels.kt @@ -5,6 +5,7 @@ import com.vnidrop.app.core.CoreEventModel import com.vnidrop.app.core.Transfer import com.vnidrop.app.core.TransferStatus import kotlin.math.roundToInt +import org.jetbrains.compose.resources.PluralStringResource import org.jetbrains.compose.resources.StringResource import org.jetbrains.compose.resources.stringResource import vnidrop.shared.generated.resources.Res @@ -30,8 +31,7 @@ import vnidrop.shared.generated.resources.status_failed import vnidrop.shared.generated.resources.status_preparing import vnidrop.shared.generated.resources.status_receiving import vnidrop.shared.generated.resources.status_stopped -import vnidrop.shared.generated.resources.transfer_file_count_one -import vnidrop.shared.generated.resources.transfer_file_count_other +import vnidrop.shared.generated.resources.transfer_file_count enum class WindowClass { Phone, @@ -206,9 +206,8 @@ fun summarizeProgress(events: List): List = .take(6) .mapNotNull { progressForTransfer(events, it) } -/** File-count string resource for transfer subtitles (resolve with [stringResource]). */ -fun transferFileCountResource(fileCount: ULong): StringResource = - if (fileCount == 1UL) Res.string.transfer_file_count_one else Res.string.transfer_file_count_other +/** File-count plural resource for transfer subtitles (resolve with [pluralStringResource]). */ +fun transferFileCountResource(): PluralStringResource = Res.plurals.transfer_file_count fun formatBytes(size: ULong): String { val value = size.toDouble() diff --git a/shared/src/commonTest/kotlin/com/vnidrop/app/ui/state/AppUiModelsTest.kt b/shared/src/commonTest/kotlin/com/vnidrop/app/ui/state/AppUiModelsTest.kt index 2a4ffcb..1fa0a42 100644 --- a/shared/src/commonTest/kotlin/com/vnidrop/app/ui/state/AppUiModelsTest.kt +++ b/shared/src/commonTest/kotlin/com/vnidrop/app/ui/state/AppUiModelsTest.kt @@ -20,8 +20,7 @@ import vnidrop.shared.generated.resources.progress_interrupted import vnidrop.shared.generated.resources.progress_saving import vnidrop.shared.generated.resources.progress_sending import vnidrop.shared.generated.resources.progress_working -import vnidrop.shared.generated.resources.transfer_file_count_one -import vnidrop.shared.generated.resources.transfer_file_count_other +import vnidrop.shared.generated.resources.transfer_file_count class AppUiModelsTest { @Test @@ -235,10 +234,8 @@ class AppUiModelsTest { } @Test - fun transferFileCountPicksSingularAndPluralResources() { - assertEquals(Res.string.transfer_file_count_one, transferFileCountResource(1UL)) - assertEquals(Res.string.transfer_file_count_other, transferFileCountResource(2UL)) - assertEquals(Res.string.transfer_file_count_other, transferFileCountResource(0UL)) + fun transferFileCountUsesPluralResource() { + assertEquals(Res.plurals.transfer_file_count, transferFileCountResource()) } @Test From 3c0f29adb6634fd2a98b37069826fc114b27dff1 Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 20 Jul 2026 10:20:34 +0200 Subject: [PATCH 02/13] docs(l10n): describe context for every string key Replace the placeholder `context` on all 255 keys in strings.json with a description of where each string appears and its purpose, and regenerate the xcstrings so the comments flow through to the Apple catalog. --- apple/VniDrop/Resources/Localizable.xcstrings | 510 +++++++++--------- localization/strings.json | 510 +++++++++--------- 2 files changed, 510 insertions(+), 510 deletions(-) diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index 8a0a4ba..b630d22 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -2,11 +2,11 @@ "sourceLanguage": "en", "strings": { "%@": { - "comment": "TODO: describe where this appears.", + "comment": "Apple format passthrough placeholder (single value). Legacy literal key — rename to a semantic key.", "extractionState": "manual" }, "%@ %@ · %@": { - "comment": "TODO: describe where this appears.", + "comment": "Apple format template composing three values with a middot separator (e.g. metadata rows). Legacy literal key — rename.", "extractionState": "manual", "localizations": { "en": { @@ -18,7 +18,7 @@ } }, "%@ · %@": { - "comment": "TODO: describe where this appears.", + "comment": "Apple format template composing two values with a middot separator. Legacy literal key — rename.", "extractionState": "manual", "localizations": { "en": { @@ -30,11 +30,11 @@ } }, "%@%%": { - "comment": "TODO: describe where this appears.", + "comment": "Apple format template appending a percent sign to a value (e.g. battery level). Legacy literal key — rename.", "extractionState": "manual" }, "about_bug_report": { - "comment": "TODO: describe where this appears.", + "comment": "About screen: button/link that opens the bug report form.", "extractionState": "manual", "localizations": { "en": { @@ -46,7 +46,7 @@ } }, "about_description": { - "comment": "TODO: describe where this appears.", + "comment": "About screen: intro paragraph describing what VniDrop does.", "extractionState": "manual", "localizations": { "en": { @@ -58,7 +58,7 @@ } }, "about_is_direct": { - "comment": "TODO: describe where this appears.", + "comment": "About screen, 'What VniDrop is' list: point about direct device-to-device transfer.", "extractionState": "manual", "localizations": { "en": { @@ -70,7 +70,7 @@ } }, "about_is_encrypted": { - "comment": "TODO: describe where this appears.", + "comment": "About screen, 'What VniDrop is' list: point about encrypted, verified connections.", "extractionState": "manual", "localizations": { "en": { @@ -82,7 +82,7 @@ } }, "about_is_in_control": { - "comment": "TODO: describe where this appears.", + "comment": "About screen, 'What VniDrop is' list: point about controlling who receives.", "extractionState": "manual", "localizations": { "en": { @@ -94,7 +94,7 @@ } }, "about_is_no_account": { - "comment": "TODO: describe where this appears.", + "comment": "About screen, 'What VniDrop is' list: point about being account-free.", "extractionState": "manual", "localizations": { "en": { @@ -106,7 +106,7 @@ } }, "about_is_open": { - "comment": "TODO: describe where this appears.", + "comment": "About screen, 'What VniDrop is' list: point about being open source.", "extractionState": "manual", "localizations": { "en": { @@ -118,7 +118,7 @@ } }, "about_is_title": { - "comment": "TODO: describe where this appears.", + "comment": "About screen: section heading for the 'What VniDrop is' list.", "extractionState": "manual", "localizations": { "en": { @@ -130,7 +130,7 @@ } }, "about_isnt_cloud": { - "comment": "TODO: describe where this appears.", + "comment": "About screen, 'What VniDrop isn't' list: point about not being cloud storage.", "extractionState": "manual", "localizations": { "en": { @@ -142,7 +142,7 @@ } }, "about_isnt_public": { - "comment": "TODO: describe where this appears.", + "comment": "About screen, 'What VniDrop isn't' list: point about invitations not being public broadcasts.", "extractionState": "manual", "localizations": { "en": { @@ -154,7 +154,7 @@ } }, "about_isnt_sync": { - "comment": "TODO: describe where this appears.", + "comment": "About screen, 'What VniDrop isn't' list: point about not being sync/backup.", "extractionState": "manual", "localizations": { "en": { @@ -166,7 +166,7 @@ } }, "about_isnt_title": { - "comment": "TODO: describe where this appears.", + "comment": "About screen: section heading for the 'What VniDrop isn't' list.", "extractionState": "manual", "localizations": { "en": { @@ -178,7 +178,7 @@ } }, "about_license_label": { - "comment": "TODO: describe where this appears.", + "comment": "About screen: label for the license row.", "extractionState": "manual", "localizations": { "en": { @@ -190,7 +190,7 @@ } }, "about_privacy": { - "comment": "TODO: describe where this appears.", + "comment": "About screen: link to the privacy policy.", "extractionState": "manual", "localizations": { "en": { @@ -202,7 +202,7 @@ } }, "about_privacy_capability": { - "comment": "TODO: describe where this appears.", + "comment": "About screen, Privacy & security list: point that invitations are capabilities to share carefully.", "extractionState": "manual", "localizations": { "en": { @@ -214,7 +214,7 @@ } }, "about_privacy_deny": { - "comment": "TODO: describe where this appears.", + "comment": "About screen, Privacy & security list: point about denying unknown requests by default.", "extractionState": "manual", "localizations": { "en": { @@ -226,7 +226,7 @@ } }, "about_privacy_local": { - "comment": "TODO: describe where this appears.", + "comment": "About screen, Privacy & security list: point about received files staying local and never overwriting.", "extractionState": "manual", "localizations": { "en": { @@ -238,7 +238,7 @@ } }, "about_privacy_policy_label": { - "comment": "TODO: describe where this appears.", + "comment": "About screen: label for the privacy policy row.", "extractionState": "manual", "localizations": { "en": { @@ -250,7 +250,7 @@ } }, "about_privacy_relay": { - "comment": "TODO: describe where this appears.", + "comment": "About screen, Privacy & security list: point explaining encrypted relays.", "extractionState": "manual", "localizations": { "en": { @@ -262,7 +262,7 @@ } }, "about_privacy_title": { - "comment": "TODO: describe where this appears.", + "comment": "About screen: section heading for the Privacy & security list.", "extractionState": "manual", "localizations": { "en": { @@ -274,7 +274,7 @@ } }, "about_tagline": { - "comment": "TODO: describe where this appears.", + "comment": "About screen: short tagline under the app name.", "extractionState": "manual", "localizations": { "en": { @@ -286,7 +286,7 @@ } }, "about_title": { - "comment": "TODO: describe where this appears.", + "comment": "About screen: navigation/screen title.", "extractionState": "manual", "localizations": { "en": { @@ -298,7 +298,7 @@ } }, "appearance_auto_description": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Appearance: description for the System/auto option.", "extractionState": "manual", "localizations": { "en": { @@ -310,7 +310,7 @@ } }, "appearance_dark_mode": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Appearance: label for the dark theme option.", "extractionState": "manual", "localizations": { "en": { @@ -322,7 +322,7 @@ } }, "appearance_light_mode": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Appearance: label for the light theme option.", "extractionState": "manual", "localizations": { "en": { @@ -334,7 +334,7 @@ } }, "appearance_system_mode": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Appearance: label for the follow-system option.", "extractionState": "manual", "localizations": { "en": { @@ -346,7 +346,7 @@ } }, "appearance_title": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Appearance: section title.", "extractionState": "manual", "localizations": { "en": { @@ -358,7 +358,7 @@ } }, "approval_connection_request": { - "comment": "TODO: describe where this appears.", + "comment": "Approval prompt: title when a receiver requests to download a transfer.", "extractionState": "manual", "localizations": { "en": { @@ -370,7 +370,7 @@ } }, "approval_endpoint_id": { - "comment": "TODO: describe where this appears.", + "comment": "Approval prompt: shows the requesting device's ID. {arg1} = device/endpoint identifier.", "extractionState": "manual", "localizations": { "en": { @@ -382,7 +382,7 @@ } }, "approval_nearby_device": { - "comment": "TODO: describe where this appears.", + "comment": "Approval prompt: fallback label for a requester with no display name.", "extractionState": "manual", "localizations": { "en": { @@ -394,7 +394,7 @@ } }, "approval_pending_count": { - "comment": "TODO: describe where this appears.", + "comment": "Send/transfer list: badge showing how many receive requests are awaiting approval. {count} = pending requests.", "extractionState": "manual", "localizations": { "en": { @@ -406,7 +406,7 @@ } }, "approval_request_body": { - "comment": "TODO: describe where this appears.", + "comment": "Approval prompt body: '{arg1} wants to receive \"{arg2}\".' {arg1} = requester name, {arg2} = transfer name.", "extractionState": "manual", "localizations": { "en": { @@ -418,7 +418,7 @@ } }, "battery_level_title": { - "comment": "TODO: describe where this appears.", + "comment": "Device information row: battery level label.", "extractionState": "manual", "localizations": { "en": { @@ -430,7 +430,7 @@ } }, "bug_report_contact_hint": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: placeholder text in the contact email field.", "extractionState": "manual", "localizations": { "en": { @@ -442,7 +442,7 @@ } }, "bug_report_contact_label": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: label for the optional contact email field.", "extractionState": "manual", "localizations": { "en": { @@ -454,7 +454,7 @@ } }, "bug_report_description": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: intro text explaining what gets attached.", "extractionState": "manual", "localizations": { "en": { @@ -466,7 +466,7 @@ } }, "bug_report_device_section": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: heading for the attached device information section.", "extractionState": "manual", "localizations": { "en": { @@ -478,7 +478,7 @@ } }, "bug_report_expected_hint": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: placeholder in the 'what did you expect' field.", "extractionState": "manual", "localizations": { "en": { @@ -490,7 +490,7 @@ } }, "bug_report_expected_label": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: label for the expected-behavior field.", "extractionState": "manual", "localizations": { "en": { @@ -502,7 +502,7 @@ } }, "bug_report_include_logs": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: toggle label to attach recent logs.", "extractionState": "manual", "localizations": { "en": { @@ -514,7 +514,7 @@ } }, "bug_report_include_logs_description": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: explanation under the include-logs toggle.", "extractionState": "manual", "localizations": { "en": { @@ -526,7 +526,7 @@ } }, "bug_report_logs_size": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: label showing the size of the log attachment.", "extractionState": "manual", "localizations": { "en": { @@ -538,7 +538,7 @@ } }, "bug_report_missing_expected": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: validation error when the expected-behavior field is empty.", "extractionState": "manual", "localizations": { "en": { @@ -550,7 +550,7 @@ } }, "bug_report_missing_what": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: validation error when the what-happened field is empty.", "extractionState": "manual", "localizations": { "en": { @@ -562,7 +562,7 @@ } }, "bug_report_steps_hint": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: placeholder in the steps-to-reproduce field.", "extractionState": "manual", "localizations": { "en": { @@ -574,7 +574,7 @@ } }, "bug_report_steps_label": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: label for the optional steps-to-reproduce field.", "extractionState": "manual", "localizations": { "en": { @@ -586,7 +586,7 @@ } }, "bug_report_submit": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: submit button.", "extractionState": "manual", "localizations": { "en": { @@ -598,7 +598,7 @@ } }, "bug_report_submit_failed": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: error message when submission fails.", "extractionState": "manual", "localizations": { "en": { @@ -610,7 +610,7 @@ } }, "bug_report_submitted": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: confirmation message after a successful submission.", "extractionState": "manual", "localizations": { "en": { @@ -622,7 +622,7 @@ } }, "bug_report_submitting": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: progress label while the report is being sent.", "extractionState": "manual", "localizations": { "en": { @@ -634,7 +634,7 @@ } }, "bug_report_what_hint": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: placeholder in the what-happened field.", "extractionState": "manual", "localizations": { "en": { @@ -646,7 +646,7 @@ } }, "bug_report_what_label": { - "comment": "TODO: describe where this appears.", + "comment": "Bug report form: label for the what-happened field.", "extractionState": "manual", "localizations": { "en": { @@ -658,7 +658,7 @@ } }, "button_approve": { - "comment": "TODO: describe where this appears.", + "comment": "Button: approve a receiver's request.", "extractionState": "manual", "localizations": { "en": { @@ -670,7 +670,7 @@ } }, "button_back": { - "comment": "TODO: describe where this appears.", + "comment": "Button: go back to the previous step/screen.", "extractionState": "manual", "localizations": { "en": { @@ -682,7 +682,7 @@ } }, "button_cancel": { - "comment": "TODO: describe where this appears.", + "comment": "Button: cancel the current action or dialog.", "extractionState": "manual", "localizations": { "en": { @@ -694,7 +694,7 @@ } }, "button_cancel_receive": { - "comment": "TODO: describe where this appears.", + "comment": "Button: cancel an in-progress receive.", "extractionState": "manual", "localizations": { "en": { @@ -706,7 +706,7 @@ } }, "button_change_files": { - "comment": "TODO: describe where this appears.", + "comment": "Button: change the selected files in the send flow.", "extractionState": "manual", "localizations": { "en": { @@ -718,7 +718,7 @@ } }, "button_choose_files": { - "comment": "TODO: describe where this appears.", + "comment": "Button: open the file picker to choose files to send.", "extractionState": "manual", "localizations": { "en": { @@ -730,7 +730,7 @@ } }, "button_choose_folder": { - "comment": "TODO: describe where this appears.", + "comment": "Button: open the folder picker (send selection or receive folder).", "extractionState": "manual", "localizations": { "en": { @@ -742,7 +742,7 @@ } }, "button_clear": { - "comment": "TODO: describe where this appears.", + "comment": "Button: clear the current input or selection.", "extractionState": "manual", "localizations": { "en": { @@ -754,7 +754,7 @@ } }, "button_close": { - "comment": "TODO: describe where this appears.", + "comment": "Button: close the current sheet/dialog.", "extractionState": "manual", "localizations": { "en": { @@ -766,7 +766,7 @@ } }, "button_create_new_transfer": { - "comment": "TODO: describe where this appears.", + "comment": "Button: start creating a new transfer (Send tab).", "extractionState": "manual", "localizations": { "en": { @@ -778,7 +778,7 @@ } }, "button_delete_transfer": { - "comment": "TODO: describe where this appears.", + "comment": "Button: delete a transfer.", "extractionState": "manual", "localizations": { "en": { @@ -790,7 +790,7 @@ } }, "button_download_invitation": { - "comment": "TODO: describe where this appears.", + "comment": "Button: save the invitation as a .vnd file.", "extractionState": "manual", "localizations": { "en": { @@ -802,7 +802,7 @@ } }, "button_native_share": { - "comment": "TODO: describe where this appears.", + "comment": "Button: open the OS share sheet to share the invitation.", "extractionState": "manual", "localizations": { "en": { @@ -814,7 +814,7 @@ } }, "button_open_settings": { - "comment": "TODO: describe where this appears.", + "comment": "Button: open the OS Settings app (e.g. for permissions).", "extractionState": "manual", "localizations": { "en": { @@ -826,7 +826,7 @@ } }, "button_receive": { - "comment": "TODO: describe where this appears.", + "comment": "Button: receive label (Receive action).", "extractionState": "manual", "localizations": { "en": { @@ -838,7 +838,7 @@ } }, "button_receive_files": { - "comment": "TODO: describe where this appears.", + "comment": "Button: start receiving a transfer.", "extractionState": "manual", "localizations": { "en": { @@ -850,7 +850,7 @@ } }, "button_refuse": { - "comment": "TODO: describe where this appears.", + "comment": "Button: refuse a receiver's request.", "extractionState": "manual", "localizations": { "en": { @@ -862,7 +862,7 @@ } }, "button_remove_file": { - "comment": "TODO: describe where this appears.", + "comment": "Button: remove a single file from the send selection.", "extractionState": "manual", "localizations": { "en": { @@ -874,7 +874,7 @@ } }, "button_reset_default": { - "comment": "TODO: describe where this appears.", + "comment": "Button: reset a setting to its default value.", "extractionState": "manual", "localizations": { "en": { @@ -886,7 +886,7 @@ } }, "button_retry": { - "comment": "TODO: describe where this appears.", + "comment": "Button: retry after a failed operation.", "extractionState": "manual", "localizations": { "en": { @@ -898,7 +898,7 @@ } }, "button_share_file": { - "comment": "TODO: describe where this appears.", + "comment": "Button: start sharing the transfer (make it available).", "extractionState": "manual", "localizations": { "en": { @@ -910,7 +910,7 @@ } }, "button_sharing_file": { - "comment": "TODO: describe where this appears.", + "comment": "Button: disabled/loading state while the transfer is being prepared.", "extractionState": "manual", "localizations": { "en": { @@ -922,7 +922,7 @@ } }, "button_show_in_files": { - "comment": "TODO: describe where this appears.", + "comment": "Button: reveal a received file in the Files app.", "extractionState": "manual", "localizations": { "en": { @@ -934,7 +934,7 @@ } }, "button_write_nfc": { - "comment": "TODO: describe where this appears.", + "comment": "Button: write the invitation to an NFC tag.", "extractionState": "manual", "localizations": { "en": { @@ -946,7 +946,7 @@ } }, "device_model_title": { - "comment": "TODO: describe where this appears.", + "comment": "Device information row: device model label.", "extractionState": "manual", "localizations": { "en": { @@ -958,7 +958,7 @@ } }, "device_name_title": { - "comment": "TODO: describe where this appears.", + "comment": "Device information row: device name label.", "extractionState": "manual", "localizations": { "en": { @@ -970,7 +970,7 @@ } }, "diagnostics_description": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Diagnostics: explanation of what anonymous diagnostics collect.", "extractionState": "manual", "localizations": { "en": { @@ -982,7 +982,7 @@ } }, "diagnostics_disabled_message": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Diagnostics: confirmation shown when diagnostics are turned off.", "extractionState": "manual", "localizations": { "en": { @@ -994,7 +994,7 @@ } }, "diagnostics_enabled_message": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Diagnostics: confirmation shown when diagnostics are turned on.", "extractionState": "manual", "localizations": { "en": { @@ -1006,7 +1006,7 @@ } }, "diagnostics_title": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Diagnostics: toggle title.", "extractionState": "manual", "localizations": { "en": { @@ -1018,7 +1018,7 @@ } }, "error_camera": { - "comment": "TODO: describe where this appears.", + "comment": "Error: camera permission is needed to scan a QR code.", "extractionState": "manual", "localizations": { "en": { @@ -1030,7 +1030,7 @@ } }, "error_device_info": { - "comment": "TODO: describe where this appears.", + "comment": "Error: device information could not be loaded.", "extractionState": "manual", "localizations": { "en": { @@ -1042,7 +1042,7 @@ } }, "error_filesystem": { - "comment": "TODO: describe where this appears.", + "comment": "Error: the selected files/folder could not be accessed.", "extractionState": "manual", "localizations": { "en": { @@ -1054,7 +1054,7 @@ } }, "error_generic": { - "comment": "TODO: describe where this appears.", + "comment": "Error: generic fallback message.", "extractionState": "manual", "localizations": { "en": { @@ -1066,7 +1066,7 @@ } }, "error_initialization": { - "comment": "TODO: describe where this appears.", + "comment": "Error: the app failed to finish starting up.", "extractionState": "manual", "localizations": { "en": { @@ -1078,7 +1078,7 @@ } }, "error_invalid_ticket": { - "comment": "TODO: describe where this appears.", + "comment": "Error: the invitation/ticket could not be parsed.", "extractionState": "manual", "localizations": { "en": { @@ -1090,7 +1090,7 @@ } }, "error_invitation_empty": { - "comment": "TODO: describe where this appears.", + "comment": "Error: the opened invitation contained no data.", "extractionState": "manual", "localizations": { "en": { @@ -1102,7 +1102,7 @@ } }, "error_missing_native_library": { - "comment": "TODO: describe where this appears.", + "comment": "Error: the native library is missing from the build.", "extractionState": "manual", "localizations": { "en": { @@ -1114,7 +1114,7 @@ } }, "error_nfc": { - "comment": "TODO: describe where this appears.", + "comment": "Error: the NFC tag could not be read/used.", "extractionState": "manual", "localizations": { "en": { @@ -1126,7 +1126,7 @@ } }, "error_permission": { - "comment": "TODO: describe where this appears.", + "comment": "Error: the transfer was not approved or was refused by the sender.", "extractionState": "manual", "localizations": { "en": { @@ -1138,7 +1138,7 @@ } }, "error_repository": { - "comment": "TODO: describe where this appears.", + "comment": "Error: transfer data could not be saved locally.", "extractionState": "manual", "localizations": { "en": { @@ -1150,7 +1150,7 @@ } }, "error_selection_failed": { - "comment": "TODO: describe where this appears.", + "comment": "Error: the selected item could not be opened.", "extractionState": "manual", "localizations": { "en": { @@ -1162,7 +1162,7 @@ } }, "error_share_empty": { - "comment": "TODO: describe where this appears.", + "comment": "Error: attempted to share with nothing selected.", "extractionState": "manual", "localizations": { "en": { @@ -1174,7 +1174,7 @@ } }, "error_socket_bind": { - "comment": "TODO: describe where this appears.", + "comment": "Error: the app could not open its network sockets.", "extractionState": "manual", "localizations": { "en": { @@ -1186,7 +1186,7 @@ } }, "error_starting_up": { - "comment": "TODO: describe where this appears.", + "comment": "Error: an invitation was opened before startup finished.", "extractionState": "manual", "localizations": { "en": { @@ -1198,7 +1198,7 @@ } }, "error_transfer": { - "comment": "TODO: describe where this appears.", + "comment": "Error: the transfer could not be completed.", "extractionState": "manual", "localizations": { "en": { @@ -1210,7 +1210,7 @@ } }, "field_receiver_name": { - "comment": "TODO: describe where this appears.", + "comment": "Text field label: the receiver's display name.", "extractionState": "manual", "localizations": { "en": { @@ -1222,7 +1222,7 @@ } }, "field_sender_name": { - "comment": "TODO: describe where this appears.", + "comment": "Text field label: the sender's display name.", "extractionState": "manual", "localizations": { "en": { @@ -1234,7 +1234,7 @@ } }, "field_transfer_name": { - "comment": "TODO: describe where this appears.", + "comment": "Text field label: the name given to a transfer.", "extractionState": "manual", "localizations": { "en": { @@ -1246,7 +1246,7 @@ } }, "field_username": { - "comment": "TODO: describe where this appears.", + "comment": "Settings text field label: this device's display name.", "extractionState": "manual", "localizations": { "en": { @@ -1258,7 +1258,7 @@ } }, "folder_status_permission_required": { - "comment": "TODO: describe where this appears.", + "comment": "Receive-folder status: permission is required to write to the chosen folder.", "extractionState": "manual", "localizations": { "en": { @@ -1270,7 +1270,7 @@ } }, "folder_status_unavailable": { - "comment": "TODO: describe where this appears.", + "comment": "Receive-folder status: the chosen folder is unavailable.", "extractionState": "manual", "localizations": { "en": { @@ -1282,7 +1282,7 @@ } }, "folder_status_validating": { - "comment": "TODO: describe where this appears.", + "comment": "Receive-folder status: the folder is being checked.", "extractionState": "manual", "localizations": { "en": { @@ -1294,7 +1294,7 @@ } }, "folder_status_writable": { - "comment": "TODO: describe where this appears.", + "comment": "Receive-folder status: the folder is valid and writable.", "extractionState": "manual", "localizations": { "en": { @@ -1306,7 +1306,7 @@ } }, "metadata_files": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer metadata label: number of files.", "extractionState": "manual", "localizations": { "en": { @@ -1318,7 +1318,7 @@ } }, "metadata_size": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer metadata label: total size.", "extractionState": "manual", "localizations": { "en": { @@ -1330,7 +1330,7 @@ } }, "metadata_status": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer metadata label: current status.", "extractionState": "manual", "localizations": { "en": { @@ -1342,7 +1342,7 @@ } }, "nav_receive": { - "comment": "TODO: describe where this appears.", + "comment": "Bottom navigation: Receive tab label.", "extractionState": "manual", "localizations": { "en": { @@ -1354,7 +1354,7 @@ } }, "nav_send": { - "comment": "TODO: describe where this appears.", + "comment": "Bottom navigation: Send tab label.", "extractionState": "manual", "localizations": { "en": { @@ -1366,7 +1366,7 @@ } }, "nav_settings": { - "comment": "TODO: describe where this appears.", + "comment": "Bottom navigation: Settings tab label.", "extractionState": "manual", "localizations": { "en": { @@ -1378,7 +1378,7 @@ } }, "network_title": { - "comment": "TODO: describe where this appears.", + "comment": "Device information row: network label.", "extractionState": "manual", "localizations": { "en": { @@ -1390,7 +1390,7 @@ } }, "notifications_description": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Notifications: explanation of what notifications are used for.", "extractionState": "manual", "localizations": { "en": { @@ -1402,7 +1402,7 @@ } }, "notifications_enabled_message": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Notifications: confirmation when notifications are enabled.", "extractionState": "manual", "localizations": { "en": { @@ -1414,7 +1414,7 @@ } }, "notifications_local_title": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Notifications: label for the allow-notifications action.", "extractionState": "manual", "localizations": { "en": { @@ -1426,7 +1426,7 @@ } }, "notifications_permission_denied": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Notifications: message when the OS permission is denied.", "extractionState": "manual", "localizations": { "en": { @@ -1438,7 +1438,7 @@ } }, "notifications_settings_open_failed": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Notifications: error when the OS notification settings can't be opened.", "extractionState": "manual", "localizations": { "en": { @@ -1450,7 +1450,7 @@ } }, "notifications_title": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Notifications: section title.", "extractionState": "manual", "localizations": { "en": { @@ -1462,7 +1462,7 @@ } }, "notifications_unsupported": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Notifications: message when notifications aren't supported on the device.", "extractionState": "manual", "localizations": { "en": { @@ -1474,7 +1474,7 @@ } }, "os_version_title": { - "comment": "TODO: describe where this appears.", + "comment": "Device information row: operating system version label.", "extractionState": "manual", "localizations": { "en": { @@ -1486,7 +1486,7 @@ } }, "preferences_receive_folder_title": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Preferences: label for the received-files destination folder.", "extractionState": "manual", "localizations": { "en": { @@ -1498,7 +1498,7 @@ } }, "preferences_title": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Preferences: section title.", "extractionState": "manual", "localizations": { "en": { @@ -1510,7 +1510,7 @@ } }, "progress_cancelled": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: cancelled.", "extractionState": "manual", "localizations": { "en": { @@ -1522,7 +1522,7 @@ } }, "progress_completed": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: completed.", "extractionState": "manual", "localizations": { "en": { @@ -1534,7 +1534,7 @@ } }, "progress_connected": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: connected.", "extractionState": "manual", "localizations": { "en": { @@ -1546,7 +1546,7 @@ } }, "progress_connecting": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: connecting.", "extractionState": "manual", "localizations": { "en": { @@ -1558,7 +1558,7 @@ } }, "progress_downloading": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: downloading.", "extractionState": "manual", "localizations": { "en": { @@ -1570,7 +1570,7 @@ } }, "progress_failed": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: failed.", "extractionState": "manual", "localizations": { "en": { @@ -1582,7 +1582,7 @@ } }, "progress_getting_ready": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: getting ready.", "extractionState": "manual", "localizations": { "en": { @@ -1594,7 +1594,7 @@ } }, "progress_interrupted": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: the transfer was interrupted.", "extractionState": "manual", "localizations": { "en": { @@ -1606,7 +1606,7 @@ } }, "progress_preparing": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: preparing.", "extractionState": "manual", "localizations": { "en": { @@ -1618,7 +1618,7 @@ } }, "progress_ready": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: ready.", "extractionState": "manual", "localizations": { "en": { @@ -1630,7 +1630,7 @@ } }, "progress_receiving": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: receiving.", "extractionState": "manual", "localizations": { "en": { @@ -1642,7 +1642,7 @@ } }, "progress_requesting_access": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: requesting access from the sender.", "extractionState": "manual", "localizations": { "en": { @@ -1654,7 +1654,7 @@ } }, "progress_saving": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: saving received files.", "extractionState": "manual", "localizations": { "en": { @@ -1666,7 +1666,7 @@ } }, "progress_sending": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: sending.", "extractionState": "manual", "localizations": { "en": { @@ -1678,7 +1678,7 @@ } }, "progress_sending_to_count": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: sending to N receivers. %lld = receiver count.", "extractionState": "manual", "localizations": { "en": { @@ -1690,7 +1690,7 @@ } }, "progress_share_ready": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: the share is ready.", "extractionState": "manual", "localizations": { "en": { @@ -1702,7 +1702,7 @@ } }, "progress_working": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer progress label: generic working/in-progress state.", "extractionState": "manual", "localizations": { "en": { @@ -1714,7 +1714,7 @@ } }, "receive_choose_method_body": { - "comment": "TODO: describe where this appears.", + "comment": "Receive flow: body text prompting the user to pick an invitation method.", "extractionState": "manual", "localizations": { "en": { @@ -1726,7 +1726,7 @@ } }, "receive_choose_method_title": { - "comment": "TODO: describe where this appears.", + "comment": "Receive flow: title of the connect-method chooser.", "extractionState": "manual", "localizations": { "en": { @@ -1738,7 +1738,7 @@ } }, "receive_clear_history": { - "comment": "TODO: describe where this appears.", + "comment": "Receive history: action to clear all history.", "extractionState": "manual", "localizations": { "en": { @@ -1750,7 +1750,7 @@ } }, "receive_clear_history_description": { - "comment": "TODO: describe where this appears.", + "comment": "Receive history: confirmation dialog body for clearing all history.", "extractionState": "manual", "localizations": { "en": { @@ -1762,7 +1762,7 @@ } }, "receive_clear_history_title": { - "comment": "TODO: describe where this appears.", + "comment": "Receive history: confirmation dialog title for clearing all history.", "extractionState": "manual", "localizations": { "en": { @@ -1774,7 +1774,7 @@ } }, "receive_completed": { - "comment": "TODO: describe where this appears.", + "comment": "Receive flow: toast/message when a transfer finishes downloading.", "extractionState": "manual", "localizations": { "en": { @@ -1786,7 +1786,7 @@ } }, "receive_delete_history_description": { - "comment": "TODO: describe where this appears.", + "comment": "Receive history: confirmation body for removing one item. {arg1} = transfer name.", "extractionState": "manual", "localizations": { "en": { @@ -1798,7 +1798,7 @@ } }, "receive_delete_history_item": { - "comment": "TODO: describe where this appears.", + "comment": "Receive history: swipe/menu action to delete a single history item.", "extractionState": "manual", "localizations": { "en": { @@ -1810,7 +1810,7 @@ } }, "receive_delete_history_title": { - "comment": "TODO: describe where this appears.", + "comment": "Receive history: confirmation title for removing one item.", "extractionState": "manual", "localizations": { "en": { @@ -1822,7 +1822,7 @@ } }, "receive_empty_body": { - "comment": "TODO: describe where this appears.", + "comment": "Receive tab empty state: instructions on how to receive.", "extractionState": "manual", "localizations": { "en": { @@ -1834,7 +1834,7 @@ } }, "receive_empty_title": { - "comment": "TODO: describe where this appears.", + "comment": "Receive tab empty state: title when nothing has been received.", "extractionState": "manual", "localizations": { "en": { @@ -1846,7 +1846,7 @@ } }, "receive_history_cleared": { - "comment": "TODO: describe where this appears.", + "comment": "Receive history: toast confirming history was cleared.", "extractionState": "manual", "localizations": { "en": { @@ -1858,7 +1858,7 @@ } }, "receive_history_title": { - "comment": "TODO: describe where this appears.", + "comment": "Receive tab: History section title.", "extractionState": "manual", "localizations": { "en": { @@ -1870,7 +1870,7 @@ } }, "receive_method_file": { - "comment": "TODO: describe where this appears.", + "comment": "Receive method: open a .vnd invitation file.", "extractionState": "manual", "localizations": { "en": { @@ -1882,7 +1882,7 @@ } }, "receive_method_file_description": { - "comment": "TODO: describe where this appears.", + "comment": "Receive method description: open a saved/shared invitation file.", "extractionState": "manual", "localizations": { "en": { @@ -1894,7 +1894,7 @@ } }, "receive_method_nfc": { - "comment": "TODO: describe where this appears.", + "comment": "Receive method: read an NFC tag.", "extractionState": "manual", "localizations": { "en": { @@ -1906,7 +1906,7 @@ } }, "receive_method_nfc_description": { - "comment": "TODO: describe where this appears.", + "comment": "Receive method description: hold near the sender's NFC tag.", "extractionState": "manual", "localizations": { "en": { @@ -1918,7 +1918,7 @@ } }, "receive_method_scan": { - "comment": "TODO: describe where this appears.", + "comment": "Receive method: scan a QR code.", "extractionState": "manual", "localizations": { "en": { @@ -1930,7 +1930,7 @@ } }, "receive_method_scan_description": { - "comment": "TODO: describe where this appears.", + "comment": "Receive method description: use the camera to scan the sender's code.", "extractionState": "manual", "localizations": { "en": { @@ -1942,7 +1942,7 @@ } }, "receive_new_subtitle": { - "comment": "TODO: describe where this appears.", + "comment": "Receive tab: subtitle under the title.", "extractionState": "manual", "localizations": { "en": { @@ -1954,7 +1954,7 @@ } }, "receive_nfc_waiting": { - "comment": "TODO: describe where this appears.", + "comment": "Receive flow: prompt while waiting to read an NFC tag.", "extractionState": "manual", "localizations": { "en": { @@ -1966,7 +1966,7 @@ } }, "receive_open_files_failed": { - "comment": "TODO: describe where this appears.", + "comment": "Receive flow: error when opening VniDrop's folder in Files fails.", "extractionState": "manual", "localizations": { "en": { @@ -1978,7 +1978,7 @@ } }, "receive_review_title": { - "comment": "TODO: describe where this appears.", + "comment": "Receive flow: title of the review screen before accepting a transfer.", "extractionState": "manual", "localizations": { "en": { @@ -1990,7 +1990,7 @@ } }, "receive_title": { - "comment": "TODO: describe where this appears.", + "comment": "Receive tab: screen title.", "extractionState": "manual", "localizations": { "en": { @@ -2002,7 +2002,7 @@ } }, "receive_unknown_transfer": { - "comment": "TODO: describe where this appears.", + "comment": "Receive flow: fallback name for a transfer with no title.", "extractionState": "manual", "localizations": { "en": { @@ -2014,7 +2014,7 @@ } }, "send_access_anyone": { - "comment": "TODO: describe where this appears.", + "comment": "Send access option: anyone with the invitation can receive.", "extractionState": "manual", "localizations": { "en": { @@ -2026,7 +2026,7 @@ } }, "send_access_anyone_description": { - "comment": "TODO: describe where this appears.", + "comment": "Send access option description: no approval required.", "extractionState": "manual", "localizations": { "en": { @@ -2038,7 +2038,7 @@ } }, "send_access_anyone_warning": { - "comment": "TODO: describe where this appears.", + "comment": "Send access option warning: caution about open access.", "extractionState": "manual", "localizations": { "en": { @@ -2050,7 +2050,7 @@ } }, "send_access_approval": { - "comment": "TODO: describe where this appears.", + "comment": "Send access option: approve each receiver.", "extractionState": "manual", "localizations": { "en": { @@ -2062,7 +2062,7 @@ } }, "send_access_approval_description": { - "comment": "TODO: describe where this appears.", + "comment": "Send access option description: you approve/refuse each receiver.", "extractionState": "manual", "localizations": { "en": { @@ -2074,7 +2074,7 @@ } }, "send_access_title": { - "comment": "TODO: describe where this appears.", + "comment": "Send flow: heading for the who-can-receive access chooser.", "extractionState": "manual", "localizations": { "en": { @@ -2086,7 +2086,7 @@ } }, "send_choose_file_body": { - "comment": "TODO: describe where this appears.", + "comment": "Send flow: body text for the choose-what-to-share step.", "extractionState": "manual", "localizations": { "en": { @@ -2098,7 +2098,7 @@ } }, "send_choose_file_title": { - "comment": "TODO: describe where this appears.", + "comment": "Send flow: title of the choose-what-to-share step.", "extractionState": "manual", "localizations": { "en": { @@ -2110,7 +2110,7 @@ } }, "send_empty_body": { - "comment": "TODO: describe where this appears.", + "comment": "Send tab empty state: instructions on how to create a transfer.", "extractionState": "manual", "localizations": { "en": { @@ -2122,7 +2122,7 @@ } }, "send_empty_title": { - "comment": "TODO: describe where this appears.", + "comment": "Send tab empty state: title when nothing has been shared.", "extractionState": "manual", "localizations": { "en": { @@ -2134,7 +2134,7 @@ } }, "send_file_size_unknown": { - "comment": "TODO: describe where this appears.", + "comment": "Send flow: shown when a selected file's size can't be determined.", "extractionState": "manual", "localizations": { "en": { @@ -2146,7 +2146,7 @@ } }, "send_folder_label": { - "comment": "TODO: describe where this appears.", + "comment": "Send flow: label indicating a selected item is a folder.", "extractionState": "manual", "localizations": { "en": { @@ -2158,7 +2158,7 @@ } }, "send_new_transfer_description": { - "comment": "TODO: describe where this appears.", + "comment": "Send flow: description for the create-new-transfer entry.", "extractionState": "manual", "localizations": { "en": { @@ -2170,7 +2170,7 @@ } }, "send_new_transfer_title": { - "comment": "TODO: describe where this appears.", + "comment": "Send flow: title for the new-transfer step.", "extractionState": "manual", "localizations": { "en": { @@ -2182,7 +2182,7 @@ } }, "send_review_title": { - "comment": "TODO: describe where this appears.", + "comment": "Send flow: title of the review-transfer step before creating it.", "extractionState": "manual", "localizations": { "en": { @@ -2194,7 +2194,7 @@ } }, "send_selected_files_count": { - "comment": "TODO: describe where this appears.", + "comment": "Send flow: count of files chosen. {count} = selected files. NOTE: singular case reads '1 files' — should become a plural.", "extractionState": "manual", "localizations": { "en": { @@ -2206,7 +2206,7 @@ } }, "send_stop_sharing": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: action to stop sharing a transfer.", "extractionState": "manual", "localizations": { "en": { @@ -2218,7 +2218,7 @@ } }, "send_stop_sharing_description": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: confirmation body for stopping sharing.", "extractionState": "manual", "localizations": { "en": { @@ -2230,7 +2230,7 @@ } }, "send_subtitle": { - "comment": "TODO: describe where this appears.", + "comment": "Send tab: subtitle under the title.", "extractionState": "manual", "localizations": { "en": { @@ -2242,7 +2242,7 @@ } }, "send_title": { - "comment": "TODO: describe where this appears.", + "comment": "Send tab: screen title.", "extractionState": "manual", "localizations": { "en": { @@ -2254,7 +2254,7 @@ } }, "send_transfer_created": { - "comment": "TODO: describe where this appears.", + "comment": "Send flow: toast confirming a transfer was created.", "extractionState": "manual", "localizations": { "en": { @@ -2266,7 +2266,7 @@ } }, "send_transfer_details_title": { - "comment": "TODO: describe where this appears.", + "comment": "Send flow: title of the transfer details screen.", "extractionState": "manual", "localizations": { "en": { @@ -2278,7 +2278,7 @@ } }, "send_transfers_title": { - "comment": "TODO: describe where this appears.", + "comment": "Send tab: 'Your transfers' list heading.", "extractionState": "manual", "localizations": { "en": { @@ -2290,7 +2290,7 @@ } }, "settings_subtitle": { - "comment": "TODO: describe where this appears.", + "comment": "Settings screen: subtitle summarizing what's configurable.", "extractionState": "manual", "localizations": { "en": { @@ -2302,7 +2302,7 @@ } }, "settings_title": { - "comment": "TODO: describe where this appears.", + "comment": "Settings screen: title.", "extractionState": "manual", "localizations": { "en": { @@ -2314,7 +2314,7 @@ } }, "snackbar_dismiss": { - "comment": "TODO: describe where this appears.", + "comment": "Snackbar: accessibility label / action to dismiss the snackbar.", "extractionState": "manual", "localizations": { "en": { @@ -2326,7 +2326,7 @@ } }, "status_available": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer status: available (actively shared).", "extractionState": "manual", "localizations": { "en": { @@ -2338,7 +2338,7 @@ } }, "status_cancelled": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer status: cancelled.", "extractionState": "manual", "localizations": { "en": { @@ -2350,7 +2350,7 @@ } }, "status_completed": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer status: completed.", "extractionState": "manual", "localizations": { "en": { @@ -2362,7 +2362,7 @@ } }, "status_failed": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer status: failed.", "extractionState": "manual", "localizations": { "en": { @@ -2374,7 +2374,7 @@ } }, "status_preparing": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer status: preparing.", "extractionState": "manual", "localizations": { "en": { @@ -2386,7 +2386,7 @@ } }, "status_receiving": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer status: receiving.", "extractionState": "manual", "localizations": { "en": { @@ -2398,7 +2398,7 @@ } }, "status_stopped": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer status: stopped.", "extractionState": "manual", "localizations": { "en": { @@ -2410,7 +2410,7 @@ } }, "storage_calculating": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Storage: placeholder while a size is being calculated.", "extractionState": "manual", "localizations": { "en": { @@ -2422,7 +2422,7 @@ } }, "storage_delete_transfers": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Storage: button to delete all transfer records.", "extractionState": "manual", "localizations": { "en": { @@ -2434,7 +2434,7 @@ } }, "storage_delete_transfers_description": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Storage: confirmation body for deleting all transfer records.", "extractionState": "manual", "localizations": { "en": { @@ -2446,7 +2446,7 @@ } }, "storage_deleting": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Storage: progress label while transfers are being deleted.", "extractionState": "manual", "localizations": { "en": { @@ -2458,7 +2458,7 @@ } }, "storage_footer": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Storage: footer explaining how storage is managed.", "extractionState": "manual", "localizations": { "en": { @@ -2470,7 +2470,7 @@ } }, "storage_received_files": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Storage: label for the received-files size row.", "extractionState": "manual", "localizations": { "en": { @@ -2482,7 +2482,7 @@ } }, "storage_temporary": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Storage: label for the temporary-files size row.", "extractionState": "manual", "localizations": { "en": { @@ -2494,7 +2494,7 @@ } }, "storage_title": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Storage: section title.", "extractionState": "manual", "localizations": { "en": { @@ -2506,7 +2506,7 @@ } }, "storage_total": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Storage: label for the total-size row.", "extractionState": "manual", "localizations": { "en": { @@ -2518,7 +2518,7 @@ } }, "storage_transfer_data": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Storage: label for the transfer-engine data size row.", "extractionState": "manual", "localizations": { "en": { @@ -2530,7 +2530,7 @@ } }, "storage_transfers_deleted": { - "comment": "TODO: describe where this appears.", + "comment": "Settings > Storage: toast confirming all transfers were deleted.", "extractionState": "manual", "localizations": { "en": { @@ -2542,7 +2542,7 @@ } }, "transfer_activity_description": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: description under the Activity section.", "extractionState": "manual", "localizations": { "en": { @@ -2554,7 +2554,7 @@ } }, "transfer_activity_title": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: Activity section title.", "extractionState": "manual", "localizations": { "en": { @@ -2566,7 +2566,7 @@ } }, "transfer_delete_description": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: confirmation body for deleting a transfer. {arg1} = transfer name.", "extractionState": "manual", "localizations": { "en": { @@ -2578,7 +2578,7 @@ } }, "transfer_delete_title": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: confirmation title for deleting a transfer.", "extractionState": "manual", "localizations": { "en": { @@ -2590,7 +2590,7 @@ } }, "transfer_deleted": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: toast confirming a transfer was deleted.", "extractionState": "manual", "localizations": { "en": { @@ -2602,7 +2602,7 @@ } }, "transfer_deleting": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: progress label while a transfer is being deleted.", "extractionState": "manual", "localizations": { "en": { @@ -2614,7 +2614,7 @@ } }, "transfer_details_title": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: screen title.", "extractionState": "manual", "localizations": { "en": { @@ -2626,7 +2626,7 @@ } }, "transfer_event_approved": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer activity event: a receiver's access was approved.", "extractionState": "manual", "localizations": { "en": { @@ -2638,7 +2638,7 @@ } }, "transfer_event_completed": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer activity event: a receiver completed the transfer.", "extractionState": "manual", "localizations": { "en": { @@ -2650,7 +2650,7 @@ } }, "transfer_event_connecting": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer activity event: connecting to the sender.", "extractionState": "manual", "localizations": { "en": { @@ -2662,7 +2662,7 @@ } }, "transfer_event_downloading": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer activity event: downloading.", "extractionState": "manual", "localizations": { "en": { @@ -2674,7 +2674,7 @@ } }, "transfer_event_failed": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer activity event: the transfer hit a problem.", "extractionState": "manual", "localizations": { "en": { @@ -2686,7 +2686,7 @@ } }, "transfer_event_preparing": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer activity event: preparing the transfer.", "extractionState": "manual", "localizations": { "en": { @@ -2698,7 +2698,7 @@ } }, "transfer_event_ready": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer activity event: ready to share.", "extractionState": "manual", "localizations": { "en": { @@ -2710,7 +2710,7 @@ } }, "transfer_event_refused": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer activity event: a receiver's access was refused.", "extractionState": "manual", "localizations": { "en": { @@ -2722,7 +2722,7 @@ } }, "transfer_event_requested": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer activity event: a receiver requested access.", "extractionState": "manual", "localizations": { "en": { @@ -2734,7 +2734,7 @@ } }, "transfer_event_saving": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer activity event: saving received files.", "extractionState": "manual", "localizations": { "en": { @@ -2746,7 +2746,7 @@ } }, "transfer_event_stopped": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer activity event: sharing was stopped.", "extractionState": "manual", "localizations": { "en": { @@ -2758,7 +2758,7 @@ } }, "transfer_event_updated": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer activity event: the transfer was updated.", "extractionState": "manual", "localizations": { "en": { @@ -2770,7 +2770,7 @@ } }, "transfer_file_count": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer subtitle: file count with pluralization. {count} = number of files.", "extractionState": "manual", "localizations": { "en": { @@ -2794,7 +2794,7 @@ } }, "transfer_invitation_saved": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer share: toast confirming the invitation file was saved.", "extractionState": "manual", "localizations": { "en": { @@ -2806,7 +2806,7 @@ } }, "transfer_nearby_device": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer share/receivers: label for a nearby device.", "extractionState": "manual", "localizations": { "en": { @@ -2818,7 +2818,7 @@ } }, "transfer_nfc_unavailable": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer share: message when NFC writing isn't available on the device.", "extractionState": "manual", "localizations": { "en": { @@ -2830,7 +2830,7 @@ } }, "transfer_nfc_waiting": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer share: prompt while waiting to write an NFC tag.", "extractionState": "manual", "localizations": { "en": { @@ -2842,7 +2842,7 @@ } }, "transfer_nfc_written": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer share: confirmation the invitation was written to the NFC tag.", "extractionState": "manual", "localizations": { "en": { @@ -2854,7 +2854,7 @@ } }, "transfer_no_activity": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: empty state for the Activity section.", "extractionState": "manual", "localizations": { "en": { @@ -2866,7 +2866,7 @@ } }, "transfer_no_receivers": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: empty state for the Receivers section.", "extractionState": "manual", "localizations": { "en": { @@ -2878,7 +2878,7 @@ } }, "transfer_receiver_accepted": { - "comment": "TODO: describe where this appears.", + "comment": "Receiver status: approved, waiting for the download to complete.", "extractionState": "manual", "localizations": { "en": { @@ -2890,7 +2890,7 @@ } }, "transfer_receiver_completed": { - "comment": "TODO: describe where this appears.", + "comment": "Receiver status: received successfully.", "extractionState": "manual", "localizations": { "en": { @@ -2902,7 +2902,7 @@ } }, "transfer_receiver_expired": { - "comment": "TODO: describe where this appears.", + "comment": "Receiver status: the request expired.", "extractionState": "manual", "localizations": { "en": { @@ -2914,7 +2914,7 @@ } }, "transfer_receiver_refused": { - "comment": "TODO: describe where this appears.", + "comment": "Receiver status: the request was refused.", "extractionState": "manual", "localizations": { "en": { @@ -2926,7 +2926,7 @@ } }, "transfer_receiver_requested": { - "comment": "TODO: describe where this appears.", + "comment": "Receiver status: waiting for the sender's approval.", "extractionState": "manual", "localizations": { "en": { @@ -2938,7 +2938,7 @@ } }, "transfer_receiver_unknown": { - "comment": "TODO: describe where this appears.", + "comment": "Receiver status: status unavailable/unknown.", "extractionState": "manual", "localizations": { "en": { @@ -2950,7 +2950,7 @@ } }, "transfer_receivers_completed_count": { - "comment": "TODO: describe where this appears.", + "comment": "Receivers summary: how many receivers completed. {count} = completed receivers.", "extractionState": "manual", "localizations": { "en": { @@ -2962,7 +2962,7 @@ } }, "transfer_receivers_description": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: description under the Receivers section.", "extractionState": "manual", "localizations": { "en": { @@ -2974,7 +2974,7 @@ } }, "transfer_receivers_pending": { - "comment": "TODO: describe where this appears.", + "comment": "Receivers summary: how many requests are waiting. {count} = pending receivers.", "extractionState": "manual", "localizations": { "en": { @@ -2986,7 +2986,7 @@ } }, "transfer_receivers_title": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: Receivers section title.", "extractionState": "manual", "localizations": { "en": { @@ -2998,7 +2998,7 @@ } }, "transfer_scan_qr": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer share: caption under the QR code.", "extractionState": "manual", "localizations": { "en": { @@ -3010,7 +3010,7 @@ } }, "transfer_share_description": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: description under the Share section.", "extractionState": "manual", "localizations": { "en": { @@ -3022,7 +3022,7 @@ } }, "transfer_share_title": { - "comment": "TODO: describe where this appears.", + "comment": "Transfer details: Share section title.", "extractionState": "manual", "localizations": { "en": { @@ -3034,7 +3034,7 @@ } }, "value_unavailable": { - "comment": "TODO: describe where this appears.", + "comment": "Placeholder shown when a device-info or metadata value can't be read.", "extractionState": "manual", "localizations": { "en": { @@ -3046,7 +3046,7 @@ } }, "version_title": { - "comment": "TODO: describe where this appears.", + "comment": "Device information / Settings row: app version label.", "extractionState": "manual", "localizations": { "en": { diff --git a/localization/strings.json b/localization/strings.json index f3d3a68..21c8a66 100644 --- a/localization/strings.json +++ b/localization/strings.json @@ -6,13 +6,13 @@ ], "strings": { "%@": { - "context": "TODO: describe where this appears.", + "context": "Apple format passthrough placeholder (single value). Legacy literal key — rename to a semantic key.", "targets": [ "apple" ] }, "%@ %@ · %@": { - "context": "TODO: describe where this appears.", + "context": "Apple format template composing three values with a middot separator (e.g. metadata rows). Legacy literal key — rename.", "targets": [ "apple" ], @@ -35,7 +35,7 @@ } }, "%@ · %@": { - "context": "TODO: describe where this appears.", + "context": "Apple format template composing two values with a middot separator. Legacy literal key — rename.", "targets": [ "apple" ], @@ -54,19 +54,19 @@ } }, "%@%%": { - "context": "TODO: describe where this appears.", + "context": "Apple format template appending a percent sign to a value (e.g. battery level). Legacy literal key — rename.", "targets": [ "apple" ] }, "about_bug_report": { - "context": "TODO: describe where this appears.", + "context": "About screen: button/link that opens the bug report form.", "translations": { "en": "Report a bug" } }, "about_description": { - "context": "TODO: describe where this appears.", + "context": "About screen: intro paragraph describing what VniDrop does.", "targets": [ "apple" ], @@ -75,7 +75,7 @@ } }, "about_is_direct": { - "context": "TODO: describe where this appears.", + "context": "About screen, 'What VniDrop is' list: point about direct device-to-device transfer.", "targets": [ "apple" ], @@ -84,7 +84,7 @@ } }, "about_is_encrypted": { - "context": "TODO: describe where this appears.", + "context": "About screen, 'What VniDrop is' list: point about encrypted, verified connections.", "targets": [ "apple" ], @@ -93,7 +93,7 @@ } }, "about_is_in_control": { - "context": "TODO: describe where this appears.", + "context": "About screen, 'What VniDrop is' list: point about controlling who receives.", "targets": [ "apple" ], @@ -102,7 +102,7 @@ } }, "about_is_no_account": { - "context": "TODO: describe where this appears.", + "context": "About screen, 'What VniDrop is' list: point about being account-free.", "targets": [ "apple" ], @@ -111,7 +111,7 @@ } }, "about_is_open": { - "context": "TODO: describe where this appears.", + "context": "About screen, 'What VniDrop is' list: point about being open source.", "targets": [ "apple" ], @@ -120,7 +120,7 @@ } }, "about_is_title": { - "context": "TODO: describe where this appears.", + "context": "About screen: section heading for the 'What VniDrop is' list.", "targets": [ "apple" ], @@ -129,7 +129,7 @@ } }, "about_isnt_cloud": { - "context": "TODO: describe where this appears.", + "context": "About screen, 'What VniDrop isn't' list: point about not being cloud storage.", "targets": [ "apple" ], @@ -138,7 +138,7 @@ } }, "about_isnt_public": { - "context": "TODO: describe where this appears.", + "context": "About screen, 'What VniDrop isn't' list: point about invitations not being public broadcasts.", "targets": [ "apple" ], @@ -147,7 +147,7 @@ } }, "about_isnt_sync": { - "context": "TODO: describe where this appears.", + "context": "About screen, 'What VniDrop isn't' list: point about not being sync/backup.", "targets": [ "apple" ], @@ -156,7 +156,7 @@ } }, "about_isnt_title": { - "context": "TODO: describe where this appears.", + "context": "About screen: section heading for the 'What VniDrop isn't' list.", "targets": [ "apple" ], @@ -165,7 +165,7 @@ } }, "about_license_label": { - "context": "TODO: describe where this appears.", + "context": "About screen: label for the license row.", "targets": [ "apple" ], @@ -174,13 +174,13 @@ } }, "about_privacy": { - "context": "TODO: describe where this appears.", + "context": "About screen: link to the privacy policy.", "translations": { "en": "Privacy policy" } }, "about_privacy_capability": { - "context": "TODO: describe where this appears.", + "context": "About screen, Privacy & security list: point that invitations are capabilities to share carefully.", "targets": [ "apple" ], @@ -189,7 +189,7 @@ } }, "about_privacy_deny": { - "context": "TODO: describe where this appears.", + "context": "About screen, Privacy & security list: point about denying unknown requests by default.", "targets": [ "apple" ], @@ -198,7 +198,7 @@ } }, "about_privacy_local": { - "context": "TODO: describe where this appears.", + "context": "About screen, Privacy & security list: point about received files staying local and never overwriting.", "targets": [ "apple" ], @@ -207,7 +207,7 @@ } }, "about_privacy_policy_label": { - "context": "TODO: describe where this appears.", + "context": "About screen: label for the privacy policy row.", "targets": [ "apple" ], @@ -216,7 +216,7 @@ } }, "about_privacy_relay": { - "context": "TODO: describe where this appears.", + "context": "About screen, Privacy & security list: point explaining encrypted relays.", "targets": [ "apple" ], @@ -225,7 +225,7 @@ } }, "about_privacy_title": { - "context": "TODO: describe where this appears.", + "context": "About screen: section heading for the Privacy & security list.", "targets": [ "apple" ], @@ -234,7 +234,7 @@ } }, "about_tagline": { - "context": "TODO: describe where this appears.", + "context": "About screen: short tagline under the app name.", "targets": [ "apple" ], @@ -243,49 +243,49 @@ } }, "about_title": { - "context": "TODO: describe where this appears.", + "context": "About screen: navigation/screen title.", "translations": { "en": "About" } }, "appearance_auto_description": { - "context": "TODO: describe where this appears.", + "context": "Settings > Appearance: description for the System/auto option.", "translations": { "en": "Match this device’s light or dark appearance." } }, "appearance_dark_mode": { - "context": "TODO: describe where this appears.", + "context": "Settings > Appearance: label for the dark theme option.", "translations": { "en": "Dark mode" } }, "appearance_light_mode": { - "context": "TODO: describe where this appears.", + "context": "Settings > Appearance: label for the light theme option.", "translations": { "en": "Light mode" } }, "appearance_system_mode": { - "context": "TODO: describe where this appears.", + "context": "Settings > Appearance: label for the follow-system option.", "translations": { "en": "System" } }, "appearance_title": { - "context": "TODO: describe where this appears.", + "context": "Settings > Appearance: section title.", "translations": { "en": "Appearance" } }, "approval_connection_request": { - "context": "TODO: describe where this appears.", + "context": "Approval prompt: title when a receiver requests to download a transfer.", "translations": { "en": "Receive request" } }, "approval_endpoint_id": { - "context": "TODO: describe where this appears.", + "context": "Approval prompt: shows the requesting device's ID. {arg1} = device/endpoint identifier.", "args": [ { "name": "arg1", @@ -297,13 +297,13 @@ } }, "approval_nearby_device": { - "context": "TODO: describe where this appears.", + "context": "Approval prompt: fallback label for a requester with no display name.", "translations": { "en": "A nearby device" } }, "approval_pending_count": { - "context": "TODO: describe where this appears.", + "context": "Send/transfer list: badge showing how many receive requests are awaiting approval. {count} = pending requests.", "args": [ { "name": "count", @@ -315,7 +315,7 @@ } }, "approval_request_body": { - "context": "TODO: describe where this appears.", + "context": "Approval prompt body: '{arg1} wants to receive \"{arg2}\".' {arg1} = requester name, {arg2} = transfer name.", "args": [ { "name": "arg1", @@ -331,13 +331,13 @@ } }, "battery_level_title": { - "context": "TODO: describe where this appears.", + "context": "Device information row: battery level label.", "translations": { "en": "Battery level" } }, "bug_report_contact_hint": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: placeholder text in the contact email field.", "targets": [ "apple" ], @@ -346,25 +346,25 @@ } }, "bug_report_contact_label": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: label for the optional contact email field.", "translations": { "en": "Contact email (optional)" } }, "bug_report_description": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: intro text explaining what gets attached.", "translations": { "en": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted)." } }, "bug_report_device_section": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: heading for the attached device information section.", "translations": { "en": "Device information" } }, "bug_report_expected_hint": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: placeholder in the 'what did you expect' field.", "targets": [ "apple" ], @@ -373,43 +373,43 @@ } }, "bug_report_expected_label": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: label for the expected-behavior field.", "translations": { "en": "What did you expect?" } }, "bug_report_include_logs": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: toggle label to attach recent logs.", "translations": { "en": "Include recent logs" } }, "bug_report_include_logs_description": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: explanation under the include-logs toggle.", "translations": { "en": "Helps us diagnose the issue. Sensitive values are redacted before sending." } }, "bug_report_logs_size": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: label showing the size of the log attachment.", "translations": { "en": "Log attachment size" } }, "bug_report_missing_expected": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: validation error when the expected-behavior field is empty.", "translations": { "en": "Please describe what you expected." } }, "bug_report_missing_what": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: validation error when the what-happened field is empty.", "translations": { "en": "Please describe what happened." } }, "bug_report_steps_hint": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: placeholder in the steps-to-reproduce field.", "targets": [ "apple" ], @@ -418,37 +418,37 @@ } }, "bug_report_steps_label": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: label for the optional steps-to-reproduce field.", "translations": { "en": "Steps to reproduce (optional)" } }, "bug_report_submit": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: submit button.", "translations": { "en": "Submit report" } }, "bug_report_submit_failed": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: error message when submission fails.", "translations": { "en": "Could not submit the bug report. Try again later." } }, "bug_report_submitted": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: confirmation message after a successful submission.", "translations": { "en": "Thanks — your bug report was recorded." } }, "bug_report_submitting": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: progress label while the report is being sent.", "translations": { "en": "Submitting…" } }, "bug_report_what_hint": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: placeholder in the what-happened field.", "targets": [ "apple" ], @@ -457,523 +457,523 @@ } }, "bug_report_what_label": { - "context": "TODO: describe where this appears.", + "context": "Bug report form: label for the what-happened field.", "translations": { "en": "What happened?" } }, "button_approve": { - "context": "TODO: describe where this appears.", + "context": "Button: approve a receiver's request.", "translations": { "en": "Approve" } }, "button_back": { - "context": "TODO: describe where this appears.", + "context": "Button: go back to the previous step/screen.", "translations": { "en": "Back" } }, "button_cancel": { - "context": "TODO: describe where this appears.", + "context": "Button: cancel the current action or dialog.", "translations": { "en": "Cancel" } }, "button_cancel_receive": { - "context": "TODO: describe where this appears.", + "context": "Button: cancel an in-progress receive.", "translations": { "en": "Cancel" } }, "button_change_files": { - "context": "TODO: describe where this appears.", + "context": "Button: change the selected files in the send flow.", "translations": { "en": "Change files" } }, "button_choose_files": { - "context": "TODO: describe where this appears.", + "context": "Button: open the file picker to choose files to send.", "translations": { "en": "Choose files" } }, "button_choose_folder": { - "context": "TODO: describe where this appears.", + "context": "Button: open the folder picker (send selection or receive folder).", "translations": { "en": "Choose folder" } }, "button_clear": { - "context": "TODO: describe where this appears.", + "context": "Button: clear the current input or selection.", "translations": { "en": "Clear" } }, "button_close": { - "context": "TODO: describe where this appears.", + "context": "Button: close the current sheet/dialog.", "translations": { "en": "Close" } }, "button_create_new_transfer": { - "context": "TODO: describe where this appears.", + "context": "Button: start creating a new transfer (Send tab).", "translations": { "en": "New transfer" } }, "button_delete_transfer": { - "context": "TODO: describe where this appears.", + "context": "Button: delete a transfer.", "translations": { "en": "Delete transfer" } }, "button_download_invitation": { - "context": "TODO: describe where this appears.", + "context": "Button: save the invitation as a .vnd file.", "translations": { "en": "Save .vnd file" } }, "button_native_share": { - "context": "TODO: describe where this appears.", + "context": "Button: open the OS share sheet to share the invitation.", "translations": { "en": "Share invitation" } }, "button_open_settings": { - "context": "TODO: describe where this appears.", + "context": "Button: open the OS Settings app (e.g. for permissions).", "translations": { "en": "Open Settings" } }, "button_receive": { - "context": "TODO: describe where this appears.", + "context": "Button: receive label (Receive action).", "translations": { "en": "Receive" } }, "button_receive_files": { - "context": "TODO: describe where this appears.", + "context": "Button: start receiving a transfer.", "translations": { "en": "Start receiving" } }, "button_refuse": { - "context": "TODO: describe where this appears.", + "context": "Button: refuse a receiver's request.", "translations": { "en": "Refuse" } }, "button_remove_file": { - "context": "TODO: describe where this appears.", + "context": "Button: remove a single file from the send selection.", "translations": { "en": "Remove file" } }, "button_reset_default": { - "context": "TODO: describe where this appears.", + "context": "Button: reset a setting to its default value.", "translations": { "en": "Use default" } }, "button_retry": { - "context": "TODO: describe where this appears.", + "context": "Button: retry after a failed operation.", "translations": { "en": "Retry" } }, "button_share_file": { - "context": "TODO: describe where this appears.", + "context": "Button: start sharing the transfer (make it available).", "translations": { "en": "Start sharing" } }, "button_sharing_file": { - "context": "TODO: describe where this appears.", + "context": "Button: disabled/loading state while the transfer is being prepared.", "translations": { "en": "Preparing transfer…" } }, "button_show_in_files": { - "context": "TODO: describe where this appears.", + "context": "Button: reveal a received file in the Files app.", "translations": { "en": "Show in Files" } }, "button_write_nfc": { - "context": "TODO: describe where this appears.", + "context": "Button: write the invitation to an NFC tag.", "translations": { "en": "Write to NFC tag" } }, "device_model_title": { - "context": "TODO: describe where this appears.", + "context": "Device information row: device model label.", "translations": { "en": "Device model" } }, "device_name_title": { - "context": "TODO: describe where this appears.", + "context": "Device information row: device name label.", "translations": { "en": "Device name" } }, "diagnostics_description": { - "context": "TODO: describe where this appears.", + "context": "Settings > Diagnostics: explanation of what anonymous diagnostics collect.", "translations": { "en": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included." } }, "diagnostics_disabled_message": { - "context": "TODO: describe where this appears.", + "context": "Settings > Diagnostics: confirmation shown when diagnostics are turned off.", "translations": { "en": "Diagnostics sharing is off." } }, "diagnostics_enabled_message": { - "context": "TODO: describe where this appears.", + "context": "Settings > Diagnostics: confirmation shown when diagnostics are turned on.", "translations": { "en": "Diagnostics sharing is on." } }, "diagnostics_title": { - "context": "TODO: describe where this appears.", + "context": "Settings > Diagnostics: toggle title.", "translations": { "en": "Share diagnostics" } }, "error_camera": { - "context": "TODO: describe where this appears.", + "context": "Error: camera permission is needed to scan a QR code.", "translations": { "en": "Camera access is required to scan a QR code." } }, "error_device_info": { - "context": "TODO: describe where this appears.", + "context": "Error: device information could not be loaded.", "translations": { "en": "Could not load device information." } }, "error_filesystem": { - "context": "TODO: describe where this appears.", + "context": "Error: the selected files/folder could not be accessed.", "translations": { "en": "VniDrop could not access the selected files or folder. Check permissions and try again." } }, "error_generic": { - "context": "TODO: describe where this appears.", + "context": "Error: generic fallback message.", "translations": { "en": "Something went wrong. Try again." } }, "error_initialization": { - "context": "TODO: describe where this appears.", + "context": "Error: the app failed to finish starting up.", "translations": { "en": "VniDrop could not finish starting up. Close the app and try again." } }, "error_invalid_ticket": { - "context": "TODO: describe where this appears.", + "context": "Error: the invitation/ticket could not be parsed.", "translations": { "en": "This invitation could not be read. Ask the sender for a new one." } }, "error_invitation_empty": { - "context": "TODO: describe where this appears.", + "context": "Error: the opened invitation contained no data.", "translations": { "en": "That invitation is empty. Try opening it again." } }, "error_missing_native_library": { - "context": "TODO: describe where this appears.", + "context": "Error: the native library is missing from the build.", "translations": { "en": "The native VniDrop library is missing from this build." } }, "error_nfc": { - "context": "TODO: describe where this appears.", + "context": "Error: the NFC tag could not be read/used.", "translations": { "en": "This NFC tag could not be used. Try another tag." } }, "error_permission": { - "context": "TODO: describe where this appears.", + "context": "Error: the transfer was not approved or was refused by the sender.", "translations": { "en": "The sender has not approved this transfer, or it was refused." } }, "error_repository": { - "context": "TODO: describe where this appears.", + "context": "Error: transfer data could not be saved locally.", "translations": { "en": "VniDrop could not save transfer data on this device." } }, "error_selection_failed": { - "context": "TODO: describe where this appears.", + "context": "Error: the selected item could not be opened.", "translations": { "en": "Could not open the selected item. Try choosing it again." } }, "error_share_empty": { - "context": "TODO: describe where this appears.", + "context": "Error: attempted to share with nothing selected.", "translations": { "en": "Select at least one item to share." } }, "error_socket_bind": { - "context": "TODO: describe where this appears.", + "context": "Error: the app could not open its network sockets.", "translations": { "en": "VniDrop could not open its network sockets on this device." } }, "error_starting_up": { - "context": "TODO: describe where this appears.", + "context": "Error: an invitation was opened before startup finished.", "translations": { "en": "VniDrop is still starting. Open the invitation again in a moment." } }, "error_transfer": { - "context": "TODO: describe where this appears.", + "context": "Error: the transfer could not be completed.", "translations": { "en": "The transfer could not be completed. Check your connection and try again." } }, "field_receiver_name": { - "context": "TODO: describe where this appears.", + "context": "Text field label: the receiver's display name.", "translations": { "en": "Receiver name" } }, "field_sender_name": { - "context": "TODO: describe where this appears.", + "context": "Text field label: the sender's display name.", "translations": { "en": "Sender name" } }, "field_transfer_name": { - "context": "TODO: describe where this appears.", + "context": "Text field label: the name given to a transfer.", "translations": { "en": "Transfer name" } }, "field_username": { - "context": "TODO: describe where this appears.", + "context": "Settings text field label: this device's display name.", "translations": { "en": "Display name" } }, "folder_status_permission_required": { - "context": "TODO: describe where this appears.", + "context": "Receive-folder status: permission is required to write to the chosen folder.", "translations": { "en": "Permission needed" } }, "folder_status_unavailable": { - "context": "TODO: describe where this appears.", + "context": "Receive-folder status: the chosen folder is unavailable.", "translations": { "en": "Unavailable" } }, "folder_status_validating": { - "context": "TODO: describe where this appears.", + "context": "Receive-folder status: the folder is being checked.", "translations": { "en": "Checking folder…" } }, "folder_status_writable": { - "context": "TODO: describe where this appears.", + "context": "Receive-folder status: the folder is valid and writable.", "translations": { "en": "Ready" } }, "metadata_files": { - "context": "TODO: describe where this appears.", + "context": "Transfer metadata label: number of files.", "translations": { "en": "Files" } }, "metadata_size": { - "context": "TODO: describe where this appears.", + "context": "Transfer metadata label: total size.", "translations": { "en": "Size" } }, "metadata_status": { - "context": "TODO: describe where this appears.", + "context": "Transfer metadata label: current status.", "translations": { "en": "Status" } }, "nav_receive": { - "context": "TODO: describe where this appears.", + "context": "Bottom navigation: Receive tab label.", "translations": { "en": "Receive" } }, "nav_send": { - "context": "TODO: describe where this appears.", + "context": "Bottom navigation: Send tab label.", "translations": { "en": "Send" } }, "nav_settings": { - "context": "TODO: describe where this appears.", + "context": "Bottom navigation: Settings tab label.", "translations": { "en": "Settings" } }, "network_title": { - "context": "TODO: describe where this appears.", + "context": "Device information row: network label.", "translations": { "en": "Network" } }, "notifications_description": { - "context": "TODO: describe where this appears.", + "context": "Settings > Notifications: explanation of what notifications are used for.", "translations": { "en": "Get notified about new receive requests while VniDrop is in the background." } }, "notifications_enabled_message": { - "context": "TODO: describe where this appears.", + "context": "Settings > Notifications: confirmation when notifications are enabled.", "translations": { "en": "Notifications enabled." } }, "notifications_local_title": { - "context": "TODO: describe where this appears.", + "context": "Settings > Notifications: label for the allow-notifications action.", "translations": { "en": "Allow notifications" } }, "notifications_permission_denied": { - "context": "TODO: describe where this appears.", + "context": "Settings > Notifications: message when the OS permission is denied.", "translations": { "en": "Notifications are turned off for VniDrop. You can enable them in Settings." } }, "notifications_settings_open_failed": { - "context": "TODO: describe where this appears.", + "context": "Settings > Notifications: error when the OS notification settings can't be opened.", "translations": { "en": "Could not open notification settings." } }, "notifications_title": { - "context": "TODO: describe where this appears.", + "context": "Settings > Notifications: section title.", "translations": { "en": "Notifications" } }, "notifications_unsupported": { - "context": "TODO: describe where this appears.", + "context": "Settings > Notifications: message when notifications aren't supported on the device.", "translations": { "en": "Notifications are not available on this device." } }, "os_version_title": { - "context": "TODO: describe where this appears.", + "context": "Device information row: operating system version label.", "translations": { "en": "Operating system" } }, "preferences_receive_folder_title": { - "context": "TODO: describe where this appears.", + "context": "Settings > Preferences: label for the received-files destination folder.", "translations": { "en": "Save received transfers to" } }, "preferences_title": { - "context": "TODO: describe where this appears.", + "context": "Settings > Preferences: section title.", "translations": { "en": "Preferences" } }, "progress_cancelled": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: cancelled.", "translations": { "en": "Cancelled" } }, "progress_completed": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: completed.", "translations": { "en": "Completed" } }, "progress_connected": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: connected.", "translations": { "en": "Connected" } }, "progress_connecting": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: connecting.", "translations": { "en": "Connecting" } }, "progress_downloading": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: downloading.", "translations": { "en": "Downloading" } }, "progress_failed": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: failed.", "translations": { "en": "Failed" } }, "progress_getting_ready": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: getting ready.", "translations": { "en": "Getting ready" } }, "progress_interrupted": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: the transfer was interrupted.", "translations": { "en": "Transfer interrupted" } }, "progress_preparing": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: preparing.", "translations": { "en": "Preparing" } }, "progress_ready": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: ready.", "translations": { "en": "Ready" } }, "progress_receiving": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: receiving.", "translations": { "en": "Receiving" } }, "progress_requesting_access": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: requesting access from the sender.", "translations": { "en": "Requesting access" } }, "progress_saving": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: saving received files.", "translations": { "en": "Saving" } }, "progress_sending": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: sending.", "translations": { "en": "Sending" } }, "progress_sending_to_count": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: sending to N receivers. %lld = receiver count.", "targets": [ "apple" ], @@ -982,55 +982,55 @@ } }, "progress_share_ready": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: the share is ready.", "translations": { "en": "Ready to share" } }, "progress_working": { - "context": "TODO: describe where this appears.", + "context": "Transfer progress label: generic working/in-progress state.", "translations": { "en": "Working…" } }, "receive_choose_method_body": { - "context": "TODO: describe where this appears.", + "context": "Receive flow: body text prompting the user to pick an invitation method.", "translations": { "en": "Choose the invitation method available to you." } }, "receive_choose_method_title": { - "context": "TODO: describe where this appears.", + "context": "Receive flow: title of the connect-method chooser.", "translations": { "en": "How would you like to connect?" } }, "receive_clear_history": { - "context": "TODO: describe where this appears.", + "context": "Receive history: action to clear all history.", "translations": { "en": "Clear history" } }, "receive_clear_history_description": { - "context": "TODO: describe where this appears.", + "context": "Receive history: confirmation dialog body for clearing all history.", "translations": { "en": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device." } }, "receive_clear_history_title": { - "context": "TODO: describe where this appears.", + "context": "Receive history: confirmation dialog title for clearing all history.", "translations": { "en": "Clear receive history?" } }, "receive_completed": { - "context": "TODO: describe where this appears.", + "context": "Receive flow: toast/message when a transfer finishes downloading.", "translations": { "en": "Transfer received." } }, "receive_delete_history_description": { - "context": "TODO: describe where this appears.", + "context": "Receive history: confirmation body for removing one item. {arg1} = transfer name.", "args": [ { "name": "arg1", @@ -1042,205 +1042,205 @@ } }, "receive_delete_history_item": { - "context": "TODO: describe where this appears.", + "context": "Receive history: swipe/menu action to delete a single history item.", "translations": { "en": "Delete from receive history" } }, "receive_delete_history_title": { - "context": "TODO: describe where this appears.", + "context": "Receive history: confirmation title for removing one item.", "translations": { "en": "Remove from history?" } }, "receive_empty_body": { - "context": "TODO: describe where this appears.", + "context": "Receive tab empty state: instructions on how to receive.", "translations": { "en": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag." } }, "receive_empty_title": { - "context": "TODO: describe where this appears.", + "context": "Receive tab empty state: title when nothing has been received.", "translations": { "en": "Nothing received yet" } }, "receive_history_cleared": { - "context": "TODO: describe where this appears.", + "context": "Receive history: toast confirming history was cleared.", "translations": { "en": "Receive history cleared." } }, "receive_history_title": { - "context": "TODO: describe where this appears.", + "context": "Receive tab: History section title.", "translations": { "en": "History" } }, "receive_method_file": { - "context": "TODO: describe where this appears.", + "context": "Receive method: open a .vnd invitation file.", "translations": { "en": "Open a .vnd invitation" } }, "receive_method_file_description": { - "context": "TODO: describe where this appears.", + "context": "Receive method description: open a saved/shared invitation file.", "translations": { "en": "Choose an invitation saved or shared to this device." } }, "receive_method_nfc": { - "context": "TODO: describe where this appears.", + "context": "Receive method: read an NFC tag.", "translations": { "en": "Read NFC tag" } }, "receive_method_nfc_description": { - "context": "TODO: describe where this appears.", + "context": "Receive method description: hold near the sender's NFC tag.", "translations": { "en": "Hold this device near the sender’s invitation tag." } }, "receive_method_scan": { - "context": "TODO: describe where this appears.", + "context": "Receive method: scan a QR code.", "translations": { "en": "Scan QR code" } }, "receive_method_scan_description": { - "context": "TODO: describe where this appears.", + "context": "Receive method description: use the camera to scan the sender's code.", "translations": { "en": "Use the camera to scan the sender’s VniDrop code." } }, "receive_new_subtitle": { - "context": "TODO: describe where this appears.", + "context": "Receive tab: subtitle under the title.", "translations": { "en": "Transfers you’ve received on this device." } }, "receive_nfc_waiting": { - "context": "TODO: describe where this appears.", + "context": "Receive flow: prompt while waiting to read an NFC tag.", "translations": { "en": "Hold near the NFC tag…" } }, "receive_open_files_failed": { - "context": "TODO: describe where this appears.", + "context": "Receive flow: error when opening VniDrop's folder in Files fails.", "translations": { "en": "Couldn’t open VniDrop in Files." } }, "receive_review_title": { - "context": "TODO: describe where this appears.", + "context": "Receive flow: title of the review screen before accepting a transfer.", "translations": { "en": "Review transfer" } }, "receive_title": { - "context": "TODO: describe where this appears.", + "context": "Receive tab: screen title.", "translations": { "en": "Receive" } }, "receive_unknown_transfer": { - "context": "TODO: describe where this appears.", + "context": "Receive flow: fallback name for a transfer with no title.", "translations": { "en": "VniDrop transfer" } }, "send_access_anyone": { - "context": "TODO: describe where this appears.", + "context": "Send access option: anyone with the invitation can receive.", "translations": { "en": "Anyone with this transfer" } }, "send_access_anyone_description": { - "context": "TODO: describe where this appears.", + "context": "Send access option description: no approval required.", "translations": { "en": "No approval is required. Only use this for items you are comfortable sharing." } }, "send_access_anyone_warning": { - "context": "TODO: describe where this appears.", + "context": "Send access option warning: caution about open access.", "translations": { "en": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items." } }, "send_access_approval": { - "context": "TODO: describe where this appears.", + "context": "Send access option: approve each receiver.", "translations": { "en": "Ask before each download" } }, "send_access_approval_description": { - "context": "TODO: describe where this appears.", + "context": "Send access option description: you approve/refuse each receiver.", "translations": { "en": "You approve or refuse every new receiver." } }, "send_access_title": { - "context": "TODO: describe where this appears.", + "context": "Send flow: heading for the who-can-receive access chooser.", "translations": { "en": "Who can receive it?" } }, "send_choose_file_body": { - "context": "TODO: describe where this appears.", + "context": "Send flow: body text for the choose-what-to-share step.", "translations": { "en": "Select files or a folder from this device. You can review the selection before creating the transfer." } }, "send_choose_file_title": { - "context": "TODO: describe where this appears.", + "context": "Send flow: title of the choose-what-to-share step.", "translations": { "en": "Choose what to share" } }, "send_empty_body": { - "context": "TODO: describe where this appears.", + "context": "Send tab empty state: instructions on how to create a transfer.", "translations": { "en": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file." } }, "send_empty_title": { - "context": "TODO: describe where this appears.", + "context": "Send tab empty state: title when nothing has been shared.", "translations": { "en": "Nothing shared yet" } }, "send_file_size_unknown": { - "context": "TODO: describe where this appears.", + "context": "Send flow: shown when a selected file's size can't be determined.", "translations": { "en": "Size unavailable" } }, "send_folder_label": { - "context": "TODO: describe where this appears.", + "context": "Send flow: label indicating a selected item is a folder.", "translations": { "en": "Folder" } }, "send_new_transfer_description": { - "context": "TODO: describe where this appears.", + "context": "Send flow: description for the create-new-transfer entry.", "translations": { "en": "Create a new transfer" } }, "send_new_transfer_title": { - "context": "TODO: describe where this appears.", + "context": "Send flow: title for the new-transfer step.", "translations": { "en": "New transfer" } }, "send_review_title": { - "context": "TODO: describe where this appears.", + "context": "Send flow: title of the review-transfer step before creating it.", "translations": { "en": "Review transfer" } }, "send_selected_files_count": { - "context": "TODO: describe where this appears.", + "context": "Send flow: count of files chosen. {count} = selected files. NOTE: singular case reads '1 files' — should become a plural.", "args": [ { "name": "count", @@ -1252,7 +1252,7 @@ } }, "send_stop_sharing": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: action to stop sharing a transfer.", "targets": [ "apple" ], @@ -1261,7 +1261,7 @@ } }, "send_stop_sharing_description": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: confirmation body for stopping sharing.", "targets": [ "apple" ], @@ -1270,97 +1270,97 @@ } }, "send_subtitle": { - "context": "TODO: describe where this appears.", + "context": "Send tab: subtitle under the title.", "translations": { "en": "Transfers you’re sharing from this device." } }, "send_title": { - "context": "TODO: describe where this appears.", + "context": "Send tab: screen title.", "translations": { "en": "Send" } }, "send_transfer_created": { - "context": "TODO: describe where this appears.", + "context": "Send flow: toast confirming a transfer was created.", "translations": { "en": "Transfer created." } }, "send_transfer_details_title": { - "context": "TODO: describe where this appears.", + "context": "Send flow: title of the transfer details screen.", "translations": { "en": "Transfer details" } }, "send_transfers_title": { - "context": "TODO: describe where this appears.", + "context": "Send tab: 'Your transfers' list heading.", "translations": { "en": "Your transfers" } }, "settings_subtitle": { - "context": "TODO: describe where this appears.", + "context": "Settings screen: subtitle summarizing what's configurable.", "translations": { "en": "Your name, where transfers are saved, appearance, and notifications." } }, "settings_title": { - "context": "TODO: describe where this appears.", + "context": "Settings screen: title.", "translations": { "en": "Settings" } }, "snackbar_dismiss": { - "context": "TODO: describe where this appears.", + "context": "Snackbar: accessibility label / action to dismiss the snackbar.", "translations": { "en": "Dismiss" } }, "status_available": { - "context": "TODO: describe where this appears.", + "context": "Transfer status: available (actively shared).", "translations": { "en": "Available" } }, "status_cancelled": { - "context": "TODO: describe where this appears.", + "context": "Transfer status: cancelled.", "translations": { "en": "Cancelled" } }, "status_completed": { - "context": "TODO: describe where this appears.", + "context": "Transfer status: completed.", "translations": { "en": "Completed" } }, "status_failed": { - "context": "TODO: describe where this appears.", + "context": "Transfer status: failed.", "translations": { "en": "Failed" } }, "status_preparing": { - "context": "TODO: describe where this appears.", + "context": "Transfer status: preparing.", "translations": { "en": "Preparing" } }, "status_receiving": { - "context": "TODO: describe where this appears.", + "context": "Transfer status: receiving.", "translations": { "en": "Receiving" } }, "status_stopped": { - "context": "TODO: describe where this appears.", + "context": "Transfer status: stopped.", "translations": { "en": "Stopped" } }, "storage_calculating": { - "context": "TODO: describe where this appears.", + "context": "Settings > Storage: placeholder while a size is being calculated.", "targets": [ "apple" ], @@ -1369,7 +1369,7 @@ } }, "storage_delete_transfers": { - "context": "TODO: describe where this appears.", + "context": "Settings > Storage: button to delete all transfer records.", "targets": [ "apple" ], @@ -1378,7 +1378,7 @@ } }, "storage_delete_transfers_description": { - "context": "TODO: describe where this appears.", + "context": "Settings > Storage: confirmation body for deleting all transfer records.", "targets": [ "apple" ], @@ -1387,7 +1387,7 @@ } }, "storage_deleting": { - "context": "TODO: describe where this appears.", + "context": "Settings > Storage: progress label while transfers are being deleted.", "targets": [ "apple" ], @@ -1396,7 +1396,7 @@ } }, "storage_footer": { - "context": "TODO: describe where this appears.", + "context": "Settings > Storage: footer explaining how storage is managed.", "targets": [ "apple" ], @@ -1405,7 +1405,7 @@ } }, "storage_received_files": { - "context": "TODO: describe where this appears.", + "context": "Settings > Storage: label for the received-files size row.", "targets": [ "apple" ], @@ -1414,7 +1414,7 @@ } }, "storage_temporary": { - "context": "TODO: describe where this appears.", + "context": "Settings > Storage: label for the temporary-files size row.", "targets": [ "apple" ], @@ -1423,7 +1423,7 @@ } }, "storage_title": { - "context": "TODO: describe where this appears.", + "context": "Settings > Storage: section title.", "targets": [ "apple" ], @@ -1432,7 +1432,7 @@ } }, "storage_total": { - "context": "TODO: describe where this appears.", + "context": "Settings > Storage: label for the total-size row.", "targets": [ "apple" ], @@ -1441,7 +1441,7 @@ } }, "storage_transfer_data": { - "context": "TODO: describe where this appears.", + "context": "Settings > Storage: label for the transfer-engine data size row.", "targets": [ "apple" ], @@ -1450,7 +1450,7 @@ } }, "storage_transfers_deleted": { - "context": "TODO: describe where this appears.", + "context": "Settings > Storage: toast confirming all transfers were deleted.", "targets": [ "apple" ], @@ -1459,19 +1459,19 @@ } }, "transfer_activity_description": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: description under the Activity section.", "translations": { "en": "See important updates for this transfer" } }, "transfer_activity_title": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: Activity section title.", "translations": { "en": "Activity" } }, "transfer_delete_description": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: confirmation body for deleting a transfer. {arg1} = transfer name.", "args": [ { "name": "arg1", @@ -1483,103 +1483,103 @@ } }, "transfer_delete_title": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: confirmation title for deleting a transfer.", "translations": { "en": "Delete transfer?" } }, "transfer_deleted": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: toast confirming a transfer was deleted.", "translations": { "en": "Transfer deleted." } }, "transfer_deleting": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: progress label while a transfer is being deleted.", "translations": { "en": "Deleting…" } }, "transfer_details_title": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: screen title.", "translations": { "en": "Transfer details" } }, "transfer_event_approved": { - "context": "TODO: describe where this appears.", + "context": "Transfer activity event: a receiver's access was approved.", "translations": { "en": "Receiver access approved" } }, "transfer_event_completed": { - "context": "TODO: describe where this appears.", + "context": "Transfer activity event: a receiver completed the transfer.", "translations": { "en": "A receiver completed the transfer" } }, "transfer_event_connecting": { - "context": "TODO: describe where this appears.", + "context": "Transfer activity event: connecting to the sender.", "translations": { "en": "Connecting to sender" } }, "transfer_event_downloading": { - "context": "TODO: describe where this appears.", + "context": "Transfer activity event: downloading.", "translations": { "en": "Downloading" } }, "transfer_event_failed": { - "context": "TODO: describe where this appears.", + "context": "Transfer activity event: the transfer hit a problem.", "translations": { "en": "The transfer encountered a problem" } }, "transfer_event_preparing": { - "context": "TODO: describe where this appears.", + "context": "Transfer activity event: preparing the transfer.", "translations": { "en": "Preparing your transfer" } }, "transfer_event_ready": { - "context": "TODO: describe where this appears.", + "context": "Transfer activity event: ready to share.", "translations": { "en": "Ready to share" } }, "transfer_event_refused": { - "context": "TODO: describe where this appears.", + "context": "Transfer activity event: a receiver's access was refused.", "translations": { "en": "Receiver access refused" } }, "transfer_event_requested": { - "context": "TODO: describe where this appears.", + "context": "Transfer activity event: a receiver requested access.", "translations": { "en": "A receiver requested access" } }, "transfer_event_saving": { - "context": "TODO: describe where this appears.", + "context": "Transfer activity event: saving received files.", "translations": { "en": "Saving" } }, "transfer_event_stopped": { - "context": "TODO: describe where this appears.", + "context": "Transfer activity event: sharing was stopped.", "translations": { "en": "Sharing stopped" } }, "transfer_event_updated": { - "context": "TODO: describe where this appears.", + "context": "Transfer activity event: the transfer was updated.", "translations": { "en": "Transfer updated" } }, "transfer_file_count": { - "context": "TODO: describe where this appears.", + "context": "Transfer subtitle: file count with pluralization. {count} = number of files.", "args": [ { "name": "count", @@ -1594,85 +1594,85 @@ } }, "transfer_invitation_saved": { - "context": "TODO: describe where this appears.", + "context": "Transfer share: toast confirming the invitation file was saved.", "translations": { "en": "Invitation saved." } }, "transfer_nearby_device": { - "context": "TODO: describe where this appears.", + "context": "Transfer share/receivers: label for a nearby device.", "translations": { "en": "Nearby device" } }, "transfer_nfc_unavailable": { - "context": "TODO: describe where this appears.", + "context": "Transfer share: message when NFC writing isn't available on the device.", "translations": { "en": "NFC tag writing is not available on this device." } }, "transfer_nfc_waiting": { - "context": "TODO: describe where this appears.", + "context": "Transfer share: prompt while waiting to write an NFC tag.", "translations": { "en": "Hold your device near a writable NFC tag." } }, "transfer_nfc_written": { - "context": "TODO: describe where this appears.", + "context": "Transfer share: confirmation the invitation was written to the NFC tag.", "translations": { "en": "Invitation written to the NFC tag." } }, "transfer_no_activity": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: empty state for the Activity section.", "translations": { "en": "There is no activity to show yet." } }, "transfer_no_receivers": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: empty state for the Receivers section.", "translations": { "en": "Nobody has requested this transfer yet." } }, "transfer_receiver_accepted": { - "context": "TODO: describe where this appears.", + "context": "Receiver status: approved, waiting for the download to complete.", "translations": { "en": "Approved — waiting for completion" } }, "transfer_receiver_completed": { - "context": "TODO: describe where this appears.", + "context": "Receiver status: received successfully.", "translations": { "en": "Received successfully" } }, "transfer_receiver_expired": { - "context": "TODO: describe where this appears.", + "context": "Receiver status: the request expired.", "translations": { "en": "Request expired" } }, "transfer_receiver_refused": { - "context": "TODO: describe where this appears.", + "context": "Receiver status: the request was refused.", "translations": { "en": "Request refused" } }, "transfer_receiver_requested": { - "context": "TODO: describe where this appears.", + "context": "Receiver status: waiting for the sender's approval.", "translations": { "en": "Waiting for your approval" } }, "transfer_receiver_unknown": { - "context": "TODO: describe where this appears.", + "context": "Receiver status: status unavailable/unknown.", "translations": { "en": "Status unavailable" } }, "transfer_receivers_completed_count": { - "context": "TODO: describe where this appears.", + "context": "Receivers summary: how many receivers completed. {count} = completed receivers.", "args": [ { "name": "count", @@ -1684,13 +1684,13 @@ } }, "transfer_receivers_description": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: description under the Receivers section.", "translations": { "en": "Requests, approvals, and completed deliveries" } }, "transfer_receivers_pending": { - "context": "TODO: describe where this appears.", + "context": "Receivers summary: how many requests are waiting. {count} = pending receivers.", "args": [ { "name": "count", @@ -1702,37 +1702,37 @@ } }, "transfer_receivers_title": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: Receivers section title.", "translations": { "en": "Receivers" } }, "transfer_scan_qr": { - "context": "TODO: describe where this appears.", + "context": "Transfer share: caption under the QR code.", "translations": { "en": "Scan with VniDrop to receive this transfer" } }, "transfer_share_description": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: description under the Share section.", "translations": { "en": "QR code, invitation file, and nearby options" } }, "transfer_share_title": { - "context": "TODO: describe where this appears.", + "context": "Transfer details: Share section title.", "translations": { "en": "Share" } }, "value_unavailable": { - "context": "TODO: describe where this appears.", + "context": "Placeholder shown when a device-info or metadata value can't be read.", "translations": { "en": "Not available" } }, "version_title": { - "context": "TODO: describe where this appears.", + "context": "Device information / Settings row: app version label.", "translations": { "en": "App version" } From 4448822bfa956e2c9f3175ac7d94c56686a2201c Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 20 Jul 2026 10:24:54 +0200 Subject: [PATCH 03/13] refactor(l10n): default strings to all targets MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Most strings were imported with a platform-specific `targets` (usually apple-only) just because that's where they happen to be used today. Drop the restriction so they default to all targets and are available to KMP too; only the four literal `%@…` format-composition keys stay apple-only. Also fix the placeholder parser to tolerate C length modifiers (`%lld`), and give progress_sending_to_count a proper int arg so it emits `%1$d` on both platforms instead of a literal `%lld`. --- apple/VniDrop/Resources/Localizable.xcstrings | 2 +- localization/src/lib/placeholders.ts | 5 +- localization/strings.json | 121 ++---------------- .../composeResources/values/strings.xml | 37 ++++++ 4 files changed, 49 insertions(+), 116 deletions(-) diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index b630d22..bde06f0 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -1684,7 +1684,7 @@ "en": { "stringUnit": { "state": "translated", - "value": "Sending to %lld" + "value": "Sending to %1$d" } } } diff --git a/localization/src/lib/placeholders.ts b/localization/src/lib/placeholders.ts index e68e7f6..f4e6907 100644 --- a/localization/src/lib/placeholders.ts +++ b/localization/src/lib/placeholders.ts @@ -60,8 +60,9 @@ export interface ParsedString { args: Arg[]; } -// Matches an escaped literal `%%` or a printf specifier (positional or bare). -const CONV = /%%|%(?:(\d+)\$)?([@sdif])/g; +// Matches an escaped literal `%%` or a printf specifier (positional or bare), +// tolerating C length modifiers like `%lld` / `%ld` on the integer forms. +const CONV = /%%|%(?:(\d+)\$)?l{0,2}([@sdif])/g; function typeForConv(conv: string): ArgType { if (conv === "@" || conv === "s") return "string"; diff --git a/localization/strings.json b/localization/strings.json index 21c8a66..013448d 100644 --- a/localization/strings.json +++ b/localization/strings.json @@ -67,108 +67,72 @@ }, "about_description": { "context": "About screen: intro paragraph describing what VniDrop does.", - "targets": [ - "apple" - ], "translations": { "en": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done." } }, "about_is_direct": { "context": "About screen, 'What VniDrop is' list: point about direct device-to-device transfer.", - "targets": [ - "apple" - ], "translations": { "en": "A direct device-to-device transfer — your files go straight to the receiver." } }, "about_is_encrypted": { "context": "About screen, 'What VniDrop is' list: point about encrypted, verified connections.", - "targets": [ - "apple" - ], "translations": { "en": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash." } }, "about_is_in_control": { "context": "About screen, 'What VniDrop is' list: point about controlling who receives.", - "targets": [ - "apple" - ], "translations": { "en": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation." } }, "about_is_no_account": { "context": "About screen, 'What VniDrop is' list: point about being account-free.", - "targets": [ - "apple" - ], "translations": { "en": "Account-free — there’s nothing to sign up for." } }, "about_is_open": { "context": "About screen, 'What VniDrop is' list: point about being open source.", - "targets": [ - "apple" - ], "translations": { "en": "Open source, released under the Apache 2.0 license." } }, "about_is_title": { "context": "About screen: section heading for the 'What VniDrop is' list.", - "targets": [ - "apple" - ], "translations": { "en": "What VniDrop is" } }, "about_isnt_cloud": { "context": "About screen, 'What VniDrop isn't' list: point about not being cloud storage.", - "targets": [ - "apple" - ], "translations": { "en": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer." } }, "about_isnt_public": { "context": "About screen, 'What VniDrop isn't' list: point about invitations not being public broadcasts.", - "targets": [ - "apple" - ], "translations": { "en": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby." } }, "about_isnt_sync": { "context": "About screen, 'What VniDrop isn't' list: point about not being sync/backup.", - "targets": [ - "apple" - ], "translations": { "en": "Not a sync or backup service." } }, "about_isnt_title": { "context": "About screen: section heading for the 'What VniDrop isn't' list.", - "targets": [ - "apple" - ], "translations": { "en": "What VniDrop isn’t" } }, "about_license_label": { "context": "About screen: label for the license row.", - "targets": [ - "apple" - ], "translations": { "en": "License" } @@ -181,63 +145,42 @@ }, "about_privacy_capability": { "context": "About screen, Privacy & security list: point that invitations are capabilities to share carefully.", - "targets": [ - "apple" - ], "translations": { "en": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”" } }, "about_privacy_deny": { "context": "About screen, Privacy & security list: point about denying unknown requests by default.", - "targets": [ - "apple" - ], "translations": { "en": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests." } }, "about_privacy_local": { "context": "About screen, Privacy & security list: point about received files staying local and never overwriting.", - "targets": [ - "apple" - ], "translations": { "en": "Received files are saved on your device and never silently overwrite an existing file." } }, "about_privacy_policy_label": { "context": "About screen: label for the privacy policy row.", - "targets": [ - "apple" - ], "translations": { "en": "Privacy policy" } }, "about_privacy_relay": { "context": "About screen, Privacy & security list: point explaining encrypted relays.", - "targets": [ - "apple" - ], "translations": { "en": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files." } }, "about_privacy_title": { "context": "About screen: section heading for the Privacy & security list.", - "targets": [ - "apple" - ], "translations": { "en": "Privacy & security" } }, "about_tagline": { "context": "About screen: short tagline under the app name.", - "targets": [ - "apple" - ], "translations": { "en": "Send files directly. Stay in control of who receives them." } @@ -338,9 +281,6 @@ }, "bug_report_contact_hint": { "context": "Bug report form: placeholder text in the contact email field.", - "targets": [ - "apple" - ], "translations": { "en": "name@example.com" } @@ -365,9 +305,6 @@ }, "bug_report_expected_hint": { "context": "Bug report form: placeholder in the 'what did you expect' field.", - "targets": [ - "apple" - ], "translations": { "en": "Describe what you expected to happen" } @@ -410,9 +347,6 @@ }, "bug_report_steps_hint": { "context": "Bug report form: placeholder in the steps-to-reproduce field.", - "targets": [ - "apple" - ], "translations": { "en": "List the steps to reproduce the issue" } @@ -449,9 +383,6 @@ }, "bug_report_what_hint": { "context": "Bug report form: placeholder in the what-happened field.", - "targets": [ - "apple" - ], "translations": { "en": "Describe what happened" } @@ -974,12 +905,15 @@ }, "progress_sending_to_count": { "context": "Transfer progress label: sending to N receivers. %lld = receiver count.", - "targets": [ - "apple" - ], "translations": { - "en": "Sending to %lld" - } + "en": "Sending to {count}" + }, + "args": [ + { + "name": "count", + "type": "int" + } + ] }, "progress_share_ready": { "context": "Transfer progress label: the share is ready.", @@ -1253,18 +1187,12 @@ }, "send_stop_sharing": { "context": "Transfer details: action to stop sharing a transfer.", - "targets": [ - "apple" - ], "translations": { "en": "Stop sharing" } }, "send_stop_sharing_description": { "context": "Transfer details: confirmation body for stopping sharing.", - "targets": [ - "apple" - ], "translations": { "en": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped." } @@ -1361,99 +1289,66 @@ }, "storage_calculating": { "context": "Settings > Storage: placeholder while a size is being calculated.", - "targets": [ - "apple" - ], "translations": { "en": "Calculating…" } }, "storage_delete_transfers": { "context": "Settings > Storage: button to delete all transfer records.", - "targets": [ - "apple" - ], "translations": { "en": "Delete all transfers" } }, "storage_delete_transfers_description": { "context": "Settings > Storage: confirmation body for deleting all transfer records.", - "targets": [ - "apple" - ], "translations": { "en": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone." } }, "storage_deleting": { "context": "Settings > Storage: progress label while transfers are being deleted.", - "targets": [ - "apple" - ], "translations": { "en": "Deleting…" } }, "storage_footer": { "context": "Settings > Storage: footer explaining how storage is managed.", - "targets": [ - "apple" - ], "translations": { "en": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here." } }, "storage_received_files": { "context": "Settings > Storage: label for the received-files size row.", - "targets": [ - "apple" - ], "translations": { "en": "Received files" } }, "storage_temporary": { "context": "Settings > Storage: label for the temporary-files size row.", - "targets": [ - "apple" - ], "translations": { "en": "Temporary files" } }, "storage_title": { "context": "Settings > Storage: section title.", - "targets": [ - "apple" - ], "translations": { "en": "Storage" } }, "storage_total": { "context": "Settings > Storage: label for the total-size row.", - "targets": [ - "apple" - ], "translations": { "en": "Total" } }, "storage_transfer_data": { "context": "Settings > Storage: label for the transfer-engine data size row.", - "targets": [ - "apple" - ], "translations": { "en": "Transfer data" } }, "storage_transfers_deleted": { "context": "Settings > Storage: toast confirming all transfers were deleted.", - "targets": [ - "apple" - ], "translations": { "en": "All transfers deleted" } diff --git a/shared/src/commonMain/composeResources/values/strings.xml b/shared/src/commonMain/composeResources/values/strings.xml index d8b7311..e4e00e1 100644 --- a/shared/src/commonMain/composeResources/values/strings.xml +++ b/shared/src/commonMain/composeResources/values/strings.xml @@ -1,7 +1,26 @@ Report a bug + VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done. + A direct device-to-device transfer — your files go straight to the receiver. + Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash. + You decide who receives: approve each request, or open a transfer to anyone holding the invitation. + Account-free — there’s nothing to sign up for. + Open source, released under the Apache 2.0 license. + What VniDrop is + Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer. + Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby. + Not a sync or backup service. + What VniDrop isn’t + License Privacy policy + Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.” + Deny by default — VniDrop serves only the content of an active share and rejects unknown requests. + Received files are saved on your device and never silently overwrite an existing file. + Privacy policy + If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files. + Privacy & security + Send files directly. Stay in control of who receives them. About Match this device’s light or dark appearance. Dark mode @@ -14,20 +33,24 @@ %1$d requests waiting %1$s wants to receive “%2$s”. Battery level + name@example.com Contact email (optional) Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted). Device information + Describe what you expected to happen What did you expect? Include recent logs Helps us diagnose the issue. Sensitive values are redacted before sending. Log attachment size Please describe what you expected. Please describe what happened. + List the steps to reproduce the issue Steps to reproduce (optional) Submit report Could not submit the bug report. Try again later. Thanks — your bug report was recorded. Submitting… + Describe what happened What happened? Approve Back @@ -114,6 +137,7 @@ Requesting access Saving Sending + Sending to %1$d Ready to share Working… Choose the invitation method available to you. @@ -157,6 +181,8 @@ New transfer Review transfer %1$d files selected + Stop sharing + This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped. Transfers you’re sharing from this device. Send Transfer created. @@ -172,6 +198,17 @@ Preparing Receiving Stopped + Calculating… + Delete all transfers + This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone. + Deleting… + Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here. + Received files + Temporary files + Storage + Total + Transfer data + All transfers deleted See important updates for this transfer Activity “%1$s” will stop being shared and its transfer history will be removed from this device. From 91573f381a01105b78d34eeca5d52205c94e85e7 Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 20 Jul 2026 10:34:52 +0200 Subject: [PATCH 04/13] feat(l10n): add French translations Translate all 253 user-facing strings to French (formal register), including the transfer_file_count plural. Generates values-fr/strings.xml for KMP and fr localizations in the Apple catalog (marked needs_review). --- apple/VniDrop/Resources/Localizable.xcstrings | 1530 +++++++++++++++++ localization/strings.json | 763 +++++--- .../composeResources/values-fr/strings.xml | 257 +++ 3 files changed, 2297 insertions(+), 253 deletions(-) create mode 100644 shared/src/commonMain/composeResources/values-fr/strings.xml diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index bde06f0..8f943bb 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -14,6 +14,12 @@ "state": "translated", "value": "%1$@ %2$@ · %3$@" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } } } }, @@ -26,6 +32,12 @@ "state": "translated", "value": "%1$@ · %2$@" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } } } }, @@ -42,6 +54,12 @@ "state": "translated", "value": "Report a bug" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Signaler un bug" + } } } }, @@ -54,6 +72,12 @@ "state": "translated", "value": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop transfère fichiers et dossiers directement d’un appareil à un autre sur le réseau, sans les téléverser vers un service d’hébergement. Aucun compte à créer, et aucune copie de votre transfert ne reste dans le cloud une fois terminé." + } } } }, @@ -66,6 +90,12 @@ "state": "translated", "value": "A direct device-to-device transfer — your files go straight to the receiver." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Un transfert direct d’appareil à appareil — vos fichiers vont droit au destinataire." + } } } }, @@ -78,6 +108,12 @@ "state": "translated", "value": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Les connexions sont authentifiées et chiffrées de bout en bout (via Iroh), et les fichiers entrants sont vérifiés par leur empreinte de contenu." + } } } }, @@ -90,6 +126,12 @@ "state": "translated", "value": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vous décidez qui reçoit : approuvez chaque demande, ou ouvrez un transfert à toute personne disposant de l’invitation." + } } } }, @@ -102,6 +144,12 @@ "state": "translated", "value": "Account-free — there’s nothing to sign up for." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Sans compte — il n’y a rien à créer." + } } } }, @@ -114,6 +162,12 @@ "state": "translated", "value": "Open source, released under the Apache 2.0 license." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Open source, publié sous licence Apache 2.0." + } } } }, @@ -126,6 +180,12 @@ "state": "translated", "value": "What VniDrop is" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ce qu’est VniDrop" + } } } }, @@ -138,6 +198,12 @@ "state": "translated", "value": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Pas un stockage cloud — aucun serveur ne détient vos fichiers, et rien n’attend dans le cloud après un transfert." + } } } }, @@ -150,6 +216,12 @@ "state": "translated", "value": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Pas une diffusion publique — une invitation est un lien d’accès privé, pas une annonce à tout le voisinage." + } } } }, @@ -162,6 +234,12 @@ "state": "translated", "value": "Not a sync or backup service." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Pas un service de synchronisation ou de sauvegarde." + } } } }, @@ -174,6 +252,12 @@ "state": "translated", "value": "What VniDrop isn’t" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ce que VniDrop n’est pas" + } } } }, @@ -186,6 +270,12 @@ "state": "translated", "value": "License" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Licence" + } } } }, @@ -198,6 +288,12 @@ "state": "translated", "value": "Privacy policy" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Politique de confidentialité" + } } } }, @@ -210,6 +306,12 @@ "state": "translated", "value": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Les invitations sont des clés d’accès. Traitez un QR code, un tag NFC ou un fichier .vnd comme un lien d’accès privé et ne le partagez qu’avec les personnes visées — en particulier avec « Toute personne disposant de ce transfert »." + } } } }, @@ -222,6 +324,12 @@ "state": "translated", "value": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Refus par défaut — VniDrop ne sert que le contenu d’un partage actif et rejette les demandes inconnues." + } } } }, @@ -234,6 +342,12 @@ "state": "translated", "value": "Received files are saved on your device and never silently overwrite an existing file." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Les fichiers reçus sont enregistrés sur votre appareil et n’écrasent jamais un fichier existant." + } } } }, @@ -246,6 +360,12 @@ "state": "translated", "value": "Privacy policy" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Politique de confidentialité" + } } } }, @@ -258,6 +378,12 @@ "state": "translated", "value": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Si deux appareils ne peuvent pas se connecter directement, la connexion chiffrée peut être relayée. Les relais ne transmettent que des paquets chiffrés ; ils ne stockent jamais vos fichiers." + } } } }, @@ -270,6 +396,12 @@ "state": "translated", "value": "Privacy & security" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Confidentialité et sécurité" + } } } }, @@ -282,6 +414,12 @@ "state": "translated", "value": "Send files directly. Stay in control of who receives them." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit." + } } } }, @@ -294,6 +432,12 @@ "state": "translated", "value": "About" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "À propos" + } } } }, @@ -306,6 +450,12 @@ "state": "translated", "value": "Match this device’s light or dark appearance." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Suivre l’apparence claire ou sombre de cet appareil." + } } } }, @@ -318,6 +468,12 @@ "state": "translated", "value": "Dark mode" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Mode sombre" + } } } }, @@ -330,6 +486,12 @@ "state": "translated", "value": "Light mode" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Mode clair" + } } } }, @@ -342,6 +504,12 @@ "state": "translated", "value": "System" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Système" + } } } }, @@ -354,6 +522,12 @@ "state": "translated", "value": "Appearance" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Apparence" + } } } }, @@ -366,6 +540,12 @@ "state": "translated", "value": "Receive request" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demande de réception" + } } } }, @@ -378,6 +558,12 @@ "state": "translated", "value": "Device ID: %1$@" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Identifiant de l’appareil : %1$@" + } } } }, @@ -390,6 +576,12 @@ "state": "translated", "value": "A nearby device" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Un appareil à proximité" + } } } }, @@ -402,6 +594,12 @@ "state": "translated", "value": "%1$d requests waiting" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d demandes en attente" + } } } }, @@ -414,6 +612,12 @@ "state": "translated", "value": "%1$@ wants to receive “%2$@”." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ souhaite recevoir « %2$@ »." + } } } }, @@ -426,6 +630,12 @@ "state": "translated", "value": "Battery level" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Niveau de batterie" + } } } }, @@ -438,6 +648,12 @@ "state": "translated", "value": "name@example.com" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "nom@exemple.com" + } } } }, @@ -450,6 +666,12 @@ "state": "translated", "value": "Contact email (optional)" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "E-mail de contact (facultatif)" + } } } }, @@ -462,6 +684,12 @@ "state": "translated", "value": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted)." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Dites-nous ce qui s’est passé. Nous joignons les infos de l’appareil et, en option, les journaux récents (valeurs sensibles masquées)." + } } } }, @@ -474,6 +702,12 @@ "state": "translated", "value": "Device information" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Informations sur l’appareil" + } } } }, @@ -486,6 +720,12 @@ "state": "translated", "value": "Describe what you expected to happen" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Décrivez ce à quoi vous vous attendiez" + } } } }, @@ -498,6 +738,12 @@ "state": "translated", "value": "What did you expect?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "À quoi vous attendiez-vous ?" + } } } }, @@ -510,6 +756,12 @@ "state": "translated", "value": "Include recent logs" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Inclure les journaux récents" + } } } }, @@ -522,6 +774,12 @@ "state": "translated", "value": "Helps us diagnose the issue. Sensitive values are redacted before sending." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nous aide à diagnostiquer le problème. Les valeurs sensibles sont masquées avant l’envoi." + } } } }, @@ -534,6 +792,12 @@ "state": "translated", "value": "Log attachment size" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Taille de la pièce jointe des journaux" + } } } }, @@ -546,6 +810,12 @@ "state": "translated", "value": "Please describe what you expected." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Veuillez décrire ce à quoi vous vous attendiez." + } } } }, @@ -558,6 +828,12 @@ "state": "translated", "value": "Please describe what happened." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Veuillez décrire ce qui s’est passé." + } } } }, @@ -570,6 +846,12 @@ "state": "translated", "value": "List the steps to reproduce the issue" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Listez les étapes pour reproduire le problème" + } } } }, @@ -582,6 +864,12 @@ "state": "translated", "value": "Steps to reproduce (optional)" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Étapes pour reproduire (facultatif)" + } } } }, @@ -594,6 +882,12 @@ "state": "translated", "value": "Submit report" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoyer le rapport" + } } } }, @@ -606,6 +900,12 @@ "state": "translated", "value": "Could not submit the bug report. Try again later." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Impossible d’envoyer le rapport de bug. Réessayez plus tard." + } } } }, @@ -618,6 +918,12 @@ "state": "translated", "value": "Thanks — your bug report was recorded." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Merci — votre rapport de bug a été enregistré." + } } } }, @@ -630,6 +936,12 @@ "state": "translated", "value": "Submitting…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoi…" + } } } }, @@ -642,6 +954,12 @@ "state": "translated", "value": "Describe what happened" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Décrivez ce qui s’est passé" + } } } }, @@ -654,6 +972,12 @@ "state": "translated", "value": "What happened?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Que s’est-il passé ?" + } } } }, @@ -666,6 +990,12 @@ "state": "translated", "value": "Approve" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Approuver" + } } } }, @@ -678,6 +1008,12 @@ "state": "translated", "value": "Back" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Retour" + } } } }, @@ -690,6 +1026,12 @@ "state": "translated", "value": "Cancel" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Annuler" + } } } }, @@ -702,6 +1044,12 @@ "state": "translated", "value": "Cancel" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Annuler" + } } } }, @@ -714,6 +1062,12 @@ "state": "translated", "value": "Change files" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Modifier les fichiers" + } } } }, @@ -726,6 +1080,12 @@ "state": "translated", "value": "Choose files" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Choisir des fichiers" + } } } }, @@ -738,6 +1098,12 @@ "state": "translated", "value": "Choose folder" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Choisir un dossier" + } } } }, @@ -750,6 +1116,12 @@ "state": "translated", "value": "Clear" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Effacer" + } } } }, @@ -762,6 +1134,12 @@ "state": "translated", "value": "Close" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Fermer" + } } } }, @@ -774,6 +1152,12 @@ "state": "translated", "value": "New transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nouveau transfert" + } } } }, @@ -786,6 +1170,12 @@ "state": "translated", "value": "Delete transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Supprimer le transfert" + } } } }, @@ -798,6 +1188,12 @@ "state": "translated", "value": "Save .vnd file" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Enregistrer le fichier .vnd" + } } } }, @@ -810,6 +1206,12 @@ "state": "translated", "value": "Share invitation" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Partager l’invitation" + } } } }, @@ -822,6 +1224,12 @@ "state": "translated", "value": "Open Settings" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ouvrir les Réglages" + } } } }, @@ -834,6 +1242,12 @@ "state": "translated", "value": "Receive" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Recevoir" + } } } }, @@ -846,6 +1260,12 @@ "state": "translated", "value": "Start receiving" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Commencer à recevoir" + } } } }, @@ -858,6 +1278,12 @@ "state": "translated", "value": "Refuse" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Refuser" + } } } }, @@ -870,6 +1296,12 @@ "state": "translated", "value": "Remove file" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Retirer le fichier" + } } } }, @@ -882,6 +1314,12 @@ "state": "translated", "value": "Use default" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Valeur par défaut" + } } } }, @@ -894,6 +1332,12 @@ "state": "translated", "value": "Retry" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réessayer" + } } } }, @@ -906,6 +1350,12 @@ "state": "translated", "value": "Start sharing" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Commencer le partage" + } } } }, @@ -918,6 +1368,12 @@ "state": "translated", "value": "Preparing transfer…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation du transfert…" + } } } }, @@ -930,6 +1386,12 @@ "state": "translated", "value": "Show in Files" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Afficher dans Fichiers" + } } } }, @@ -942,6 +1404,12 @@ "state": "translated", "value": "Write to NFC tag" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Écrire sur un tag NFC" + } } } }, @@ -954,6 +1422,12 @@ "state": "translated", "value": "Device model" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Modèle de l’appareil" + } } } }, @@ -966,6 +1440,12 @@ "state": "translated", "value": "Device name" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom de l’appareil" + } } } }, @@ -978,6 +1458,12 @@ "state": "translated", "value": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoyer des rapports de plantage et des événements d’utilisation anonymes pour nous aider à améliorer VniDrop. Vous pouvez désactiver cela à tout moment. Les invitations, chemins de fichiers et contenus de transfert ne sont jamais inclus." + } } } }, @@ -990,6 +1476,12 @@ "state": "translated", "value": "Diagnostics sharing is off." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Le partage des diagnostics est désactivé." + } } } }, @@ -1002,6 +1494,12 @@ "state": "translated", "value": "Diagnostics sharing is on." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Le partage des diagnostics est activé." + } } } }, @@ -1014,6 +1512,12 @@ "state": "translated", "value": "Share diagnostics" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Partager les diagnostics" + } } } }, @@ -1026,6 +1530,12 @@ "state": "translated", "value": "Camera access is required to scan a QR code." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "L’accès à la caméra est nécessaire pour scanner un QR code." + } } } }, @@ -1038,6 +1548,12 @@ "state": "translated", "value": "Could not load device information." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Impossible de charger les informations de l’appareil." + } } } }, @@ -1050,6 +1566,12 @@ "state": "translated", "value": "VniDrop could not access the selected files or folder. Check permissions and try again." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop n’a pas pu accéder aux fichiers ou au dossier sélectionnés. Vérifiez les autorisations et réessayez." + } } } }, @@ -1062,6 +1584,12 @@ "state": "translated", "value": "Something went wrong. Try again." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Une erreur est survenue. Réessayez." + } } } }, @@ -1074,6 +1602,12 @@ "state": "translated", "value": "VniDrop could not finish starting up. Close the app and try again." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop n’a pas pu terminer son démarrage. Fermez l’app et réessayez." + } } } }, @@ -1086,6 +1620,12 @@ "state": "translated", "value": "This invitation could not be read. Ask the sender for a new one." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Cette invitation n’a pas pu être lue. Demandez-en une nouvelle à l’expéditeur." + } } } }, @@ -1098,6 +1638,12 @@ "state": "translated", "value": "That invitation is empty. Try opening it again." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Cette invitation est vide. Essayez de l’ouvrir à nouveau." + } } } }, @@ -1110,6 +1656,12 @@ "state": "translated", "value": "The native VniDrop library is missing from this build." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "La bibliothèque native de VniDrop est absente de cette version." + } } } }, @@ -1122,6 +1674,12 @@ "state": "translated", "value": "This NFC tag could not be used. Try another tag." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ce tag NFC n’a pas pu être utilisé. Essayez-en un autre." + } } } }, @@ -1134,6 +1692,12 @@ "state": "translated", "value": "The sender has not approved this transfer, or it was refused." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "L’expéditeur n’a pas approuvé ce transfert, ou il a été refusé." + } } } }, @@ -1146,6 +1710,12 @@ "state": "translated", "value": "VniDrop could not save transfer data on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop n’a pas pu enregistrer les données de transfert sur cet appareil." + } } } }, @@ -1158,6 +1728,12 @@ "state": "translated", "value": "Could not open the selected item. Try choosing it again." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Impossible d’ouvrir l’élément sélectionné. Essayez de le choisir à nouveau." + } } } }, @@ -1170,6 +1746,12 @@ "state": "translated", "value": "Select at least one item to share." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Sélectionnez au moins un élément à partager." + } } } }, @@ -1182,6 +1764,12 @@ "state": "translated", "value": "VniDrop could not open its network sockets on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop n’a pas pu ouvrir ses sockets réseau sur cet appareil." + } } } }, @@ -1194,6 +1782,12 @@ "state": "translated", "value": "VniDrop is still starting. Open the invitation again in a moment." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop démarre encore. Rouvrez l’invitation dans un instant." + } } } }, @@ -1206,6 +1800,12 @@ "state": "translated", "value": "The transfer could not be completed. Check your connection and try again." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Le transfert n’a pas pu être terminé. Vérifiez votre connexion et réessayez." + } } } }, @@ -1218,6 +1818,12 @@ "state": "translated", "value": "Receiver name" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom du destinataire" + } } } }, @@ -1230,6 +1836,12 @@ "state": "translated", "value": "Sender name" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom de l’expéditeur" + } } } }, @@ -1242,6 +1854,12 @@ "state": "translated", "value": "Transfer name" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom du transfert" + } } } }, @@ -1254,6 +1872,12 @@ "state": "translated", "value": "Display name" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom d’affichage" + } } } }, @@ -1266,6 +1890,12 @@ "state": "translated", "value": "Permission needed" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Autorisation requise" + } } } }, @@ -1278,6 +1908,12 @@ "state": "translated", "value": "Unavailable" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Indisponible" + } } } }, @@ -1290,6 +1926,12 @@ "state": "translated", "value": "Checking folder…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vérification du dossier…" + } } } }, @@ -1302,6 +1944,12 @@ "state": "translated", "value": "Ready" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Prêt" + } } } }, @@ -1314,6 +1962,12 @@ "state": "translated", "value": "Files" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Fichiers" + } } } }, @@ -1326,6 +1980,12 @@ "state": "translated", "value": "Size" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Taille" + } } } }, @@ -1338,6 +1998,12 @@ "state": "translated", "value": "Status" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Statut" + } } } }, @@ -1350,6 +2016,12 @@ "state": "translated", "value": "Receive" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Recevoir" + } } } }, @@ -1362,6 +2034,12 @@ "state": "translated", "value": "Send" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoyer" + } } } }, @@ -1374,6 +2052,12 @@ "state": "translated", "value": "Settings" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réglages" + } } } }, @@ -1386,6 +2070,12 @@ "state": "translated", "value": "Network" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réseau" + } } } }, @@ -1398,6 +2088,12 @@ "state": "translated", "value": "Get notified about new receive requests while VniDrop is in the background." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Soyez averti des nouvelles demandes de réception lorsque VniDrop est en arrière-plan." + } } } }, @@ -1410,6 +2106,12 @@ "state": "translated", "value": "Notifications enabled." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Notifications activées." + } } } }, @@ -1422,6 +2124,12 @@ "state": "translated", "value": "Allow notifications" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Autoriser les notifications" + } } } }, @@ -1434,6 +2142,12 @@ "state": "translated", "value": "Notifications are turned off for VniDrop. You can enable them in Settings." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Les notifications sont désactivées pour VniDrop. Vous pouvez les activer dans les Réglages." + } } } }, @@ -1446,6 +2160,12 @@ "state": "translated", "value": "Could not open notification settings." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Impossible d’ouvrir les réglages de notifications." + } } } }, @@ -1458,6 +2178,12 @@ "state": "translated", "value": "Notifications" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Notifications" + } } } }, @@ -1470,6 +2196,12 @@ "state": "translated", "value": "Notifications are not available on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Les notifications ne sont pas disponibles sur cet appareil." + } } } }, @@ -1482,6 +2214,12 @@ "state": "translated", "value": "Operating system" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Système d’exploitation" + } } } }, @@ -1494,6 +2232,12 @@ "state": "translated", "value": "Save received transfers to" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Enregistrer les transferts reçus dans" + } } } }, @@ -1506,6 +2250,12 @@ "state": "translated", "value": "Preferences" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préférences" + } } } }, @@ -1518,6 +2268,12 @@ "state": "translated", "value": "Cancelled" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Annulé" + } } } }, @@ -1530,6 +2286,12 @@ "state": "translated", "value": "Completed" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Terminé" + } } } }, @@ -1542,6 +2304,12 @@ "state": "translated", "value": "Connected" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Connecté" + } } } }, @@ -1554,6 +2322,12 @@ "state": "translated", "value": "Connecting" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Connexion" + } } } }, @@ -1566,6 +2340,12 @@ "state": "translated", "value": "Downloading" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Téléchargement" + } } } }, @@ -1578,6 +2358,12 @@ "state": "translated", "value": "Failed" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Échec" + } } } }, @@ -1590,6 +2376,12 @@ "state": "translated", "value": "Getting ready" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation" + } } } }, @@ -1602,6 +2394,12 @@ "state": "translated", "value": "Transfer interrupted" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert interrompu" + } } } }, @@ -1614,6 +2412,12 @@ "state": "translated", "value": "Preparing" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation" + } } } }, @@ -1626,6 +2430,12 @@ "state": "translated", "value": "Ready" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Prêt" + } } } }, @@ -1638,6 +2448,12 @@ "state": "translated", "value": "Receiving" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réception" + } } } }, @@ -1650,6 +2466,12 @@ "state": "translated", "value": "Requesting access" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demande d’accès" + } } } }, @@ -1662,6 +2484,12 @@ "state": "translated", "value": "Saving" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Enregistrement" + } } } }, @@ -1674,6 +2502,12 @@ "state": "translated", "value": "Sending" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoi" + } } } }, @@ -1686,6 +2520,12 @@ "state": "translated", "value": "Sending to %1$d" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoi à %1$d" + } } } }, @@ -1698,6 +2538,12 @@ "state": "translated", "value": "Ready to share" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Prêt à partager" + } } } }, @@ -1710,6 +2556,12 @@ "state": "translated", "value": "Working…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "En cours…" + } } } }, @@ -1722,6 +2574,12 @@ "state": "translated", "value": "Choose the invitation method available to you." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Choisissez la méthode d’invitation à votre disposition." + } } } }, @@ -1734,6 +2592,12 @@ "state": "translated", "value": "How would you like to connect?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Comment souhaitez-vous vous connecter ?" + } } } }, @@ -1746,6 +2610,12 @@ "state": "translated", "value": "Clear history" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Effacer l’historique" + } } } }, @@ -1758,6 +2628,12 @@ "state": "translated", "value": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Toutes les réceptions terminées, échouées et annulées seront retirées de l’historique de VniDrop. Les fichiers téléchargés resteront sur cet appareil." + } } } }, @@ -1770,6 +2646,12 @@ "state": "translated", "value": "Clear receive history?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Effacer l’historique de réception ?" + } } } }, @@ -1782,6 +2664,12 @@ "state": "translated", "value": "Transfer received." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert reçu." + } } } }, @@ -1794,6 +2682,12 @@ "state": "translated", "value": "“%1$@” will be removed from VniDrop’s history. The downloaded file will remain on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "« %1$@ » sera retiré de l’historique de VniDrop. Le fichier téléchargé restera sur cet appareil." + } } } }, @@ -1806,6 +2700,12 @@ "state": "translated", "value": "Delete from receive history" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Supprimer de l’historique de réception" + } } } }, @@ -1818,6 +2718,12 @@ "state": "translated", "value": "Remove from history?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Retirer de l’historique ?" + } } } }, @@ -1830,6 +2736,12 @@ "state": "translated", "value": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ouvrez une invitation VniDrop, scannez un QR code ou approchez un tag NFC." + } } } }, @@ -1842,6 +2754,12 @@ "state": "translated", "value": "Nothing received yet" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Rien reçu pour l’instant" + } } } }, @@ -1854,6 +2772,12 @@ "state": "translated", "value": "Receive history cleared." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Historique de réception effacé." + } } } }, @@ -1866,6 +2790,12 @@ "state": "translated", "value": "History" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Historique" + } } } }, @@ -1878,6 +2808,12 @@ "state": "translated", "value": "Open a .vnd invitation" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ouvrir une invitation .vnd" + } } } }, @@ -1890,6 +2826,12 @@ "state": "translated", "value": "Choose an invitation saved or shared to this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Choisissez une invitation enregistrée ou partagée sur cet appareil." + } } } }, @@ -1902,6 +2844,12 @@ "state": "translated", "value": "Read NFC tag" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Lire un tag NFC" + } } } }, @@ -1914,6 +2862,12 @@ "state": "translated", "value": "Hold this device near the sender’s invitation tag." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Approchez cet appareil du tag d’invitation de l’expéditeur." + } } } }, @@ -1926,6 +2880,12 @@ "state": "translated", "value": "Scan QR code" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Scanner un QR code" + } } } }, @@ -1938,6 +2898,12 @@ "state": "translated", "value": "Use the camera to scan the sender’s VniDrop code." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Utilisez la caméra pour scanner le code VniDrop de l’expéditeur." + } } } }, @@ -1950,6 +2916,12 @@ "state": "translated", "value": "Transfers you’ve received on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transferts que vous avez reçus sur cet appareil." + } } } }, @@ -1962,6 +2934,12 @@ "state": "translated", "value": "Hold near the NFC tag…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Approchez du tag NFC…" + } } } }, @@ -1974,6 +2952,12 @@ "state": "translated", "value": "Couldn’t open VniDrop in Files." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Impossible d’ouvrir VniDrop dans Fichiers." + } } } }, @@ -1986,6 +2970,12 @@ "state": "translated", "value": "Review transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vérifier le transfert" + } } } }, @@ -1998,6 +2988,12 @@ "state": "translated", "value": "Receive" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Recevoir" + } } } }, @@ -2010,6 +3006,12 @@ "state": "translated", "value": "VniDrop transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert VniDrop" + } } } }, @@ -2022,6 +3024,12 @@ "state": "translated", "value": "Anyone with this transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Toute personne disposant de ce transfert" + } } } }, @@ -2034,6 +3042,12 @@ "state": "translated", "value": "No approval is required. Only use this for items you are comfortable sharing." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Aucune approbation requise. À n’utiliser que pour des éléments que vous êtes à l’aise de partager." + } } } }, @@ -2046,6 +3060,12 @@ "state": "translated", "value": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Toute personne disposant de l’invitation peut télécharger jusqu’à ce que vous arrêtiez le partage. Ne l’utilisez pas pour des éléments privés ou sensibles." + } } } }, @@ -2058,6 +3078,12 @@ "state": "translated", "value": "Ask before each download" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demander avant chaque téléchargement" + } } } }, @@ -2070,6 +3096,12 @@ "state": "translated", "value": "You approve or refuse every new receiver." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vous approuvez ou refusez chaque nouveau destinataire." + } } } }, @@ -2082,6 +3114,12 @@ "state": "translated", "value": "Who can receive it?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Qui peut le recevoir ?" + } } } }, @@ -2094,6 +3132,12 @@ "state": "translated", "value": "Select files or a folder from this device. You can review the selection before creating the transfer." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Sélectionnez des fichiers ou un dossier sur cet appareil. Vous pourrez vérifier la sélection avant de créer le transfert." + } } } }, @@ -2106,6 +3150,12 @@ "state": "translated", "value": "Choose what to share" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Choisissez quoi partager" + } } } }, @@ -2118,6 +3168,12 @@ "state": "translated", "value": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Créez un transfert, décidez qui peut le recevoir, puis invitez-les avec un QR code, un tag NFC ou un fichier d’invitation." + } } } }, @@ -2130,6 +3186,12 @@ "state": "translated", "value": "Nothing shared yet" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Rien partagé pour l’instant" + } } } }, @@ -2142,6 +3204,12 @@ "state": "translated", "value": "Size unavailable" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Taille indisponible" + } } } }, @@ -2154,6 +3222,12 @@ "state": "translated", "value": "Folder" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Dossier" + } } } }, @@ -2166,6 +3240,12 @@ "state": "translated", "value": "Create a new transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Créer un nouveau transfert" + } } } }, @@ -2178,6 +3258,12 @@ "state": "translated", "value": "New transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nouveau transfert" + } } } }, @@ -2190,6 +3276,12 @@ "state": "translated", "value": "Review transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vérifier le transfert" + } } } }, @@ -2202,6 +3294,12 @@ "state": "translated", "value": "%1$d files selected" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d fichiers sélectionnés" + } } } }, @@ -2214,6 +3312,12 @@ "state": "translated", "value": "Stop sharing" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Arrêter le partage" + } } } }, @@ -2226,6 +3330,12 @@ "state": "translated", "value": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Cela arrête le transfert et interrompt toute personne en train de le télécharger. Il reste dans votre historique en tant qu’Arrêté." + } } } }, @@ -2238,6 +3348,12 @@ "state": "translated", "value": "Transfers you’re sharing from this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transferts que vous partagez depuis cet appareil." + } } } }, @@ -2250,6 +3366,12 @@ "state": "translated", "value": "Send" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoyer" + } } } }, @@ -2262,6 +3384,12 @@ "state": "translated", "value": "Transfer created." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert créé." + } } } }, @@ -2274,6 +3402,12 @@ "state": "translated", "value": "Transfer details" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Détails du transfert" + } } } }, @@ -2286,6 +3420,12 @@ "state": "translated", "value": "Your transfers" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vos transferts" + } } } }, @@ -2298,6 +3438,12 @@ "state": "translated", "value": "Your name, where transfers are saved, appearance, and notifications." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Votre nom, l’emplacement d’enregistrement des transferts, l’apparence et les notifications." + } } } }, @@ -2310,6 +3456,12 @@ "state": "translated", "value": "Settings" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réglages" + } } } }, @@ -2322,6 +3474,12 @@ "state": "translated", "value": "Dismiss" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ignorer" + } } } }, @@ -2334,6 +3492,12 @@ "state": "translated", "value": "Available" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Disponible" + } } } }, @@ -2346,6 +3510,12 @@ "state": "translated", "value": "Cancelled" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Annulé" + } } } }, @@ -2358,6 +3528,12 @@ "state": "translated", "value": "Completed" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Terminé" + } } } }, @@ -2370,6 +3546,12 @@ "state": "translated", "value": "Failed" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Échec" + } } } }, @@ -2382,6 +3564,12 @@ "state": "translated", "value": "Preparing" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation" + } } } }, @@ -2394,6 +3582,12 @@ "state": "translated", "value": "Receiving" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réception" + } } } }, @@ -2406,6 +3600,12 @@ "state": "translated", "value": "Stopped" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Arrêté" + } } } }, @@ -2418,6 +3618,12 @@ "state": "translated", "value": "Calculating…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Calcul…" + } } } }, @@ -2430,6 +3636,12 @@ "state": "translated", "value": "Delete all transfers" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Supprimer tous les transferts" + } } } }, @@ -2442,6 +3654,12 @@ "state": "translated", "value": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Cela efface tous les enregistrements de transferts envoyés et reçus de votre historique. Vos fichiers reçus ne sont pas supprimés. Remarque : le moteur de transfert conserve son contenu stocké, donc les données de transfert peuvent ne pas diminuer. Cette action est irréversible." + } } } }, @@ -2454,6 +3672,12 @@ "state": "translated", "value": "Deleting…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Suppression…" + } } } }, @@ -2466,6 +3690,12 @@ "state": "translated", "value": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Les données de transfert sont gérées par le moteur de transfert — votre historique ainsi que le contenu des fichiers que vous avez partagés. Le bouton ci-dessous efface vos enregistrements de transferts ; le moteur conserve son contenu stocké, donc cette valeur peut ne pas baisser. Les fichiers reçus sont vos fichiers téléchargés et ne sont jamais supprimés ici." + } } } }, @@ -2478,6 +3708,12 @@ "state": "translated", "value": "Received files" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Fichiers reçus" + } } } }, @@ -2490,6 +3726,12 @@ "state": "translated", "value": "Temporary files" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Fichiers temporaires" + } } } }, @@ -2502,6 +3744,12 @@ "state": "translated", "value": "Storage" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Stockage" + } } } }, @@ -2514,6 +3762,12 @@ "state": "translated", "value": "Total" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Total" + } } } }, @@ -2526,6 +3780,12 @@ "state": "translated", "value": "Transfer data" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Données de transfert" + } } } }, @@ -2538,6 +3798,12 @@ "state": "translated", "value": "All transfers deleted" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Tous les transferts supprimés" + } } } }, @@ -2550,6 +3816,12 @@ "state": "translated", "value": "See important updates for this transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Consultez les mises à jour importantes de ce transfert" + } } } }, @@ -2562,6 +3834,12 @@ "state": "translated", "value": "Activity" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Activité" + } } } }, @@ -2574,6 +3852,12 @@ "state": "translated", "value": "“%1$@” will stop being shared and its transfer history will be removed from this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "« %1$@ » cessera d’être partagé et son historique de transfert sera retiré de cet appareil." + } } } }, @@ -2586,6 +3870,12 @@ "state": "translated", "value": "Delete transfer?" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Supprimer le transfert ?" + } } } }, @@ -2598,6 +3888,12 @@ "state": "translated", "value": "Transfer deleted." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert supprimé." + } } } }, @@ -2610,6 +3906,12 @@ "state": "translated", "value": "Deleting…" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Suppression…" + } } } }, @@ -2622,6 +3924,12 @@ "state": "translated", "value": "Transfer details" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Détails du transfert" + } } } }, @@ -2634,6 +3942,12 @@ "state": "translated", "value": "Receiver access approved" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Accès du destinataire approuvé" + } } } }, @@ -2646,6 +3960,12 @@ "state": "translated", "value": "A receiver completed the transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinataire a terminé le transfert" + } } } }, @@ -2658,6 +3978,12 @@ "state": "translated", "value": "Connecting to sender" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Connexion à l’expéditeur" + } } } }, @@ -2670,6 +3996,12 @@ "state": "translated", "value": "Downloading" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Téléchargement" + } } } }, @@ -2682,6 +4014,12 @@ "state": "translated", "value": "The transfer encountered a problem" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Le transfert a rencontré un problème" + } } } }, @@ -2694,6 +4032,12 @@ "state": "translated", "value": "Preparing your transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation de votre transfert" + } } } }, @@ -2706,6 +4050,12 @@ "state": "translated", "value": "Ready to share" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Prêt à partager" + } } } }, @@ -2718,6 +4068,12 @@ "state": "translated", "value": "Receiver access refused" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Accès du destinataire refusé" + } } } }, @@ -2730,6 +4086,12 @@ "state": "translated", "value": "A receiver requested access" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinataire a demandé l’accès" + } } } }, @@ -2742,6 +4104,12 @@ "state": "translated", "value": "Saving" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Enregistrement" + } } } }, @@ -2754,6 +4122,12 @@ "state": "translated", "value": "Sharing stopped" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Partage arrêté" + } } } }, @@ -2766,6 +4140,12 @@ "state": "translated", "value": "Transfer updated" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert mis à jour" + } } } }, @@ -2790,6 +4170,24 @@ } } } + }, + "fr": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d fichier" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d fichiers" + } + } + } + } } } }, @@ -2802,6 +4200,12 @@ "state": "translated", "value": "Invitation saved." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Invitation enregistrée." + } } } }, @@ -2814,6 +4218,12 @@ "state": "translated", "value": "Nearby device" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Appareil à proximité" + } } } }, @@ -2826,6 +4236,12 @@ "state": "translated", "value": "NFC tag writing is not available on this device." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "L’écriture de tag NFC n’est pas disponible sur cet appareil." + } } } }, @@ -2838,6 +4254,12 @@ "state": "translated", "value": "Hold your device near a writable NFC tag." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Approchez votre appareil d’un tag NFC inscriptible." + } } } }, @@ -2850,6 +4272,12 @@ "state": "translated", "value": "Invitation written to the NFC tag." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Invitation écrite sur le tag NFC." + } } } }, @@ -2862,6 +4290,12 @@ "state": "translated", "value": "There is no activity to show yet." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Aucune activité à afficher pour l’instant." + } } } }, @@ -2874,6 +4308,12 @@ "state": "translated", "value": "Nobody has requested this transfer yet." } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Personne n’a encore demandé ce transfert." + } } } }, @@ -2886,6 +4326,12 @@ "state": "translated", "value": "Approved — waiting for completion" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Approuvé — en attente de la fin" + } } } }, @@ -2898,6 +4344,12 @@ "state": "translated", "value": "Received successfully" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Reçu avec succès" + } } } }, @@ -2910,6 +4362,12 @@ "state": "translated", "value": "Request expired" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demande expirée" + } } } }, @@ -2922,6 +4380,12 @@ "state": "translated", "value": "Request refused" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demande refusée" + } } } }, @@ -2934,6 +4398,12 @@ "state": "translated", "value": "Waiting for your approval" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "En attente de votre approbation" + } } } }, @@ -2946,6 +4416,12 @@ "state": "translated", "value": "Status unavailable" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Statut indisponible" + } } } }, @@ -2958,6 +4434,12 @@ "state": "translated", "value": "%1$d completed" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d terminés" + } } } }, @@ -2970,6 +4452,12 @@ "state": "translated", "value": "Requests, approvals, and completed deliveries" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demandes, approbations et livraisons terminées" + } } } }, @@ -2982,6 +4470,12 @@ "state": "translated", "value": "%1$d waiting" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d en attente" + } } } }, @@ -2994,6 +4488,12 @@ "state": "translated", "value": "Receivers" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Destinataires" + } } } }, @@ -3006,6 +4506,12 @@ "state": "translated", "value": "Scan with VniDrop to receive this transfer" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Scannez avec VniDrop pour recevoir ce transfert" + } } } }, @@ -3018,6 +4524,12 @@ "state": "translated", "value": "QR code, invitation file, and nearby options" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "QR code, fichier d’invitation et options à proximité" + } } } }, @@ -3030,6 +4542,12 @@ "state": "translated", "value": "Share" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Partager" + } } } }, @@ -3042,6 +4560,12 @@ "state": "translated", "value": "Not available" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Non disponible" + } } } }, @@ -3054,6 +4578,12 @@ "state": "translated", "value": "App version" } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Version de l’app" + } } } } diff --git a/localization/strings.json b/localization/strings.json index 013448d..a375f30 100644 --- a/localization/strings.json +++ b/localization/strings.json @@ -2,7 +2,8 @@ "$schema": "./schema.json", "sourceLanguage": "en", "supportedLanguages": [ - "en" + "en", + "fr" ], "strings": { "%@": { @@ -31,7 +32,8 @@ } ], "translations": { - "en": "{arg1} {arg2} · {arg3}" + "en": "{arg1} {arg2} · {arg3}", + "fr": "{arg1} {arg2} · {arg3}" } }, "%@ · %@": { @@ -50,7 +52,8 @@ } ], "translations": { - "en": "{arg1} · {arg2}" + "en": "{arg1} · {arg2}", + "fr": "{arg1} · {arg2}" } }, "%@%%": { @@ -62,169 +65,197 @@ "about_bug_report": { "context": "About screen: button/link that opens the bug report form.", "translations": { - "en": "Report a bug" + "en": "Report a bug", + "fr": "Signaler un bug" } }, "about_description": { "context": "About screen: intro paragraph describing what VniDrop does.", "translations": { - "en": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done." + "en": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done.", + "fr": "VniDrop transfère fichiers et dossiers directement d’un appareil à un autre sur le réseau, sans les téléverser vers un service d’hébergement. Aucun compte à créer, et aucune copie de votre transfert ne reste dans le cloud une fois terminé." } }, "about_is_direct": { "context": "About screen, 'What VniDrop is' list: point about direct device-to-device transfer.", "translations": { - "en": "A direct device-to-device transfer — your files go straight to the receiver." + "en": "A direct device-to-device transfer — your files go straight to the receiver.", + "fr": "Un transfert direct d’appareil à appareil — vos fichiers vont droit au destinataire." } }, "about_is_encrypted": { "context": "About screen, 'What VniDrop is' list: point about encrypted, verified connections.", "translations": { - "en": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash." + "en": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash.", + "fr": "Les connexions sont authentifiées et chiffrées de bout en bout (via Iroh), et les fichiers entrants sont vérifiés par leur empreinte de contenu." } }, "about_is_in_control": { "context": "About screen, 'What VniDrop is' list: point about controlling who receives.", "translations": { - "en": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation." + "en": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation.", + "fr": "Vous décidez qui reçoit : approuvez chaque demande, ou ouvrez un transfert à toute personne disposant de l’invitation." } }, "about_is_no_account": { "context": "About screen, 'What VniDrop is' list: point about being account-free.", "translations": { - "en": "Account-free — there’s nothing to sign up for." + "en": "Account-free — there’s nothing to sign up for.", + "fr": "Sans compte — il n’y a rien à créer." } }, "about_is_open": { "context": "About screen, 'What VniDrop is' list: point about being open source.", "translations": { - "en": "Open source, released under the Apache 2.0 license." + "en": "Open source, released under the Apache 2.0 license.", + "fr": "Open source, publié sous licence Apache 2.0." } }, "about_is_title": { "context": "About screen: section heading for the 'What VniDrop is' list.", "translations": { - "en": "What VniDrop is" + "en": "What VniDrop is", + "fr": "Ce qu’est VniDrop" } }, "about_isnt_cloud": { "context": "About screen, 'What VniDrop isn't' list: point about not being cloud storage.", "translations": { - "en": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer." + "en": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer.", + "fr": "Pas un stockage cloud — aucun serveur ne détient vos fichiers, et rien n’attend dans le cloud après un transfert." } }, "about_isnt_public": { "context": "About screen, 'What VniDrop isn't' list: point about invitations not being public broadcasts.", "translations": { - "en": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby." + "en": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby.", + "fr": "Pas une diffusion publique — une invitation est un lien d’accès privé, pas une annonce à tout le voisinage." } }, "about_isnt_sync": { "context": "About screen, 'What VniDrop isn't' list: point about not being sync/backup.", "translations": { - "en": "Not a sync or backup service." + "en": "Not a sync or backup service.", + "fr": "Pas un service de synchronisation ou de sauvegarde." } }, "about_isnt_title": { "context": "About screen: section heading for the 'What VniDrop isn't' list.", "translations": { - "en": "What VniDrop isn’t" + "en": "What VniDrop isn’t", + "fr": "Ce que VniDrop n’est pas" } }, "about_license_label": { "context": "About screen: label for the license row.", "translations": { - "en": "License" + "en": "License", + "fr": "Licence" } }, "about_privacy": { "context": "About screen: link to the privacy policy.", "translations": { - "en": "Privacy policy" + "en": "Privacy policy", + "fr": "Politique de confidentialité" } }, "about_privacy_capability": { "context": "About screen, Privacy & security list: point that invitations are capabilities to share carefully.", "translations": { - "en": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”" + "en": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”", + "fr": "Les invitations sont des clés d’accès. Traitez un QR code, un tag NFC ou un fichier .vnd comme un lien d’accès privé et ne le partagez qu’avec les personnes visées — en particulier avec « Toute personne disposant de ce transfert »." } }, "about_privacy_deny": { "context": "About screen, Privacy & security list: point about denying unknown requests by default.", "translations": { - "en": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests." + "en": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests.", + "fr": "Refus par défaut — VniDrop ne sert que le contenu d’un partage actif et rejette les demandes inconnues." } }, "about_privacy_local": { "context": "About screen, Privacy & security list: point about received files staying local and never overwriting.", "translations": { - "en": "Received files are saved on your device and never silently overwrite an existing file." + "en": "Received files are saved on your device and never silently overwrite an existing file.", + "fr": "Les fichiers reçus sont enregistrés sur votre appareil et n’écrasent jamais un fichier existant." } }, "about_privacy_policy_label": { "context": "About screen: label for the privacy policy row.", "translations": { - "en": "Privacy policy" + "en": "Privacy policy", + "fr": "Politique de confidentialité" } }, "about_privacy_relay": { "context": "About screen, Privacy & security list: point explaining encrypted relays.", "translations": { - "en": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files." + "en": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files.", + "fr": "Si deux appareils ne peuvent pas se connecter directement, la connexion chiffrée peut être relayée. Les relais ne transmettent que des paquets chiffrés ; ils ne stockent jamais vos fichiers." } }, "about_privacy_title": { "context": "About screen: section heading for the Privacy & security list.", "translations": { - "en": "Privacy & security" + "en": "Privacy & security", + "fr": "Confidentialité et sécurité" } }, "about_tagline": { "context": "About screen: short tagline under the app name.", "translations": { - "en": "Send files directly. Stay in control of who receives them." + "en": "Send files directly. Stay in control of who receives them.", + "fr": "Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit." } }, "about_title": { "context": "About screen: navigation/screen title.", "translations": { - "en": "About" + "en": "About", + "fr": "À propos" } }, "appearance_auto_description": { "context": "Settings > Appearance: description for the System/auto option.", "translations": { - "en": "Match this device’s light or dark appearance." + "en": "Match this device’s light or dark appearance.", + "fr": "Suivre l’apparence claire ou sombre de cet appareil." } }, "appearance_dark_mode": { "context": "Settings > Appearance: label for the dark theme option.", "translations": { - "en": "Dark mode" + "en": "Dark mode", + "fr": "Mode sombre" } }, "appearance_light_mode": { "context": "Settings > Appearance: label for the light theme option.", "translations": { - "en": "Light mode" + "en": "Light mode", + "fr": "Mode clair" } }, "appearance_system_mode": { "context": "Settings > Appearance: label for the follow-system option.", "translations": { - "en": "System" + "en": "System", + "fr": "Système" } }, "appearance_title": { "context": "Settings > Appearance: section title.", "translations": { - "en": "Appearance" + "en": "Appearance", + "fr": "Apparence" } }, "approval_connection_request": { "context": "Approval prompt: title when a receiver requests to download a transfer.", "translations": { - "en": "Receive request" + "en": "Receive request", + "fr": "Demande de réception" } }, "approval_endpoint_id": { @@ -236,13 +267,15 @@ } ], "translations": { - "en": "Device ID: {arg1}" + "en": "Device ID: {arg1}", + "fr": "Identifiant de l’appareil : {arg1}" } }, "approval_nearby_device": { "context": "Approval prompt: fallback label for a requester with no display name.", "translations": { - "en": "A nearby device" + "en": "A nearby device", + "fr": "Un appareil à proximité" } }, "approval_pending_count": { @@ -254,7 +287,8 @@ } ], "translations": { - "en": "{count} requests waiting" + "en": "{count} requests waiting", + "fr": "{count} demandes en attente" } }, "approval_request_body": { @@ -270,643 +304,750 @@ } ], "translations": { - "en": "{arg1} wants to receive “{arg2}”." + "en": "{arg1} wants to receive “{arg2}”.", + "fr": "{arg1} souhaite recevoir « {arg2} »." } }, "battery_level_title": { "context": "Device information row: battery level label.", "translations": { - "en": "Battery level" + "en": "Battery level", + "fr": "Niveau de batterie" } }, "bug_report_contact_hint": { "context": "Bug report form: placeholder text in the contact email field.", "translations": { - "en": "name@example.com" + "en": "name@example.com", + "fr": "nom@exemple.com" } }, "bug_report_contact_label": { "context": "Bug report form: label for the optional contact email field.", "translations": { - "en": "Contact email (optional)" + "en": "Contact email (optional)", + "fr": "E-mail de contact (facultatif)" } }, "bug_report_description": { "context": "Bug report form: intro text explaining what gets attached.", "translations": { - "en": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted)." + "en": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted).", + "fr": "Dites-nous ce qui s’est passé. Nous joignons les infos de l’appareil et, en option, les journaux récents (valeurs sensibles masquées)." } }, "bug_report_device_section": { "context": "Bug report form: heading for the attached device information section.", "translations": { - "en": "Device information" + "en": "Device information", + "fr": "Informations sur l’appareil" } }, "bug_report_expected_hint": { "context": "Bug report form: placeholder in the 'what did you expect' field.", "translations": { - "en": "Describe what you expected to happen" + "en": "Describe what you expected to happen", + "fr": "Décrivez ce à quoi vous vous attendiez" } }, "bug_report_expected_label": { "context": "Bug report form: label for the expected-behavior field.", "translations": { - "en": "What did you expect?" + "en": "What did you expect?", + "fr": "À quoi vous attendiez-vous ?" } }, "bug_report_include_logs": { "context": "Bug report form: toggle label to attach recent logs.", "translations": { - "en": "Include recent logs" + "en": "Include recent logs", + "fr": "Inclure les journaux récents" } }, "bug_report_include_logs_description": { "context": "Bug report form: explanation under the include-logs toggle.", "translations": { - "en": "Helps us diagnose the issue. Sensitive values are redacted before sending." + "en": "Helps us diagnose the issue. Sensitive values are redacted before sending.", + "fr": "Nous aide à diagnostiquer le problème. Les valeurs sensibles sont masquées avant l’envoi." } }, "bug_report_logs_size": { "context": "Bug report form: label showing the size of the log attachment.", "translations": { - "en": "Log attachment size" + "en": "Log attachment size", + "fr": "Taille de la pièce jointe des journaux" } }, "bug_report_missing_expected": { "context": "Bug report form: validation error when the expected-behavior field is empty.", "translations": { - "en": "Please describe what you expected." + "en": "Please describe what you expected.", + "fr": "Veuillez décrire ce à quoi vous vous attendiez." } }, "bug_report_missing_what": { "context": "Bug report form: validation error when the what-happened field is empty.", "translations": { - "en": "Please describe what happened." + "en": "Please describe what happened.", + "fr": "Veuillez décrire ce qui s’est passé." } }, "bug_report_steps_hint": { "context": "Bug report form: placeholder in the steps-to-reproduce field.", "translations": { - "en": "List the steps to reproduce the issue" + "en": "List the steps to reproduce the issue", + "fr": "Listez les étapes pour reproduire le problème" } }, "bug_report_steps_label": { "context": "Bug report form: label for the optional steps-to-reproduce field.", "translations": { - "en": "Steps to reproduce (optional)" + "en": "Steps to reproduce (optional)", + "fr": "Étapes pour reproduire (facultatif)" } }, "bug_report_submit": { "context": "Bug report form: submit button.", "translations": { - "en": "Submit report" + "en": "Submit report", + "fr": "Envoyer le rapport" } }, "bug_report_submit_failed": { "context": "Bug report form: error message when submission fails.", "translations": { - "en": "Could not submit the bug report. Try again later." + "en": "Could not submit the bug report. Try again later.", + "fr": "Impossible d’envoyer le rapport de bug. Réessayez plus tard." } }, "bug_report_submitted": { "context": "Bug report form: confirmation message after a successful submission.", "translations": { - "en": "Thanks — your bug report was recorded." + "en": "Thanks — your bug report was recorded.", + "fr": "Merci — votre rapport de bug a été enregistré." } }, "bug_report_submitting": { "context": "Bug report form: progress label while the report is being sent.", "translations": { - "en": "Submitting…" + "en": "Submitting…", + "fr": "Envoi…" } }, "bug_report_what_hint": { "context": "Bug report form: placeholder in the what-happened field.", "translations": { - "en": "Describe what happened" + "en": "Describe what happened", + "fr": "Décrivez ce qui s’est passé" } }, "bug_report_what_label": { "context": "Bug report form: label for the what-happened field.", "translations": { - "en": "What happened?" + "en": "What happened?", + "fr": "Que s’est-il passé ?" } }, "button_approve": { "context": "Button: approve a receiver's request.", "translations": { - "en": "Approve" + "en": "Approve", + "fr": "Approuver" } }, "button_back": { "context": "Button: go back to the previous step/screen.", "translations": { - "en": "Back" + "en": "Back", + "fr": "Retour" } }, "button_cancel": { "context": "Button: cancel the current action or dialog.", "translations": { - "en": "Cancel" + "en": "Cancel", + "fr": "Annuler" } }, "button_cancel_receive": { "context": "Button: cancel an in-progress receive.", "translations": { - "en": "Cancel" + "en": "Cancel", + "fr": "Annuler" } }, "button_change_files": { "context": "Button: change the selected files in the send flow.", "translations": { - "en": "Change files" + "en": "Change files", + "fr": "Modifier les fichiers" } }, "button_choose_files": { "context": "Button: open the file picker to choose files to send.", "translations": { - "en": "Choose files" + "en": "Choose files", + "fr": "Choisir des fichiers" } }, "button_choose_folder": { "context": "Button: open the folder picker (send selection or receive folder).", "translations": { - "en": "Choose folder" + "en": "Choose folder", + "fr": "Choisir un dossier" } }, "button_clear": { "context": "Button: clear the current input or selection.", "translations": { - "en": "Clear" + "en": "Clear", + "fr": "Effacer" } }, "button_close": { "context": "Button: close the current sheet/dialog.", "translations": { - "en": "Close" + "en": "Close", + "fr": "Fermer" } }, "button_create_new_transfer": { "context": "Button: start creating a new transfer (Send tab).", "translations": { - "en": "New transfer" + "en": "New transfer", + "fr": "Nouveau transfert" } }, "button_delete_transfer": { "context": "Button: delete a transfer.", "translations": { - "en": "Delete transfer" + "en": "Delete transfer", + "fr": "Supprimer le transfert" } }, "button_download_invitation": { "context": "Button: save the invitation as a .vnd file.", "translations": { - "en": "Save .vnd file" + "en": "Save .vnd file", + "fr": "Enregistrer le fichier .vnd" } }, "button_native_share": { "context": "Button: open the OS share sheet to share the invitation.", "translations": { - "en": "Share invitation" + "en": "Share invitation", + "fr": "Partager l’invitation" } }, "button_open_settings": { "context": "Button: open the OS Settings app (e.g. for permissions).", "translations": { - "en": "Open Settings" + "en": "Open Settings", + "fr": "Ouvrir les Réglages" } }, "button_receive": { "context": "Button: receive label (Receive action).", "translations": { - "en": "Receive" + "en": "Receive", + "fr": "Recevoir" } }, "button_receive_files": { "context": "Button: start receiving a transfer.", "translations": { - "en": "Start receiving" + "en": "Start receiving", + "fr": "Commencer à recevoir" } }, "button_refuse": { "context": "Button: refuse a receiver's request.", "translations": { - "en": "Refuse" + "en": "Refuse", + "fr": "Refuser" } }, "button_remove_file": { "context": "Button: remove a single file from the send selection.", "translations": { - "en": "Remove file" + "en": "Remove file", + "fr": "Retirer le fichier" } }, "button_reset_default": { "context": "Button: reset a setting to its default value.", "translations": { - "en": "Use default" + "en": "Use default", + "fr": "Valeur par défaut" } }, "button_retry": { "context": "Button: retry after a failed operation.", "translations": { - "en": "Retry" + "en": "Retry", + "fr": "Réessayer" } }, "button_share_file": { "context": "Button: start sharing the transfer (make it available).", "translations": { - "en": "Start sharing" + "en": "Start sharing", + "fr": "Commencer le partage" } }, "button_sharing_file": { "context": "Button: disabled/loading state while the transfer is being prepared.", "translations": { - "en": "Preparing transfer…" + "en": "Preparing transfer…", + "fr": "Préparation du transfert…" } }, "button_show_in_files": { "context": "Button: reveal a received file in the Files app.", "translations": { - "en": "Show in Files" + "en": "Show in Files", + "fr": "Afficher dans Fichiers" } }, "button_write_nfc": { "context": "Button: write the invitation to an NFC tag.", "translations": { - "en": "Write to NFC tag" + "en": "Write to NFC tag", + "fr": "Écrire sur un tag NFC" } }, "device_model_title": { "context": "Device information row: device model label.", "translations": { - "en": "Device model" + "en": "Device model", + "fr": "Modèle de l’appareil" } }, "device_name_title": { "context": "Device information row: device name label.", "translations": { - "en": "Device name" + "en": "Device name", + "fr": "Nom de l’appareil" } }, "diagnostics_description": { "context": "Settings > Diagnostics: explanation of what anonymous diagnostics collect.", "translations": { - "en": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included." + "en": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included.", + "fr": "Envoyer des rapports de plantage et des événements d’utilisation anonymes pour nous aider à améliorer VniDrop. Vous pouvez désactiver cela à tout moment. Les invitations, chemins de fichiers et contenus de transfert ne sont jamais inclus." } }, "diagnostics_disabled_message": { "context": "Settings > Diagnostics: confirmation shown when diagnostics are turned off.", "translations": { - "en": "Diagnostics sharing is off." + "en": "Diagnostics sharing is off.", + "fr": "Le partage des diagnostics est désactivé." } }, "diagnostics_enabled_message": { "context": "Settings > Diagnostics: confirmation shown when diagnostics are turned on.", "translations": { - "en": "Diagnostics sharing is on." + "en": "Diagnostics sharing is on.", + "fr": "Le partage des diagnostics est activé." } }, "diagnostics_title": { "context": "Settings > Diagnostics: toggle title.", "translations": { - "en": "Share diagnostics" + "en": "Share diagnostics", + "fr": "Partager les diagnostics" } }, "error_camera": { "context": "Error: camera permission is needed to scan a QR code.", "translations": { - "en": "Camera access is required to scan a QR code." + "en": "Camera access is required to scan a QR code.", + "fr": "L’accès à la caméra est nécessaire pour scanner un QR code." } }, "error_device_info": { "context": "Error: device information could not be loaded.", "translations": { - "en": "Could not load device information." + "en": "Could not load device information.", + "fr": "Impossible de charger les informations de l’appareil." } }, "error_filesystem": { "context": "Error: the selected files/folder could not be accessed.", "translations": { - "en": "VniDrop could not access the selected files or folder. Check permissions and try again." + "en": "VniDrop could not access the selected files or folder. Check permissions and try again.", + "fr": "VniDrop n’a pas pu accéder aux fichiers ou au dossier sélectionnés. Vérifiez les autorisations et réessayez." } }, "error_generic": { "context": "Error: generic fallback message.", "translations": { - "en": "Something went wrong. Try again." + "en": "Something went wrong. Try again.", + "fr": "Une erreur est survenue. Réessayez." } }, "error_initialization": { "context": "Error: the app failed to finish starting up.", "translations": { - "en": "VniDrop could not finish starting up. Close the app and try again." + "en": "VniDrop could not finish starting up. Close the app and try again.", + "fr": "VniDrop n’a pas pu terminer son démarrage. Fermez l’app et réessayez." } }, "error_invalid_ticket": { "context": "Error: the invitation/ticket could not be parsed.", "translations": { - "en": "This invitation could not be read. Ask the sender for a new one." + "en": "This invitation could not be read. Ask the sender for a new one.", + "fr": "Cette invitation n’a pas pu être lue. Demandez-en une nouvelle à l’expéditeur." } }, "error_invitation_empty": { "context": "Error: the opened invitation contained no data.", "translations": { - "en": "That invitation is empty. Try opening it again." + "en": "That invitation is empty. Try opening it again.", + "fr": "Cette invitation est vide. Essayez de l’ouvrir à nouveau." } }, "error_missing_native_library": { "context": "Error: the native library is missing from the build.", "translations": { - "en": "The native VniDrop library is missing from this build." + "en": "The native VniDrop library is missing from this build.", + "fr": "La bibliothèque native de VniDrop est absente de cette version." } }, "error_nfc": { "context": "Error: the NFC tag could not be read/used.", "translations": { - "en": "This NFC tag could not be used. Try another tag." + "en": "This NFC tag could not be used. Try another tag.", + "fr": "Ce tag NFC n’a pas pu être utilisé. Essayez-en un autre." } }, "error_permission": { "context": "Error: the transfer was not approved or was refused by the sender.", "translations": { - "en": "The sender has not approved this transfer, or it was refused." + "en": "The sender has not approved this transfer, or it was refused.", + "fr": "L’expéditeur n’a pas approuvé ce transfert, ou il a été refusé." } }, "error_repository": { "context": "Error: transfer data could not be saved locally.", "translations": { - "en": "VniDrop could not save transfer data on this device." + "en": "VniDrop could not save transfer data on this device.", + "fr": "VniDrop n’a pas pu enregistrer les données de transfert sur cet appareil." } }, "error_selection_failed": { "context": "Error: the selected item could not be opened.", "translations": { - "en": "Could not open the selected item. Try choosing it again." + "en": "Could not open the selected item. Try choosing it again.", + "fr": "Impossible d’ouvrir l’élément sélectionné. Essayez de le choisir à nouveau." } }, "error_share_empty": { "context": "Error: attempted to share with nothing selected.", "translations": { - "en": "Select at least one item to share." + "en": "Select at least one item to share.", + "fr": "Sélectionnez au moins un élément à partager." } }, "error_socket_bind": { "context": "Error: the app could not open its network sockets.", "translations": { - "en": "VniDrop could not open its network sockets on this device." + "en": "VniDrop could not open its network sockets on this device.", + "fr": "VniDrop n’a pas pu ouvrir ses sockets réseau sur cet appareil." } }, "error_starting_up": { "context": "Error: an invitation was opened before startup finished.", "translations": { - "en": "VniDrop is still starting. Open the invitation again in a moment." + "en": "VniDrop is still starting. Open the invitation again in a moment.", + "fr": "VniDrop démarre encore. Rouvrez l’invitation dans un instant." } }, "error_transfer": { "context": "Error: the transfer could not be completed.", "translations": { - "en": "The transfer could not be completed. Check your connection and try again." + "en": "The transfer could not be completed. Check your connection and try again.", + "fr": "Le transfert n’a pas pu être terminé. Vérifiez votre connexion et réessayez." } }, "field_receiver_name": { "context": "Text field label: the receiver's display name.", "translations": { - "en": "Receiver name" + "en": "Receiver name", + "fr": "Nom du destinataire" } }, "field_sender_name": { "context": "Text field label: the sender's display name.", "translations": { - "en": "Sender name" + "en": "Sender name", + "fr": "Nom de l’expéditeur" } }, "field_transfer_name": { "context": "Text field label: the name given to a transfer.", "translations": { - "en": "Transfer name" + "en": "Transfer name", + "fr": "Nom du transfert" } }, "field_username": { "context": "Settings text field label: this device's display name.", "translations": { - "en": "Display name" + "en": "Display name", + "fr": "Nom d’affichage" } }, "folder_status_permission_required": { "context": "Receive-folder status: permission is required to write to the chosen folder.", "translations": { - "en": "Permission needed" + "en": "Permission needed", + "fr": "Autorisation requise" } }, "folder_status_unavailable": { "context": "Receive-folder status: the chosen folder is unavailable.", "translations": { - "en": "Unavailable" + "en": "Unavailable", + "fr": "Indisponible" } }, "folder_status_validating": { "context": "Receive-folder status: the folder is being checked.", "translations": { - "en": "Checking folder…" + "en": "Checking folder…", + "fr": "Vérification du dossier…" } }, "folder_status_writable": { "context": "Receive-folder status: the folder is valid and writable.", "translations": { - "en": "Ready" + "en": "Ready", + "fr": "Prêt" } }, "metadata_files": { "context": "Transfer metadata label: number of files.", "translations": { - "en": "Files" + "en": "Files", + "fr": "Fichiers" } }, "metadata_size": { "context": "Transfer metadata label: total size.", "translations": { - "en": "Size" + "en": "Size", + "fr": "Taille" } }, "metadata_status": { "context": "Transfer metadata label: current status.", "translations": { - "en": "Status" + "en": "Status", + "fr": "Statut" } }, "nav_receive": { "context": "Bottom navigation: Receive tab label.", "translations": { - "en": "Receive" + "en": "Receive", + "fr": "Recevoir" } }, "nav_send": { "context": "Bottom navigation: Send tab label.", "translations": { - "en": "Send" + "en": "Send", + "fr": "Envoyer" } }, "nav_settings": { "context": "Bottom navigation: Settings tab label.", "translations": { - "en": "Settings" + "en": "Settings", + "fr": "Réglages" } }, "network_title": { "context": "Device information row: network label.", "translations": { - "en": "Network" + "en": "Network", + "fr": "Réseau" } }, "notifications_description": { "context": "Settings > Notifications: explanation of what notifications are used for.", "translations": { - "en": "Get notified about new receive requests while VniDrop is in the background." + "en": "Get notified about new receive requests while VniDrop is in the background.", + "fr": "Soyez averti des nouvelles demandes de réception lorsque VniDrop est en arrière-plan." } }, "notifications_enabled_message": { "context": "Settings > Notifications: confirmation when notifications are enabled.", "translations": { - "en": "Notifications enabled." + "en": "Notifications enabled.", + "fr": "Notifications activées." } }, "notifications_local_title": { "context": "Settings > Notifications: label for the allow-notifications action.", "translations": { - "en": "Allow notifications" + "en": "Allow notifications", + "fr": "Autoriser les notifications" } }, "notifications_permission_denied": { "context": "Settings > Notifications: message when the OS permission is denied.", "translations": { - "en": "Notifications are turned off for VniDrop. You can enable them in Settings." + "en": "Notifications are turned off for VniDrop. You can enable them in Settings.", + "fr": "Les notifications sont désactivées pour VniDrop. Vous pouvez les activer dans les Réglages." } }, "notifications_settings_open_failed": { "context": "Settings > Notifications: error when the OS notification settings can't be opened.", "translations": { - "en": "Could not open notification settings." + "en": "Could not open notification settings.", + "fr": "Impossible d’ouvrir les réglages de notifications." } }, "notifications_title": { "context": "Settings > Notifications: section title.", "translations": { - "en": "Notifications" + "en": "Notifications", + "fr": "Notifications" } }, "notifications_unsupported": { "context": "Settings > Notifications: message when notifications aren't supported on the device.", "translations": { - "en": "Notifications are not available on this device." + "en": "Notifications are not available on this device.", + "fr": "Les notifications ne sont pas disponibles sur cet appareil." } }, "os_version_title": { "context": "Device information row: operating system version label.", "translations": { - "en": "Operating system" + "en": "Operating system", + "fr": "Système d’exploitation" } }, "preferences_receive_folder_title": { "context": "Settings > Preferences: label for the received-files destination folder.", "translations": { - "en": "Save received transfers to" + "en": "Save received transfers to", + "fr": "Enregistrer les transferts reçus dans" } }, "preferences_title": { "context": "Settings > Preferences: section title.", "translations": { - "en": "Preferences" + "en": "Preferences", + "fr": "Préférences" } }, "progress_cancelled": { "context": "Transfer progress label: cancelled.", "translations": { - "en": "Cancelled" + "en": "Cancelled", + "fr": "Annulé" } }, "progress_completed": { "context": "Transfer progress label: completed.", "translations": { - "en": "Completed" + "en": "Completed", + "fr": "Terminé" } }, "progress_connected": { "context": "Transfer progress label: connected.", "translations": { - "en": "Connected" + "en": "Connected", + "fr": "Connecté" } }, "progress_connecting": { "context": "Transfer progress label: connecting.", "translations": { - "en": "Connecting" + "en": "Connecting", + "fr": "Connexion" } }, "progress_downloading": { "context": "Transfer progress label: downloading.", "translations": { - "en": "Downloading" + "en": "Downloading", + "fr": "Téléchargement" } }, "progress_failed": { "context": "Transfer progress label: failed.", "translations": { - "en": "Failed" + "en": "Failed", + "fr": "Échec" } }, "progress_getting_ready": { "context": "Transfer progress label: getting ready.", "translations": { - "en": "Getting ready" + "en": "Getting ready", + "fr": "Préparation" } }, "progress_interrupted": { "context": "Transfer progress label: the transfer was interrupted.", "translations": { - "en": "Transfer interrupted" + "en": "Transfer interrupted", + "fr": "Transfert interrompu" } }, "progress_preparing": { "context": "Transfer progress label: preparing.", "translations": { - "en": "Preparing" + "en": "Preparing", + "fr": "Préparation" } }, "progress_ready": { "context": "Transfer progress label: ready.", "translations": { - "en": "Ready" + "en": "Ready", + "fr": "Prêt" } }, "progress_receiving": { "context": "Transfer progress label: receiving.", "translations": { - "en": "Receiving" + "en": "Receiving", + "fr": "Réception" } }, "progress_requesting_access": { "context": "Transfer progress label: requesting access from the sender.", "translations": { - "en": "Requesting access" + "en": "Requesting access", + "fr": "Demande d’accès" } }, "progress_saving": { "context": "Transfer progress label: saving received files.", "translations": { - "en": "Saving" + "en": "Saving", + "fr": "Enregistrement" } }, "progress_sending": { "context": "Transfer progress label: sending.", "translations": { - "en": "Sending" + "en": "Sending", + "fr": "Envoi" } }, "progress_sending_to_count": { "context": "Transfer progress label: sending to N receivers. %lld = receiver count.", "translations": { - "en": "Sending to {count}" + "en": "Sending to {count}", + "fr": "Envoi à {count}" }, "args": [ { @@ -918,49 +1059,57 @@ "progress_share_ready": { "context": "Transfer progress label: the share is ready.", "translations": { - "en": "Ready to share" + "en": "Ready to share", + "fr": "Prêt à partager" } }, "progress_working": { "context": "Transfer progress label: generic working/in-progress state.", "translations": { - "en": "Working…" + "en": "Working…", + "fr": "En cours…" } }, "receive_choose_method_body": { "context": "Receive flow: body text prompting the user to pick an invitation method.", "translations": { - "en": "Choose the invitation method available to you." + "en": "Choose the invitation method available to you.", + "fr": "Choisissez la méthode d’invitation à votre disposition." } }, "receive_choose_method_title": { "context": "Receive flow: title of the connect-method chooser.", "translations": { - "en": "How would you like to connect?" + "en": "How would you like to connect?", + "fr": "Comment souhaitez-vous vous connecter ?" } }, "receive_clear_history": { "context": "Receive history: action to clear all history.", "translations": { - "en": "Clear history" + "en": "Clear history", + "fr": "Effacer l’historique" } }, "receive_clear_history_description": { "context": "Receive history: confirmation dialog body for clearing all history.", "translations": { - "en": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device." + "en": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device.", + "fr": "Toutes les réceptions terminées, échouées et annulées seront retirées de l’historique de VniDrop. Les fichiers téléchargés resteront sur cet appareil." } }, "receive_clear_history_title": { "context": "Receive history: confirmation dialog title for clearing all history.", "translations": { - "en": "Clear receive history?" + "en": "Clear receive history?", + "fr": "Effacer l’historique de réception ?" } }, "receive_completed": { "context": "Receive flow: toast/message when a transfer finishes downloading.", "translations": { - "en": "Transfer received." + "en": "Transfer received.", + "fr": "Transfert reçu." } }, "receive_delete_history_description": { @@ -972,205 +1121,239 @@ } ], "translations": { - "en": "“{arg1}” will be removed from VniDrop’s history. The downloaded file will remain on this device." + "en": "“{arg1}” will be removed from VniDrop’s history. The downloaded file will remain on this device.", + "fr": "« {arg1} » sera retiré de l’historique de VniDrop. Le fichier téléchargé restera sur cet appareil." } }, "receive_delete_history_item": { "context": "Receive history: swipe/menu action to delete a single history item.", "translations": { - "en": "Delete from receive history" + "en": "Delete from receive history", + "fr": "Supprimer de l’historique de réception" } }, "receive_delete_history_title": { "context": "Receive history: confirmation title for removing one item.", "translations": { - "en": "Remove from history?" + "en": "Remove from history?", + "fr": "Retirer de l’historique ?" } }, "receive_empty_body": { "context": "Receive tab empty state: instructions on how to receive.", "translations": { - "en": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag." + "en": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag.", + "fr": "Ouvrez une invitation VniDrop, scannez un QR code ou approchez un tag NFC." } }, "receive_empty_title": { "context": "Receive tab empty state: title when nothing has been received.", "translations": { - "en": "Nothing received yet" + "en": "Nothing received yet", + "fr": "Rien reçu pour l’instant" } }, "receive_history_cleared": { "context": "Receive history: toast confirming history was cleared.", "translations": { - "en": "Receive history cleared." + "en": "Receive history cleared.", + "fr": "Historique de réception effacé." } }, "receive_history_title": { "context": "Receive tab: History section title.", "translations": { - "en": "History" + "en": "History", + "fr": "Historique" } }, "receive_method_file": { "context": "Receive method: open a .vnd invitation file.", "translations": { - "en": "Open a .vnd invitation" + "en": "Open a .vnd invitation", + "fr": "Ouvrir une invitation .vnd" } }, "receive_method_file_description": { "context": "Receive method description: open a saved/shared invitation file.", "translations": { - "en": "Choose an invitation saved or shared to this device." + "en": "Choose an invitation saved or shared to this device.", + "fr": "Choisissez une invitation enregistrée ou partagée sur cet appareil." } }, "receive_method_nfc": { "context": "Receive method: read an NFC tag.", "translations": { - "en": "Read NFC tag" + "en": "Read NFC tag", + "fr": "Lire un tag NFC" } }, "receive_method_nfc_description": { "context": "Receive method description: hold near the sender's NFC tag.", "translations": { - "en": "Hold this device near the sender’s invitation tag." + "en": "Hold this device near the sender’s invitation tag.", + "fr": "Approchez cet appareil du tag d’invitation de l’expéditeur." } }, "receive_method_scan": { "context": "Receive method: scan a QR code.", "translations": { - "en": "Scan QR code" + "en": "Scan QR code", + "fr": "Scanner un QR code" } }, "receive_method_scan_description": { "context": "Receive method description: use the camera to scan the sender's code.", "translations": { - "en": "Use the camera to scan the sender’s VniDrop code." + "en": "Use the camera to scan the sender’s VniDrop code.", + "fr": "Utilisez la caméra pour scanner le code VniDrop de l’expéditeur." } }, "receive_new_subtitle": { "context": "Receive tab: subtitle under the title.", "translations": { - "en": "Transfers you’ve received on this device." + "en": "Transfers you’ve received on this device.", + "fr": "Transferts que vous avez reçus sur cet appareil." } }, "receive_nfc_waiting": { "context": "Receive flow: prompt while waiting to read an NFC tag.", "translations": { - "en": "Hold near the NFC tag…" + "en": "Hold near the NFC tag…", + "fr": "Approchez du tag NFC…" } }, "receive_open_files_failed": { "context": "Receive flow: error when opening VniDrop's folder in Files fails.", "translations": { - "en": "Couldn’t open VniDrop in Files." + "en": "Couldn’t open VniDrop in Files.", + "fr": "Impossible d’ouvrir VniDrop dans Fichiers." } }, "receive_review_title": { "context": "Receive flow: title of the review screen before accepting a transfer.", "translations": { - "en": "Review transfer" + "en": "Review transfer", + "fr": "Vérifier le transfert" } }, "receive_title": { "context": "Receive tab: screen title.", "translations": { - "en": "Receive" + "en": "Receive", + "fr": "Recevoir" } }, "receive_unknown_transfer": { "context": "Receive flow: fallback name for a transfer with no title.", "translations": { - "en": "VniDrop transfer" + "en": "VniDrop transfer", + "fr": "Transfert VniDrop" } }, "send_access_anyone": { "context": "Send access option: anyone with the invitation can receive.", "translations": { - "en": "Anyone with this transfer" + "en": "Anyone with this transfer", + "fr": "Toute personne disposant de ce transfert" } }, "send_access_anyone_description": { "context": "Send access option description: no approval required.", "translations": { - "en": "No approval is required. Only use this for items you are comfortable sharing." + "en": "No approval is required. Only use this for items you are comfortable sharing.", + "fr": "Aucune approbation requise. À n’utiliser que pour des éléments que vous êtes à l’aise de partager." } }, "send_access_anyone_warning": { "context": "Send access option warning: caution about open access.", "translations": { - "en": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items." + "en": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items.", + "fr": "Toute personne disposant de l’invitation peut télécharger jusqu’à ce que vous arrêtiez le partage. Ne l’utilisez pas pour des éléments privés ou sensibles." } }, "send_access_approval": { "context": "Send access option: approve each receiver.", "translations": { - "en": "Ask before each download" + "en": "Ask before each download", + "fr": "Demander avant chaque téléchargement" } }, "send_access_approval_description": { "context": "Send access option description: you approve/refuse each receiver.", "translations": { - "en": "You approve or refuse every new receiver." + "en": "You approve or refuse every new receiver.", + "fr": "Vous approuvez ou refusez chaque nouveau destinataire." } }, "send_access_title": { "context": "Send flow: heading for the who-can-receive access chooser.", "translations": { - "en": "Who can receive it?" + "en": "Who can receive it?", + "fr": "Qui peut le recevoir ?" } }, "send_choose_file_body": { "context": "Send flow: body text for the choose-what-to-share step.", "translations": { - "en": "Select files or a folder from this device. You can review the selection before creating the transfer." + "en": "Select files or a folder from this device. You can review the selection before creating the transfer.", + "fr": "Sélectionnez des fichiers ou un dossier sur cet appareil. Vous pourrez vérifier la sélection avant de créer le transfert." } }, "send_choose_file_title": { "context": "Send flow: title of the choose-what-to-share step.", "translations": { - "en": "Choose what to share" + "en": "Choose what to share", + "fr": "Choisissez quoi partager" } }, "send_empty_body": { "context": "Send tab empty state: instructions on how to create a transfer.", "translations": { - "en": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file." + "en": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file.", + "fr": "Créez un transfert, décidez qui peut le recevoir, puis invitez-les avec un QR code, un tag NFC ou un fichier d’invitation." } }, "send_empty_title": { "context": "Send tab empty state: title when nothing has been shared.", "translations": { - "en": "Nothing shared yet" + "en": "Nothing shared yet", + "fr": "Rien partagé pour l’instant" } }, "send_file_size_unknown": { "context": "Send flow: shown when a selected file's size can't be determined.", "translations": { - "en": "Size unavailable" + "en": "Size unavailable", + "fr": "Taille indisponible" } }, "send_folder_label": { "context": "Send flow: label indicating a selected item is a folder.", "translations": { - "en": "Folder" + "en": "Folder", + "fr": "Dossier" } }, "send_new_transfer_description": { "context": "Send flow: description for the create-new-transfer entry.", "translations": { - "en": "Create a new transfer" + "en": "Create a new transfer", + "fr": "Créer un nouveau transfert" } }, "send_new_transfer_title": { "context": "Send flow: title for the new-transfer step.", "translations": { - "en": "New transfer" + "en": "New transfer", + "fr": "Nouveau transfert" } }, "send_review_title": { "context": "Send flow: title of the review-transfer step before creating it.", "translations": { - "en": "Review transfer" + "en": "Review transfer", + "fr": "Vérifier le transfert" } }, "send_selected_files_count": { @@ -1182,187 +1365,218 @@ } ], "translations": { - "en": "{count} files selected" + "en": "{count} files selected", + "fr": "{count} fichiers sélectionnés" } }, "send_stop_sharing": { "context": "Transfer details: action to stop sharing a transfer.", "translations": { - "en": "Stop sharing" + "en": "Stop sharing", + "fr": "Arrêter le partage" } }, "send_stop_sharing_description": { "context": "Transfer details: confirmation body for stopping sharing.", "translations": { - "en": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped." + "en": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped.", + "fr": "Cela arrête le transfert et interrompt toute personne en train de le télécharger. Il reste dans votre historique en tant qu’Arrêté." } }, "send_subtitle": { "context": "Send tab: subtitle under the title.", "translations": { - "en": "Transfers you’re sharing from this device." + "en": "Transfers you’re sharing from this device.", + "fr": "Transferts que vous partagez depuis cet appareil." } }, "send_title": { "context": "Send tab: screen title.", "translations": { - "en": "Send" + "en": "Send", + "fr": "Envoyer" } }, "send_transfer_created": { "context": "Send flow: toast confirming a transfer was created.", "translations": { - "en": "Transfer created." + "en": "Transfer created.", + "fr": "Transfert créé." } }, "send_transfer_details_title": { "context": "Send flow: title of the transfer details screen.", "translations": { - "en": "Transfer details" + "en": "Transfer details", + "fr": "Détails du transfert" } }, "send_transfers_title": { "context": "Send tab: 'Your transfers' list heading.", "translations": { - "en": "Your transfers" + "en": "Your transfers", + "fr": "Vos transferts" } }, "settings_subtitle": { "context": "Settings screen: subtitle summarizing what's configurable.", "translations": { - "en": "Your name, where transfers are saved, appearance, and notifications." + "en": "Your name, where transfers are saved, appearance, and notifications.", + "fr": "Votre nom, l’emplacement d’enregistrement des transferts, l’apparence et les notifications." } }, "settings_title": { "context": "Settings screen: title.", "translations": { - "en": "Settings" + "en": "Settings", + "fr": "Réglages" } }, "snackbar_dismiss": { "context": "Snackbar: accessibility label / action to dismiss the snackbar.", "translations": { - "en": "Dismiss" + "en": "Dismiss", + "fr": "Ignorer" } }, "status_available": { "context": "Transfer status: available (actively shared).", "translations": { - "en": "Available" + "en": "Available", + "fr": "Disponible" } }, "status_cancelled": { "context": "Transfer status: cancelled.", "translations": { - "en": "Cancelled" + "en": "Cancelled", + "fr": "Annulé" } }, "status_completed": { "context": "Transfer status: completed.", "translations": { - "en": "Completed" + "en": "Completed", + "fr": "Terminé" } }, "status_failed": { "context": "Transfer status: failed.", "translations": { - "en": "Failed" + "en": "Failed", + "fr": "Échec" } }, "status_preparing": { "context": "Transfer status: preparing.", "translations": { - "en": "Preparing" + "en": "Preparing", + "fr": "Préparation" } }, "status_receiving": { "context": "Transfer status: receiving.", "translations": { - "en": "Receiving" + "en": "Receiving", + "fr": "Réception" } }, "status_stopped": { "context": "Transfer status: stopped.", "translations": { - "en": "Stopped" + "en": "Stopped", + "fr": "Arrêté" } }, "storage_calculating": { "context": "Settings > Storage: placeholder while a size is being calculated.", "translations": { - "en": "Calculating…" + "en": "Calculating…", + "fr": "Calcul…" } }, "storage_delete_transfers": { "context": "Settings > Storage: button to delete all transfer records.", "translations": { - "en": "Delete all transfers" + "en": "Delete all transfers", + "fr": "Supprimer tous les transferts" } }, "storage_delete_transfers_description": { "context": "Settings > Storage: confirmation body for deleting all transfer records.", "translations": { - "en": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone." + "en": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone.", + "fr": "Cela efface tous les enregistrements de transferts envoyés et reçus de votre historique. Vos fichiers reçus ne sont pas supprimés. Remarque : le moteur de transfert conserve son contenu stocké, donc les données de transfert peuvent ne pas diminuer. Cette action est irréversible." } }, "storage_deleting": { "context": "Settings > Storage: progress label while transfers are being deleted.", "translations": { - "en": "Deleting…" + "en": "Deleting…", + "fr": "Suppression…" } }, "storage_footer": { "context": "Settings > Storage: footer explaining how storage is managed.", "translations": { - "en": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here." + "en": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here.", + "fr": "Les données de transfert sont gérées par le moteur de transfert — votre historique ainsi que le contenu des fichiers que vous avez partagés. Le bouton ci-dessous efface vos enregistrements de transferts ; le moteur conserve son contenu stocké, donc cette valeur peut ne pas baisser. Les fichiers reçus sont vos fichiers téléchargés et ne sont jamais supprimés ici." } }, "storage_received_files": { "context": "Settings > Storage: label for the received-files size row.", "translations": { - "en": "Received files" + "en": "Received files", + "fr": "Fichiers reçus" } }, "storage_temporary": { "context": "Settings > Storage: label for the temporary-files size row.", "translations": { - "en": "Temporary files" + "en": "Temporary files", + "fr": "Fichiers temporaires" } }, "storage_title": { "context": "Settings > Storage: section title.", "translations": { - "en": "Storage" + "en": "Storage", + "fr": "Stockage" } }, "storage_total": { "context": "Settings > Storage: label for the total-size row.", "translations": { - "en": "Total" + "en": "Total", + "fr": "Total" } }, "storage_transfer_data": { "context": "Settings > Storage: label for the transfer-engine data size row.", "translations": { - "en": "Transfer data" + "en": "Transfer data", + "fr": "Données de transfert" } }, "storage_transfers_deleted": { "context": "Settings > Storage: toast confirming all transfers were deleted.", "translations": { - "en": "All transfers deleted" + "en": "All transfers deleted", + "fr": "Tous les transferts supprimés" } }, "transfer_activity_description": { "context": "Transfer details: description under the Activity section.", "translations": { - "en": "See important updates for this transfer" + "en": "See important updates for this transfer", + "fr": "Consultez les mises à jour importantes de ce transfert" } }, "transfer_activity_title": { "context": "Transfer details: Activity section title.", "translations": { - "en": "Activity" + "en": "Activity", + "fr": "Activité" } }, "transfer_delete_description": { @@ -1374,103 +1588,120 @@ } ], "translations": { - "en": "“{arg1}” will stop being shared and its transfer history will be removed from this device." + "en": "“{arg1}” will stop being shared and its transfer history will be removed from this device.", + "fr": "« {arg1} » cessera d’être partagé et son historique de transfert sera retiré de cet appareil." } }, "transfer_delete_title": { "context": "Transfer details: confirmation title for deleting a transfer.", "translations": { - "en": "Delete transfer?" + "en": "Delete transfer?", + "fr": "Supprimer le transfert ?" } }, "transfer_deleted": { "context": "Transfer details: toast confirming a transfer was deleted.", "translations": { - "en": "Transfer deleted." + "en": "Transfer deleted.", + "fr": "Transfert supprimé." } }, "transfer_deleting": { "context": "Transfer details: progress label while a transfer is being deleted.", "translations": { - "en": "Deleting…" + "en": "Deleting…", + "fr": "Suppression…" } }, "transfer_details_title": { "context": "Transfer details: screen title.", "translations": { - "en": "Transfer details" + "en": "Transfer details", + "fr": "Détails du transfert" } }, "transfer_event_approved": { "context": "Transfer activity event: a receiver's access was approved.", "translations": { - "en": "Receiver access approved" + "en": "Receiver access approved", + "fr": "Accès du destinataire approuvé" } }, "transfer_event_completed": { "context": "Transfer activity event: a receiver completed the transfer.", "translations": { - "en": "A receiver completed the transfer" + "en": "A receiver completed the transfer", + "fr": "Un destinataire a terminé le transfert" } }, "transfer_event_connecting": { "context": "Transfer activity event: connecting to the sender.", "translations": { - "en": "Connecting to sender" + "en": "Connecting to sender", + "fr": "Connexion à l’expéditeur" } }, "transfer_event_downloading": { "context": "Transfer activity event: downloading.", "translations": { - "en": "Downloading" + "en": "Downloading", + "fr": "Téléchargement" } }, "transfer_event_failed": { "context": "Transfer activity event: the transfer hit a problem.", "translations": { - "en": "The transfer encountered a problem" + "en": "The transfer encountered a problem", + "fr": "Le transfert a rencontré un problème" } }, "transfer_event_preparing": { "context": "Transfer activity event: preparing the transfer.", "translations": { - "en": "Preparing your transfer" + "en": "Preparing your transfer", + "fr": "Préparation de votre transfert" } }, "transfer_event_ready": { "context": "Transfer activity event: ready to share.", "translations": { - "en": "Ready to share" + "en": "Ready to share", + "fr": "Prêt à partager" } }, "transfer_event_refused": { "context": "Transfer activity event: a receiver's access was refused.", "translations": { - "en": "Receiver access refused" + "en": "Receiver access refused", + "fr": "Accès du destinataire refusé" } }, "transfer_event_requested": { "context": "Transfer activity event: a receiver requested access.", "translations": { - "en": "A receiver requested access" + "en": "A receiver requested access", + "fr": "Un destinataire a demandé l’accès" } }, "transfer_event_saving": { "context": "Transfer activity event: saving received files.", "translations": { - "en": "Saving" + "en": "Saving", + "fr": "Enregistrement" } }, "transfer_event_stopped": { "context": "Transfer activity event: sharing was stopped.", "translations": { - "en": "Sharing stopped" + "en": "Sharing stopped", + "fr": "Partage arrêté" } }, "transfer_event_updated": { "context": "Transfer activity event: the transfer was updated.", "translations": { - "en": "Transfer updated" + "en": "Transfer updated", + "fr": "Transfert mis à jour" } }, "transfer_file_count": { @@ -1485,85 +1716,102 @@ "en": { "other": "{count} files", "one": "{count} file" + }, + "fr": { + "one": "{count} fichier", + "other": "{count} fichiers" } } }, "transfer_invitation_saved": { "context": "Transfer share: toast confirming the invitation file was saved.", "translations": { - "en": "Invitation saved." + "en": "Invitation saved.", + "fr": "Invitation enregistrée." } }, "transfer_nearby_device": { "context": "Transfer share/receivers: label for a nearby device.", "translations": { - "en": "Nearby device" + "en": "Nearby device", + "fr": "Appareil à proximité" } }, "transfer_nfc_unavailable": { "context": "Transfer share: message when NFC writing isn't available on the device.", "translations": { - "en": "NFC tag writing is not available on this device." + "en": "NFC tag writing is not available on this device.", + "fr": "L’écriture de tag NFC n’est pas disponible sur cet appareil." } }, "transfer_nfc_waiting": { "context": "Transfer share: prompt while waiting to write an NFC tag.", "translations": { - "en": "Hold your device near a writable NFC tag." + "en": "Hold your device near a writable NFC tag.", + "fr": "Approchez votre appareil d’un tag NFC inscriptible." } }, "transfer_nfc_written": { "context": "Transfer share: confirmation the invitation was written to the NFC tag.", "translations": { - "en": "Invitation written to the NFC tag." + "en": "Invitation written to the NFC tag.", + "fr": "Invitation écrite sur le tag NFC." } }, "transfer_no_activity": { "context": "Transfer details: empty state for the Activity section.", "translations": { - "en": "There is no activity to show yet." + "en": "There is no activity to show yet.", + "fr": "Aucune activité à afficher pour l’instant." } }, "transfer_no_receivers": { "context": "Transfer details: empty state for the Receivers section.", "translations": { - "en": "Nobody has requested this transfer yet." + "en": "Nobody has requested this transfer yet.", + "fr": "Personne n’a encore demandé ce transfert." } }, "transfer_receiver_accepted": { "context": "Receiver status: approved, waiting for the download to complete.", "translations": { - "en": "Approved — waiting for completion" + "en": "Approved — waiting for completion", + "fr": "Approuvé — en attente de la fin" } }, "transfer_receiver_completed": { "context": "Receiver status: received successfully.", "translations": { - "en": "Received successfully" + "en": "Received successfully", + "fr": "Reçu avec succès" } }, "transfer_receiver_expired": { "context": "Receiver status: the request expired.", "translations": { - "en": "Request expired" + "en": "Request expired", + "fr": "Demande expirée" } }, "transfer_receiver_refused": { "context": "Receiver status: the request was refused.", "translations": { - "en": "Request refused" + "en": "Request refused", + "fr": "Demande refusée" } }, "transfer_receiver_requested": { "context": "Receiver status: waiting for the sender's approval.", "translations": { - "en": "Waiting for your approval" + "en": "Waiting for your approval", + "fr": "En attente de votre approbation" } }, "transfer_receiver_unknown": { "context": "Receiver status: status unavailable/unknown.", "translations": { - "en": "Status unavailable" + "en": "Status unavailable", + "fr": "Statut indisponible" } }, "transfer_receivers_completed_count": { @@ -1575,13 +1823,15 @@ } ], "translations": { - "en": "{count} completed" + "en": "{count} completed", + "fr": "{count} terminés" } }, "transfer_receivers_description": { "context": "Transfer details: description under the Receivers section.", "translations": { - "en": "Requests, approvals, and completed deliveries" + "en": "Requests, approvals, and completed deliveries", + "fr": "Demandes, approbations et livraisons terminées" } }, "transfer_receivers_pending": { @@ -1593,43 +1843,50 @@ } ], "translations": { - "en": "{count} waiting" + "en": "{count} waiting", + "fr": "{count} en attente" } }, "transfer_receivers_title": { "context": "Transfer details: Receivers section title.", "translations": { - "en": "Receivers" + "en": "Receivers", + "fr": "Destinataires" } }, "transfer_scan_qr": { "context": "Transfer share: caption under the QR code.", "translations": { - "en": "Scan with VniDrop to receive this transfer" + "en": "Scan with VniDrop to receive this transfer", + "fr": "Scannez avec VniDrop pour recevoir ce transfert" } }, "transfer_share_description": { "context": "Transfer details: description under the Share section.", "translations": { - "en": "QR code, invitation file, and nearby options" + "en": "QR code, invitation file, and nearby options", + "fr": "QR code, fichier d’invitation et options à proximité" } }, "transfer_share_title": { "context": "Transfer details: Share section title.", "translations": { - "en": "Share" + "en": "Share", + "fr": "Partager" } }, "value_unavailable": { "context": "Placeholder shown when a device-info or metadata value can't be read.", "translations": { - "en": "Not available" + "en": "Not available", + "fr": "Non disponible" } }, "version_title": { "context": "Device information / Settings row: app version label.", "translations": { - "en": "App version" + "en": "App version", + "fr": "Version de l’app" } } } diff --git a/shared/src/commonMain/composeResources/values-fr/strings.xml b/shared/src/commonMain/composeResources/values-fr/strings.xml new file mode 100644 index 0000000..cf78c95 --- /dev/null +++ b/shared/src/commonMain/composeResources/values-fr/strings.xml @@ -0,0 +1,257 @@ + + + Signaler un bug + VniDrop transfère fichiers et dossiers directement d’un appareil à un autre sur le réseau, sans les téléverser vers un service d’hébergement. Aucun compte à créer, et aucune copie de votre transfert ne reste dans le cloud une fois terminé. + Un transfert direct d’appareil à appareil — vos fichiers vont droit au destinataire. + Les connexions sont authentifiées et chiffrées de bout en bout (via Iroh), et les fichiers entrants sont vérifiés par leur empreinte de contenu. + Vous décidez qui reçoit : approuvez chaque demande, ou ouvrez un transfert à toute personne disposant de l’invitation. + Sans compte — il n’y a rien à créer. + Open source, publié sous licence Apache 2.0. + Ce qu’est VniDrop + Pas un stockage cloud — aucun serveur ne détient vos fichiers, et rien n’attend dans le cloud après un transfert. + Pas une diffusion publique — une invitation est un lien d’accès privé, pas une annonce à tout le voisinage. + Pas un service de synchronisation ou de sauvegarde. + Ce que VniDrop n’est pas + Licence + Politique de confidentialité + Les invitations sont des clés d’accès. Traitez un QR code, un tag NFC ou un fichier .vnd comme un lien d’accès privé et ne le partagez qu’avec les personnes visées — en particulier avec « Toute personne disposant de ce transfert ». + Refus par défaut — VniDrop ne sert que le contenu d’un partage actif et rejette les demandes inconnues. + Les fichiers reçus sont enregistrés sur votre appareil et n’écrasent jamais un fichier existant. + Politique de confidentialité + Si deux appareils ne peuvent pas se connecter directement, la connexion chiffrée peut être relayée. Les relais ne transmettent que des paquets chiffrés ; ils ne stockent jamais vos fichiers. + Confidentialité et sécurité + Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit. + À propos + Suivre l’apparence claire ou sombre de cet appareil. + Mode sombre + Mode clair + Système + Apparence + Demande de réception + Identifiant de l’appareil : %1$s + Un appareil à proximité + %1$d demandes en attente + %1$s souhaite recevoir « %2$s ». + Niveau de batterie + nom@exemple.com + E-mail de contact (facultatif) + Dites-nous ce qui s’est passé. Nous joignons les infos de l’appareil et, en option, les journaux récents (valeurs sensibles masquées). + Informations sur l’appareil + Décrivez ce à quoi vous vous attendiez + À quoi vous attendiez-vous ? + Inclure les journaux récents + Nous aide à diagnostiquer le problème. Les valeurs sensibles sont masquées avant l’envoi. + Taille de la pièce jointe des journaux + Veuillez décrire ce à quoi vous vous attendiez. + Veuillez décrire ce qui s’est passé. + Listez les étapes pour reproduire le problème + Étapes pour reproduire (facultatif) + Envoyer le rapport + Impossible d’envoyer le rapport de bug. Réessayez plus tard. + Merci — votre rapport de bug a été enregistré. + Envoi… + Décrivez ce qui s’est passé + Que s’est-il passé ? + Approuver + Retour + Annuler + Annuler + Modifier les fichiers + Choisir des fichiers + Choisir un dossier + Effacer + Fermer + Nouveau transfert + Supprimer le transfert + Enregistrer le fichier .vnd + Partager l’invitation + Ouvrir les Réglages + Recevoir + Commencer à recevoir + Refuser + Retirer le fichier + Valeur par défaut + Réessayer + Commencer le partage + Préparation du transfert… + Afficher dans Fichiers + Écrire sur un tag NFC + Modèle de l’appareil + Nom de l’appareil + Envoyer des rapports de plantage et des événements d’utilisation anonymes pour nous aider à améliorer VniDrop. Vous pouvez désactiver cela à tout moment. Les invitations, chemins de fichiers et contenus de transfert ne sont jamais inclus. + Le partage des diagnostics est désactivé. + Le partage des diagnostics est activé. + Partager les diagnostics + L’accès à la caméra est nécessaire pour scanner un QR code. + Impossible de charger les informations de l’appareil. + VniDrop n’a pas pu accéder aux fichiers ou au dossier sélectionnés. Vérifiez les autorisations et réessayez. + Une erreur est survenue. Réessayez. + VniDrop n’a pas pu terminer son démarrage. Fermez l’app et réessayez. + Cette invitation n’a pas pu être lue. Demandez-en une nouvelle à l’expéditeur. + Cette invitation est vide. Essayez de l’ouvrir à nouveau. + La bibliothèque native de VniDrop est absente de cette version. + Ce tag NFC n’a pas pu être utilisé. Essayez-en un autre. + L’expéditeur n’a pas approuvé ce transfert, ou il a été refusé. + VniDrop n’a pas pu enregistrer les données de transfert sur cet appareil. + Impossible d’ouvrir l’élément sélectionné. Essayez de le choisir à nouveau. + Sélectionnez au moins un élément à partager. + VniDrop n’a pas pu ouvrir ses sockets réseau sur cet appareil. + VniDrop démarre encore. Rouvrez l’invitation dans un instant. + Le transfert n’a pas pu être terminé. Vérifiez votre connexion et réessayez. + Nom du destinataire + Nom de l’expéditeur + Nom du transfert + Nom d’affichage + Autorisation requise + Indisponible + Vérification du dossier… + Prêt + Fichiers + Taille + Statut + Recevoir + Envoyer + Réglages + Réseau + Soyez averti des nouvelles demandes de réception lorsque VniDrop est en arrière-plan. + Notifications activées. + Autoriser les notifications + Les notifications sont désactivées pour VniDrop. Vous pouvez les activer dans les Réglages. + Impossible d’ouvrir les réglages de notifications. + Notifications + Les notifications ne sont pas disponibles sur cet appareil. + Système d’exploitation + Enregistrer les transferts reçus dans + Préférences + Annulé + Terminé + Connecté + Connexion + Téléchargement + Échec + Préparation + Transfert interrompu + Préparation + Prêt + Réception + Demande d’accès + Enregistrement + Envoi + Envoi à %1$d + Prêt à partager + En cours… + Choisissez la méthode d’invitation à votre disposition. + Comment souhaitez-vous vous connecter ? + Effacer l’historique + Toutes les réceptions terminées, échouées et annulées seront retirées de l’historique de VniDrop. Les fichiers téléchargés resteront sur cet appareil. + Effacer l’historique de réception ? + Transfert reçu. + « %1$s » sera retiré de l’historique de VniDrop. Le fichier téléchargé restera sur cet appareil. + Supprimer de l’historique de réception + Retirer de l’historique ? + Ouvrez une invitation VniDrop, scannez un QR code ou approchez un tag NFC. + Rien reçu pour l’instant + Historique de réception effacé. + Historique + Ouvrir une invitation .vnd + Choisissez une invitation enregistrée ou partagée sur cet appareil. + Lire un tag NFC + Approchez cet appareil du tag d’invitation de l’expéditeur. + Scanner un QR code + Utilisez la caméra pour scanner le code VniDrop de l’expéditeur. + Transferts que vous avez reçus sur cet appareil. + Approchez du tag NFC… + Impossible d’ouvrir VniDrop dans Fichiers. + Vérifier le transfert + Recevoir + Transfert VniDrop + Toute personne disposant de ce transfert + Aucune approbation requise. À n’utiliser que pour des éléments que vous êtes à l’aise de partager. + Toute personne disposant de l’invitation peut télécharger jusqu’à ce que vous arrêtiez le partage. Ne l’utilisez pas pour des éléments privés ou sensibles. + Demander avant chaque téléchargement + Vous approuvez ou refusez chaque nouveau destinataire. + Qui peut le recevoir ? + Sélectionnez des fichiers ou un dossier sur cet appareil. Vous pourrez vérifier la sélection avant de créer le transfert. + Choisissez quoi partager + Créez un transfert, décidez qui peut le recevoir, puis invitez-les avec un QR code, un tag NFC ou un fichier d’invitation. + Rien partagé pour l’instant + Taille indisponible + Dossier + Créer un nouveau transfert + Nouveau transfert + Vérifier le transfert + %1$d fichiers sélectionnés + Arrêter le partage + Cela arrête le transfert et interrompt toute personne en train de le télécharger. Il reste dans votre historique en tant qu’Arrêté. + Transferts que vous partagez depuis cet appareil. + Envoyer + Transfert créé. + Détails du transfert + Vos transferts + Votre nom, l’emplacement d’enregistrement des transferts, l’apparence et les notifications. + Réglages + Ignorer + Disponible + Annulé + Terminé + Échec + Préparation + Réception + Arrêté + Calcul… + Supprimer tous les transferts + Cela efface tous les enregistrements de transferts envoyés et reçus de votre historique. Vos fichiers reçus ne sont pas supprimés. Remarque : le moteur de transfert conserve son contenu stocké, donc les données de transfert peuvent ne pas diminuer. Cette action est irréversible. + Suppression… + Les données de transfert sont gérées par le moteur de transfert — votre historique ainsi que le contenu des fichiers que vous avez partagés. Le bouton ci-dessous efface vos enregistrements de transferts ; le moteur conserve son contenu stocké, donc cette valeur peut ne pas baisser. Les fichiers reçus sont vos fichiers téléchargés et ne sont jamais supprimés ici. + Fichiers reçus + Fichiers temporaires + Stockage + Total + Données de transfert + Tous les transferts supprimés + Consultez les mises à jour importantes de ce transfert + Activité + « %1$s » cessera d’être partagé et son historique de transfert sera retiré de cet appareil. + Supprimer le transfert ? + Transfert supprimé. + Suppression… + Détails du transfert + Accès du destinataire approuvé + Un destinataire a terminé le transfert + Connexion à l’expéditeur + Téléchargement + Le transfert a rencontré un problème + Préparation de votre transfert + Prêt à partager + Accès du destinataire refusé + Un destinataire a demandé l’accès + Enregistrement + Partage arrêté + Transfert mis à jour + Invitation enregistrée. + Appareil à proximité + L’écriture de tag NFC n’est pas disponible sur cet appareil. + Approchez votre appareil d’un tag NFC inscriptible. + Invitation écrite sur le tag NFC. + Aucune activité à afficher pour l’instant. + Personne n’a encore demandé ce transfert. + Approuvé — en attente de la fin + Reçu avec succès + Demande expirée + Demande refusée + En attente de votre approbation + Statut indisponible + %1$d terminés + Demandes, approbations et livraisons terminées + %1$d en attente + Destinataires + Scannez avec VniDrop pour recevoir ce transfert + QR code, fichier d’invitation et options à proximité + Partager + Non disponible + Version de l’app + + %1$d fichier + %1$d fichiers + + From c71e1b97d9345203cc8ba88aad3475d8bbe8faf2 Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 20 Jul 2026 10:41:41 +0200 Subject: [PATCH 05/13] feat(l10n): advertise app localizations to iOS The per-app language picker in iOS Settings only appears when the built app declares multiple localizations. Add the planned languages to the Xcode project's knownRegions (so Xcode compiles their .lproj from the String Catalog), and have `generate` keep CFBundleLocalizations in Info.plist in sync with supportedLanguages (currently en, fr). --- apple/VniDrop/Resources/Info.plist | 5 +++++ localization/src/commands/generate.ts | 26 ++++++++++++++++++++++++++ localization/src/config.ts | 6 ++++++ 3 files changed, 37 insertions(+) diff --git a/apple/VniDrop/Resources/Info.plist b/apple/VniDrop/Resources/Info.plist index f19dd0c..a3c74ad 100644 --- a/apple/VniDrop/Resources/Info.plist +++ b/apple/VniDrop/Resources/Info.plist @@ -2,6 +2,11 @@ + CFBundleLocalizations + + en + fr + CADisableMinimumFrameDurationOnPhone CFBundleDevelopmentRegion diff --git a/localization/src/commands/generate.ts b/localization/src/commands/generate.ts index 6cff0bd..b51fb90 100644 --- a/localization/src/commands/generate.ts +++ b/localization/src/commands/generate.ts @@ -6,6 +6,7 @@ import { mkdirSync } from "node:fs"; import { join } from "node:path"; import { + APPLE_INFO_PLIST, APPLE_XCSTRINGS, kmpValuesDir, KMP_RESOURCES, @@ -79,6 +80,29 @@ function buildAndroid(doc: StringsFile, lang: string): ParsedAndroid { return out; } +// ---- Apple Info.plist CFBundleLocalizations --------------------------------- + +/** + * Keep the app's CFBundleLocalizations in sync with supportedLanguages so iOS + * advertises the languages (and shows the per-app language picker in Settings). + * Replaces an existing array or inserts one right after the root . + */ +async function syncInfoPlistLocalizations(langs: string[]) { + const plist = await Bun.file(APPLE_INFO_PLIST).text(); + const items = langs.map((l) => `\t\t${l}`).join("\n"); + const block = `\tCFBundleLocalizations\n\t\n${items}\n\t\n`; + + const existing = /\t*CFBundleLocalizations<\/key>\s*[\s\S]*?<\/array>\n/; + const next = existing.test(plist) + ? plist.replace(existing, block) + : plist.replace(/(\n)/, `$1${block}`); + + if (next !== plist) { + await Bun.write(APPLE_INFO_PLIST, next); + console.log(`Updated CFBundleLocalizations in ${APPLE_INFO_PLIST}`); + } +} + // ---- entry ------------------------------------------------------------------ export async function generate() { @@ -87,6 +111,8 @@ export async function generate() { await Bun.write(APPLE_XCSTRINGS, renderXcstrings(buildXcstrings(doc))); console.log(`Wrote ${APPLE_XCSTRINGS}`); + await syncInfoPlistLocalizations(doc.supportedLanguages); + for (const lang of doc.supportedLanguages) { const dir = join(KMP_RESOURCES, kmpValuesDir(lang, doc.sourceLanguage)); mkdirSync(dir, { recursive: true }); diff --git a/localization/src/config.ts b/localization/src/config.ts index 8b9a6fd..ace576f 100644 --- a/localization/src/config.ts +++ b/localization/src/config.ts @@ -12,6 +12,12 @@ export const APPLE_XCSTRINGS = join( "apple/VniDrop/Resources/Localizable.xcstrings", ); +/** Apple app Info.plist — its CFBundleLocalizations is kept in sync with supportedLanguages. */ +export const APPLE_INFO_PLIST = join( + REPO_ROOT, + "apple/VniDrop/Resources/Info.plist", +); + /** KMP / Compose Multiplatform resources root; one values[-lang]/strings.xml per language. */ export const KMP_RESOURCES = join( REPO_ROOT, From 141be2e55acec078bea985d1605cf093ab5cf067 Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 20 Jul 2026 11:11:12 +0200 Subject: [PATCH 06/13] feat(l10n): add Spanish translations Translate all 253 user-facing strings to Spanish (formal "usted"), including the transfer_file_count plural. Generates values-es/strings.xml for KMP, es localizations in the Apple catalog, and adds es to CFBundleLocalizations. --- apple/VniDrop/Resources/Info.plist | 1 + apple/VniDrop/Resources/Localizable.xcstrings | 1530 +++++++++++++++++ localization/strings.json | 763 +++++--- .../composeResources/values-es/strings.xml | 257 +++ 4 files changed, 2298 insertions(+), 253 deletions(-) create mode 100644 shared/src/commonMain/composeResources/values-es/strings.xml diff --git a/apple/VniDrop/Resources/Info.plist b/apple/VniDrop/Resources/Info.plist index a3c74ad..aeec316 100644 --- a/apple/VniDrop/Resources/Info.plist +++ b/apple/VniDrop/Resources/Info.plist @@ -6,6 +6,7 @@ en fr + es CADisableMinimumFrameDurationOnPhone diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index 8f943bb..d020405 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -15,6 +15,12 @@ "value": "%1$@ %2$@ · %3$@" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -33,6 +39,12 @@ "value": "%1$@ · %2$@" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -55,6 +67,12 @@ "value": "Report a bug" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Informar de un error" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -73,6 +91,12 @@ "value": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop transfiere archivos y carpetas directamente de un dispositivo a otro a través de la red, sin subirlos a ningún servicio de alojamiento. No hay que crear ninguna cuenta y no queda ninguna copia de su transferencia en la nube una vez que termina." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -91,6 +115,12 @@ "value": "A direct device-to-device transfer — your files go straight to the receiver." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Una transferencia directa entre dispositivos: sus archivos van directamente al destinatario." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -109,6 +139,12 @@ "value": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Las conexiones están autenticadas y cifradas de extremo a extremo (mediante Iroh), y los archivos entrantes se verifican por su huella de contenido." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -127,6 +163,12 @@ "value": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Usted decide quién recibe: apruebe cada solicitud o abra una transferencia a cualquiera que tenga la invitación." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -145,6 +187,12 @@ "value": "Account-free — there’s nothing to sign up for." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Sin cuenta: no hay nada que registrar." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -163,6 +211,12 @@ "value": "Open source, released under the Apache 2.0 license." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Código abierto, publicado bajo la licencia Apache 2.0." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -181,6 +235,12 @@ "value": "What VniDrop is" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Qué es VniDrop" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -199,6 +259,12 @@ "value": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No es almacenamiento en la nube: ningún servidor guarda sus archivos y nada queda en la nube después de una transferencia." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -217,6 +283,12 @@ "value": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No es difusión pública: una invitación es un enlace de acceso privado, no un anuncio para todos los que estén cerca." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -235,6 +307,12 @@ "value": "Not a sync or backup service." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No es un servicio de sincronización ni de copia de seguridad." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -253,6 +331,12 @@ "value": "What VniDrop isn’t" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Qué no es VniDrop" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -271,6 +355,12 @@ "value": "License" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Licencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -289,6 +379,12 @@ "value": "Privacy policy" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Política de privacidad" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -307,6 +403,12 @@ "value": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Las invitaciones son claves de acceso. Trate un código QR, una etiqueta NFC o un archivo .vnd como un enlace de acceso privado y compártalo solo con las personas previstas, especialmente con «Cualquiera que tenga esta transferencia»." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -325,6 +427,12 @@ "value": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Denegación por defecto: VniDrop solo sirve el contenido de un recurso compartido activo y rechaza las solicitudes desconocidas." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -343,6 +451,12 @@ "value": "Received files are saved on your device and never silently overwrite an existing file." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Los archivos recibidos se guardan en su dispositivo y nunca sobrescriben un archivo existente." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -361,6 +475,12 @@ "value": "Privacy policy" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Política de privacidad" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -379,6 +499,12 @@ "value": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Si dos dispositivos no pueden conectarse directamente, la conexión cifrada puede retransmitirse. Los relés solo reenvían paquetes cifrados; nunca almacenan sus archivos." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -397,6 +523,12 @@ "value": "Privacy & security" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Privacidad y seguridad" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -415,6 +547,12 @@ "value": "Send files directly. Stay in control of who receives them." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Envíe archivos directamente. Mantenga el control de quién los recibe." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -433,6 +571,12 @@ "value": "About" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Acerca de" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -451,6 +595,12 @@ "value": "Match this device’s light or dark appearance." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Seguir la apariencia clara u oscura de este dispositivo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -469,6 +619,12 @@ "value": "Dark mode" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Modo oscuro" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -487,6 +643,12 @@ "value": "Light mode" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Modo claro" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -505,6 +667,12 @@ "value": "System" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Sistema" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -523,6 +691,12 @@ "value": "Appearance" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Apariencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -541,6 +715,12 @@ "value": "Receive request" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Solicitud de recepción" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -559,6 +739,12 @@ "value": "Device ID: %1$@" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "ID del dispositivo: %1$@" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -577,6 +763,12 @@ "value": "A nearby device" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Un dispositivo cercano" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -595,6 +787,12 @@ "value": "%1$d requests waiting" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d solicitudes en espera" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -613,6 +811,12 @@ "value": "%1$@ wants to receive “%2$@”." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ quiere recibir «%2$@»." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -631,6 +835,12 @@ "value": "Battery level" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nivel de batería" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -649,6 +859,12 @@ "value": "name@example.com" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "nombre@ejemplo.com" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -667,6 +883,12 @@ "value": "Contact email (optional)" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Correo de contacto (opcional)" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -685,6 +907,12 @@ "value": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted)." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cuéntenos qué salió mal. Adjuntamos información del dispositivo y, opcionalmente, registros recientes (con los valores sensibles ocultos)." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -703,6 +931,12 @@ "value": "Device information" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Información del dispositivo" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -721,6 +955,12 @@ "value": "Describe what you expected to happen" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Describa lo que esperaba que ocurriera" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -739,6 +979,12 @@ "value": "What did you expect?" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Qué esperaba?" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -757,6 +1003,12 @@ "value": "Include recent logs" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Incluir registros recientes" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -775,6 +1027,12 @@ "value": "Helps us diagnose the issue. Sensitive values are redacted before sending." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nos ayuda a diagnosticar el problema. Los valores sensibles se ocultan antes de enviarlos." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -793,6 +1051,12 @@ "value": "Log attachment size" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Tamaño del archivo de registros" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -811,6 +1075,12 @@ "value": "Please describe what you expected." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Describa lo que esperaba." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -829,6 +1099,12 @@ "value": "Please describe what happened." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Describa lo que ocurrió." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -847,6 +1123,12 @@ "value": "List the steps to reproduce the issue" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enumere los pasos para reproducir el problema" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -865,6 +1147,12 @@ "value": "Steps to reproduce (optional)" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Pasos para reproducir (opcional)" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -883,6 +1171,12 @@ "value": "Submit report" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar informe" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -901,6 +1195,12 @@ "value": "Could not submit the bug report. Try again later." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No se pudo enviar el informe de error. Inténtelo de nuevo más tarde." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -919,6 +1219,12 @@ "value": "Thanks — your bug report was recorded." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Gracias: su informe de error se ha registrado." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -937,6 +1243,12 @@ "value": "Submitting…" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enviando…" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -955,6 +1267,12 @@ "value": "Describe what happened" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Describa lo que ocurrió" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -973,6 +1291,12 @@ "value": "What happened?" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Qué ocurrió?" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -991,6 +1315,12 @@ "value": "Approve" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Aprobar" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1009,6 +1339,12 @@ "value": "Back" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Atrás" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1027,6 +1363,12 @@ "value": "Cancel" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelar" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1045,6 +1387,12 @@ "value": "Cancel" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelar" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1063,6 +1411,12 @@ "value": "Change files" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cambiar archivos" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1081,6 +1435,12 @@ "value": "Choose files" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Elegir archivos" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1099,6 +1459,12 @@ "value": "Choose folder" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Elegir carpeta" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1117,6 +1483,12 @@ "value": "Clear" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Borrar" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1135,6 +1507,12 @@ "value": "Close" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cerrar" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1153,6 +1531,12 @@ "value": "New transfer" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nueva transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1171,6 +1555,12 @@ "value": "Delete transfer" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1189,6 +1579,12 @@ "value": "Save .vnd file" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Guardar archivo .vnd" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1207,6 +1603,12 @@ "value": "Share invitation" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Compartir invitación" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1225,6 +1627,12 @@ "value": "Open Settings" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Abrir Ajustes" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1243,6 +1651,12 @@ "value": "Receive" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Recibir" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1261,6 +1675,12 @@ "value": "Start receiving" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Empezar a recibir" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1279,6 +1699,12 @@ "value": "Refuse" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Rechazar" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1297,6 +1723,12 @@ "value": "Remove file" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Quitar archivo" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1315,6 +1747,12 @@ "value": "Use default" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Usar predeterminado" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1333,6 +1771,12 @@ "value": "Retry" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Reintentar" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1351,6 +1795,12 @@ "value": "Start sharing" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Empezar a compartir" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1369,6 +1819,12 @@ "value": "Preparing transfer…" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preparando la transferencia…" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1387,6 +1843,12 @@ "value": "Show in Files" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Mostrar en Archivos" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1405,6 +1867,12 @@ "value": "Write to NFC tag" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Escribir en etiqueta NFC" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1423,6 +1891,12 @@ "value": "Device model" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Modelo del dispositivo" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1441,6 +1915,12 @@ "value": "Device name" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nombre del dispositivo" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1459,6 +1939,12 @@ "value": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar informes de fallos y eventos de uso anónimos para ayudarnos a mejorar VniDrop. Puede desactivarlo en cualquier momento. Las invitaciones, las rutas de archivos y el contenido de las transferencias nunca se incluyen." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1477,6 +1963,12 @@ "value": "Diagnostics sharing is off." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "El uso compartido de diagnósticos está desactivado." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1495,6 +1987,12 @@ "value": "Diagnostics sharing is on." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "El uso compartido de diagnósticos está activado." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1513,6 +2011,12 @@ "value": "Share diagnostics" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Compartir diagnósticos" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1531,6 +2035,12 @@ "value": "Camera access is required to scan a QR code." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Se necesita acceso a la cámara para escanear un código QR." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1549,6 +2059,12 @@ "value": "Could not load device information." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No se pudo cargar la información del dispositivo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1567,6 +2083,12 @@ "value": "VniDrop could not access the selected files or folder. Check permissions and try again." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop no pudo acceder a los archivos o la carpeta seleccionados. Compruebe los permisos e inténtelo de nuevo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1585,6 +2107,12 @@ "value": "Something went wrong. Try again." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Algo salió mal. Inténtelo de nuevo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1603,6 +2131,12 @@ "value": "VniDrop could not finish starting up. Close the app and try again." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop no pudo terminar de iniciarse. Cierre la app e inténtelo de nuevo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1621,6 +2155,12 @@ "value": "This invitation could not be read. Ask the sender for a new one." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No se pudo leer esta invitación. Pida al remitente una nueva." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1639,6 +2179,12 @@ "value": "That invitation is empty. Try opening it again." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Esa invitación está vacía. Intente abrirla de nuevo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1657,6 +2203,12 @@ "value": "The native VniDrop library is missing from this build." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Falta la biblioteca nativa de VniDrop en esta versión." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1675,6 +2227,12 @@ "value": "This NFC tag could not be used. Try another tag." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No se pudo usar esta etiqueta NFC. Pruebe con otra." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1693,6 +2251,12 @@ "value": "The sender has not approved this transfer, or it was refused." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "El remitente no ha aprobado esta transferencia, o fue rechazada." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1711,6 +2275,12 @@ "value": "VniDrop could not save transfer data on this device." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop no pudo guardar los datos de la transferencia en este dispositivo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1729,6 +2299,12 @@ "value": "Could not open the selected item. Try choosing it again." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No se pudo abrir el elemento seleccionado. Intente elegirlo de nuevo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1747,6 +2323,12 @@ "value": "Select at least one item to share." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Seleccione al menos un elemento para compartir." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1765,6 +2347,12 @@ "value": "VniDrop could not open its network sockets on this device." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop no pudo abrir sus sockets de red en este dispositivo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1783,6 +2371,12 @@ "value": "VniDrop is still starting. Open the invitation again in a moment." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop todavía se está iniciando. Vuelva a abrir la invitación en un momento." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1801,6 +2395,12 @@ "value": "The transfer could not be completed. Check your connection and try again." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No se pudo completar la transferencia. Compruebe su conexión e inténtelo de nuevo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1819,6 +2419,12 @@ "value": "Receiver name" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nombre del destinatario" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1837,6 +2443,12 @@ "value": "Sender name" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nombre del remitente" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1855,6 +2467,12 @@ "value": "Transfer name" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nombre de la transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1873,6 +2491,12 @@ "value": "Display name" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nombre visible" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1891,6 +2515,12 @@ "value": "Permission needed" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Permiso necesario" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1909,6 +2539,12 @@ "value": "Unavailable" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No disponible" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1927,6 +2563,12 @@ "value": "Checking folder…" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Comprobando carpeta…" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1945,6 +2587,12 @@ "value": "Ready" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Listo" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1963,6 +2611,12 @@ "value": "Files" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Archivos" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1981,6 +2635,12 @@ "value": "Size" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Tamaño" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -1999,6 +2659,12 @@ "value": "Status" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Estado" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2017,6 +2683,12 @@ "value": "Receive" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Recibir" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2035,6 +2707,12 @@ "value": "Send" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2053,6 +2731,12 @@ "value": "Settings" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Ajustes" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2071,6 +2755,12 @@ "value": "Network" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Red" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2089,6 +2779,12 @@ "value": "Get notified about new receive requests while VniDrop is in the background." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Reciba avisos sobre nuevas solicitudes de recepción cuando VniDrop está en segundo plano." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2107,6 +2803,12 @@ "value": "Notifications enabled." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Notificaciones activadas." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2125,6 +2827,12 @@ "value": "Allow notifications" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Permitir notificaciones" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2143,6 +2851,12 @@ "value": "Notifications are turned off for VniDrop. You can enable them in Settings." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Las notificaciones están desactivadas para VniDrop. Puede activarlas en Ajustes." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2161,6 +2875,12 @@ "value": "Could not open notification settings." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No se pudieron abrir los ajustes de notificaciones." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2179,6 +2899,12 @@ "value": "Notifications" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Notificaciones" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2197,6 +2923,12 @@ "value": "Notifications are not available on this device." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Las notificaciones no están disponibles en este dispositivo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2215,6 +2947,12 @@ "value": "Operating system" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Sistema operativo" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2233,6 +2971,12 @@ "value": "Save received transfers to" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Guardar las transferencias recibidas en" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2251,6 +2995,12 @@ "value": "Preferences" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preferencias" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2269,6 +3019,12 @@ "value": "Cancelled" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelado" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2287,6 +3043,12 @@ "value": "Completed" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Completado" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2305,6 +3067,12 @@ "value": "Connected" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Conectado" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2323,6 +3091,12 @@ "value": "Connecting" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Conectando" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2341,6 +3115,12 @@ "value": "Downloading" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Descargando" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2359,6 +3139,12 @@ "value": "Failed" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Fallido" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2377,6 +3163,12 @@ "value": "Getting ready" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preparándose" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2395,6 +3187,12 @@ "value": "Transfer interrupted" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencia interrumpida" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2413,6 +3211,12 @@ "value": "Preparing" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preparando" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2431,6 +3235,12 @@ "value": "Ready" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Listo" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2449,6 +3259,12 @@ "value": "Receiving" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Recibiendo" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2467,6 +3283,12 @@ "value": "Requesting access" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Solicitando acceso" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2485,6 +3307,12 @@ "value": "Saving" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Guardando" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2503,6 +3331,12 @@ "value": "Sending" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enviando" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2521,6 +3355,12 @@ "value": "Sending to %1$d" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enviando a %1$d" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2539,6 +3379,12 @@ "value": "Ready to share" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Listo para compartir" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2557,6 +3403,12 @@ "value": "Working…" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Trabajando…" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2575,6 +3427,12 @@ "value": "Choose the invitation method available to you." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Elija el método de invitación de que disponga." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2593,6 +3451,12 @@ "value": "How would you like to connect?" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Cómo quiere conectarse?" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2611,6 +3475,12 @@ "value": "Clear history" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Borrar historial" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2629,6 +3499,12 @@ "value": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Todas las recepciones completadas, fallidas y canceladas se eliminarán del historial de VniDrop. Los archivos descargados permanecerán en este dispositivo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2647,6 +3523,12 @@ "value": "Clear receive history?" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Borrar el historial de recepción?" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2665,6 +3547,12 @@ "value": "Transfer received." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencia recibida." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2683,6 +3571,12 @@ "value": "“%1$@” will be removed from VniDrop’s history. The downloaded file will remain on this device." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "«%1$@» se eliminará del historial de VniDrop. El archivo descargado permanecerá en este dispositivo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2701,6 +3595,12 @@ "value": "Delete from receive history" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar del historial de recepción" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2719,6 +3619,12 @@ "value": "Remove from history?" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Quitar del historial?" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2737,6 +3643,12 @@ "value": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Abra una invitación de VniDrop, escanee un código QR o acerque una etiqueta NFC." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2755,6 +3667,12 @@ "value": "Nothing received yet" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Aún no se ha recibido nada" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2773,6 +3691,12 @@ "value": "Receive history cleared." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Historial de recepción borrado." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2791,6 +3715,12 @@ "value": "History" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Historial" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2809,6 +3739,12 @@ "value": "Open a .vnd invitation" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Abrir una invitación .vnd" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2827,6 +3763,12 @@ "value": "Choose an invitation saved or shared to this device." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Elija una invitación guardada o compartida en este dispositivo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2845,6 +3787,12 @@ "value": "Read NFC tag" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Leer etiqueta NFC" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2863,6 +3811,12 @@ "value": "Hold this device near the sender’s invitation tag." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Acerque este dispositivo a la etiqueta de invitación del remitente." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2881,6 +3835,12 @@ "value": "Scan QR code" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Escanear código QR" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2899,6 +3859,12 @@ "value": "Use the camera to scan the sender’s VniDrop code." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Use la cámara para escanear el código de VniDrop del remitente." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2917,6 +3883,12 @@ "value": "Transfers you’ve received on this device." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencias que ha recibido en este dispositivo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2935,6 +3907,12 @@ "value": "Hold near the NFC tag…" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Acerque a la etiqueta NFC…" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2953,6 +3931,12 @@ "value": "Couldn’t open VniDrop in Files." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No se pudo abrir VniDrop en Archivos." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2971,6 +3955,12 @@ "value": "Review transfer" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Revisar transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -2989,6 +3979,12 @@ "value": "Receive" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Recibir" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3007,6 +4003,12 @@ "value": "VniDrop transfer" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencia de VniDrop" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3025,6 +4027,12 @@ "value": "Anyone with this transfer" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cualquiera que tenga esta transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3043,6 +4051,12 @@ "value": "No approval is required. Only use this for items you are comfortable sharing." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No se requiere aprobación. Úselo solo para elementos que no le importe compartir." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3061,6 +4075,12 @@ "value": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cualquiera que tenga la invitación puede descargar hasta que deje de compartir. No lo use para elementos privados o sensibles." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3079,6 +4099,12 @@ "value": "Ask before each download" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preguntar antes de cada descarga" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3097,6 +4123,12 @@ "value": "You approve or refuse every new receiver." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Usted aprueba o rechaza a cada nuevo destinatario." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3115,6 +4147,12 @@ "value": "Who can receive it?" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Quién puede recibirla?" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3133,6 +4171,12 @@ "value": "Select files or a folder from this device. You can review the selection before creating the transfer." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Seleccione archivos o una carpeta de este dispositivo. Podrá revisar la selección antes de crear la transferencia." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3151,6 +4195,12 @@ "value": "Choose what to share" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Elija qué compartir" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3169,6 +4219,12 @@ "value": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cree una transferencia, decida quién puede recibirla y luego invite a esas personas con un código QR, una etiqueta NFC o un archivo de invitación." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3187,6 +4243,12 @@ "value": "Nothing shared yet" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Aún no se ha compartido nada" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3205,6 +4267,12 @@ "value": "Size unavailable" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Tamaño no disponible" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3223,6 +4291,12 @@ "value": "Folder" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Carpeta" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3241,6 +4315,12 @@ "value": "Create a new transfer" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Crear una nueva transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3259,6 +4339,12 @@ "value": "New transfer" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nueva transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3277,6 +4363,12 @@ "value": "Review transfer" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Revisar transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3295,6 +4387,12 @@ "value": "%1$d files selected" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d archivos seleccionados" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3313,6 +4411,12 @@ "value": "Stop sharing" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Dejar de compartir" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3331,6 +4435,12 @@ "value": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Esto detiene la transferencia e interrumpe a quien esté descargándola. Permanece en su historial como Detenida." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3349,6 +4459,12 @@ "value": "Transfers you’re sharing from this device." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencias que está compartiendo desde este dispositivo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3367,6 +4483,12 @@ "value": "Send" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3385,6 +4507,12 @@ "value": "Transfer created." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencia creada." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3403,6 +4531,12 @@ "value": "Transfer details" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Detalles de la transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3421,6 +4555,12 @@ "value": "Your transfers" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Sus transferencias" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3439,6 +4579,12 @@ "value": "Your name, where transfers are saved, appearance, and notifications." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Su nombre, dónde se guardan las transferencias, la apariencia y las notificaciones." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3457,6 +4603,12 @@ "value": "Settings" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Ajustes" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3475,6 +4627,12 @@ "value": "Dismiss" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Descartar" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3493,6 +4651,12 @@ "value": "Available" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Disponible" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3511,6 +4675,12 @@ "value": "Cancelled" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelado" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3529,6 +4699,12 @@ "value": "Completed" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Completado" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3547,6 +4723,12 @@ "value": "Failed" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Fallido" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3565,6 +4747,12 @@ "value": "Preparing" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preparando" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3583,6 +4771,12 @@ "value": "Receiving" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Recibiendo" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3601,6 +4795,12 @@ "value": "Stopped" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Detenido" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3619,6 +4819,12 @@ "value": "Calculating…" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Calculando…" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3637,6 +4843,12 @@ "value": "Delete all transfers" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar todas las transferencias" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3655,6 +4867,12 @@ "value": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Esto borra todos los registros de transferencias enviadas y recibidas de su historial. Sus archivos recibidos no se eliminan. Nota: el motor de transferencia conserva su contenido almacenado, por lo que los datos de transferencia pueden no disminuir. Esto no se puede deshacer." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3673,6 +4891,12 @@ "value": "Deleting…" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminando…" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3691,6 +4915,12 @@ "value": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Los datos de transferencia los gestiona el motor de transferencia: su historial más el contenido de los archivos que ha compartido. El botón de abajo borra sus registros de transferencias; el motor conserva su contenido almacenado, por lo que este valor puede no bajar. Los archivos recibidos son los archivos que ha descargado y nunca se eliminan aquí." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3709,6 +4939,12 @@ "value": "Received files" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Archivos recibidos" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3727,6 +4963,12 @@ "value": "Temporary files" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Archivos temporales" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3745,6 +4987,12 @@ "value": "Storage" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Almacenamiento" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3763,6 +5011,12 @@ "value": "Total" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Total" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3781,6 +5035,12 @@ "value": "Transfer data" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Datos de transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3799,6 +5059,12 @@ "value": "All transfers deleted" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Todas las transferencias eliminadas" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3817,6 +5083,12 @@ "value": "See important updates for this transfer" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Vea las actualizaciones importantes de esta transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3835,6 +5107,12 @@ "value": "Activity" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Actividad" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3853,6 +5131,12 @@ "value": "“%1$@” will stop being shared and its transfer history will be removed from this device." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "«%1$@» dejará de compartirse y su historial de transferencia se eliminará de este dispositivo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3871,6 +5155,12 @@ "value": "Delete transfer?" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Eliminar la transferencia?" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3889,6 +5179,12 @@ "value": "Transfer deleted." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencia eliminada." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3907,6 +5203,12 @@ "value": "Deleting…" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminando…" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3925,6 +5227,12 @@ "value": "Transfer details" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Detalles de la transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3943,6 +5251,12 @@ "value": "Receiver access approved" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Acceso del destinatario aprobado" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3961,6 +5275,12 @@ "value": "A receiver completed the transfer" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinatario completó la transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3979,6 +5299,12 @@ "value": "Connecting to sender" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Conectando con el remitente" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -3997,6 +5323,12 @@ "value": "Downloading" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Descargando" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4015,6 +5347,12 @@ "value": "The transfer encountered a problem" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "La transferencia tuvo un problema" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4033,6 +5371,12 @@ "value": "Preparing your transfer" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preparando su transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4051,6 +5395,12 @@ "value": "Ready to share" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Listo para compartir" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4069,6 +5419,12 @@ "value": "Receiver access refused" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Acceso del destinatario rechazado" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4087,6 +5443,12 @@ "value": "A receiver requested access" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinatario solicitó acceso" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4105,6 +5467,12 @@ "value": "Saving" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Guardando" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4123,6 +5491,12 @@ "value": "Sharing stopped" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Se dejó de compartir" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4141,6 +5515,12 @@ "value": "Transfer updated" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencia actualizada" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4171,6 +5551,24 @@ } } }, + "es": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d archivo" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d archivos" + } + } + } + } + }, "fr": { "variations": { "plural": { @@ -4201,6 +5599,12 @@ "value": "Invitation saved." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Invitación guardada." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4219,6 +5623,12 @@ "value": "Nearby device" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Dispositivo cercano" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4237,6 +5647,12 @@ "value": "NFC tag writing is not available on this device." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "La escritura de etiquetas NFC no está disponible en este dispositivo." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4255,6 +5671,12 @@ "value": "Hold your device near a writable NFC tag." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Acerque su dispositivo a una etiqueta NFC grabable." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4273,6 +5695,12 @@ "value": "Invitation written to the NFC tag." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Invitación escrita en la etiqueta NFC." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4291,6 +5719,12 @@ "value": "There is no activity to show yet." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Todavía no hay actividad que mostrar." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4309,6 +5743,12 @@ "value": "Nobody has requested this transfer yet." } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nadie ha solicitado aún esta transferencia." + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4327,6 +5767,12 @@ "value": "Approved — waiting for completion" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Aprobado: esperando a que se complete" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4345,6 +5791,12 @@ "value": "Received successfully" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Recibido correctamente" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4363,6 +5815,12 @@ "value": "Request expired" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Solicitud caducada" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4381,6 +5839,12 @@ "value": "Request refused" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Solicitud rechazada" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4399,6 +5863,12 @@ "value": "Waiting for your approval" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Esperando su aprobación" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4417,6 +5887,12 @@ "value": "Status unavailable" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Estado no disponible" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4435,6 +5911,12 @@ "value": "%1$d completed" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d completados" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4453,6 +5935,12 @@ "value": "Requests, approvals, and completed deliveries" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Solicitudes, aprobaciones y entregas completadas" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4471,6 +5959,12 @@ "value": "%1$d waiting" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d en espera" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4489,6 +5983,12 @@ "value": "Receivers" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Destinatarios" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4507,6 +6007,12 @@ "value": "Scan with VniDrop to receive this transfer" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Escanee con VniDrop para recibir esta transferencia" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4525,6 +6031,12 @@ "value": "QR code, invitation file, and nearby options" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Código QR, archivo de invitación y opciones cercanas" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4543,6 +6055,12 @@ "value": "Share" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Compartir" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4561,6 +6079,12 @@ "value": "Not available" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No disponible" + } + }, "fr": { "stringUnit": { "state": "needs_review", @@ -4579,6 +6103,12 @@ "value": "App version" } }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Versión de la app" + } + }, "fr": { "stringUnit": { "state": "needs_review", diff --git a/localization/strings.json b/localization/strings.json index a375f30..2ca208c 100644 --- a/localization/strings.json +++ b/localization/strings.json @@ -3,7 +3,8 @@ "sourceLanguage": "en", "supportedLanguages": [ "en", - "fr" + "fr", + "es" ], "strings": { "%@": { @@ -33,7 +34,8 @@ ], "translations": { "en": "{arg1} {arg2} · {arg3}", - "fr": "{arg1} {arg2} · {arg3}" + "fr": "{arg1} {arg2} · {arg3}", + "es": "{arg1} {arg2} · {arg3}" } }, "%@ · %@": { @@ -53,7 +55,8 @@ ], "translations": { "en": "{arg1} · {arg2}", - "fr": "{arg1} · {arg2}" + "fr": "{arg1} · {arg2}", + "es": "{arg1} · {arg2}" } }, "%@%%": { @@ -66,196 +69,224 @@ "context": "About screen: button/link that opens the bug report form.", "translations": { "en": "Report a bug", - "fr": "Signaler un bug" + "fr": "Signaler un bug", + "es": "Informar de un error" } }, "about_description": { "context": "About screen: intro paragraph describing what VniDrop does.", "translations": { "en": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done.", - "fr": "VniDrop transfère fichiers et dossiers directement d’un appareil à un autre sur le réseau, sans les téléverser vers un service d’hébergement. Aucun compte à créer, et aucune copie de votre transfert ne reste dans le cloud une fois terminé." + "fr": "VniDrop transfère fichiers et dossiers directement d’un appareil à un autre sur le réseau, sans les téléverser vers un service d’hébergement. Aucun compte à créer, et aucune copie de votre transfert ne reste dans le cloud une fois terminé.", + "es": "VniDrop transfiere archivos y carpetas directamente de un dispositivo a otro a través de la red, sin subirlos a ningún servicio de alojamiento. No hay que crear ninguna cuenta y no queda ninguna copia de su transferencia en la nube una vez que termina." } }, "about_is_direct": { "context": "About screen, 'What VniDrop is' list: point about direct device-to-device transfer.", "translations": { "en": "A direct device-to-device transfer — your files go straight to the receiver.", - "fr": "Un transfert direct d’appareil à appareil — vos fichiers vont droit au destinataire." + "fr": "Un transfert direct d’appareil à appareil — vos fichiers vont droit au destinataire.", + "es": "Una transferencia directa entre dispositivos: sus archivos van directamente al destinatario." } }, "about_is_encrypted": { "context": "About screen, 'What VniDrop is' list: point about encrypted, verified connections.", "translations": { "en": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash.", - "fr": "Les connexions sont authentifiées et chiffrées de bout en bout (via Iroh), et les fichiers entrants sont vérifiés par leur empreinte de contenu." + "fr": "Les connexions sont authentifiées et chiffrées de bout en bout (via Iroh), et les fichiers entrants sont vérifiés par leur empreinte de contenu.", + "es": "Las conexiones están autenticadas y cifradas de extremo a extremo (mediante Iroh), y los archivos entrantes se verifican por su huella de contenido." } }, "about_is_in_control": { "context": "About screen, 'What VniDrop is' list: point about controlling who receives.", "translations": { "en": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation.", - "fr": "Vous décidez qui reçoit : approuvez chaque demande, ou ouvrez un transfert à toute personne disposant de l’invitation." + "fr": "Vous décidez qui reçoit : approuvez chaque demande, ou ouvrez un transfert à toute personne disposant de l’invitation.", + "es": "Usted decide quién recibe: apruebe cada solicitud o abra una transferencia a cualquiera que tenga la invitación." } }, "about_is_no_account": { "context": "About screen, 'What VniDrop is' list: point about being account-free.", "translations": { "en": "Account-free — there’s nothing to sign up for.", - "fr": "Sans compte — il n’y a rien à créer." + "fr": "Sans compte — il n’y a rien à créer.", + "es": "Sin cuenta: no hay nada que registrar." } }, "about_is_open": { "context": "About screen, 'What VniDrop is' list: point about being open source.", "translations": { "en": "Open source, released under the Apache 2.0 license.", - "fr": "Open source, publié sous licence Apache 2.0." + "fr": "Open source, publié sous licence Apache 2.0.", + "es": "Código abierto, publicado bajo la licencia Apache 2.0." } }, "about_is_title": { "context": "About screen: section heading for the 'What VniDrop is' list.", "translations": { "en": "What VniDrop is", - "fr": "Ce qu’est VniDrop" + "fr": "Ce qu’est VniDrop", + "es": "Qué es VniDrop" } }, "about_isnt_cloud": { "context": "About screen, 'What VniDrop isn't' list: point about not being cloud storage.", "translations": { "en": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer.", - "fr": "Pas un stockage cloud — aucun serveur ne détient vos fichiers, et rien n’attend dans le cloud après un transfert." + "fr": "Pas un stockage cloud — aucun serveur ne détient vos fichiers, et rien n’attend dans le cloud après un transfert.", + "es": "No es almacenamiento en la nube: ningún servidor guarda sus archivos y nada queda en la nube después de una transferencia." } }, "about_isnt_public": { "context": "About screen, 'What VniDrop isn't' list: point about invitations not being public broadcasts.", "translations": { "en": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby.", - "fr": "Pas une diffusion publique — une invitation est un lien d’accès privé, pas une annonce à tout le voisinage." + "fr": "Pas une diffusion publique — une invitation est un lien d’accès privé, pas une annonce à tout le voisinage.", + "es": "No es difusión pública: una invitación es un enlace de acceso privado, no un anuncio para todos los que estén cerca." } }, "about_isnt_sync": { "context": "About screen, 'What VniDrop isn't' list: point about not being sync/backup.", "translations": { "en": "Not a sync or backup service.", - "fr": "Pas un service de synchronisation ou de sauvegarde." + "fr": "Pas un service de synchronisation ou de sauvegarde.", + "es": "No es un servicio de sincronización ni de copia de seguridad." } }, "about_isnt_title": { "context": "About screen: section heading for the 'What VniDrop isn't' list.", "translations": { "en": "What VniDrop isn’t", - "fr": "Ce que VniDrop n’est pas" + "fr": "Ce que VniDrop n’est pas", + "es": "Qué no es VniDrop" } }, "about_license_label": { "context": "About screen: label for the license row.", "translations": { "en": "License", - "fr": "Licence" + "fr": "Licence", + "es": "Licencia" } }, "about_privacy": { "context": "About screen: link to the privacy policy.", "translations": { "en": "Privacy policy", - "fr": "Politique de confidentialité" + "fr": "Politique de confidentialité", + "es": "Política de privacidad" } }, "about_privacy_capability": { "context": "About screen, Privacy & security list: point that invitations are capabilities to share carefully.", "translations": { "en": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”", - "fr": "Les invitations sont des clés d’accès. Traitez un QR code, un tag NFC ou un fichier .vnd comme un lien d’accès privé et ne le partagez qu’avec les personnes visées — en particulier avec « Toute personne disposant de ce transfert »." + "fr": "Les invitations sont des clés d’accès. Traitez un QR code, un tag NFC ou un fichier .vnd comme un lien d’accès privé et ne le partagez qu’avec les personnes visées — en particulier avec « Toute personne disposant de ce transfert ».", + "es": "Las invitaciones son claves de acceso. Trate un código QR, una etiqueta NFC o un archivo .vnd como un enlace de acceso privado y compártalo solo con las personas previstas, especialmente con «Cualquiera que tenga esta transferencia»." } }, "about_privacy_deny": { "context": "About screen, Privacy & security list: point about denying unknown requests by default.", "translations": { "en": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests.", - "fr": "Refus par défaut — VniDrop ne sert que le contenu d’un partage actif et rejette les demandes inconnues." + "fr": "Refus par défaut — VniDrop ne sert que le contenu d’un partage actif et rejette les demandes inconnues.", + "es": "Denegación por defecto: VniDrop solo sirve el contenido de un recurso compartido activo y rechaza las solicitudes desconocidas." } }, "about_privacy_local": { "context": "About screen, Privacy & security list: point about received files staying local and never overwriting.", "translations": { "en": "Received files are saved on your device and never silently overwrite an existing file.", - "fr": "Les fichiers reçus sont enregistrés sur votre appareil et n’écrasent jamais un fichier existant." + "fr": "Les fichiers reçus sont enregistrés sur votre appareil et n’écrasent jamais un fichier existant.", + "es": "Los archivos recibidos se guardan en su dispositivo y nunca sobrescriben un archivo existente." } }, "about_privacy_policy_label": { "context": "About screen: label for the privacy policy row.", "translations": { "en": "Privacy policy", - "fr": "Politique de confidentialité" + "fr": "Politique de confidentialité", + "es": "Política de privacidad" } }, "about_privacy_relay": { "context": "About screen, Privacy & security list: point explaining encrypted relays.", "translations": { "en": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files.", - "fr": "Si deux appareils ne peuvent pas se connecter directement, la connexion chiffrée peut être relayée. Les relais ne transmettent que des paquets chiffrés ; ils ne stockent jamais vos fichiers." + "fr": "Si deux appareils ne peuvent pas se connecter directement, la connexion chiffrée peut être relayée. Les relais ne transmettent que des paquets chiffrés ; ils ne stockent jamais vos fichiers.", + "es": "Si dos dispositivos no pueden conectarse directamente, la conexión cifrada puede retransmitirse. Los relés solo reenvían paquetes cifrados; nunca almacenan sus archivos." } }, "about_privacy_title": { "context": "About screen: section heading for the Privacy & security list.", "translations": { "en": "Privacy & security", - "fr": "Confidentialité et sécurité" + "fr": "Confidentialité et sécurité", + "es": "Privacidad y seguridad" } }, "about_tagline": { "context": "About screen: short tagline under the app name.", "translations": { "en": "Send files directly. Stay in control of who receives them.", - "fr": "Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit." + "fr": "Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit.", + "es": "Envíe archivos directamente. Mantenga el control de quién los recibe." } }, "about_title": { "context": "About screen: navigation/screen title.", "translations": { "en": "About", - "fr": "À propos" + "fr": "À propos", + "es": "Acerca de" } }, "appearance_auto_description": { "context": "Settings > Appearance: description for the System/auto option.", "translations": { "en": "Match this device’s light or dark appearance.", - "fr": "Suivre l’apparence claire ou sombre de cet appareil." + "fr": "Suivre l’apparence claire ou sombre de cet appareil.", + "es": "Seguir la apariencia clara u oscura de este dispositivo." } }, "appearance_dark_mode": { "context": "Settings > Appearance: label for the dark theme option.", "translations": { "en": "Dark mode", - "fr": "Mode sombre" + "fr": "Mode sombre", + "es": "Modo oscuro" } }, "appearance_light_mode": { "context": "Settings > Appearance: label for the light theme option.", "translations": { "en": "Light mode", - "fr": "Mode clair" + "fr": "Mode clair", + "es": "Modo claro" } }, "appearance_system_mode": { "context": "Settings > Appearance: label for the follow-system option.", "translations": { "en": "System", - "fr": "Système" + "fr": "Système", + "es": "Sistema" } }, "appearance_title": { "context": "Settings > Appearance: section title.", "translations": { "en": "Appearance", - "fr": "Apparence" + "fr": "Apparence", + "es": "Apariencia" } }, "approval_connection_request": { "context": "Approval prompt: title when a receiver requests to download a transfer.", "translations": { "en": "Receive request", - "fr": "Demande de réception" + "fr": "Demande de réception", + "es": "Solicitud de recepción" } }, "approval_endpoint_id": { @@ -268,14 +299,16 @@ ], "translations": { "en": "Device ID: {arg1}", - "fr": "Identifiant de l’appareil : {arg1}" + "fr": "Identifiant de l’appareil : {arg1}", + "es": "ID del dispositivo: {arg1}" } }, "approval_nearby_device": { "context": "Approval prompt: fallback label for a requester with no display name.", "translations": { "en": "A nearby device", - "fr": "Un appareil à proximité" + "fr": "Un appareil à proximité", + "es": "Un dispositivo cercano" } }, "approval_pending_count": { @@ -288,7 +321,8 @@ ], "translations": { "en": "{count} requests waiting", - "fr": "{count} demandes en attente" + "fr": "{count} demandes en attente", + "es": "{count} solicitudes en espera" } }, "approval_request_body": { @@ -305,749 +339,856 @@ ], "translations": { "en": "{arg1} wants to receive “{arg2}”.", - "fr": "{arg1} souhaite recevoir « {arg2} »." + "fr": "{arg1} souhaite recevoir « {arg2} ».", + "es": "{arg1} quiere recibir «{arg2}»." } }, "battery_level_title": { "context": "Device information row: battery level label.", "translations": { "en": "Battery level", - "fr": "Niveau de batterie" + "fr": "Niveau de batterie", + "es": "Nivel de batería" } }, "bug_report_contact_hint": { "context": "Bug report form: placeholder text in the contact email field.", "translations": { "en": "name@example.com", - "fr": "nom@exemple.com" + "fr": "nom@exemple.com", + "es": "nombre@ejemplo.com" } }, "bug_report_contact_label": { "context": "Bug report form: label for the optional contact email field.", "translations": { "en": "Contact email (optional)", - "fr": "E-mail de contact (facultatif)" + "fr": "E-mail de contact (facultatif)", + "es": "Correo de contacto (opcional)" } }, "bug_report_description": { "context": "Bug report form: intro text explaining what gets attached.", "translations": { "en": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted).", - "fr": "Dites-nous ce qui s’est passé. Nous joignons les infos de l’appareil et, en option, les journaux récents (valeurs sensibles masquées)." + "fr": "Dites-nous ce qui s’est passé. Nous joignons les infos de l’appareil et, en option, les journaux récents (valeurs sensibles masquées).", + "es": "Cuéntenos qué salió mal. Adjuntamos información del dispositivo y, opcionalmente, registros recientes (con los valores sensibles ocultos)." } }, "bug_report_device_section": { "context": "Bug report form: heading for the attached device information section.", "translations": { "en": "Device information", - "fr": "Informations sur l’appareil" + "fr": "Informations sur l’appareil", + "es": "Información del dispositivo" } }, "bug_report_expected_hint": { "context": "Bug report form: placeholder in the 'what did you expect' field.", "translations": { "en": "Describe what you expected to happen", - "fr": "Décrivez ce à quoi vous vous attendiez" + "fr": "Décrivez ce à quoi vous vous attendiez", + "es": "Describa lo que esperaba que ocurriera" } }, "bug_report_expected_label": { "context": "Bug report form: label for the expected-behavior field.", "translations": { "en": "What did you expect?", - "fr": "À quoi vous attendiez-vous ?" + "fr": "À quoi vous attendiez-vous ?", + "es": "¿Qué esperaba?" } }, "bug_report_include_logs": { "context": "Bug report form: toggle label to attach recent logs.", "translations": { "en": "Include recent logs", - "fr": "Inclure les journaux récents" + "fr": "Inclure les journaux récents", + "es": "Incluir registros recientes" } }, "bug_report_include_logs_description": { "context": "Bug report form: explanation under the include-logs toggle.", "translations": { "en": "Helps us diagnose the issue. Sensitive values are redacted before sending.", - "fr": "Nous aide à diagnostiquer le problème. Les valeurs sensibles sont masquées avant l’envoi." + "fr": "Nous aide à diagnostiquer le problème. Les valeurs sensibles sont masquées avant l’envoi.", + "es": "Nos ayuda a diagnosticar el problema. Los valores sensibles se ocultan antes de enviarlos." } }, "bug_report_logs_size": { "context": "Bug report form: label showing the size of the log attachment.", "translations": { "en": "Log attachment size", - "fr": "Taille de la pièce jointe des journaux" + "fr": "Taille de la pièce jointe des journaux", + "es": "Tamaño del archivo de registros" } }, "bug_report_missing_expected": { "context": "Bug report form: validation error when the expected-behavior field is empty.", "translations": { "en": "Please describe what you expected.", - "fr": "Veuillez décrire ce à quoi vous vous attendiez." + "fr": "Veuillez décrire ce à quoi vous vous attendiez.", + "es": "Describa lo que esperaba." } }, "bug_report_missing_what": { "context": "Bug report form: validation error when the what-happened field is empty.", "translations": { "en": "Please describe what happened.", - "fr": "Veuillez décrire ce qui s’est passé." + "fr": "Veuillez décrire ce qui s’est passé.", + "es": "Describa lo que ocurrió." } }, "bug_report_steps_hint": { "context": "Bug report form: placeholder in the steps-to-reproduce field.", "translations": { "en": "List the steps to reproduce the issue", - "fr": "Listez les étapes pour reproduire le problème" + "fr": "Listez les étapes pour reproduire le problème", + "es": "Enumere los pasos para reproducir el problema" } }, "bug_report_steps_label": { "context": "Bug report form: label for the optional steps-to-reproduce field.", "translations": { "en": "Steps to reproduce (optional)", - "fr": "Étapes pour reproduire (facultatif)" + "fr": "Étapes pour reproduire (facultatif)", + "es": "Pasos para reproducir (opcional)" } }, "bug_report_submit": { "context": "Bug report form: submit button.", "translations": { "en": "Submit report", - "fr": "Envoyer le rapport" + "fr": "Envoyer le rapport", + "es": "Enviar informe" } }, "bug_report_submit_failed": { "context": "Bug report form: error message when submission fails.", "translations": { "en": "Could not submit the bug report. Try again later.", - "fr": "Impossible d’envoyer le rapport de bug. Réessayez plus tard." + "fr": "Impossible d’envoyer le rapport de bug. Réessayez plus tard.", + "es": "No se pudo enviar el informe de error. Inténtelo de nuevo más tarde." } }, "bug_report_submitted": { "context": "Bug report form: confirmation message after a successful submission.", "translations": { "en": "Thanks — your bug report was recorded.", - "fr": "Merci — votre rapport de bug a été enregistré." + "fr": "Merci — votre rapport de bug a été enregistré.", + "es": "Gracias: su informe de error se ha registrado." } }, "bug_report_submitting": { "context": "Bug report form: progress label while the report is being sent.", "translations": { "en": "Submitting…", - "fr": "Envoi…" + "fr": "Envoi…", + "es": "Enviando…" } }, "bug_report_what_hint": { "context": "Bug report form: placeholder in the what-happened field.", "translations": { "en": "Describe what happened", - "fr": "Décrivez ce qui s’est passé" + "fr": "Décrivez ce qui s’est passé", + "es": "Describa lo que ocurrió" } }, "bug_report_what_label": { "context": "Bug report form: label for the what-happened field.", "translations": { "en": "What happened?", - "fr": "Que s’est-il passé ?" + "fr": "Que s’est-il passé ?", + "es": "¿Qué ocurrió?" } }, "button_approve": { "context": "Button: approve a receiver's request.", "translations": { "en": "Approve", - "fr": "Approuver" + "fr": "Approuver", + "es": "Aprobar" } }, "button_back": { "context": "Button: go back to the previous step/screen.", "translations": { "en": "Back", - "fr": "Retour" + "fr": "Retour", + "es": "Atrás" } }, "button_cancel": { "context": "Button: cancel the current action or dialog.", "translations": { "en": "Cancel", - "fr": "Annuler" + "fr": "Annuler", + "es": "Cancelar" } }, "button_cancel_receive": { "context": "Button: cancel an in-progress receive.", "translations": { "en": "Cancel", - "fr": "Annuler" + "fr": "Annuler", + "es": "Cancelar" } }, "button_change_files": { "context": "Button: change the selected files in the send flow.", "translations": { "en": "Change files", - "fr": "Modifier les fichiers" + "fr": "Modifier les fichiers", + "es": "Cambiar archivos" } }, "button_choose_files": { "context": "Button: open the file picker to choose files to send.", "translations": { "en": "Choose files", - "fr": "Choisir des fichiers" + "fr": "Choisir des fichiers", + "es": "Elegir archivos" } }, "button_choose_folder": { "context": "Button: open the folder picker (send selection or receive folder).", "translations": { "en": "Choose folder", - "fr": "Choisir un dossier" + "fr": "Choisir un dossier", + "es": "Elegir carpeta" } }, "button_clear": { "context": "Button: clear the current input or selection.", "translations": { "en": "Clear", - "fr": "Effacer" + "fr": "Effacer", + "es": "Borrar" } }, "button_close": { "context": "Button: close the current sheet/dialog.", "translations": { "en": "Close", - "fr": "Fermer" + "fr": "Fermer", + "es": "Cerrar" } }, "button_create_new_transfer": { "context": "Button: start creating a new transfer (Send tab).", "translations": { "en": "New transfer", - "fr": "Nouveau transfert" + "fr": "Nouveau transfert", + "es": "Nueva transferencia" } }, "button_delete_transfer": { "context": "Button: delete a transfer.", "translations": { "en": "Delete transfer", - "fr": "Supprimer le transfert" + "fr": "Supprimer le transfert", + "es": "Eliminar transferencia" } }, "button_download_invitation": { "context": "Button: save the invitation as a .vnd file.", "translations": { "en": "Save .vnd file", - "fr": "Enregistrer le fichier .vnd" + "fr": "Enregistrer le fichier .vnd", + "es": "Guardar archivo .vnd" } }, "button_native_share": { "context": "Button: open the OS share sheet to share the invitation.", "translations": { "en": "Share invitation", - "fr": "Partager l’invitation" + "fr": "Partager l’invitation", + "es": "Compartir invitación" } }, "button_open_settings": { "context": "Button: open the OS Settings app (e.g. for permissions).", "translations": { "en": "Open Settings", - "fr": "Ouvrir les Réglages" + "fr": "Ouvrir les Réglages", + "es": "Abrir Ajustes" } }, "button_receive": { "context": "Button: receive label (Receive action).", "translations": { "en": "Receive", - "fr": "Recevoir" + "fr": "Recevoir", + "es": "Recibir" } }, "button_receive_files": { "context": "Button: start receiving a transfer.", "translations": { "en": "Start receiving", - "fr": "Commencer à recevoir" + "fr": "Commencer à recevoir", + "es": "Empezar a recibir" } }, "button_refuse": { "context": "Button: refuse a receiver's request.", "translations": { "en": "Refuse", - "fr": "Refuser" + "fr": "Refuser", + "es": "Rechazar" } }, "button_remove_file": { "context": "Button: remove a single file from the send selection.", "translations": { "en": "Remove file", - "fr": "Retirer le fichier" + "fr": "Retirer le fichier", + "es": "Quitar archivo" } }, "button_reset_default": { "context": "Button: reset a setting to its default value.", "translations": { "en": "Use default", - "fr": "Valeur par défaut" + "fr": "Valeur par défaut", + "es": "Usar predeterminado" } }, "button_retry": { "context": "Button: retry after a failed operation.", "translations": { "en": "Retry", - "fr": "Réessayer" + "fr": "Réessayer", + "es": "Reintentar" } }, "button_share_file": { "context": "Button: start sharing the transfer (make it available).", "translations": { "en": "Start sharing", - "fr": "Commencer le partage" + "fr": "Commencer le partage", + "es": "Empezar a compartir" } }, "button_sharing_file": { "context": "Button: disabled/loading state while the transfer is being prepared.", "translations": { "en": "Preparing transfer…", - "fr": "Préparation du transfert…" + "fr": "Préparation du transfert…", + "es": "Preparando la transferencia…" } }, "button_show_in_files": { "context": "Button: reveal a received file in the Files app.", "translations": { "en": "Show in Files", - "fr": "Afficher dans Fichiers" + "fr": "Afficher dans Fichiers", + "es": "Mostrar en Archivos" } }, "button_write_nfc": { "context": "Button: write the invitation to an NFC tag.", "translations": { "en": "Write to NFC tag", - "fr": "Écrire sur un tag NFC" + "fr": "Écrire sur un tag NFC", + "es": "Escribir en etiqueta NFC" } }, "device_model_title": { "context": "Device information row: device model label.", "translations": { "en": "Device model", - "fr": "Modèle de l’appareil" + "fr": "Modèle de l’appareil", + "es": "Modelo del dispositivo" } }, "device_name_title": { "context": "Device information row: device name label.", "translations": { "en": "Device name", - "fr": "Nom de l’appareil" + "fr": "Nom de l’appareil", + "es": "Nombre del dispositivo" } }, "diagnostics_description": { "context": "Settings > Diagnostics: explanation of what anonymous diagnostics collect.", "translations": { "en": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included.", - "fr": "Envoyer des rapports de plantage et des événements d’utilisation anonymes pour nous aider à améliorer VniDrop. Vous pouvez désactiver cela à tout moment. Les invitations, chemins de fichiers et contenus de transfert ne sont jamais inclus." + "fr": "Envoyer des rapports de plantage et des événements d’utilisation anonymes pour nous aider à améliorer VniDrop. Vous pouvez désactiver cela à tout moment. Les invitations, chemins de fichiers et contenus de transfert ne sont jamais inclus.", + "es": "Enviar informes de fallos y eventos de uso anónimos para ayudarnos a mejorar VniDrop. Puede desactivarlo en cualquier momento. Las invitaciones, las rutas de archivos y el contenido de las transferencias nunca se incluyen." } }, "diagnostics_disabled_message": { "context": "Settings > Diagnostics: confirmation shown when diagnostics are turned off.", "translations": { "en": "Diagnostics sharing is off.", - "fr": "Le partage des diagnostics est désactivé." + "fr": "Le partage des diagnostics est désactivé.", + "es": "El uso compartido de diagnósticos está desactivado." } }, "diagnostics_enabled_message": { "context": "Settings > Diagnostics: confirmation shown when diagnostics are turned on.", "translations": { "en": "Diagnostics sharing is on.", - "fr": "Le partage des diagnostics est activé." + "fr": "Le partage des diagnostics est activé.", + "es": "El uso compartido de diagnósticos está activado." } }, "diagnostics_title": { "context": "Settings > Diagnostics: toggle title.", "translations": { "en": "Share diagnostics", - "fr": "Partager les diagnostics" + "fr": "Partager les diagnostics", + "es": "Compartir diagnósticos" } }, "error_camera": { "context": "Error: camera permission is needed to scan a QR code.", "translations": { "en": "Camera access is required to scan a QR code.", - "fr": "L’accès à la caméra est nécessaire pour scanner un QR code." + "fr": "L’accès à la caméra est nécessaire pour scanner un QR code.", + "es": "Se necesita acceso a la cámara para escanear un código QR." } }, "error_device_info": { "context": "Error: device information could not be loaded.", "translations": { "en": "Could not load device information.", - "fr": "Impossible de charger les informations de l’appareil." + "fr": "Impossible de charger les informations de l’appareil.", + "es": "No se pudo cargar la información del dispositivo." } }, "error_filesystem": { "context": "Error: the selected files/folder could not be accessed.", "translations": { "en": "VniDrop could not access the selected files or folder. Check permissions and try again.", - "fr": "VniDrop n’a pas pu accéder aux fichiers ou au dossier sélectionnés. Vérifiez les autorisations et réessayez." + "fr": "VniDrop n’a pas pu accéder aux fichiers ou au dossier sélectionnés. Vérifiez les autorisations et réessayez.", + "es": "VniDrop no pudo acceder a los archivos o la carpeta seleccionados. Compruebe los permisos e inténtelo de nuevo." } }, "error_generic": { "context": "Error: generic fallback message.", "translations": { "en": "Something went wrong. Try again.", - "fr": "Une erreur est survenue. Réessayez." + "fr": "Une erreur est survenue. Réessayez.", + "es": "Algo salió mal. Inténtelo de nuevo." } }, "error_initialization": { "context": "Error: the app failed to finish starting up.", "translations": { "en": "VniDrop could not finish starting up. Close the app and try again.", - "fr": "VniDrop n’a pas pu terminer son démarrage. Fermez l’app et réessayez." + "fr": "VniDrop n’a pas pu terminer son démarrage. Fermez l’app et réessayez.", + "es": "VniDrop no pudo terminar de iniciarse. Cierre la app e inténtelo de nuevo." } }, "error_invalid_ticket": { "context": "Error: the invitation/ticket could not be parsed.", "translations": { "en": "This invitation could not be read. Ask the sender for a new one.", - "fr": "Cette invitation n’a pas pu être lue. Demandez-en une nouvelle à l’expéditeur." + "fr": "Cette invitation n’a pas pu être lue. Demandez-en une nouvelle à l’expéditeur.", + "es": "No se pudo leer esta invitación. Pida al remitente una nueva." } }, "error_invitation_empty": { "context": "Error: the opened invitation contained no data.", "translations": { "en": "That invitation is empty. Try opening it again.", - "fr": "Cette invitation est vide. Essayez de l’ouvrir à nouveau." + "fr": "Cette invitation est vide. Essayez de l’ouvrir à nouveau.", + "es": "Esa invitación está vacía. Intente abrirla de nuevo." } }, "error_missing_native_library": { "context": "Error: the native library is missing from the build.", "translations": { "en": "The native VniDrop library is missing from this build.", - "fr": "La bibliothèque native de VniDrop est absente de cette version." + "fr": "La bibliothèque native de VniDrop est absente de cette version.", + "es": "Falta la biblioteca nativa de VniDrop en esta versión." } }, "error_nfc": { "context": "Error: the NFC tag could not be read/used.", "translations": { "en": "This NFC tag could not be used. Try another tag.", - "fr": "Ce tag NFC n’a pas pu être utilisé. Essayez-en un autre." + "fr": "Ce tag NFC n’a pas pu être utilisé. Essayez-en un autre.", + "es": "No se pudo usar esta etiqueta NFC. Pruebe con otra." } }, "error_permission": { "context": "Error: the transfer was not approved or was refused by the sender.", "translations": { "en": "The sender has not approved this transfer, or it was refused.", - "fr": "L’expéditeur n’a pas approuvé ce transfert, ou il a été refusé." + "fr": "L’expéditeur n’a pas approuvé ce transfert, ou il a été refusé.", + "es": "El remitente no ha aprobado esta transferencia, o fue rechazada." } }, "error_repository": { "context": "Error: transfer data could not be saved locally.", "translations": { "en": "VniDrop could not save transfer data on this device.", - "fr": "VniDrop n’a pas pu enregistrer les données de transfert sur cet appareil." + "fr": "VniDrop n’a pas pu enregistrer les données de transfert sur cet appareil.", + "es": "VniDrop no pudo guardar los datos de la transferencia en este dispositivo." } }, "error_selection_failed": { "context": "Error: the selected item could not be opened.", "translations": { "en": "Could not open the selected item. Try choosing it again.", - "fr": "Impossible d’ouvrir l’élément sélectionné. Essayez de le choisir à nouveau." + "fr": "Impossible d’ouvrir l’élément sélectionné. Essayez de le choisir à nouveau.", + "es": "No se pudo abrir el elemento seleccionado. Intente elegirlo de nuevo." } }, "error_share_empty": { "context": "Error: attempted to share with nothing selected.", "translations": { "en": "Select at least one item to share.", - "fr": "Sélectionnez au moins un élément à partager." + "fr": "Sélectionnez au moins un élément à partager.", + "es": "Seleccione al menos un elemento para compartir." } }, "error_socket_bind": { "context": "Error: the app could not open its network sockets.", "translations": { "en": "VniDrop could not open its network sockets on this device.", - "fr": "VniDrop n’a pas pu ouvrir ses sockets réseau sur cet appareil." + "fr": "VniDrop n’a pas pu ouvrir ses sockets réseau sur cet appareil.", + "es": "VniDrop no pudo abrir sus sockets de red en este dispositivo." } }, "error_starting_up": { "context": "Error: an invitation was opened before startup finished.", "translations": { "en": "VniDrop is still starting. Open the invitation again in a moment.", - "fr": "VniDrop démarre encore. Rouvrez l’invitation dans un instant." + "fr": "VniDrop démarre encore. Rouvrez l’invitation dans un instant.", + "es": "VniDrop todavía se está iniciando. Vuelva a abrir la invitación en un momento." } }, "error_transfer": { "context": "Error: the transfer could not be completed.", "translations": { "en": "The transfer could not be completed. Check your connection and try again.", - "fr": "Le transfert n’a pas pu être terminé. Vérifiez votre connexion et réessayez." + "fr": "Le transfert n’a pas pu être terminé. Vérifiez votre connexion et réessayez.", + "es": "No se pudo completar la transferencia. Compruebe su conexión e inténtelo de nuevo." } }, "field_receiver_name": { "context": "Text field label: the receiver's display name.", "translations": { "en": "Receiver name", - "fr": "Nom du destinataire" + "fr": "Nom du destinataire", + "es": "Nombre del destinatario" } }, "field_sender_name": { "context": "Text field label: the sender's display name.", "translations": { "en": "Sender name", - "fr": "Nom de l’expéditeur" + "fr": "Nom de l’expéditeur", + "es": "Nombre del remitente" } }, "field_transfer_name": { "context": "Text field label: the name given to a transfer.", "translations": { "en": "Transfer name", - "fr": "Nom du transfert" + "fr": "Nom du transfert", + "es": "Nombre de la transferencia" } }, "field_username": { "context": "Settings text field label: this device's display name.", "translations": { "en": "Display name", - "fr": "Nom d’affichage" + "fr": "Nom d’affichage", + "es": "Nombre visible" } }, "folder_status_permission_required": { "context": "Receive-folder status: permission is required to write to the chosen folder.", "translations": { "en": "Permission needed", - "fr": "Autorisation requise" + "fr": "Autorisation requise", + "es": "Permiso necesario" } }, "folder_status_unavailable": { "context": "Receive-folder status: the chosen folder is unavailable.", "translations": { "en": "Unavailable", - "fr": "Indisponible" + "fr": "Indisponible", + "es": "No disponible" } }, "folder_status_validating": { "context": "Receive-folder status: the folder is being checked.", "translations": { "en": "Checking folder…", - "fr": "Vérification du dossier…" + "fr": "Vérification du dossier…", + "es": "Comprobando carpeta…" } }, "folder_status_writable": { "context": "Receive-folder status: the folder is valid and writable.", "translations": { "en": "Ready", - "fr": "Prêt" + "fr": "Prêt", + "es": "Listo" } }, "metadata_files": { "context": "Transfer metadata label: number of files.", "translations": { "en": "Files", - "fr": "Fichiers" + "fr": "Fichiers", + "es": "Archivos" } }, "metadata_size": { "context": "Transfer metadata label: total size.", "translations": { "en": "Size", - "fr": "Taille" + "fr": "Taille", + "es": "Tamaño" } }, "metadata_status": { "context": "Transfer metadata label: current status.", "translations": { "en": "Status", - "fr": "Statut" + "fr": "Statut", + "es": "Estado" } }, "nav_receive": { "context": "Bottom navigation: Receive tab label.", "translations": { "en": "Receive", - "fr": "Recevoir" + "fr": "Recevoir", + "es": "Recibir" } }, "nav_send": { "context": "Bottom navigation: Send tab label.", "translations": { "en": "Send", - "fr": "Envoyer" + "fr": "Envoyer", + "es": "Enviar" } }, "nav_settings": { "context": "Bottom navigation: Settings tab label.", "translations": { "en": "Settings", - "fr": "Réglages" + "fr": "Réglages", + "es": "Ajustes" } }, "network_title": { "context": "Device information row: network label.", "translations": { "en": "Network", - "fr": "Réseau" + "fr": "Réseau", + "es": "Red" } }, "notifications_description": { "context": "Settings > Notifications: explanation of what notifications are used for.", "translations": { "en": "Get notified about new receive requests while VniDrop is in the background.", - "fr": "Soyez averti des nouvelles demandes de réception lorsque VniDrop est en arrière-plan." + "fr": "Soyez averti des nouvelles demandes de réception lorsque VniDrop est en arrière-plan.", + "es": "Reciba avisos sobre nuevas solicitudes de recepción cuando VniDrop está en segundo plano." } }, "notifications_enabled_message": { "context": "Settings > Notifications: confirmation when notifications are enabled.", "translations": { "en": "Notifications enabled.", - "fr": "Notifications activées." + "fr": "Notifications activées.", + "es": "Notificaciones activadas." } }, "notifications_local_title": { "context": "Settings > Notifications: label for the allow-notifications action.", "translations": { "en": "Allow notifications", - "fr": "Autoriser les notifications" + "fr": "Autoriser les notifications", + "es": "Permitir notificaciones" } }, "notifications_permission_denied": { "context": "Settings > Notifications: message when the OS permission is denied.", "translations": { "en": "Notifications are turned off for VniDrop. You can enable them in Settings.", - "fr": "Les notifications sont désactivées pour VniDrop. Vous pouvez les activer dans les Réglages." + "fr": "Les notifications sont désactivées pour VniDrop. Vous pouvez les activer dans les Réglages.", + "es": "Las notificaciones están desactivadas para VniDrop. Puede activarlas en Ajustes." } }, "notifications_settings_open_failed": { "context": "Settings > Notifications: error when the OS notification settings can't be opened.", "translations": { "en": "Could not open notification settings.", - "fr": "Impossible d’ouvrir les réglages de notifications." + "fr": "Impossible d’ouvrir les réglages de notifications.", + "es": "No se pudieron abrir los ajustes de notificaciones." } }, "notifications_title": { "context": "Settings > Notifications: section title.", "translations": { "en": "Notifications", - "fr": "Notifications" + "fr": "Notifications", + "es": "Notificaciones" } }, "notifications_unsupported": { "context": "Settings > Notifications: message when notifications aren't supported on the device.", "translations": { "en": "Notifications are not available on this device.", - "fr": "Les notifications ne sont pas disponibles sur cet appareil." + "fr": "Les notifications ne sont pas disponibles sur cet appareil.", + "es": "Las notificaciones no están disponibles en este dispositivo." } }, "os_version_title": { "context": "Device information row: operating system version label.", "translations": { "en": "Operating system", - "fr": "Système d’exploitation" + "fr": "Système d’exploitation", + "es": "Sistema operativo" } }, "preferences_receive_folder_title": { "context": "Settings > Preferences: label for the received-files destination folder.", "translations": { "en": "Save received transfers to", - "fr": "Enregistrer les transferts reçus dans" + "fr": "Enregistrer les transferts reçus dans", + "es": "Guardar las transferencias recibidas en" } }, "preferences_title": { "context": "Settings > Preferences: section title.", "translations": { "en": "Preferences", - "fr": "Préférences" + "fr": "Préférences", + "es": "Preferencias" } }, "progress_cancelled": { "context": "Transfer progress label: cancelled.", "translations": { "en": "Cancelled", - "fr": "Annulé" + "fr": "Annulé", + "es": "Cancelado" } }, "progress_completed": { "context": "Transfer progress label: completed.", "translations": { "en": "Completed", - "fr": "Terminé" + "fr": "Terminé", + "es": "Completado" } }, "progress_connected": { "context": "Transfer progress label: connected.", "translations": { "en": "Connected", - "fr": "Connecté" + "fr": "Connecté", + "es": "Conectado" } }, "progress_connecting": { "context": "Transfer progress label: connecting.", "translations": { "en": "Connecting", - "fr": "Connexion" + "fr": "Connexion", + "es": "Conectando" } }, "progress_downloading": { "context": "Transfer progress label: downloading.", "translations": { "en": "Downloading", - "fr": "Téléchargement" + "fr": "Téléchargement", + "es": "Descargando" } }, "progress_failed": { "context": "Transfer progress label: failed.", "translations": { "en": "Failed", - "fr": "Échec" + "fr": "Échec", + "es": "Fallido" } }, "progress_getting_ready": { "context": "Transfer progress label: getting ready.", "translations": { "en": "Getting ready", - "fr": "Préparation" + "fr": "Préparation", + "es": "Preparándose" } }, "progress_interrupted": { "context": "Transfer progress label: the transfer was interrupted.", "translations": { "en": "Transfer interrupted", - "fr": "Transfert interrompu" + "fr": "Transfert interrompu", + "es": "Transferencia interrumpida" } }, "progress_preparing": { "context": "Transfer progress label: preparing.", "translations": { "en": "Preparing", - "fr": "Préparation" + "fr": "Préparation", + "es": "Preparando" } }, "progress_ready": { "context": "Transfer progress label: ready.", "translations": { "en": "Ready", - "fr": "Prêt" + "fr": "Prêt", + "es": "Listo" } }, "progress_receiving": { "context": "Transfer progress label: receiving.", "translations": { "en": "Receiving", - "fr": "Réception" + "fr": "Réception", + "es": "Recibiendo" } }, "progress_requesting_access": { "context": "Transfer progress label: requesting access from the sender.", "translations": { "en": "Requesting access", - "fr": "Demande d’accès" + "fr": "Demande d’accès", + "es": "Solicitando acceso" } }, "progress_saving": { "context": "Transfer progress label: saving received files.", "translations": { "en": "Saving", - "fr": "Enregistrement" + "fr": "Enregistrement", + "es": "Guardando" } }, "progress_sending": { "context": "Transfer progress label: sending.", "translations": { "en": "Sending", - "fr": "Envoi" + "fr": "Envoi", + "es": "Enviando" } }, "progress_sending_to_count": { "context": "Transfer progress label: sending to N receivers. %lld = receiver count.", "translations": { "en": "Sending to {count}", - "fr": "Envoi à {count}" + "fr": "Envoi à {count}", + "es": "Enviando a {count}" }, "args": [ { @@ -1060,56 +1201,64 @@ "context": "Transfer progress label: the share is ready.", "translations": { "en": "Ready to share", - "fr": "Prêt à partager" + "fr": "Prêt à partager", + "es": "Listo para compartir" } }, "progress_working": { "context": "Transfer progress label: generic working/in-progress state.", "translations": { "en": "Working…", - "fr": "En cours…" + "fr": "En cours…", + "es": "Trabajando…" } }, "receive_choose_method_body": { "context": "Receive flow: body text prompting the user to pick an invitation method.", "translations": { "en": "Choose the invitation method available to you.", - "fr": "Choisissez la méthode d’invitation à votre disposition." + "fr": "Choisissez la méthode d’invitation à votre disposition.", + "es": "Elija el método de invitación de que disponga." } }, "receive_choose_method_title": { "context": "Receive flow: title of the connect-method chooser.", "translations": { "en": "How would you like to connect?", - "fr": "Comment souhaitez-vous vous connecter ?" + "fr": "Comment souhaitez-vous vous connecter ?", + "es": "¿Cómo quiere conectarse?" } }, "receive_clear_history": { "context": "Receive history: action to clear all history.", "translations": { "en": "Clear history", - "fr": "Effacer l’historique" + "fr": "Effacer l’historique", + "es": "Borrar historial" } }, "receive_clear_history_description": { "context": "Receive history: confirmation dialog body for clearing all history.", "translations": { "en": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device.", - "fr": "Toutes les réceptions terminées, échouées et annulées seront retirées de l’historique de VniDrop. Les fichiers téléchargés resteront sur cet appareil." + "fr": "Toutes les réceptions terminées, échouées et annulées seront retirées de l’historique de VniDrop. Les fichiers téléchargés resteront sur cet appareil.", + "es": "Todas las recepciones completadas, fallidas y canceladas se eliminarán del historial de VniDrop. Los archivos descargados permanecerán en este dispositivo." } }, "receive_clear_history_title": { "context": "Receive history: confirmation dialog title for clearing all history.", "translations": { "en": "Clear receive history?", - "fr": "Effacer l’historique de réception ?" + "fr": "Effacer l’historique de réception ?", + "es": "¿Borrar el historial de recepción?" } }, "receive_completed": { "context": "Receive flow: toast/message when a transfer finishes downloading.", "translations": { "en": "Transfer received.", - "fr": "Transfert reçu." + "fr": "Transfert reçu.", + "es": "Transferencia recibida." } }, "receive_delete_history_description": { @@ -1122,238 +1271,272 @@ ], "translations": { "en": "“{arg1}” will be removed from VniDrop’s history. The downloaded file will remain on this device.", - "fr": "« {arg1} » sera retiré de l’historique de VniDrop. Le fichier téléchargé restera sur cet appareil." + "fr": "« {arg1} » sera retiré de l’historique de VniDrop. Le fichier téléchargé restera sur cet appareil.", + "es": "«{arg1}» se eliminará del historial de VniDrop. El archivo descargado permanecerá en este dispositivo." } }, "receive_delete_history_item": { "context": "Receive history: swipe/menu action to delete a single history item.", "translations": { "en": "Delete from receive history", - "fr": "Supprimer de l’historique de réception" + "fr": "Supprimer de l’historique de réception", + "es": "Eliminar del historial de recepción" } }, "receive_delete_history_title": { "context": "Receive history: confirmation title for removing one item.", "translations": { "en": "Remove from history?", - "fr": "Retirer de l’historique ?" + "fr": "Retirer de l’historique ?", + "es": "¿Quitar del historial?" } }, "receive_empty_body": { "context": "Receive tab empty state: instructions on how to receive.", "translations": { "en": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag.", - "fr": "Ouvrez une invitation VniDrop, scannez un QR code ou approchez un tag NFC." + "fr": "Ouvrez une invitation VniDrop, scannez un QR code ou approchez un tag NFC.", + "es": "Abra una invitación de VniDrop, escanee un código QR o acerque una etiqueta NFC." } }, "receive_empty_title": { "context": "Receive tab empty state: title when nothing has been received.", "translations": { "en": "Nothing received yet", - "fr": "Rien reçu pour l’instant" + "fr": "Rien reçu pour l’instant", + "es": "Aún no se ha recibido nada" } }, "receive_history_cleared": { "context": "Receive history: toast confirming history was cleared.", "translations": { "en": "Receive history cleared.", - "fr": "Historique de réception effacé." + "fr": "Historique de réception effacé.", + "es": "Historial de recepción borrado." } }, "receive_history_title": { "context": "Receive tab: History section title.", "translations": { "en": "History", - "fr": "Historique" + "fr": "Historique", + "es": "Historial" } }, "receive_method_file": { "context": "Receive method: open a .vnd invitation file.", "translations": { "en": "Open a .vnd invitation", - "fr": "Ouvrir une invitation .vnd" + "fr": "Ouvrir une invitation .vnd", + "es": "Abrir una invitación .vnd" } }, "receive_method_file_description": { "context": "Receive method description: open a saved/shared invitation file.", "translations": { "en": "Choose an invitation saved or shared to this device.", - "fr": "Choisissez une invitation enregistrée ou partagée sur cet appareil." + "fr": "Choisissez une invitation enregistrée ou partagée sur cet appareil.", + "es": "Elija una invitación guardada o compartida en este dispositivo." } }, "receive_method_nfc": { "context": "Receive method: read an NFC tag.", "translations": { "en": "Read NFC tag", - "fr": "Lire un tag NFC" + "fr": "Lire un tag NFC", + "es": "Leer etiqueta NFC" } }, "receive_method_nfc_description": { "context": "Receive method description: hold near the sender's NFC tag.", "translations": { "en": "Hold this device near the sender’s invitation tag.", - "fr": "Approchez cet appareil du tag d’invitation de l’expéditeur." + "fr": "Approchez cet appareil du tag d’invitation de l’expéditeur.", + "es": "Acerque este dispositivo a la etiqueta de invitación del remitente." } }, "receive_method_scan": { "context": "Receive method: scan a QR code.", "translations": { "en": "Scan QR code", - "fr": "Scanner un QR code" + "fr": "Scanner un QR code", + "es": "Escanear código QR" } }, "receive_method_scan_description": { "context": "Receive method description: use the camera to scan the sender's code.", "translations": { "en": "Use the camera to scan the sender’s VniDrop code.", - "fr": "Utilisez la caméra pour scanner le code VniDrop de l’expéditeur." + "fr": "Utilisez la caméra pour scanner le code VniDrop de l’expéditeur.", + "es": "Use la cámara para escanear el código de VniDrop del remitente." } }, "receive_new_subtitle": { "context": "Receive tab: subtitle under the title.", "translations": { "en": "Transfers you’ve received on this device.", - "fr": "Transferts que vous avez reçus sur cet appareil." + "fr": "Transferts que vous avez reçus sur cet appareil.", + "es": "Transferencias que ha recibido en este dispositivo." } }, "receive_nfc_waiting": { "context": "Receive flow: prompt while waiting to read an NFC tag.", "translations": { "en": "Hold near the NFC tag…", - "fr": "Approchez du tag NFC…" + "fr": "Approchez du tag NFC…", + "es": "Acerque a la etiqueta NFC…" } }, "receive_open_files_failed": { "context": "Receive flow: error when opening VniDrop's folder in Files fails.", "translations": { "en": "Couldn’t open VniDrop in Files.", - "fr": "Impossible d’ouvrir VniDrop dans Fichiers." + "fr": "Impossible d’ouvrir VniDrop dans Fichiers.", + "es": "No se pudo abrir VniDrop en Archivos." } }, "receive_review_title": { "context": "Receive flow: title of the review screen before accepting a transfer.", "translations": { "en": "Review transfer", - "fr": "Vérifier le transfert" + "fr": "Vérifier le transfert", + "es": "Revisar transferencia" } }, "receive_title": { "context": "Receive tab: screen title.", "translations": { "en": "Receive", - "fr": "Recevoir" + "fr": "Recevoir", + "es": "Recibir" } }, "receive_unknown_transfer": { "context": "Receive flow: fallback name for a transfer with no title.", "translations": { "en": "VniDrop transfer", - "fr": "Transfert VniDrop" + "fr": "Transfert VniDrop", + "es": "Transferencia de VniDrop" } }, "send_access_anyone": { "context": "Send access option: anyone with the invitation can receive.", "translations": { "en": "Anyone with this transfer", - "fr": "Toute personne disposant de ce transfert" + "fr": "Toute personne disposant de ce transfert", + "es": "Cualquiera que tenga esta transferencia" } }, "send_access_anyone_description": { "context": "Send access option description: no approval required.", "translations": { "en": "No approval is required. Only use this for items you are comfortable sharing.", - "fr": "Aucune approbation requise. À n’utiliser que pour des éléments que vous êtes à l’aise de partager." + "fr": "Aucune approbation requise. À n’utiliser que pour des éléments que vous êtes à l’aise de partager.", + "es": "No se requiere aprobación. Úselo solo para elementos que no le importe compartir." } }, "send_access_anyone_warning": { "context": "Send access option warning: caution about open access.", "translations": { "en": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items.", - "fr": "Toute personne disposant de l’invitation peut télécharger jusqu’à ce que vous arrêtiez le partage. Ne l’utilisez pas pour des éléments privés ou sensibles." + "fr": "Toute personne disposant de l’invitation peut télécharger jusqu’à ce que vous arrêtiez le partage. Ne l’utilisez pas pour des éléments privés ou sensibles.", + "es": "Cualquiera que tenga la invitación puede descargar hasta que deje de compartir. No lo use para elementos privados o sensibles." } }, "send_access_approval": { "context": "Send access option: approve each receiver.", "translations": { "en": "Ask before each download", - "fr": "Demander avant chaque téléchargement" + "fr": "Demander avant chaque téléchargement", + "es": "Preguntar antes de cada descarga" } }, "send_access_approval_description": { "context": "Send access option description: you approve/refuse each receiver.", "translations": { "en": "You approve or refuse every new receiver.", - "fr": "Vous approuvez ou refusez chaque nouveau destinataire." + "fr": "Vous approuvez ou refusez chaque nouveau destinataire.", + "es": "Usted aprueba o rechaza a cada nuevo destinatario." } }, "send_access_title": { "context": "Send flow: heading for the who-can-receive access chooser.", "translations": { "en": "Who can receive it?", - "fr": "Qui peut le recevoir ?" + "fr": "Qui peut le recevoir ?", + "es": "¿Quién puede recibirla?" } }, "send_choose_file_body": { "context": "Send flow: body text for the choose-what-to-share step.", "translations": { "en": "Select files or a folder from this device. You can review the selection before creating the transfer.", - "fr": "Sélectionnez des fichiers ou un dossier sur cet appareil. Vous pourrez vérifier la sélection avant de créer le transfert." + "fr": "Sélectionnez des fichiers ou un dossier sur cet appareil. Vous pourrez vérifier la sélection avant de créer le transfert.", + "es": "Seleccione archivos o una carpeta de este dispositivo. Podrá revisar la selección antes de crear la transferencia." } }, "send_choose_file_title": { "context": "Send flow: title of the choose-what-to-share step.", "translations": { "en": "Choose what to share", - "fr": "Choisissez quoi partager" + "fr": "Choisissez quoi partager", + "es": "Elija qué compartir" } }, "send_empty_body": { "context": "Send tab empty state: instructions on how to create a transfer.", "translations": { "en": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file.", - "fr": "Créez un transfert, décidez qui peut le recevoir, puis invitez-les avec un QR code, un tag NFC ou un fichier d’invitation." + "fr": "Créez un transfert, décidez qui peut le recevoir, puis invitez-les avec un QR code, un tag NFC ou un fichier d’invitation.", + "es": "Cree una transferencia, decida quién puede recibirla y luego invite a esas personas con un código QR, una etiqueta NFC o un archivo de invitación." } }, "send_empty_title": { "context": "Send tab empty state: title when nothing has been shared.", "translations": { "en": "Nothing shared yet", - "fr": "Rien partagé pour l’instant" + "fr": "Rien partagé pour l’instant", + "es": "Aún no se ha compartido nada" } }, "send_file_size_unknown": { "context": "Send flow: shown when a selected file's size can't be determined.", "translations": { "en": "Size unavailable", - "fr": "Taille indisponible" + "fr": "Taille indisponible", + "es": "Tamaño no disponible" } }, "send_folder_label": { "context": "Send flow: label indicating a selected item is a folder.", "translations": { "en": "Folder", - "fr": "Dossier" + "fr": "Dossier", + "es": "Carpeta" } }, "send_new_transfer_description": { "context": "Send flow: description for the create-new-transfer entry.", "translations": { "en": "Create a new transfer", - "fr": "Créer un nouveau transfert" + "fr": "Créer un nouveau transfert", + "es": "Crear una nueva transferencia" } }, "send_new_transfer_title": { "context": "Send flow: title for the new-transfer step.", "translations": { "en": "New transfer", - "fr": "Nouveau transfert" + "fr": "Nouveau transfert", + "es": "Nueva transferencia" } }, "send_review_title": { "context": "Send flow: title of the review-transfer step before creating it.", "translations": { "en": "Review transfer", - "fr": "Vérifier le transfert" + "fr": "Vérifier le transfert", + "es": "Revisar transferencia" } }, "send_selected_files_count": { @@ -1366,217 +1549,248 @@ ], "translations": { "en": "{count} files selected", - "fr": "{count} fichiers sélectionnés" + "fr": "{count} fichiers sélectionnés", + "es": "{count} archivos seleccionados" } }, "send_stop_sharing": { "context": "Transfer details: action to stop sharing a transfer.", "translations": { "en": "Stop sharing", - "fr": "Arrêter le partage" + "fr": "Arrêter le partage", + "es": "Dejar de compartir" } }, "send_stop_sharing_description": { "context": "Transfer details: confirmation body for stopping sharing.", "translations": { "en": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped.", - "fr": "Cela arrête le transfert et interrompt toute personne en train de le télécharger. Il reste dans votre historique en tant qu’Arrêté." + "fr": "Cela arrête le transfert et interrompt toute personne en train de le télécharger. Il reste dans votre historique en tant qu’Arrêté.", + "es": "Esto detiene la transferencia e interrumpe a quien esté descargándola. Permanece en su historial como Detenida." } }, "send_subtitle": { "context": "Send tab: subtitle under the title.", "translations": { "en": "Transfers you’re sharing from this device.", - "fr": "Transferts que vous partagez depuis cet appareil." + "fr": "Transferts que vous partagez depuis cet appareil.", + "es": "Transferencias que está compartiendo desde este dispositivo." } }, "send_title": { "context": "Send tab: screen title.", "translations": { "en": "Send", - "fr": "Envoyer" + "fr": "Envoyer", + "es": "Enviar" } }, "send_transfer_created": { "context": "Send flow: toast confirming a transfer was created.", "translations": { "en": "Transfer created.", - "fr": "Transfert créé." + "fr": "Transfert créé.", + "es": "Transferencia creada." } }, "send_transfer_details_title": { "context": "Send flow: title of the transfer details screen.", "translations": { "en": "Transfer details", - "fr": "Détails du transfert" + "fr": "Détails du transfert", + "es": "Detalles de la transferencia" } }, "send_transfers_title": { "context": "Send tab: 'Your transfers' list heading.", "translations": { "en": "Your transfers", - "fr": "Vos transferts" + "fr": "Vos transferts", + "es": "Sus transferencias" } }, "settings_subtitle": { "context": "Settings screen: subtitle summarizing what's configurable.", "translations": { "en": "Your name, where transfers are saved, appearance, and notifications.", - "fr": "Votre nom, l’emplacement d’enregistrement des transferts, l’apparence et les notifications." + "fr": "Votre nom, l’emplacement d’enregistrement des transferts, l’apparence et les notifications.", + "es": "Su nombre, dónde se guardan las transferencias, la apariencia y las notificaciones." } }, "settings_title": { "context": "Settings screen: title.", "translations": { "en": "Settings", - "fr": "Réglages" + "fr": "Réglages", + "es": "Ajustes" } }, "snackbar_dismiss": { "context": "Snackbar: accessibility label / action to dismiss the snackbar.", "translations": { "en": "Dismiss", - "fr": "Ignorer" + "fr": "Ignorer", + "es": "Descartar" } }, "status_available": { "context": "Transfer status: available (actively shared).", "translations": { "en": "Available", - "fr": "Disponible" + "fr": "Disponible", + "es": "Disponible" } }, "status_cancelled": { "context": "Transfer status: cancelled.", "translations": { "en": "Cancelled", - "fr": "Annulé" + "fr": "Annulé", + "es": "Cancelado" } }, "status_completed": { "context": "Transfer status: completed.", "translations": { "en": "Completed", - "fr": "Terminé" + "fr": "Terminé", + "es": "Completado" } }, "status_failed": { "context": "Transfer status: failed.", "translations": { "en": "Failed", - "fr": "Échec" + "fr": "Échec", + "es": "Fallido" } }, "status_preparing": { "context": "Transfer status: preparing.", "translations": { "en": "Preparing", - "fr": "Préparation" + "fr": "Préparation", + "es": "Preparando" } }, "status_receiving": { "context": "Transfer status: receiving.", "translations": { "en": "Receiving", - "fr": "Réception" + "fr": "Réception", + "es": "Recibiendo" } }, "status_stopped": { "context": "Transfer status: stopped.", "translations": { "en": "Stopped", - "fr": "Arrêté" + "fr": "Arrêté", + "es": "Detenido" } }, "storage_calculating": { "context": "Settings > Storage: placeholder while a size is being calculated.", "translations": { "en": "Calculating…", - "fr": "Calcul…" + "fr": "Calcul…", + "es": "Calculando…" } }, "storage_delete_transfers": { "context": "Settings > Storage: button to delete all transfer records.", "translations": { "en": "Delete all transfers", - "fr": "Supprimer tous les transferts" + "fr": "Supprimer tous les transferts", + "es": "Eliminar todas las transferencias" } }, "storage_delete_transfers_description": { "context": "Settings > Storage: confirmation body for deleting all transfer records.", "translations": { "en": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone.", - "fr": "Cela efface tous les enregistrements de transferts envoyés et reçus de votre historique. Vos fichiers reçus ne sont pas supprimés. Remarque : le moteur de transfert conserve son contenu stocké, donc les données de transfert peuvent ne pas diminuer. Cette action est irréversible." + "fr": "Cela efface tous les enregistrements de transferts envoyés et reçus de votre historique. Vos fichiers reçus ne sont pas supprimés. Remarque : le moteur de transfert conserve son contenu stocké, donc les données de transfert peuvent ne pas diminuer. Cette action est irréversible.", + "es": "Esto borra todos los registros de transferencias enviadas y recibidas de su historial. Sus archivos recibidos no se eliminan. Nota: el motor de transferencia conserva su contenido almacenado, por lo que los datos de transferencia pueden no disminuir. Esto no se puede deshacer." } }, "storage_deleting": { "context": "Settings > Storage: progress label while transfers are being deleted.", "translations": { "en": "Deleting…", - "fr": "Suppression…" + "fr": "Suppression…", + "es": "Eliminando…" } }, "storage_footer": { "context": "Settings > Storage: footer explaining how storage is managed.", "translations": { "en": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here.", - "fr": "Les données de transfert sont gérées par le moteur de transfert — votre historique ainsi que le contenu des fichiers que vous avez partagés. Le bouton ci-dessous efface vos enregistrements de transferts ; le moteur conserve son contenu stocké, donc cette valeur peut ne pas baisser. Les fichiers reçus sont vos fichiers téléchargés et ne sont jamais supprimés ici." + "fr": "Les données de transfert sont gérées par le moteur de transfert — votre historique ainsi que le contenu des fichiers que vous avez partagés. Le bouton ci-dessous efface vos enregistrements de transferts ; le moteur conserve son contenu stocké, donc cette valeur peut ne pas baisser. Les fichiers reçus sont vos fichiers téléchargés et ne sont jamais supprimés ici.", + "es": "Los datos de transferencia los gestiona el motor de transferencia: su historial más el contenido de los archivos que ha compartido. El botón de abajo borra sus registros de transferencias; el motor conserva su contenido almacenado, por lo que este valor puede no bajar. Los archivos recibidos son los archivos que ha descargado y nunca se eliminan aquí." } }, "storage_received_files": { "context": "Settings > Storage: label for the received-files size row.", "translations": { "en": "Received files", - "fr": "Fichiers reçus" + "fr": "Fichiers reçus", + "es": "Archivos recibidos" } }, "storage_temporary": { "context": "Settings > Storage: label for the temporary-files size row.", "translations": { "en": "Temporary files", - "fr": "Fichiers temporaires" + "fr": "Fichiers temporaires", + "es": "Archivos temporales" } }, "storage_title": { "context": "Settings > Storage: section title.", "translations": { "en": "Storage", - "fr": "Stockage" + "fr": "Stockage", + "es": "Almacenamiento" } }, "storage_total": { "context": "Settings > Storage: label for the total-size row.", "translations": { "en": "Total", - "fr": "Total" + "fr": "Total", + "es": "Total" } }, "storage_transfer_data": { "context": "Settings > Storage: label for the transfer-engine data size row.", "translations": { "en": "Transfer data", - "fr": "Données de transfert" + "fr": "Données de transfert", + "es": "Datos de transferencia" } }, "storage_transfers_deleted": { "context": "Settings > Storage: toast confirming all transfers were deleted.", "translations": { "en": "All transfers deleted", - "fr": "Tous les transferts supprimés" + "fr": "Tous les transferts supprimés", + "es": "Todas las transferencias eliminadas" } }, "transfer_activity_description": { "context": "Transfer details: description under the Activity section.", "translations": { "en": "See important updates for this transfer", - "fr": "Consultez les mises à jour importantes de ce transfert" + "fr": "Consultez les mises à jour importantes de ce transfert", + "es": "Vea las actualizaciones importantes de esta transferencia" } }, "transfer_activity_title": { "context": "Transfer details: Activity section title.", "translations": { "en": "Activity", - "fr": "Activité" + "fr": "Activité", + "es": "Actividad" } }, "transfer_delete_description": { @@ -1589,119 +1803,136 @@ ], "translations": { "en": "“{arg1}” will stop being shared and its transfer history will be removed from this device.", - "fr": "« {arg1} » cessera d’être partagé et son historique de transfert sera retiré de cet appareil." + "fr": "« {arg1} » cessera d’être partagé et son historique de transfert sera retiré de cet appareil.", + "es": "«{arg1}» dejará de compartirse y su historial de transferencia se eliminará de este dispositivo." } }, "transfer_delete_title": { "context": "Transfer details: confirmation title for deleting a transfer.", "translations": { "en": "Delete transfer?", - "fr": "Supprimer le transfert ?" + "fr": "Supprimer le transfert ?", + "es": "¿Eliminar la transferencia?" } }, "transfer_deleted": { "context": "Transfer details: toast confirming a transfer was deleted.", "translations": { "en": "Transfer deleted.", - "fr": "Transfert supprimé." + "fr": "Transfert supprimé.", + "es": "Transferencia eliminada." } }, "transfer_deleting": { "context": "Transfer details: progress label while a transfer is being deleted.", "translations": { "en": "Deleting…", - "fr": "Suppression…" + "fr": "Suppression…", + "es": "Eliminando…" } }, "transfer_details_title": { "context": "Transfer details: screen title.", "translations": { "en": "Transfer details", - "fr": "Détails du transfert" + "fr": "Détails du transfert", + "es": "Detalles de la transferencia" } }, "transfer_event_approved": { "context": "Transfer activity event: a receiver's access was approved.", "translations": { "en": "Receiver access approved", - "fr": "Accès du destinataire approuvé" + "fr": "Accès du destinataire approuvé", + "es": "Acceso del destinatario aprobado" } }, "transfer_event_completed": { "context": "Transfer activity event: a receiver completed the transfer.", "translations": { "en": "A receiver completed the transfer", - "fr": "Un destinataire a terminé le transfert" + "fr": "Un destinataire a terminé le transfert", + "es": "Un destinatario completó la transferencia" } }, "transfer_event_connecting": { "context": "Transfer activity event: connecting to the sender.", "translations": { "en": "Connecting to sender", - "fr": "Connexion à l’expéditeur" + "fr": "Connexion à l’expéditeur", + "es": "Conectando con el remitente" } }, "transfer_event_downloading": { "context": "Transfer activity event: downloading.", "translations": { "en": "Downloading", - "fr": "Téléchargement" + "fr": "Téléchargement", + "es": "Descargando" } }, "transfer_event_failed": { "context": "Transfer activity event: the transfer hit a problem.", "translations": { "en": "The transfer encountered a problem", - "fr": "Le transfert a rencontré un problème" + "fr": "Le transfert a rencontré un problème", + "es": "La transferencia tuvo un problema" } }, "transfer_event_preparing": { "context": "Transfer activity event: preparing the transfer.", "translations": { "en": "Preparing your transfer", - "fr": "Préparation de votre transfert" + "fr": "Préparation de votre transfert", + "es": "Preparando su transferencia" } }, "transfer_event_ready": { "context": "Transfer activity event: ready to share.", "translations": { "en": "Ready to share", - "fr": "Prêt à partager" + "fr": "Prêt à partager", + "es": "Listo para compartir" } }, "transfer_event_refused": { "context": "Transfer activity event: a receiver's access was refused.", "translations": { "en": "Receiver access refused", - "fr": "Accès du destinataire refusé" + "fr": "Accès du destinataire refusé", + "es": "Acceso del destinatario rechazado" } }, "transfer_event_requested": { "context": "Transfer activity event: a receiver requested access.", "translations": { "en": "A receiver requested access", - "fr": "Un destinataire a demandé l’accès" + "fr": "Un destinataire a demandé l’accès", + "es": "Un destinatario solicitó acceso" } }, "transfer_event_saving": { "context": "Transfer activity event: saving received files.", "translations": { "en": "Saving", - "fr": "Enregistrement" + "fr": "Enregistrement", + "es": "Guardando" } }, "transfer_event_stopped": { "context": "Transfer activity event: sharing was stopped.", "translations": { "en": "Sharing stopped", - "fr": "Partage arrêté" + "fr": "Partage arrêté", + "es": "Se dejó de compartir" } }, "transfer_event_updated": { "context": "Transfer activity event: the transfer was updated.", "translations": { "en": "Transfer updated", - "fr": "Transfert mis à jour" + "fr": "Transfert mis à jour", + "es": "Transferencia actualizada" } }, "transfer_file_count": { @@ -1720,6 +1951,10 @@ "fr": { "one": "{count} fichier", "other": "{count} fichiers" + }, + "es": { + "one": "{count} archivo", + "other": "{count} archivos" } } }, @@ -1727,91 +1962,104 @@ "context": "Transfer share: toast confirming the invitation file was saved.", "translations": { "en": "Invitation saved.", - "fr": "Invitation enregistrée." + "fr": "Invitation enregistrée.", + "es": "Invitación guardada." } }, "transfer_nearby_device": { "context": "Transfer share/receivers: label for a nearby device.", "translations": { "en": "Nearby device", - "fr": "Appareil à proximité" + "fr": "Appareil à proximité", + "es": "Dispositivo cercano" } }, "transfer_nfc_unavailable": { "context": "Transfer share: message when NFC writing isn't available on the device.", "translations": { "en": "NFC tag writing is not available on this device.", - "fr": "L’écriture de tag NFC n’est pas disponible sur cet appareil." + "fr": "L’écriture de tag NFC n’est pas disponible sur cet appareil.", + "es": "La escritura de etiquetas NFC no está disponible en este dispositivo." } }, "transfer_nfc_waiting": { "context": "Transfer share: prompt while waiting to write an NFC tag.", "translations": { "en": "Hold your device near a writable NFC tag.", - "fr": "Approchez votre appareil d’un tag NFC inscriptible." + "fr": "Approchez votre appareil d’un tag NFC inscriptible.", + "es": "Acerque su dispositivo a una etiqueta NFC grabable." } }, "transfer_nfc_written": { "context": "Transfer share: confirmation the invitation was written to the NFC tag.", "translations": { "en": "Invitation written to the NFC tag.", - "fr": "Invitation écrite sur le tag NFC." + "fr": "Invitation écrite sur le tag NFC.", + "es": "Invitación escrita en la etiqueta NFC." } }, "transfer_no_activity": { "context": "Transfer details: empty state for the Activity section.", "translations": { "en": "There is no activity to show yet.", - "fr": "Aucune activité à afficher pour l’instant." + "fr": "Aucune activité à afficher pour l’instant.", + "es": "Todavía no hay actividad que mostrar." } }, "transfer_no_receivers": { "context": "Transfer details: empty state for the Receivers section.", "translations": { "en": "Nobody has requested this transfer yet.", - "fr": "Personne n’a encore demandé ce transfert." + "fr": "Personne n’a encore demandé ce transfert.", + "es": "Nadie ha solicitado aún esta transferencia." } }, "transfer_receiver_accepted": { "context": "Receiver status: approved, waiting for the download to complete.", "translations": { "en": "Approved — waiting for completion", - "fr": "Approuvé — en attente de la fin" + "fr": "Approuvé — en attente de la fin", + "es": "Aprobado: esperando a que se complete" } }, "transfer_receiver_completed": { "context": "Receiver status: received successfully.", "translations": { "en": "Received successfully", - "fr": "Reçu avec succès" + "fr": "Reçu avec succès", + "es": "Recibido correctamente" } }, "transfer_receiver_expired": { "context": "Receiver status: the request expired.", "translations": { "en": "Request expired", - "fr": "Demande expirée" + "fr": "Demande expirée", + "es": "Solicitud caducada" } }, "transfer_receiver_refused": { "context": "Receiver status: the request was refused.", "translations": { "en": "Request refused", - "fr": "Demande refusée" + "fr": "Demande refusée", + "es": "Solicitud rechazada" } }, "transfer_receiver_requested": { "context": "Receiver status: waiting for the sender's approval.", "translations": { "en": "Waiting for your approval", - "fr": "En attente de votre approbation" + "fr": "En attente de votre approbation", + "es": "Esperando su aprobación" } }, "transfer_receiver_unknown": { "context": "Receiver status: status unavailable/unknown.", "translations": { "en": "Status unavailable", - "fr": "Statut indisponible" + "fr": "Statut indisponible", + "es": "Estado no disponible" } }, "transfer_receivers_completed_count": { @@ -1824,14 +2072,16 @@ ], "translations": { "en": "{count} completed", - "fr": "{count} terminés" + "fr": "{count} terminés", + "es": "{count} completados" } }, "transfer_receivers_description": { "context": "Transfer details: description under the Receivers section.", "translations": { "en": "Requests, approvals, and completed deliveries", - "fr": "Demandes, approbations et livraisons terminées" + "fr": "Demandes, approbations et livraisons terminées", + "es": "Solicitudes, aprobaciones y entregas completadas" } }, "transfer_receivers_pending": { @@ -1844,49 +2094,56 @@ ], "translations": { "en": "{count} waiting", - "fr": "{count} en attente" + "fr": "{count} en attente", + "es": "{count} en espera" } }, "transfer_receivers_title": { "context": "Transfer details: Receivers section title.", "translations": { "en": "Receivers", - "fr": "Destinataires" + "fr": "Destinataires", + "es": "Destinatarios" } }, "transfer_scan_qr": { "context": "Transfer share: caption under the QR code.", "translations": { "en": "Scan with VniDrop to receive this transfer", - "fr": "Scannez avec VniDrop pour recevoir ce transfert" + "fr": "Scannez avec VniDrop pour recevoir ce transfert", + "es": "Escanee con VniDrop para recibir esta transferencia" } }, "transfer_share_description": { "context": "Transfer details: description under the Share section.", "translations": { "en": "QR code, invitation file, and nearby options", - "fr": "QR code, fichier d’invitation et options à proximité" + "fr": "QR code, fichier d’invitation et options à proximité", + "es": "Código QR, archivo de invitación y opciones cercanas" } }, "transfer_share_title": { "context": "Transfer details: Share section title.", "translations": { "en": "Share", - "fr": "Partager" + "fr": "Partager", + "es": "Compartir" } }, "value_unavailable": { "context": "Placeholder shown when a device-info or metadata value can't be read.", "translations": { "en": "Not available", - "fr": "Non disponible" + "fr": "Non disponible", + "es": "No disponible" } }, "version_title": { "context": "Device information / Settings row: app version label.", "translations": { "en": "App version", - "fr": "Version de l’app" + "fr": "Version de l’app", + "es": "Versión de la app" } } } diff --git a/shared/src/commonMain/composeResources/values-es/strings.xml b/shared/src/commonMain/composeResources/values-es/strings.xml new file mode 100644 index 0000000..6000692 --- /dev/null +++ b/shared/src/commonMain/composeResources/values-es/strings.xml @@ -0,0 +1,257 @@ + + + Informar de un error + VniDrop transfiere archivos y carpetas directamente de un dispositivo a otro a través de la red, sin subirlos a ningún servicio de alojamiento. No hay que crear ninguna cuenta y no queda ninguna copia de su transferencia en la nube una vez que termina. + Una transferencia directa entre dispositivos: sus archivos van directamente al destinatario. + Las conexiones están autenticadas y cifradas de extremo a extremo (mediante Iroh), y los archivos entrantes se verifican por su huella de contenido. + Usted decide quién recibe: apruebe cada solicitud o abra una transferencia a cualquiera que tenga la invitación. + Sin cuenta: no hay nada que registrar. + Código abierto, publicado bajo la licencia Apache 2.0. + Qué es VniDrop + No es almacenamiento en la nube: ningún servidor guarda sus archivos y nada queda en la nube después de una transferencia. + No es difusión pública: una invitación es un enlace de acceso privado, no un anuncio para todos los que estén cerca. + No es un servicio de sincronización ni de copia de seguridad. + Qué no es VniDrop + Licencia + Política de privacidad + Las invitaciones son claves de acceso. Trate un código QR, una etiqueta NFC o un archivo .vnd como un enlace de acceso privado y compártalo solo con las personas previstas, especialmente con «Cualquiera que tenga esta transferencia». + Denegación por defecto: VniDrop solo sirve el contenido de un recurso compartido activo y rechaza las solicitudes desconocidas. + Los archivos recibidos se guardan en su dispositivo y nunca sobrescriben un archivo existente. + Política de privacidad + Si dos dispositivos no pueden conectarse directamente, la conexión cifrada puede retransmitirse. Los relés solo reenvían paquetes cifrados; nunca almacenan sus archivos. + Privacidad y seguridad + Envíe archivos directamente. Mantenga el control de quién los recibe. + Acerca de + Seguir la apariencia clara u oscura de este dispositivo. + Modo oscuro + Modo claro + Sistema + Apariencia + Solicitud de recepción + ID del dispositivo: %1$s + Un dispositivo cercano + %1$d solicitudes en espera + %1$s quiere recibir «%2$s». + Nivel de batería + nombre@ejemplo.com + Correo de contacto (opcional) + Cuéntenos qué salió mal. Adjuntamos información del dispositivo y, opcionalmente, registros recientes (con los valores sensibles ocultos). + Información del dispositivo + Describa lo que esperaba que ocurriera + ¿Qué esperaba? + Incluir registros recientes + Nos ayuda a diagnosticar el problema. Los valores sensibles se ocultan antes de enviarlos. + Tamaño del archivo de registros + Describa lo que esperaba. + Describa lo que ocurrió. + Enumere los pasos para reproducir el problema + Pasos para reproducir (opcional) + Enviar informe + No se pudo enviar el informe de error. Inténtelo de nuevo más tarde. + Gracias: su informe de error se ha registrado. + Enviando… + Describa lo que ocurrió + ¿Qué ocurrió? + Aprobar + Atrás + Cancelar + Cancelar + Cambiar archivos + Elegir archivos + Elegir carpeta + Borrar + Cerrar + Nueva transferencia + Eliminar transferencia + Guardar archivo .vnd + Compartir invitación + Abrir Ajustes + Recibir + Empezar a recibir + Rechazar + Quitar archivo + Usar predeterminado + Reintentar + Empezar a compartir + Preparando la transferencia… + Mostrar en Archivos + Escribir en etiqueta NFC + Modelo del dispositivo + Nombre del dispositivo + Enviar informes de fallos y eventos de uso anónimos para ayudarnos a mejorar VniDrop. Puede desactivarlo en cualquier momento. Las invitaciones, las rutas de archivos y el contenido de las transferencias nunca se incluyen. + El uso compartido de diagnósticos está desactivado. + El uso compartido de diagnósticos está activado. + Compartir diagnósticos + Se necesita acceso a la cámara para escanear un código QR. + No se pudo cargar la información del dispositivo. + VniDrop no pudo acceder a los archivos o la carpeta seleccionados. Compruebe los permisos e inténtelo de nuevo. + Algo salió mal. Inténtelo de nuevo. + VniDrop no pudo terminar de iniciarse. Cierre la app e inténtelo de nuevo. + No se pudo leer esta invitación. Pida al remitente una nueva. + Esa invitación está vacía. Intente abrirla de nuevo. + Falta la biblioteca nativa de VniDrop en esta versión. + No se pudo usar esta etiqueta NFC. Pruebe con otra. + El remitente no ha aprobado esta transferencia, o fue rechazada. + VniDrop no pudo guardar los datos de la transferencia en este dispositivo. + No se pudo abrir el elemento seleccionado. Intente elegirlo de nuevo. + Seleccione al menos un elemento para compartir. + VniDrop no pudo abrir sus sockets de red en este dispositivo. + VniDrop todavía se está iniciando. Vuelva a abrir la invitación en un momento. + No se pudo completar la transferencia. Compruebe su conexión e inténtelo de nuevo. + Nombre del destinatario + Nombre del remitente + Nombre de la transferencia + Nombre visible + Permiso necesario + No disponible + Comprobando carpeta… + Listo + Archivos + Tamaño + Estado + Recibir + Enviar + Ajustes + Red + Reciba avisos sobre nuevas solicitudes de recepción cuando VniDrop está en segundo plano. + Notificaciones activadas. + Permitir notificaciones + Las notificaciones están desactivadas para VniDrop. Puede activarlas en Ajustes. + No se pudieron abrir los ajustes de notificaciones. + Notificaciones + Las notificaciones no están disponibles en este dispositivo. + Sistema operativo + Guardar las transferencias recibidas en + Preferencias + Cancelado + Completado + Conectado + Conectando + Descargando + Fallido + Preparándose + Transferencia interrumpida + Preparando + Listo + Recibiendo + Solicitando acceso + Guardando + Enviando + Enviando a %1$d + Listo para compartir + Trabajando… + Elija el método de invitación de que disponga. + ¿Cómo quiere conectarse? + Borrar historial + Todas las recepciones completadas, fallidas y canceladas se eliminarán del historial de VniDrop. Los archivos descargados permanecerán en este dispositivo. + ¿Borrar el historial de recepción? + Transferencia recibida. + «%1$s» se eliminará del historial de VniDrop. El archivo descargado permanecerá en este dispositivo. + Eliminar del historial de recepción + ¿Quitar del historial? + Abra una invitación de VniDrop, escanee un código QR o acerque una etiqueta NFC. + Aún no se ha recibido nada + Historial de recepción borrado. + Historial + Abrir una invitación .vnd + Elija una invitación guardada o compartida en este dispositivo. + Leer etiqueta NFC + Acerque este dispositivo a la etiqueta de invitación del remitente. + Escanear código QR + Use la cámara para escanear el código de VniDrop del remitente. + Transferencias que ha recibido en este dispositivo. + Acerque a la etiqueta NFC… + No se pudo abrir VniDrop en Archivos. + Revisar transferencia + Recibir + Transferencia de VniDrop + Cualquiera que tenga esta transferencia + No se requiere aprobación. Úselo solo para elementos que no le importe compartir. + Cualquiera que tenga la invitación puede descargar hasta que deje de compartir. No lo use para elementos privados o sensibles. + Preguntar antes de cada descarga + Usted aprueba o rechaza a cada nuevo destinatario. + ¿Quién puede recibirla? + Seleccione archivos o una carpeta de este dispositivo. Podrá revisar la selección antes de crear la transferencia. + Elija qué compartir + Cree una transferencia, decida quién puede recibirla y luego invite a esas personas con un código QR, una etiqueta NFC o un archivo de invitación. + Aún no se ha compartido nada + Tamaño no disponible + Carpeta + Crear una nueva transferencia + Nueva transferencia + Revisar transferencia + %1$d archivos seleccionados + Dejar de compartir + Esto detiene la transferencia e interrumpe a quien esté descargándola. Permanece en su historial como Detenida. + Transferencias que está compartiendo desde este dispositivo. + Enviar + Transferencia creada. + Detalles de la transferencia + Sus transferencias + Su nombre, dónde se guardan las transferencias, la apariencia y las notificaciones. + Ajustes + Descartar + Disponible + Cancelado + Completado + Fallido + Preparando + Recibiendo + Detenido + Calculando… + Eliminar todas las transferencias + Esto borra todos los registros de transferencias enviadas y recibidas de su historial. Sus archivos recibidos no se eliminan. Nota: el motor de transferencia conserva su contenido almacenado, por lo que los datos de transferencia pueden no disminuir. Esto no se puede deshacer. + Eliminando… + Los datos de transferencia los gestiona el motor de transferencia: su historial más el contenido de los archivos que ha compartido. El botón de abajo borra sus registros de transferencias; el motor conserva su contenido almacenado, por lo que este valor puede no bajar. Los archivos recibidos son los archivos que ha descargado y nunca se eliminan aquí. + Archivos recibidos + Archivos temporales + Almacenamiento + Total + Datos de transferencia + Todas las transferencias eliminadas + Vea las actualizaciones importantes de esta transferencia + Actividad + «%1$s» dejará de compartirse y su historial de transferencia se eliminará de este dispositivo. + ¿Eliminar la transferencia? + Transferencia eliminada. + Eliminando… + Detalles de la transferencia + Acceso del destinatario aprobado + Un destinatario completó la transferencia + Conectando con el remitente + Descargando + La transferencia tuvo un problema + Preparando su transferencia + Listo para compartir + Acceso del destinatario rechazado + Un destinatario solicitó acceso + Guardando + Se dejó de compartir + Transferencia actualizada + Invitación guardada. + Dispositivo cercano + La escritura de etiquetas NFC no está disponible en este dispositivo. + Acerque su dispositivo a una etiqueta NFC grabable. + Invitación escrita en la etiqueta NFC. + Todavía no hay actividad que mostrar. + Nadie ha solicitado aún esta transferencia. + Aprobado: esperando a que se complete + Recibido correctamente + Solicitud caducada + Solicitud rechazada + Esperando su aprobación + Estado no disponible + %1$d completados + Solicitudes, aprobaciones y entregas completadas + %1$d en espera + Destinatarios + Escanee con VniDrop para recibir esta transferencia + Código QR, archivo de invitación y opciones cercanas + Compartir + No disponible + Versión de la app + + %1$d archivo + %1$d archivos + + From ea07f5661db42ca93723f662f675bdf617fa29ee Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 20 Jul 2026 11:15:54 +0200 Subject: [PATCH 07/13] feat(l10n): add Italian translations Translate all 253 user-facing strings to Italian (formal "Lei"; standard iOS button terms follow Apple conventions). Generates values-it/strings.xml for KMP, it localizations in the Apple catalog, and adds it to CFBundleLocalizations. --- apple/VniDrop/Resources/Info.plist | 1 + apple/VniDrop/Resources/Localizable.xcstrings | 1530 +++++++++++++++++ localization/strings.json | 763 +++++--- .../composeResources/values-it/strings.xml | 257 +++ 4 files changed, 2298 insertions(+), 253 deletions(-) create mode 100644 shared/src/commonMain/composeResources/values-it/strings.xml diff --git a/apple/VniDrop/Resources/Info.plist b/apple/VniDrop/Resources/Info.plist index aeec316..e267c3e 100644 --- a/apple/VniDrop/Resources/Info.plist +++ b/apple/VniDrop/Resources/Info.plist @@ -7,6 +7,7 @@ en fr es + it CADisableMinimumFrameDurationOnPhone diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index d020405..a7d26e5 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -26,6 +26,12 @@ "state": "needs_review", "value": "%1$@ %2$@ · %3$@" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } } } }, @@ -50,6 +56,12 @@ "state": "needs_review", "value": "%1$@ · %2$@" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } } } }, @@ -78,6 +90,12 @@ "state": "needs_review", "value": "Signaler un bug" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Segnala un bug" + } } } }, @@ -102,6 +120,12 @@ "state": "needs_review", "value": "VniDrop transfère fichiers et dossiers directement d’un appareil à un autre sur le réseau, sans les téléverser vers un service d’hébergement. Aucun compte à créer, et aucune copie de votre transfert ne reste dans le cloud une fois terminé." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop trasferisce file e cartelle direttamente da un dispositivo a un altro sulla rete, senza caricarli su alcun servizio di hosting. Non c’è alcun account da creare e nessuna copia del suo trasferimento rimane nel cloud una volta terminato." + } } } }, @@ -126,6 +150,12 @@ "state": "needs_review", "value": "Un transfert direct d’appareil à appareil — vos fichiers vont droit au destinataire." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Un trasferimento diretto da dispositivo a dispositivo: i suoi file vanno direttamente al destinatario." + } } } }, @@ -150,6 +180,12 @@ "state": "needs_review", "value": "Les connexions sont authentifiées et chiffrées de bout en bout (via Iroh), et les fichiers entrants sont vérifiés par leur empreinte de contenu." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Le connessioni sono autenticate e cifrate end-to-end (tramite Iroh) e i file in arrivo vengono verificati tramite l’impronta del loro contenuto." + } } } }, @@ -174,6 +210,12 @@ "state": "needs_review", "value": "Vous décidez qui reçoit : approuvez chaque demande, ou ouvrez un transfert à toute personne disposant de l’invitation." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Lei decide chi riceve: approvi ogni richiesta oppure apra un trasferimento a chiunque disponga dell’invito." + } } } }, @@ -198,6 +240,12 @@ "state": "needs_review", "value": "Sans compte — il n’y a rien à créer." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Senza account: non c’è nulla da registrare." + } } } }, @@ -222,6 +270,12 @@ "state": "needs_review", "value": "Open source, publié sous licence Apache 2.0." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Open source, rilasciato con licenza Apache 2.0." + } } } }, @@ -246,6 +300,12 @@ "state": "needs_review", "value": "Ce qu’est VniDrop" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cos’è VniDrop" + } } } }, @@ -270,6 +330,12 @@ "state": "needs_review", "value": "Pas un stockage cloud — aucun serveur ne détient vos fichiers, et rien n’attend dans le cloud après un transfert." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Non è un’archiviazione cloud: nessun server conserva i suoi file e nulla resta nel cloud dopo un trasferimento." + } } } }, @@ -294,6 +360,12 @@ "state": "needs_review", "value": "Pas une diffusion publique — une invitation est un lien d’accès privé, pas une annonce à tout le voisinage." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Non è una diffusione pubblica: un invito è un link di accesso privato, non un annuncio a tutti nelle vicinanze." + } } } }, @@ -318,6 +390,12 @@ "state": "needs_review", "value": "Pas un service de synchronisation ou de sauvegarde." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Non è un servizio di sincronizzazione o di backup." + } } } }, @@ -342,6 +420,12 @@ "state": "needs_review", "value": "Ce que VniDrop n’est pas" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cosa non è VniDrop" + } } } }, @@ -366,6 +450,12 @@ "state": "needs_review", "value": "Licence" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Licenza" + } } } }, @@ -390,6 +480,12 @@ "state": "needs_review", "value": "Politique de confidentialité" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Informativa sulla privacy" + } } } }, @@ -414,6 +510,12 @@ "state": "needs_review", "value": "Les invitations sont des clés d’accès. Traitez un QR code, un tag NFC ou un fichier .vnd comme un lien d’accès privé et ne le partagez qu’avec les personnes visées — en particulier avec « Toute personne disposant de ce transfert »." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Gli inviti sono chiavi di accesso. Tratti un codice QR, un tag NFC o un file .vnd come un link di accesso privato e lo condivida solo con le persone previste, soprattutto con «Chiunque abbia questo trasferimento»." + } } } }, @@ -438,6 +540,12 @@ "state": "needs_review", "value": "Refus par défaut — VniDrop ne sert que le contenu d’un partage actif et rejette les demandes inconnues." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Rifiuto predefinito: VniDrop serve solo il contenuto di una condivisione attiva e rifiuta le richieste sconosciute." + } } } }, @@ -462,6 +570,12 @@ "state": "needs_review", "value": "Les fichiers reçus sont enregistrés sur votre appareil et n’écrasent jamais un fichier existant." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "I file ricevuti vengono salvati sul suo dispositivo e non sovrascrivono mai un file esistente." + } } } }, @@ -486,6 +600,12 @@ "state": "needs_review", "value": "Politique de confidentialité" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Informativa sulla privacy" + } } } }, @@ -510,6 +630,12 @@ "state": "needs_review", "value": "Si deux appareils ne peuvent pas se connecter directement, la connexion chiffrée peut être relayée. Les relais ne transmettent que des paquets chiffrés ; ils ne stockent jamais vos fichiers." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Se due dispositivi non riescono a connettersi direttamente, la connessione cifrata può essere instradata tramite relay. I relay inoltrano solo pacchetti cifrati; non memorizzano mai i suoi file." + } } } }, @@ -534,6 +660,12 @@ "state": "needs_review", "value": "Confidentialité et sécurité" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Privacy e sicurezza" + } } } }, @@ -558,6 +690,12 @@ "state": "needs_review", "value": "Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invii file direttamente. Mantenga il controllo su chi li riceve." + } } } }, @@ -582,6 +720,12 @@ "state": "needs_review", "value": "À propos" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Informazioni" + } } } }, @@ -606,6 +750,12 @@ "state": "needs_review", "value": "Suivre l’apparence claire ou sombre de cet appareil." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Segue l’aspetto chiaro o scuro di questo dispositivo." + } } } }, @@ -630,6 +780,12 @@ "state": "needs_review", "value": "Mode sombre" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Modalità scura" + } } } }, @@ -654,6 +810,12 @@ "state": "needs_review", "value": "Mode clair" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Modalità chiara" + } } } }, @@ -678,6 +840,12 @@ "state": "needs_review", "value": "Système" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Sistema" + } } } }, @@ -702,6 +870,12 @@ "state": "needs_review", "value": "Apparence" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Aspetto" + } } } }, @@ -726,6 +900,12 @@ "state": "needs_review", "value": "Demande de réception" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Richiesta di ricezione" + } } } }, @@ -750,6 +930,12 @@ "state": "needs_review", "value": "Identifiant de l’appareil : %1$@" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "ID dispositivo: %1$@" + } } } }, @@ -774,6 +960,12 @@ "state": "needs_review", "value": "Un appareil à proximité" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Un dispositivo nelle vicinanze" + } } } }, @@ -798,6 +990,12 @@ "state": "needs_review", "value": "%1$d demandes en attente" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d richieste in attesa" + } } } }, @@ -822,6 +1020,12 @@ "state": "needs_review", "value": "%1$@ souhaite recevoir « %2$@ »." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ vuole ricevere «%2$@»." + } } } }, @@ -846,6 +1050,12 @@ "state": "needs_review", "value": "Niveau de batterie" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Livello batteria" + } } } }, @@ -870,6 +1080,12 @@ "state": "needs_review", "value": "nom@exemple.com" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "nome@esempio.com" + } } } }, @@ -894,6 +1110,12 @@ "state": "needs_review", "value": "E-mail de contact (facultatif)" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Email di contatto (facoltativa)" + } } } }, @@ -918,6 +1140,12 @@ "state": "needs_review", "value": "Dites-nous ce qui s’est passé. Nous joignons les infos de l’appareil et, en option, les journaux récents (valeurs sensibles masquées)." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ci dica cosa è andato storto. Alleghiamo le informazioni sul dispositivo e, facoltativamente, i log recenti (con i valori sensibili oscurati)." + } } } }, @@ -942,6 +1170,12 @@ "state": "needs_review", "value": "Informations sur l’appareil" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Informazioni sul dispositivo" + } } } }, @@ -966,6 +1200,12 @@ "state": "needs_review", "value": "Décrivez ce à quoi vous vous attendiez" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Descriva cosa si aspettava che accadesse" + } } } }, @@ -990,6 +1230,12 @@ "state": "needs_review", "value": "À quoi vous attendiez-vous ?" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cosa si aspettava?" + } } } }, @@ -1014,6 +1260,12 @@ "state": "needs_review", "value": "Inclure les journaux récents" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Includi i log recenti" + } } } }, @@ -1038,6 +1290,12 @@ "state": "needs_review", "value": "Nous aide à diagnostiquer le problème. Les valeurs sensibles sont masquées avant l’envoi." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ci aiuta a diagnosticare il problema. I valori sensibili vengono oscurati prima dell’invio." + } } } }, @@ -1062,6 +1320,12 @@ "state": "needs_review", "value": "Taille de la pièce jointe des journaux" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dimensione dell’allegato dei log" + } } } }, @@ -1086,6 +1350,12 @@ "state": "needs_review", "value": "Veuillez décrire ce à quoi vous vous attendiez." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Descriva cosa si aspettava." + } } } }, @@ -1110,6 +1380,12 @@ "state": "needs_review", "value": "Veuillez décrire ce qui s’est passé." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Descriva cosa è accaduto." + } } } }, @@ -1134,6 +1410,12 @@ "state": "needs_review", "value": "Listez les étapes pour reproduire le problème" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Elenchi i passaggi per riprodurre il problema" + } } } }, @@ -1158,6 +1440,12 @@ "state": "needs_review", "value": "Étapes pour reproduire (facultatif)" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Passaggi per riprodurre (facoltativi)" + } } } }, @@ -1182,6 +1470,12 @@ "state": "needs_review", "value": "Envoyer le rapport" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invia segnalazione" + } } } }, @@ -1206,6 +1500,12 @@ "state": "needs_review", "value": "Impossible d’envoyer le rapport de bug. Réessayez plus tard." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impossibile inviare la segnalazione. Riprovi più tardi." + } } } }, @@ -1230,6 +1530,12 @@ "state": "needs_review", "value": "Merci — votre rapport de bug a été enregistré." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Grazie: la sua segnalazione è stata registrata." + } } } }, @@ -1254,6 +1560,12 @@ "state": "needs_review", "value": "Envoi…" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invio in corso…" + } } } }, @@ -1278,6 +1590,12 @@ "state": "needs_review", "value": "Décrivez ce qui s’est passé" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Descriva cosa è accaduto" + } } } }, @@ -1302,6 +1620,12 @@ "state": "needs_review", "value": "Que s’est-il passé ?" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cosa è accaduto?" + } } } }, @@ -1326,6 +1650,12 @@ "state": "needs_review", "value": "Approuver" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Approva" + } } } }, @@ -1350,6 +1680,12 @@ "state": "needs_review", "value": "Retour" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Indietro" + } } } }, @@ -1374,6 +1710,12 @@ "state": "needs_review", "value": "Annuler" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Annulla" + } } } }, @@ -1398,6 +1740,12 @@ "state": "needs_review", "value": "Annuler" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Annulla" + } } } }, @@ -1422,6 +1770,12 @@ "state": "needs_review", "value": "Modifier les fichiers" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cambia file" + } } } }, @@ -1446,6 +1800,12 @@ "state": "needs_review", "value": "Choisir des fichiers" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Scegli file" + } } } }, @@ -1470,6 +1830,12 @@ "state": "needs_review", "value": "Choisir un dossier" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Scegli cartella" + } } } }, @@ -1494,6 +1860,12 @@ "state": "needs_review", "value": "Effacer" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cancella" + } } } }, @@ -1518,6 +1890,12 @@ "state": "needs_review", "value": "Fermer" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Chiudi" + } } } }, @@ -1542,6 +1920,12 @@ "state": "needs_review", "value": "Nouveau transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nuovo trasferimento" + } } } }, @@ -1566,6 +1950,12 @@ "state": "needs_review", "value": "Supprimer le transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Elimina trasferimento" + } } } }, @@ -1590,6 +1980,12 @@ "state": "needs_review", "value": "Enregistrer le fichier .vnd" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Salva file .vnd" + } } } }, @@ -1614,6 +2010,12 @@ "state": "needs_review", "value": "Partager l’invitation" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Condividi invito" + } } } }, @@ -1638,6 +2040,12 @@ "state": "needs_review", "value": "Ouvrir les Réglages" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Apri Impostazioni" + } } } }, @@ -1662,6 +2070,12 @@ "state": "needs_review", "value": "Recevoir" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ricevi" + } } } }, @@ -1686,6 +2100,12 @@ "state": "needs_review", "value": "Commencer à recevoir" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Inizia a ricevere" + } } } }, @@ -1710,6 +2130,12 @@ "state": "needs_review", "value": "Refuser" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Rifiuta" + } } } }, @@ -1734,6 +2160,12 @@ "state": "needs_review", "value": "Retirer le fichier" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Rimuovi file" + } } } }, @@ -1758,6 +2190,12 @@ "state": "needs_review", "value": "Valeur par défaut" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Usa predefinito" + } } } }, @@ -1782,6 +2220,12 @@ "state": "needs_review", "value": "Réessayer" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Riprova" + } } } }, @@ -1806,6 +2250,12 @@ "state": "needs_review", "value": "Commencer le partage" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Inizia a condividere" + } } } }, @@ -1830,6 +2280,12 @@ "state": "needs_review", "value": "Préparation du transfert…" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Preparazione del trasferimento…" + } } } }, @@ -1854,6 +2310,12 @@ "state": "needs_review", "value": "Afficher dans Fichiers" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Mostra in File" + } } } }, @@ -1878,6 +2340,12 @@ "state": "needs_review", "value": "Écrire sur un tag NFC" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Scrivi su tag NFC" + } } } }, @@ -1902,6 +2370,12 @@ "state": "needs_review", "value": "Modèle de l’appareil" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Modello del dispositivo" + } } } }, @@ -1926,6 +2400,12 @@ "state": "needs_review", "value": "Nom de l’appareil" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nome del dispositivo" + } } } }, @@ -1950,6 +2430,12 @@ "state": "needs_review", "value": "Envoyer des rapports de plantage et des événements d’utilisation anonymes pour nous aider à améliorer VniDrop. Vous pouvez désactiver cela à tout moment. Les invitations, chemins de fichiers et contenus de transfert ne sont jamais inclus." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invia report di arresto anomalo ed eventi d’uso anonimi per aiutarci a migliorare VniDrop. Può disattivarlo in qualsiasi momento. Inviti, percorsi dei file e contenuti dei trasferimenti non vengono mai inclusi." + } } } }, @@ -1974,6 +2460,12 @@ "state": "needs_review", "value": "Le partage des diagnostics est désactivé." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "La condivisione dei dati diagnostici è disattivata." + } } } }, @@ -1998,6 +2490,12 @@ "state": "needs_review", "value": "Le partage des diagnostics est activé." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "La condivisione dei dati diagnostici è attivata." + } } } }, @@ -2022,6 +2520,12 @@ "state": "needs_review", "value": "Partager les diagnostics" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Condividi dati diagnostici" + } } } }, @@ -2046,6 +2550,12 @@ "state": "needs_review", "value": "L’accès à la caméra est nécessaire pour scanner un QR code." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Per scansionare un codice QR è necessario l’accesso alla fotocamera." + } } } }, @@ -2070,6 +2580,12 @@ "state": "needs_review", "value": "Impossible de charger les informations de l’appareil." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impossibile caricare le informazioni sul dispositivo." + } } } }, @@ -2094,6 +2610,12 @@ "state": "needs_review", "value": "VniDrop n’a pas pu accéder aux fichiers ou au dossier sélectionnés. Vérifiez les autorisations et réessayez." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop non ha potuto accedere ai file o alla cartella selezionati. Controlli le autorizzazioni e riprovi." + } } } }, @@ -2118,6 +2640,12 @@ "state": "needs_review", "value": "Une erreur est survenue. Réessayez." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Qualcosa è andato storto. Riprovi." + } } } }, @@ -2142,6 +2670,12 @@ "state": "needs_review", "value": "VniDrop n’a pas pu terminer son démarrage. Fermez l’app et réessayez." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop non ha potuto completare l’avvio. Chiuda l’app e riprovi." + } } } }, @@ -2166,6 +2700,12 @@ "state": "needs_review", "value": "Cette invitation n’a pas pu être lue. Demandez-en une nouvelle à l’expéditeur." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impossibile leggere questo invito. Ne chieda uno nuovo al mittente." + } } } }, @@ -2190,6 +2730,12 @@ "state": "needs_review", "value": "Cette invitation est vide. Essayez de l’ouvrir à nouveau." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Questo invito è vuoto. Provi ad aprirlo di nuovo." + } } } }, @@ -2214,6 +2760,12 @@ "state": "needs_review", "value": "La bibliothèque native de VniDrop est absente de cette version." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "La libreria nativa di VniDrop non è presente in questa build." + } } } }, @@ -2238,6 +2790,12 @@ "state": "needs_review", "value": "Ce tag NFC n’a pas pu être utilisé. Essayez-en un autre." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impossibile usare questo tag NFC. Ne provi un altro." + } } } }, @@ -2262,6 +2820,12 @@ "state": "needs_review", "value": "L’expéditeur n’a pas approuvé ce transfert, ou il a été refusé." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Il mittente non ha approvato questo trasferimento, oppure è stato rifiutato." + } } } }, @@ -2286,6 +2850,12 @@ "state": "needs_review", "value": "VniDrop n’a pas pu enregistrer les données de transfert sur cet appareil." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop non ha potuto salvare i dati del trasferimento su questo dispositivo." + } } } }, @@ -2310,6 +2880,12 @@ "state": "needs_review", "value": "Impossible d’ouvrir l’élément sélectionné. Essayez de le choisir à nouveau." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impossibile aprire l’elemento selezionato. Provi a sceglierlo di nuovo." + } } } }, @@ -2334,6 +2910,12 @@ "state": "needs_review", "value": "Sélectionnez au moins un élément à partager." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Selezioni almeno un elemento da condividere." + } } } }, @@ -2358,6 +2940,12 @@ "state": "needs_review", "value": "VniDrop n’a pas pu ouvrir ses sockets réseau sur cet appareil." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop non ha potuto aprire i suoi socket di rete su questo dispositivo." + } } } }, @@ -2382,6 +2970,12 @@ "state": "needs_review", "value": "VniDrop démarre encore. Rouvrez l’invitation dans un instant." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop è ancora in fase di avvio. Riapra l’invito tra un momento." + } } } }, @@ -2406,6 +3000,12 @@ "state": "needs_review", "value": "Le transfert n’a pas pu être terminé. Vérifiez votre connexion et réessayez." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impossibile completare il trasferimento. Controlli la connessione e riprovi." + } } } }, @@ -2430,6 +3030,12 @@ "state": "needs_review", "value": "Nom du destinataire" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nome del destinatario" + } } } }, @@ -2454,6 +3060,12 @@ "state": "needs_review", "value": "Nom de l’expéditeur" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nome del mittente" + } } } }, @@ -2478,6 +3090,12 @@ "state": "needs_review", "value": "Nom du transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nome del trasferimento" + } } } }, @@ -2502,6 +3120,12 @@ "state": "needs_review", "value": "Nom d’affichage" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nome visualizzato" + } } } }, @@ -2526,6 +3150,12 @@ "state": "needs_review", "value": "Autorisation requise" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Autorizzazione necessaria" + } } } }, @@ -2550,6 +3180,12 @@ "state": "needs_review", "value": "Indisponible" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Non disponibile" + } } } }, @@ -2574,6 +3210,12 @@ "state": "needs_review", "value": "Vérification du dossier…" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Controllo della cartella…" + } } } }, @@ -2598,6 +3240,12 @@ "state": "needs_review", "value": "Prêt" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Pronta" + } } } }, @@ -2622,6 +3270,12 @@ "state": "needs_review", "value": "Fichiers" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "File" + } } } }, @@ -2646,6 +3300,12 @@ "state": "needs_review", "value": "Taille" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dimensione" + } } } }, @@ -2670,6 +3330,12 @@ "state": "needs_review", "value": "Statut" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Stato" + } } } }, @@ -2694,6 +3360,12 @@ "state": "needs_review", "value": "Recevoir" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ricevi" + } } } }, @@ -2718,6 +3390,12 @@ "state": "needs_review", "value": "Envoyer" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invia" + } } } }, @@ -2742,6 +3420,12 @@ "state": "needs_review", "value": "Réglages" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impostazioni" + } } } }, @@ -2766,6 +3450,12 @@ "state": "needs_review", "value": "Réseau" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Rete" + } } } }, @@ -2790,6 +3480,12 @@ "state": "needs_review", "value": "Soyez averti des nouvelles demandes de réception lorsque VniDrop est en arrière-plan." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ricevi avvisi sulle nuove richieste di ricezione quando VniDrop è in background." + } } } }, @@ -2814,6 +3510,12 @@ "state": "needs_review", "value": "Notifications activées." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Notifiche attivate." + } } } }, @@ -2838,6 +3540,12 @@ "state": "needs_review", "value": "Autoriser les notifications" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Consenti le notifiche" + } } } }, @@ -2862,6 +3570,12 @@ "state": "needs_review", "value": "Les notifications sont désactivées pour VniDrop. Vous pouvez les activer dans les Réglages." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Le notifiche sono disattivate per VniDrop. Può attivarle in Impostazioni." + } } } }, @@ -2886,6 +3600,12 @@ "state": "needs_review", "value": "Impossible d’ouvrir les réglages de notifications." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impossibile aprire le impostazioni delle notifiche." + } } } }, @@ -2910,6 +3630,12 @@ "state": "needs_review", "value": "Notifications" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Notifiche" + } } } }, @@ -2934,6 +3660,12 @@ "state": "needs_review", "value": "Les notifications ne sont pas disponibles sur cet appareil." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Le notifiche non sono disponibili su questo dispositivo." + } } } }, @@ -2958,6 +3690,12 @@ "state": "needs_review", "value": "Système d’exploitation" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Sistema operativo" + } } } }, @@ -2982,6 +3720,12 @@ "state": "needs_review", "value": "Enregistrer les transferts reçus dans" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Salva i trasferimenti ricevuti in" + } } } }, @@ -3006,6 +3750,12 @@ "state": "needs_review", "value": "Préférences" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Preferenze" + } } } }, @@ -3030,6 +3780,12 @@ "state": "needs_review", "value": "Annulé" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Annullato" + } } } }, @@ -3054,6 +3810,12 @@ "state": "needs_review", "value": "Terminé" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Completato" + } } } }, @@ -3078,6 +3840,12 @@ "state": "needs_review", "value": "Connecté" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Connesso" + } } } }, @@ -3102,6 +3870,12 @@ "state": "needs_review", "value": "Connexion" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Connessione" + } } } }, @@ -3126,6 +3900,12 @@ "state": "needs_review", "value": "Téléchargement" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Download" + } } } }, @@ -3150,6 +3930,12 @@ "state": "needs_review", "value": "Échec" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Non riuscito" + } } } }, @@ -3174,6 +3960,12 @@ "state": "needs_review", "value": "Préparation" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Preparazione" + } } } }, @@ -3198,6 +3990,12 @@ "state": "needs_review", "value": "Transfert interrompu" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimento interrotto" + } } } }, @@ -3222,6 +4020,12 @@ "state": "needs_review", "value": "Préparation" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Preparazione" + } } } }, @@ -3246,6 +4050,12 @@ "state": "needs_review", "value": "Prêt" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto" + } } } }, @@ -3270,6 +4080,12 @@ "state": "needs_review", "value": "Réception" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ricezione" + } } } }, @@ -3294,6 +4110,12 @@ "state": "needs_review", "value": "Demande d’accès" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Richiesta di accesso" + } } } }, @@ -3318,6 +4140,12 @@ "state": "needs_review", "value": "Enregistrement" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Salvataggio" + } } } }, @@ -3342,6 +4170,12 @@ "state": "needs_review", "value": "Envoi" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invio" + } } } }, @@ -3366,6 +4200,12 @@ "state": "needs_review", "value": "Envoi à %1$d" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invio a %1$d" + } } } }, @@ -3390,6 +4230,12 @@ "state": "needs_review", "value": "Prêt à partager" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto per la condivisione" + } } } }, @@ -3414,6 +4260,12 @@ "state": "needs_review", "value": "En cours…" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Elaborazione…" + } } } }, @@ -3438,6 +4290,12 @@ "state": "needs_review", "value": "Choisissez la méthode d’invitation à votre disposition." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Scelga il metodo di invito a sua disposizione." + } } } }, @@ -3462,6 +4320,12 @@ "state": "needs_review", "value": "Comment souhaitez-vous vous connecter ?" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Come vuole connettersi?" + } } } }, @@ -3486,6 +4350,12 @@ "state": "needs_review", "value": "Effacer l’historique" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cancella cronologia" + } } } }, @@ -3510,6 +4380,12 @@ "state": "needs_review", "value": "Toutes les réceptions terminées, échouées et annulées seront retirées de l’historique de VniDrop. Les fichiers téléchargés resteront sur cet appareil." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Tutte le ricezioni completate, non riuscite e annullate verranno rimosse dalla cronologia di VniDrop. I file scaricati rimarranno su questo dispositivo." + } } } }, @@ -3534,6 +4410,12 @@ "state": "needs_review", "value": "Effacer l’historique de réception ?" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cancellare la cronologia di ricezione?" + } } } }, @@ -3558,6 +4440,12 @@ "state": "needs_review", "value": "Transfert reçu." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimento ricevuto." + } } } }, @@ -3582,6 +4470,12 @@ "state": "needs_review", "value": "« %1$@ » sera retiré de l’historique de VniDrop. Le fichier téléchargé restera sur cet appareil." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "«%1$@» verrà rimosso dalla cronologia di VniDrop. Il file scaricato rimarrà su questo dispositivo." + } } } }, @@ -3606,6 +4500,12 @@ "state": "needs_review", "value": "Supprimer de l’historique de réception" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Elimina dalla cronologia di ricezione" + } } } }, @@ -3630,6 +4530,12 @@ "state": "needs_review", "value": "Retirer de l’historique ?" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Rimuovere dalla cronologia?" + } } } }, @@ -3654,6 +4560,12 @@ "state": "needs_review", "value": "Ouvrez une invitation VniDrop, scannez un QR code ou approchez un tag NFC." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Apra un invito VniDrop, scansioni un codice QR o avvicini un tag NFC." + } } } }, @@ -3678,6 +4590,12 @@ "state": "needs_review", "value": "Rien reçu pour l’instant" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ancora nulla di ricevuto" + } } } }, @@ -3702,6 +4620,12 @@ "state": "needs_review", "value": "Historique de réception effacé." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cronologia di ricezione cancellata." + } } } }, @@ -3726,6 +4650,12 @@ "state": "needs_review", "value": "Historique" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cronologia" + } } } }, @@ -3750,6 +4680,12 @@ "state": "needs_review", "value": "Ouvrir une invitation .vnd" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Apri un invito .vnd" + } } } }, @@ -3774,6 +4710,12 @@ "state": "needs_review", "value": "Choisissez une invitation enregistrée ou partagée sur cet appareil." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Scelga un invito salvato o condiviso su questo dispositivo." + } } } }, @@ -3798,6 +4740,12 @@ "state": "needs_review", "value": "Lire un tag NFC" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Leggi tag NFC" + } } } }, @@ -3822,6 +4770,12 @@ "state": "needs_review", "value": "Approchez cet appareil du tag d’invitation de l’expéditeur." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Avvicini questo dispositivo al tag di invito del mittente." + } } } }, @@ -3846,6 +4800,12 @@ "state": "needs_review", "value": "Scanner un QR code" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Scansiona codice QR" + } } } }, @@ -3870,6 +4830,12 @@ "state": "needs_review", "value": "Utilisez la caméra pour scanner le code VniDrop de l’expéditeur." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Usi la fotocamera per scansionare il codice VniDrop del mittente." + } } } }, @@ -3894,6 +4860,12 @@ "state": "needs_review", "value": "Transferts que vous avez reçus sur cet appareil." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimenti che ha ricevuto su questo dispositivo." + } } } }, @@ -3918,6 +4890,12 @@ "state": "needs_review", "value": "Approchez du tag NFC…" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Avvicini al tag NFC…" + } } } }, @@ -3942,6 +4920,12 @@ "state": "needs_review", "value": "Impossible d’ouvrir VniDrop dans Fichiers." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impossibile aprire VniDrop in File." + } } } }, @@ -3966,6 +4950,12 @@ "state": "needs_review", "value": "Vérifier le transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Rivedi trasferimento" + } } } }, @@ -3990,6 +4980,12 @@ "state": "needs_review", "value": "Recevoir" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ricevi" + } } } }, @@ -4014,6 +5010,12 @@ "state": "needs_review", "value": "Transfert VniDrop" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimento VniDrop" + } } } }, @@ -4038,6 +5040,12 @@ "state": "needs_review", "value": "Toute personne disposant de ce transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Chiunque abbia questo trasferimento" + } } } }, @@ -4062,6 +5070,12 @@ "state": "needs_review", "value": "Aucune approbation requise. À n’utiliser que pour des éléments que vous êtes à l’aise de partager." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nessuna approvazione richiesta. Da usare solo per elementi che non ha problemi a condividere." + } } } }, @@ -4086,6 +5100,12 @@ "state": "needs_review", "value": "Toute personne disposant de l’invitation peut télécharger jusqu’à ce que vous arrêtiez le partage. Ne l’utilisez pas pour des éléments privés ou sensibles." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Chiunque abbia l’invito può scaricare finché non interrompe la condivisione. Non lo usi per elementi privati o sensibili." + } } } }, @@ -4110,6 +5130,12 @@ "state": "needs_review", "value": "Demander avant chaque téléchargement" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Chiedi prima di ogni download" + } } } }, @@ -4134,6 +5160,12 @@ "state": "needs_review", "value": "Vous approuvez ou refusez chaque nouveau destinataire." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Approva o rifiuta ogni nuovo destinatario." + } } } }, @@ -4158,6 +5190,12 @@ "state": "needs_review", "value": "Qui peut le recevoir ?" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Chi può riceverlo?" + } } } }, @@ -4182,6 +5220,12 @@ "state": "needs_review", "value": "Sélectionnez des fichiers ou un dossier sur cet appareil. Vous pourrez vérifier la sélection avant de créer le transfert." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Selezioni file o una cartella da questo dispositivo. Potrà rivedere la selezione prima di creare il trasferimento." + } } } }, @@ -4206,6 +5250,12 @@ "state": "needs_review", "value": "Choisissez quoi partager" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Scelga cosa condividere" + } } } }, @@ -4230,6 +5280,12 @@ "state": "needs_review", "value": "Créez un transfert, décidez qui peut le recevoir, puis invitez-les avec un QR code, un tag NFC ou un fichier d’invitation." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Crei un trasferimento, decida chi può riceverlo, poi inviti queste persone con un codice QR, un tag NFC o un file di invito." + } } } }, @@ -4254,6 +5310,12 @@ "state": "needs_review", "value": "Rien partagé pour l’instant" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ancora nulla di condiviso" + } } } }, @@ -4278,6 +5340,12 @@ "state": "needs_review", "value": "Taille indisponible" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dimensione non disponibile" + } } } }, @@ -4302,6 +5370,12 @@ "state": "needs_review", "value": "Dossier" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cartella" + } } } }, @@ -4326,6 +5400,12 @@ "state": "needs_review", "value": "Créer un nouveau transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Crea un nuovo trasferimento" + } } } }, @@ -4350,6 +5430,12 @@ "state": "needs_review", "value": "Nouveau transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nuovo trasferimento" + } } } }, @@ -4374,6 +5460,12 @@ "state": "needs_review", "value": "Vérifier le transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Rivedi trasferimento" + } } } }, @@ -4398,6 +5490,12 @@ "state": "needs_review", "value": "%1$d fichiers sélectionnés" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d file selezionati" + } } } }, @@ -4422,6 +5520,12 @@ "state": "needs_review", "value": "Arrêter le partage" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Interrompi condivisione" + } } } }, @@ -4446,6 +5550,12 @@ "state": "needs_review", "value": "Cela arrête le transfert et interrompt toute personne en train de le télécharger. Il reste dans votre historique en tant qu’Arrêté." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Questo interrompe il trasferimento e blocca chiunque lo stia scaricando. Rimane nella sua cronologia come Interrotto." + } } } }, @@ -4470,6 +5580,12 @@ "state": "needs_review", "value": "Transferts que vous partagez depuis cet appareil." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimenti che sta condividendo da questo dispositivo." + } } } }, @@ -4494,6 +5610,12 @@ "state": "needs_review", "value": "Envoyer" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invia" + } } } }, @@ -4518,6 +5640,12 @@ "state": "needs_review", "value": "Transfert créé." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimento creato." + } } } }, @@ -4542,6 +5670,12 @@ "state": "needs_review", "value": "Détails du transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dettagli del trasferimento" + } } } }, @@ -4566,6 +5700,12 @@ "state": "needs_review", "value": "Vos transferts" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "I suoi trasferimenti" + } } } }, @@ -4590,6 +5730,12 @@ "state": "needs_review", "value": "Votre nom, l’emplacement d’enregistrement des transferts, l’apparence et les notifications." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Il suo nome, dove vengono salvati i trasferimenti, l’aspetto e le notifiche." + } } } }, @@ -4614,6 +5760,12 @@ "state": "needs_review", "value": "Réglages" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impostazioni" + } } } }, @@ -4638,6 +5790,12 @@ "state": "needs_review", "value": "Ignorer" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ignora" + } } } }, @@ -4662,6 +5820,12 @@ "state": "needs_review", "value": "Disponible" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Disponibile" + } } } }, @@ -4686,6 +5850,12 @@ "state": "needs_review", "value": "Annulé" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Annullato" + } } } }, @@ -4710,6 +5880,12 @@ "state": "needs_review", "value": "Terminé" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Completato" + } } } }, @@ -4734,6 +5910,12 @@ "state": "needs_review", "value": "Échec" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Non riuscito" + } } } }, @@ -4758,6 +5940,12 @@ "state": "needs_review", "value": "Préparation" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Preparazione" + } } } }, @@ -4782,6 +5970,12 @@ "state": "needs_review", "value": "Réception" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ricezione" + } } } }, @@ -4806,6 +6000,12 @@ "state": "needs_review", "value": "Arrêté" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Interrotto" + } } } }, @@ -4830,6 +6030,12 @@ "state": "needs_review", "value": "Calcul…" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Calcolo…" + } } } }, @@ -4854,6 +6060,12 @@ "state": "needs_review", "value": "Supprimer tous les transferts" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Elimina tutti i trasferimenti" + } } } }, @@ -4878,6 +6090,12 @@ "state": "needs_review", "value": "Cela efface tous les enregistrements de transferts envoyés et reçus de votre historique. Vos fichiers reçus ne sont pas supprimés. Remarque : le moteur de transfert conserve son contenu stocké, donc les données de transfert peuvent ne pas diminuer. Cette action est irréversible." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Questo cancella dalla cronologia tutti i record dei trasferimenti inviati e ricevuti. I suoi file ricevuti non vengono eliminati. Nota: il motore di trasferimento conserva il contenuto memorizzato, quindi i dati di trasferimento potrebbero non diminuire. Questa operazione non può essere annullata." + } } } }, @@ -4902,6 +6120,12 @@ "state": "needs_review", "value": "Suppression…" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminazione…" + } } } }, @@ -4926,6 +6150,12 @@ "state": "needs_review", "value": "Les données de transfert sont gérées par le moteur de transfert — votre historique ainsi que le contenu des fichiers que vous avez partagés. Le bouton ci-dessous efface vos enregistrements de transferts ; le moteur conserve son contenu stocké, donc cette valeur peut ne pas baisser. Les fichiers reçus sont vos fichiers téléchargés et ne sont jamais supprimés ici." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "I dati di trasferimento sono gestiti dal motore di trasferimento: la sua cronologia più il contenuto dei file che ha condiviso. Il pulsante qui sotto cancella i record dei trasferimenti; il motore conserva il contenuto memorizzato, quindi questo valore potrebbe non diminuire. I file ricevuti sono i file che ha scaricato e non vengono mai eliminati qui." + } } } }, @@ -4950,6 +6180,12 @@ "state": "needs_review", "value": "Fichiers reçus" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "File ricevuti" + } } } }, @@ -4974,6 +6210,12 @@ "state": "needs_review", "value": "Fichiers temporaires" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "File temporanei" + } } } }, @@ -4998,6 +6240,12 @@ "state": "needs_review", "value": "Stockage" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Archiviazione" + } } } }, @@ -5022,6 +6270,12 @@ "state": "needs_review", "value": "Total" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Totale" + } } } }, @@ -5046,6 +6300,12 @@ "state": "needs_review", "value": "Données de transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dati di trasferimento" + } } } }, @@ -5070,6 +6330,12 @@ "state": "needs_review", "value": "Tous les transferts supprimés" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Tutti i trasferimenti eliminati" + } } } }, @@ -5094,6 +6360,12 @@ "state": "needs_review", "value": "Consultez les mises à jour importantes de ce transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Veda gli aggiornamenti importanti di questo trasferimento" + } } } }, @@ -5118,6 +6390,12 @@ "state": "needs_review", "value": "Activité" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Attività" + } } } }, @@ -5142,6 +6420,12 @@ "state": "needs_review", "value": "« %1$@ » cessera d’être partagé et son historique de transfert sera retiré de cet appareil." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "«%1$@» non verrà più condiviso e la sua cronologia di trasferimento verrà rimossa da questo dispositivo." + } } } }, @@ -5166,6 +6450,12 @@ "state": "needs_review", "value": "Supprimer le transfert ?" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminare il trasferimento?" + } } } }, @@ -5190,6 +6480,12 @@ "state": "needs_review", "value": "Transfert supprimé." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimento eliminato." + } } } }, @@ -5214,6 +6510,12 @@ "state": "needs_review", "value": "Suppression…" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminazione…" + } } } }, @@ -5238,6 +6540,12 @@ "state": "needs_review", "value": "Détails du transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dettagli del trasferimento" + } } } }, @@ -5262,6 +6570,12 @@ "state": "needs_review", "value": "Accès du destinataire approuvé" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Accesso del destinatario approvato" + } } } }, @@ -5286,6 +6600,12 @@ "state": "needs_review", "value": "Un destinataire a terminé le transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinatario ha completato il trasferimento" + } } } }, @@ -5310,6 +6630,12 @@ "state": "needs_review", "value": "Connexion à l’expéditeur" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Connessione al mittente" + } } } }, @@ -5334,6 +6660,12 @@ "state": "needs_review", "value": "Téléchargement" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Download" + } } } }, @@ -5358,6 +6690,12 @@ "state": "needs_review", "value": "Le transfert a rencontré un problème" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Il trasferimento ha riscontrato un problema" + } } } }, @@ -5382,6 +6720,12 @@ "state": "needs_review", "value": "Préparation de votre transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Preparazione del trasferimento" + } } } }, @@ -5406,6 +6750,12 @@ "state": "needs_review", "value": "Prêt à partager" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto per la condivisione" + } } } }, @@ -5430,6 +6780,12 @@ "state": "needs_review", "value": "Accès du destinataire refusé" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Accesso del destinatario rifiutato" + } } } }, @@ -5454,6 +6810,12 @@ "state": "needs_review", "value": "Un destinataire a demandé l’accès" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinatario ha richiesto l’accesso" + } } } }, @@ -5478,6 +6840,12 @@ "state": "needs_review", "value": "Enregistrement" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Salvataggio" + } } } }, @@ -5502,6 +6870,12 @@ "state": "needs_review", "value": "Partage arrêté" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Condivisione interrotta" + } } } }, @@ -5526,6 +6900,12 @@ "state": "needs_review", "value": "Transfert mis à jour" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimento aggiornato" + } } } }, @@ -5586,6 +6966,24 @@ } } } + }, + "it": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d file" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d file" + } + } + } + } } } }, @@ -5610,6 +7008,12 @@ "state": "needs_review", "value": "Invitation enregistrée." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invito salvato." + } } } }, @@ -5634,6 +7038,12 @@ "state": "needs_review", "value": "Appareil à proximité" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dispositivo nelle vicinanze" + } } } }, @@ -5658,6 +7068,12 @@ "state": "needs_review", "value": "L’écriture de tag NFC n’est pas disponible sur cet appareil." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "La scrittura dei tag NFC non è disponibile su questo dispositivo." + } } } }, @@ -5682,6 +7098,12 @@ "state": "needs_review", "value": "Approchez votre appareil d’un tag NFC inscriptible." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Avvicini il dispositivo a un tag NFC scrivibile." + } } } }, @@ -5706,6 +7128,12 @@ "state": "needs_review", "value": "Invitation écrite sur le tag NFC." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invito scritto sul tag NFC." + } } } }, @@ -5730,6 +7158,12 @@ "state": "needs_review", "value": "Aucune activité à afficher pour l’instant." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Non c’è ancora alcuna attività da mostrare." + } } } }, @@ -5754,6 +7188,12 @@ "state": "needs_review", "value": "Personne n’a encore demandé ce transfert." } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nessuno ha ancora richiesto questo trasferimento." + } } } }, @@ -5778,6 +7218,12 @@ "state": "needs_review", "value": "Approuvé — en attente de la fin" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Approvato: in attesa del completamento" + } } } }, @@ -5802,6 +7248,12 @@ "state": "needs_review", "value": "Reçu avec succès" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ricevuto correttamente" + } } } }, @@ -5826,6 +7278,12 @@ "state": "needs_review", "value": "Demande expirée" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Richiesta scaduta" + } } } }, @@ -5850,6 +7308,12 @@ "state": "needs_review", "value": "Demande refusée" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Richiesta rifiutata" + } } } }, @@ -5874,6 +7338,12 @@ "state": "needs_review", "value": "En attente de votre approbation" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "In attesa della sua approvazione" + } } } }, @@ -5898,6 +7368,12 @@ "state": "needs_review", "value": "Statut indisponible" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Stato non disponibile" + } } } }, @@ -5922,6 +7398,12 @@ "state": "needs_review", "value": "%1$d terminés" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d completati" + } } } }, @@ -5946,6 +7428,12 @@ "state": "needs_review", "value": "Demandes, approbations et livraisons terminées" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Richieste, approvazioni e consegne completate" + } } } }, @@ -5970,6 +7458,12 @@ "state": "needs_review", "value": "%1$d en attente" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d in attesa" + } } } }, @@ -5994,6 +7488,12 @@ "state": "needs_review", "value": "Destinataires" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Destinatari" + } } } }, @@ -6018,6 +7518,12 @@ "state": "needs_review", "value": "Scannez avec VniDrop pour recevoir ce transfert" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Scansioni con VniDrop per ricevere questo trasferimento" + } } } }, @@ -6042,6 +7548,12 @@ "state": "needs_review", "value": "QR code, fichier d’invitation et options à proximité" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Codice QR, file di invito e opzioni nelle vicinanze" + } } } }, @@ -6066,6 +7578,12 @@ "state": "needs_review", "value": "Partager" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Condividi" + } } } }, @@ -6090,6 +7608,12 @@ "state": "needs_review", "value": "Non disponible" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Non disponibile" + } } } }, @@ -6114,6 +7638,12 @@ "state": "needs_review", "value": "Version de l’app" } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Versione dell’app" + } } } } diff --git a/localization/strings.json b/localization/strings.json index 2ca208c..1abff78 100644 --- a/localization/strings.json +++ b/localization/strings.json @@ -4,7 +4,8 @@ "supportedLanguages": [ "en", "fr", - "es" + "es", + "it" ], "strings": { "%@": { @@ -35,7 +36,8 @@ "translations": { "en": "{arg1} {arg2} · {arg3}", "fr": "{arg1} {arg2} · {arg3}", - "es": "{arg1} {arg2} · {arg3}" + "es": "{arg1} {arg2} · {arg3}", + "it": "{arg1} {arg2} · {arg3}" } }, "%@ · %@": { @@ -56,7 +58,8 @@ "translations": { "en": "{arg1} · {arg2}", "fr": "{arg1} · {arg2}", - "es": "{arg1} · {arg2}" + "es": "{arg1} · {arg2}", + "it": "{arg1} · {arg2}" } }, "%@%%": { @@ -70,7 +73,8 @@ "translations": { "en": "Report a bug", "fr": "Signaler un bug", - "es": "Informar de un error" + "es": "Informar de un error", + "it": "Segnala un bug" } }, "about_description": { @@ -78,7 +82,8 @@ "translations": { "en": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done.", "fr": "VniDrop transfère fichiers et dossiers directement d’un appareil à un autre sur le réseau, sans les téléverser vers un service d’hébergement. Aucun compte à créer, et aucune copie de votre transfert ne reste dans le cloud une fois terminé.", - "es": "VniDrop transfiere archivos y carpetas directamente de un dispositivo a otro a través de la red, sin subirlos a ningún servicio de alojamiento. No hay que crear ninguna cuenta y no queda ninguna copia de su transferencia en la nube una vez que termina." + "es": "VniDrop transfiere archivos y carpetas directamente de un dispositivo a otro a través de la red, sin subirlos a ningún servicio de alojamiento. No hay que crear ninguna cuenta y no queda ninguna copia de su transferencia en la nube una vez que termina.", + "it": "VniDrop trasferisce file e cartelle direttamente da un dispositivo a un altro sulla rete, senza caricarli su alcun servizio di hosting. Non c’è alcun account da creare e nessuna copia del suo trasferimento rimane nel cloud una volta terminato." } }, "about_is_direct": { @@ -86,7 +91,8 @@ "translations": { "en": "A direct device-to-device transfer — your files go straight to the receiver.", "fr": "Un transfert direct d’appareil à appareil — vos fichiers vont droit au destinataire.", - "es": "Una transferencia directa entre dispositivos: sus archivos van directamente al destinatario." + "es": "Una transferencia directa entre dispositivos: sus archivos van directamente al destinatario.", + "it": "Un trasferimento diretto da dispositivo a dispositivo: i suoi file vanno direttamente al destinatario." } }, "about_is_encrypted": { @@ -94,7 +100,8 @@ "translations": { "en": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash.", "fr": "Les connexions sont authentifiées et chiffrées de bout en bout (via Iroh), et les fichiers entrants sont vérifiés par leur empreinte de contenu.", - "es": "Las conexiones están autenticadas y cifradas de extremo a extremo (mediante Iroh), y los archivos entrantes se verifican por su huella de contenido." + "es": "Las conexiones están autenticadas y cifradas de extremo a extremo (mediante Iroh), y los archivos entrantes se verifican por su huella de contenido.", + "it": "Le connessioni sono autenticate e cifrate end-to-end (tramite Iroh) e i file in arrivo vengono verificati tramite l’impronta del loro contenuto." } }, "about_is_in_control": { @@ -102,7 +109,8 @@ "translations": { "en": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation.", "fr": "Vous décidez qui reçoit : approuvez chaque demande, ou ouvrez un transfert à toute personne disposant de l’invitation.", - "es": "Usted decide quién recibe: apruebe cada solicitud o abra una transferencia a cualquiera que tenga la invitación." + "es": "Usted decide quién recibe: apruebe cada solicitud o abra una transferencia a cualquiera que tenga la invitación.", + "it": "Lei decide chi riceve: approvi ogni richiesta oppure apra un trasferimento a chiunque disponga dell’invito." } }, "about_is_no_account": { @@ -110,7 +118,8 @@ "translations": { "en": "Account-free — there’s nothing to sign up for.", "fr": "Sans compte — il n’y a rien à créer.", - "es": "Sin cuenta: no hay nada que registrar." + "es": "Sin cuenta: no hay nada que registrar.", + "it": "Senza account: non c’è nulla da registrare." } }, "about_is_open": { @@ -118,7 +127,8 @@ "translations": { "en": "Open source, released under the Apache 2.0 license.", "fr": "Open source, publié sous licence Apache 2.0.", - "es": "Código abierto, publicado bajo la licencia Apache 2.0." + "es": "Código abierto, publicado bajo la licencia Apache 2.0.", + "it": "Open source, rilasciato con licenza Apache 2.0." } }, "about_is_title": { @@ -126,7 +136,8 @@ "translations": { "en": "What VniDrop is", "fr": "Ce qu’est VniDrop", - "es": "Qué es VniDrop" + "es": "Qué es VniDrop", + "it": "Cos’è VniDrop" } }, "about_isnt_cloud": { @@ -134,7 +145,8 @@ "translations": { "en": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer.", "fr": "Pas un stockage cloud — aucun serveur ne détient vos fichiers, et rien n’attend dans le cloud après un transfert.", - "es": "No es almacenamiento en la nube: ningún servidor guarda sus archivos y nada queda en la nube después de una transferencia." + "es": "No es almacenamiento en la nube: ningún servidor guarda sus archivos y nada queda en la nube después de una transferencia.", + "it": "Non è un’archiviazione cloud: nessun server conserva i suoi file e nulla resta nel cloud dopo un trasferimento." } }, "about_isnt_public": { @@ -142,7 +154,8 @@ "translations": { "en": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby.", "fr": "Pas une diffusion publique — une invitation est un lien d’accès privé, pas une annonce à tout le voisinage.", - "es": "No es difusión pública: una invitación es un enlace de acceso privado, no un anuncio para todos los que estén cerca." + "es": "No es difusión pública: una invitación es un enlace de acceso privado, no un anuncio para todos los que estén cerca.", + "it": "Non è una diffusione pubblica: un invito è un link di accesso privato, non un annuncio a tutti nelle vicinanze." } }, "about_isnt_sync": { @@ -150,7 +163,8 @@ "translations": { "en": "Not a sync or backup service.", "fr": "Pas un service de synchronisation ou de sauvegarde.", - "es": "No es un servicio de sincronización ni de copia de seguridad." + "es": "No es un servicio de sincronización ni de copia de seguridad.", + "it": "Non è un servizio di sincronizzazione o di backup." } }, "about_isnt_title": { @@ -158,7 +172,8 @@ "translations": { "en": "What VniDrop isn’t", "fr": "Ce que VniDrop n’est pas", - "es": "Qué no es VniDrop" + "es": "Qué no es VniDrop", + "it": "Cosa non è VniDrop" } }, "about_license_label": { @@ -166,7 +181,8 @@ "translations": { "en": "License", "fr": "Licence", - "es": "Licencia" + "es": "Licencia", + "it": "Licenza" } }, "about_privacy": { @@ -174,7 +190,8 @@ "translations": { "en": "Privacy policy", "fr": "Politique de confidentialité", - "es": "Política de privacidad" + "es": "Política de privacidad", + "it": "Informativa sulla privacy" } }, "about_privacy_capability": { @@ -182,7 +199,8 @@ "translations": { "en": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”", "fr": "Les invitations sont des clés d’accès. Traitez un QR code, un tag NFC ou un fichier .vnd comme un lien d’accès privé et ne le partagez qu’avec les personnes visées — en particulier avec « Toute personne disposant de ce transfert ».", - "es": "Las invitaciones son claves de acceso. Trate un código QR, una etiqueta NFC o un archivo .vnd como un enlace de acceso privado y compártalo solo con las personas previstas, especialmente con «Cualquiera que tenga esta transferencia»." + "es": "Las invitaciones son claves de acceso. Trate un código QR, una etiqueta NFC o un archivo .vnd como un enlace de acceso privado y compártalo solo con las personas previstas, especialmente con «Cualquiera que tenga esta transferencia».", + "it": "Gli inviti sono chiavi di accesso. Tratti un codice QR, un tag NFC o un file .vnd come un link di accesso privato e lo condivida solo con le persone previste, soprattutto con «Chiunque abbia questo trasferimento»." } }, "about_privacy_deny": { @@ -190,7 +208,8 @@ "translations": { "en": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests.", "fr": "Refus par défaut — VniDrop ne sert que le contenu d’un partage actif et rejette les demandes inconnues.", - "es": "Denegación por defecto: VniDrop solo sirve el contenido de un recurso compartido activo y rechaza las solicitudes desconocidas." + "es": "Denegación por defecto: VniDrop solo sirve el contenido de un recurso compartido activo y rechaza las solicitudes desconocidas.", + "it": "Rifiuto predefinito: VniDrop serve solo il contenuto di una condivisione attiva e rifiuta le richieste sconosciute." } }, "about_privacy_local": { @@ -198,7 +217,8 @@ "translations": { "en": "Received files are saved on your device and never silently overwrite an existing file.", "fr": "Les fichiers reçus sont enregistrés sur votre appareil et n’écrasent jamais un fichier existant.", - "es": "Los archivos recibidos se guardan en su dispositivo y nunca sobrescriben un archivo existente." + "es": "Los archivos recibidos se guardan en su dispositivo y nunca sobrescriben un archivo existente.", + "it": "I file ricevuti vengono salvati sul suo dispositivo e non sovrascrivono mai un file esistente." } }, "about_privacy_policy_label": { @@ -206,7 +226,8 @@ "translations": { "en": "Privacy policy", "fr": "Politique de confidentialité", - "es": "Política de privacidad" + "es": "Política de privacidad", + "it": "Informativa sulla privacy" } }, "about_privacy_relay": { @@ -214,7 +235,8 @@ "translations": { "en": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files.", "fr": "Si deux appareils ne peuvent pas se connecter directement, la connexion chiffrée peut être relayée. Les relais ne transmettent que des paquets chiffrés ; ils ne stockent jamais vos fichiers.", - "es": "Si dos dispositivos no pueden conectarse directamente, la conexión cifrada puede retransmitirse. Los relés solo reenvían paquetes cifrados; nunca almacenan sus archivos." + "es": "Si dos dispositivos no pueden conectarse directamente, la conexión cifrada puede retransmitirse. Los relés solo reenvían paquetes cifrados; nunca almacenan sus archivos.", + "it": "Se due dispositivi non riescono a connettersi direttamente, la connessione cifrata può essere instradata tramite relay. I relay inoltrano solo pacchetti cifrati; non memorizzano mai i suoi file." } }, "about_privacy_title": { @@ -222,7 +244,8 @@ "translations": { "en": "Privacy & security", "fr": "Confidentialité et sécurité", - "es": "Privacidad y seguridad" + "es": "Privacidad y seguridad", + "it": "Privacy e sicurezza" } }, "about_tagline": { @@ -230,7 +253,8 @@ "translations": { "en": "Send files directly. Stay in control of who receives them.", "fr": "Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit.", - "es": "Envíe archivos directamente. Mantenga el control de quién los recibe." + "es": "Envíe archivos directamente. Mantenga el control de quién los recibe.", + "it": "Invii file direttamente. Mantenga il controllo su chi li riceve." } }, "about_title": { @@ -238,7 +262,8 @@ "translations": { "en": "About", "fr": "À propos", - "es": "Acerca de" + "es": "Acerca de", + "it": "Informazioni" } }, "appearance_auto_description": { @@ -246,7 +271,8 @@ "translations": { "en": "Match this device’s light or dark appearance.", "fr": "Suivre l’apparence claire ou sombre de cet appareil.", - "es": "Seguir la apariencia clara u oscura de este dispositivo." + "es": "Seguir la apariencia clara u oscura de este dispositivo.", + "it": "Segue l’aspetto chiaro o scuro di questo dispositivo." } }, "appearance_dark_mode": { @@ -254,7 +280,8 @@ "translations": { "en": "Dark mode", "fr": "Mode sombre", - "es": "Modo oscuro" + "es": "Modo oscuro", + "it": "Modalità scura" } }, "appearance_light_mode": { @@ -262,7 +289,8 @@ "translations": { "en": "Light mode", "fr": "Mode clair", - "es": "Modo claro" + "es": "Modo claro", + "it": "Modalità chiara" } }, "appearance_system_mode": { @@ -270,7 +298,8 @@ "translations": { "en": "System", "fr": "Système", - "es": "Sistema" + "es": "Sistema", + "it": "Sistema" } }, "appearance_title": { @@ -278,7 +307,8 @@ "translations": { "en": "Appearance", "fr": "Apparence", - "es": "Apariencia" + "es": "Apariencia", + "it": "Aspetto" } }, "approval_connection_request": { @@ -286,7 +316,8 @@ "translations": { "en": "Receive request", "fr": "Demande de réception", - "es": "Solicitud de recepción" + "es": "Solicitud de recepción", + "it": "Richiesta di ricezione" } }, "approval_endpoint_id": { @@ -300,7 +331,8 @@ "translations": { "en": "Device ID: {arg1}", "fr": "Identifiant de l’appareil : {arg1}", - "es": "ID del dispositivo: {arg1}" + "es": "ID del dispositivo: {arg1}", + "it": "ID dispositivo: {arg1}" } }, "approval_nearby_device": { @@ -308,7 +340,8 @@ "translations": { "en": "A nearby device", "fr": "Un appareil à proximité", - "es": "Un dispositivo cercano" + "es": "Un dispositivo cercano", + "it": "Un dispositivo nelle vicinanze" } }, "approval_pending_count": { @@ -322,7 +355,8 @@ "translations": { "en": "{count} requests waiting", "fr": "{count} demandes en attente", - "es": "{count} solicitudes en espera" + "es": "{count} solicitudes en espera", + "it": "{count} richieste in attesa" } }, "approval_request_body": { @@ -340,7 +374,8 @@ "translations": { "en": "{arg1} wants to receive “{arg2}”.", "fr": "{arg1} souhaite recevoir « {arg2} ».", - "es": "{arg1} quiere recibir «{arg2}»." + "es": "{arg1} quiere recibir «{arg2}».", + "it": "{arg1} vuole ricevere «{arg2}»." } }, "battery_level_title": { @@ -348,7 +383,8 @@ "translations": { "en": "Battery level", "fr": "Niveau de batterie", - "es": "Nivel de batería" + "es": "Nivel de batería", + "it": "Livello batteria" } }, "bug_report_contact_hint": { @@ -356,7 +392,8 @@ "translations": { "en": "name@example.com", "fr": "nom@exemple.com", - "es": "nombre@ejemplo.com" + "es": "nombre@ejemplo.com", + "it": "nome@esempio.com" } }, "bug_report_contact_label": { @@ -364,7 +401,8 @@ "translations": { "en": "Contact email (optional)", "fr": "E-mail de contact (facultatif)", - "es": "Correo de contacto (opcional)" + "es": "Correo de contacto (opcional)", + "it": "Email di contatto (facoltativa)" } }, "bug_report_description": { @@ -372,7 +410,8 @@ "translations": { "en": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted).", "fr": "Dites-nous ce qui s’est passé. Nous joignons les infos de l’appareil et, en option, les journaux récents (valeurs sensibles masquées).", - "es": "Cuéntenos qué salió mal. Adjuntamos información del dispositivo y, opcionalmente, registros recientes (con los valores sensibles ocultos)." + "es": "Cuéntenos qué salió mal. Adjuntamos información del dispositivo y, opcionalmente, registros recientes (con los valores sensibles ocultos).", + "it": "Ci dica cosa è andato storto. Alleghiamo le informazioni sul dispositivo e, facoltativamente, i log recenti (con i valori sensibili oscurati)." } }, "bug_report_device_section": { @@ -380,7 +419,8 @@ "translations": { "en": "Device information", "fr": "Informations sur l’appareil", - "es": "Información del dispositivo" + "es": "Información del dispositivo", + "it": "Informazioni sul dispositivo" } }, "bug_report_expected_hint": { @@ -388,7 +428,8 @@ "translations": { "en": "Describe what you expected to happen", "fr": "Décrivez ce à quoi vous vous attendiez", - "es": "Describa lo que esperaba que ocurriera" + "es": "Describa lo que esperaba que ocurriera", + "it": "Descriva cosa si aspettava che accadesse" } }, "bug_report_expected_label": { @@ -396,7 +437,8 @@ "translations": { "en": "What did you expect?", "fr": "À quoi vous attendiez-vous ?", - "es": "¿Qué esperaba?" + "es": "¿Qué esperaba?", + "it": "Cosa si aspettava?" } }, "bug_report_include_logs": { @@ -404,7 +446,8 @@ "translations": { "en": "Include recent logs", "fr": "Inclure les journaux récents", - "es": "Incluir registros recientes" + "es": "Incluir registros recientes", + "it": "Includi i log recenti" } }, "bug_report_include_logs_description": { @@ -412,7 +455,8 @@ "translations": { "en": "Helps us diagnose the issue. Sensitive values are redacted before sending.", "fr": "Nous aide à diagnostiquer le problème. Les valeurs sensibles sont masquées avant l’envoi.", - "es": "Nos ayuda a diagnosticar el problema. Los valores sensibles se ocultan antes de enviarlos." + "es": "Nos ayuda a diagnosticar el problema. Los valores sensibles se ocultan antes de enviarlos.", + "it": "Ci aiuta a diagnosticare il problema. I valori sensibili vengono oscurati prima dell’invio." } }, "bug_report_logs_size": { @@ -420,7 +464,8 @@ "translations": { "en": "Log attachment size", "fr": "Taille de la pièce jointe des journaux", - "es": "Tamaño del archivo de registros" + "es": "Tamaño del archivo de registros", + "it": "Dimensione dell’allegato dei log" } }, "bug_report_missing_expected": { @@ -428,7 +473,8 @@ "translations": { "en": "Please describe what you expected.", "fr": "Veuillez décrire ce à quoi vous vous attendiez.", - "es": "Describa lo que esperaba." + "es": "Describa lo que esperaba.", + "it": "Descriva cosa si aspettava." } }, "bug_report_missing_what": { @@ -436,7 +482,8 @@ "translations": { "en": "Please describe what happened.", "fr": "Veuillez décrire ce qui s’est passé.", - "es": "Describa lo que ocurrió." + "es": "Describa lo que ocurrió.", + "it": "Descriva cosa è accaduto." } }, "bug_report_steps_hint": { @@ -444,7 +491,8 @@ "translations": { "en": "List the steps to reproduce the issue", "fr": "Listez les étapes pour reproduire le problème", - "es": "Enumere los pasos para reproducir el problema" + "es": "Enumere los pasos para reproducir el problema", + "it": "Elenchi i passaggi per riprodurre il problema" } }, "bug_report_steps_label": { @@ -452,7 +500,8 @@ "translations": { "en": "Steps to reproduce (optional)", "fr": "Étapes pour reproduire (facultatif)", - "es": "Pasos para reproducir (opcional)" + "es": "Pasos para reproducir (opcional)", + "it": "Passaggi per riprodurre (facoltativi)" } }, "bug_report_submit": { @@ -460,7 +509,8 @@ "translations": { "en": "Submit report", "fr": "Envoyer le rapport", - "es": "Enviar informe" + "es": "Enviar informe", + "it": "Invia segnalazione" } }, "bug_report_submit_failed": { @@ -468,7 +518,8 @@ "translations": { "en": "Could not submit the bug report. Try again later.", "fr": "Impossible d’envoyer le rapport de bug. Réessayez plus tard.", - "es": "No se pudo enviar el informe de error. Inténtelo de nuevo más tarde." + "es": "No se pudo enviar el informe de error. Inténtelo de nuevo más tarde.", + "it": "Impossibile inviare la segnalazione. Riprovi più tardi." } }, "bug_report_submitted": { @@ -476,7 +527,8 @@ "translations": { "en": "Thanks — your bug report was recorded.", "fr": "Merci — votre rapport de bug a été enregistré.", - "es": "Gracias: su informe de error se ha registrado." + "es": "Gracias: su informe de error se ha registrado.", + "it": "Grazie: la sua segnalazione è stata registrata." } }, "bug_report_submitting": { @@ -484,7 +536,8 @@ "translations": { "en": "Submitting…", "fr": "Envoi…", - "es": "Enviando…" + "es": "Enviando…", + "it": "Invio in corso…" } }, "bug_report_what_hint": { @@ -492,7 +545,8 @@ "translations": { "en": "Describe what happened", "fr": "Décrivez ce qui s’est passé", - "es": "Describa lo que ocurrió" + "es": "Describa lo que ocurrió", + "it": "Descriva cosa è accaduto" } }, "bug_report_what_label": { @@ -500,7 +554,8 @@ "translations": { "en": "What happened?", "fr": "Que s’est-il passé ?", - "es": "¿Qué ocurrió?" + "es": "¿Qué ocurrió?", + "it": "Cosa è accaduto?" } }, "button_approve": { @@ -508,7 +563,8 @@ "translations": { "en": "Approve", "fr": "Approuver", - "es": "Aprobar" + "es": "Aprobar", + "it": "Approva" } }, "button_back": { @@ -516,7 +572,8 @@ "translations": { "en": "Back", "fr": "Retour", - "es": "Atrás" + "es": "Atrás", + "it": "Indietro" } }, "button_cancel": { @@ -524,7 +581,8 @@ "translations": { "en": "Cancel", "fr": "Annuler", - "es": "Cancelar" + "es": "Cancelar", + "it": "Annulla" } }, "button_cancel_receive": { @@ -532,7 +590,8 @@ "translations": { "en": "Cancel", "fr": "Annuler", - "es": "Cancelar" + "es": "Cancelar", + "it": "Annulla" } }, "button_change_files": { @@ -540,7 +599,8 @@ "translations": { "en": "Change files", "fr": "Modifier les fichiers", - "es": "Cambiar archivos" + "es": "Cambiar archivos", + "it": "Cambia file" } }, "button_choose_files": { @@ -548,7 +608,8 @@ "translations": { "en": "Choose files", "fr": "Choisir des fichiers", - "es": "Elegir archivos" + "es": "Elegir archivos", + "it": "Scegli file" } }, "button_choose_folder": { @@ -556,7 +617,8 @@ "translations": { "en": "Choose folder", "fr": "Choisir un dossier", - "es": "Elegir carpeta" + "es": "Elegir carpeta", + "it": "Scegli cartella" } }, "button_clear": { @@ -564,7 +626,8 @@ "translations": { "en": "Clear", "fr": "Effacer", - "es": "Borrar" + "es": "Borrar", + "it": "Cancella" } }, "button_close": { @@ -572,7 +635,8 @@ "translations": { "en": "Close", "fr": "Fermer", - "es": "Cerrar" + "es": "Cerrar", + "it": "Chiudi" } }, "button_create_new_transfer": { @@ -580,7 +644,8 @@ "translations": { "en": "New transfer", "fr": "Nouveau transfert", - "es": "Nueva transferencia" + "es": "Nueva transferencia", + "it": "Nuovo trasferimento" } }, "button_delete_transfer": { @@ -588,7 +653,8 @@ "translations": { "en": "Delete transfer", "fr": "Supprimer le transfert", - "es": "Eliminar transferencia" + "es": "Eliminar transferencia", + "it": "Elimina trasferimento" } }, "button_download_invitation": { @@ -596,7 +662,8 @@ "translations": { "en": "Save .vnd file", "fr": "Enregistrer le fichier .vnd", - "es": "Guardar archivo .vnd" + "es": "Guardar archivo .vnd", + "it": "Salva file .vnd" } }, "button_native_share": { @@ -604,7 +671,8 @@ "translations": { "en": "Share invitation", "fr": "Partager l’invitation", - "es": "Compartir invitación" + "es": "Compartir invitación", + "it": "Condividi invito" } }, "button_open_settings": { @@ -612,7 +680,8 @@ "translations": { "en": "Open Settings", "fr": "Ouvrir les Réglages", - "es": "Abrir Ajustes" + "es": "Abrir Ajustes", + "it": "Apri Impostazioni" } }, "button_receive": { @@ -620,7 +689,8 @@ "translations": { "en": "Receive", "fr": "Recevoir", - "es": "Recibir" + "es": "Recibir", + "it": "Ricevi" } }, "button_receive_files": { @@ -628,7 +698,8 @@ "translations": { "en": "Start receiving", "fr": "Commencer à recevoir", - "es": "Empezar a recibir" + "es": "Empezar a recibir", + "it": "Inizia a ricevere" } }, "button_refuse": { @@ -636,7 +707,8 @@ "translations": { "en": "Refuse", "fr": "Refuser", - "es": "Rechazar" + "es": "Rechazar", + "it": "Rifiuta" } }, "button_remove_file": { @@ -644,7 +716,8 @@ "translations": { "en": "Remove file", "fr": "Retirer le fichier", - "es": "Quitar archivo" + "es": "Quitar archivo", + "it": "Rimuovi file" } }, "button_reset_default": { @@ -652,7 +725,8 @@ "translations": { "en": "Use default", "fr": "Valeur par défaut", - "es": "Usar predeterminado" + "es": "Usar predeterminado", + "it": "Usa predefinito" } }, "button_retry": { @@ -660,7 +734,8 @@ "translations": { "en": "Retry", "fr": "Réessayer", - "es": "Reintentar" + "es": "Reintentar", + "it": "Riprova" } }, "button_share_file": { @@ -668,7 +743,8 @@ "translations": { "en": "Start sharing", "fr": "Commencer le partage", - "es": "Empezar a compartir" + "es": "Empezar a compartir", + "it": "Inizia a condividere" } }, "button_sharing_file": { @@ -676,7 +752,8 @@ "translations": { "en": "Preparing transfer…", "fr": "Préparation du transfert…", - "es": "Preparando la transferencia…" + "es": "Preparando la transferencia…", + "it": "Preparazione del trasferimento…" } }, "button_show_in_files": { @@ -684,7 +761,8 @@ "translations": { "en": "Show in Files", "fr": "Afficher dans Fichiers", - "es": "Mostrar en Archivos" + "es": "Mostrar en Archivos", + "it": "Mostra in File" } }, "button_write_nfc": { @@ -692,7 +770,8 @@ "translations": { "en": "Write to NFC tag", "fr": "Écrire sur un tag NFC", - "es": "Escribir en etiqueta NFC" + "es": "Escribir en etiqueta NFC", + "it": "Scrivi su tag NFC" } }, "device_model_title": { @@ -700,7 +779,8 @@ "translations": { "en": "Device model", "fr": "Modèle de l’appareil", - "es": "Modelo del dispositivo" + "es": "Modelo del dispositivo", + "it": "Modello del dispositivo" } }, "device_name_title": { @@ -708,7 +788,8 @@ "translations": { "en": "Device name", "fr": "Nom de l’appareil", - "es": "Nombre del dispositivo" + "es": "Nombre del dispositivo", + "it": "Nome del dispositivo" } }, "diagnostics_description": { @@ -716,7 +797,8 @@ "translations": { "en": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included.", "fr": "Envoyer des rapports de plantage et des événements d’utilisation anonymes pour nous aider à améliorer VniDrop. Vous pouvez désactiver cela à tout moment. Les invitations, chemins de fichiers et contenus de transfert ne sont jamais inclus.", - "es": "Enviar informes de fallos y eventos de uso anónimos para ayudarnos a mejorar VniDrop. Puede desactivarlo en cualquier momento. Las invitaciones, las rutas de archivos y el contenido de las transferencias nunca se incluyen." + "es": "Enviar informes de fallos y eventos de uso anónimos para ayudarnos a mejorar VniDrop. Puede desactivarlo en cualquier momento. Las invitaciones, las rutas de archivos y el contenido de las transferencias nunca se incluyen.", + "it": "Invia report di arresto anomalo ed eventi d’uso anonimi per aiutarci a migliorare VniDrop. Può disattivarlo in qualsiasi momento. Inviti, percorsi dei file e contenuti dei trasferimenti non vengono mai inclusi." } }, "diagnostics_disabled_message": { @@ -724,7 +806,8 @@ "translations": { "en": "Diagnostics sharing is off.", "fr": "Le partage des diagnostics est désactivé.", - "es": "El uso compartido de diagnósticos está desactivado." + "es": "El uso compartido de diagnósticos está desactivado.", + "it": "La condivisione dei dati diagnostici è disattivata." } }, "diagnostics_enabled_message": { @@ -732,7 +815,8 @@ "translations": { "en": "Diagnostics sharing is on.", "fr": "Le partage des diagnostics est activé.", - "es": "El uso compartido de diagnósticos está activado." + "es": "El uso compartido de diagnósticos está activado.", + "it": "La condivisione dei dati diagnostici è attivata." } }, "diagnostics_title": { @@ -740,7 +824,8 @@ "translations": { "en": "Share diagnostics", "fr": "Partager les diagnostics", - "es": "Compartir diagnósticos" + "es": "Compartir diagnósticos", + "it": "Condividi dati diagnostici" } }, "error_camera": { @@ -748,7 +833,8 @@ "translations": { "en": "Camera access is required to scan a QR code.", "fr": "L’accès à la caméra est nécessaire pour scanner un QR code.", - "es": "Se necesita acceso a la cámara para escanear un código QR." + "es": "Se necesita acceso a la cámara para escanear un código QR.", + "it": "Per scansionare un codice QR è necessario l’accesso alla fotocamera." } }, "error_device_info": { @@ -756,7 +842,8 @@ "translations": { "en": "Could not load device information.", "fr": "Impossible de charger les informations de l’appareil.", - "es": "No se pudo cargar la información del dispositivo." + "es": "No se pudo cargar la información del dispositivo.", + "it": "Impossibile caricare le informazioni sul dispositivo." } }, "error_filesystem": { @@ -764,7 +851,8 @@ "translations": { "en": "VniDrop could not access the selected files or folder. Check permissions and try again.", "fr": "VniDrop n’a pas pu accéder aux fichiers ou au dossier sélectionnés. Vérifiez les autorisations et réessayez.", - "es": "VniDrop no pudo acceder a los archivos o la carpeta seleccionados. Compruebe los permisos e inténtelo de nuevo." + "es": "VniDrop no pudo acceder a los archivos o la carpeta seleccionados. Compruebe los permisos e inténtelo de nuevo.", + "it": "VniDrop non ha potuto accedere ai file o alla cartella selezionati. Controlli le autorizzazioni e riprovi." } }, "error_generic": { @@ -772,7 +860,8 @@ "translations": { "en": "Something went wrong. Try again.", "fr": "Une erreur est survenue. Réessayez.", - "es": "Algo salió mal. Inténtelo de nuevo." + "es": "Algo salió mal. Inténtelo de nuevo.", + "it": "Qualcosa è andato storto. Riprovi." } }, "error_initialization": { @@ -780,7 +869,8 @@ "translations": { "en": "VniDrop could not finish starting up. Close the app and try again.", "fr": "VniDrop n’a pas pu terminer son démarrage. Fermez l’app et réessayez.", - "es": "VniDrop no pudo terminar de iniciarse. Cierre la app e inténtelo de nuevo." + "es": "VniDrop no pudo terminar de iniciarse. Cierre la app e inténtelo de nuevo.", + "it": "VniDrop non ha potuto completare l’avvio. Chiuda l’app e riprovi." } }, "error_invalid_ticket": { @@ -788,7 +878,8 @@ "translations": { "en": "This invitation could not be read. Ask the sender for a new one.", "fr": "Cette invitation n’a pas pu être lue. Demandez-en une nouvelle à l’expéditeur.", - "es": "No se pudo leer esta invitación. Pida al remitente una nueva." + "es": "No se pudo leer esta invitación. Pida al remitente una nueva.", + "it": "Impossibile leggere questo invito. Ne chieda uno nuovo al mittente." } }, "error_invitation_empty": { @@ -796,7 +887,8 @@ "translations": { "en": "That invitation is empty. Try opening it again.", "fr": "Cette invitation est vide. Essayez de l’ouvrir à nouveau.", - "es": "Esa invitación está vacía. Intente abrirla de nuevo." + "es": "Esa invitación está vacía. Intente abrirla de nuevo.", + "it": "Questo invito è vuoto. Provi ad aprirlo di nuovo." } }, "error_missing_native_library": { @@ -804,7 +896,8 @@ "translations": { "en": "The native VniDrop library is missing from this build.", "fr": "La bibliothèque native de VniDrop est absente de cette version.", - "es": "Falta la biblioteca nativa de VniDrop en esta versión." + "es": "Falta la biblioteca nativa de VniDrop en esta versión.", + "it": "La libreria nativa di VniDrop non è presente in questa build." } }, "error_nfc": { @@ -812,7 +905,8 @@ "translations": { "en": "This NFC tag could not be used. Try another tag.", "fr": "Ce tag NFC n’a pas pu être utilisé. Essayez-en un autre.", - "es": "No se pudo usar esta etiqueta NFC. Pruebe con otra." + "es": "No se pudo usar esta etiqueta NFC. Pruebe con otra.", + "it": "Impossibile usare questo tag NFC. Ne provi un altro." } }, "error_permission": { @@ -820,7 +914,8 @@ "translations": { "en": "The sender has not approved this transfer, or it was refused.", "fr": "L’expéditeur n’a pas approuvé ce transfert, ou il a été refusé.", - "es": "El remitente no ha aprobado esta transferencia, o fue rechazada." + "es": "El remitente no ha aprobado esta transferencia, o fue rechazada.", + "it": "Il mittente non ha approvato questo trasferimento, oppure è stato rifiutato." } }, "error_repository": { @@ -828,7 +923,8 @@ "translations": { "en": "VniDrop could not save transfer data on this device.", "fr": "VniDrop n’a pas pu enregistrer les données de transfert sur cet appareil.", - "es": "VniDrop no pudo guardar los datos de la transferencia en este dispositivo." + "es": "VniDrop no pudo guardar los datos de la transferencia en este dispositivo.", + "it": "VniDrop non ha potuto salvare i dati del trasferimento su questo dispositivo." } }, "error_selection_failed": { @@ -836,7 +932,8 @@ "translations": { "en": "Could not open the selected item. Try choosing it again.", "fr": "Impossible d’ouvrir l’élément sélectionné. Essayez de le choisir à nouveau.", - "es": "No se pudo abrir el elemento seleccionado. Intente elegirlo de nuevo." + "es": "No se pudo abrir el elemento seleccionado. Intente elegirlo de nuevo.", + "it": "Impossibile aprire l’elemento selezionato. Provi a sceglierlo di nuovo." } }, "error_share_empty": { @@ -844,7 +941,8 @@ "translations": { "en": "Select at least one item to share.", "fr": "Sélectionnez au moins un élément à partager.", - "es": "Seleccione al menos un elemento para compartir." + "es": "Seleccione al menos un elemento para compartir.", + "it": "Selezioni almeno un elemento da condividere." } }, "error_socket_bind": { @@ -852,7 +950,8 @@ "translations": { "en": "VniDrop could not open its network sockets on this device.", "fr": "VniDrop n’a pas pu ouvrir ses sockets réseau sur cet appareil.", - "es": "VniDrop no pudo abrir sus sockets de red en este dispositivo." + "es": "VniDrop no pudo abrir sus sockets de red en este dispositivo.", + "it": "VniDrop non ha potuto aprire i suoi socket di rete su questo dispositivo." } }, "error_starting_up": { @@ -860,7 +959,8 @@ "translations": { "en": "VniDrop is still starting. Open the invitation again in a moment.", "fr": "VniDrop démarre encore. Rouvrez l’invitation dans un instant.", - "es": "VniDrop todavía se está iniciando. Vuelva a abrir la invitación en un momento." + "es": "VniDrop todavía se está iniciando. Vuelva a abrir la invitación en un momento.", + "it": "VniDrop è ancora in fase di avvio. Riapra l’invito tra un momento." } }, "error_transfer": { @@ -868,7 +968,8 @@ "translations": { "en": "The transfer could not be completed. Check your connection and try again.", "fr": "Le transfert n’a pas pu être terminé. Vérifiez votre connexion et réessayez.", - "es": "No se pudo completar la transferencia. Compruebe su conexión e inténtelo de nuevo." + "es": "No se pudo completar la transferencia. Compruebe su conexión e inténtelo de nuevo.", + "it": "Impossibile completare il trasferimento. Controlli la connessione e riprovi." } }, "field_receiver_name": { @@ -876,7 +977,8 @@ "translations": { "en": "Receiver name", "fr": "Nom du destinataire", - "es": "Nombre del destinatario" + "es": "Nombre del destinatario", + "it": "Nome del destinatario" } }, "field_sender_name": { @@ -884,7 +986,8 @@ "translations": { "en": "Sender name", "fr": "Nom de l’expéditeur", - "es": "Nombre del remitente" + "es": "Nombre del remitente", + "it": "Nome del mittente" } }, "field_transfer_name": { @@ -892,7 +995,8 @@ "translations": { "en": "Transfer name", "fr": "Nom du transfert", - "es": "Nombre de la transferencia" + "es": "Nombre de la transferencia", + "it": "Nome del trasferimento" } }, "field_username": { @@ -900,7 +1004,8 @@ "translations": { "en": "Display name", "fr": "Nom d’affichage", - "es": "Nombre visible" + "es": "Nombre visible", + "it": "Nome visualizzato" } }, "folder_status_permission_required": { @@ -908,7 +1013,8 @@ "translations": { "en": "Permission needed", "fr": "Autorisation requise", - "es": "Permiso necesario" + "es": "Permiso necesario", + "it": "Autorizzazione necessaria" } }, "folder_status_unavailable": { @@ -916,7 +1022,8 @@ "translations": { "en": "Unavailable", "fr": "Indisponible", - "es": "No disponible" + "es": "No disponible", + "it": "Non disponibile" } }, "folder_status_validating": { @@ -924,7 +1031,8 @@ "translations": { "en": "Checking folder…", "fr": "Vérification du dossier…", - "es": "Comprobando carpeta…" + "es": "Comprobando carpeta…", + "it": "Controllo della cartella…" } }, "folder_status_writable": { @@ -932,7 +1040,8 @@ "translations": { "en": "Ready", "fr": "Prêt", - "es": "Listo" + "es": "Listo", + "it": "Pronta" } }, "metadata_files": { @@ -940,7 +1049,8 @@ "translations": { "en": "Files", "fr": "Fichiers", - "es": "Archivos" + "es": "Archivos", + "it": "File" } }, "metadata_size": { @@ -948,7 +1058,8 @@ "translations": { "en": "Size", "fr": "Taille", - "es": "Tamaño" + "es": "Tamaño", + "it": "Dimensione" } }, "metadata_status": { @@ -956,7 +1067,8 @@ "translations": { "en": "Status", "fr": "Statut", - "es": "Estado" + "es": "Estado", + "it": "Stato" } }, "nav_receive": { @@ -964,7 +1076,8 @@ "translations": { "en": "Receive", "fr": "Recevoir", - "es": "Recibir" + "es": "Recibir", + "it": "Ricevi" } }, "nav_send": { @@ -972,7 +1085,8 @@ "translations": { "en": "Send", "fr": "Envoyer", - "es": "Enviar" + "es": "Enviar", + "it": "Invia" } }, "nav_settings": { @@ -980,7 +1094,8 @@ "translations": { "en": "Settings", "fr": "Réglages", - "es": "Ajustes" + "es": "Ajustes", + "it": "Impostazioni" } }, "network_title": { @@ -988,7 +1103,8 @@ "translations": { "en": "Network", "fr": "Réseau", - "es": "Red" + "es": "Red", + "it": "Rete" } }, "notifications_description": { @@ -996,7 +1112,8 @@ "translations": { "en": "Get notified about new receive requests while VniDrop is in the background.", "fr": "Soyez averti des nouvelles demandes de réception lorsque VniDrop est en arrière-plan.", - "es": "Reciba avisos sobre nuevas solicitudes de recepción cuando VniDrop está en segundo plano." + "es": "Reciba avisos sobre nuevas solicitudes de recepción cuando VniDrop está en segundo plano.", + "it": "Ricevi avvisi sulle nuove richieste di ricezione quando VniDrop è in background." } }, "notifications_enabled_message": { @@ -1004,7 +1121,8 @@ "translations": { "en": "Notifications enabled.", "fr": "Notifications activées.", - "es": "Notificaciones activadas." + "es": "Notificaciones activadas.", + "it": "Notifiche attivate." } }, "notifications_local_title": { @@ -1012,7 +1130,8 @@ "translations": { "en": "Allow notifications", "fr": "Autoriser les notifications", - "es": "Permitir notificaciones" + "es": "Permitir notificaciones", + "it": "Consenti le notifiche" } }, "notifications_permission_denied": { @@ -1020,7 +1139,8 @@ "translations": { "en": "Notifications are turned off for VniDrop. You can enable them in Settings.", "fr": "Les notifications sont désactivées pour VniDrop. Vous pouvez les activer dans les Réglages.", - "es": "Las notificaciones están desactivadas para VniDrop. Puede activarlas en Ajustes." + "es": "Las notificaciones están desactivadas para VniDrop. Puede activarlas en Ajustes.", + "it": "Le notifiche sono disattivate per VniDrop. Può attivarle in Impostazioni." } }, "notifications_settings_open_failed": { @@ -1028,7 +1148,8 @@ "translations": { "en": "Could not open notification settings.", "fr": "Impossible d’ouvrir les réglages de notifications.", - "es": "No se pudieron abrir los ajustes de notificaciones." + "es": "No se pudieron abrir los ajustes de notificaciones.", + "it": "Impossibile aprire le impostazioni delle notifiche." } }, "notifications_title": { @@ -1036,7 +1157,8 @@ "translations": { "en": "Notifications", "fr": "Notifications", - "es": "Notificaciones" + "es": "Notificaciones", + "it": "Notifiche" } }, "notifications_unsupported": { @@ -1044,7 +1166,8 @@ "translations": { "en": "Notifications are not available on this device.", "fr": "Les notifications ne sont pas disponibles sur cet appareil.", - "es": "Las notificaciones no están disponibles en este dispositivo." + "es": "Las notificaciones no están disponibles en este dispositivo.", + "it": "Le notifiche non sono disponibili su questo dispositivo." } }, "os_version_title": { @@ -1052,7 +1175,8 @@ "translations": { "en": "Operating system", "fr": "Système d’exploitation", - "es": "Sistema operativo" + "es": "Sistema operativo", + "it": "Sistema operativo" } }, "preferences_receive_folder_title": { @@ -1060,7 +1184,8 @@ "translations": { "en": "Save received transfers to", "fr": "Enregistrer les transferts reçus dans", - "es": "Guardar las transferencias recibidas en" + "es": "Guardar las transferencias recibidas en", + "it": "Salva i trasferimenti ricevuti in" } }, "preferences_title": { @@ -1068,7 +1193,8 @@ "translations": { "en": "Preferences", "fr": "Préférences", - "es": "Preferencias" + "es": "Preferencias", + "it": "Preferenze" } }, "progress_cancelled": { @@ -1076,7 +1202,8 @@ "translations": { "en": "Cancelled", "fr": "Annulé", - "es": "Cancelado" + "es": "Cancelado", + "it": "Annullato" } }, "progress_completed": { @@ -1084,7 +1211,8 @@ "translations": { "en": "Completed", "fr": "Terminé", - "es": "Completado" + "es": "Completado", + "it": "Completato" } }, "progress_connected": { @@ -1092,7 +1220,8 @@ "translations": { "en": "Connected", "fr": "Connecté", - "es": "Conectado" + "es": "Conectado", + "it": "Connesso" } }, "progress_connecting": { @@ -1100,7 +1229,8 @@ "translations": { "en": "Connecting", "fr": "Connexion", - "es": "Conectando" + "es": "Conectando", + "it": "Connessione" } }, "progress_downloading": { @@ -1108,7 +1238,8 @@ "translations": { "en": "Downloading", "fr": "Téléchargement", - "es": "Descargando" + "es": "Descargando", + "it": "Download" } }, "progress_failed": { @@ -1116,7 +1247,8 @@ "translations": { "en": "Failed", "fr": "Échec", - "es": "Fallido" + "es": "Fallido", + "it": "Non riuscito" } }, "progress_getting_ready": { @@ -1124,7 +1256,8 @@ "translations": { "en": "Getting ready", "fr": "Préparation", - "es": "Preparándose" + "es": "Preparándose", + "it": "Preparazione" } }, "progress_interrupted": { @@ -1132,7 +1265,8 @@ "translations": { "en": "Transfer interrupted", "fr": "Transfert interrompu", - "es": "Transferencia interrumpida" + "es": "Transferencia interrumpida", + "it": "Trasferimento interrotto" } }, "progress_preparing": { @@ -1140,7 +1274,8 @@ "translations": { "en": "Preparing", "fr": "Préparation", - "es": "Preparando" + "es": "Preparando", + "it": "Preparazione" } }, "progress_ready": { @@ -1148,7 +1283,8 @@ "translations": { "en": "Ready", "fr": "Prêt", - "es": "Listo" + "es": "Listo", + "it": "Pronto" } }, "progress_receiving": { @@ -1156,7 +1292,8 @@ "translations": { "en": "Receiving", "fr": "Réception", - "es": "Recibiendo" + "es": "Recibiendo", + "it": "Ricezione" } }, "progress_requesting_access": { @@ -1164,7 +1301,8 @@ "translations": { "en": "Requesting access", "fr": "Demande d’accès", - "es": "Solicitando acceso" + "es": "Solicitando acceso", + "it": "Richiesta di accesso" } }, "progress_saving": { @@ -1172,7 +1310,8 @@ "translations": { "en": "Saving", "fr": "Enregistrement", - "es": "Guardando" + "es": "Guardando", + "it": "Salvataggio" } }, "progress_sending": { @@ -1180,7 +1319,8 @@ "translations": { "en": "Sending", "fr": "Envoi", - "es": "Enviando" + "es": "Enviando", + "it": "Invio" } }, "progress_sending_to_count": { @@ -1188,7 +1328,8 @@ "translations": { "en": "Sending to {count}", "fr": "Envoi à {count}", - "es": "Enviando a {count}" + "es": "Enviando a {count}", + "it": "Invio a {count}" }, "args": [ { @@ -1202,7 +1343,8 @@ "translations": { "en": "Ready to share", "fr": "Prêt à partager", - "es": "Listo para compartir" + "es": "Listo para compartir", + "it": "Pronto per la condivisione" } }, "progress_working": { @@ -1210,7 +1352,8 @@ "translations": { "en": "Working…", "fr": "En cours…", - "es": "Trabajando…" + "es": "Trabajando…", + "it": "Elaborazione…" } }, "receive_choose_method_body": { @@ -1218,7 +1361,8 @@ "translations": { "en": "Choose the invitation method available to you.", "fr": "Choisissez la méthode d’invitation à votre disposition.", - "es": "Elija el método de invitación de que disponga." + "es": "Elija el método de invitación de que disponga.", + "it": "Scelga il metodo di invito a sua disposizione." } }, "receive_choose_method_title": { @@ -1226,7 +1370,8 @@ "translations": { "en": "How would you like to connect?", "fr": "Comment souhaitez-vous vous connecter ?", - "es": "¿Cómo quiere conectarse?" + "es": "¿Cómo quiere conectarse?", + "it": "Come vuole connettersi?" } }, "receive_clear_history": { @@ -1234,7 +1379,8 @@ "translations": { "en": "Clear history", "fr": "Effacer l’historique", - "es": "Borrar historial" + "es": "Borrar historial", + "it": "Cancella cronologia" } }, "receive_clear_history_description": { @@ -1242,7 +1388,8 @@ "translations": { "en": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device.", "fr": "Toutes les réceptions terminées, échouées et annulées seront retirées de l’historique de VniDrop. Les fichiers téléchargés resteront sur cet appareil.", - "es": "Todas las recepciones completadas, fallidas y canceladas se eliminarán del historial de VniDrop. Los archivos descargados permanecerán en este dispositivo." + "es": "Todas las recepciones completadas, fallidas y canceladas se eliminarán del historial de VniDrop. Los archivos descargados permanecerán en este dispositivo.", + "it": "Tutte le ricezioni completate, non riuscite e annullate verranno rimosse dalla cronologia di VniDrop. I file scaricati rimarranno su questo dispositivo." } }, "receive_clear_history_title": { @@ -1250,7 +1397,8 @@ "translations": { "en": "Clear receive history?", "fr": "Effacer l’historique de réception ?", - "es": "¿Borrar el historial de recepción?" + "es": "¿Borrar el historial de recepción?", + "it": "Cancellare la cronologia di ricezione?" } }, "receive_completed": { @@ -1258,7 +1406,8 @@ "translations": { "en": "Transfer received.", "fr": "Transfert reçu.", - "es": "Transferencia recibida." + "es": "Transferencia recibida.", + "it": "Trasferimento ricevuto." } }, "receive_delete_history_description": { @@ -1272,7 +1421,8 @@ "translations": { "en": "“{arg1}” will be removed from VniDrop’s history. The downloaded file will remain on this device.", "fr": "« {arg1} » sera retiré de l’historique de VniDrop. Le fichier téléchargé restera sur cet appareil.", - "es": "«{arg1}» se eliminará del historial de VniDrop. El archivo descargado permanecerá en este dispositivo." + "es": "«{arg1}» se eliminará del historial de VniDrop. El archivo descargado permanecerá en este dispositivo.", + "it": "«{arg1}» verrà rimosso dalla cronologia di VniDrop. Il file scaricato rimarrà su questo dispositivo." } }, "receive_delete_history_item": { @@ -1280,7 +1430,8 @@ "translations": { "en": "Delete from receive history", "fr": "Supprimer de l’historique de réception", - "es": "Eliminar del historial de recepción" + "es": "Eliminar del historial de recepción", + "it": "Elimina dalla cronologia di ricezione" } }, "receive_delete_history_title": { @@ -1288,7 +1439,8 @@ "translations": { "en": "Remove from history?", "fr": "Retirer de l’historique ?", - "es": "¿Quitar del historial?" + "es": "¿Quitar del historial?", + "it": "Rimuovere dalla cronologia?" } }, "receive_empty_body": { @@ -1296,7 +1448,8 @@ "translations": { "en": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag.", "fr": "Ouvrez une invitation VniDrop, scannez un QR code ou approchez un tag NFC.", - "es": "Abra una invitación de VniDrop, escanee un código QR o acerque una etiqueta NFC." + "es": "Abra una invitación de VniDrop, escanee un código QR o acerque una etiqueta NFC.", + "it": "Apra un invito VniDrop, scansioni un codice QR o avvicini un tag NFC." } }, "receive_empty_title": { @@ -1304,7 +1457,8 @@ "translations": { "en": "Nothing received yet", "fr": "Rien reçu pour l’instant", - "es": "Aún no se ha recibido nada" + "es": "Aún no se ha recibido nada", + "it": "Ancora nulla di ricevuto" } }, "receive_history_cleared": { @@ -1312,7 +1466,8 @@ "translations": { "en": "Receive history cleared.", "fr": "Historique de réception effacé.", - "es": "Historial de recepción borrado." + "es": "Historial de recepción borrado.", + "it": "Cronologia di ricezione cancellata." } }, "receive_history_title": { @@ -1320,7 +1475,8 @@ "translations": { "en": "History", "fr": "Historique", - "es": "Historial" + "es": "Historial", + "it": "Cronologia" } }, "receive_method_file": { @@ -1328,7 +1484,8 @@ "translations": { "en": "Open a .vnd invitation", "fr": "Ouvrir une invitation .vnd", - "es": "Abrir una invitación .vnd" + "es": "Abrir una invitación .vnd", + "it": "Apri un invito .vnd" } }, "receive_method_file_description": { @@ -1336,7 +1493,8 @@ "translations": { "en": "Choose an invitation saved or shared to this device.", "fr": "Choisissez une invitation enregistrée ou partagée sur cet appareil.", - "es": "Elija una invitación guardada o compartida en este dispositivo." + "es": "Elija una invitación guardada o compartida en este dispositivo.", + "it": "Scelga un invito salvato o condiviso su questo dispositivo." } }, "receive_method_nfc": { @@ -1344,7 +1502,8 @@ "translations": { "en": "Read NFC tag", "fr": "Lire un tag NFC", - "es": "Leer etiqueta NFC" + "es": "Leer etiqueta NFC", + "it": "Leggi tag NFC" } }, "receive_method_nfc_description": { @@ -1352,7 +1511,8 @@ "translations": { "en": "Hold this device near the sender’s invitation tag.", "fr": "Approchez cet appareil du tag d’invitation de l’expéditeur.", - "es": "Acerque este dispositivo a la etiqueta de invitación del remitente." + "es": "Acerque este dispositivo a la etiqueta de invitación del remitente.", + "it": "Avvicini questo dispositivo al tag di invito del mittente." } }, "receive_method_scan": { @@ -1360,7 +1520,8 @@ "translations": { "en": "Scan QR code", "fr": "Scanner un QR code", - "es": "Escanear código QR" + "es": "Escanear código QR", + "it": "Scansiona codice QR" } }, "receive_method_scan_description": { @@ -1368,7 +1529,8 @@ "translations": { "en": "Use the camera to scan the sender’s VniDrop code.", "fr": "Utilisez la caméra pour scanner le code VniDrop de l’expéditeur.", - "es": "Use la cámara para escanear el código de VniDrop del remitente." + "es": "Use la cámara para escanear el código de VniDrop del remitente.", + "it": "Usi la fotocamera per scansionare il codice VniDrop del mittente." } }, "receive_new_subtitle": { @@ -1376,7 +1538,8 @@ "translations": { "en": "Transfers you’ve received on this device.", "fr": "Transferts que vous avez reçus sur cet appareil.", - "es": "Transferencias que ha recibido en este dispositivo." + "es": "Transferencias que ha recibido en este dispositivo.", + "it": "Trasferimenti che ha ricevuto su questo dispositivo." } }, "receive_nfc_waiting": { @@ -1384,7 +1547,8 @@ "translations": { "en": "Hold near the NFC tag…", "fr": "Approchez du tag NFC…", - "es": "Acerque a la etiqueta NFC…" + "es": "Acerque a la etiqueta NFC…", + "it": "Avvicini al tag NFC…" } }, "receive_open_files_failed": { @@ -1392,7 +1556,8 @@ "translations": { "en": "Couldn’t open VniDrop in Files.", "fr": "Impossible d’ouvrir VniDrop dans Fichiers.", - "es": "No se pudo abrir VniDrop en Archivos." + "es": "No se pudo abrir VniDrop en Archivos.", + "it": "Impossibile aprire VniDrop in File." } }, "receive_review_title": { @@ -1400,7 +1565,8 @@ "translations": { "en": "Review transfer", "fr": "Vérifier le transfert", - "es": "Revisar transferencia" + "es": "Revisar transferencia", + "it": "Rivedi trasferimento" } }, "receive_title": { @@ -1408,7 +1574,8 @@ "translations": { "en": "Receive", "fr": "Recevoir", - "es": "Recibir" + "es": "Recibir", + "it": "Ricevi" } }, "receive_unknown_transfer": { @@ -1416,7 +1583,8 @@ "translations": { "en": "VniDrop transfer", "fr": "Transfert VniDrop", - "es": "Transferencia de VniDrop" + "es": "Transferencia de VniDrop", + "it": "Trasferimento VniDrop" } }, "send_access_anyone": { @@ -1424,7 +1592,8 @@ "translations": { "en": "Anyone with this transfer", "fr": "Toute personne disposant de ce transfert", - "es": "Cualquiera que tenga esta transferencia" + "es": "Cualquiera que tenga esta transferencia", + "it": "Chiunque abbia questo trasferimento" } }, "send_access_anyone_description": { @@ -1432,7 +1601,8 @@ "translations": { "en": "No approval is required. Only use this for items you are comfortable sharing.", "fr": "Aucune approbation requise. À n’utiliser que pour des éléments que vous êtes à l’aise de partager.", - "es": "No se requiere aprobación. Úselo solo para elementos que no le importe compartir." + "es": "No se requiere aprobación. Úselo solo para elementos que no le importe compartir.", + "it": "Nessuna approvazione richiesta. Da usare solo per elementi che non ha problemi a condividere." } }, "send_access_anyone_warning": { @@ -1440,7 +1610,8 @@ "translations": { "en": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items.", "fr": "Toute personne disposant de l’invitation peut télécharger jusqu’à ce que vous arrêtiez le partage. Ne l’utilisez pas pour des éléments privés ou sensibles.", - "es": "Cualquiera que tenga la invitación puede descargar hasta que deje de compartir. No lo use para elementos privados o sensibles." + "es": "Cualquiera que tenga la invitación puede descargar hasta que deje de compartir. No lo use para elementos privados o sensibles.", + "it": "Chiunque abbia l’invito può scaricare finché non interrompe la condivisione. Non lo usi per elementi privati o sensibili." } }, "send_access_approval": { @@ -1448,7 +1619,8 @@ "translations": { "en": "Ask before each download", "fr": "Demander avant chaque téléchargement", - "es": "Preguntar antes de cada descarga" + "es": "Preguntar antes de cada descarga", + "it": "Chiedi prima di ogni download" } }, "send_access_approval_description": { @@ -1456,7 +1628,8 @@ "translations": { "en": "You approve or refuse every new receiver.", "fr": "Vous approuvez ou refusez chaque nouveau destinataire.", - "es": "Usted aprueba o rechaza a cada nuevo destinatario." + "es": "Usted aprueba o rechaza a cada nuevo destinatario.", + "it": "Approva o rifiuta ogni nuovo destinatario." } }, "send_access_title": { @@ -1464,7 +1637,8 @@ "translations": { "en": "Who can receive it?", "fr": "Qui peut le recevoir ?", - "es": "¿Quién puede recibirla?" + "es": "¿Quién puede recibirla?", + "it": "Chi può riceverlo?" } }, "send_choose_file_body": { @@ -1472,7 +1646,8 @@ "translations": { "en": "Select files or a folder from this device. You can review the selection before creating the transfer.", "fr": "Sélectionnez des fichiers ou un dossier sur cet appareil. Vous pourrez vérifier la sélection avant de créer le transfert.", - "es": "Seleccione archivos o una carpeta de este dispositivo. Podrá revisar la selección antes de crear la transferencia." + "es": "Seleccione archivos o una carpeta de este dispositivo. Podrá revisar la selección antes de crear la transferencia.", + "it": "Selezioni file o una cartella da questo dispositivo. Potrà rivedere la selezione prima di creare il trasferimento." } }, "send_choose_file_title": { @@ -1480,7 +1655,8 @@ "translations": { "en": "Choose what to share", "fr": "Choisissez quoi partager", - "es": "Elija qué compartir" + "es": "Elija qué compartir", + "it": "Scelga cosa condividere" } }, "send_empty_body": { @@ -1488,7 +1664,8 @@ "translations": { "en": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file.", "fr": "Créez un transfert, décidez qui peut le recevoir, puis invitez-les avec un QR code, un tag NFC ou un fichier d’invitation.", - "es": "Cree una transferencia, decida quién puede recibirla y luego invite a esas personas con un código QR, una etiqueta NFC o un archivo de invitación." + "es": "Cree una transferencia, decida quién puede recibirla y luego invite a esas personas con un código QR, una etiqueta NFC o un archivo de invitación.", + "it": "Crei un trasferimento, decida chi può riceverlo, poi inviti queste persone con un codice QR, un tag NFC o un file di invito." } }, "send_empty_title": { @@ -1496,7 +1673,8 @@ "translations": { "en": "Nothing shared yet", "fr": "Rien partagé pour l’instant", - "es": "Aún no se ha compartido nada" + "es": "Aún no se ha compartido nada", + "it": "Ancora nulla di condiviso" } }, "send_file_size_unknown": { @@ -1504,7 +1682,8 @@ "translations": { "en": "Size unavailable", "fr": "Taille indisponible", - "es": "Tamaño no disponible" + "es": "Tamaño no disponible", + "it": "Dimensione non disponibile" } }, "send_folder_label": { @@ -1512,7 +1691,8 @@ "translations": { "en": "Folder", "fr": "Dossier", - "es": "Carpeta" + "es": "Carpeta", + "it": "Cartella" } }, "send_new_transfer_description": { @@ -1520,7 +1700,8 @@ "translations": { "en": "Create a new transfer", "fr": "Créer un nouveau transfert", - "es": "Crear una nueva transferencia" + "es": "Crear una nueva transferencia", + "it": "Crea un nuovo trasferimento" } }, "send_new_transfer_title": { @@ -1528,7 +1709,8 @@ "translations": { "en": "New transfer", "fr": "Nouveau transfert", - "es": "Nueva transferencia" + "es": "Nueva transferencia", + "it": "Nuovo trasferimento" } }, "send_review_title": { @@ -1536,7 +1718,8 @@ "translations": { "en": "Review transfer", "fr": "Vérifier le transfert", - "es": "Revisar transferencia" + "es": "Revisar transferencia", + "it": "Rivedi trasferimento" } }, "send_selected_files_count": { @@ -1550,7 +1733,8 @@ "translations": { "en": "{count} files selected", "fr": "{count} fichiers sélectionnés", - "es": "{count} archivos seleccionados" + "es": "{count} archivos seleccionados", + "it": "{count} file selezionati" } }, "send_stop_sharing": { @@ -1558,7 +1742,8 @@ "translations": { "en": "Stop sharing", "fr": "Arrêter le partage", - "es": "Dejar de compartir" + "es": "Dejar de compartir", + "it": "Interrompi condivisione" } }, "send_stop_sharing_description": { @@ -1566,7 +1751,8 @@ "translations": { "en": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped.", "fr": "Cela arrête le transfert et interrompt toute personne en train de le télécharger. Il reste dans votre historique en tant qu’Arrêté.", - "es": "Esto detiene la transferencia e interrumpe a quien esté descargándola. Permanece en su historial como Detenida." + "es": "Esto detiene la transferencia e interrumpe a quien esté descargándola. Permanece en su historial como Detenida.", + "it": "Questo interrompe il trasferimento e blocca chiunque lo stia scaricando. Rimane nella sua cronologia come Interrotto." } }, "send_subtitle": { @@ -1574,7 +1760,8 @@ "translations": { "en": "Transfers you’re sharing from this device.", "fr": "Transferts que vous partagez depuis cet appareil.", - "es": "Transferencias que está compartiendo desde este dispositivo." + "es": "Transferencias que está compartiendo desde este dispositivo.", + "it": "Trasferimenti che sta condividendo da questo dispositivo." } }, "send_title": { @@ -1582,7 +1769,8 @@ "translations": { "en": "Send", "fr": "Envoyer", - "es": "Enviar" + "es": "Enviar", + "it": "Invia" } }, "send_transfer_created": { @@ -1590,7 +1778,8 @@ "translations": { "en": "Transfer created.", "fr": "Transfert créé.", - "es": "Transferencia creada." + "es": "Transferencia creada.", + "it": "Trasferimento creato." } }, "send_transfer_details_title": { @@ -1598,7 +1787,8 @@ "translations": { "en": "Transfer details", "fr": "Détails du transfert", - "es": "Detalles de la transferencia" + "es": "Detalles de la transferencia", + "it": "Dettagli del trasferimento" } }, "send_transfers_title": { @@ -1606,7 +1796,8 @@ "translations": { "en": "Your transfers", "fr": "Vos transferts", - "es": "Sus transferencias" + "es": "Sus transferencias", + "it": "I suoi trasferimenti" } }, "settings_subtitle": { @@ -1614,7 +1805,8 @@ "translations": { "en": "Your name, where transfers are saved, appearance, and notifications.", "fr": "Votre nom, l’emplacement d’enregistrement des transferts, l’apparence et les notifications.", - "es": "Su nombre, dónde se guardan las transferencias, la apariencia y las notificaciones." + "es": "Su nombre, dónde se guardan las transferencias, la apariencia y las notificaciones.", + "it": "Il suo nome, dove vengono salvati i trasferimenti, l’aspetto e le notifiche." } }, "settings_title": { @@ -1622,7 +1814,8 @@ "translations": { "en": "Settings", "fr": "Réglages", - "es": "Ajustes" + "es": "Ajustes", + "it": "Impostazioni" } }, "snackbar_dismiss": { @@ -1630,7 +1823,8 @@ "translations": { "en": "Dismiss", "fr": "Ignorer", - "es": "Descartar" + "es": "Descartar", + "it": "Ignora" } }, "status_available": { @@ -1638,7 +1832,8 @@ "translations": { "en": "Available", "fr": "Disponible", - "es": "Disponible" + "es": "Disponible", + "it": "Disponibile" } }, "status_cancelled": { @@ -1646,7 +1841,8 @@ "translations": { "en": "Cancelled", "fr": "Annulé", - "es": "Cancelado" + "es": "Cancelado", + "it": "Annullato" } }, "status_completed": { @@ -1654,7 +1850,8 @@ "translations": { "en": "Completed", "fr": "Terminé", - "es": "Completado" + "es": "Completado", + "it": "Completato" } }, "status_failed": { @@ -1662,7 +1859,8 @@ "translations": { "en": "Failed", "fr": "Échec", - "es": "Fallido" + "es": "Fallido", + "it": "Non riuscito" } }, "status_preparing": { @@ -1670,7 +1868,8 @@ "translations": { "en": "Preparing", "fr": "Préparation", - "es": "Preparando" + "es": "Preparando", + "it": "Preparazione" } }, "status_receiving": { @@ -1678,7 +1877,8 @@ "translations": { "en": "Receiving", "fr": "Réception", - "es": "Recibiendo" + "es": "Recibiendo", + "it": "Ricezione" } }, "status_stopped": { @@ -1686,7 +1886,8 @@ "translations": { "en": "Stopped", "fr": "Arrêté", - "es": "Detenido" + "es": "Detenido", + "it": "Interrotto" } }, "storage_calculating": { @@ -1694,7 +1895,8 @@ "translations": { "en": "Calculating…", "fr": "Calcul…", - "es": "Calculando…" + "es": "Calculando…", + "it": "Calcolo…" } }, "storage_delete_transfers": { @@ -1702,7 +1904,8 @@ "translations": { "en": "Delete all transfers", "fr": "Supprimer tous les transferts", - "es": "Eliminar todas las transferencias" + "es": "Eliminar todas las transferencias", + "it": "Elimina tutti i trasferimenti" } }, "storage_delete_transfers_description": { @@ -1710,7 +1913,8 @@ "translations": { "en": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone.", "fr": "Cela efface tous les enregistrements de transferts envoyés et reçus de votre historique. Vos fichiers reçus ne sont pas supprimés. Remarque : le moteur de transfert conserve son contenu stocké, donc les données de transfert peuvent ne pas diminuer. Cette action est irréversible.", - "es": "Esto borra todos los registros de transferencias enviadas y recibidas de su historial. Sus archivos recibidos no se eliminan. Nota: el motor de transferencia conserva su contenido almacenado, por lo que los datos de transferencia pueden no disminuir. Esto no se puede deshacer." + "es": "Esto borra todos los registros de transferencias enviadas y recibidas de su historial. Sus archivos recibidos no se eliminan. Nota: el motor de transferencia conserva su contenido almacenado, por lo que los datos de transferencia pueden no disminuir. Esto no se puede deshacer.", + "it": "Questo cancella dalla cronologia tutti i record dei trasferimenti inviati e ricevuti. I suoi file ricevuti non vengono eliminati. Nota: il motore di trasferimento conserva il contenuto memorizzato, quindi i dati di trasferimento potrebbero non diminuire. Questa operazione non può essere annullata." } }, "storage_deleting": { @@ -1718,7 +1922,8 @@ "translations": { "en": "Deleting…", "fr": "Suppression…", - "es": "Eliminando…" + "es": "Eliminando…", + "it": "Eliminazione…" } }, "storage_footer": { @@ -1726,7 +1931,8 @@ "translations": { "en": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here.", "fr": "Les données de transfert sont gérées par le moteur de transfert — votre historique ainsi que le contenu des fichiers que vous avez partagés. Le bouton ci-dessous efface vos enregistrements de transferts ; le moteur conserve son contenu stocké, donc cette valeur peut ne pas baisser. Les fichiers reçus sont vos fichiers téléchargés et ne sont jamais supprimés ici.", - "es": "Los datos de transferencia los gestiona el motor de transferencia: su historial más el contenido de los archivos que ha compartido. El botón de abajo borra sus registros de transferencias; el motor conserva su contenido almacenado, por lo que este valor puede no bajar. Los archivos recibidos son los archivos que ha descargado y nunca se eliminan aquí." + "es": "Los datos de transferencia los gestiona el motor de transferencia: su historial más el contenido de los archivos que ha compartido. El botón de abajo borra sus registros de transferencias; el motor conserva su contenido almacenado, por lo que este valor puede no bajar. Los archivos recibidos son los archivos que ha descargado y nunca se eliminan aquí.", + "it": "I dati di trasferimento sono gestiti dal motore di trasferimento: la sua cronologia più il contenuto dei file che ha condiviso. Il pulsante qui sotto cancella i record dei trasferimenti; il motore conserva il contenuto memorizzato, quindi questo valore potrebbe non diminuire. I file ricevuti sono i file che ha scaricato e non vengono mai eliminati qui." } }, "storage_received_files": { @@ -1734,7 +1940,8 @@ "translations": { "en": "Received files", "fr": "Fichiers reçus", - "es": "Archivos recibidos" + "es": "Archivos recibidos", + "it": "File ricevuti" } }, "storage_temporary": { @@ -1742,7 +1949,8 @@ "translations": { "en": "Temporary files", "fr": "Fichiers temporaires", - "es": "Archivos temporales" + "es": "Archivos temporales", + "it": "File temporanei" } }, "storage_title": { @@ -1750,7 +1958,8 @@ "translations": { "en": "Storage", "fr": "Stockage", - "es": "Almacenamiento" + "es": "Almacenamiento", + "it": "Archiviazione" } }, "storage_total": { @@ -1758,7 +1967,8 @@ "translations": { "en": "Total", "fr": "Total", - "es": "Total" + "es": "Total", + "it": "Totale" } }, "storage_transfer_data": { @@ -1766,7 +1976,8 @@ "translations": { "en": "Transfer data", "fr": "Données de transfert", - "es": "Datos de transferencia" + "es": "Datos de transferencia", + "it": "Dati di trasferimento" } }, "storage_transfers_deleted": { @@ -1774,7 +1985,8 @@ "translations": { "en": "All transfers deleted", "fr": "Tous les transferts supprimés", - "es": "Todas las transferencias eliminadas" + "es": "Todas las transferencias eliminadas", + "it": "Tutti i trasferimenti eliminati" } }, "transfer_activity_description": { @@ -1782,7 +1994,8 @@ "translations": { "en": "See important updates for this transfer", "fr": "Consultez les mises à jour importantes de ce transfert", - "es": "Vea las actualizaciones importantes de esta transferencia" + "es": "Vea las actualizaciones importantes de esta transferencia", + "it": "Veda gli aggiornamenti importanti di questo trasferimento" } }, "transfer_activity_title": { @@ -1790,7 +2003,8 @@ "translations": { "en": "Activity", "fr": "Activité", - "es": "Actividad" + "es": "Actividad", + "it": "Attività" } }, "transfer_delete_description": { @@ -1804,7 +2018,8 @@ "translations": { "en": "“{arg1}” will stop being shared and its transfer history will be removed from this device.", "fr": "« {arg1} » cessera d’être partagé et son historique de transfert sera retiré de cet appareil.", - "es": "«{arg1}» dejará de compartirse y su historial de transferencia se eliminará de este dispositivo." + "es": "«{arg1}» dejará de compartirse y su historial de transferencia se eliminará de este dispositivo.", + "it": "«{arg1}» non verrà più condiviso e la sua cronologia di trasferimento verrà rimossa da questo dispositivo." } }, "transfer_delete_title": { @@ -1812,7 +2027,8 @@ "translations": { "en": "Delete transfer?", "fr": "Supprimer le transfert ?", - "es": "¿Eliminar la transferencia?" + "es": "¿Eliminar la transferencia?", + "it": "Eliminare il trasferimento?" } }, "transfer_deleted": { @@ -1820,7 +2036,8 @@ "translations": { "en": "Transfer deleted.", "fr": "Transfert supprimé.", - "es": "Transferencia eliminada." + "es": "Transferencia eliminada.", + "it": "Trasferimento eliminato." } }, "transfer_deleting": { @@ -1828,7 +2045,8 @@ "translations": { "en": "Deleting…", "fr": "Suppression…", - "es": "Eliminando…" + "es": "Eliminando…", + "it": "Eliminazione…" } }, "transfer_details_title": { @@ -1836,7 +2054,8 @@ "translations": { "en": "Transfer details", "fr": "Détails du transfert", - "es": "Detalles de la transferencia" + "es": "Detalles de la transferencia", + "it": "Dettagli del trasferimento" } }, "transfer_event_approved": { @@ -1844,7 +2063,8 @@ "translations": { "en": "Receiver access approved", "fr": "Accès du destinataire approuvé", - "es": "Acceso del destinatario aprobado" + "es": "Acceso del destinatario aprobado", + "it": "Accesso del destinatario approvato" } }, "transfer_event_completed": { @@ -1852,7 +2072,8 @@ "translations": { "en": "A receiver completed the transfer", "fr": "Un destinataire a terminé le transfert", - "es": "Un destinatario completó la transferencia" + "es": "Un destinatario completó la transferencia", + "it": "Un destinatario ha completato il trasferimento" } }, "transfer_event_connecting": { @@ -1860,7 +2081,8 @@ "translations": { "en": "Connecting to sender", "fr": "Connexion à l’expéditeur", - "es": "Conectando con el remitente" + "es": "Conectando con el remitente", + "it": "Connessione al mittente" } }, "transfer_event_downloading": { @@ -1868,7 +2090,8 @@ "translations": { "en": "Downloading", "fr": "Téléchargement", - "es": "Descargando" + "es": "Descargando", + "it": "Download" } }, "transfer_event_failed": { @@ -1876,7 +2099,8 @@ "translations": { "en": "The transfer encountered a problem", "fr": "Le transfert a rencontré un problème", - "es": "La transferencia tuvo un problema" + "es": "La transferencia tuvo un problema", + "it": "Il trasferimento ha riscontrato un problema" } }, "transfer_event_preparing": { @@ -1884,7 +2108,8 @@ "translations": { "en": "Preparing your transfer", "fr": "Préparation de votre transfert", - "es": "Preparando su transferencia" + "es": "Preparando su transferencia", + "it": "Preparazione del trasferimento" } }, "transfer_event_ready": { @@ -1892,7 +2117,8 @@ "translations": { "en": "Ready to share", "fr": "Prêt à partager", - "es": "Listo para compartir" + "es": "Listo para compartir", + "it": "Pronto per la condivisione" } }, "transfer_event_refused": { @@ -1900,7 +2126,8 @@ "translations": { "en": "Receiver access refused", "fr": "Accès du destinataire refusé", - "es": "Acceso del destinatario rechazado" + "es": "Acceso del destinatario rechazado", + "it": "Accesso del destinatario rifiutato" } }, "transfer_event_requested": { @@ -1908,7 +2135,8 @@ "translations": { "en": "A receiver requested access", "fr": "Un destinataire a demandé l’accès", - "es": "Un destinatario solicitó acceso" + "es": "Un destinatario solicitó acceso", + "it": "Un destinatario ha richiesto l’accesso" } }, "transfer_event_saving": { @@ -1916,7 +2144,8 @@ "translations": { "en": "Saving", "fr": "Enregistrement", - "es": "Guardando" + "es": "Guardando", + "it": "Salvataggio" } }, "transfer_event_stopped": { @@ -1924,7 +2153,8 @@ "translations": { "en": "Sharing stopped", "fr": "Partage arrêté", - "es": "Se dejó de compartir" + "es": "Se dejó de compartir", + "it": "Condivisione interrotta" } }, "transfer_event_updated": { @@ -1932,7 +2162,8 @@ "translations": { "en": "Transfer updated", "fr": "Transfert mis à jour", - "es": "Transferencia actualizada" + "es": "Transferencia actualizada", + "it": "Trasferimento aggiornato" } }, "transfer_file_count": { @@ -1955,6 +2186,10 @@ "es": { "one": "{count} archivo", "other": "{count} archivos" + }, + "it": { + "one": "{count} file", + "other": "{count} file" } } }, @@ -1963,7 +2198,8 @@ "translations": { "en": "Invitation saved.", "fr": "Invitation enregistrée.", - "es": "Invitación guardada." + "es": "Invitación guardada.", + "it": "Invito salvato." } }, "transfer_nearby_device": { @@ -1971,7 +2207,8 @@ "translations": { "en": "Nearby device", "fr": "Appareil à proximité", - "es": "Dispositivo cercano" + "es": "Dispositivo cercano", + "it": "Dispositivo nelle vicinanze" } }, "transfer_nfc_unavailable": { @@ -1979,7 +2216,8 @@ "translations": { "en": "NFC tag writing is not available on this device.", "fr": "L’écriture de tag NFC n’est pas disponible sur cet appareil.", - "es": "La escritura de etiquetas NFC no está disponible en este dispositivo." + "es": "La escritura de etiquetas NFC no está disponible en este dispositivo.", + "it": "La scrittura dei tag NFC non è disponibile su questo dispositivo." } }, "transfer_nfc_waiting": { @@ -1987,7 +2225,8 @@ "translations": { "en": "Hold your device near a writable NFC tag.", "fr": "Approchez votre appareil d’un tag NFC inscriptible.", - "es": "Acerque su dispositivo a una etiqueta NFC grabable." + "es": "Acerque su dispositivo a una etiqueta NFC grabable.", + "it": "Avvicini il dispositivo a un tag NFC scrivibile." } }, "transfer_nfc_written": { @@ -1995,7 +2234,8 @@ "translations": { "en": "Invitation written to the NFC tag.", "fr": "Invitation écrite sur le tag NFC.", - "es": "Invitación escrita en la etiqueta NFC." + "es": "Invitación escrita en la etiqueta NFC.", + "it": "Invito scritto sul tag NFC." } }, "transfer_no_activity": { @@ -2003,7 +2243,8 @@ "translations": { "en": "There is no activity to show yet.", "fr": "Aucune activité à afficher pour l’instant.", - "es": "Todavía no hay actividad que mostrar." + "es": "Todavía no hay actividad que mostrar.", + "it": "Non c’è ancora alcuna attività da mostrare." } }, "transfer_no_receivers": { @@ -2011,7 +2252,8 @@ "translations": { "en": "Nobody has requested this transfer yet.", "fr": "Personne n’a encore demandé ce transfert.", - "es": "Nadie ha solicitado aún esta transferencia." + "es": "Nadie ha solicitado aún esta transferencia.", + "it": "Nessuno ha ancora richiesto questo trasferimento." } }, "transfer_receiver_accepted": { @@ -2019,7 +2261,8 @@ "translations": { "en": "Approved — waiting for completion", "fr": "Approuvé — en attente de la fin", - "es": "Aprobado: esperando a que se complete" + "es": "Aprobado: esperando a que se complete", + "it": "Approvato: in attesa del completamento" } }, "transfer_receiver_completed": { @@ -2027,7 +2270,8 @@ "translations": { "en": "Received successfully", "fr": "Reçu avec succès", - "es": "Recibido correctamente" + "es": "Recibido correctamente", + "it": "Ricevuto correttamente" } }, "transfer_receiver_expired": { @@ -2035,7 +2279,8 @@ "translations": { "en": "Request expired", "fr": "Demande expirée", - "es": "Solicitud caducada" + "es": "Solicitud caducada", + "it": "Richiesta scaduta" } }, "transfer_receiver_refused": { @@ -2043,7 +2288,8 @@ "translations": { "en": "Request refused", "fr": "Demande refusée", - "es": "Solicitud rechazada" + "es": "Solicitud rechazada", + "it": "Richiesta rifiutata" } }, "transfer_receiver_requested": { @@ -2051,7 +2297,8 @@ "translations": { "en": "Waiting for your approval", "fr": "En attente de votre approbation", - "es": "Esperando su aprobación" + "es": "Esperando su aprobación", + "it": "In attesa della sua approvazione" } }, "transfer_receiver_unknown": { @@ -2059,7 +2306,8 @@ "translations": { "en": "Status unavailable", "fr": "Statut indisponible", - "es": "Estado no disponible" + "es": "Estado no disponible", + "it": "Stato non disponibile" } }, "transfer_receivers_completed_count": { @@ -2073,7 +2321,8 @@ "translations": { "en": "{count} completed", "fr": "{count} terminés", - "es": "{count} completados" + "es": "{count} completados", + "it": "{count} completati" } }, "transfer_receivers_description": { @@ -2081,7 +2330,8 @@ "translations": { "en": "Requests, approvals, and completed deliveries", "fr": "Demandes, approbations et livraisons terminées", - "es": "Solicitudes, aprobaciones y entregas completadas" + "es": "Solicitudes, aprobaciones y entregas completadas", + "it": "Richieste, approvazioni e consegne completate" } }, "transfer_receivers_pending": { @@ -2095,7 +2345,8 @@ "translations": { "en": "{count} waiting", "fr": "{count} en attente", - "es": "{count} en espera" + "es": "{count} en espera", + "it": "{count} in attesa" } }, "transfer_receivers_title": { @@ -2103,7 +2354,8 @@ "translations": { "en": "Receivers", "fr": "Destinataires", - "es": "Destinatarios" + "es": "Destinatarios", + "it": "Destinatari" } }, "transfer_scan_qr": { @@ -2111,7 +2363,8 @@ "translations": { "en": "Scan with VniDrop to receive this transfer", "fr": "Scannez avec VniDrop pour recevoir ce transfert", - "es": "Escanee con VniDrop para recibir esta transferencia" + "es": "Escanee con VniDrop para recibir esta transferencia", + "it": "Scansioni con VniDrop per ricevere questo trasferimento" } }, "transfer_share_description": { @@ -2119,7 +2372,8 @@ "translations": { "en": "QR code, invitation file, and nearby options", "fr": "QR code, fichier d’invitation et options à proximité", - "es": "Código QR, archivo de invitación y opciones cercanas" + "es": "Código QR, archivo de invitación y opciones cercanas", + "it": "Codice QR, file di invito e opzioni nelle vicinanze" } }, "transfer_share_title": { @@ -2127,7 +2381,8 @@ "translations": { "en": "Share", "fr": "Partager", - "es": "Compartir" + "es": "Compartir", + "it": "Condividi" } }, "value_unavailable": { @@ -2135,7 +2390,8 @@ "translations": { "en": "Not available", "fr": "Non disponible", - "es": "No disponible" + "es": "No disponible", + "it": "Non disponibile" } }, "version_title": { @@ -2143,7 +2399,8 @@ "translations": { "en": "App version", "fr": "Version de l’app", - "es": "Versión de la app" + "es": "Versión de la app", + "it": "Versione dell’app" } } } diff --git a/shared/src/commonMain/composeResources/values-it/strings.xml b/shared/src/commonMain/composeResources/values-it/strings.xml new file mode 100644 index 0000000..2b44a36 --- /dev/null +++ b/shared/src/commonMain/composeResources/values-it/strings.xml @@ -0,0 +1,257 @@ + + + Segnala un bug + VniDrop trasferisce file e cartelle direttamente da un dispositivo a un altro sulla rete, senza caricarli su alcun servizio di hosting. Non c’è alcun account da creare e nessuna copia del suo trasferimento rimane nel cloud una volta terminato. + Un trasferimento diretto da dispositivo a dispositivo: i suoi file vanno direttamente al destinatario. + Le connessioni sono autenticate e cifrate end-to-end (tramite Iroh) e i file in arrivo vengono verificati tramite l’impronta del loro contenuto. + Lei decide chi riceve: approvi ogni richiesta oppure apra un trasferimento a chiunque disponga dell’invito. + Senza account: non c’è nulla da registrare. + Open source, rilasciato con licenza Apache 2.0. + Cos’è VniDrop + Non è un’archiviazione cloud: nessun server conserva i suoi file e nulla resta nel cloud dopo un trasferimento. + Non è una diffusione pubblica: un invito è un link di accesso privato, non un annuncio a tutti nelle vicinanze. + Non è un servizio di sincronizzazione o di backup. + Cosa non è VniDrop + Licenza + Informativa sulla privacy + Gli inviti sono chiavi di accesso. Tratti un codice QR, un tag NFC o un file .vnd come un link di accesso privato e lo condivida solo con le persone previste, soprattutto con «Chiunque abbia questo trasferimento». + Rifiuto predefinito: VniDrop serve solo il contenuto di una condivisione attiva e rifiuta le richieste sconosciute. + I file ricevuti vengono salvati sul suo dispositivo e non sovrascrivono mai un file esistente. + Informativa sulla privacy + Se due dispositivi non riescono a connettersi direttamente, la connessione cifrata può essere instradata tramite relay. I relay inoltrano solo pacchetti cifrati; non memorizzano mai i suoi file. + Privacy e sicurezza + Invii file direttamente. Mantenga il controllo su chi li riceve. + Informazioni + Segue l’aspetto chiaro o scuro di questo dispositivo. + Modalità scura + Modalità chiara + Sistema + Aspetto + Richiesta di ricezione + ID dispositivo: %1$s + Un dispositivo nelle vicinanze + %1$d richieste in attesa + %1$s vuole ricevere «%2$s». + Livello batteria + nome@esempio.com + Email di contatto (facoltativa) + Ci dica cosa è andato storto. Alleghiamo le informazioni sul dispositivo e, facoltativamente, i log recenti (con i valori sensibili oscurati). + Informazioni sul dispositivo + Descriva cosa si aspettava che accadesse + Cosa si aspettava? + Includi i log recenti + Ci aiuta a diagnosticare il problema. I valori sensibili vengono oscurati prima dell’invio. + Dimensione dell’allegato dei log + Descriva cosa si aspettava. + Descriva cosa è accaduto. + Elenchi i passaggi per riprodurre il problema + Passaggi per riprodurre (facoltativi) + Invia segnalazione + Impossibile inviare la segnalazione. Riprovi più tardi. + Grazie: la sua segnalazione è stata registrata. + Invio in corso… + Descriva cosa è accaduto + Cosa è accaduto? + Approva + Indietro + Annulla + Annulla + Cambia file + Scegli file + Scegli cartella + Cancella + Chiudi + Nuovo trasferimento + Elimina trasferimento + Salva file .vnd + Condividi invito + Apri Impostazioni + Ricevi + Inizia a ricevere + Rifiuta + Rimuovi file + Usa predefinito + Riprova + Inizia a condividere + Preparazione del trasferimento… + Mostra in File + Scrivi su tag NFC + Modello del dispositivo + Nome del dispositivo + Invia report di arresto anomalo ed eventi d’uso anonimi per aiutarci a migliorare VniDrop. Può disattivarlo in qualsiasi momento. Inviti, percorsi dei file e contenuti dei trasferimenti non vengono mai inclusi. + La condivisione dei dati diagnostici è disattivata. + La condivisione dei dati diagnostici è attivata. + Condividi dati diagnostici + Per scansionare un codice QR è necessario l’accesso alla fotocamera. + Impossibile caricare le informazioni sul dispositivo. + VniDrop non ha potuto accedere ai file o alla cartella selezionati. Controlli le autorizzazioni e riprovi. + Qualcosa è andato storto. Riprovi. + VniDrop non ha potuto completare l’avvio. Chiuda l’app e riprovi. + Impossibile leggere questo invito. Ne chieda uno nuovo al mittente. + Questo invito è vuoto. Provi ad aprirlo di nuovo. + La libreria nativa di VniDrop non è presente in questa build. + Impossibile usare questo tag NFC. Ne provi un altro. + Il mittente non ha approvato questo trasferimento, oppure è stato rifiutato. + VniDrop non ha potuto salvare i dati del trasferimento su questo dispositivo. + Impossibile aprire l’elemento selezionato. Provi a sceglierlo di nuovo. + Selezioni almeno un elemento da condividere. + VniDrop non ha potuto aprire i suoi socket di rete su questo dispositivo. + VniDrop è ancora in fase di avvio. Riapra l’invito tra un momento. + Impossibile completare il trasferimento. Controlli la connessione e riprovi. + Nome del destinatario + Nome del mittente + Nome del trasferimento + Nome visualizzato + Autorizzazione necessaria + Non disponibile + Controllo della cartella… + Pronta + File + Dimensione + Stato + Ricevi + Invia + Impostazioni + Rete + Ricevi avvisi sulle nuove richieste di ricezione quando VniDrop è in background. + Notifiche attivate. + Consenti le notifiche + Le notifiche sono disattivate per VniDrop. Può attivarle in Impostazioni. + Impossibile aprire le impostazioni delle notifiche. + Notifiche + Le notifiche non sono disponibili su questo dispositivo. + Sistema operativo + Salva i trasferimenti ricevuti in + Preferenze + Annullato + Completato + Connesso + Connessione + Download + Non riuscito + Preparazione + Trasferimento interrotto + Preparazione + Pronto + Ricezione + Richiesta di accesso + Salvataggio + Invio + Invio a %1$d + Pronto per la condivisione + Elaborazione… + Scelga il metodo di invito a sua disposizione. + Come vuole connettersi? + Cancella cronologia + Tutte le ricezioni completate, non riuscite e annullate verranno rimosse dalla cronologia di VniDrop. I file scaricati rimarranno su questo dispositivo. + Cancellare la cronologia di ricezione? + Trasferimento ricevuto. + «%1$s» verrà rimosso dalla cronologia di VniDrop. Il file scaricato rimarrà su questo dispositivo. + Elimina dalla cronologia di ricezione + Rimuovere dalla cronologia? + Apra un invito VniDrop, scansioni un codice QR o avvicini un tag NFC. + Ancora nulla di ricevuto + Cronologia di ricezione cancellata. + Cronologia + Apri un invito .vnd + Scelga un invito salvato o condiviso su questo dispositivo. + Leggi tag NFC + Avvicini questo dispositivo al tag di invito del mittente. + Scansiona codice QR + Usi la fotocamera per scansionare il codice VniDrop del mittente. + Trasferimenti che ha ricevuto su questo dispositivo. + Avvicini al tag NFC… + Impossibile aprire VniDrop in File. + Rivedi trasferimento + Ricevi + Trasferimento VniDrop + Chiunque abbia questo trasferimento + Nessuna approvazione richiesta. Da usare solo per elementi che non ha problemi a condividere. + Chiunque abbia l’invito può scaricare finché non interrompe la condivisione. Non lo usi per elementi privati o sensibili. + Chiedi prima di ogni download + Approva o rifiuta ogni nuovo destinatario. + Chi può riceverlo? + Selezioni file o una cartella da questo dispositivo. Potrà rivedere la selezione prima di creare il trasferimento. + Scelga cosa condividere + Crei un trasferimento, decida chi può riceverlo, poi inviti queste persone con un codice QR, un tag NFC o un file di invito. + Ancora nulla di condiviso + Dimensione non disponibile + Cartella + Crea un nuovo trasferimento + Nuovo trasferimento + Rivedi trasferimento + %1$d file selezionati + Interrompi condivisione + Questo interrompe il trasferimento e blocca chiunque lo stia scaricando. Rimane nella sua cronologia come Interrotto. + Trasferimenti che sta condividendo da questo dispositivo. + Invia + Trasferimento creato. + Dettagli del trasferimento + I suoi trasferimenti + Il suo nome, dove vengono salvati i trasferimenti, l’aspetto e le notifiche. + Impostazioni + Ignora + Disponibile + Annullato + Completato + Non riuscito + Preparazione + Ricezione + Interrotto + Calcolo… + Elimina tutti i trasferimenti + Questo cancella dalla cronologia tutti i record dei trasferimenti inviati e ricevuti. I suoi file ricevuti non vengono eliminati. Nota: il motore di trasferimento conserva il contenuto memorizzato, quindi i dati di trasferimento potrebbero non diminuire. Questa operazione non può essere annullata. + Eliminazione… + I dati di trasferimento sono gestiti dal motore di trasferimento: la sua cronologia più il contenuto dei file che ha condiviso. Il pulsante qui sotto cancella i record dei trasferimenti; il motore conserva il contenuto memorizzato, quindi questo valore potrebbe non diminuire. I file ricevuti sono i file che ha scaricato e non vengono mai eliminati qui. + File ricevuti + File temporanei + Archiviazione + Totale + Dati di trasferimento + Tutti i trasferimenti eliminati + Veda gli aggiornamenti importanti di questo trasferimento + Attività + «%1$s» non verrà più condiviso e la sua cronologia di trasferimento verrà rimossa da questo dispositivo. + Eliminare il trasferimento? + Trasferimento eliminato. + Eliminazione… + Dettagli del trasferimento + Accesso del destinatario approvato + Un destinatario ha completato il trasferimento + Connessione al mittente + Download + Il trasferimento ha riscontrato un problema + Preparazione del trasferimento + Pronto per la condivisione + Accesso del destinatario rifiutato + Un destinatario ha richiesto l’accesso + Salvataggio + Condivisione interrotta + Trasferimento aggiornato + Invito salvato. + Dispositivo nelle vicinanze + La scrittura dei tag NFC non è disponibile su questo dispositivo. + Avvicini il dispositivo a un tag NFC scrivibile. + Invito scritto sul tag NFC. + Non c’è ancora alcuna attività da mostrare. + Nessuno ha ancora richiesto questo trasferimento. + Approvato: in attesa del completamento + Ricevuto correttamente + Richiesta scaduta + Richiesta rifiutata + In attesa della sua approvazione + Stato non disponibile + %1$d completati + Richieste, approvazioni e consegne completate + %1$d in attesa + Destinatari + Scansioni con VniDrop per ricevere questo trasferimento + Codice QR, file di invito e opzioni nelle vicinanze + Condividi + Non disponibile + Versione dell’app + + %1$d file + %1$d file + + From 0309cfd649c7daf29d3d25a4b59451bc78fcab3a Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 20 Jul 2026 11:20:32 +0200 Subject: [PATCH 08/13] feat(l10n): add German translations Translate all 253 user-facing strings to German (formal "Sie"; standard iOS term conventions). Generates values-de/strings.xml for KMP, de localizations in the Apple catalog, and adds de to CFBundleLocalizations. --- apple/VniDrop/Resources/Info.plist | 1 + apple/VniDrop/Resources/Localizable.xcstrings | 1530 +++++++++++++++++ localization/strings.json | 763 +++++--- .../composeResources/values-de/strings.xml | 257 +++ 4 files changed, 2298 insertions(+), 253 deletions(-) create mode 100644 shared/src/commonMain/composeResources/values-de/strings.xml diff --git a/apple/VniDrop/Resources/Info.plist b/apple/VniDrop/Resources/Info.plist index e267c3e..5876924 100644 --- a/apple/VniDrop/Resources/Info.plist +++ b/apple/VniDrop/Resources/Info.plist @@ -8,6 +8,7 @@ fr es it + de CADisableMinimumFrameDurationOnPhone diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index a7d26e5..8986802 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -9,6 +9,12 @@ "comment": "Apple format template composing three values with a middot separator (e.g. metadata rows). Legacy literal key — rename.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } + }, "en": { "stringUnit": { "state": "translated", @@ -39,6 +45,12 @@ "comment": "Apple format template composing two values with a middot separator. Legacy literal key — rename.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } + }, "en": { "stringUnit": { "state": "translated", @@ -73,6 +85,12 @@ "comment": "About screen: button/link that opens the bug report form.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Fehler melden" + } + }, "en": { "stringUnit": { "state": "translated", @@ -103,6 +121,12 @@ "comment": "About screen: intro paragraph describing what VniDrop does.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop überträgt Dateien und Ordner direkt von einem Gerät auf ein anderes über das Netzwerk, ohne sie auf einen Hosting-Dienst hochzuladen. Es muss kein Konto erstellt werden, und nach Abschluss verbleibt keine Kopie Ihrer Übertragung in der Cloud." + } + }, "en": { "stringUnit": { "state": "translated", @@ -133,6 +157,12 @@ "comment": "About screen, 'What VniDrop is' list: point about direct device-to-device transfer.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Eine direkte Gerät-zu-Gerät-Übertragung – Ihre Dateien gehen direkt an den Empfänger." + } + }, "en": { "stringUnit": { "state": "translated", @@ -163,6 +193,12 @@ "comment": "About screen, 'What VniDrop is' list: point about encrypted, verified connections.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verbindungen sind authentifiziert und Ende-zu-Ende-verschlüsselt (über Iroh), und eingehende Dateien werden anhand ihres Inhalts-Hashs überprüft." + } + }, "en": { "stringUnit": { "state": "translated", @@ -193,6 +229,12 @@ "comment": "About screen, 'What VniDrop is' list: point about controlling who receives.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Sie entscheiden, wer empfängt: Genehmigen Sie jede Anfrage oder öffnen Sie eine Übertragung für alle, die die Einladung besitzen." + } + }, "en": { "stringUnit": { "state": "translated", @@ -223,6 +265,12 @@ "comment": "About screen, 'What VniDrop is' list: point about being account-free.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ohne Konto – es gibt nichts zu registrieren." + } + }, "en": { "stringUnit": { "state": "translated", @@ -253,6 +301,12 @@ "comment": "About screen, 'What VniDrop is' list: point about being open source.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Open Source, veröffentlicht unter der Apache-2.0-Lizenz." + } + }, "en": { "stringUnit": { "state": "translated", @@ -283,6 +337,12 @@ "comment": "About screen: section heading for the 'What VniDrop is' list.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Was VniDrop ist" + } + }, "en": { "stringUnit": { "state": "translated", @@ -313,6 +373,12 @@ "comment": "About screen, 'What VniDrop isn't' list: point about not being cloud storage.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Kein Cloud-Speicher – kein Server hält Ihre Dateien, und nach einer Übertragung wartet nichts in der Cloud." + } + }, "en": { "stringUnit": { "state": "translated", @@ -343,6 +409,12 @@ "comment": "About screen, 'What VniDrop isn't' list: point about invitations not being public broadcasts.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Keine öffentliche Übertragung – eine Einladung ist ein privater Zugangslink, keine Ankündigung an alle in der Nähe." + } + }, "en": { "stringUnit": { "state": "translated", @@ -373,6 +445,12 @@ "comment": "About screen, 'What VniDrop isn't' list: point about not being sync/backup.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Kein Synchronisierungs- oder Backup-Dienst." + } + }, "en": { "stringUnit": { "state": "translated", @@ -403,6 +481,12 @@ "comment": "About screen: section heading for the 'What VniDrop isn't' list.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Was VniDrop nicht ist" + } + }, "en": { "stringUnit": { "state": "translated", @@ -433,6 +517,12 @@ "comment": "About screen: label for the license row.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Lizenz" + } + }, "en": { "stringUnit": { "state": "translated", @@ -463,6 +553,12 @@ "comment": "About screen: link to the privacy policy.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Datenschutzrichtlinie" + } + }, "en": { "stringUnit": { "state": "translated", @@ -493,6 +589,12 @@ "comment": "About screen, Privacy & security list: point that invitations are capabilities to share carefully.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Einladungen sind Zugangsschlüssel. Behandeln Sie einen QR-Code, ein NFC-Tag oder eine .vnd-Datei wie einen privaten Zugangslink und teilen Sie ihn nur mit den vorgesehenen Personen – insbesondere bei „Jeder mit dieser Übertragung“." + } + }, "en": { "stringUnit": { "state": "translated", @@ -523,6 +625,12 @@ "comment": "About screen, Privacy & security list: point about denying unknown requests by default.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Standardmäßig ablehnen – VniDrop stellt nur den Inhalt einer aktiven Freigabe bereit und weist unbekannte Anfragen ab." + } + }, "en": { "stringUnit": { "state": "translated", @@ -553,6 +661,12 @@ "comment": "About screen, Privacy & security list: point about received files staying local and never overwriting.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfangene Dateien werden auf Ihrem Gerät gespeichert und überschreiben niemals eine vorhandene Datei." + } + }, "en": { "stringUnit": { "state": "translated", @@ -583,6 +697,12 @@ "comment": "About screen: label for the privacy policy row.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Datenschutzrichtlinie" + } + }, "en": { "stringUnit": { "state": "translated", @@ -613,6 +733,12 @@ "comment": "About screen, Privacy & security list: point explaining encrypted relays.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wenn zwei Geräte sich nicht direkt verbinden können, kann die verschlüsselte Verbindung weitergeleitet werden. Relays leiten nur verschlüsselte Pakete weiter; sie speichern niemals Ihre Dateien." + } + }, "en": { "stringUnit": { "state": "translated", @@ -643,6 +769,12 @@ "comment": "About screen: section heading for the Privacy & security list.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Datenschutz & Sicherheit" + } + }, "en": { "stringUnit": { "state": "translated", @@ -673,6 +805,12 @@ "comment": "About screen: short tagline under the app name.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Senden Sie Dateien direkt. Behalten Sie die Kontrolle darüber, wer sie empfängt." + } + }, "en": { "stringUnit": { "state": "translated", @@ -703,6 +841,12 @@ "comment": "About screen: navigation/screen title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Über" + } + }, "en": { "stringUnit": { "state": "translated", @@ -733,6 +877,12 @@ "comment": "Settings > Appearance: description for the System/auto option.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Der hellen oder dunklen Darstellung dieses Geräts folgen." + } + }, "en": { "stringUnit": { "state": "translated", @@ -763,6 +913,12 @@ "comment": "Settings > Appearance: label for the dark theme option.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Dunkelmodus" + } + }, "en": { "stringUnit": { "state": "translated", @@ -793,6 +949,12 @@ "comment": "Settings > Appearance: label for the light theme option.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Hellmodus" + } + }, "en": { "stringUnit": { "state": "translated", @@ -823,6 +985,12 @@ "comment": "Settings > Appearance: label for the follow-system option.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "System" + } + }, "en": { "stringUnit": { "state": "translated", @@ -853,6 +1021,12 @@ "comment": "Settings > Appearance: section title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Darstellung" + } + }, "en": { "stringUnit": { "state": "translated", @@ -883,6 +1057,12 @@ "comment": "Approval prompt: title when a receiver requests to download a transfer.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfangsanfrage" + } + }, "en": { "stringUnit": { "state": "translated", @@ -913,6 +1093,12 @@ "comment": "Approval prompt: shows the requesting device's ID. {arg1} = device/endpoint identifier.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Geräte-ID: %1$@" + } + }, "en": { "stringUnit": { "state": "translated", @@ -943,6 +1129,12 @@ "comment": "Approval prompt: fallback label for a requester with no display name.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ein Gerät in der Nähe" + } + }, "en": { "stringUnit": { "state": "translated", @@ -973,6 +1165,12 @@ "comment": "Send/transfer list: badge showing how many receive requests are awaiting approval. {count} = pending requests.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d Anfragen warten" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1003,6 +1201,12 @@ "comment": "Approval prompt body: '{arg1} wants to receive \"{arg2}\".' {arg1} = requester name, {arg2} = transfer name.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ möchte „%2$@“ empfangen." + } + }, "en": { "stringUnit": { "state": "translated", @@ -1033,6 +1237,12 @@ "comment": "Device information row: battery level label.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Batteriestand" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1063,6 +1273,12 @@ "comment": "Bug report form: placeholder text in the contact email field.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "name@beispiel.com" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1093,6 +1309,12 @@ "comment": "Bug report form: label for the optional contact email field.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Kontakt-E-Mail (optional)" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1123,6 +1345,12 @@ "comment": "Bug report form: intro text explaining what gets attached.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Sagen Sie uns, was schiefgelaufen ist. Wir hängen Geräteinformationen und optional aktuelle Protokolle an (sensible Werte werden geschwärzt)." + } + }, "en": { "stringUnit": { "state": "translated", @@ -1153,6 +1381,12 @@ "comment": "Bug report form: heading for the attached device information section.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Geräteinformationen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1183,6 +1417,12 @@ "comment": "Bug report form: placeholder in the 'what did you expect' field.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Beschreiben Sie, was Sie erwartet haben" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1213,6 +1453,12 @@ "comment": "Bug report form: label for the expected-behavior field.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Was haben Sie erwartet?" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1243,6 +1489,12 @@ "comment": "Bug report form: toggle label to attach recent logs.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Aktuelle Protokolle einschließen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1273,6 +1525,12 @@ "comment": "Bug report form: explanation under the include-logs toggle.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Hilft uns, das Problem zu diagnostizieren. Sensible Werte werden vor dem Senden geschwärzt." + } + }, "en": { "stringUnit": { "state": "translated", @@ -1303,6 +1561,12 @@ "comment": "Bug report form: label showing the size of the log attachment.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Größe des Protokollanhangs" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1333,6 +1597,12 @@ "comment": "Bug report form: validation error when the expected-behavior field is empty.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Bitte beschreiben Sie, was Sie erwartet haben." + } + }, "en": { "stringUnit": { "state": "translated", @@ -1363,6 +1633,12 @@ "comment": "Bug report form: validation error when the what-happened field is empty.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Bitte beschreiben Sie, was passiert ist." + } + }, "en": { "stringUnit": { "state": "translated", @@ -1393,6 +1669,12 @@ "comment": "Bug report form: placeholder in the steps-to-reproduce field.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Listen Sie die Schritte zum Reproduzieren des Problems auf" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1423,6 +1705,12 @@ "comment": "Bug report form: label for the optional steps-to-reproduce field.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Schritte zum Reproduzieren (optional)" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1453,6 +1741,12 @@ "comment": "Bug report form: submit button.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Bericht senden" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1483,6 +1777,12 @@ "comment": "Bug report form: error message when submission fails.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Der Fehlerbericht konnte nicht gesendet werden. Bitte versuchen Sie es später erneut." + } + }, "en": { "stringUnit": { "state": "translated", @@ -1513,6 +1813,12 @@ "comment": "Bug report form: confirmation message after a successful submission.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Danke – Ihr Fehlerbericht wurde erfasst." + } + }, "en": { "stringUnit": { "state": "translated", @@ -1543,6 +1849,12 @@ "comment": "Bug report form: progress label while the report is being sent.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird gesendet…" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1573,6 +1885,12 @@ "comment": "Bug report form: placeholder in the what-happened field.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Beschreiben Sie, was passiert ist" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1603,6 +1921,12 @@ "comment": "Bug report form: label for the what-happened field.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Was ist passiert?" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1633,6 +1957,12 @@ "comment": "Button: approve a receiver's request.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Genehmigen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1663,6 +1993,12 @@ "comment": "Button: go back to the previous step/screen.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Zurück" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1693,6 +2029,12 @@ "comment": "Button: cancel the current action or dialog.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Abbrechen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1723,6 +2065,12 @@ "comment": "Button: cancel an in-progress receive.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Abbrechen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1753,6 +2101,12 @@ "comment": "Button: change the selected files in the send flow.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Dateien ändern" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1783,6 +2137,12 @@ "comment": "Button: open the file picker to choose files to send.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Dateien auswählen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1813,6 +2173,12 @@ "comment": "Button: open the folder picker (send selection or receive folder).", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ordner auswählen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1843,6 +2209,12 @@ "comment": "Button: clear the current input or selection.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Löschen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1873,6 +2245,12 @@ "comment": "Button: close the current sheet/dialog.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Schließen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1903,6 +2281,12 @@ "comment": "Button: start creating a new transfer (Send tab).", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Neue Übertragung" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1933,6 +2317,12 @@ "comment": "Button: delete a transfer.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung löschen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1963,6 +2353,12 @@ "comment": "Button: save the invitation as a .vnd file.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": ".vnd-Datei sichern" + } + }, "en": { "stringUnit": { "state": "translated", @@ -1993,6 +2389,12 @@ "comment": "Button: open the OS share sheet to share the invitation.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Einladung teilen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2023,6 +2425,12 @@ "comment": "Button: open the OS Settings app (e.g. for permissions).", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Einstellungen öffnen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2053,6 +2461,12 @@ "comment": "Button: receive label (Receive action).", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfangen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2083,6 +2497,12 @@ "comment": "Button: start receiving a transfer.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfang starten" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2113,6 +2533,12 @@ "comment": "Button: refuse a receiver's request.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ablehnen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2143,6 +2569,12 @@ "comment": "Button: remove a single file from the send selection.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Datei entfernen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2173,6 +2605,12 @@ "comment": "Button: reset a setting to its default value.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Standard verwenden" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2203,6 +2641,12 @@ "comment": "Button: retry after a failed operation.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wiederholen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2233,6 +2677,12 @@ "comment": "Button: start sharing the transfer (make it available).", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Freigabe starten" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2263,6 +2713,12 @@ "comment": "Button: disabled/loading state while the transfer is being prepared.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung wird vorbereitet…" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2293,6 +2749,12 @@ "comment": "Button: reveal a received file in the Files app.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "In „Dateien“ anzeigen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2323,6 +2785,12 @@ "comment": "Button: write the invitation to an NFC tag.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Auf NFC-Tag schreiben" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2353,6 +2821,12 @@ "comment": "Device information row: device model label.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Gerätemodell" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2383,6 +2857,12 @@ "comment": "Device information row: device name label.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Gerätename" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2413,6 +2893,12 @@ "comment": "Settings > Diagnostics: explanation of what anonymous diagnostics collect.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Anonyme Absturzberichte und Nutzungsereignisse senden, damit wir VniDrop verbessern können. Sie können dies jederzeit deaktivieren. Einladungen, Dateipfade und Übertragungsinhalte werden niemals einbezogen." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2443,6 +2929,12 @@ "comment": "Settings > Diagnostics: confirmation shown when diagnostics are turned off.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Die Freigabe von Diagnosedaten ist deaktiviert." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2473,6 +2965,12 @@ "comment": "Settings > Diagnostics: confirmation shown when diagnostics are turned on.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Die Freigabe von Diagnosedaten ist aktiviert." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2503,6 +3001,12 @@ "comment": "Settings > Diagnostics: toggle title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Diagnosedaten teilen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -2533,6 +3037,12 @@ "comment": "Error: camera permission is needed to scan a QR code.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Für das Scannen eines QR-Codes ist Kamerazugriff erforderlich." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2563,6 +3073,12 @@ "comment": "Error: device information could not be loaded.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Geräteinformationen konnten nicht geladen werden." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2593,6 +3109,12 @@ "comment": "Error: the selected files/folder could not be accessed.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop konnte nicht auf die ausgewählten Dateien oder den Ordner zugreifen. Überprüfen Sie die Berechtigungen und versuchen Sie es erneut." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2623,6 +3145,12 @@ "comment": "Error: generic fallback message.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Etwas ist schiefgelaufen. Versuchen Sie es erneut." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2653,6 +3181,12 @@ "comment": "Error: the app failed to finish starting up.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop konnte den Start nicht abschließen. Schließen Sie die App und versuchen Sie es erneut." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2683,6 +3217,12 @@ "comment": "Error: the invitation/ticket could not be parsed.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Diese Einladung konnte nicht gelesen werden. Bitten Sie den Absender um eine neue." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2713,6 +3253,12 @@ "comment": "Error: the opened invitation contained no data.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Diese Einladung ist leer. Versuchen Sie, sie erneut zu öffnen." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2743,6 +3289,12 @@ "comment": "Error: the native library is missing from the build.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Die native VniDrop-Bibliothek fehlt in diesem Build." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2773,6 +3325,12 @@ "comment": "Error: the NFC tag could not be read/used.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Dieses NFC-Tag konnte nicht verwendet werden. Versuchen Sie ein anderes." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2803,6 +3361,12 @@ "comment": "Error: the transfer was not approved or was refused by the sender.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Der Absender hat diese Übertragung nicht genehmigt oder sie wurde abgelehnt." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2833,6 +3397,12 @@ "comment": "Error: transfer data could not be saved locally.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop konnte die Übertragungsdaten auf diesem Gerät nicht speichern." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2863,6 +3433,12 @@ "comment": "Error: the selected item could not be opened.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Das ausgewählte Objekt konnte nicht geöffnet werden. Versuchen Sie, es erneut auszuwählen." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2893,6 +3469,12 @@ "comment": "Error: attempted to share with nothing selected.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wählen Sie mindestens ein Objekt zum Teilen aus." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2923,6 +3505,12 @@ "comment": "Error: the app could not open its network sockets.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop konnte seine Netzwerk-Sockets auf diesem Gerät nicht öffnen." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2953,6 +3541,12 @@ "comment": "Error: an invitation was opened before startup finished.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop startet noch. Öffnen Sie die Einladung gleich erneut." + } + }, "en": { "stringUnit": { "state": "translated", @@ -2983,6 +3577,12 @@ "comment": "Error: the transfer could not be completed.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Die Übertragung konnte nicht abgeschlossen werden. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut." + } + }, "en": { "stringUnit": { "state": "translated", @@ -3013,6 +3613,12 @@ "comment": "Text field label: the receiver's display name.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfängername" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3043,6 +3649,12 @@ "comment": "Text field label: the sender's display name.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Absendername" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3073,6 +3685,12 @@ "comment": "Text field label: the name given to a transfer.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragungsname" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3103,6 +3721,12 @@ "comment": "Settings text field label: this device's display name.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Anzeigename" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3133,6 +3757,12 @@ "comment": "Receive-folder status: permission is required to write to the chosen folder.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Berechtigung erforderlich" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3163,6 +3793,12 @@ "comment": "Receive-folder status: the chosen folder is unavailable.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Nicht verfügbar" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3193,6 +3829,12 @@ "comment": "Receive-folder status: the folder is being checked.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ordner wird geprüft…" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3223,6 +3865,12 @@ "comment": "Receive-folder status: the folder is valid and writable.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Bereit" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3253,6 +3901,12 @@ "comment": "Transfer metadata label: number of files.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Dateien" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3283,6 +3937,12 @@ "comment": "Transfer metadata label: total size.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Größe" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3313,6 +3973,12 @@ "comment": "Transfer metadata label: current status.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Status" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3343,6 +4009,12 @@ "comment": "Bottom navigation: Receive tab label.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfangen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3373,6 +4045,12 @@ "comment": "Bottom navigation: Send tab label.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Senden" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3403,6 +4081,12 @@ "comment": "Bottom navigation: Settings tab label.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Einstellungen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3433,6 +4117,12 @@ "comment": "Device information row: network label.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Netzwerk" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3463,6 +4153,12 @@ "comment": "Settings > Notifications: explanation of what notifications are used for.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Werden Sie über neue Empfangsanfragen benachrichtigt, während VniDrop im Hintergrund läuft." + } + }, "en": { "stringUnit": { "state": "translated", @@ -3493,6 +4189,12 @@ "comment": "Settings > Notifications: confirmation when notifications are enabled.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Mitteilungen aktiviert." + } + }, "en": { "stringUnit": { "state": "translated", @@ -3523,6 +4225,12 @@ "comment": "Settings > Notifications: label for the allow-notifications action.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Mitteilungen erlauben" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3553,6 +4261,12 @@ "comment": "Settings > Notifications: message when the OS permission is denied.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Mitteilungen sind für VniDrop deaktiviert. Sie können sie in den Einstellungen aktivieren." + } + }, "en": { "stringUnit": { "state": "translated", @@ -3583,6 +4297,12 @@ "comment": "Settings > Notifications: error when the OS notification settings can't be opened.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Die Mitteilungseinstellungen konnten nicht geöffnet werden." + } + }, "en": { "stringUnit": { "state": "translated", @@ -3613,6 +4333,12 @@ "comment": "Settings > Notifications: section title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Mitteilungen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3643,6 +4369,12 @@ "comment": "Settings > Notifications: message when notifications aren't supported on the device.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Mitteilungen sind auf diesem Gerät nicht verfügbar." + } + }, "en": { "stringUnit": { "state": "translated", @@ -3673,6 +4405,12 @@ "comment": "Device information row: operating system version label.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Betriebssystem" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3703,6 +4441,12 @@ "comment": "Settings > Preferences: label for the received-files destination folder.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfangene Übertragungen sichern in" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3733,6 +4477,12 @@ "comment": "Settings > Preferences: section title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Voreinstellungen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3763,6 +4513,12 @@ "comment": "Transfer progress label: cancelled.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Abgebrochen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3793,6 +4549,12 @@ "comment": "Transfer progress label: completed.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Abgeschlossen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3823,6 +4585,12 @@ "comment": "Transfer progress label: connected.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verbunden" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3853,6 +4621,12 @@ "comment": "Transfer progress label: connecting.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verbinden" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3883,6 +4657,12 @@ "comment": "Transfer progress label: downloading.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird geladen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3913,6 +4693,12 @@ "comment": "Transfer progress label: failed.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Fehlgeschlagen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3943,6 +4729,12 @@ "comment": "Transfer progress label: getting ready.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird bereitgemacht" + } + }, "en": { "stringUnit": { "state": "translated", @@ -3973,6 +4765,12 @@ "comment": "Transfer progress label: the transfer was interrupted.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung unterbrochen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4003,6 +4801,12 @@ "comment": "Transfer progress label: preparing.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird vorbereitet" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4033,6 +4837,12 @@ "comment": "Transfer progress label: ready.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Bereit" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4063,6 +4873,12 @@ "comment": "Transfer progress label: receiving.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird empfangen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4093,6 +4909,12 @@ "comment": "Transfer progress label: requesting access from the sender.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Zugriff wird angefragt" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4123,6 +4945,12 @@ "comment": "Transfer progress label: saving received files.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird gesichert" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4153,6 +4981,12 @@ "comment": "Transfer progress label: sending.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird gesendet" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4183,6 +5017,12 @@ "comment": "Transfer progress label: sending to N receivers. %lld = receiver count.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Senden an %1$d" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4213,6 +5053,12 @@ "comment": "Transfer progress label: the share is ready.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Bereit zum Teilen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4243,6 +5089,12 @@ "comment": "Transfer progress label: generic working/in-progress state.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird bearbeitet…" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4273,6 +5125,12 @@ "comment": "Receive flow: body text prompting the user to pick an invitation method.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wählen Sie die Ihnen zur Verfügung stehende Einladungsmethode." + } + }, "en": { "stringUnit": { "state": "translated", @@ -4303,6 +5161,12 @@ "comment": "Receive flow: title of the connect-method chooser.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wie möchten Sie sich verbinden?" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4333,6 +5197,12 @@ "comment": "Receive history: action to clear all history.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verlauf löschen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4363,6 +5233,12 @@ "comment": "Receive history: confirmation dialog body for clearing all history.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Alle abgeschlossenen, fehlgeschlagenen und abgebrochenen Empfänge werden aus dem Verlauf von VniDrop entfernt. Heruntergeladene Dateien verbleiben auf diesem Gerät." + } + }, "en": { "stringUnit": { "state": "translated", @@ -4393,6 +5269,12 @@ "comment": "Receive history: confirmation dialog title for clearing all history.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfangsverlauf löschen?" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4423,6 +5305,12 @@ "comment": "Receive flow: toast/message when a transfer finishes downloading.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung empfangen." + } + }, "en": { "stringUnit": { "state": "translated", @@ -4453,6 +5341,12 @@ "comment": "Receive history: confirmation body for removing one item. {arg1} = transfer name.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "„%1$@“ wird aus dem Verlauf von VniDrop entfernt. Die heruntergeladene Datei verbleibt auf diesem Gerät." + } + }, "en": { "stringUnit": { "state": "translated", @@ -4483,6 +5377,12 @@ "comment": "Receive history: swipe/menu action to delete a single history item.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Aus Empfangsverlauf löschen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4513,6 +5413,12 @@ "comment": "Receive history: confirmation title for removing one item.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Aus dem Verlauf entfernen?" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4543,6 +5449,12 @@ "comment": "Receive tab empty state: instructions on how to receive.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Öffnen Sie eine VniDrop-Einladung, scannen Sie einen QR-Code oder halten Sie das Gerät an ein NFC-Tag." + } + }, "en": { "stringUnit": { "state": "translated", @@ -4573,6 +5485,12 @@ "comment": "Receive tab empty state: title when nothing has been received.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Noch nichts empfangen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4603,6 +5521,12 @@ "comment": "Receive history: toast confirming history was cleared.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfangsverlauf gelöscht." + } + }, "en": { "stringUnit": { "state": "translated", @@ -4633,6 +5557,12 @@ "comment": "Receive tab: History section title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verlauf" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4663,6 +5593,12 @@ "comment": "Receive method: open a .vnd invitation file.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Eine .vnd-Einladung öffnen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4693,6 +5629,12 @@ "comment": "Receive method description: open a saved/shared invitation file.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wählen Sie eine auf diesem Gerät gespeicherte oder geteilte Einladung." + } + }, "en": { "stringUnit": { "state": "translated", @@ -4723,6 +5665,12 @@ "comment": "Receive method: read an NFC tag.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "NFC-Tag lesen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4753,6 +5701,12 @@ "comment": "Receive method description: hold near the sender's NFC tag.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Halten Sie dieses Gerät an das Einladungs-Tag des Absenders." + } + }, "en": { "stringUnit": { "state": "translated", @@ -4783,6 +5737,12 @@ "comment": "Receive method: scan a QR code.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "QR-Code scannen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4813,6 +5773,12 @@ "comment": "Receive method description: use the camera to scan the sender's code.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verwenden Sie die Kamera, um den VniDrop-Code des Absenders zu scannen." + } + }, "en": { "stringUnit": { "state": "translated", @@ -4843,6 +5809,12 @@ "comment": "Receive tab: subtitle under the title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragungen, die Sie auf diesem Gerät empfangen haben." + } + }, "en": { "stringUnit": { "state": "translated", @@ -4873,6 +5845,12 @@ "comment": "Receive flow: prompt while waiting to read an NFC tag.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Halten Sie das Gerät an das NFC-Tag…" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4903,6 +5881,12 @@ "comment": "Receive flow: error when opening VniDrop's folder in Files fails.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop konnte in „Dateien“ nicht geöffnet werden." + } + }, "en": { "stringUnit": { "state": "translated", @@ -4933,6 +5917,12 @@ "comment": "Receive flow: title of the review screen before accepting a transfer.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung prüfen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4963,6 +5953,12 @@ "comment": "Receive tab: screen title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfangen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -4993,6 +5989,12 @@ "comment": "Receive flow: fallback name for a transfer with no title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop-Übertragung" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5023,6 +6025,12 @@ "comment": "Send access option: anyone with the invitation can receive.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Jeder mit dieser Übertragung" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5053,6 +6061,12 @@ "comment": "Send access option description: no approval required.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Keine Genehmigung erforderlich. Verwenden Sie dies nur für Objekte, die Sie unbedenklich teilen können." + } + }, "en": { "stringUnit": { "state": "translated", @@ -5083,6 +6097,12 @@ "comment": "Send access option warning: caution about open access.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Jeder mit der Einladung kann herunterladen, bis Sie die Freigabe beenden. Verwenden Sie dies nicht für private oder sensible Objekte." + } + }, "en": { "stringUnit": { "state": "translated", @@ -5113,6 +6133,12 @@ "comment": "Send access option: approve each receiver.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Vor jedem Download fragen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5143,6 +6169,12 @@ "comment": "Send access option description: you approve/refuse each receiver.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Sie genehmigen oder lehnen jeden neuen Empfänger ab." + } + }, "en": { "stringUnit": { "state": "translated", @@ -5173,6 +6205,12 @@ "comment": "Send flow: heading for the who-can-receive access chooser.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wer kann sie empfangen?" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5203,6 +6241,12 @@ "comment": "Send flow: body text for the choose-what-to-share step.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wählen Sie Dateien oder einen Ordner auf diesem Gerät aus. Sie können die Auswahl überprüfen, bevor Sie die Übertragung erstellen." + } + }, "en": { "stringUnit": { "state": "translated", @@ -5233,6 +6277,12 @@ "comment": "Send flow: title of the choose-what-to-share step.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wählen Sie, was Sie teilen möchten" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5263,6 +6313,12 @@ "comment": "Send tab empty state: instructions on how to create a transfer.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Erstellen Sie eine Übertragung, entscheiden Sie, wer sie empfangen darf, und laden Sie diese Personen dann mit einem QR-Code, einem NFC-Tag oder einer Einladungsdatei ein." + } + }, "en": { "stringUnit": { "state": "translated", @@ -5293,6 +6349,12 @@ "comment": "Send tab empty state: title when nothing has been shared.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Noch nichts geteilt" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5323,6 +6385,12 @@ "comment": "Send flow: shown when a selected file's size can't be determined.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Größe nicht verfügbar" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5353,6 +6421,12 @@ "comment": "Send flow: label indicating a selected item is a folder.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ordner" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5383,6 +6457,12 @@ "comment": "Send flow: description for the create-new-transfer entry.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Eine neue Übertragung erstellen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5413,6 +6493,12 @@ "comment": "Send flow: title for the new-transfer step.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Neue Übertragung" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5443,6 +6529,12 @@ "comment": "Send flow: title of the review-transfer step before creating it.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung prüfen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5473,6 +6565,12 @@ "comment": "Send flow: count of files chosen. {count} = selected files. NOTE: singular case reads '1 files' — should become a plural.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d Dateien ausgewählt" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5503,6 +6601,12 @@ "comment": "Transfer details: action to stop sharing a transfer.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Freigabe beenden" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5533,6 +6637,12 @@ "comment": "Transfer details: confirmation body for stopping sharing.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Dies beendet die Übertragung und unterbricht alle, die sie gerade herunterladen. Sie verbleibt in Ihrem Verlauf als „Beendet“." + } + }, "en": { "stringUnit": { "state": "translated", @@ -5563,6 +6673,12 @@ "comment": "Send tab: subtitle under the title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragungen, die Sie von diesem Gerät aus teilen." + } + }, "en": { "stringUnit": { "state": "translated", @@ -5593,6 +6709,12 @@ "comment": "Send tab: screen title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Senden" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5623,6 +6745,12 @@ "comment": "Send flow: toast confirming a transfer was created.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung erstellt." + } + }, "en": { "stringUnit": { "state": "translated", @@ -5653,6 +6781,12 @@ "comment": "Send flow: title of the transfer details screen.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragungsdetails" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5683,6 +6817,12 @@ "comment": "Send tab: 'Your transfers' list heading.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ihre Übertragungen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5713,6 +6853,12 @@ "comment": "Settings screen: subtitle summarizing what's configurable.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ihr Name, wo Übertragungen gesichert werden, Darstellung und Mitteilungen." + } + }, "en": { "stringUnit": { "state": "translated", @@ -5743,6 +6889,12 @@ "comment": "Settings screen: title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Einstellungen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5773,6 +6925,12 @@ "comment": "Snackbar: accessibility label / action to dismiss the snackbar.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ausblenden" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5803,6 +6961,12 @@ "comment": "Transfer status: available (actively shared).", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verfügbar" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5833,6 +6997,12 @@ "comment": "Transfer status: cancelled.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Abgebrochen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5863,6 +7033,12 @@ "comment": "Transfer status: completed.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Abgeschlossen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5893,6 +7069,12 @@ "comment": "Transfer status: failed.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Fehlgeschlagen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5923,6 +7105,12 @@ "comment": "Transfer status: preparing.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird vorbereitet" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5953,6 +7141,12 @@ "comment": "Transfer status: receiving.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird empfangen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -5983,6 +7177,12 @@ "comment": "Transfer status: stopped.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Beendet" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6013,6 +7213,12 @@ "comment": "Settings > Storage: placeholder while a size is being calculated.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird berechnet…" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6043,6 +7249,12 @@ "comment": "Settings > Storage: button to delete all transfer records.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Alle Übertragungen löschen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6073,6 +7285,12 @@ "comment": "Settings > Storage: confirmation body for deleting all transfer records.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Dies löscht alle Datensätze gesendeter und empfangener Übertragungen aus Ihrem Verlauf. Ihre empfangenen Dateien werden nicht gelöscht. Hinweis: Die Übertragungs-Engine behält ihre gespeicherten Inhalte, sodass die Übertragungsdaten möglicherweise nicht abnehmen. Dies kann nicht rückgängig gemacht werden." + } + }, "en": { "stringUnit": { "state": "translated", @@ -6103,6 +7321,12 @@ "comment": "Settings > Storage: progress label while transfers are being deleted.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird gelöscht…" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6133,6 +7357,12 @@ "comment": "Settings > Storage: footer explaining how storage is managed.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragungsdaten werden von der Übertragungs-Engine verwaltet – Ihr Verlauf sowie der Inhalt der von Ihnen geteilten Dateien. Die Schaltfläche unten löscht Ihre Übertragungsdatensätze; die Engine behält ihre gespeicherten Inhalte, sodass dieser Wert möglicherweise nicht sinkt. Empfangene Dateien sind Ihre heruntergeladenen Dateien und werden hier niemals gelöscht." + } + }, "en": { "stringUnit": { "state": "translated", @@ -6163,6 +7393,12 @@ "comment": "Settings > Storage: label for the received-files size row.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfangene Dateien" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6193,6 +7429,12 @@ "comment": "Settings > Storage: label for the temporary-files size row.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Temporäre Dateien" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6223,6 +7465,12 @@ "comment": "Settings > Storage: section title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Speicher" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6253,6 +7501,12 @@ "comment": "Settings > Storage: label for the total-size row.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Gesamt" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6283,6 +7537,12 @@ "comment": "Settings > Storage: label for the transfer-engine data size row.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragungsdaten" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6313,6 +7573,12 @@ "comment": "Settings > Storage: toast confirming all transfers were deleted.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Alle Übertragungen gelöscht" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6343,6 +7609,12 @@ "comment": "Transfer details: description under the Activity section.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wichtige Aktualisierungen zu dieser Übertragung ansehen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6373,6 +7645,12 @@ "comment": "Transfer details: Activity section title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Aktivität" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6403,6 +7681,12 @@ "comment": "Transfer details: confirmation body for deleting a transfer. {arg1} = transfer name.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "„%1$@“ wird nicht mehr geteilt und sein Übertragungsverlauf wird von diesem Gerät entfernt." + } + }, "en": { "stringUnit": { "state": "translated", @@ -6433,6 +7717,12 @@ "comment": "Transfer details: confirmation title for deleting a transfer.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung löschen?" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6463,6 +7753,12 @@ "comment": "Transfer details: toast confirming a transfer was deleted.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung gelöscht." + } + }, "en": { "stringUnit": { "state": "translated", @@ -6493,6 +7789,12 @@ "comment": "Transfer details: progress label while a transfer is being deleted.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird gelöscht…" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6523,6 +7825,12 @@ "comment": "Transfer details: screen title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragungsdetails" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6553,6 +7861,12 @@ "comment": "Transfer activity event: a receiver's access was approved.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfängerzugriff genehmigt" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6583,6 +7897,12 @@ "comment": "Transfer activity event: a receiver completed the transfer.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ein Empfänger hat die Übertragung abgeschlossen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6613,6 +7933,12 @@ "comment": "Transfer activity event: connecting to the sender.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verbindung zum Absender" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6643,6 +7969,12 @@ "comment": "Transfer activity event: downloading.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird geladen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6673,6 +8005,12 @@ "comment": "Transfer activity event: the transfer hit a problem.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Bei der Übertragung ist ein Problem aufgetreten" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6703,6 +8041,12 @@ "comment": "Transfer activity event: preparing the transfer.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ihre Übertragung wird vorbereitet" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6733,6 +8077,12 @@ "comment": "Transfer activity event: ready to share.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Bereit zum Teilen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6763,6 +8113,12 @@ "comment": "Transfer activity event: a receiver's access was refused.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfängerzugriff abgelehnt" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6793,6 +8149,12 @@ "comment": "Transfer activity event: a receiver requested access.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ein Empfänger hat Zugriff angefragt" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6823,6 +8185,12 @@ "comment": "Transfer activity event: saving received files.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird gesichert" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6853,6 +8221,12 @@ "comment": "Transfer activity event: sharing was stopped.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Freigabe beendet" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6883,6 +8257,12 @@ "comment": "Transfer activity event: the transfer was updated.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung aktualisiert" + } + }, "en": { "stringUnit": { "state": "translated", @@ -6913,6 +8293,24 @@ "comment": "Transfer subtitle: file count with pluralization. {count} = number of files.", "extractionState": "manual", "localizations": { + "de": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d Datei" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d Dateien" + } + } + } + } + }, "en": { "variations": { "plural": { @@ -6991,6 +8389,12 @@ "comment": "Transfer share: toast confirming the invitation file was saved.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Einladung gesichert." + } + }, "en": { "stringUnit": { "state": "translated", @@ -7021,6 +8425,12 @@ "comment": "Transfer share/receivers: label for a nearby device.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Gerät in der Nähe" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7051,6 +8461,12 @@ "comment": "Transfer share: message when NFC writing isn't available on the device.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Das Beschreiben von NFC-Tags ist auf diesem Gerät nicht verfügbar." + } + }, "en": { "stringUnit": { "state": "translated", @@ -7081,6 +8497,12 @@ "comment": "Transfer share: prompt while waiting to write an NFC tag.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Halten Sie Ihr Gerät an ein beschreibbares NFC-Tag." + } + }, "en": { "stringUnit": { "state": "translated", @@ -7111,6 +8533,12 @@ "comment": "Transfer share: confirmation the invitation was written to the NFC tag.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Einladung auf das NFC-Tag geschrieben." + } + }, "en": { "stringUnit": { "state": "translated", @@ -7141,6 +8569,12 @@ "comment": "Transfer details: empty state for the Activity section.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Es gibt noch keine Aktivität anzuzeigen." + } + }, "en": { "stringUnit": { "state": "translated", @@ -7171,6 +8605,12 @@ "comment": "Transfer details: empty state for the Receivers section.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Noch niemand hat diese Übertragung angefragt." + } + }, "en": { "stringUnit": { "state": "translated", @@ -7201,6 +8641,12 @@ "comment": "Receiver status: approved, waiting for the download to complete.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Genehmigt – wartet auf Abschluss" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7231,6 +8677,12 @@ "comment": "Receiver status: received successfully.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Erfolgreich empfangen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7261,6 +8713,12 @@ "comment": "Receiver status: the request expired.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Anfrage abgelaufen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7291,6 +8749,12 @@ "comment": "Receiver status: the request was refused.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Anfrage abgelehnt" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7321,6 +8785,12 @@ "comment": "Receiver status: waiting for the sender's approval.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wartet auf Ihre Genehmigung" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7351,6 +8821,12 @@ "comment": "Receiver status: status unavailable/unknown.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Status nicht verfügbar" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7381,6 +8857,12 @@ "comment": "Receivers summary: how many receivers completed. {count} = completed receivers.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d abgeschlossen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7411,6 +8893,12 @@ "comment": "Transfer details: description under the Receivers section.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Anfragen, Genehmigungen und abgeschlossene Zustellungen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7441,6 +8929,12 @@ "comment": "Receivers summary: how many requests are waiting. {count} = pending receivers.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d warten" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7471,6 +8965,12 @@ "comment": "Transfer details: Receivers section title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfänger" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7501,6 +9001,12 @@ "comment": "Transfer share: caption under the QR code.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Mit VniDrop scannen, um diese Übertragung zu empfangen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7531,6 +9037,12 @@ "comment": "Transfer details: description under the Share section.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "QR-Code, Einladungsdatei und Optionen in der Nähe" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7561,6 +9073,12 @@ "comment": "Transfer details: Share section title.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Teilen" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7591,6 +9109,12 @@ "comment": "Placeholder shown when a device-info or metadata value can't be read.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Nicht verfügbar" + } + }, "en": { "stringUnit": { "state": "translated", @@ -7621,6 +9145,12 @@ "comment": "Device information / Settings row: app version label.", "extractionState": "manual", "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "App-Version" + } + }, "en": { "stringUnit": { "state": "translated", diff --git a/localization/strings.json b/localization/strings.json index 1abff78..cccb727 100644 --- a/localization/strings.json +++ b/localization/strings.json @@ -5,7 +5,8 @@ "en", "fr", "es", - "it" + "it", + "de" ], "strings": { "%@": { @@ -37,7 +38,8 @@ "en": "{arg1} {arg2} · {arg3}", "fr": "{arg1} {arg2} · {arg3}", "es": "{arg1} {arg2} · {arg3}", - "it": "{arg1} {arg2} · {arg3}" + "it": "{arg1} {arg2} · {arg3}", + "de": "{arg1} {arg2} · {arg3}" } }, "%@ · %@": { @@ -59,7 +61,8 @@ "en": "{arg1} · {arg2}", "fr": "{arg1} · {arg2}", "es": "{arg1} · {arg2}", - "it": "{arg1} · {arg2}" + "it": "{arg1} · {arg2}", + "de": "{arg1} · {arg2}" } }, "%@%%": { @@ -74,7 +77,8 @@ "en": "Report a bug", "fr": "Signaler un bug", "es": "Informar de un error", - "it": "Segnala un bug" + "it": "Segnala un bug", + "de": "Fehler melden" } }, "about_description": { @@ -83,7 +87,8 @@ "en": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done.", "fr": "VniDrop transfère fichiers et dossiers directement d’un appareil à un autre sur le réseau, sans les téléverser vers un service d’hébergement. Aucun compte à créer, et aucune copie de votre transfert ne reste dans le cloud une fois terminé.", "es": "VniDrop transfiere archivos y carpetas directamente de un dispositivo a otro a través de la red, sin subirlos a ningún servicio de alojamiento. No hay que crear ninguna cuenta y no queda ninguna copia de su transferencia en la nube una vez que termina.", - "it": "VniDrop trasferisce file e cartelle direttamente da un dispositivo a un altro sulla rete, senza caricarli su alcun servizio di hosting. Non c’è alcun account da creare e nessuna copia del suo trasferimento rimane nel cloud una volta terminato." + "it": "VniDrop trasferisce file e cartelle direttamente da un dispositivo a un altro sulla rete, senza caricarli su alcun servizio di hosting. Non c’è alcun account da creare e nessuna copia del suo trasferimento rimane nel cloud una volta terminato.", + "de": "VniDrop überträgt Dateien und Ordner direkt von einem Gerät auf ein anderes über das Netzwerk, ohne sie auf einen Hosting-Dienst hochzuladen. Es muss kein Konto erstellt werden, und nach Abschluss verbleibt keine Kopie Ihrer Übertragung in der Cloud." } }, "about_is_direct": { @@ -92,7 +97,8 @@ "en": "A direct device-to-device transfer — your files go straight to the receiver.", "fr": "Un transfert direct d’appareil à appareil — vos fichiers vont droit au destinataire.", "es": "Una transferencia directa entre dispositivos: sus archivos van directamente al destinatario.", - "it": "Un trasferimento diretto da dispositivo a dispositivo: i suoi file vanno direttamente al destinatario." + "it": "Un trasferimento diretto da dispositivo a dispositivo: i suoi file vanno direttamente al destinatario.", + "de": "Eine direkte Gerät-zu-Gerät-Übertragung – Ihre Dateien gehen direkt an den Empfänger." } }, "about_is_encrypted": { @@ -101,7 +107,8 @@ "en": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash.", "fr": "Les connexions sont authentifiées et chiffrées de bout en bout (via Iroh), et les fichiers entrants sont vérifiés par leur empreinte de contenu.", "es": "Las conexiones están autenticadas y cifradas de extremo a extremo (mediante Iroh), y los archivos entrantes se verifican por su huella de contenido.", - "it": "Le connessioni sono autenticate e cifrate end-to-end (tramite Iroh) e i file in arrivo vengono verificati tramite l’impronta del loro contenuto." + "it": "Le connessioni sono autenticate e cifrate end-to-end (tramite Iroh) e i file in arrivo vengono verificati tramite l’impronta del loro contenuto.", + "de": "Verbindungen sind authentifiziert und Ende-zu-Ende-verschlüsselt (über Iroh), und eingehende Dateien werden anhand ihres Inhalts-Hashs überprüft." } }, "about_is_in_control": { @@ -110,7 +117,8 @@ "en": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation.", "fr": "Vous décidez qui reçoit : approuvez chaque demande, ou ouvrez un transfert à toute personne disposant de l’invitation.", "es": "Usted decide quién recibe: apruebe cada solicitud o abra una transferencia a cualquiera que tenga la invitación.", - "it": "Lei decide chi riceve: approvi ogni richiesta oppure apra un trasferimento a chiunque disponga dell’invito." + "it": "Lei decide chi riceve: approvi ogni richiesta oppure apra un trasferimento a chiunque disponga dell’invito.", + "de": "Sie entscheiden, wer empfängt: Genehmigen Sie jede Anfrage oder öffnen Sie eine Übertragung für alle, die die Einladung besitzen." } }, "about_is_no_account": { @@ -119,7 +127,8 @@ "en": "Account-free — there’s nothing to sign up for.", "fr": "Sans compte — il n’y a rien à créer.", "es": "Sin cuenta: no hay nada que registrar.", - "it": "Senza account: non c’è nulla da registrare." + "it": "Senza account: non c’è nulla da registrare.", + "de": "Ohne Konto – es gibt nichts zu registrieren." } }, "about_is_open": { @@ -128,7 +137,8 @@ "en": "Open source, released under the Apache 2.0 license.", "fr": "Open source, publié sous licence Apache 2.0.", "es": "Código abierto, publicado bajo la licencia Apache 2.0.", - "it": "Open source, rilasciato con licenza Apache 2.0." + "it": "Open source, rilasciato con licenza Apache 2.0.", + "de": "Open Source, veröffentlicht unter der Apache-2.0-Lizenz." } }, "about_is_title": { @@ -137,7 +147,8 @@ "en": "What VniDrop is", "fr": "Ce qu’est VniDrop", "es": "Qué es VniDrop", - "it": "Cos’è VniDrop" + "it": "Cos’è VniDrop", + "de": "Was VniDrop ist" } }, "about_isnt_cloud": { @@ -146,7 +157,8 @@ "en": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer.", "fr": "Pas un stockage cloud — aucun serveur ne détient vos fichiers, et rien n’attend dans le cloud après un transfert.", "es": "No es almacenamiento en la nube: ningún servidor guarda sus archivos y nada queda en la nube después de una transferencia.", - "it": "Non è un’archiviazione cloud: nessun server conserva i suoi file e nulla resta nel cloud dopo un trasferimento." + "it": "Non è un’archiviazione cloud: nessun server conserva i suoi file e nulla resta nel cloud dopo un trasferimento.", + "de": "Kein Cloud-Speicher – kein Server hält Ihre Dateien, und nach einer Übertragung wartet nichts in der Cloud." } }, "about_isnt_public": { @@ -155,7 +167,8 @@ "en": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby.", "fr": "Pas une diffusion publique — une invitation est un lien d’accès privé, pas une annonce à tout le voisinage.", "es": "No es difusión pública: una invitación es un enlace de acceso privado, no un anuncio para todos los que estén cerca.", - "it": "Non è una diffusione pubblica: un invito è un link di accesso privato, non un annuncio a tutti nelle vicinanze." + "it": "Non è una diffusione pubblica: un invito è un link di accesso privato, non un annuncio a tutti nelle vicinanze.", + "de": "Keine öffentliche Übertragung – eine Einladung ist ein privater Zugangslink, keine Ankündigung an alle in der Nähe." } }, "about_isnt_sync": { @@ -164,7 +177,8 @@ "en": "Not a sync or backup service.", "fr": "Pas un service de synchronisation ou de sauvegarde.", "es": "No es un servicio de sincronización ni de copia de seguridad.", - "it": "Non è un servizio di sincronizzazione o di backup." + "it": "Non è un servizio di sincronizzazione o di backup.", + "de": "Kein Synchronisierungs- oder Backup-Dienst." } }, "about_isnt_title": { @@ -173,7 +187,8 @@ "en": "What VniDrop isn’t", "fr": "Ce que VniDrop n’est pas", "es": "Qué no es VniDrop", - "it": "Cosa non è VniDrop" + "it": "Cosa non è VniDrop", + "de": "Was VniDrop nicht ist" } }, "about_license_label": { @@ -182,7 +197,8 @@ "en": "License", "fr": "Licence", "es": "Licencia", - "it": "Licenza" + "it": "Licenza", + "de": "Lizenz" } }, "about_privacy": { @@ -191,7 +207,8 @@ "en": "Privacy policy", "fr": "Politique de confidentialité", "es": "Política de privacidad", - "it": "Informativa sulla privacy" + "it": "Informativa sulla privacy", + "de": "Datenschutzrichtlinie" } }, "about_privacy_capability": { @@ -200,7 +217,8 @@ "en": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”", "fr": "Les invitations sont des clés d’accès. Traitez un QR code, un tag NFC ou un fichier .vnd comme un lien d’accès privé et ne le partagez qu’avec les personnes visées — en particulier avec « Toute personne disposant de ce transfert ».", "es": "Las invitaciones son claves de acceso. Trate un código QR, una etiqueta NFC o un archivo .vnd como un enlace de acceso privado y compártalo solo con las personas previstas, especialmente con «Cualquiera que tenga esta transferencia».", - "it": "Gli inviti sono chiavi di accesso. Tratti un codice QR, un tag NFC o un file .vnd come un link di accesso privato e lo condivida solo con le persone previste, soprattutto con «Chiunque abbia questo trasferimento»." + "it": "Gli inviti sono chiavi di accesso. Tratti un codice QR, un tag NFC o un file .vnd come un link di accesso privato e lo condivida solo con le persone previste, soprattutto con «Chiunque abbia questo trasferimento».", + "de": "Einladungen sind Zugangsschlüssel. Behandeln Sie einen QR-Code, ein NFC-Tag oder eine .vnd-Datei wie einen privaten Zugangslink und teilen Sie ihn nur mit den vorgesehenen Personen – insbesondere bei „Jeder mit dieser Übertragung“." } }, "about_privacy_deny": { @@ -209,7 +227,8 @@ "en": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests.", "fr": "Refus par défaut — VniDrop ne sert que le contenu d’un partage actif et rejette les demandes inconnues.", "es": "Denegación por defecto: VniDrop solo sirve el contenido de un recurso compartido activo y rechaza las solicitudes desconocidas.", - "it": "Rifiuto predefinito: VniDrop serve solo il contenuto di una condivisione attiva e rifiuta le richieste sconosciute." + "it": "Rifiuto predefinito: VniDrop serve solo il contenuto di una condivisione attiva e rifiuta le richieste sconosciute.", + "de": "Standardmäßig ablehnen – VniDrop stellt nur den Inhalt einer aktiven Freigabe bereit und weist unbekannte Anfragen ab." } }, "about_privacy_local": { @@ -218,7 +237,8 @@ "en": "Received files are saved on your device and never silently overwrite an existing file.", "fr": "Les fichiers reçus sont enregistrés sur votre appareil et n’écrasent jamais un fichier existant.", "es": "Los archivos recibidos se guardan en su dispositivo y nunca sobrescriben un archivo existente.", - "it": "I file ricevuti vengono salvati sul suo dispositivo e non sovrascrivono mai un file esistente." + "it": "I file ricevuti vengono salvati sul suo dispositivo e non sovrascrivono mai un file esistente.", + "de": "Empfangene Dateien werden auf Ihrem Gerät gespeichert und überschreiben niemals eine vorhandene Datei." } }, "about_privacy_policy_label": { @@ -227,7 +247,8 @@ "en": "Privacy policy", "fr": "Politique de confidentialité", "es": "Política de privacidad", - "it": "Informativa sulla privacy" + "it": "Informativa sulla privacy", + "de": "Datenschutzrichtlinie" } }, "about_privacy_relay": { @@ -236,7 +257,8 @@ "en": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files.", "fr": "Si deux appareils ne peuvent pas se connecter directement, la connexion chiffrée peut être relayée. Les relais ne transmettent que des paquets chiffrés ; ils ne stockent jamais vos fichiers.", "es": "Si dos dispositivos no pueden conectarse directamente, la conexión cifrada puede retransmitirse. Los relés solo reenvían paquetes cifrados; nunca almacenan sus archivos.", - "it": "Se due dispositivi non riescono a connettersi direttamente, la connessione cifrata può essere instradata tramite relay. I relay inoltrano solo pacchetti cifrati; non memorizzano mai i suoi file." + "it": "Se due dispositivi non riescono a connettersi direttamente, la connessione cifrata può essere instradata tramite relay. I relay inoltrano solo pacchetti cifrati; non memorizzano mai i suoi file.", + "de": "Wenn zwei Geräte sich nicht direkt verbinden können, kann die verschlüsselte Verbindung weitergeleitet werden. Relays leiten nur verschlüsselte Pakete weiter; sie speichern niemals Ihre Dateien." } }, "about_privacy_title": { @@ -245,7 +267,8 @@ "en": "Privacy & security", "fr": "Confidentialité et sécurité", "es": "Privacidad y seguridad", - "it": "Privacy e sicurezza" + "it": "Privacy e sicurezza", + "de": "Datenschutz & Sicherheit" } }, "about_tagline": { @@ -254,7 +277,8 @@ "en": "Send files directly. Stay in control of who receives them.", "fr": "Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit.", "es": "Envíe archivos directamente. Mantenga el control de quién los recibe.", - "it": "Invii file direttamente. Mantenga il controllo su chi li riceve." + "it": "Invii file direttamente. Mantenga il controllo su chi li riceve.", + "de": "Senden Sie Dateien direkt. Behalten Sie die Kontrolle darüber, wer sie empfängt." } }, "about_title": { @@ -263,7 +287,8 @@ "en": "About", "fr": "À propos", "es": "Acerca de", - "it": "Informazioni" + "it": "Informazioni", + "de": "Über" } }, "appearance_auto_description": { @@ -272,7 +297,8 @@ "en": "Match this device’s light or dark appearance.", "fr": "Suivre l’apparence claire ou sombre de cet appareil.", "es": "Seguir la apariencia clara u oscura de este dispositivo.", - "it": "Segue l’aspetto chiaro o scuro di questo dispositivo." + "it": "Segue l’aspetto chiaro o scuro di questo dispositivo.", + "de": "Der hellen oder dunklen Darstellung dieses Geräts folgen." } }, "appearance_dark_mode": { @@ -281,7 +307,8 @@ "en": "Dark mode", "fr": "Mode sombre", "es": "Modo oscuro", - "it": "Modalità scura" + "it": "Modalità scura", + "de": "Dunkelmodus" } }, "appearance_light_mode": { @@ -290,7 +317,8 @@ "en": "Light mode", "fr": "Mode clair", "es": "Modo claro", - "it": "Modalità chiara" + "it": "Modalità chiara", + "de": "Hellmodus" } }, "appearance_system_mode": { @@ -299,7 +327,8 @@ "en": "System", "fr": "Système", "es": "Sistema", - "it": "Sistema" + "it": "Sistema", + "de": "System" } }, "appearance_title": { @@ -308,7 +337,8 @@ "en": "Appearance", "fr": "Apparence", "es": "Apariencia", - "it": "Aspetto" + "it": "Aspetto", + "de": "Darstellung" } }, "approval_connection_request": { @@ -317,7 +347,8 @@ "en": "Receive request", "fr": "Demande de réception", "es": "Solicitud de recepción", - "it": "Richiesta di ricezione" + "it": "Richiesta di ricezione", + "de": "Empfangsanfrage" } }, "approval_endpoint_id": { @@ -332,7 +363,8 @@ "en": "Device ID: {arg1}", "fr": "Identifiant de l’appareil : {arg1}", "es": "ID del dispositivo: {arg1}", - "it": "ID dispositivo: {arg1}" + "it": "ID dispositivo: {arg1}", + "de": "Geräte-ID: {arg1}" } }, "approval_nearby_device": { @@ -341,7 +373,8 @@ "en": "A nearby device", "fr": "Un appareil à proximité", "es": "Un dispositivo cercano", - "it": "Un dispositivo nelle vicinanze" + "it": "Un dispositivo nelle vicinanze", + "de": "Ein Gerät in der Nähe" } }, "approval_pending_count": { @@ -356,7 +389,8 @@ "en": "{count} requests waiting", "fr": "{count} demandes en attente", "es": "{count} solicitudes en espera", - "it": "{count} richieste in attesa" + "it": "{count} richieste in attesa", + "de": "{count} Anfragen warten" } }, "approval_request_body": { @@ -375,7 +409,8 @@ "en": "{arg1} wants to receive “{arg2}”.", "fr": "{arg1} souhaite recevoir « {arg2} ».", "es": "{arg1} quiere recibir «{arg2}».", - "it": "{arg1} vuole ricevere «{arg2}»." + "it": "{arg1} vuole ricevere «{arg2}».", + "de": "{arg1} möchte „{arg2}“ empfangen." } }, "battery_level_title": { @@ -384,7 +419,8 @@ "en": "Battery level", "fr": "Niveau de batterie", "es": "Nivel de batería", - "it": "Livello batteria" + "it": "Livello batteria", + "de": "Batteriestand" } }, "bug_report_contact_hint": { @@ -393,7 +429,8 @@ "en": "name@example.com", "fr": "nom@exemple.com", "es": "nombre@ejemplo.com", - "it": "nome@esempio.com" + "it": "nome@esempio.com", + "de": "name@beispiel.com" } }, "bug_report_contact_label": { @@ -402,7 +439,8 @@ "en": "Contact email (optional)", "fr": "E-mail de contact (facultatif)", "es": "Correo de contacto (opcional)", - "it": "Email di contatto (facoltativa)" + "it": "Email di contatto (facoltativa)", + "de": "Kontakt-E-Mail (optional)" } }, "bug_report_description": { @@ -411,7 +449,8 @@ "en": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted).", "fr": "Dites-nous ce qui s’est passé. Nous joignons les infos de l’appareil et, en option, les journaux récents (valeurs sensibles masquées).", "es": "Cuéntenos qué salió mal. Adjuntamos información del dispositivo y, opcionalmente, registros recientes (con los valores sensibles ocultos).", - "it": "Ci dica cosa è andato storto. Alleghiamo le informazioni sul dispositivo e, facoltativamente, i log recenti (con i valori sensibili oscurati)." + "it": "Ci dica cosa è andato storto. Alleghiamo le informazioni sul dispositivo e, facoltativamente, i log recenti (con i valori sensibili oscurati).", + "de": "Sagen Sie uns, was schiefgelaufen ist. Wir hängen Geräteinformationen und optional aktuelle Protokolle an (sensible Werte werden geschwärzt)." } }, "bug_report_device_section": { @@ -420,7 +459,8 @@ "en": "Device information", "fr": "Informations sur l’appareil", "es": "Información del dispositivo", - "it": "Informazioni sul dispositivo" + "it": "Informazioni sul dispositivo", + "de": "Geräteinformationen" } }, "bug_report_expected_hint": { @@ -429,7 +469,8 @@ "en": "Describe what you expected to happen", "fr": "Décrivez ce à quoi vous vous attendiez", "es": "Describa lo que esperaba que ocurriera", - "it": "Descriva cosa si aspettava che accadesse" + "it": "Descriva cosa si aspettava che accadesse", + "de": "Beschreiben Sie, was Sie erwartet haben" } }, "bug_report_expected_label": { @@ -438,7 +479,8 @@ "en": "What did you expect?", "fr": "À quoi vous attendiez-vous ?", "es": "¿Qué esperaba?", - "it": "Cosa si aspettava?" + "it": "Cosa si aspettava?", + "de": "Was haben Sie erwartet?" } }, "bug_report_include_logs": { @@ -447,7 +489,8 @@ "en": "Include recent logs", "fr": "Inclure les journaux récents", "es": "Incluir registros recientes", - "it": "Includi i log recenti" + "it": "Includi i log recenti", + "de": "Aktuelle Protokolle einschließen" } }, "bug_report_include_logs_description": { @@ -456,7 +499,8 @@ "en": "Helps us diagnose the issue. Sensitive values are redacted before sending.", "fr": "Nous aide à diagnostiquer le problème. Les valeurs sensibles sont masquées avant l’envoi.", "es": "Nos ayuda a diagnosticar el problema. Los valores sensibles se ocultan antes de enviarlos.", - "it": "Ci aiuta a diagnosticare il problema. I valori sensibili vengono oscurati prima dell’invio." + "it": "Ci aiuta a diagnosticare il problema. I valori sensibili vengono oscurati prima dell’invio.", + "de": "Hilft uns, das Problem zu diagnostizieren. Sensible Werte werden vor dem Senden geschwärzt." } }, "bug_report_logs_size": { @@ -465,7 +509,8 @@ "en": "Log attachment size", "fr": "Taille de la pièce jointe des journaux", "es": "Tamaño del archivo de registros", - "it": "Dimensione dell’allegato dei log" + "it": "Dimensione dell’allegato dei log", + "de": "Größe des Protokollanhangs" } }, "bug_report_missing_expected": { @@ -474,7 +519,8 @@ "en": "Please describe what you expected.", "fr": "Veuillez décrire ce à quoi vous vous attendiez.", "es": "Describa lo que esperaba.", - "it": "Descriva cosa si aspettava." + "it": "Descriva cosa si aspettava.", + "de": "Bitte beschreiben Sie, was Sie erwartet haben." } }, "bug_report_missing_what": { @@ -483,7 +529,8 @@ "en": "Please describe what happened.", "fr": "Veuillez décrire ce qui s’est passé.", "es": "Describa lo que ocurrió.", - "it": "Descriva cosa è accaduto." + "it": "Descriva cosa è accaduto.", + "de": "Bitte beschreiben Sie, was passiert ist." } }, "bug_report_steps_hint": { @@ -492,7 +539,8 @@ "en": "List the steps to reproduce the issue", "fr": "Listez les étapes pour reproduire le problème", "es": "Enumere los pasos para reproducir el problema", - "it": "Elenchi i passaggi per riprodurre il problema" + "it": "Elenchi i passaggi per riprodurre il problema", + "de": "Listen Sie die Schritte zum Reproduzieren des Problems auf" } }, "bug_report_steps_label": { @@ -501,7 +549,8 @@ "en": "Steps to reproduce (optional)", "fr": "Étapes pour reproduire (facultatif)", "es": "Pasos para reproducir (opcional)", - "it": "Passaggi per riprodurre (facoltativi)" + "it": "Passaggi per riprodurre (facoltativi)", + "de": "Schritte zum Reproduzieren (optional)" } }, "bug_report_submit": { @@ -510,7 +559,8 @@ "en": "Submit report", "fr": "Envoyer le rapport", "es": "Enviar informe", - "it": "Invia segnalazione" + "it": "Invia segnalazione", + "de": "Bericht senden" } }, "bug_report_submit_failed": { @@ -519,7 +569,8 @@ "en": "Could not submit the bug report. Try again later.", "fr": "Impossible d’envoyer le rapport de bug. Réessayez plus tard.", "es": "No se pudo enviar el informe de error. Inténtelo de nuevo más tarde.", - "it": "Impossibile inviare la segnalazione. Riprovi più tardi." + "it": "Impossibile inviare la segnalazione. Riprovi più tardi.", + "de": "Der Fehlerbericht konnte nicht gesendet werden. Bitte versuchen Sie es später erneut." } }, "bug_report_submitted": { @@ -528,7 +579,8 @@ "en": "Thanks — your bug report was recorded.", "fr": "Merci — votre rapport de bug a été enregistré.", "es": "Gracias: su informe de error se ha registrado.", - "it": "Grazie: la sua segnalazione è stata registrata." + "it": "Grazie: la sua segnalazione è stata registrata.", + "de": "Danke – Ihr Fehlerbericht wurde erfasst." } }, "bug_report_submitting": { @@ -537,7 +589,8 @@ "en": "Submitting…", "fr": "Envoi…", "es": "Enviando…", - "it": "Invio in corso…" + "it": "Invio in corso…", + "de": "Wird gesendet…" } }, "bug_report_what_hint": { @@ -546,7 +599,8 @@ "en": "Describe what happened", "fr": "Décrivez ce qui s’est passé", "es": "Describa lo que ocurrió", - "it": "Descriva cosa è accaduto" + "it": "Descriva cosa è accaduto", + "de": "Beschreiben Sie, was passiert ist" } }, "bug_report_what_label": { @@ -555,7 +609,8 @@ "en": "What happened?", "fr": "Que s’est-il passé ?", "es": "¿Qué ocurrió?", - "it": "Cosa è accaduto?" + "it": "Cosa è accaduto?", + "de": "Was ist passiert?" } }, "button_approve": { @@ -564,7 +619,8 @@ "en": "Approve", "fr": "Approuver", "es": "Aprobar", - "it": "Approva" + "it": "Approva", + "de": "Genehmigen" } }, "button_back": { @@ -573,7 +629,8 @@ "en": "Back", "fr": "Retour", "es": "Atrás", - "it": "Indietro" + "it": "Indietro", + "de": "Zurück" } }, "button_cancel": { @@ -582,7 +639,8 @@ "en": "Cancel", "fr": "Annuler", "es": "Cancelar", - "it": "Annulla" + "it": "Annulla", + "de": "Abbrechen" } }, "button_cancel_receive": { @@ -591,7 +649,8 @@ "en": "Cancel", "fr": "Annuler", "es": "Cancelar", - "it": "Annulla" + "it": "Annulla", + "de": "Abbrechen" } }, "button_change_files": { @@ -600,7 +659,8 @@ "en": "Change files", "fr": "Modifier les fichiers", "es": "Cambiar archivos", - "it": "Cambia file" + "it": "Cambia file", + "de": "Dateien ändern" } }, "button_choose_files": { @@ -609,7 +669,8 @@ "en": "Choose files", "fr": "Choisir des fichiers", "es": "Elegir archivos", - "it": "Scegli file" + "it": "Scegli file", + "de": "Dateien auswählen" } }, "button_choose_folder": { @@ -618,7 +679,8 @@ "en": "Choose folder", "fr": "Choisir un dossier", "es": "Elegir carpeta", - "it": "Scegli cartella" + "it": "Scegli cartella", + "de": "Ordner auswählen" } }, "button_clear": { @@ -627,7 +689,8 @@ "en": "Clear", "fr": "Effacer", "es": "Borrar", - "it": "Cancella" + "it": "Cancella", + "de": "Löschen" } }, "button_close": { @@ -636,7 +699,8 @@ "en": "Close", "fr": "Fermer", "es": "Cerrar", - "it": "Chiudi" + "it": "Chiudi", + "de": "Schließen" } }, "button_create_new_transfer": { @@ -645,7 +709,8 @@ "en": "New transfer", "fr": "Nouveau transfert", "es": "Nueva transferencia", - "it": "Nuovo trasferimento" + "it": "Nuovo trasferimento", + "de": "Neue Übertragung" } }, "button_delete_transfer": { @@ -654,7 +719,8 @@ "en": "Delete transfer", "fr": "Supprimer le transfert", "es": "Eliminar transferencia", - "it": "Elimina trasferimento" + "it": "Elimina trasferimento", + "de": "Übertragung löschen" } }, "button_download_invitation": { @@ -663,7 +729,8 @@ "en": "Save .vnd file", "fr": "Enregistrer le fichier .vnd", "es": "Guardar archivo .vnd", - "it": "Salva file .vnd" + "it": "Salva file .vnd", + "de": ".vnd-Datei sichern" } }, "button_native_share": { @@ -672,7 +739,8 @@ "en": "Share invitation", "fr": "Partager l’invitation", "es": "Compartir invitación", - "it": "Condividi invito" + "it": "Condividi invito", + "de": "Einladung teilen" } }, "button_open_settings": { @@ -681,7 +749,8 @@ "en": "Open Settings", "fr": "Ouvrir les Réglages", "es": "Abrir Ajustes", - "it": "Apri Impostazioni" + "it": "Apri Impostazioni", + "de": "Einstellungen öffnen" } }, "button_receive": { @@ -690,7 +759,8 @@ "en": "Receive", "fr": "Recevoir", "es": "Recibir", - "it": "Ricevi" + "it": "Ricevi", + "de": "Empfangen" } }, "button_receive_files": { @@ -699,7 +769,8 @@ "en": "Start receiving", "fr": "Commencer à recevoir", "es": "Empezar a recibir", - "it": "Inizia a ricevere" + "it": "Inizia a ricevere", + "de": "Empfang starten" } }, "button_refuse": { @@ -708,7 +779,8 @@ "en": "Refuse", "fr": "Refuser", "es": "Rechazar", - "it": "Rifiuta" + "it": "Rifiuta", + "de": "Ablehnen" } }, "button_remove_file": { @@ -717,7 +789,8 @@ "en": "Remove file", "fr": "Retirer le fichier", "es": "Quitar archivo", - "it": "Rimuovi file" + "it": "Rimuovi file", + "de": "Datei entfernen" } }, "button_reset_default": { @@ -726,7 +799,8 @@ "en": "Use default", "fr": "Valeur par défaut", "es": "Usar predeterminado", - "it": "Usa predefinito" + "it": "Usa predefinito", + "de": "Standard verwenden" } }, "button_retry": { @@ -735,7 +809,8 @@ "en": "Retry", "fr": "Réessayer", "es": "Reintentar", - "it": "Riprova" + "it": "Riprova", + "de": "Wiederholen" } }, "button_share_file": { @@ -744,7 +819,8 @@ "en": "Start sharing", "fr": "Commencer le partage", "es": "Empezar a compartir", - "it": "Inizia a condividere" + "it": "Inizia a condividere", + "de": "Freigabe starten" } }, "button_sharing_file": { @@ -753,7 +829,8 @@ "en": "Preparing transfer…", "fr": "Préparation du transfert…", "es": "Preparando la transferencia…", - "it": "Preparazione del trasferimento…" + "it": "Preparazione del trasferimento…", + "de": "Übertragung wird vorbereitet…" } }, "button_show_in_files": { @@ -762,7 +839,8 @@ "en": "Show in Files", "fr": "Afficher dans Fichiers", "es": "Mostrar en Archivos", - "it": "Mostra in File" + "it": "Mostra in File", + "de": "In „Dateien“ anzeigen" } }, "button_write_nfc": { @@ -771,7 +849,8 @@ "en": "Write to NFC tag", "fr": "Écrire sur un tag NFC", "es": "Escribir en etiqueta NFC", - "it": "Scrivi su tag NFC" + "it": "Scrivi su tag NFC", + "de": "Auf NFC-Tag schreiben" } }, "device_model_title": { @@ -780,7 +859,8 @@ "en": "Device model", "fr": "Modèle de l’appareil", "es": "Modelo del dispositivo", - "it": "Modello del dispositivo" + "it": "Modello del dispositivo", + "de": "Gerätemodell" } }, "device_name_title": { @@ -789,7 +869,8 @@ "en": "Device name", "fr": "Nom de l’appareil", "es": "Nombre del dispositivo", - "it": "Nome del dispositivo" + "it": "Nome del dispositivo", + "de": "Gerätename" } }, "diagnostics_description": { @@ -798,7 +879,8 @@ "en": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included.", "fr": "Envoyer des rapports de plantage et des événements d’utilisation anonymes pour nous aider à améliorer VniDrop. Vous pouvez désactiver cela à tout moment. Les invitations, chemins de fichiers et contenus de transfert ne sont jamais inclus.", "es": "Enviar informes de fallos y eventos de uso anónimos para ayudarnos a mejorar VniDrop. Puede desactivarlo en cualquier momento. Las invitaciones, las rutas de archivos y el contenido de las transferencias nunca se incluyen.", - "it": "Invia report di arresto anomalo ed eventi d’uso anonimi per aiutarci a migliorare VniDrop. Può disattivarlo in qualsiasi momento. Inviti, percorsi dei file e contenuti dei trasferimenti non vengono mai inclusi." + "it": "Invia report di arresto anomalo ed eventi d’uso anonimi per aiutarci a migliorare VniDrop. Può disattivarlo in qualsiasi momento. Inviti, percorsi dei file e contenuti dei trasferimenti non vengono mai inclusi.", + "de": "Anonyme Absturzberichte und Nutzungsereignisse senden, damit wir VniDrop verbessern können. Sie können dies jederzeit deaktivieren. Einladungen, Dateipfade und Übertragungsinhalte werden niemals einbezogen." } }, "diagnostics_disabled_message": { @@ -807,7 +889,8 @@ "en": "Diagnostics sharing is off.", "fr": "Le partage des diagnostics est désactivé.", "es": "El uso compartido de diagnósticos está desactivado.", - "it": "La condivisione dei dati diagnostici è disattivata." + "it": "La condivisione dei dati diagnostici è disattivata.", + "de": "Die Freigabe von Diagnosedaten ist deaktiviert." } }, "diagnostics_enabled_message": { @@ -816,7 +899,8 @@ "en": "Diagnostics sharing is on.", "fr": "Le partage des diagnostics est activé.", "es": "El uso compartido de diagnósticos está activado.", - "it": "La condivisione dei dati diagnostici è attivata." + "it": "La condivisione dei dati diagnostici è attivata.", + "de": "Die Freigabe von Diagnosedaten ist aktiviert." } }, "diagnostics_title": { @@ -825,7 +909,8 @@ "en": "Share diagnostics", "fr": "Partager les diagnostics", "es": "Compartir diagnósticos", - "it": "Condividi dati diagnostici" + "it": "Condividi dati diagnostici", + "de": "Diagnosedaten teilen" } }, "error_camera": { @@ -834,7 +919,8 @@ "en": "Camera access is required to scan a QR code.", "fr": "L’accès à la caméra est nécessaire pour scanner un QR code.", "es": "Se necesita acceso a la cámara para escanear un código QR.", - "it": "Per scansionare un codice QR è necessario l’accesso alla fotocamera." + "it": "Per scansionare un codice QR è necessario l’accesso alla fotocamera.", + "de": "Für das Scannen eines QR-Codes ist Kamerazugriff erforderlich." } }, "error_device_info": { @@ -843,7 +929,8 @@ "en": "Could not load device information.", "fr": "Impossible de charger les informations de l’appareil.", "es": "No se pudo cargar la información del dispositivo.", - "it": "Impossibile caricare le informazioni sul dispositivo." + "it": "Impossibile caricare le informazioni sul dispositivo.", + "de": "Geräteinformationen konnten nicht geladen werden." } }, "error_filesystem": { @@ -852,7 +939,8 @@ "en": "VniDrop could not access the selected files or folder. Check permissions and try again.", "fr": "VniDrop n’a pas pu accéder aux fichiers ou au dossier sélectionnés. Vérifiez les autorisations et réessayez.", "es": "VniDrop no pudo acceder a los archivos o la carpeta seleccionados. Compruebe los permisos e inténtelo de nuevo.", - "it": "VniDrop non ha potuto accedere ai file o alla cartella selezionati. Controlli le autorizzazioni e riprovi." + "it": "VniDrop non ha potuto accedere ai file o alla cartella selezionati. Controlli le autorizzazioni e riprovi.", + "de": "VniDrop konnte nicht auf die ausgewählten Dateien oder den Ordner zugreifen. Überprüfen Sie die Berechtigungen und versuchen Sie es erneut." } }, "error_generic": { @@ -861,7 +949,8 @@ "en": "Something went wrong. Try again.", "fr": "Une erreur est survenue. Réessayez.", "es": "Algo salió mal. Inténtelo de nuevo.", - "it": "Qualcosa è andato storto. Riprovi." + "it": "Qualcosa è andato storto. Riprovi.", + "de": "Etwas ist schiefgelaufen. Versuchen Sie es erneut." } }, "error_initialization": { @@ -870,7 +959,8 @@ "en": "VniDrop could not finish starting up. Close the app and try again.", "fr": "VniDrop n’a pas pu terminer son démarrage. Fermez l’app et réessayez.", "es": "VniDrop no pudo terminar de iniciarse. Cierre la app e inténtelo de nuevo.", - "it": "VniDrop non ha potuto completare l’avvio. Chiuda l’app e riprovi." + "it": "VniDrop non ha potuto completare l’avvio. Chiuda l’app e riprovi.", + "de": "VniDrop konnte den Start nicht abschließen. Schließen Sie die App und versuchen Sie es erneut." } }, "error_invalid_ticket": { @@ -879,7 +969,8 @@ "en": "This invitation could not be read. Ask the sender for a new one.", "fr": "Cette invitation n’a pas pu être lue. Demandez-en une nouvelle à l’expéditeur.", "es": "No se pudo leer esta invitación. Pida al remitente una nueva.", - "it": "Impossibile leggere questo invito. Ne chieda uno nuovo al mittente." + "it": "Impossibile leggere questo invito. Ne chieda uno nuovo al mittente.", + "de": "Diese Einladung konnte nicht gelesen werden. Bitten Sie den Absender um eine neue." } }, "error_invitation_empty": { @@ -888,7 +979,8 @@ "en": "That invitation is empty. Try opening it again.", "fr": "Cette invitation est vide. Essayez de l’ouvrir à nouveau.", "es": "Esa invitación está vacía. Intente abrirla de nuevo.", - "it": "Questo invito è vuoto. Provi ad aprirlo di nuovo." + "it": "Questo invito è vuoto. Provi ad aprirlo di nuovo.", + "de": "Diese Einladung ist leer. Versuchen Sie, sie erneut zu öffnen." } }, "error_missing_native_library": { @@ -897,7 +989,8 @@ "en": "The native VniDrop library is missing from this build.", "fr": "La bibliothèque native de VniDrop est absente de cette version.", "es": "Falta la biblioteca nativa de VniDrop en esta versión.", - "it": "La libreria nativa di VniDrop non è presente in questa build." + "it": "La libreria nativa di VniDrop non è presente in questa build.", + "de": "Die native VniDrop-Bibliothek fehlt in diesem Build." } }, "error_nfc": { @@ -906,7 +999,8 @@ "en": "This NFC tag could not be used. Try another tag.", "fr": "Ce tag NFC n’a pas pu être utilisé. Essayez-en un autre.", "es": "No se pudo usar esta etiqueta NFC. Pruebe con otra.", - "it": "Impossibile usare questo tag NFC. Ne provi un altro." + "it": "Impossibile usare questo tag NFC. Ne provi un altro.", + "de": "Dieses NFC-Tag konnte nicht verwendet werden. Versuchen Sie ein anderes." } }, "error_permission": { @@ -915,7 +1009,8 @@ "en": "The sender has not approved this transfer, or it was refused.", "fr": "L’expéditeur n’a pas approuvé ce transfert, ou il a été refusé.", "es": "El remitente no ha aprobado esta transferencia, o fue rechazada.", - "it": "Il mittente non ha approvato questo trasferimento, oppure è stato rifiutato." + "it": "Il mittente non ha approvato questo trasferimento, oppure è stato rifiutato.", + "de": "Der Absender hat diese Übertragung nicht genehmigt oder sie wurde abgelehnt." } }, "error_repository": { @@ -924,7 +1019,8 @@ "en": "VniDrop could not save transfer data on this device.", "fr": "VniDrop n’a pas pu enregistrer les données de transfert sur cet appareil.", "es": "VniDrop no pudo guardar los datos de la transferencia en este dispositivo.", - "it": "VniDrop non ha potuto salvare i dati del trasferimento su questo dispositivo." + "it": "VniDrop non ha potuto salvare i dati del trasferimento su questo dispositivo.", + "de": "VniDrop konnte die Übertragungsdaten auf diesem Gerät nicht speichern." } }, "error_selection_failed": { @@ -933,7 +1029,8 @@ "en": "Could not open the selected item. Try choosing it again.", "fr": "Impossible d’ouvrir l’élément sélectionné. Essayez de le choisir à nouveau.", "es": "No se pudo abrir el elemento seleccionado. Intente elegirlo de nuevo.", - "it": "Impossibile aprire l’elemento selezionato. Provi a sceglierlo di nuovo." + "it": "Impossibile aprire l’elemento selezionato. Provi a sceglierlo di nuovo.", + "de": "Das ausgewählte Objekt konnte nicht geöffnet werden. Versuchen Sie, es erneut auszuwählen." } }, "error_share_empty": { @@ -942,7 +1039,8 @@ "en": "Select at least one item to share.", "fr": "Sélectionnez au moins un élément à partager.", "es": "Seleccione al menos un elemento para compartir.", - "it": "Selezioni almeno un elemento da condividere." + "it": "Selezioni almeno un elemento da condividere.", + "de": "Wählen Sie mindestens ein Objekt zum Teilen aus." } }, "error_socket_bind": { @@ -951,7 +1049,8 @@ "en": "VniDrop could not open its network sockets on this device.", "fr": "VniDrop n’a pas pu ouvrir ses sockets réseau sur cet appareil.", "es": "VniDrop no pudo abrir sus sockets de red en este dispositivo.", - "it": "VniDrop non ha potuto aprire i suoi socket di rete su questo dispositivo." + "it": "VniDrop non ha potuto aprire i suoi socket di rete su questo dispositivo.", + "de": "VniDrop konnte seine Netzwerk-Sockets auf diesem Gerät nicht öffnen." } }, "error_starting_up": { @@ -960,7 +1059,8 @@ "en": "VniDrop is still starting. Open the invitation again in a moment.", "fr": "VniDrop démarre encore. Rouvrez l’invitation dans un instant.", "es": "VniDrop todavía se está iniciando. Vuelva a abrir la invitación en un momento.", - "it": "VniDrop è ancora in fase di avvio. Riapra l’invito tra un momento." + "it": "VniDrop è ancora in fase di avvio. Riapra l’invito tra un momento.", + "de": "VniDrop startet noch. Öffnen Sie die Einladung gleich erneut." } }, "error_transfer": { @@ -969,7 +1069,8 @@ "en": "The transfer could not be completed. Check your connection and try again.", "fr": "Le transfert n’a pas pu être terminé. Vérifiez votre connexion et réessayez.", "es": "No se pudo completar la transferencia. Compruebe su conexión e inténtelo de nuevo.", - "it": "Impossibile completare il trasferimento. Controlli la connessione e riprovi." + "it": "Impossibile completare il trasferimento. Controlli la connessione e riprovi.", + "de": "Die Übertragung konnte nicht abgeschlossen werden. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut." } }, "field_receiver_name": { @@ -978,7 +1079,8 @@ "en": "Receiver name", "fr": "Nom du destinataire", "es": "Nombre del destinatario", - "it": "Nome del destinatario" + "it": "Nome del destinatario", + "de": "Empfängername" } }, "field_sender_name": { @@ -987,7 +1089,8 @@ "en": "Sender name", "fr": "Nom de l’expéditeur", "es": "Nombre del remitente", - "it": "Nome del mittente" + "it": "Nome del mittente", + "de": "Absendername" } }, "field_transfer_name": { @@ -996,7 +1099,8 @@ "en": "Transfer name", "fr": "Nom du transfert", "es": "Nombre de la transferencia", - "it": "Nome del trasferimento" + "it": "Nome del trasferimento", + "de": "Übertragungsname" } }, "field_username": { @@ -1005,7 +1109,8 @@ "en": "Display name", "fr": "Nom d’affichage", "es": "Nombre visible", - "it": "Nome visualizzato" + "it": "Nome visualizzato", + "de": "Anzeigename" } }, "folder_status_permission_required": { @@ -1014,7 +1119,8 @@ "en": "Permission needed", "fr": "Autorisation requise", "es": "Permiso necesario", - "it": "Autorizzazione necessaria" + "it": "Autorizzazione necessaria", + "de": "Berechtigung erforderlich" } }, "folder_status_unavailable": { @@ -1023,7 +1129,8 @@ "en": "Unavailable", "fr": "Indisponible", "es": "No disponible", - "it": "Non disponibile" + "it": "Non disponibile", + "de": "Nicht verfügbar" } }, "folder_status_validating": { @@ -1032,7 +1139,8 @@ "en": "Checking folder…", "fr": "Vérification du dossier…", "es": "Comprobando carpeta…", - "it": "Controllo della cartella…" + "it": "Controllo della cartella…", + "de": "Ordner wird geprüft…" } }, "folder_status_writable": { @@ -1041,7 +1149,8 @@ "en": "Ready", "fr": "Prêt", "es": "Listo", - "it": "Pronta" + "it": "Pronta", + "de": "Bereit" } }, "metadata_files": { @@ -1050,7 +1159,8 @@ "en": "Files", "fr": "Fichiers", "es": "Archivos", - "it": "File" + "it": "File", + "de": "Dateien" } }, "metadata_size": { @@ -1059,7 +1169,8 @@ "en": "Size", "fr": "Taille", "es": "Tamaño", - "it": "Dimensione" + "it": "Dimensione", + "de": "Größe" } }, "metadata_status": { @@ -1068,7 +1179,8 @@ "en": "Status", "fr": "Statut", "es": "Estado", - "it": "Stato" + "it": "Stato", + "de": "Status" } }, "nav_receive": { @@ -1077,7 +1189,8 @@ "en": "Receive", "fr": "Recevoir", "es": "Recibir", - "it": "Ricevi" + "it": "Ricevi", + "de": "Empfangen" } }, "nav_send": { @@ -1086,7 +1199,8 @@ "en": "Send", "fr": "Envoyer", "es": "Enviar", - "it": "Invia" + "it": "Invia", + "de": "Senden" } }, "nav_settings": { @@ -1095,7 +1209,8 @@ "en": "Settings", "fr": "Réglages", "es": "Ajustes", - "it": "Impostazioni" + "it": "Impostazioni", + "de": "Einstellungen" } }, "network_title": { @@ -1104,7 +1219,8 @@ "en": "Network", "fr": "Réseau", "es": "Red", - "it": "Rete" + "it": "Rete", + "de": "Netzwerk" } }, "notifications_description": { @@ -1113,7 +1229,8 @@ "en": "Get notified about new receive requests while VniDrop is in the background.", "fr": "Soyez averti des nouvelles demandes de réception lorsque VniDrop est en arrière-plan.", "es": "Reciba avisos sobre nuevas solicitudes de recepción cuando VniDrop está en segundo plano.", - "it": "Ricevi avvisi sulle nuove richieste di ricezione quando VniDrop è in background." + "it": "Ricevi avvisi sulle nuove richieste di ricezione quando VniDrop è in background.", + "de": "Werden Sie über neue Empfangsanfragen benachrichtigt, während VniDrop im Hintergrund läuft." } }, "notifications_enabled_message": { @@ -1122,7 +1239,8 @@ "en": "Notifications enabled.", "fr": "Notifications activées.", "es": "Notificaciones activadas.", - "it": "Notifiche attivate." + "it": "Notifiche attivate.", + "de": "Mitteilungen aktiviert." } }, "notifications_local_title": { @@ -1131,7 +1249,8 @@ "en": "Allow notifications", "fr": "Autoriser les notifications", "es": "Permitir notificaciones", - "it": "Consenti le notifiche" + "it": "Consenti le notifiche", + "de": "Mitteilungen erlauben" } }, "notifications_permission_denied": { @@ -1140,7 +1259,8 @@ "en": "Notifications are turned off for VniDrop. You can enable them in Settings.", "fr": "Les notifications sont désactivées pour VniDrop. Vous pouvez les activer dans les Réglages.", "es": "Las notificaciones están desactivadas para VniDrop. Puede activarlas en Ajustes.", - "it": "Le notifiche sono disattivate per VniDrop. Può attivarle in Impostazioni." + "it": "Le notifiche sono disattivate per VniDrop. Può attivarle in Impostazioni.", + "de": "Mitteilungen sind für VniDrop deaktiviert. Sie können sie in den Einstellungen aktivieren." } }, "notifications_settings_open_failed": { @@ -1149,7 +1269,8 @@ "en": "Could not open notification settings.", "fr": "Impossible d’ouvrir les réglages de notifications.", "es": "No se pudieron abrir los ajustes de notificaciones.", - "it": "Impossibile aprire le impostazioni delle notifiche." + "it": "Impossibile aprire le impostazioni delle notifiche.", + "de": "Die Mitteilungseinstellungen konnten nicht geöffnet werden." } }, "notifications_title": { @@ -1158,7 +1279,8 @@ "en": "Notifications", "fr": "Notifications", "es": "Notificaciones", - "it": "Notifiche" + "it": "Notifiche", + "de": "Mitteilungen" } }, "notifications_unsupported": { @@ -1167,7 +1289,8 @@ "en": "Notifications are not available on this device.", "fr": "Les notifications ne sont pas disponibles sur cet appareil.", "es": "Las notificaciones no están disponibles en este dispositivo.", - "it": "Le notifiche non sono disponibili su questo dispositivo." + "it": "Le notifiche non sono disponibili su questo dispositivo.", + "de": "Mitteilungen sind auf diesem Gerät nicht verfügbar." } }, "os_version_title": { @@ -1176,7 +1299,8 @@ "en": "Operating system", "fr": "Système d’exploitation", "es": "Sistema operativo", - "it": "Sistema operativo" + "it": "Sistema operativo", + "de": "Betriebssystem" } }, "preferences_receive_folder_title": { @@ -1185,7 +1309,8 @@ "en": "Save received transfers to", "fr": "Enregistrer les transferts reçus dans", "es": "Guardar las transferencias recibidas en", - "it": "Salva i trasferimenti ricevuti in" + "it": "Salva i trasferimenti ricevuti in", + "de": "Empfangene Übertragungen sichern in" } }, "preferences_title": { @@ -1194,7 +1319,8 @@ "en": "Preferences", "fr": "Préférences", "es": "Preferencias", - "it": "Preferenze" + "it": "Preferenze", + "de": "Voreinstellungen" } }, "progress_cancelled": { @@ -1203,7 +1329,8 @@ "en": "Cancelled", "fr": "Annulé", "es": "Cancelado", - "it": "Annullato" + "it": "Annullato", + "de": "Abgebrochen" } }, "progress_completed": { @@ -1212,7 +1339,8 @@ "en": "Completed", "fr": "Terminé", "es": "Completado", - "it": "Completato" + "it": "Completato", + "de": "Abgeschlossen" } }, "progress_connected": { @@ -1221,7 +1349,8 @@ "en": "Connected", "fr": "Connecté", "es": "Conectado", - "it": "Connesso" + "it": "Connesso", + "de": "Verbunden" } }, "progress_connecting": { @@ -1230,7 +1359,8 @@ "en": "Connecting", "fr": "Connexion", "es": "Conectando", - "it": "Connessione" + "it": "Connessione", + "de": "Verbinden" } }, "progress_downloading": { @@ -1239,7 +1369,8 @@ "en": "Downloading", "fr": "Téléchargement", "es": "Descargando", - "it": "Download" + "it": "Download", + "de": "Wird geladen" } }, "progress_failed": { @@ -1248,7 +1379,8 @@ "en": "Failed", "fr": "Échec", "es": "Fallido", - "it": "Non riuscito" + "it": "Non riuscito", + "de": "Fehlgeschlagen" } }, "progress_getting_ready": { @@ -1257,7 +1389,8 @@ "en": "Getting ready", "fr": "Préparation", "es": "Preparándose", - "it": "Preparazione" + "it": "Preparazione", + "de": "Wird bereitgemacht" } }, "progress_interrupted": { @@ -1266,7 +1399,8 @@ "en": "Transfer interrupted", "fr": "Transfert interrompu", "es": "Transferencia interrumpida", - "it": "Trasferimento interrotto" + "it": "Trasferimento interrotto", + "de": "Übertragung unterbrochen" } }, "progress_preparing": { @@ -1275,7 +1409,8 @@ "en": "Preparing", "fr": "Préparation", "es": "Preparando", - "it": "Preparazione" + "it": "Preparazione", + "de": "Wird vorbereitet" } }, "progress_ready": { @@ -1284,7 +1419,8 @@ "en": "Ready", "fr": "Prêt", "es": "Listo", - "it": "Pronto" + "it": "Pronto", + "de": "Bereit" } }, "progress_receiving": { @@ -1293,7 +1429,8 @@ "en": "Receiving", "fr": "Réception", "es": "Recibiendo", - "it": "Ricezione" + "it": "Ricezione", + "de": "Wird empfangen" } }, "progress_requesting_access": { @@ -1302,7 +1439,8 @@ "en": "Requesting access", "fr": "Demande d’accès", "es": "Solicitando acceso", - "it": "Richiesta di accesso" + "it": "Richiesta di accesso", + "de": "Zugriff wird angefragt" } }, "progress_saving": { @@ -1311,7 +1449,8 @@ "en": "Saving", "fr": "Enregistrement", "es": "Guardando", - "it": "Salvataggio" + "it": "Salvataggio", + "de": "Wird gesichert" } }, "progress_sending": { @@ -1320,7 +1459,8 @@ "en": "Sending", "fr": "Envoi", "es": "Enviando", - "it": "Invio" + "it": "Invio", + "de": "Wird gesendet" } }, "progress_sending_to_count": { @@ -1329,7 +1469,8 @@ "en": "Sending to {count}", "fr": "Envoi à {count}", "es": "Enviando a {count}", - "it": "Invio a {count}" + "it": "Invio a {count}", + "de": "Senden an {count}" }, "args": [ { @@ -1344,7 +1485,8 @@ "en": "Ready to share", "fr": "Prêt à partager", "es": "Listo para compartir", - "it": "Pronto per la condivisione" + "it": "Pronto per la condivisione", + "de": "Bereit zum Teilen" } }, "progress_working": { @@ -1353,7 +1495,8 @@ "en": "Working…", "fr": "En cours…", "es": "Trabajando…", - "it": "Elaborazione…" + "it": "Elaborazione…", + "de": "Wird bearbeitet…" } }, "receive_choose_method_body": { @@ -1362,7 +1505,8 @@ "en": "Choose the invitation method available to you.", "fr": "Choisissez la méthode d’invitation à votre disposition.", "es": "Elija el método de invitación de que disponga.", - "it": "Scelga il metodo di invito a sua disposizione." + "it": "Scelga il metodo di invito a sua disposizione.", + "de": "Wählen Sie die Ihnen zur Verfügung stehende Einladungsmethode." } }, "receive_choose_method_title": { @@ -1371,7 +1515,8 @@ "en": "How would you like to connect?", "fr": "Comment souhaitez-vous vous connecter ?", "es": "¿Cómo quiere conectarse?", - "it": "Come vuole connettersi?" + "it": "Come vuole connettersi?", + "de": "Wie möchten Sie sich verbinden?" } }, "receive_clear_history": { @@ -1380,7 +1525,8 @@ "en": "Clear history", "fr": "Effacer l’historique", "es": "Borrar historial", - "it": "Cancella cronologia" + "it": "Cancella cronologia", + "de": "Verlauf löschen" } }, "receive_clear_history_description": { @@ -1389,7 +1535,8 @@ "en": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device.", "fr": "Toutes les réceptions terminées, échouées et annulées seront retirées de l’historique de VniDrop. Les fichiers téléchargés resteront sur cet appareil.", "es": "Todas las recepciones completadas, fallidas y canceladas se eliminarán del historial de VniDrop. Los archivos descargados permanecerán en este dispositivo.", - "it": "Tutte le ricezioni completate, non riuscite e annullate verranno rimosse dalla cronologia di VniDrop. I file scaricati rimarranno su questo dispositivo." + "it": "Tutte le ricezioni completate, non riuscite e annullate verranno rimosse dalla cronologia di VniDrop. I file scaricati rimarranno su questo dispositivo.", + "de": "Alle abgeschlossenen, fehlgeschlagenen und abgebrochenen Empfänge werden aus dem Verlauf von VniDrop entfernt. Heruntergeladene Dateien verbleiben auf diesem Gerät." } }, "receive_clear_history_title": { @@ -1398,7 +1545,8 @@ "en": "Clear receive history?", "fr": "Effacer l’historique de réception ?", "es": "¿Borrar el historial de recepción?", - "it": "Cancellare la cronologia di ricezione?" + "it": "Cancellare la cronologia di ricezione?", + "de": "Empfangsverlauf löschen?" } }, "receive_completed": { @@ -1407,7 +1555,8 @@ "en": "Transfer received.", "fr": "Transfert reçu.", "es": "Transferencia recibida.", - "it": "Trasferimento ricevuto." + "it": "Trasferimento ricevuto.", + "de": "Übertragung empfangen." } }, "receive_delete_history_description": { @@ -1422,7 +1571,8 @@ "en": "“{arg1}” will be removed from VniDrop’s history. The downloaded file will remain on this device.", "fr": "« {arg1} » sera retiré de l’historique de VniDrop. Le fichier téléchargé restera sur cet appareil.", "es": "«{arg1}» se eliminará del historial de VniDrop. El archivo descargado permanecerá en este dispositivo.", - "it": "«{arg1}» verrà rimosso dalla cronologia di VniDrop. Il file scaricato rimarrà su questo dispositivo." + "it": "«{arg1}» verrà rimosso dalla cronologia di VniDrop. Il file scaricato rimarrà su questo dispositivo.", + "de": "„{arg1}“ wird aus dem Verlauf von VniDrop entfernt. Die heruntergeladene Datei verbleibt auf diesem Gerät." } }, "receive_delete_history_item": { @@ -1431,7 +1581,8 @@ "en": "Delete from receive history", "fr": "Supprimer de l’historique de réception", "es": "Eliminar del historial de recepción", - "it": "Elimina dalla cronologia di ricezione" + "it": "Elimina dalla cronologia di ricezione", + "de": "Aus Empfangsverlauf löschen" } }, "receive_delete_history_title": { @@ -1440,7 +1591,8 @@ "en": "Remove from history?", "fr": "Retirer de l’historique ?", "es": "¿Quitar del historial?", - "it": "Rimuovere dalla cronologia?" + "it": "Rimuovere dalla cronologia?", + "de": "Aus dem Verlauf entfernen?" } }, "receive_empty_body": { @@ -1449,7 +1601,8 @@ "en": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag.", "fr": "Ouvrez une invitation VniDrop, scannez un QR code ou approchez un tag NFC.", "es": "Abra una invitación de VniDrop, escanee un código QR o acerque una etiqueta NFC.", - "it": "Apra un invito VniDrop, scansioni un codice QR o avvicini un tag NFC." + "it": "Apra un invito VniDrop, scansioni un codice QR o avvicini un tag NFC.", + "de": "Öffnen Sie eine VniDrop-Einladung, scannen Sie einen QR-Code oder halten Sie das Gerät an ein NFC-Tag." } }, "receive_empty_title": { @@ -1458,7 +1611,8 @@ "en": "Nothing received yet", "fr": "Rien reçu pour l’instant", "es": "Aún no se ha recibido nada", - "it": "Ancora nulla di ricevuto" + "it": "Ancora nulla di ricevuto", + "de": "Noch nichts empfangen" } }, "receive_history_cleared": { @@ -1467,7 +1621,8 @@ "en": "Receive history cleared.", "fr": "Historique de réception effacé.", "es": "Historial de recepción borrado.", - "it": "Cronologia di ricezione cancellata." + "it": "Cronologia di ricezione cancellata.", + "de": "Empfangsverlauf gelöscht." } }, "receive_history_title": { @@ -1476,7 +1631,8 @@ "en": "History", "fr": "Historique", "es": "Historial", - "it": "Cronologia" + "it": "Cronologia", + "de": "Verlauf" } }, "receive_method_file": { @@ -1485,7 +1641,8 @@ "en": "Open a .vnd invitation", "fr": "Ouvrir une invitation .vnd", "es": "Abrir una invitación .vnd", - "it": "Apri un invito .vnd" + "it": "Apri un invito .vnd", + "de": "Eine .vnd-Einladung öffnen" } }, "receive_method_file_description": { @@ -1494,7 +1651,8 @@ "en": "Choose an invitation saved or shared to this device.", "fr": "Choisissez une invitation enregistrée ou partagée sur cet appareil.", "es": "Elija una invitación guardada o compartida en este dispositivo.", - "it": "Scelga un invito salvato o condiviso su questo dispositivo." + "it": "Scelga un invito salvato o condiviso su questo dispositivo.", + "de": "Wählen Sie eine auf diesem Gerät gespeicherte oder geteilte Einladung." } }, "receive_method_nfc": { @@ -1503,7 +1661,8 @@ "en": "Read NFC tag", "fr": "Lire un tag NFC", "es": "Leer etiqueta NFC", - "it": "Leggi tag NFC" + "it": "Leggi tag NFC", + "de": "NFC-Tag lesen" } }, "receive_method_nfc_description": { @@ -1512,7 +1671,8 @@ "en": "Hold this device near the sender’s invitation tag.", "fr": "Approchez cet appareil du tag d’invitation de l’expéditeur.", "es": "Acerque este dispositivo a la etiqueta de invitación del remitente.", - "it": "Avvicini questo dispositivo al tag di invito del mittente." + "it": "Avvicini questo dispositivo al tag di invito del mittente.", + "de": "Halten Sie dieses Gerät an das Einladungs-Tag des Absenders." } }, "receive_method_scan": { @@ -1521,7 +1681,8 @@ "en": "Scan QR code", "fr": "Scanner un QR code", "es": "Escanear código QR", - "it": "Scansiona codice QR" + "it": "Scansiona codice QR", + "de": "QR-Code scannen" } }, "receive_method_scan_description": { @@ -1530,7 +1691,8 @@ "en": "Use the camera to scan the sender’s VniDrop code.", "fr": "Utilisez la caméra pour scanner le code VniDrop de l’expéditeur.", "es": "Use la cámara para escanear el código de VniDrop del remitente.", - "it": "Usi la fotocamera per scansionare il codice VniDrop del mittente." + "it": "Usi la fotocamera per scansionare il codice VniDrop del mittente.", + "de": "Verwenden Sie die Kamera, um den VniDrop-Code des Absenders zu scannen." } }, "receive_new_subtitle": { @@ -1539,7 +1701,8 @@ "en": "Transfers you’ve received on this device.", "fr": "Transferts que vous avez reçus sur cet appareil.", "es": "Transferencias que ha recibido en este dispositivo.", - "it": "Trasferimenti che ha ricevuto su questo dispositivo." + "it": "Trasferimenti che ha ricevuto su questo dispositivo.", + "de": "Übertragungen, die Sie auf diesem Gerät empfangen haben." } }, "receive_nfc_waiting": { @@ -1548,7 +1711,8 @@ "en": "Hold near the NFC tag…", "fr": "Approchez du tag NFC…", "es": "Acerque a la etiqueta NFC…", - "it": "Avvicini al tag NFC…" + "it": "Avvicini al tag NFC…", + "de": "Halten Sie das Gerät an das NFC-Tag…" } }, "receive_open_files_failed": { @@ -1557,7 +1721,8 @@ "en": "Couldn’t open VniDrop in Files.", "fr": "Impossible d’ouvrir VniDrop dans Fichiers.", "es": "No se pudo abrir VniDrop en Archivos.", - "it": "Impossibile aprire VniDrop in File." + "it": "Impossibile aprire VniDrop in File.", + "de": "VniDrop konnte in „Dateien“ nicht geöffnet werden." } }, "receive_review_title": { @@ -1566,7 +1731,8 @@ "en": "Review transfer", "fr": "Vérifier le transfert", "es": "Revisar transferencia", - "it": "Rivedi trasferimento" + "it": "Rivedi trasferimento", + "de": "Übertragung prüfen" } }, "receive_title": { @@ -1575,7 +1741,8 @@ "en": "Receive", "fr": "Recevoir", "es": "Recibir", - "it": "Ricevi" + "it": "Ricevi", + "de": "Empfangen" } }, "receive_unknown_transfer": { @@ -1584,7 +1751,8 @@ "en": "VniDrop transfer", "fr": "Transfert VniDrop", "es": "Transferencia de VniDrop", - "it": "Trasferimento VniDrop" + "it": "Trasferimento VniDrop", + "de": "VniDrop-Übertragung" } }, "send_access_anyone": { @@ -1593,7 +1761,8 @@ "en": "Anyone with this transfer", "fr": "Toute personne disposant de ce transfert", "es": "Cualquiera que tenga esta transferencia", - "it": "Chiunque abbia questo trasferimento" + "it": "Chiunque abbia questo trasferimento", + "de": "Jeder mit dieser Übertragung" } }, "send_access_anyone_description": { @@ -1602,7 +1771,8 @@ "en": "No approval is required. Only use this for items you are comfortable sharing.", "fr": "Aucune approbation requise. À n’utiliser que pour des éléments que vous êtes à l’aise de partager.", "es": "No se requiere aprobación. Úselo solo para elementos que no le importe compartir.", - "it": "Nessuna approvazione richiesta. Da usare solo per elementi che non ha problemi a condividere." + "it": "Nessuna approvazione richiesta. Da usare solo per elementi che non ha problemi a condividere.", + "de": "Keine Genehmigung erforderlich. Verwenden Sie dies nur für Objekte, die Sie unbedenklich teilen können." } }, "send_access_anyone_warning": { @@ -1611,7 +1781,8 @@ "en": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items.", "fr": "Toute personne disposant de l’invitation peut télécharger jusqu’à ce que vous arrêtiez le partage. Ne l’utilisez pas pour des éléments privés ou sensibles.", "es": "Cualquiera que tenga la invitación puede descargar hasta que deje de compartir. No lo use para elementos privados o sensibles.", - "it": "Chiunque abbia l’invito può scaricare finché non interrompe la condivisione. Non lo usi per elementi privati o sensibili." + "it": "Chiunque abbia l’invito può scaricare finché non interrompe la condivisione. Non lo usi per elementi privati o sensibili.", + "de": "Jeder mit der Einladung kann herunterladen, bis Sie die Freigabe beenden. Verwenden Sie dies nicht für private oder sensible Objekte." } }, "send_access_approval": { @@ -1620,7 +1791,8 @@ "en": "Ask before each download", "fr": "Demander avant chaque téléchargement", "es": "Preguntar antes de cada descarga", - "it": "Chiedi prima di ogni download" + "it": "Chiedi prima di ogni download", + "de": "Vor jedem Download fragen" } }, "send_access_approval_description": { @@ -1629,7 +1801,8 @@ "en": "You approve or refuse every new receiver.", "fr": "Vous approuvez ou refusez chaque nouveau destinataire.", "es": "Usted aprueba o rechaza a cada nuevo destinatario.", - "it": "Approva o rifiuta ogni nuovo destinatario." + "it": "Approva o rifiuta ogni nuovo destinatario.", + "de": "Sie genehmigen oder lehnen jeden neuen Empfänger ab." } }, "send_access_title": { @@ -1638,7 +1811,8 @@ "en": "Who can receive it?", "fr": "Qui peut le recevoir ?", "es": "¿Quién puede recibirla?", - "it": "Chi può riceverlo?" + "it": "Chi può riceverlo?", + "de": "Wer kann sie empfangen?" } }, "send_choose_file_body": { @@ -1647,7 +1821,8 @@ "en": "Select files or a folder from this device. You can review the selection before creating the transfer.", "fr": "Sélectionnez des fichiers ou un dossier sur cet appareil. Vous pourrez vérifier la sélection avant de créer le transfert.", "es": "Seleccione archivos o una carpeta de este dispositivo. Podrá revisar la selección antes de crear la transferencia.", - "it": "Selezioni file o una cartella da questo dispositivo. Potrà rivedere la selezione prima di creare il trasferimento." + "it": "Selezioni file o una cartella da questo dispositivo. Potrà rivedere la selezione prima di creare il trasferimento.", + "de": "Wählen Sie Dateien oder einen Ordner auf diesem Gerät aus. Sie können die Auswahl überprüfen, bevor Sie die Übertragung erstellen." } }, "send_choose_file_title": { @@ -1656,7 +1831,8 @@ "en": "Choose what to share", "fr": "Choisissez quoi partager", "es": "Elija qué compartir", - "it": "Scelga cosa condividere" + "it": "Scelga cosa condividere", + "de": "Wählen Sie, was Sie teilen möchten" } }, "send_empty_body": { @@ -1665,7 +1841,8 @@ "en": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file.", "fr": "Créez un transfert, décidez qui peut le recevoir, puis invitez-les avec un QR code, un tag NFC ou un fichier d’invitation.", "es": "Cree una transferencia, decida quién puede recibirla y luego invite a esas personas con un código QR, una etiqueta NFC o un archivo de invitación.", - "it": "Crei un trasferimento, decida chi può riceverlo, poi inviti queste persone con un codice QR, un tag NFC o un file di invito." + "it": "Crei un trasferimento, decida chi può riceverlo, poi inviti queste persone con un codice QR, un tag NFC o un file di invito.", + "de": "Erstellen Sie eine Übertragung, entscheiden Sie, wer sie empfangen darf, und laden Sie diese Personen dann mit einem QR-Code, einem NFC-Tag oder einer Einladungsdatei ein." } }, "send_empty_title": { @@ -1674,7 +1851,8 @@ "en": "Nothing shared yet", "fr": "Rien partagé pour l’instant", "es": "Aún no se ha compartido nada", - "it": "Ancora nulla di condiviso" + "it": "Ancora nulla di condiviso", + "de": "Noch nichts geteilt" } }, "send_file_size_unknown": { @@ -1683,7 +1861,8 @@ "en": "Size unavailable", "fr": "Taille indisponible", "es": "Tamaño no disponible", - "it": "Dimensione non disponibile" + "it": "Dimensione non disponibile", + "de": "Größe nicht verfügbar" } }, "send_folder_label": { @@ -1692,7 +1871,8 @@ "en": "Folder", "fr": "Dossier", "es": "Carpeta", - "it": "Cartella" + "it": "Cartella", + "de": "Ordner" } }, "send_new_transfer_description": { @@ -1701,7 +1881,8 @@ "en": "Create a new transfer", "fr": "Créer un nouveau transfert", "es": "Crear una nueva transferencia", - "it": "Crea un nuovo trasferimento" + "it": "Crea un nuovo trasferimento", + "de": "Eine neue Übertragung erstellen" } }, "send_new_transfer_title": { @@ -1710,7 +1891,8 @@ "en": "New transfer", "fr": "Nouveau transfert", "es": "Nueva transferencia", - "it": "Nuovo trasferimento" + "it": "Nuovo trasferimento", + "de": "Neue Übertragung" } }, "send_review_title": { @@ -1719,7 +1901,8 @@ "en": "Review transfer", "fr": "Vérifier le transfert", "es": "Revisar transferencia", - "it": "Rivedi trasferimento" + "it": "Rivedi trasferimento", + "de": "Übertragung prüfen" } }, "send_selected_files_count": { @@ -1734,7 +1917,8 @@ "en": "{count} files selected", "fr": "{count} fichiers sélectionnés", "es": "{count} archivos seleccionados", - "it": "{count} file selezionati" + "it": "{count} file selezionati", + "de": "{count} Dateien ausgewählt" } }, "send_stop_sharing": { @@ -1743,7 +1927,8 @@ "en": "Stop sharing", "fr": "Arrêter le partage", "es": "Dejar de compartir", - "it": "Interrompi condivisione" + "it": "Interrompi condivisione", + "de": "Freigabe beenden" } }, "send_stop_sharing_description": { @@ -1752,7 +1937,8 @@ "en": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped.", "fr": "Cela arrête le transfert et interrompt toute personne en train de le télécharger. Il reste dans votre historique en tant qu’Arrêté.", "es": "Esto detiene la transferencia e interrumpe a quien esté descargándola. Permanece en su historial como Detenida.", - "it": "Questo interrompe il trasferimento e blocca chiunque lo stia scaricando. Rimane nella sua cronologia come Interrotto." + "it": "Questo interrompe il trasferimento e blocca chiunque lo stia scaricando. Rimane nella sua cronologia come Interrotto.", + "de": "Dies beendet die Übertragung und unterbricht alle, die sie gerade herunterladen. Sie verbleibt in Ihrem Verlauf als „Beendet“." } }, "send_subtitle": { @@ -1761,7 +1947,8 @@ "en": "Transfers you’re sharing from this device.", "fr": "Transferts que vous partagez depuis cet appareil.", "es": "Transferencias que está compartiendo desde este dispositivo.", - "it": "Trasferimenti che sta condividendo da questo dispositivo." + "it": "Trasferimenti che sta condividendo da questo dispositivo.", + "de": "Übertragungen, die Sie von diesem Gerät aus teilen." } }, "send_title": { @@ -1770,7 +1957,8 @@ "en": "Send", "fr": "Envoyer", "es": "Enviar", - "it": "Invia" + "it": "Invia", + "de": "Senden" } }, "send_transfer_created": { @@ -1779,7 +1967,8 @@ "en": "Transfer created.", "fr": "Transfert créé.", "es": "Transferencia creada.", - "it": "Trasferimento creato." + "it": "Trasferimento creato.", + "de": "Übertragung erstellt." } }, "send_transfer_details_title": { @@ -1788,7 +1977,8 @@ "en": "Transfer details", "fr": "Détails du transfert", "es": "Detalles de la transferencia", - "it": "Dettagli del trasferimento" + "it": "Dettagli del trasferimento", + "de": "Übertragungsdetails" } }, "send_transfers_title": { @@ -1797,7 +1987,8 @@ "en": "Your transfers", "fr": "Vos transferts", "es": "Sus transferencias", - "it": "I suoi trasferimenti" + "it": "I suoi trasferimenti", + "de": "Ihre Übertragungen" } }, "settings_subtitle": { @@ -1806,7 +1997,8 @@ "en": "Your name, where transfers are saved, appearance, and notifications.", "fr": "Votre nom, l’emplacement d’enregistrement des transferts, l’apparence et les notifications.", "es": "Su nombre, dónde se guardan las transferencias, la apariencia y las notificaciones.", - "it": "Il suo nome, dove vengono salvati i trasferimenti, l’aspetto e le notifiche." + "it": "Il suo nome, dove vengono salvati i trasferimenti, l’aspetto e le notifiche.", + "de": "Ihr Name, wo Übertragungen gesichert werden, Darstellung und Mitteilungen." } }, "settings_title": { @@ -1815,7 +2007,8 @@ "en": "Settings", "fr": "Réglages", "es": "Ajustes", - "it": "Impostazioni" + "it": "Impostazioni", + "de": "Einstellungen" } }, "snackbar_dismiss": { @@ -1824,7 +2017,8 @@ "en": "Dismiss", "fr": "Ignorer", "es": "Descartar", - "it": "Ignora" + "it": "Ignora", + "de": "Ausblenden" } }, "status_available": { @@ -1833,7 +2027,8 @@ "en": "Available", "fr": "Disponible", "es": "Disponible", - "it": "Disponibile" + "it": "Disponibile", + "de": "Verfügbar" } }, "status_cancelled": { @@ -1842,7 +2037,8 @@ "en": "Cancelled", "fr": "Annulé", "es": "Cancelado", - "it": "Annullato" + "it": "Annullato", + "de": "Abgebrochen" } }, "status_completed": { @@ -1851,7 +2047,8 @@ "en": "Completed", "fr": "Terminé", "es": "Completado", - "it": "Completato" + "it": "Completato", + "de": "Abgeschlossen" } }, "status_failed": { @@ -1860,7 +2057,8 @@ "en": "Failed", "fr": "Échec", "es": "Fallido", - "it": "Non riuscito" + "it": "Non riuscito", + "de": "Fehlgeschlagen" } }, "status_preparing": { @@ -1869,7 +2067,8 @@ "en": "Preparing", "fr": "Préparation", "es": "Preparando", - "it": "Preparazione" + "it": "Preparazione", + "de": "Wird vorbereitet" } }, "status_receiving": { @@ -1878,7 +2077,8 @@ "en": "Receiving", "fr": "Réception", "es": "Recibiendo", - "it": "Ricezione" + "it": "Ricezione", + "de": "Wird empfangen" } }, "status_stopped": { @@ -1887,7 +2087,8 @@ "en": "Stopped", "fr": "Arrêté", "es": "Detenido", - "it": "Interrotto" + "it": "Interrotto", + "de": "Beendet" } }, "storage_calculating": { @@ -1896,7 +2097,8 @@ "en": "Calculating…", "fr": "Calcul…", "es": "Calculando…", - "it": "Calcolo…" + "it": "Calcolo…", + "de": "Wird berechnet…" } }, "storage_delete_transfers": { @@ -1905,7 +2107,8 @@ "en": "Delete all transfers", "fr": "Supprimer tous les transferts", "es": "Eliminar todas las transferencias", - "it": "Elimina tutti i trasferimenti" + "it": "Elimina tutti i trasferimenti", + "de": "Alle Übertragungen löschen" } }, "storage_delete_transfers_description": { @@ -1914,7 +2117,8 @@ "en": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone.", "fr": "Cela efface tous les enregistrements de transferts envoyés et reçus de votre historique. Vos fichiers reçus ne sont pas supprimés. Remarque : le moteur de transfert conserve son contenu stocké, donc les données de transfert peuvent ne pas diminuer. Cette action est irréversible.", "es": "Esto borra todos los registros de transferencias enviadas y recibidas de su historial. Sus archivos recibidos no se eliminan. Nota: el motor de transferencia conserva su contenido almacenado, por lo que los datos de transferencia pueden no disminuir. Esto no se puede deshacer.", - "it": "Questo cancella dalla cronologia tutti i record dei trasferimenti inviati e ricevuti. I suoi file ricevuti non vengono eliminati. Nota: il motore di trasferimento conserva il contenuto memorizzato, quindi i dati di trasferimento potrebbero non diminuire. Questa operazione non può essere annullata." + "it": "Questo cancella dalla cronologia tutti i record dei trasferimenti inviati e ricevuti. I suoi file ricevuti non vengono eliminati. Nota: il motore di trasferimento conserva il contenuto memorizzato, quindi i dati di trasferimento potrebbero non diminuire. Questa operazione non può essere annullata.", + "de": "Dies löscht alle Datensätze gesendeter und empfangener Übertragungen aus Ihrem Verlauf. Ihre empfangenen Dateien werden nicht gelöscht. Hinweis: Die Übertragungs-Engine behält ihre gespeicherten Inhalte, sodass die Übertragungsdaten möglicherweise nicht abnehmen. Dies kann nicht rückgängig gemacht werden." } }, "storage_deleting": { @@ -1923,7 +2127,8 @@ "en": "Deleting…", "fr": "Suppression…", "es": "Eliminando…", - "it": "Eliminazione…" + "it": "Eliminazione…", + "de": "Wird gelöscht…" } }, "storage_footer": { @@ -1932,7 +2137,8 @@ "en": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here.", "fr": "Les données de transfert sont gérées par le moteur de transfert — votre historique ainsi que le contenu des fichiers que vous avez partagés. Le bouton ci-dessous efface vos enregistrements de transferts ; le moteur conserve son contenu stocké, donc cette valeur peut ne pas baisser. Les fichiers reçus sont vos fichiers téléchargés et ne sont jamais supprimés ici.", "es": "Los datos de transferencia los gestiona el motor de transferencia: su historial más el contenido de los archivos que ha compartido. El botón de abajo borra sus registros de transferencias; el motor conserva su contenido almacenado, por lo que este valor puede no bajar. Los archivos recibidos son los archivos que ha descargado y nunca se eliminan aquí.", - "it": "I dati di trasferimento sono gestiti dal motore di trasferimento: la sua cronologia più il contenuto dei file che ha condiviso. Il pulsante qui sotto cancella i record dei trasferimenti; il motore conserva il contenuto memorizzato, quindi questo valore potrebbe non diminuire. I file ricevuti sono i file che ha scaricato e non vengono mai eliminati qui." + "it": "I dati di trasferimento sono gestiti dal motore di trasferimento: la sua cronologia più il contenuto dei file che ha condiviso. Il pulsante qui sotto cancella i record dei trasferimenti; il motore conserva il contenuto memorizzato, quindi questo valore potrebbe non diminuire. I file ricevuti sono i file che ha scaricato e non vengono mai eliminati qui.", + "de": "Übertragungsdaten werden von der Übertragungs-Engine verwaltet – Ihr Verlauf sowie der Inhalt der von Ihnen geteilten Dateien. Die Schaltfläche unten löscht Ihre Übertragungsdatensätze; die Engine behält ihre gespeicherten Inhalte, sodass dieser Wert möglicherweise nicht sinkt. Empfangene Dateien sind Ihre heruntergeladenen Dateien und werden hier niemals gelöscht." } }, "storage_received_files": { @@ -1941,7 +2147,8 @@ "en": "Received files", "fr": "Fichiers reçus", "es": "Archivos recibidos", - "it": "File ricevuti" + "it": "File ricevuti", + "de": "Empfangene Dateien" } }, "storage_temporary": { @@ -1950,7 +2157,8 @@ "en": "Temporary files", "fr": "Fichiers temporaires", "es": "Archivos temporales", - "it": "File temporanei" + "it": "File temporanei", + "de": "Temporäre Dateien" } }, "storage_title": { @@ -1959,7 +2167,8 @@ "en": "Storage", "fr": "Stockage", "es": "Almacenamiento", - "it": "Archiviazione" + "it": "Archiviazione", + "de": "Speicher" } }, "storage_total": { @@ -1968,7 +2177,8 @@ "en": "Total", "fr": "Total", "es": "Total", - "it": "Totale" + "it": "Totale", + "de": "Gesamt" } }, "storage_transfer_data": { @@ -1977,7 +2187,8 @@ "en": "Transfer data", "fr": "Données de transfert", "es": "Datos de transferencia", - "it": "Dati di trasferimento" + "it": "Dati di trasferimento", + "de": "Übertragungsdaten" } }, "storage_transfers_deleted": { @@ -1986,7 +2197,8 @@ "en": "All transfers deleted", "fr": "Tous les transferts supprimés", "es": "Todas las transferencias eliminadas", - "it": "Tutti i trasferimenti eliminati" + "it": "Tutti i trasferimenti eliminati", + "de": "Alle Übertragungen gelöscht" } }, "transfer_activity_description": { @@ -1995,7 +2207,8 @@ "en": "See important updates for this transfer", "fr": "Consultez les mises à jour importantes de ce transfert", "es": "Vea las actualizaciones importantes de esta transferencia", - "it": "Veda gli aggiornamenti importanti di questo trasferimento" + "it": "Veda gli aggiornamenti importanti di questo trasferimento", + "de": "Wichtige Aktualisierungen zu dieser Übertragung ansehen" } }, "transfer_activity_title": { @@ -2004,7 +2217,8 @@ "en": "Activity", "fr": "Activité", "es": "Actividad", - "it": "Attività" + "it": "Attività", + "de": "Aktivität" } }, "transfer_delete_description": { @@ -2019,7 +2233,8 @@ "en": "“{arg1}” will stop being shared and its transfer history will be removed from this device.", "fr": "« {arg1} » cessera d’être partagé et son historique de transfert sera retiré de cet appareil.", "es": "«{arg1}» dejará de compartirse y su historial de transferencia se eliminará de este dispositivo.", - "it": "«{arg1}» non verrà più condiviso e la sua cronologia di trasferimento verrà rimossa da questo dispositivo." + "it": "«{arg1}» non verrà più condiviso e la sua cronologia di trasferimento verrà rimossa da questo dispositivo.", + "de": "„{arg1}“ wird nicht mehr geteilt und sein Übertragungsverlauf wird von diesem Gerät entfernt." } }, "transfer_delete_title": { @@ -2028,7 +2243,8 @@ "en": "Delete transfer?", "fr": "Supprimer le transfert ?", "es": "¿Eliminar la transferencia?", - "it": "Eliminare il trasferimento?" + "it": "Eliminare il trasferimento?", + "de": "Übertragung löschen?" } }, "transfer_deleted": { @@ -2037,7 +2253,8 @@ "en": "Transfer deleted.", "fr": "Transfert supprimé.", "es": "Transferencia eliminada.", - "it": "Trasferimento eliminato." + "it": "Trasferimento eliminato.", + "de": "Übertragung gelöscht." } }, "transfer_deleting": { @@ -2046,7 +2263,8 @@ "en": "Deleting…", "fr": "Suppression…", "es": "Eliminando…", - "it": "Eliminazione…" + "it": "Eliminazione…", + "de": "Wird gelöscht…" } }, "transfer_details_title": { @@ -2055,7 +2273,8 @@ "en": "Transfer details", "fr": "Détails du transfert", "es": "Detalles de la transferencia", - "it": "Dettagli del trasferimento" + "it": "Dettagli del trasferimento", + "de": "Übertragungsdetails" } }, "transfer_event_approved": { @@ -2064,7 +2283,8 @@ "en": "Receiver access approved", "fr": "Accès du destinataire approuvé", "es": "Acceso del destinatario aprobado", - "it": "Accesso del destinatario approvato" + "it": "Accesso del destinatario approvato", + "de": "Empfängerzugriff genehmigt" } }, "transfer_event_completed": { @@ -2073,7 +2293,8 @@ "en": "A receiver completed the transfer", "fr": "Un destinataire a terminé le transfert", "es": "Un destinatario completó la transferencia", - "it": "Un destinatario ha completato il trasferimento" + "it": "Un destinatario ha completato il trasferimento", + "de": "Ein Empfänger hat die Übertragung abgeschlossen" } }, "transfer_event_connecting": { @@ -2082,7 +2303,8 @@ "en": "Connecting to sender", "fr": "Connexion à l’expéditeur", "es": "Conectando con el remitente", - "it": "Connessione al mittente" + "it": "Connessione al mittente", + "de": "Verbindung zum Absender" } }, "transfer_event_downloading": { @@ -2091,7 +2313,8 @@ "en": "Downloading", "fr": "Téléchargement", "es": "Descargando", - "it": "Download" + "it": "Download", + "de": "Wird geladen" } }, "transfer_event_failed": { @@ -2100,7 +2323,8 @@ "en": "The transfer encountered a problem", "fr": "Le transfert a rencontré un problème", "es": "La transferencia tuvo un problema", - "it": "Il trasferimento ha riscontrato un problema" + "it": "Il trasferimento ha riscontrato un problema", + "de": "Bei der Übertragung ist ein Problem aufgetreten" } }, "transfer_event_preparing": { @@ -2109,7 +2333,8 @@ "en": "Preparing your transfer", "fr": "Préparation de votre transfert", "es": "Preparando su transferencia", - "it": "Preparazione del trasferimento" + "it": "Preparazione del trasferimento", + "de": "Ihre Übertragung wird vorbereitet" } }, "transfer_event_ready": { @@ -2118,7 +2343,8 @@ "en": "Ready to share", "fr": "Prêt à partager", "es": "Listo para compartir", - "it": "Pronto per la condivisione" + "it": "Pronto per la condivisione", + "de": "Bereit zum Teilen" } }, "transfer_event_refused": { @@ -2127,7 +2353,8 @@ "en": "Receiver access refused", "fr": "Accès du destinataire refusé", "es": "Acceso del destinatario rechazado", - "it": "Accesso del destinatario rifiutato" + "it": "Accesso del destinatario rifiutato", + "de": "Empfängerzugriff abgelehnt" } }, "transfer_event_requested": { @@ -2136,7 +2363,8 @@ "en": "A receiver requested access", "fr": "Un destinataire a demandé l’accès", "es": "Un destinatario solicitó acceso", - "it": "Un destinatario ha richiesto l’accesso" + "it": "Un destinatario ha richiesto l’accesso", + "de": "Ein Empfänger hat Zugriff angefragt" } }, "transfer_event_saving": { @@ -2145,7 +2373,8 @@ "en": "Saving", "fr": "Enregistrement", "es": "Guardando", - "it": "Salvataggio" + "it": "Salvataggio", + "de": "Wird gesichert" } }, "transfer_event_stopped": { @@ -2154,7 +2383,8 @@ "en": "Sharing stopped", "fr": "Partage arrêté", "es": "Se dejó de compartir", - "it": "Condivisione interrotta" + "it": "Condivisione interrotta", + "de": "Freigabe beendet" } }, "transfer_event_updated": { @@ -2163,7 +2393,8 @@ "en": "Transfer updated", "fr": "Transfert mis à jour", "es": "Transferencia actualizada", - "it": "Trasferimento aggiornato" + "it": "Trasferimento aggiornato", + "de": "Übertragung aktualisiert" } }, "transfer_file_count": { @@ -2190,6 +2421,10 @@ "it": { "one": "{count} file", "other": "{count} file" + }, + "de": { + "one": "{count} Datei", + "other": "{count} Dateien" } } }, @@ -2199,7 +2434,8 @@ "en": "Invitation saved.", "fr": "Invitation enregistrée.", "es": "Invitación guardada.", - "it": "Invito salvato." + "it": "Invito salvato.", + "de": "Einladung gesichert." } }, "transfer_nearby_device": { @@ -2208,7 +2444,8 @@ "en": "Nearby device", "fr": "Appareil à proximité", "es": "Dispositivo cercano", - "it": "Dispositivo nelle vicinanze" + "it": "Dispositivo nelle vicinanze", + "de": "Gerät in der Nähe" } }, "transfer_nfc_unavailable": { @@ -2217,7 +2454,8 @@ "en": "NFC tag writing is not available on this device.", "fr": "L’écriture de tag NFC n’est pas disponible sur cet appareil.", "es": "La escritura de etiquetas NFC no está disponible en este dispositivo.", - "it": "La scrittura dei tag NFC non è disponibile su questo dispositivo." + "it": "La scrittura dei tag NFC non è disponibile su questo dispositivo.", + "de": "Das Beschreiben von NFC-Tags ist auf diesem Gerät nicht verfügbar." } }, "transfer_nfc_waiting": { @@ -2226,7 +2464,8 @@ "en": "Hold your device near a writable NFC tag.", "fr": "Approchez votre appareil d’un tag NFC inscriptible.", "es": "Acerque su dispositivo a una etiqueta NFC grabable.", - "it": "Avvicini il dispositivo a un tag NFC scrivibile." + "it": "Avvicini il dispositivo a un tag NFC scrivibile.", + "de": "Halten Sie Ihr Gerät an ein beschreibbares NFC-Tag." } }, "transfer_nfc_written": { @@ -2235,7 +2474,8 @@ "en": "Invitation written to the NFC tag.", "fr": "Invitation écrite sur le tag NFC.", "es": "Invitación escrita en la etiqueta NFC.", - "it": "Invito scritto sul tag NFC." + "it": "Invito scritto sul tag NFC.", + "de": "Einladung auf das NFC-Tag geschrieben." } }, "transfer_no_activity": { @@ -2244,7 +2484,8 @@ "en": "There is no activity to show yet.", "fr": "Aucune activité à afficher pour l’instant.", "es": "Todavía no hay actividad que mostrar.", - "it": "Non c’è ancora alcuna attività da mostrare." + "it": "Non c’è ancora alcuna attività da mostrare.", + "de": "Es gibt noch keine Aktivität anzuzeigen." } }, "transfer_no_receivers": { @@ -2253,7 +2494,8 @@ "en": "Nobody has requested this transfer yet.", "fr": "Personne n’a encore demandé ce transfert.", "es": "Nadie ha solicitado aún esta transferencia.", - "it": "Nessuno ha ancora richiesto questo trasferimento." + "it": "Nessuno ha ancora richiesto questo trasferimento.", + "de": "Noch niemand hat diese Übertragung angefragt." } }, "transfer_receiver_accepted": { @@ -2262,7 +2504,8 @@ "en": "Approved — waiting for completion", "fr": "Approuvé — en attente de la fin", "es": "Aprobado: esperando a que se complete", - "it": "Approvato: in attesa del completamento" + "it": "Approvato: in attesa del completamento", + "de": "Genehmigt – wartet auf Abschluss" } }, "transfer_receiver_completed": { @@ -2271,7 +2514,8 @@ "en": "Received successfully", "fr": "Reçu avec succès", "es": "Recibido correctamente", - "it": "Ricevuto correttamente" + "it": "Ricevuto correttamente", + "de": "Erfolgreich empfangen" } }, "transfer_receiver_expired": { @@ -2280,7 +2524,8 @@ "en": "Request expired", "fr": "Demande expirée", "es": "Solicitud caducada", - "it": "Richiesta scaduta" + "it": "Richiesta scaduta", + "de": "Anfrage abgelaufen" } }, "transfer_receiver_refused": { @@ -2289,7 +2534,8 @@ "en": "Request refused", "fr": "Demande refusée", "es": "Solicitud rechazada", - "it": "Richiesta rifiutata" + "it": "Richiesta rifiutata", + "de": "Anfrage abgelehnt" } }, "transfer_receiver_requested": { @@ -2298,7 +2544,8 @@ "en": "Waiting for your approval", "fr": "En attente de votre approbation", "es": "Esperando su aprobación", - "it": "In attesa della sua approvazione" + "it": "In attesa della sua approvazione", + "de": "Wartet auf Ihre Genehmigung" } }, "transfer_receiver_unknown": { @@ -2307,7 +2554,8 @@ "en": "Status unavailable", "fr": "Statut indisponible", "es": "Estado no disponible", - "it": "Stato non disponibile" + "it": "Stato non disponibile", + "de": "Status nicht verfügbar" } }, "transfer_receivers_completed_count": { @@ -2322,7 +2570,8 @@ "en": "{count} completed", "fr": "{count} terminés", "es": "{count} completados", - "it": "{count} completati" + "it": "{count} completati", + "de": "{count} abgeschlossen" } }, "transfer_receivers_description": { @@ -2331,7 +2580,8 @@ "en": "Requests, approvals, and completed deliveries", "fr": "Demandes, approbations et livraisons terminées", "es": "Solicitudes, aprobaciones y entregas completadas", - "it": "Richieste, approvazioni e consegne completate" + "it": "Richieste, approvazioni e consegne completate", + "de": "Anfragen, Genehmigungen und abgeschlossene Zustellungen" } }, "transfer_receivers_pending": { @@ -2346,7 +2596,8 @@ "en": "{count} waiting", "fr": "{count} en attente", "es": "{count} en espera", - "it": "{count} in attesa" + "it": "{count} in attesa", + "de": "{count} warten" } }, "transfer_receivers_title": { @@ -2355,7 +2606,8 @@ "en": "Receivers", "fr": "Destinataires", "es": "Destinatarios", - "it": "Destinatari" + "it": "Destinatari", + "de": "Empfänger" } }, "transfer_scan_qr": { @@ -2364,7 +2616,8 @@ "en": "Scan with VniDrop to receive this transfer", "fr": "Scannez avec VniDrop pour recevoir ce transfert", "es": "Escanee con VniDrop para recibir esta transferencia", - "it": "Scansioni con VniDrop per ricevere questo trasferimento" + "it": "Scansioni con VniDrop per ricevere questo trasferimento", + "de": "Mit VniDrop scannen, um diese Übertragung zu empfangen" } }, "transfer_share_description": { @@ -2373,7 +2626,8 @@ "en": "QR code, invitation file, and nearby options", "fr": "QR code, fichier d’invitation et options à proximité", "es": "Código QR, archivo de invitación y opciones cercanas", - "it": "Codice QR, file di invito e opzioni nelle vicinanze" + "it": "Codice QR, file di invito e opzioni nelle vicinanze", + "de": "QR-Code, Einladungsdatei und Optionen in der Nähe" } }, "transfer_share_title": { @@ -2382,7 +2636,8 @@ "en": "Share", "fr": "Partager", "es": "Compartir", - "it": "Condividi" + "it": "Condividi", + "de": "Teilen" } }, "value_unavailable": { @@ -2391,7 +2646,8 @@ "en": "Not available", "fr": "Non disponible", "es": "No disponible", - "it": "Non disponibile" + "it": "Non disponibile", + "de": "Nicht verfügbar" } }, "version_title": { @@ -2400,7 +2656,8 @@ "en": "App version", "fr": "Version de l’app", "es": "Versión de la app", - "it": "Versione dell’app" + "it": "Versione dell’app", + "de": "App-Version" } } } diff --git a/shared/src/commonMain/composeResources/values-de/strings.xml b/shared/src/commonMain/composeResources/values-de/strings.xml new file mode 100644 index 0000000..7e4c535 --- /dev/null +++ b/shared/src/commonMain/composeResources/values-de/strings.xml @@ -0,0 +1,257 @@ + + + Fehler melden + VniDrop überträgt Dateien und Ordner direkt von einem Gerät auf ein anderes über das Netzwerk, ohne sie auf einen Hosting-Dienst hochzuladen. Es muss kein Konto erstellt werden, und nach Abschluss verbleibt keine Kopie Ihrer Übertragung in der Cloud. + Eine direkte Gerät-zu-Gerät-Übertragung – Ihre Dateien gehen direkt an den Empfänger. + Verbindungen sind authentifiziert und Ende-zu-Ende-verschlüsselt (über Iroh), und eingehende Dateien werden anhand ihres Inhalts-Hashs überprüft. + Sie entscheiden, wer empfängt: Genehmigen Sie jede Anfrage oder öffnen Sie eine Übertragung für alle, die die Einladung besitzen. + Ohne Konto – es gibt nichts zu registrieren. + Open Source, veröffentlicht unter der Apache-2.0-Lizenz. + Was VniDrop ist + Kein Cloud-Speicher – kein Server hält Ihre Dateien, und nach einer Übertragung wartet nichts in der Cloud. + Keine öffentliche Übertragung – eine Einladung ist ein privater Zugangslink, keine Ankündigung an alle in der Nähe. + Kein Synchronisierungs- oder Backup-Dienst. + Was VniDrop nicht ist + Lizenz + Datenschutzrichtlinie + Einladungen sind Zugangsschlüssel. Behandeln Sie einen QR-Code, ein NFC-Tag oder eine .vnd-Datei wie einen privaten Zugangslink und teilen Sie ihn nur mit den vorgesehenen Personen – insbesondere bei „Jeder mit dieser Übertragung“. + Standardmäßig ablehnen – VniDrop stellt nur den Inhalt einer aktiven Freigabe bereit und weist unbekannte Anfragen ab. + Empfangene Dateien werden auf Ihrem Gerät gespeichert und überschreiben niemals eine vorhandene Datei. + Datenschutzrichtlinie + Wenn zwei Geräte sich nicht direkt verbinden können, kann die verschlüsselte Verbindung weitergeleitet werden. Relays leiten nur verschlüsselte Pakete weiter; sie speichern niemals Ihre Dateien. + Datenschutz & Sicherheit + Senden Sie Dateien direkt. Behalten Sie die Kontrolle darüber, wer sie empfängt. + Über + Der hellen oder dunklen Darstellung dieses Geräts folgen. + Dunkelmodus + Hellmodus + System + Darstellung + Empfangsanfrage + Geräte-ID: %1$s + Ein Gerät in der Nähe + %1$d Anfragen warten + %1$s möchte „%2$s“ empfangen. + Batteriestand + name@beispiel.com + Kontakt-E-Mail (optional) + Sagen Sie uns, was schiefgelaufen ist. Wir hängen Geräteinformationen und optional aktuelle Protokolle an (sensible Werte werden geschwärzt). + Geräteinformationen + Beschreiben Sie, was Sie erwartet haben + Was haben Sie erwartet? + Aktuelle Protokolle einschließen + Hilft uns, das Problem zu diagnostizieren. Sensible Werte werden vor dem Senden geschwärzt. + Größe des Protokollanhangs + Bitte beschreiben Sie, was Sie erwartet haben. + Bitte beschreiben Sie, was passiert ist. + Listen Sie die Schritte zum Reproduzieren des Problems auf + Schritte zum Reproduzieren (optional) + Bericht senden + Der Fehlerbericht konnte nicht gesendet werden. Bitte versuchen Sie es später erneut. + Danke – Ihr Fehlerbericht wurde erfasst. + Wird gesendet… + Beschreiben Sie, was passiert ist + Was ist passiert? + Genehmigen + Zurück + Abbrechen + Abbrechen + Dateien ändern + Dateien auswählen + Ordner auswählen + Löschen + Schließen + Neue Übertragung + Übertragung löschen + .vnd-Datei sichern + Einladung teilen + Einstellungen öffnen + Empfangen + Empfang starten + Ablehnen + Datei entfernen + Standard verwenden + Wiederholen + Freigabe starten + Übertragung wird vorbereitet… + In „Dateien“ anzeigen + Auf NFC-Tag schreiben + Gerätemodell + Gerätename + Anonyme Absturzberichte und Nutzungsereignisse senden, damit wir VniDrop verbessern können. Sie können dies jederzeit deaktivieren. Einladungen, Dateipfade und Übertragungsinhalte werden niemals einbezogen. + Die Freigabe von Diagnosedaten ist deaktiviert. + Die Freigabe von Diagnosedaten ist aktiviert. + Diagnosedaten teilen + Für das Scannen eines QR-Codes ist Kamerazugriff erforderlich. + Geräteinformationen konnten nicht geladen werden. + VniDrop konnte nicht auf die ausgewählten Dateien oder den Ordner zugreifen. Überprüfen Sie die Berechtigungen und versuchen Sie es erneut. + Etwas ist schiefgelaufen. Versuchen Sie es erneut. + VniDrop konnte den Start nicht abschließen. Schließen Sie die App und versuchen Sie es erneut. + Diese Einladung konnte nicht gelesen werden. Bitten Sie den Absender um eine neue. + Diese Einladung ist leer. Versuchen Sie, sie erneut zu öffnen. + Die native VniDrop-Bibliothek fehlt in diesem Build. + Dieses NFC-Tag konnte nicht verwendet werden. Versuchen Sie ein anderes. + Der Absender hat diese Übertragung nicht genehmigt oder sie wurde abgelehnt. + VniDrop konnte die Übertragungsdaten auf diesem Gerät nicht speichern. + Das ausgewählte Objekt konnte nicht geöffnet werden. Versuchen Sie, es erneut auszuwählen. + Wählen Sie mindestens ein Objekt zum Teilen aus. + VniDrop konnte seine Netzwerk-Sockets auf diesem Gerät nicht öffnen. + VniDrop startet noch. Öffnen Sie die Einladung gleich erneut. + Die Übertragung konnte nicht abgeschlossen werden. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut. + Empfängername + Absendername + Übertragungsname + Anzeigename + Berechtigung erforderlich + Nicht verfügbar + Ordner wird geprüft… + Bereit + Dateien + Größe + Status + Empfangen + Senden + Einstellungen + Netzwerk + Werden Sie über neue Empfangsanfragen benachrichtigt, während VniDrop im Hintergrund läuft. + Mitteilungen aktiviert. + Mitteilungen erlauben + Mitteilungen sind für VniDrop deaktiviert. Sie können sie in den Einstellungen aktivieren. + Die Mitteilungseinstellungen konnten nicht geöffnet werden. + Mitteilungen + Mitteilungen sind auf diesem Gerät nicht verfügbar. + Betriebssystem + Empfangene Übertragungen sichern in + Voreinstellungen + Abgebrochen + Abgeschlossen + Verbunden + Verbinden + Wird geladen + Fehlgeschlagen + Wird bereitgemacht + Übertragung unterbrochen + Wird vorbereitet + Bereit + Wird empfangen + Zugriff wird angefragt + Wird gesichert + Wird gesendet + Senden an %1$d + Bereit zum Teilen + Wird bearbeitet… + Wählen Sie die Ihnen zur Verfügung stehende Einladungsmethode. + Wie möchten Sie sich verbinden? + Verlauf löschen + Alle abgeschlossenen, fehlgeschlagenen und abgebrochenen Empfänge werden aus dem Verlauf von VniDrop entfernt. Heruntergeladene Dateien verbleiben auf diesem Gerät. + Empfangsverlauf löschen? + Übertragung empfangen. + „%1$s“ wird aus dem Verlauf von VniDrop entfernt. Die heruntergeladene Datei verbleibt auf diesem Gerät. + Aus Empfangsverlauf löschen + Aus dem Verlauf entfernen? + Öffnen Sie eine VniDrop-Einladung, scannen Sie einen QR-Code oder halten Sie das Gerät an ein NFC-Tag. + Noch nichts empfangen + Empfangsverlauf gelöscht. + Verlauf + Eine .vnd-Einladung öffnen + Wählen Sie eine auf diesem Gerät gespeicherte oder geteilte Einladung. + NFC-Tag lesen + Halten Sie dieses Gerät an das Einladungs-Tag des Absenders. + QR-Code scannen + Verwenden Sie die Kamera, um den VniDrop-Code des Absenders zu scannen. + Übertragungen, die Sie auf diesem Gerät empfangen haben. + Halten Sie das Gerät an das NFC-Tag… + VniDrop konnte in „Dateien“ nicht geöffnet werden. + Übertragung prüfen + Empfangen + VniDrop-Übertragung + Jeder mit dieser Übertragung + Keine Genehmigung erforderlich. Verwenden Sie dies nur für Objekte, die Sie unbedenklich teilen können. + Jeder mit der Einladung kann herunterladen, bis Sie die Freigabe beenden. Verwenden Sie dies nicht für private oder sensible Objekte. + Vor jedem Download fragen + Sie genehmigen oder lehnen jeden neuen Empfänger ab. + Wer kann sie empfangen? + Wählen Sie Dateien oder einen Ordner auf diesem Gerät aus. Sie können die Auswahl überprüfen, bevor Sie die Übertragung erstellen. + Wählen Sie, was Sie teilen möchten + Erstellen Sie eine Übertragung, entscheiden Sie, wer sie empfangen darf, und laden Sie diese Personen dann mit einem QR-Code, einem NFC-Tag oder einer Einladungsdatei ein. + Noch nichts geteilt + Größe nicht verfügbar + Ordner + Eine neue Übertragung erstellen + Neue Übertragung + Übertragung prüfen + %1$d Dateien ausgewählt + Freigabe beenden + Dies beendet die Übertragung und unterbricht alle, die sie gerade herunterladen. Sie verbleibt in Ihrem Verlauf als „Beendet“. + Übertragungen, die Sie von diesem Gerät aus teilen. + Senden + Übertragung erstellt. + Übertragungsdetails + Ihre Übertragungen + Ihr Name, wo Übertragungen gesichert werden, Darstellung und Mitteilungen. + Einstellungen + Ausblenden + Verfügbar + Abgebrochen + Abgeschlossen + Fehlgeschlagen + Wird vorbereitet + Wird empfangen + Beendet + Wird berechnet… + Alle Übertragungen löschen + Dies löscht alle Datensätze gesendeter und empfangener Übertragungen aus Ihrem Verlauf. Ihre empfangenen Dateien werden nicht gelöscht. Hinweis: Die Übertragungs-Engine behält ihre gespeicherten Inhalte, sodass die Übertragungsdaten möglicherweise nicht abnehmen. Dies kann nicht rückgängig gemacht werden. + Wird gelöscht… + Übertragungsdaten werden von der Übertragungs-Engine verwaltet – Ihr Verlauf sowie der Inhalt der von Ihnen geteilten Dateien. Die Schaltfläche unten löscht Ihre Übertragungsdatensätze; die Engine behält ihre gespeicherten Inhalte, sodass dieser Wert möglicherweise nicht sinkt. Empfangene Dateien sind Ihre heruntergeladenen Dateien und werden hier niemals gelöscht. + Empfangene Dateien + Temporäre Dateien + Speicher + Gesamt + Übertragungsdaten + Alle Übertragungen gelöscht + Wichtige Aktualisierungen zu dieser Übertragung ansehen + Aktivität + „%1$s“ wird nicht mehr geteilt und sein Übertragungsverlauf wird von diesem Gerät entfernt. + Übertragung löschen? + Übertragung gelöscht. + Wird gelöscht… + Übertragungsdetails + Empfängerzugriff genehmigt + Ein Empfänger hat die Übertragung abgeschlossen + Verbindung zum Absender + Wird geladen + Bei der Übertragung ist ein Problem aufgetreten + Ihre Übertragung wird vorbereitet + Bereit zum Teilen + Empfängerzugriff abgelehnt + Ein Empfänger hat Zugriff angefragt + Wird gesichert + Freigabe beendet + Übertragung aktualisiert + Einladung gesichert. + Gerät in der Nähe + Das Beschreiben von NFC-Tags ist auf diesem Gerät nicht verfügbar. + Halten Sie Ihr Gerät an ein beschreibbares NFC-Tag. + Einladung auf das NFC-Tag geschrieben. + Es gibt noch keine Aktivität anzuzeigen. + Noch niemand hat diese Übertragung angefragt. + Genehmigt – wartet auf Abschluss + Erfolgreich empfangen + Anfrage abgelaufen + Anfrage abgelehnt + Wartet auf Ihre Genehmigung + Status nicht verfügbar + %1$d abgeschlossen + Anfragen, Genehmigungen und abgeschlossene Zustellungen + %1$d warten + Empfänger + Mit VniDrop scannen, um diese Übertragung zu empfangen + QR-Code, Einladungsdatei und Optionen in der Nähe + Teilen + Nicht verfügbar + App-Version + + %1$d Datei + %1$d Dateien + + From 674e59f8ccf494829eb02b49a571e2fd03aa4fb7 Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 20 Jul 2026 11:25:11 +0200 Subject: [PATCH 09/13] feat(l10n): add European Portuguese translations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Translate all 253 user-facing strings to European Portuguese (pt-PT, formal; EP vocabulary — ficheiro, guardar, Definições, partilhar). Generates values-pt/strings.xml for KMP, pt localizations in the Apple catalog, and adds pt to CFBundleLocalizations. --- apple/VniDrop/Resources/Info.plist | 1 + apple/VniDrop/Resources/Localizable.xcstrings | 1530 +++++++++++++++++ localization/strings.json | 763 +++++--- .../composeResources/values-pt/strings.xml | 257 +++ 4 files changed, 2298 insertions(+), 253 deletions(-) create mode 100644 shared/src/commonMain/composeResources/values-pt/strings.xml diff --git a/apple/VniDrop/Resources/Info.plist b/apple/VniDrop/Resources/Info.plist index 5876924..2e2ca93 100644 --- a/apple/VniDrop/Resources/Info.plist +++ b/apple/VniDrop/Resources/Info.plist @@ -9,6 +9,7 @@ es it de + pt CADisableMinimumFrameDurationOnPhone diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index 8986802..713807f 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -38,6 +38,12 @@ "state": "needs_review", "value": "%1$@ %2$@ · %3$@" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } } } }, @@ -74,6 +80,12 @@ "state": "needs_review", "value": "%1$@ · %2$@" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } } } }, @@ -114,6 +126,12 @@ "state": "needs_review", "value": "Segnala un bug" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Comunicar um erro" + } } } }, @@ -150,6 +168,12 @@ "state": "needs_review", "value": "VniDrop trasferisce file e cartelle direttamente da un dispositivo a un altro sulla rete, senza caricarli su alcun servizio di hosting. Non c’è alcun account da creare e nessuna copia del suo trasferimento rimane nel cloud una volta terminato." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O VniDrop transfere ficheiros e pastas diretamente de um dispositivo para outro através da rede, sem os carregar para qualquer serviço de alojamento. Não é necessário criar qualquer conta e não fica nenhuma cópia da sua transferência na nuvem depois de terminar." + } } } }, @@ -186,6 +210,12 @@ "state": "needs_review", "value": "Un trasferimento diretto da dispositivo a dispositivo: i suoi file vanno direttamente al destinatario." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Uma transferência direta entre dispositivos — os seus ficheiros vão diretamente para o destinatário." + } } } }, @@ -222,6 +252,12 @@ "state": "needs_review", "value": "Le connessioni sono autenticate e cifrate end-to-end (tramite Iroh) e i file in arrivo vengono verificati tramite l’impronta del loro contenuto." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "As ligações são autenticadas e cifradas ponto a ponto (através do Iroh), e os ficheiros recebidos são verificados pela impressão digital do seu conteúdo." + } } } }, @@ -258,6 +294,12 @@ "state": "needs_review", "value": "Lei decide chi riceve: approvi ogni richiesta oppure apra un trasferimento a chiunque disponga dell’invito." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "É você quem decide quem recebe: aprove cada pedido ou abra uma transferência a qualquer pessoa que tenha o convite." + } } } }, @@ -294,6 +336,12 @@ "state": "needs_review", "value": "Senza account: non c’è nulla da registrare." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Sem conta — não há nada para registar." + } } } }, @@ -330,6 +378,12 @@ "state": "needs_review", "value": "Open source, rilasciato con licenza Apache 2.0." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Código aberto, publicado sob a licença Apache 2.0." + } } } }, @@ -366,6 +420,12 @@ "state": "needs_review", "value": "Cos’è VniDrop" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O que o VniDrop é" + } } } }, @@ -402,6 +462,12 @@ "state": "needs_review", "value": "Non è un’archiviazione cloud: nessun server conserva i suoi file e nulla resta nel cloud dopo un trasferimento." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não é armazenamento na nuvem — nenhum servidor guarda os seus ficheiros e nada fica na nuvem após uma transferência." + } } } }, @@ -438,6 +504,12 @@ "state": "needs_review", "value": "Non è una diffusione pubblica: un invito è un link di accesso privato, non un annuncio a tutti nelle vicinanze." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não é difusão pública — um convite é uma ligação de acesso privado, não um anúncio a toda a gente por perto." + } } } }, @@ -474,6 +546,12 @@ "state": "needs_review", "value": "Non è un servizio di sincronizzazione o di backup." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não é um serviço de sincronização ou de cópia de segurança." + } } } }, @@ -510,6 +588,12 @@ "state": "needs_review", "value": "Cosa non è VniDrop" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O que o VniDrop não é" + } } } }, @@ -546,6 +630,12 @@ "state": "needs_review", "value": "Licenza" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Licença" + } } } }, @@ -582,6 +672,12 @@ "state": "needs_review", "value": "Informativa sulla privacy" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Política de privacidade" + } } } }, @@ -618,6 +714,12 @@ "state": "needs_review", "value": "Gli inviti sono chiavi di accesso. Tratti un codice QR, un tag NFC o un file .vnd come un link di accesso privato e lo condivida solo con le persone previste, soprattutto con «Chiunque abbia questo trasferimento»." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Os convites são chaves de acesso. Trate um código QR, uma etiqueta NFC ou um ficheiro .vnd como uma ligação de acesso privado e partilhe-o apenas com as pessoas pretendidas — sobretudo com «Qualquer pessoa com esta transferência»." + } } } }, @@ -654,6 +756,12 @@ "state": "needs_review", "value": "Rifiuto predefinito: VniDrop serve solo il contenuto di una condivisione attiva e rifiuta le richieste sconosciute." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Recusa por predefinição — o VniDrop apenas fornece o conteúdo de uma partilha ativa e rejeita pedidos desconhecidos." + } } } }, @@ -690,6 +798,12 @@ "state": "needs_review", "value": "I file ricevuti vengono salvati sul suo dispositivo e non sovrascrivono mai un file esistente." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Os ficheiros recebidos são guardados no seu dispositivo e nunca substituem um ficheiro existente." + } } } }, @@ -726,6 +840,12 @@ "state": "needs_review", "value": "Informativa sulla privacy" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Política de privacidade" + } } } }, @@ -762,6 +882,12 @@ "state": "needs_review", "value": "Se due dispositivi non riescono a connettersi direttamente, la connessione cifrata può essere instradata tramite relay. I relay inoltrano solo pacchetti cifrati; non memorizzano mai i suoi file." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Se dois dispositivos não conseguirem ligar-se diretamente, a ligação cifrada pode ser retransmitida. Os retransmissores apenas encaminham pacotes cifrados; nunca guardam os seus ficheiros." + } } } }, @@ -798,6 +924,12 @@ "state": "needs_review", "value": "Privacy e sicurezza" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Privacidade e segurança" + } } } }, @@ -834,6 +966,12 @@ "state": "needs_review", "value": "Invii file direttamente. Mantenga il controllo su chi li riceve." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Envie ficheiros diretamente. Mantenha o controlo sobre quem os recebe." + } } } }, @@ -870,6 +1008,12 @@ "state": "needs_review", "value": "Informazioni" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Acerca de" + } } } }, @@ -906,6 +1050,12 @@ "state": "needs_review", "value": "Segue l’aspetto chiaro o scuro di questo dispositivo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Acompanhar o aspeto claro ou escuro deste dispositivo." + } } } }, @@ -942,6 +1092,12 @@ "state": "needs_review", "value": "Modalità scura" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Modo escuro" + } } } }, @@ -978,6 +1134,12 @@ "state": "needs_review", "value": "Modalità chiara" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Modo claro" + } } } }, @@ -1014,6 +1176,12 @@ "state": "needs_review", "value": "Sistema" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Sistema" + } } } }, @@ -1050,6 +1218,12 @@ "state": "needs_review", "value": "Aspetto" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aspeto" + } } } }, @@ -1086,6 +1260,12 @@ "state": "needs_review", "value": "Richiesta di ricezione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pedido de receção" + } } } }, @@ -1122,6 +1302,12 @@ "state": "needs_review", "value": "ID dispositivo: %1$@" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "ID do dispositivo: %1$@" + } } } }, @@ -1158,6 +1344,12 @@ "state": "needs_review", "value": "Un dispositivo nelle vicinanze" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Um dispositivo próximo" + } } } }, @@ -1194,6 +1386,12 @@ "state": "needs_review", "value": "%1$d richieste in attesa" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d pedidos em espera" + } } } }, @@ -1230,6 +1428,12 @@ "state": "needs_review", "value": "%1$@ vuole ricevere «%2$@»." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ quer receber «%2$@»." + } } } }, @@ -1266,6 +1470,12 @@ "state": "needs_review", "value": "Livello batteria" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nível da bateria" + } } } }, @@ -1302,6 +1512,12 @@ "state": "needs_review", "value": "nome@esempio.com" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "nome@exemplo.com" + } } } }, @@ -1338,6 +1554,12 @@ "state": "needs_review", "value": "Email di contatto (facoltativa)" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "E-mail de contacto (opcional)" + } } } }, @@ -1374,6 +1596,12 @@ "state": "needs_review", "value": "Ci dica cosa è andato storto. Alleghiamo le informazioni sul dispositivo e, facoltativamente, i log recenti (con i valori sensibili oscurati)." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Diga-nos o que correu mal. Anexamos informações do dispositivo e, opcionalmente, registos recentes (com os valores sensíveis ocultados)." + } } } }, @@ -1410,6 +1638,12 @@ "state": "needs_review", "value": "Informazioni sul dispositivo" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Informações do dispositivo" + } } } }, @@ -1446,6 +1680,12 @@ "state": "needs_review", "value": "Descriva cosa si aspettava che accadesse" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Descreva o que esperava que acontecesse" + } } } }, @@ -1482,6 +1722,12 @@ "state": "needs_review", "value": "Cosa si aspettava?" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O que esperava?" + } } } }, @@ -1518,6 +1764,12 @@ "state": "needs_review", "value": "Includi i log recenti" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Incluir registos recentes" + } } } }, @@ -1554,6 +1806,12 @@ "state": "needs_review", "value": "Ci aiuta a diagnosticare il problema. I valori sensibili vengono oscurati prima dell’invio." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ajuda-nos a diagnosticar o problema. Os valores sensíveis são ocultados antes do envio." + } } } }, @@ -1590,6 +1848,12 @@ "state": "needs_review", "value": "Dimensione dell’allegato dei log" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Tamanho do anexo de registos" + } } } }, @@ -1626,6 +1890,12 @@ "state": "needs_review", "value": "Descriva cosa si aspettava." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Descreva o que esperava." + } } } }, @@ -1662,6 +1932,12 @@ "state": "needs_review", "value": "Descriva cosa è accaduto." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Descreva o que aconteceu." + } } } }, @@ -1698,6 +1974,12 @@ "state": "needs_review", "value": "Elenchi i passaggi per riprodurre il problema" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Enumere os passos para reproduzir o problema" + } } } }, @@ -1734,6 +2016,12 @@ "state": "needs_review", "value": "Passaggi per riprodurre (facoltativi)" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Passos para reproduzir (opcional)" + } } } }, @@ -1770,6 +2058,12 @@ "state": "needs_review", "value": "Invia segnalazione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar relatório" + } } } }, @@ -1806,6 +2100,12 @@ "state": "needs_review", "value": "Impossibile inviare la segnalazione. Riprovi più tardi." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível enviar o relatório de erro. Tente novamente mais tarde." + } } } }, @@ -1842,6 +2142,12 @@ "state": "needs_review", "value": "Grazie: la sua segnalazione è stata registrata." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Obrigado — o seu relatório de erro foi registado." + } } } }, @@ -1878,6 +2184,12 @@ "state": "needs_review", "value": "Invio in corso…" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A enviar…" + } } } }, @@ -1914,6 +2226,12 @@ "state": "needs_review", "value": "Descriva cosa è accaduto" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Descreva o que aconteceu" + } } } }, @@ -1950,6 +2268,12 @@ "state": "needs_review", "value": "Cosa è accaduto?" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O que aconteceu?" + } } } }, @@ -1986,6 +2310,12 @@ "state": "needs_review", "value": "Approva" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aprovar" + } } } }, @@ -2022,6 +2352,12 @@ "state": "needs_review", "value": "Indietro" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Voltar" + } } } }, @@ -2058,6 +2394,12 @@ "state": "needs_review", "value": "Annulla" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelar" + } } } }, @@ -2094,6 +2436,12 @@ "state": "needs_review", "value": "Annulla" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelar" + } } } }, @@ -2130,6 +2478,12 @@ "state": "needs_review", "value": "Cambia file" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Alterar ficheiros" + } } } }, @@ -2166,6 +2520,12 @@ "state": "needs_review", "value": "Scegli file" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Escolher ficheiros" + } } } }, @@ -2202,6 +2562,12 @@ "state": "needs_review", "value": "Scegli cartella" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Escolher pasta" + } } } }, @@ -2238,6 +2604,12 @@ "state": "needs_review", "value": "Cancella" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Limpar" + } } } }, @@ -2274,6 +2646,12 @@ "state": "needs_review", "value": "Chiudi" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Fechar" + } } } }, @@ -2310,6 +2688,12 @@ "state": "needs_review", "value": "Nuovo trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nova transferência" + } } } }, @@ -2346,6 +2730,12 @@ "state": "needs_review", "value": "Elimina trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar transferência" + } } } }, @@ -2382,6 +2772,12 @@ "state": "needs_review", "value": "Salva file .vnd" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Guardar ficheiro .vnd" + } } } }, @@ -2418,6 +2814,12 @@ "state": "needs_review", "value": "Condividi invito" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Partilhar convite" + } } } }, @@ -2454,6 +2856,12 @@ "state": "needs_review", "value": "Apri Impostazioni" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Abrir Definições" + } } } }, @@ -2490,6 +2898,12 @@ "state": "needs_review", "value": "Ricevi" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Receber" + } } } }, @@ -2526,6 +2940,12 @@ "state": "needs_review", "value": "Inizia a ricevere" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Começar a receber" + } } } }, @@ -2562,6 +2982,12 @@ "state": "needs_review", "value": "Rifiuta" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Recusar" + } } } }, @@ -2598,6 +3024,12 @@ "state": "needs_review", "value": "Rimuovi file" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Remover ficheiro" + } } } }, @@ -2634,6 +3066,12 @@ "state": "needs_review", "value": "Usa predefinito" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Usar predefinição" + } } } }, @@ -2670,6 +3108,12 @@ "state": "needs_review", "value": "Riprova" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Tentar novamente" + } } } }, @@ -2706,6 +3150,12 @@ "state": "needs_review", "value": "Inizia a condividere" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Começar a partilhar" + } } } }, @@ -2742,6 +3192,12 @@ "state": "needs_review", "value": "Preparazione del trasferimento…" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A preparar a transferência…" + } } } }, @@ -2778,6 +3234,12 @@ "state": "needs_review", "value": "Mostra in File" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Mostrar em Ficheiros" + } } } }, @@ -2814,6 +3276,12 @@ "state": "needs_review", "value": "Scrivi su tag NFC" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Escrever em etiqueta NFC" + } } } }, @@ -2850,6 +3318,12 @@ "state": "needs_review", "value": "Modello del dispositivo" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Modelo do dispositivo" + } } } }, @@ -2886,6 +3360,12 @@ "state": "needs_review", "value": "Nome del dispositivo" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nome do dispositivo" + } } } }, @@ -2922,6 +3402,12 @@ "state": "needs_review", "value": "Invia report di arresto anomalo ed eventi d’uso anonimi per aiutarci a migliorare VniDrop. Può disattivarlo in qualsiasi momento. Inviti, percorsi dei file e contenuti dei trasferimenti non vengono mai inclusi." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar relatórios de falhas e eventos de utilização anónimos para nos ajudar a melhorar o VniDrop. Pode desativar isto a qualquer momento. Convites, caminhos de ficheiros e conteúdos das transferências nunca são incluídos." + } } } }, @@ -2958,6 +3444,12 @@ "state": "needs_review", "value": "La condivisione dei dati diagnostici è disattivata." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A partilha de diagnósticos está desativada." + } } } }, @@ -2994,6 +3486,12 @@ "state": "needs_review", "value": "La condivisione dei dati diagnostici è attivata." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A partilha de diagnósticos está ativada." + } } } }, @@ -3030,6 +3528,12 @@ "state": "needs_review", "value": "Condividi dati diagnostici" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Partilhar diagnósticos" + } } } }, @@ -3066,6 +3570,12 @@ "state": "needs_review", "value": "Per scansionare un codice QR è necessario l’accesso alla fotocamera." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "É necessário acesso à câmara para ler um código QR." + } } } }, @@ -3102,6 +3612,12 @@ "state": "needs_review", "value": "Impossibile caricare le informazioni sul dispositivo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível carregar as informações do dispositivo." + } } } }, @@ -3138,6 +3654,12 @@ "state": "needs_review", "value": "VniDrop non ha potuto accedere ai file o alla cartella selezionati. Controlli le autorizzazioni e riprovi." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O VniDrop não conseguiu aceder aos ficheiros ou à pasta selecionados. Verifique as permissões e tente novamente." + } } } }, @@ -3174,6 +3696,12 @@ "state": "needs_review", "value": "Qualcosa è andato storto. Riprovi." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Algo correu mal. Tente novamente." + } } } }, @@ -3210,6 +3738,12 @@ "state": "needs_review", "value": "VniDrop non ha potuto completare l’avvio. Chiuda l’app e riprovi." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O VniDrop não conseguiu concluir o arranque. Feche a app e tente novamente." + } } } }, @@ -3246,6 +3780,12 @@ "state": "needs_review", "value": "Impossibile leggere questo invito. Ne chieda uno nuovo al mittente." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível ler este convite. Peça um novo ao remetente." + } } } }, @@ -3282,6 +3822,12 @@ "state": "needs_review", "value": "Questo invito è vuoto. Provi ad aprirlo di nuovo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Esse convite está vazio. Tente abri-lo novamente." + } } } }, @@ -3318,6 +3864,12 @@ "state": "needs_review", "value": "La libreria nativa di VniDrop non è presente in questa build." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A biblioteca nativa do VniDrop está em falta nesta compilação." + } } } }, @@ -3354,6 +3906,12 @@ "state": "needs_review", "value": "Impossibile usare questo tag NFC. Ne provi un altro." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível utilizar esta etiqueta NFC. Tente outra." + } } } }, @@ -3390,6 +3948,12 @@ "state": "needs_review", "value": "Il mittente non ha approvato questo trasferimento, oppure è stato rifiutato." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O remetente não aprovou esta transferência, ou foi recusada." + } } } }, @@ -3426,6 +3990,12 @@ "state": "needs_review", "value": "VniDrop non ha potuto salvare i dati del trasferimento su questo dispositivo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O VniDrop não conseguiu guardar os dados da transferência neste dispositivo." + } } } }, @@ -3462,6 +4032,12 @@ "state": "needs_review", "value": "Impossibile aprire l’elemento selezionato. Provi a sceglierlo di nuovo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível abrir o item selecionado. Tente escolhê-lo novamente." + } } } }, @@ -3498,6 +4074,12 @@ "state": "needs_review", "value": "Selezioni almeno un elemento da condividere." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Selecione pelo menos um item para partilhar." + } } } }, @@ -3534,6 +4116,12 @@ "state": "needs_review", "value": "VniDrop non ha potuto aprire i suoi socket di rete su questo dispositivo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O VniDrop não conseguiu abrir os seus sockets de rede neste dispositivo." + } } } }, @@ -3570,6 +4158,12 @@ "state": "needs_review", "value": "VniDrop è ancora in fase di avvio. Riapra l’invito tra un momento." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O VniDrop ainda está a iniciar. Abra o convite novamente dentro de momentos." + } } } }, @@ -3606,6 +4200,12 @@ "state": "needs_review", "value": "Impossibile completare il trasferimento. Controlli la connessione e riprovi." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível concluir a transferência. Verifique a sua ligação e tente novamente." + } } } }, @@ -3642,6 +4242,12 @@ "state": "needs_review", "value": "Nome del destinatario" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nome do destinatário" + } } } }, @@ -3678,6 +4284,12 @@ "state": "needs_review", "value": "Nome del mittente" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nome do remetente" + } } } }, @@ -3714,6 +4326,12 @@ "state": "needs_review", "value": "Nome del trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nome da transferência" + } } } }, @@ -3750,6 +4368,12 @@ "state": "needs_review", "value": "Nome visualizzato" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nome a apresentar" + } } } }, @@ -3786,6 +4410,12 @@ "state": "needs_review", "value": "Autorizzazione necessaria" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Permissão necessária" + } } } }, @@ -3822,6 +4452,12 @@ "state": "needs_review", "value": "Non disponibile" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Indisponível" + } } } }, @@ -3858,6 +4494,12 @@ "state": "needs_review", "value": "Controllo della cartella…" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A verificar a pasta…" + } } } }, @@ -3894,6 +4536,12 @@ "state": "needs_review", "value": "Pronta" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto" + } } } }, @@ -3930,6 +4578,12 @@ "state": "needs_review", "value": "File" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ficheiros" + } } } }, @@ -3966,6 +4620,12 @@ "state": "needs_review", "value": "Dimensione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Tamanho" + } } } }, @@ -4002,6 +4662,12 @@ "state": "needs_review", "value": "Stato" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Estado" + } } } }, @@ -4038,6 +4704,12 @@ "state": "needs_review", "value": "Ricevi" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Receber" + } } } }, @@ -4074,6 +4746,12 @@ "state": "needs_review", "value": "Invia" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar" + } } } }, @@ -4110,6 +4788,12 @@ "state": "needs_review", "value": "Impostazioni" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Definições" + } } } }, @@ -4146,6 +4830,12 @@ "state": "needs_review", "value": "Rete" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Rede" + } } } }, @@ -4182,6 +4872,12 @@ "state": "needs_review", "value": "Ricevi avvisi sulle nuove richieste di ricezione quando VniDrop è in background." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Seja notificado sobre novos pedidos de receção enquanto o VniDrop está em segundo plano." + } } } }, @@ -4218,6 +4914,12 @@ "state": "needs_review", "value": "Notifiche attivate." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Notificações ativadas." + } } } }, @@ -4254,6 +4956,12 @@ "state": "needs_review", "value": "Consenti le notifiche" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Permitir notificações" + } } } }, @@ -4290,6 +4998,12 @@ "state": "needs_review", "value": "Le notifiche sono disattivate per VniDrop. Può attivarle in Impostazioni." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "As notificações estão desativadas para o VniDrop. Pode ativá-las nas Definições." + } } } }, @@ -4326,6 +5040,12 @@ "state": "needs_review", "value": "Impossibile aprire le impostazioni delle notifiche." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível abrir as definições de notificações." + } } } }, @@ -4362,6 +5082,12 @@ "state": "needs_review", "value": "Notifiche" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Notificações" + } } } }, @@ -4398,6 +5124,12 @@ "state": "needs_review", "value": "Le notifiche non sono disponibili su questo dispositivo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "As notificações não estão disponíveis neste dispositivo." + } } } }, @@ -4434,6 +5166,12 @@ "state": "needs_review", "value": "Sistema operativo" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Sistema operativo" + } } } }, @@ -4470,6 +5208,12 @@ "state": "needs_review", "value": "Salva i trasferimenti ricevuti in" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Guardar as transferências recebidas em" + } } } }, @@ -4506,6 +5250,12 @@ "state": "needs_review", "value": "Preferenze" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Preferências" + } } } }, @@ -4542,6 +5292,12 @@ "state": "needs_review", "value": "Annullato" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelado" + } } } }, @@ -4578,6 +5334,12 @@ "state": "needs_review", "value": "Completato" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Concluído" + } } } }, @@ -4614,6 +5376,12 @@ "state": "needs_review", "value": "Connesso" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ligado" + } } } }, @@ -4650,6 +5418,12 @@ "state": "needs_review", "value": "Connessione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A ligar" + } } } }, @@ -4686,6 +5460,12 @@ "state": "needs_review", "value": "Download" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A descarregar" + } } } }, @@ -4722,6 +5502,12 @@ "state": "needs_review", "value": "Non riuscito" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Falhou" + } } } }, @@ -4758,6 +5544,12 @@ "state": "needs_review", "value": "Preparazione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A preparar-se" + } } } }, @@ -4794,6 +5586,12 @@ "state": "needs_review", "value": "Trasferimento interrotto" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferência interrompida" + } } } }, @@ -4830,6 +5628,12 @@ "state": "needs_review", "value": "Preparazione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A preparar" + } } } }, @@ -4866,6 +5670,12 @@ "state": "needs_review", "value": "Pronto" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto" + } } } }, @@ -4902,6 +5712,12 @@ "state": "needs_review", "value": "Ricezione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A receber" + } } } }, @@ -4938,6 +5754,12 @@ "state": "needs_review", "value": "Richiesta di accesso" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A pedir acesso" + } } } }, @@ -4974,6 +5796,12 @@ "state": "needs_review", "value": "Salvataggio" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A guardar" + } } } }, @@ -5010,6 +5838,12 @@ "state": "needs_review", "value": "Invio" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A enviar" + } } } }, @@ -5046,6 +5880,12 @@ "state": "needs_review", "value": "Invio a %1$d" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A enviar para %1$d" + } } } }, @@ -5082,6 +5922,12 @@ "state": "needs_review", "value": "Pronto per la condivisione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto para partilhar" + } } } }, @@ -5118,6 +5964,12 @@ "state": "needs_review", "value": "Elaborazione…" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A processar…" + } } } }, @@ -5154,6 +6006,12 @@ "state": "needs_review", "value": "Scelga il metodo di invito a sua disposizione." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Escolha o método de convite ao seu dispor." + } } } }, @@ -5190,6 +6048,12 @@ "state": "needs_review", "value": "Come vuole connettersi?" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Como pretende ligar-se?" + } } } }, @@ -5226,6 +6090,12 @@ "state": "needs_review", "value": "Cancella cronologia" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Limpar histórico" + } } } }, @@ -5262,6 +6132,12 @@ "state": "needs_review", "value": "Tutte le ricezioni completate, non riuscite e annullate verranno rimosse dalla cronologia di VniDrop. I file scaricati rimarranno su questo dispositivo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Todas as receções concluídas, falhadas e canceladas serão removidas do histórico do VniDrop. Os ficheiros descarregados permanecerão neste dispositivo." + } } } }, @@ -5298,6 +6174,12 @@ "state": "needs_review", "value": "Cancellare la cronologia di ricezione?" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Limpar o histórico de receção?" + } } } }, @@ -5334,6 +6216,12 @@ "state": "needs_review", "value": "Trasferimento ricevuto." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferência recebida." + } } } }, @@ -5370,6 +6258,12 @@ "state": "needs_review", "value": "«%1$@» verrà rimosso dalla cronologia di VniDrop. Il file scaricato rimarrà su questo dispositivo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "«%1$@» será removido do histórico do VniDrop. O ficheiro descarregado permanecerá neste dispositivo." + } } } }, @@ -5406,6 +6300,12 @@ "state": "needs_review", "value": "Elimina dalla cronologia di ricezione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar do histórico de receção" + } } } }, @@ -5442,6 +6342,12 @@ "state": "needs_review", "value": "Rimuovere dalla cronologia?" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Remover do histórico?" + } } } }, @@ -5478,6 +6384,12 @@ "state": "needs_review", "value": "Apra un invito VniDrop, scansioni un codice QR o avvicini un tag NFC." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Abra um convite do VniDrop, leia um código QR ou aproxime uma etiqueta NFC." + } } } }, @@ -5514,6 +6426,12 @@ "state": "needs_review", "value": "Ancora nulla di ricevuto" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ainda não recebeu nada" + } } } }, @@ -5550,6 +6468,12 @@ "state": "needs_review", "value": "Cronologia di ricezione cancellata." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Histórico de receção limpo." + } } } }, @@ -5586,6 +6510,12 @@ "state": "needs_review", "value": "Cronologia" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Histórico" + } } } }, @@ -5622,6 +6552,12 @@ "state": "needs_review", "value": "Apri un invito .vnd" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Abrir um convite .vnd" + } } } }, @@ -5658,6 +6594,12 @@ "state": "needs_review", "value": "Scelga un invito salvato o condiviso su questo dispositivo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Escolha um convite guardado ou partilhado neste dispositivo." + } } } }, @@ -5694,6 +6636,12 @@ "state": "needs_review", "value": "Leggi tag NFC" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ler etiqueta NFC" + } } } }, @@ -5730,6 +6678,12 @@ "state": "needs_review", "value": "Avvicini questo dispositivo al tag di invito del mittente." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aproxime este dispositivo da etiqueta de convite do remetente." + } } } }, @@ -5766,6 +6720,12 @@ "state": "needs_review", "value": "Scansiona codice QR" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ler código QR" + } } } }, @@ -5802,6 +6762,12 @@ "state": "needs_review", "value": "Usi la fotocamera per scansionare il codice VniDrop del mittente." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Use a câmara para ler o código VniDrop do remetente." + } } } }, @@ -5838,6 +6804,12 @@ "state": "needs_review", "value": "Trasferimenti che ha ricevuto su questo dispositivo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferências que recebeu neste dispositivo." + } } } }, @@ -5874,6 +6846,12 @@ "state": "needs_review", "value": "Avvicini al tag NFC…" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aproxime da etiqueta NFC…" + } } } }, @@ -5910,6 +6888,12 @@ "state": "needs_review", "value": "Impossibile aprire VniDrop in File." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível abrir o VniDrop em Ficheiros." + } } } }, @@ -5946,6 +6930,12 @@ "state": "needs_review", "value": "Rivedi trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Rever transferência" + } } } }, @@ -5982,6 +6972,12 @@ "state": "needs_review", "value": "Ricevi" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Receber" + } } } }, @@ -6018,6 +7014,12 @@ "state": "needs_review", "value": "Trasferimento VniDrop" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferência VniDrop" + } } } }, @@ -6054,6 +7056,12 @@ "state": "needs_review", "value": "Chiunque abbia questo trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Qualquer pessoa com esta transferência" + } } } }, @@ -6090,6 +7098,12 @@ "state": "needs_review", "value": "Nessuna approvazione richiesta. Da usare solo per elementi che non ha problemi a condividere." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não é necessária aprovação. Utilize apenas para itens que não se importe de partilhar." + } } } }, @@ -6126,6 +7140,12 @@ "state": "needs_review", "value": "Chiunque abbia l’invito può scaricare finché non interrompe la condivisione. Non lo usi per elementi privati o sensibili." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Qualquer pessoa com o convite pode descarregar até parar de partilhar. Não utilize para itens privados ou sensíveis." + } } } }, @@ -6162,6 +7182,12 @@ "state": "needs_review", "value": "Chiedi prima di ogni download" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Perguntar antes de cada descarga" + } } } }, @@ -6198,6 +7224,12 @@ "state": "needs_review", "value": "Approva o rifiuta ogni nuovo destinatario." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aprova ou recusa cada novo destinatário." + } } } }, @@ -6234,6 +7266,12 @@ "state": "needs_review", "value": "Chi può riceverlo?" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Quem a pode receber?" + } } } }, @@ -6270,6 +7308,12 @@ "state": "needs_review", "value": "Selezioni file o una cartella da questo dispositivo. Potrà rivedere la selezione prima di creare il trasferimento." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Selecione ficheiros ou uma pasta deste dispositivo. Poderá rever a seleção antes de criar a transferência." + } } } }, @@ -6306,6 +7350,12 @@ "state": "needs_review", "value": "Scelga cosa condividere" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Escolha o que partilhar" + } } } }, @@ -6342,6 +7392,12 @@ "state": "needs_review", "value": "Crei un trasferimento, decida chi può riceverlo, poi inviti queste persone con un codice QR, un tag NFC o un file di invito." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Crie uma transferência, decida quem a pode receber e depois convide essas pessoas com um código QR, uma etiqueta NFC ou um ficheiro de convite." + } } } }, @@ -6378,6 +7434,12 @@ "state": "needs_review", "value": "Ancora nulla di condiviso" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ainda não partilhou nada" + } } } }, @@ -6414,6 +7476,12 @@ "state": "needs_review", "value": "Dimensione non disponibile" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Tamanho indisponível" + } } } }, @@ -6450,6 +7518,12 @@ "state": "needs_review", "value": "Cartella" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pasta" + } } } }, @@ -6486,6 +7560,12 @@ "state": "needs_review", "value": "Crea un nuovo trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Criar uma nova transferência" + } } } }, @@ -6522,6 +7602,12 @@ "state": "needs_review", "value": "Nuovo trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nova transferência" + } } } }, @@ -6558,6 +7644,12 @@ "state": "needs_review", "value": "Rivedi trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Rever transferência" + } } } }, @@ -6594,6 +7686,12 @@ "state": "needs_review", "value": "%1$d file selezionati" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d ficheiros selecionados" + } } } }, @@ -6630,6 +7728,12 @@ "state": "needs_review", "value": "Interrompi condivisione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Parar de partilhar" + } } } }, @@ -6666,6 +7770,12 @@ "state": "needs_review", "value": "Questo interrompe il trasferimento e blocca chiunque lo stia scaricando. Rimane nella sua cronologia come Interrotto." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Isto para a transferência e interrompe quem estiver a descarregá-la. Permanece no seu histórico como Parada." + } } } }, @@ -6702,6 +7812,12 @@ "state": "needs_review", "value": "Trasferimenti che sta condividendo da questo dispositivo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferências que está a partilhar a partir deste dispositivo." + } } } }, @@ -6738,6 +7854,12 @@ "state": "needs_review", "value": "Invia" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar" + } } } }, @@ -6774,6 +7896,12 @@ "state": "needs_review", "value": "Trasferimento creato." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferência criada." + } } } }, @@ -6810,6 +7938,12 @@ "state": "needs_review", "value": "Dettagli del trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Detalhes da transferência" + } } } }, @@ -6846,6 +7980,12 @@ "state": "needs_review", "value": "I suoi trasferimenti" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "As suas transferências" + } } } }, @@ -6882,6 +8022,12 @@ "state": "needs_review", "value": "Il suo nome, dove vengono salvati i trasferimenti, l’aspetto e le notifiche." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O seu nome, onde as transferências são guardadas, o aspeto e as notificações." + } } } }, @@ -6918,6 +8064,12 @@ "state": "needs_review", "value": "Impostazioni" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Definições" + } } } }, @@ -6954,6 +8106,12 @@ "state": "needs_review", "value": "Ignora" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ignorar" + } } } }, @@ -6990,6 +8148,12 @@ "state": "needs_review", "value": "Disponibile" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Disponível" + } } } }, @@ -7026,6 +8190,12 @@ "state": "needs_review", "value": "Annullato" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelado" + } } } }, @@ -7062,6 +8232,12 @@ "state": "needs_review", "value": "Completato" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Concluído" + } } } }, @@ -7098,6 +8274,12 @@ "state": "needs_review", "value": "Non riuscito" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Falhou" + } } } }, @@ -7134,6 +8316,12 @@ "state": "needs_review", "value": "Preparazione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A preparar" + } } } }, @@ -7170,6 +8358,12 @@ "state": "needs_review", "value": "Ricezione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A receber" + } } } }, @@ -7206,6 +8400,12 @@ "state": "needs_review", "value": "Interrotto" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Parada" + } } } }, @@ -7242,6 +8442,12 @@ "state": "needs_review", "value": "Calcolo…" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A calcular…" + } } } }, @@ -7278,6 +8484,12 @@ "state": "needs_review", "value": "Elimina tutti i trasferimenti" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar todas as transferências" + } } } }, @@ -7314,6 +8526,12 @@ "state": "needs_review", "value": "Questo cancella dalla cronologia tutti i record dei trasferimenti inviati e ricevuti. I suoi file ricevuti non vengono eliminati. Nota: il motore di trasferimento conserva il contenuto memorizzato, quindi i dati di trasferimento potrebbero non diminuire. Questa operazione non può essere annullata." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Isto elimina do seu histórico todos os registos de transferências enviadas e recebidas. Os seus ficheiros recebidos não são eliminados. Nota: o motor de transferência mantém o conteúdo armazenado, pelo que os dados de transferência podem não diminuir. Isto não pode ser anulado." + } } } }, @@ -7350,6 +8568,12 @@ "state": "needs_review", "value": "Eliminazione…" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A eliminar…" + } } } }, @@ -7386,6 +8610,12 @@ "state": "needs_review", "value": "I dati di trasferimento sono gestiti dal motore di trasferimento: la sua cronologia più il contenuto dei file che ha condiviso. Il pulsante qui sotto cancella i record dei trasferimenti; il motore conserva il contenuto memorizzato, quindi questo valore potrebbe non diminuire. I file ricevuti sono i file che ha scaricato e non vengono mai eliminati qui." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Os dados de transferência são geridos pelo motor de transferência — o seu histórico mais o conteúdo dos ficheiros que partilhou. O botão abaixo elimina os seus registos de transferências; o motor mantém o conteúdo armazenado, pelo que este valor pode não descer. Os ficheiros recebidos são os ficheiros que descarregou e nunca são eliminados aqui." + } } } }, @@ -7422,6 +8652,12 @@ "state": "needs_review", "value": "File ricevuti" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ficheiros recebidos" + } } } }, @@ -7458,6 +8694,12 @@ "state": "needs_review", "value": "File temporanei" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ficheiros temporários" + } } } }, @@ -7494,6 +8736,12 @@ "state": "needs_review", "value": "Archiviazione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Armazenamento" + } } } }, @@ -7530,6 +8778,12 @@ "state": "needs_review", "value": "Totale" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Total" + } } } }, @@ -7566,6 +8820,12 @@ "state": "needs_review", "value": "Dati di trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Dados de transferência" + } } } }, @@ -7602,6 +8862,12 @@ "state": "needs_review", "value": "Tutti i trasferimenti eliminati" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Todas as transferências eliminadas" + } } } }, @@ -7638,6 +8904,12 @@ "state": "needs_review", "value": "Veda gli aggiornamenti importanti di questo trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ver as atualizações importantes desta transferência" + } } } }, @@ -7674,6 +8946,12 @@ "state": "needs_review", "value": "Attività" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Atividade" + } } } }, @@ -7710,6 +8988,12 @@ "state": "needs_review", "value": "«%1$@» non verrà più condiviso e la sua cronologia di trasferimento verrà rimossa da questo dispositivo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "«%1$@» deixará de ser partilhado e o seu histórico de transferência será removido deste dispositivo." + } } } }, @@ -7746,6 +9030,12 @@ "state": "needs_review", "value": "Eliminare il trasferimento?" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar a transferência?" + } } } }, @@ -7782,6 +9072,12 @@ "state": "needs_review", "value": "Trasferimento eliminato." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferência eliminada." + } } } }, @@ -7818,6 +9114,12 @@ "state": "needs_review", "value": "Eliminazione…" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A eliminar…" + } } } }, @@ -7854,6 +9156,12 @@ "state": "needs_review", "value": "Dettagli del trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Detalhes da transferência" + } } } }, @@ -7890,6 +9198,12 @@ "state": "needs_review", "value": "Accesso del destinatario approvato" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Acesso do destinatário aprovado" + } } } }, @@ -7926,6 +9240,12 @@ "state": "needs_review", "value": "Un destinatario ha completato il trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Um destinatário concluiu a transferência" + } } } }, @@ -7962,6 +9282,12 @@ "state": "needs_review", "value": "Connessione al mittente" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A ligar ao remetente" + } } } }, @@ -7998,6 +9324,12 @@ "state": "needs_review", "value": "Download" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A descarregar" + } } } }, @@ -8034,6 +9366,12 @@ "state": "needs_review", "value": "Il trasferimento ha riscontrato un problema" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A transferência teve um problema" + } } } }, @@ -8070,6 +9408,12 @@ "state": "needs_review", "value": "Preparazione del trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A preparar a sua transferência" + } } } }, @@ -8106,6 +9450,12 @@ "state": "needs_review", "value": "Pronto per la condivisione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto para partilhar" + } } } }, @@ -8142,6 +9492,12 @@ "state": "needs_review", "value": "Accesso del destinatario rifiutato" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Acesso do destinatário recusado" + } } } }, @@ -8178,6 +9534,12 @@ "state": "needs_review", "value": "Un destinatario ha richiesto l’accesso" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Um destinatário pediu acesso" + } } } }, @@ -8214,6 +9576,12 @@ "state": "needs_review", "value": "Salvataggio" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A guardar" + } } } }, @@ -8250,6 +9618,12 @@ "state": "needs_review", "value": "Condivisione interrotta" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Partilha parada" + } } } }, @@ -8286,6 +9660,12 @@ "state": "needs_review", "value": "Trasferimento aggiornato" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferência atualizada" + } } } }, @@ -8382,6 +9762,24 @@ } } } + }, + "pt": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d ficheiro" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d ficheiros" + } + } + } + } } } }, @@ -8418,6 +9816,12 @@ "state": "needs_review", "value": "Invito salvato." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Convite guardado." + } } } }, @@ -8454,6 +9858,12 @@ "state": "needs_review", "value": "Dispositivo nelle vicinanze" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Dispositivo próximo" + } } } }, @@ -8490,6 +9900,12 @@ "state": "needs_review", "value": "La scrittura dei tag NFC non è disponibile su questo dispositivo." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A escrita de etiquetas NFC não está disponível neste dispositivo." + } } } }, @@ -8526,6 +9942,12 @@ "state": "needs_review", "value": "Avvicini il dispositivo a un tag NFC scrivibile." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aproxime o seu dispositivo de uma etiqueta NFC gravável." + } } } }, @@ -8562,6 +9984,12 @@ "state": "needs_review", "value": "Invito scritto sul tag NFC." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Convite escrito na etiqueta NFC." + } } } }, @@ -8598,6 +10026,12 @@ "state": "needs_review", "value": "Non c’è ancora alcuna attività da mostrare." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ainda não há atividade para mostrar." + } } } }, @@ -8634,6 +10068,12 @@ "state": "needs_review", "value": "Nessuno ha ancora richiesto questo trasferimento." } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ainda ninguém pediu esta transferência." + } } } }, @@ -8670,6 +10110,12 @@ "state": "needs_review", "value": "Approvato: in attesa del completamento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aprovado — a aguardar conclusão" + } } } }, @@ -8706,6 +10152,12 @@ "state": "needs_review", "value": "Ricevuto correttamente" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Recebido com sucesso" + } } } }, @@ -8742,6 +10194,12 @@ "state": "needs_review", "value": "Richiesta scaduta" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pedido expirado" + } } } }, @@ -8778,6 +10236,12 @@ "state": "needs_review", "value": "Richiesta rifiutata" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pedido recusado" + } } } }, @@ -8814,6 +10278,12 @@ "state": "needs_review", "value": "In attesa della sua approvazione" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A aguardar a sua aprovação" + } } } }, @@ -8850,6 +10320,12 @@ "state": "needs_review", "value": "Stato non disponibile" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Estado indisponível" + } } } }, @@ -8886,6 +10362,12 @@ "state": "needs_review", "value": "%1$d completati" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d concluídos" + } } } }, @@ -8922,6 +10404,12 @@ "state": "needs_review", "value": "Richieste, approvazioni e consegne completate" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pedidos, aprovações e entregas concluídas" + } } } }, @@ -8958,6 +10446,12 @@ "state": "needs_review", "value": "%1$d in attesa" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d em espera" + } } } }, @@ -8994,6 +10488,12 @@ "state": "needs_review", "value": "Destinatari" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Destinatários" + } } } }, @@ -9030,6 +10530,12 @@ "state": "needs_review", "value": "Scansioni con VniDrop per ricevere questo trasferimento" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Leia com o VniDrop para receber esta transferência" + } } } }, @@ -9066,6 +10572,12 @@ "state": "needs_review", "value": "Codice QR, file di invito e opzioni nelle vicinanze" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Código QR, ficheiro de convite e opções por perto" + } } } }, @@ -9102,6 +10614,12 @@ "state": "needs_review", "value": "Condividi" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Partilhar" + } } } }, @@ -9138,6 +10656,12 @@ "state": "needs_review", "value": "Non disponibile" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Indisponível" + } } } }, @@ -9174,6 +10698,12 @@ "state": "needs_review", "value": "Versione dell’app" } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Versão da app" + } } } } diff --git a/localization/strings.json b/localization/strings.json index cccb727..8a4904f 100644 --- a/localization/strings.json +++ b/localization/strings.json @@ -6,7 +6,8 @@ "fr", "es", "it", - "de" + "de", + "pt" ], "strings": { "%@": { @@ -39,7 +40,8 @@ "fr": "{arg1} {arg2} · {arg3}", "es": "{arg1} {arg2} · {arg3}", "it": "{arg1} {arg2} · {arg3}", - "de": "{arg1} {arg2} · {arg3}" + "de": "{arg1} {arg2} · {arg3}", + "pt": "{arg1} {arg2} · {arg3}" } }, "%@ · %@": { @@ -62,7 +64,8 @@ "fr": "{arg1} · {arg2}", "es": "{arg1} · {arg2}", "it": "{arg1} · {arg2}", - "de": "{arg1} · {arg2}" + "de": "{arg1} · {arg2}", + "pt": "{arg1} · {arg2}" } }, "%@%%": { @@ -78,7 +81,8 @@ "fr": "Signaler un bug", "es": "Informar de un error", "it": "Segnala un bug", - "de": "Fehler melden" + "de": "Fehler melden", + "pt": "Comunicar um erro" } }, "about_description": { @@ -88,7 +92,8 @@ "fr": "VniDrop transfère fichiers et dossiers directement d’un appareil à un autre sur le réseau, sans les téléverser vers un service d’hébergement. Aucun compte à créer, et aucune copie de votre transfert ne reste dans le cloud une fois terminé.", "es": "VniDrop transfiere archivos y carpetas directamente de un dispositivo a otro a través de la red, sin subirlos a ningún servicio de alojamiento. No hay que crear ninguna cuenta y no queda ninguna copia de su transferencia en la nube una vez que termina.", "it": "VniDrop trasferisce file e cartelle direttamente da un dispositivo a un altro sulla rete, senza caricarli su alcun servizio di hosting. Non c’è alcun account da creare e nessuna copia del suo trasferimento rimane nel cloud una volta terminato.", - "de": "VniDrop überträgt Dateien und Ordner direkt von einem Gerät auf ein anderes über das Netzwerk, ohne sie auf einen Hosting-Dienst hochzuladen. Es muss kein Konto erstellt werden, und nach Abschluss verbleibt keine Kopie Ihrer Übertragung in der Cloud." + "de": "VniDrop überträgt Dateien und Ordner direkt von einem Gerät auf ein anderes über das Netzwerk, ohne sie auf einen Hosting-Dienst hochzuladen. Es muss kein Konto erstellt werden, und nach Abschluss verbleibt keine Kopie Ihrer Übertragung in der Cloud.", + "pt": "O VniDrop transfere ficheiros e pastas diretamente de um dispositivo para outro através da rede, sem os carregar para qualquer serviço de alojamento. Não é necessário criar qualquer conta e não fica nenhuma cópia da sua transferência na nuvem depois de terminar." } }, "about_is_direct": { @@ -98,7 +103,8 @@ "fr": "Un transfert direct d’appareil à appareil — vos fichiers vont droit au destinataire.", "es": "Una transferencia directa entre dispositivos: sus archivos van directamente al destinatario.", "it": "Un trasferimento diretto da dispositivo a dispositivo: i suoi file vanno direttamente al destinatario.", - "de": "Eine direkte Gerät-zu-Gerät-Übertragung – Ihre Dateien gehen direkt an den Empfänger." + "de": "Eine direkte Gerät-zu-Gerät-Übertragung – Ihre Dateien gehen direkt an den Empfänger.", + "pt": "Uma transferência direta entre dispositivos — os seus ficheiros vão diretamente para o destinatário." } }, "about_is_encrypted": { @@ -108,7 +114,8 @@ "fr": "Les connexions sont authentifiées et chiffrées de bout en bout (via Iroh), et les fichiers entrants sont vérifiés par leur empreinte de contenu.", "es": "Las conexiones están autenticadas y cifradas de extremo a extremo (mediante Iroh), y los archivos entrantes se verifican por su huella de contenido.", "it": "Le connessioni sono autenticate e cifrate end-to-end (tramite Iroh) e i file in arrivo vengono verificati tramite l’impronta del loro contenuto.", - "de": "Verbindungen sind authentifiziert und Ende-zu-Ende-verschlüsselt (über Iroh), und eingehende Dateien werden anhand ihres Inhalts-Hashs überprüft." + "de": "Verbindungen sind authentifiziert und Ende-zu-Ende-verschlüsselt (über Iroh), und eingehende Dateien werden anhand ihres Inhalts-Hashs überprüft.", + "pt": "As ligações são autenticadas e cifradas ponto a ponto (através do Iroh), e os ficheiros recebidos são verificados pela impressão digital do seu conteúdo." } }, "about_is_in_control": { @@ -118,7 +125,8 @@ "fr": "Vous décidez qui reçoit : approuvez chaque demande, ou ouvrez un transfert à toute personne disposant de l’invitation.", "es": "Usted decide quién recibe: apruebe cada solicitud o abra una transferencia a cualquiera que tenga la invitación.", "it": "Lei decide chi riceve: approvi ogni richiesta oppure apra un trasferimento a chiunque disponga dell’invito.", - "de": "Sie entscheiden, wer empfängt: Genehmigen Sie jede Anfrage oder öffnen Sie eine Übertragung für alle, die die Einladung besitzen." + "de": "Sie entscheiden, wer empfängt: Genehmigen Sie jede Anfrage oder öffnen Sie eine Übertragung für alle, die die Einladung besitzen.", + "pt": "É você quem decide quem recebe: aprove cada pedido ou abra uma transferência a qualquer pessoa que tenha o convite." } }, "about_is_no_account": { @@ -128,7 +136,8 @@ "fr": "Sans compte — il n’y a rien à créer.", "es": "Sin cuenta: no hay nada que registrar.", "it": "Senza account: non c’è nulla da registrare.", - "de": "Ohne Konto – es gibt nichts zu registrieren." + "de": "Ohne Konto – es gibt nichts zu registrieren.", + "pt": "Sem conta — não há nada para registar." } }, "about_is_open": { @@ -138,7 +147,8 @@ "fr": "Open source, publié sous licence Apache 2.0.", "es": "Código abierto, publicado bajo la licencia Apache 2.0.", "it": "Open source, rilasciato con licenza Apache 2.0.", - "de": "Open Source, veröffentlicht unter der Apache-2.0-Lizenz." + "de": "Open Source, veröffentlicht unter der Apache-2.0-Lizenz.", + "pt": "Código aberto, publicado sob a licença Apache 2.0." } }, "about_is_title": { @@ -148,7 +158,8 @@ "fr": "Ce qu’est VniDrop", "es": "Qué es VniDrop", "it": "Cos’è VniDrop", - "de": "Was VniDrop ist" + "de": "Was VniDrop ist", + "pt": "O que o VniDrop é" } }, "about_isnt_cloud": { @@ -158,7 +169,8 @@ "fr": "Pas un stockage cloud — aucun serveur ne détient vos fichiers, et rien n’attend dans le cloud après un transfert.", "es": "No es almacenamiento en la nube: ningún servidor guarda sus archivos y nada queda en la nube después de una transferencia.", "it": "Non è un’archiviazione cloud: nessun server conserva i suoi file e nulla resta nel cloud dopo un trasferimento.", - "de": "Kein Cloud-Speicher – kein Server hält Ihre Dateien, und nach einer Übertragung wartet nichts in der Cloud." + "de": "Kein Cloud-Speicher – kein Server hält Ihre Dateien, und nach einer Übertragung wartet nichts in der Cloud.", + "pt": "Não é armazenamento na nuvem — nenhum servidor guarda os seus ficheiros e nada fica na nuvem após uma transferência." } }, "about_isnt_public": { @@ -168,7 +180,8 @@ "fr": "Pas une diffusion publique — une invitation est un lien d’accès privé, pas une annonce à tout le voisinage.", "es": "No es difusión pública: una invitación es un enlace de acceso privado, no un anuncio para todos los que estén cerca.", "it": "Non è una diffusione pubblica: un invito è un link di accesso privato, non un annuncio a tutti nelle vicinanze.", - "de": "Keine öffentliche Übertragung – eine Einladung ist ein privater Zugangslink, keine Ankündigung an alle in der Nähe." + "de": "Keine öffentliche Übertragung – eine Einladung ist ein privater Zugangslink, keine Ankündigung an alle in der Nähe.", + "pt": "Não é difusão pública — um convite é uma ligação de acesso privado, não um anúncio a toda a gente por perto." } }, "about_isnt_sync": { @@ -178,7 +191,8 @@ "fr": "Pas un service de synchronisation ou de sauvegarde.", "es": "No es un servicio de sincronización ni de copia de seguridad.", "it": "Non è un servizio di sincronizzazione o di backup.", - "de": "Kein Synchronisierungs- oder Backup-Dienst." + "de": "Kein Synchronisierungs- oder Backup-Dienst.", + "pt": "Não é um serviço de sincronização ou de cópia de segurança." } }, "about_isnt_title": { @@ -188,7 +202,8 @@ "fr": "Ce que VniDrop n’est pas", "es": "Qué no es VniDrop", "it": "Cosa non è VniDrop", - "de": "Was VniDrop nicht ist" + "de": "Was VniDrop nicht ist", + "pt": "O que o VniDrop não é" } }, "about_license_label": { @@ -198,7 +213,8 @@ "fr": "Licence", "es": "Licencia", "it": "Licenza", - "de": "Lizenz" + "de": "Lizenz", + "pt": "Licença" } }, "about_privacy": { @@ -208,7 +224,8 @@ "fr": "Politique de confidentialité", "es": "Política de privacidad", "it": "Informativa sulla privacy", - "de": "Datenschutzrichtlinie" + "de": "Datenschutzrichtlinie", + "pt": "Política de privacidade" } }, "about_privacy_capability": { @@ -218,7 +235,8 @@ "fr": "Les invitations sont des clés d’accès. Traitez un QR code, un tag NFC ou un fichier .vnd comme un lien d’accès privé et ne le partagez qu’avec les personnes visées — en particulier avec « Toute personne disposant de ce transfert ».", "es": "Las invitaciones son claves de acceso. Trate un código QR, una etiqueta NFC o un archivo .vnd como un enlace de acceso privado y compártalo solo con las personas previstas, especialmente con «Cualquiera que tenga esta transferencia».", "it": "Gli inviti sono chiavi di accesso. Tratti un codice QR, un tag NFC o un file .vnd come un link di accesso privato e lo condivida solo con le persone previste, soprattutto con «Chiunque abbia questo trasferimento».", - "de": "Einladungen sind Zugangsschlüssel. Behandeln Sie einen QR-Code, ein NFC-Tag oder eine .vnd-Datei wie einen privaten Zugangslink und teilen Sie ihn nur mit den vorgesehenen Personen – insbesondere bei „Jeder mit dieser Übertragung“." + "de": "Einladungen sind Zugangsschlüssel. Behandeln Sie einen QR-Code, ein NFC-Tag oder eine .vnd-Datei wie einen privaten Zugangslink und teilen Sie ihn nur mit den vorgesehenen Personen – insbesondere bei „Jeder mit dieser Übertragung“.", + "pt": "Os convites são chaves de acesso. Trate um código QR, uma etiqueta NFC ou um ficheiro .vnd como uma ligação de acesso privado e partilhe-o apenas com as pessoas pretendidas — sobretudo com «Qualquer pessoa com esta transferência»." } }, "about_privacy_deny": { @@ -228,7 +246,8 @@ "fr": "Refus par défaut — VniDrop ne sert que le contenu d’un partage actif et rejette les demandes inconnues.", "es": "Denegación por defecto: VniDrop solo sirve el contenido de un recurso compartido activo y rechaza las solicitudes desconocidas.", "it": "Rifiuto predefinito: VniDrop serve solo il contenuto di una condivisione attiva e rifiuta le richieste sconosciute.", - "de": "Standardmäßig ablehnen – VniDrop stellt nur den Inhalt einer aktiven Freigabe bereit und weist unbekannte Anfragen ab." + "de": "Standardmäßig ablehnen – VniDrop stellt nur den Inhalt einer aktiven Freigabe bereit und weist unbekannte Anfragen ab.", + "pt": "Recusa por predefinição — o VniDrop apenas fornece o conteúdo de uma partilha ativa e rejeita pedidos desconhecidos." } }, "about_privacy_local": { @@ -238,7 +257,8 @@ "fr": "Les fichiers reçus sont enregistrés sur votre appareil et n’écrasent jamais un fichier existant.", "es": "Los archivos recibidos se guardan en su dispositivo y nunca sobrescriben un archivo existente.", "it": "I file ricevuti vengono salvati sul suo dispositivo e non sovrascrivono mai un file esistente.", - "de": "Empfangene Dateien werden auf Ihrem Gerät gespeichert und überschreiben niemals eine vorhandene Datei." + "de": "Empfangene Dateien werden auf Ihrem Gerät gespeichert und überschreiben niemals eine vorhandene Datei.", + "pt": "Os ficheiros recebidos são guardados no seu dispositivo e nunca substituem um ficheiro existente." } }, "about_privacy_policy_label": { @@ -248,7 +268,8 @@ "fr": "Politique de confidentialité", "es": "Política de privacidad", "it": "Informativa sulla privacy", - "de": "Datenschutzrichtlinie" + "de": "Datenschutzrichtlinie", + "pt": "Política de privacidade" } }, "about_privacy_relay": { @@ -258,7 +279,8 @@ "fr": "Si deux appareils ne peuvent pas se connecter directement, la connexion chiffrée peut être relayée. Les relais ne transmettent que des paquets chiffrés ; ils ne stockent jamais vos fichiers.", "es": "Si dos dispositivos no pueden conectarse directamente, la conexión cifrada puede retransmitirse. Los relés solo reenvían paquetes cifrados; nunca almacenan sus archivos.", "it": "Se due dispositivi non riescono a connettersi direttamente, la connessione cifrata può essere instradata tramite relay. I relay inoltrano solo pacchetti cifrati; non memorizzano mai i suoi file.", - "de": "Wenn zwei Geräte sich nicht direkt verbinden können, kann die verschlüsselte Verbindung weitergeleitet werden. Relays leiten nur verschlüsselte Pakete weiter; sie speichern niemals Ihre Dateien." + "de": "Wenn zwei Geräte sich nicht direkt verbinden können, kann die verschlüsselte Verbindung weitergeleitet werden. Relays leiten nur verschlüsselte Pakete weiter; sie speichern niemals Ihre Dateien.", + "pt": "Se dois dispositivos não conseguirem ligar-se diretamente, a ligação cifrada pode ser retransmitida. Os retransmissores apenas encaminham pacotes cifrados; nunca guardam os seus ficheiros." } }, "about_privacy_title": { @@ -268,7 +290,8 @@ "fr": "Confidentialité et sécurité", "es": "Privacidad y seguridad", "it": "Privacy e sicurezza", - "de": "Datenschutz & Sicherheit" + "de": "Datenschutz & Sicherheit", + "pt": "Privacidade e segurança" } }, "about_tagline": { @@ -278,7 +301,8 @@ "fr": "Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit.", "es": "Envíe archivos directamente. Mantenga el control de quién los recibe.", "it": "Invii file direttamente. Mantenga il controllo su chi li riceve.", - "de": "Senden Sie Dateien direkt. Behalten Sie die Kontrolle darüber, wer sie empfängt." + "de": "Senden Sie Dateien direkt. Behalten Sie die Kontrolle darüber, wer sie empfängt.", + "pt": "Envie ficheiros diretamente. Mantenha o controlo sobre quem os recebe." } }, "about_title": { @@ -288,7 +312,8 @@ "fr": "À propos", "es": "Acerca de", "it": "Informazioni", - "de": "Über" + "de": "Über", + "pt": "Acerca de" } }, "appearance_auto_description": { @@ -298,7 +323,8 @@ "fr": "Suivre l’apparence claire ou sombre de cet appareil.", "es": "Seguir la apariencia clara u oscura de este dispositivo.", "it": "Segue l’aspetto chiaro o scuro di questo dispositivo.", - "de": "Der hellen oder dunklen Darstellung dieses Geräts folgen." + "de": "Der hellen oder dunklen Darstellung dieses Geräts folgen.", + "pt": "Acompanhar o aspeto claro ou escuro deste dispositivo." } }, "appearance_dark_mode": { @@ -308,7 +334,8 @@ "fr": "Mode sombre", "es": "Modo oscuro", "it": "Modalità scura", - "de": "Dunkelmodus" + "de": "Dunkelmodus", + "pt": "Modo escuro" } }, "appearance_light_mode": { @@ -318,7 +345,8 @@ "fr": "Mode clair", "es": "Modo claro", "it": "Modalità chiara", - "de": "Hellmodus" + "de": "Hellmodus", + "pt": "Modo claro" } }, "appearance_system_mode": { @@ -328,7 +356,8 @@ "fr": "Système", "es": "Sistema", "it": "Sistema", - "de": "System" + "de": "System", + "pt": "Sistema" } }, "appearance_title": { @@ -338,7 +367,8 @@ "fr": "Apparence", "es": "Apariencia", "it": "Aspetto", - "de": "Darstellung" + "de": "Darstellung", + "pt": "Aspeto" } }, "approval_connection_request": { @@ -348,7 +378,8 @@ "fr": "Demande de réception", "es": "Solicitud de recepción", "it": "Richiesta di ricezione", - "de": "Empfangsanfrage" + "de": "Empfangsanfrage", + "pt": "Pedido de receção" } }, "approval_endpoint_id": { @@ -364,7 +395,8 @@ "fr": "Identifiant de l’appareil : {arg1}", "es": "ID del dispositivo: {arg1}", "it": "ID dispositivo: {arg1}", - "de": "Geräte-ID: {arg1}" + "de": "Geräte-ID: {arg1}", + "pt": "ID do dispositivo: {arg1}" } }, "approval_nearby_device": { @@ -374,7 +406,8 @@ "fr": "Un appareil à proximité", "es": "Un dispositivo cercano", "it": "Un dispositivo nelle vicinanze", - "de": "Ein Gerät in der Nähe" + "de": "Ein Gerät in der Nähe", + "pt": "Um dispositivo próximo" } }, "approval_pending_count": { @@ -390,7 +423,8 @@ "fr": "{count} demandes en attente", "es": "{count} solicitudes en espera", "it": "{count} richieste in attesa", - "de": "{count} Anfragen warten" + "de": "{count} Anfragen warten", + "pt": "{count} pedidos em espera" } }, "approval_request_body": { @@ -410,7 +444,8 @@ "fr": "{arg1} souhaite recevoir « {arg2} ».", "es": "{arg1} quiere recibir «{arg2}».", "it": "{arg1} vuole ricevere «{arg2}».", - "de": "{arg1} möchte „{arg2}“ empfangen." + "de": "{arg1} möchte „{arg2}“ empfangen.", + "pt": "{arg1} quer receber «{arg2}»." } }, "battery_level_title": { @@ -420,7 +455,8 @@ "fr": "Niveau de batterie", "es": "Nivel de batería", "it": "Livello batteria", - "de": "Batteriestand" + "de": "Batteriestand", + "pt": "Nível da bateria" } }, "bug_report_contact_hint": { @@ -430,7 +466,8 @@ "fr": "nom@exemple.com", "es": "nombre@ejemplo.com", "it": "nome@esempio.com", - "de": "name@beispiel.com" + "de": "name@beispiel.com", + "pt": "nome@exemplo.com" } }, "bug_report_contact_label": { @@ -440,7 +477,8 @@ "fr": "E-mail de contact (facultatif)", "es": "Correo de contacto (opcional)", "it": "Email di contatto (facoltativa)", - "de": "Kontakt-E-Mail (optional)" + "de": "Kontakt-E-Mail (optional)", + "pt": "E-mail de contacto (opcional)" } }, "bug_report_description": { @@ -450,7 +488,8 @@ "fr": "Dites-nous ce qui s’est passé. Nous joignons les infos de l’appareil et, en option, les journaux récents (valeurs sensibles masquées).", "es": "Cuéntenos qué salió mal. Adjuntamos información del dispositivo y, opcionalmente, registros recientes (con los valores sensibles ocultos).", "it": "Ci dica cosa è andato storto. Alleghiamo le informazioni sul dispositivo e, facoltativamente, i log recenti (con i valori sensibili oscurati).", - "de": "Sagen Sie uns, was schiefgelaufen ist. Wir hängen Geräteinformationen und optional aktuelle Protokolle an (sensible Werte werden geschwärzt)." + "de": "Sagen Sie uns, was schiefgelaufen ist. Wir hängen Geräteinformationen und optional aktuelle Protokolle an (sensible Werte werden geschwärzt).", + "pt": "Diga-nos o que correu mal. Anexamos informações do dispositivo e, opcionalmente, registos recentes (com os valores sensíveis ocultados)." } }, "bug_report_device_section": { @@ -460,7 +499,8 @@ "fr": "Informations sur l’appareil", "es": "Información del dispositivo", "it": "Informazioni sul dispositivo", - "de": "Geräteinformationen" + "de": "Geräteinformationen", + "pt": "Informações do dispositivo" } }, "bug_report_expected_hint": { @@ -470,7 +510,8 @@ "fr": "Décrivez ce à quoi vous vous attendiez", "es": "Describa lo que esperaba que ocurriera", "it": "Descriva cosa si aspettava che accadesse", - "de": "Beschreiben Sie, was Sie erwartet haben" + "de": "Beschreiben Sie, was Sie erwartet haben", + "pt": "Descreva o que esperava que acontecesse" } }, "bug_report_expected_label": { @@ -480,7 +521,8 @@ "fr": "À quoi vous attendiez-vous ?", "es": "¿Qué esperaba?", "it": "Cosa si aspettava?", - "de": "Was haben Sie erwartet?" + "de": "Was haben Sie erwartet?", + "pt": "O que esperava?" } }, "bug_report_include_logs": { @@ -490,7 +532,8 @@ "fr": "Inclure les journaux récents", "es": "Incluir registros recientes", "it": "Includi i log recenti", - "de": "Aktuelle Protokolle einschließen" + "de": "Aktuelle Protokolle einschließen", + "pt": "Incluir registos recentes" } }, "bug_report_include_logs_description": { @@ -500,7 +543,8 @@ "fr": "Nous aide à diagnostiquer le problème. Les valeurs sensibles sont masquées avant l’envoi.", "es": "Nos ayuda a diagnosticar el problema. Los valores sensibles se ocultan antes de enviarlos.", "it": "Ci aiuta a diagnosticare il problema. I valori sensibili vengono oscurati prima dell’invio.", - "de": "Hilft uns, das Problem zu diagnostizieren. Sensible Werte werden vor dem Senden geschwärzt." + "de": "Hilft uns, das Problem zu diagnostizieren. Sensible Werte werden vor dem Senden geschwärzt.", + "pt": "Ajuda-nos a diagnosticar o problema. Os valores sensíveis são ocultados antes do envio." } }, "bug_report_logs_size": { @@ -510,7 +554,8 @@ "fr": "Taille de la pièce jointe des journaux", "es": "Tamaño del archivo de registros", "it": "Dimensione dell’allegato dei log", - "de": "Größe des Protokollanhangs" + "de": "Größe des Protokollanhangs", + "pt": "Tamanho do anexo de registos" } }, "bug_report_missing_expected": { @@ -520,7 +565,8 @@ "fr": "Veuillez décrire ce à quoi vous vous attendiez.", "es": "Describa lo que esperaba.", "it": "Descriva cosa si aspettava.", - "de": "Bitte beschreiben Sie, was Sie erwartet haben." + "de": "Bitte beschreiben Sie, was Sie erwartet haben.", + "pt": "Descreva o que esperava." } }, "bug_report_missing_what": { @@ -530,7 +576,8 @@ "fr": "Veuillez décrire ce qui s’est passé.", "es": "Describa lo que ocurrió.", "it": "Descriva cosa è accaduto.", - "de": "Bitte beschreiben Sie, was passiert ist." + "de": "Bitte beschreiben Sie, was passiert ist.", + "pt": "Descreva o que aconteceu." } }, "bug_report_steps_hint": { @@ -540,7 +587,8 @@ "fr": "Listez les étapes pour reproduire le problème", "es": "Enumere los pasos para reproducir el problema", "it": "Elenchi i passaggi per riprodurre il problema", - "de": "Listen Sie die Schritte zum Reproduzieren des Problems auf" + "de": "Listen Sie die Schritte zum Reproduzieren des Problems auf", + "pt": "Enumere os passos para reproduzir o problema" } }, "bug_report_steps_label": { @@ -550,7 +598,8 @@ "fr": "Étapes pour reproduire (facultatif)", "es": "Pasos para reproducir (opcional)", "it": "Passaggi per riprodurre (facoltativi)", - "de": "Schritte zum Reproduzieren (optional)" + "de": "Schritte zum Reproduzieren (optional)", + "pt": "Passos para reproduzir (opcional)" } }, "bug_report_submit": { @@ -560,7 +609,8 @@ "fr": "Envoyer le rapport", "es": "Enviar informe", "it": "Invia segnalazione", - "de": "Bericht senden" + "de": "Bericht senden", + "pt": "Enviar relatório" } }, "bug_report_submit_failed": { @@ -570,7 +620,8 @@ "fr": "Impossible d’envoyer le rapport de bug. Réessayez plus tard.", "es": "No se pudo enviar el informe de error. Inténtelo de nuevo más tarde.", "it": "Impossibile inviare la segnalazione. Riprovi più tardi.", - "de": "Der Fehlerbericht konnte nicht gesendet werden. Bitte versuchen Sie es später erneut." + "de": "Der Fehlerbericht konnte nicht gesendet werden. Bitte versuchen Sie es später erneut.", + "pt": "Não foi possível enviar o relatório de erro. Tente novamente mais tarde." } }, "bug_report_submitted": { @@ -580,7 +631,8 @@ "fr": "Merci — votre rapport de bug a été enregistré.", "es": "Gracias: su informe de error se ha registrado.", "it": "Grazie: la sua segnalazione è stata registrata.", - "de": "Danke – Ihr Fehlerbericht wurde erfasst." + "de": "Danke – Ihr Fehlerbericht wurde erfasst.", + "pt": "Obrigado — o seu relatório de erro foi registado." } }, "bug_report_submitting": { @@ -590,7 +642,8 @@ "fr": "Envoi…", "es": "Enviando…", "it": "Invio in corso…", - "de": "Wird gesendet…" + "de": "Wird gesendet…", + "pt": "A enviar…" } }, "bug_report_what_hint": { @@ -600,7 +653,8 @@ "fr": "Décrivez ce qui s’est passé", "es": "Describa lo que ocurrió", "it": "Descriva cosa è accaduto", - "de": "Beschreiben Sie, was passiert ist" + "de": "Beschreiben Sie, was passiert ist", + "pt": "Descreva o que aconteceu" } }, "bug_report_what_label": { @@ -610,7 +664,8 @@ "fr": "Que s’est-il passé ?", "es": "¿Qué ocurrió?", "it": "Cosa è accaduto?", - "de": "Was ist passiert?" + "de": "Was ist passiert?", + "pt": "O que aconteceu?" } }, "button_approve": { @@ -620,7 +675,8 @@ "fr": "Approuver", "es": "Aprobar", "it": "Approva", - "de": "Genehmigen" + "de": "Genehmigen", + "pt": "Aprovar" } }, "button_back": { @@ -630,7 +686,8 @@ "fr": "Retour", "es": "Atrás", "it": "Indietro", - "de": "Zurück" + "de": "Zurück", + "pt": "Voltar" } }, "button_cancel": { @@ -640,7 +697,8 @@ "fr": "Annuler", "es": "Cancelar", "it": "Annulla", - "de": "Abbrechen" + "de": "Abbrechen", + "pt": "Cancelar" } }, "button_cancel_receive": { @@ -650,7 +708,8 @@ "fr": "Annuler", "es": "Cancelar", "it": "Annulla", - "de": "Abbrechen" + "de": "Abbrechen", + "pt": "Cancelar" } }, "button_change_files": { @@ -660,7 +719,8 @@ "fr": "Modifier les fichiers", "es": "Cambiar archivos", "it": "Cambia file", - "de": "Dateien ändern" + "de": "Dateien ändern", + "pt": "Alterar ficheiros" } }, "button_choose_files": { @@ -670,7 +730,8 @@ "fr": "Choisir des fichiers", "es": "Elegir archivos", "it": "Scegli file", - "de": "Dateien auswählen" + "de": "Dateien auswählen", + "pt": "Escolher ficheiros" } }, "button_choose_folder": { @@ -680,7 +741,8 @@ "fr": "Choisir un dossier", "es": "Elegir carpeta", "it": "Scegli cartella", - "de": "Ordner auswählen" + "de": "Ordner auswählen", + "pt": "Escolher pasta" } }, "button_clear": { @@ -690,7 +752,8 @@ "fr": "Effacer", "es": "Borrar", "it": "Cancella", - "de": "Löschen" + "de": "Löschen", + "pt": "Limpar" } }, "button_close": { @@ -700,7 +763,8 @@ "fr": "Fermer", "es": "Cerrar", "it": "Chiudi", - "de": "Schließen" + "de": "Schließen", + "pt": "Fechar" } }, "button_create_new_transfer": { @@ -710,7 +774,8 @@ "fr": "Nouveau transfert", "es": "Nueva transferencia", "it": "Nuovo trasferimento", - "de": "Neue Übertragung" + "de": "Neue Übertragung", + "pt": "Nova transferência" } }, "button_delete_transfer": { @@ -720,7 +785,8 @@ "fr": "Supprimer le transfert", "es": "Eliminar transferencia", "it": "Elimina trasferimento", - "de": "Übertragung löschen" + "de": "Übertragung löschen", + "pt": "Eliminar transferência" } }, "button_download_invitation": { @@ -730,7 +796,8 @@ "fr": "Enregistrer le fichier .vnd", "es": "Guardar archivo .vnd", "it": "Salva file .vnd", - "de": ".vnd-Datei sichern" + "de": ".vnd-Datei sichern", + "pt": "Guardar ficheiro .vnd" } }, "button_native_share": { @@ -740,7 +807,8 @@ "fr": "Partager l’invitation", "es": "Compartir invitación", "it": "Condividi invito", - "de": "Einladung teilen" + "de": "Einladung teilen", + "pt": "Partilhar convite" } }, "button_open_settings": { @@ -750,7 +818,8 @@ "fr": "Ouvrir les Réglages", "es": "Abrir Ajustes", "it": "Apri Impostazioni", - "de": "Einstellungen öffnen" + "de": "Einstellungen öffnen", + "pt": "Abrir Definições" } }, "button_receive": { @@ -760,7 +829,8 @@ "fr": "Recevoir", "es": "Recibir", "it": "Ricevi", - "de": "Empfangen" + "de": "Empfangen", + "pt": "Receber" } }, "button_receive_files": { @@ -770,7 +840,8 @@ "fr": "Commencer à recevoir", "es": "Empezar a recibir", "it": "Inizia a ricevere", - "de": "Empfang starten" + "de": "Empfang starten", + "pt": "Começar a receber" } }, "button_refuse": { @@ -780,7 +851,8 @@ "fr": "Refuser", "es": "Rechazar", "it": "Rifiuta", - "de": "Ablehnen" + "de": "Ablehnen", + "pt": "Recusar" } }, "button_remove_file": { @@ -790,7 +862,8 @@ "fr": "Retirer le fichier", "es": "Quitar archivo", "it": "Rimuovi file", - "de": "Datei entfernen" + "de": "Datei entfernen", + "pt": "Remover ficheiro" } }, "button_reset_default": { @@ -800,7 +873,8 @@ "fr": "Valeur par défaut", "es": "Usar predeterminado", "it": "Usa predefinito", - "de": "Standard verwenden" + "de": "Standard verwenden", + "pt": "Usar predefinição" } }, "button_retry": { @@ -810,7 +884,8 @@ "fr": "Réessayer", "es": "Reintentar", "it": "Riprova", - "de": "Wiederholen" + "de": "Wiederholen", + "pt": "Tentar novamente" } }, "button_share_file": { @@ -820,7 +895,8 @@ "fr": "Commencer le partage", "es": "Empezar a compartir", "it": "Inizia a condividere", - "de": "Freigabe starten" + "de": "Freigabe starten", + "pt": "Começar a partilhar" } }, "button_sharing_file": { @@ -830,7 +906,8 @@ "fr": "Préparation du transfert…", "es": "Preparando la transferencia…", "it": "Preparazione del trasferimento…", - "de": "Übertragung wird vorbereitet…" + "de": "Übertragung wird vorbereitet…", + "pt": "A preparar a transferência…" } }, "button_show_in_files": { @@ -840,7 +917,8 @@ "fr": "Afficher dans Fichiers", "es": "Mostrar en Archivos", "it": "Mostra in File", - "de": "In „Dateien“ anzeigen" + "de": "In „Dateien“ anzeigen", + "pt": "Mostrar em Ficheiros" } }, "button_write_nfc": { @@ -850,7 +928,8 @@ "fr": "Écrire sur un tag NFC", "es": "Escribir en etiqueta NFC", "it": "Scrivi su tag NFC", - "de": "Auf NFC-Tag schreiben" + "de": "Auf NFC-Tag schreiben", + "pt": "Escrever em etiqueta NFC" } }, "device_model_title": { @@ -860,7 +939,8 @@ "fr": "Modèle de l’appareil", "es": "Modelo del dispositivo", "it": "Modello del dispositivo", - "de": "Gerätemodell" + "de": "Gerätemodell", + "pt": "Modelo do dispositivo" } }, "device_name_title": { @@ -870,7 +950,8 @@ "fr": "Nom de l’appareil", "es": "Nombre del dispositivo", "it": "Nome del dispositivo", - "de": "Gerätename" + "de": "Gerätename", + "pt": "Nome do dispositivo" } }, "diagnostics_description": { @@ -880,7 +961,8 @@ "fr": "Envoyer des rapports de plantage et des événements d’utilisation anonymes pour nous aider à améliorer VniDrop. Vous pouvez désactiver cela à tout moment. Les invitations, chemins de fichiers et contenus de transfert ne sont jamais inclus.", "es": "Enviar informes de fallos y eventos de uso anónimos para ayudarnos a mejorar VniDrop. Puede desactivarlo en cualquier momento. Las invitaciones, las rutas de archivos y el contenido de las transferencias nunca se incluyen.", "it": "Invia report di arresto anomalo ed eventi d’uso anonimi per aiutarci a migliorare VniDrop. Può disattivarlo in qualsiasi momento. Inviti, percorsi dei file e contenuti dei trasferimenti non vengono mai inclusi.", - "de": "Anonyme Absturzberichte und Nutzungsereignisse senden, damit wir VniDrop verbessern können. Sie können dies jederzeit deaktivieren. Einladungen, Dateipfade und Übertragungsinhalte werden niemals einbezogen." + "de": "Anonyme Absturzberichte und Nutzungsereignisse senden, damit wir VniDrop verbessern können. Sie können dies jederzeit deaktivieren. Einladungen, Dateipfade und Übertragungsinhalte werden niemals einbezogen.", + "pt": "Enviar relatórios de falhas e eventos de utilização anónimos para nos ajudar a melhorar o VniDrop. Pode desativar isto a qualquer momento. Convites, caminhos de ficheiros e conteúdos das transferências nunca são incluídos." } }, "diagnostics_disabled_message": { @@ -890,7 +972,8 @@ "fr": "Le partage des diagnostics est désactivé.", "es": "El uso compartido de diagnósticos está desactivado.", "it": "La condivisione dei dati diagnostici è disattivata.", - "de": "Die Freigabe von Diagnosedaten ist deaktiviert." + "de": "Die Freigabe von Diagnosedaten ist deaktiviert.", + "pt": "A partilha de diagnósticos está desativada." } }, "diagnostics_enabled_message": { @@ -900,7 +983,8 @@ "fr": "Le partage des diagnostics est activé.", "es": "El uso compartido de diagnósticos está activado.", "it": "La condivisione dei dati diagnostici è attivata.", - "de": "Die Freigabe von Diagnosedaten ist aktiviert." + "de": "Die Freigabe von Diagnosedaten ist aktiviert.", + "pt": "A partilha de diagnósticos está ativada." } }, "diagnostics_title": { @@ -910,7 +994,8 @@ "fr": "Partager les diagnostics", "es": "Compartir diagnósticos", "it": "Condividi dati diagnostici", - "de": "Diagnosedaten teilen" + "de": "Diagnosedaten teilen", + "pt": "Partilhar diagnósticos" } }, "error_camera": { @@ -920,7 +1005,8 @@ "fr": "L’accès à la caméra est nécessaire pour scanner un QR code.", "es": "Se necesita acceso a la cámara para escanear un código QR.", "it": "Per scansionare un codice QR è necessario l’accesso alla fotocamera.", - "de": "Für das Scannen eines QR-Codes ist Kamerazugriff erforderlich." + "de": "Für das Scannen eines QR-Codes ist Kamerazugriff erforderlich.", + "pt": "É necessário acesso à câmara para ler um código QR." } }, "error_device_info": { @@ -930,7 +1016,8 @@ "fr": "Impossible de charger les informations de l’appareil.", "es": "No se pudo cargar la información del dispositivo.", "it": "Impossibile caricare le informazioni sul dispositivo.", - "de": "Geräteinformationen konnten nicht geladen werden." + "de": "Geräteinformationen konnten nicht geladen werden.", + "pt": "Não foi possível carregar as informações do dispositivo." } }, "error_filesystem": { @@ -940,7 +1027,8 @@ "fr": "VniDrop n’a pas pu accéder aux fichiers ou au dossier sélectionnés. Vérifiez les autorisations et réessayez.", "es": "VniDrop no pudo acceder a los archivos o la carpeta seleccionados. Compruebe los permisos e inténtelo de nuevo.", "it": "VniDrop non ha potuto accedere ai file o alla cartella selezionati. Controlli le autorizzazioni e riprovi.", - "de": "VniDrop konnte nicht auf die ausgewählten Dateien oder den Ordner zugreifen. Überprüfen Sie die Berechtigungen und versuchen Sie es erneut." + "de": "VniDrop konnte nicht auf die ausgewählten Dateien oder den Ordner zugreifen. Überprüfen Sie die Berechtigungen und versuchen Sie es erneut.", + "pt": "O VniDrop não conseguiu aceder aos ficheiros ou à pasta selecionados. Verifique as permissões e tente novamente." } }, "error_generic": { @@ -950,7 +1038,8 @@ "fr": "Une erreur est survenue. Réessayez.", "es": "Algo salió mal. Inténtelo de nuevo.", "it": "Qualcosa è andato storto. Riprovi.", - "de": "Etwas ist schiefgelaufen. Versuchen Sie es erneut." + "de": "Etwas ist schiefgelaufen. Versuchen Sie es erneut.", + "pt": "Algo correu mal. Tente novamente." } }, "error_initialization": { @@ -960,7 +1049,8 @@ "fr": "VniDrop n’a pas pu terminer son démarrage. Fermez l’app et réessayez.", "es": "VniDrop no pudo terminar de iniciarse. Cierre la app e inténtelo de nuevo.", "it": "VniDrop non ha potuto completare l’avvio. Chiuda l’app e riprovi.", - "de": "VniDrop konnte den Start nicht abschließen. Schließen Sie die App und versuchen Sie es erneut." + "de": "VniDrop konnte den Start nicht abschließen. Schließen Sie die App und versuchen Sie es erneut.", + "pt": "O VniDrop não conseguiu concluir o arranque. Feche a app e tente novamente." } }, "error_invalid_ticket": { @@ -970,7 +1060,8 @@ "fr": "Cette invitation n’a pas pu être lue. Demandez-en une nouvelle à l’expéditeur.", "es": "No se pudo leer esta invitación. Pida al remitente una nueva.", "it": "Impossibile leggere questo invito. Ne chieda uno nuovo al mittente.", - "de": "Diese Einladung konnte nicht gelesen werden. Bitten Sie den Absender um eine neue." + "de": "Diese Einladung konnte nicht gelesen werden. Bitten Sie den Absender um eine neue.", + "pt": "Não foi possível ler este convite. Peça um novo ao remetente." } }, "error_invitation_empty": { @@ -980,7 +1071,8 @@ "fr": "Cette invitation est vide. Essayez de l’ouvrir à nouveau.", "es": "Esa invitación está vacía. Intente abrirla de nuevo.", "it": "Questo invito è vuoto. Provi ad aprirlo di nuovo.", - "de": "Diese Einladung ist leer. Versuchen Sie, sie erneut zu öffnen." + "de": "Diese Einladung ist leer. Versuchen Sie, sie erneut zu öffnen.", + "pt": "Esse convite está vazio. Tente abri-lo novamente." } }, "error_missing_native_library": { @@ -990,7 +1082,8 @@ "fr": "La bibliothèque native de VniDrop est absente de cette version.", "es": "Falta la biblioteca nativa de VniDrop en esta versión.", "it": "La libreria nativa di VniDrop non è presente in questa build.", - "de": "Die native VniDrop-Bibliothek fehlt in diesem Build." + "de": "Die native VniDrop-Bibliothek fehlt in diesem Build.", + "pt": "A biblioteca nativa do VniDrop está em falta nesta compilação." } }, "error_nfc": { @@ -1000,7 +1093,8 @@ "fr": "Ce tag NFC n’a pas pu être utilisé. Essayez-en un autre.", "es": "No se pudo usar esta etiqueta NFC. Pruebe con otra.", "it": "Impossibile usare questo tag NFC. Ne provi un altro.", - "de": "Dieses NFC-Tag konnte nicht verwendet werden. Versuchen Sie ein anderes." + "de": "Dieses NFC-Tag konnte nicht verwendet werden. Versuchen Sie ein anderes.", + "pt": "Não foi possível utilizar esta etiqueta NFC. Tente outra." } }, "error_permission": { @@ -1010,7 +1104,8 @@ "fr": "L’expéditeur n’a pas approuvé ce transfert, ou il a été refusé.", "es": "El remitente no ha aprobado esta transferencia, o fue rechazada.", "it": "Il mittente non ha approvato questo trasferimento, oppure è stato rifiutato.", - "de": "Der Absender hat diese Übertragung nicht genehmigt oder sie wurde abgelehnt." + "de": "Der Absender hat diese Übertragung nicht genehmigt oder sie wurde abgelehnt.", + "pt": "O remetente não aprovou esta transferência, ou foi recusada." } }, "error_repository": { @@ -1020,7 +1115,8 @@ "fr": "VniDrop n’a pas pu enregistrer les données de transfert sur cet appareil.", "es": "VniDrop no pudo guardar los datos de la transferencia en este dispositivo.", "it": "VniDrop non ha potuto salvare i dati del trasferimento su questo dispositivo.", - "de": "VniDrop konnte die Übertragungsdaten auf diesem Gerät nicht speichern." + "de": "VniDrop konnte die Übertragungsdaten auf diesem Gerät nicht speichern.", + "pt": "O VniDrop não conseguiu guardar os dados da transferência neste dispositivo." } }, "error_selection_failed": { @@ -1030,7 +1126,8 @@ "fr": "Impossible d’ouvrir l’élément sélectionné. Essayez de le choisir à nouveau.", "es": "No se pudo abrir el elemento seleccionado. Intente elegirlo de nuevo.", "it": "Impossibile aprire l’elemento selezionato. Provi a sceglierlo di nuovo.", - "de": "Das ausgewählte Objekt konnte nicht geöffnet werden. Versuchen Sie, es erneut auszuwählen." + "de": "Das ausgewählte Objekt konnte nicht geöffnet werden. Versuchen Sie, es erneut auszuwählen.", + "pt": "Não foi possível abrir o item selecionado. Tente escolhê-lo novamente." } }, "error_share_empty": { @@ -1040,7 +1137,8 @@ "fr": "Sélectionnez au moins un élément à partager.", "es": "Seleccione al menos un elemento para compartir.", "it": "Selezioni almeno un elemento da condividere.", - "de": "Wählen Sie mindestens ein Objekt zum Teilen aus." + "de": "Wählen Sie mindestens ein Objekt zum Teilen aus.", + "pt": "Selecione pelo menos um item para partilhar." } }, "error_socket_bind": { @@ -1050,7 +1148,8 @@ "fr": "VniDrop n’a pas pu ouvrir ses sockets réseau sur cet appareil.", "es": "VniDrop no pudo abrir sus sockets de red en este dispositivo.", "it": "VniDrop non ha potuto aprire i suoi socket di rete su questo dispositivo.", - "de": "VniDrop konnte seine Netzwerk-Sockets auf diesem Gerät nicht öffnen." + "de": "VniDrop konnte seine Netzwerk-Sockets auf diesem Gerät nicht öffnen.", + "pt": "O VniDrop não conseguiu abrir os seus sockets de rede neste dispositivo." } }, "error_starting_up": { @@ -1060,7 +1159,8 @@ "fr": "VniDrop démarre encore. Rouvrez l’invitation dans un instant.", "es": "VniDrop todavía se está iniciando. Vuelva a abrir la invitación en un momento.", "it": "VniDrop è ancora in fase di avvio. Riapra l’invito tra un momento.", - "de": "VniDrop startet noch. Öffnen Sie die Einladung gleich erneut." + "de": "VniDrop startet noch. Öffnen Sie die Einladung gleich erneut.", + "pt": "O VniDrop ainda está a iniciar. Abra o convite novamente dentro de momentos." } }, "error_transfer": { @@ -1070,7 +1170,8 @@ "fr": "Le transfert n’a pas pu être terminé. Vérifiez votre connexion et réessayez.", "es": "No se pudo completar la transferencia. Compruebe su conexión e inténtelo de nuevo.", "it": "Impossibile completare il trasferimento. Controlli la connessione e riprovi.", - "de": "Die Übertragung konnte nicht abgeschlossen werden. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut." + "de": "Die Übertragung konnte nicht abgeschlossen werden. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.", + "pt": "Não foi possível concluir a transferência. Verifique a sua ligação e tente novamente." } }, "field_receiver_name": { @@ -1080,7 +1181,8 @@ "fr": "Nom du destinataire", "es": "Nombre del destinatario", "it": "Nome del destinatario", - "de": "Empfängername" + "de": "Empfängername", + "pt": "Nome do destinatário" } }, "field_sender_name": { @@ -1090,7 +1192,8 @@ "fr": "Nom de l’expéditeur", "es": "Nombre del remitente", "it": "Nome del mittente", - "de": "Absendername" + "de": "Absendername", + "pt": "Nome do remetente" } }, "field_transfer_name": { @@ -1100,7 +1203,8 @@ "fr": "Nom du transfert", "es": "Nombre de la transferencia", "it": "Nome del trasferimento", - "de": "Übertragungsname" + "de": "Übertragungsname", + "pt": "Nome da transferência" } }, "field_username": { @@ -1110,7 +1214,8 @@ "fr": "Nom d’affichage", "es": "Nombre visible", "it": "Nome visualizzato", - "de": "Anzeigename" + "de": "Anzeigename", + "pt": "Nome a apresentar" } }, "folder_status_permission_required": { @@ -1120,7 +1225,8 @@ "fr": "Autorisation requise", "es": "Permiso necesario", "it": "Autorizzazione necessaria", - "de": "Berechtigung erforderlich" + "de": "Berechtigung erforderlich", + "pt": "Permissão necessária" } }, "folder_status_unavailable": { @@ -1130,7 +1236,8 @@ "fr": "Indisponible", "es": "No disponible", "it": "Non disponibile", - "de": "Nicht verfügbar" + "de": "Nicht verfügbar", + "pt": "Indisponível" } }, "folder_status_validating": { @@ -1140,7 +1247,8 @@ "fr": "Vérification du dossier…", "es": "Comprobando carpeta…", "it": "Controllo della cartella…", - "de": "Ordner wird geprüft…" + "de": "Ordner wird geprüft…", + "pt": "A verificar a pasta…" } }, "folder_status_writable": { @@ -1150,7 +1258,8 @@ "fr": "Prêt", "es": "Listo", "it": "Pronta", - "de": "Bereit" + "de": "Bereit", + "pt": "Pronto" } }, "metadata_files": { @@ -1160,7 +1269,8 @@ "fr": "Fichiers", "es": "Archivos", "it": "File", - "de": "Dateien" + "de": "Dateien", + "pt": "Ficheiros" } }, "metadata_size": { @@ -1170,7 +1280,8 @@ "fr": "Taille", "es": "Tamaño", "it": "Dimensione", - "de": "Größe" + "de": "Größe", + "pt": "Tamanho" } }, "metadata_status": { @@ -1180,7 +1291,8 @@ "fr": "Statut", "es": "Estado", "it": "Stato", - "de": "Status" + "de": "Status", + "pt": "Estado" } }, "nav_receive": { @@ -1190,7 +1302,8 @@ "fr": "Recevoir", "es": "Recibir", "it": "Ricevi", - "de": "Empfangen" + "de": "Empfangen", + "pt": "Receber" } }, "nav_send": { @@ -1200,7 +1313,8 @@ "fr": "Envoyer", "es": "Enviar", "it": "Invia", - "de": "Senden" + "de": "Senden", + "pt": "Enviar" } }, "nav_settings": { @@ -1210,7 +1324,8 @@ "fr": "Réglages", "es": "Ajustes", "it": "Impostazioni", - "de": "Einstellungen" + "de": "Einstellungen", + "pt": "Definições" } }, "network_title": { @@ -1220,7 +1335,8 @@ "fr": "Réseau", "es": "Red", "it": "Rete", - "de": "Netzwerk" + "de": "Netzwerk", + "pt": "Rede" } }, "notifications_description": { @@ -1230,7 +1346,8 @@ "fr": "Soyez averti des nouvelles demandes de réception lorsque VniDrop est en arrière-plan.", "es": "Reciba avisos sobre nuevas solicitudes de recepción cuando VniDrop está en segundo plano.", "it": "Ricevi avvisi sulle nuove richieste di ricezione quando VniDrop è in background.", - "de": "Werden Sie über neue Empfangsanfragen benachrichtigt, während VniDrop im Hintergrund läuft." + "de": "Werden Sie über neue Empfangsanfragen benachrichtigt, während VniDrop im Hintergrund läuft.", + "pt": "Seja notificado sobre novos pedidos de receção enquanto o VniDrop está em segundo plano." } }, "notifications_enabled_message": { @@ -1240,7 +1357,8 @@ "fr": "Notifications activées.", "es": "Notificaciones activadas.", "it": "Notifiche attivate.", - "de": "Mitteilungen aktiviert." + "de": "Mitteilungen aktiviert.", + "pt": "Notificações ativadas." } }, "notifications_local_title": { @@ -1250,7 +1368,8 @@ "fr": "Autoriser les notifications", "es": "Permitir notificaciones", "it": "Consenti le notifiche", - "de": "Mitteilungen erlauben" + "de": "Mitteilungen erlauben", + "pt": "Permitir notificações" } }, "notifications_permission_denied": { @@ -1260,7 +1379,8 @@ "fr": "Les notifications sont désactivées pour VniDrop. Vous pouvez les activer dans les Réglages.", "es": "Las notificaciones están desactivadas para VniDrop. Puede activarlas en Ajustes.", "it": "Le notifiche sono disattivate per VniDrop. Può attivarle in Impostazioni.", - "de": "Mitteilungen sind für VniDrop deaktiviert. Sie können sie in den Einstellungen aktivieren." + "de": "Mitteilungen sind für VniDrop deaktiviert. Sie können sie in den Einstellungen aktivieren.", + "pt": "As notificações estão desativadas para o VniDrop. Pode ativá-las nas Definições." } }, "notifications_settings_open_failed": { @@ -1270,7 +1390,8 @@ "fr": "Impossible d’ouvrir les réglages de notifications.", "es": "No se pudieron abrir los ajustes de notificaciones.", "it": "Impossibile aprire le impostazioni delle notifiche.", - "de": "Die Mitteilungseinstellungen konnten nicht geöffnet werden." + "de": "Die Mitteilungseinstellungen konnten nicht geöffnet werden.", + "pt": "Não foi possível abrir as definições de notificações." } }, "notifications_title": { @@ -1280,7 +1401,8 @@ "fr": "Notifications", "es": "Notificaciones", "it": "Notifiche", - "de": "Mitteilungen" + "de": "Mitteilungen", + "pt": "Notificações" } }, "notifications_unsupported": { @@ -1290,7 +1412,8 @@ "fr": "Les notifications ne sont pas disponibles sur cet appareil.", "es": "Las notificaciones no están disponibles en este dispositivo.", "it": "Le notifiche non sono disponibili su questo dispositivo.", - "de": "Mitteilungen sind auf diesem Gerät nicht verfügbar." + "de": "Mitteilungen sind auf diesem Gerät nicht verfügbar.", + "pt": "As notificações não estão disponíveis neste dispositivo." } }, "os_version_title": { @@ -1300,7 +1423,8 @@ "fr": "Système d’exploitation", "es": "Sistema operativo", "it": "Sistema operativo", - "de": "Betriebssystem" + "de": "Betriebssystem", + "pt": "Sistema operativo" } }, "preferences_receive_folder_title": { @@ -1310,7 +1434,8 @@ "fr": "Enregistrer les transferts reçus dans", "es": "Guardar las transferencias recibidas en", "it": "Salva i trasferimenti ricevuti in", - "de": "Empfangene Übertragungen sichern in" + "de": "Empfangene Übertragungen sichern in", + "pt": "Guardar as transferências recebidas em" } }, "preferences_title": { @@ -1320,7 +1445,8 @@ "fr": "Préférences", "es": "Preferencias", "it": "Preferenze", - "de": "Voreinstellungen" + "de": "Voreinstellungen", + "pt": "Preferências" } }, "progress_cancelled": { @@ -1330,7 +1456,8 @@ "fr": "Annulé", "es": "Cancelado", "it": "Annullato", - "de": "Abgebrochen" + "de": "Abgebrochen", + "pt": "Cancelado" } }, "progress_completed": { @@ -1340,7 +1467,8 @@ "fr": "Terminé", "es": "Completado", "it": "Completato", - "de": "Abgeschlossen" + "de": "Abgeschlossen", + "pt": "Concluído" } }, "progress_connected": { @@ -1350,7 +1478,8 @@ "fr": "Connecté", "es": "Conectado", "it": "Connesso", - "de": "Verbunden" + "de": "Verbunden", + "pt": "Ligado" } }, "progress_connecting": { @@ -1360,7 +1489,8 @@ "fr": "Connexion", "es": "Conectando", "it": "Connessione", - "de": "Verbinden" + "de": "Verbinden", + "pt": "A ligar" } }, "progress_downloading": { @@ -1370,7 +1500,8 @@ "fr": "Téléchargement", "es": "Descargando", "it": "Download", - "de": "Wird geladen" + "de": "Wird geladen", + "pt": "A descarregar" } }, "progress_failed": { @@ -1380,7 +1511,8 @@ "fr": "Échec", "es": "Fallido", "it": "Non riuscito", - "de": "Fehlgeschlagen" + "de": "Fehlgeschlagen", + "pt": "Falhou" } }, "progress_getting_ready": { @@ -1390,7 +1522,8 @@ "fr": "Préparation", "es": "Preparándose", "it": "Preparazione", - "de": "Wird bereitgemacht" + "de": "Wird bereitgemacht", + "pt": "A preparar-se" } }, "progress_interrupted": { @@ -1400,7 +1533,8 @@ "fr": "Transfert interrompu", "es": "Transferencia interrumpida", "it": "Trasferimento interrotto", - "de": "Übertragung unterbrochen" + "de": "Übertragung unterbrochen", + "pt": "Transferência interrompida" } }, "progress_preparing": { @@ -1410,7 +1544,8 @@ "fr": "Préparation", "es": "Preparando", "it": "Preparazione", - "de": "Wird vorbereitet" + "de": "Wird vorbereitet", + "pt": "A preparar" } }, "progress_ready": { @@ -1420,7 +1555,8 @@ "fr": "Prêt", "es": "Listo", "it": "Pronto", - "de": "Bereit" + "de": "Bereit", + "pt": "Pronto" } }, "progress_receiving": { @@ -1430,7 +1566,8 @@ "fr": "Réception", "es": "Recibiendo", "it": "Ricezione", - "de": "Wird empfangen" + "de": "Wird empfangen", + "pt": "A receber" } }, "progress_requesting_access": { @@ -1440,7 +1577,8 @@ "fr": "Demande d’accès", "es": "Solicitando acceso", "it": "Richiesta di accesso", - "de": "Zugriff wird angefragt" + "de": "Zugriff wird angefragt", + "pt": "A pedir acesso" } }, "progress_saving": { @@ -1450,7 +1588,8 @@ "fr": "Enregistrement", "es": "Guardando", "it": "Salvataggio", - "de": "Wird gesichert" + "de": "Wird gesichert", + "pt": "A guardar" } }, "progress_sending": { @@ -1460,7 +1599,8 @@ "fr": "Envoi", "es": "Enviando", "it": "Invio", - "de": "Wird gesendet" + "de": "Wird gesendet", + "pt": "A enviar" } }, "progress_sending_to_count": { @@ -1470,7 +1610,8 @@ "fr": "Envoi à {count}", "es": "Enviando a {count}", "it": "Invio a {count}", - "de": "Senden an {count}" + "de": "Senden an {count}", + "pt": "A enviar para {count}" }, "args": [ { @@ -1486,7 +1627,8 @@ "fr": "Prêt à partager", "es": "Listo para compartir", "it": "Pronto per la condivisione", - "de": "Bereit zum Teilen" + "de": "Bereit zum Teilen", + "pt": "Pronto para partilhar" } }, "progress_working": { @@ -1496,7 +1638,8 @@ "fr": "En cours…", "es": "Trabajando…", "it": "Elaborazione…", - "de": "Wird bearbeitet…" + "de": "Wird bearbeitet…", + "pt": "A processar…" } }, "receive_choose_method_body": { @@ -1506,7 +1649,8 @@ "fr": "Choisissez la méthode d’invitation à votre disposition.", "es": "Elija el método de invitación de que disponga.", "it": "Scelga il metodo di invito a sua disposizione.", - "de": "Wählen Sie die Ihnen zur Verfügung stehende Einladungsmethode." + "de": "Wählen Sie die Ihnen zur Verfügung stehende Einladungsmethode.", + "pt": "Escolha o método de convite ao seu dispor." } }, "receive_choose_method_title": { @@ -1516,7 +1660,8 @@ "fr": "Comment souhaitez-vous vous connecter ?", "es": "¿Cómo quiere conectarse?", "it": "Come vuole connettersi?", - "de": "Wie möchten Sie sich verbinden?" + "de": "Wie möchten Sie sich verbinden?", + "pt": "Como pretende ligar-se?" } }, "receive_clear_history": { @@ -1526,7 +1671,8 @@ "fr": "Effacer l’historique", "es": "Borrar historial", "it": "Cancella cronologia", - "de": "Verlauf löschen" + "de": "Verlauf löschen", + "pt": "Limpar histórico" } }, "receive_clear_history_description": { @@ -1536,7 +1682,8 @@ "fr": "Toutes les réceptions terminées, échouées et annulées seront retirées de l’historique de VniDrop. Les fichiers téléchargés resteront sur cet appareil.", "es": "Todas las recepciones completadas, fallidas y canceladas se eliminarán del historial de VniDrop. Los archivos descargados permanecerán en este dispositivo.", "it": "Tutte le ricezioni completate, non riuscite e annullate verranno rimosse dalla cronologia di VniDrop. I file scaricati rimarranno su questo dispositivo.", - "de": "Alle abgeschlossenen, fehlgeschlagenen und abgebrochenen Empfänge werden aus dem Verlauf von VniDrop entfernt. Heruntergeladene Dateien verbleiben auf diesem Gerät." + "de": "Alle abgeschlossenen, fehlgeschlagenen und abgebrochenen Empfänge werden aus dem Verlauf von VniDrop entfernt. Heruntergeladene Dateien verbleiben auf diesem Gerät.", + "pt": "Todas as receções concluídas, falhadas e canceladas serão removidas do histórico do VniDrop. Os ficheiros descarregados permanecerão neste dispositivo." } }, "receive_clear_history_title": { @@ -1546,7 +1693,8 @@ "fr": "Effacer l’historique de réception ?", "es": "¿Borrar el historial de recepción?", "it": "Cancellare la cronologia di ricezione?", - "de": "Empfangsverlauf löschen?" + "de": "Empfangsverlauf löschen?", + "pt": "Limpar o histórico de receção?" } }, "receive_completed": { @@ -1556,7 +1704,8 @@ "fr": "Transfert reçu.", "es": "Transferencia recibida.", "it": "Trasferimento ricevuto.", - "de": "Übertragung empfangen." + "de": "Übertragung empfangen.", + "pt": "Transferência recebida." } }, "receive_delete_history_description": { @@ -1572,7 +1721,8 @@ "fr": "« {arg1} » sera retiré de l’historique de VniDrop. Le fichier téléchargé restera sur cet appareil.", "es": "«{arg1}» se eliminará del historial de VniDrop. El archivo descargado permanecerá en este dispositivo.", "it": "«{arg1}» verrà rimosso dalla cronologia di VniDrop. Il file scaricato rimarrà su questo dispositivo.", - "de": "„{arg1}“ wird aus dem Verlauf von VniDrop entfernt. Die heruntergeladene Datei verbleibt auf diesem Gerät." + "de": "„{arg1}“ wird aus dem Verlauf von VniDrop entfernt. Die heruntergeladene Datei verbleibt auf diesem Gerät.", + "pt": "«{arg1}» será removido do histórico do VniDrop. O ficheiro descarregado permanecerá neste dispositivo." } }, "receive_delete_history_item": { @@ -1582,7 +1732,8 @@ "fr": "Supprimer de l’historique de réception", "es": "Eliminar del historial de recepción", "it": "Elimina dalla cronologia di ricezione", - "de": "Aus Empfangsverlauf löschen" + "de": "Aus Empfangsverlauf löschen", + "pt": "Eliminar do histórico de receção" } }, "receive_delete_history_title": { @@ -1592,7 +1743,8 @@ "fr": "Retirer de l’historique ?", "es": "¿Quitar del historial?", "it": "Rimuovere dalla cronologia?", - "de": "Aus dem Verlauf entfernen?" + "de": "Aus dem Verlauf entfernen?", + "pt": "Remover do histórico?" } }, "receive_empty_body": { @@ -1602,7 +1754,8 @@ "fr": "Ouvrez une invitation VniDrop, scannez un QR code ou approchez un tag NFC.", "es": "Abra una invitación de VniDrop, escanee un código QR o acerque una etiqueta NFC.", "it": "Apra un invito VniDrop, scansioni un codice QR o avvicini un tag NFC.", - "de": "Öffnen Sie eine VniDrop-Einladung, scannen Sie einen QR-Code oder halten Sie das Gerät an ein NFC-Tag." + "de": "Öffnen Sie eine VniDrop-Einladung, scannen Sie einen QR-Code oder halten Sie das Gerät an ein NFC-Tag.", + "pt": "Abra um convite do VniDrop, leia um código QR ou aproxime uma etiqueta NFC." } }, "receive_empty_title": { @@ -1612,7 +1765,8 @@ "fr": "Rien reçu pour l’instant", "es": "Aún no se ha recibido nada", "it": "Ancora nulla di ricevuto", - "de": "Noch nichts empfangen" + "de": "Noch nichts empfangen", + "pt": "Ainda não recebeu nada" } }, "receive_history_cleared": { @@ -1622,7 +1776,8 @@ "fr": "Historique de réception effacé.", "es": "Historial de recepción borrado.", "it": "Cronologia di ricezione cancellata.", - "de": "Empfangsverlauf gelöscht." + "de": "Empfangsverlauf gelöscht.", + "pt": "Histórico de receção limpo." } }, "receive_history_title": { @@ -1632,7 +1787,8 @@ "fr": "Historique", "es": "Historial", "it": "Cronologia", - "de": "Verlauf" + "de": "Verlauf", + "pt": "Histórico" } }, "receive_method_file": { @@ -1642,7 +1798,8 @@ "fr": "Ouvrir une invitation .vnd", "es": "Abrir una invitación .vnd", "it": "Apri un invito .vnd", - "de": "Eine .vnd-Einladung öffnen" + "de": "Eine .vnd-Einladung öffnen", + "pt": "Abrir um convite .vnd" } }, "receive_method_file_description": { @@ -1652,7 +1809,8 @@ "fr": "Choisissez une invitation enregistrée ou partagée sur cet appareil.", "es": "Elija una invitación guardada o compartida en este dispositivo.", "it": "Scelga un invito salvato o condiviso su questo dispositivo.", - "de": "Wählen Sie eine auf diesem Gerät gespeicherte oder geteilte Einladung." + "de": "Wählen Sie eine auf diesem Gerät gespeicherte oder geteilte Einladung.", + "pt": "Escolha um convite guardado ou partilhado neste dispositivo." } }, "receive_method_nfc": { @@ -1662,7 +1820,8 @@ "fr": "Lire un tag NFC", "es": "Leer etiqueta NFC", "it": "Leggi tag NFC", - "de": "NFC-Tag lesen" + "de": "NFC-Tag lesen", + "pt": "Ler etiqueta NFC" } }, "receive_method_nfc_description": { @@ -1672,7 +1831,8 @@ "fr": "Approchez cet appareil du tag d’invitation de l’expéditeur.", "es": "Acerque este dispositivo a la etiqueta de invitación del remitente.", "it": "Avvicini questo dispositivo al tag di invito del mittente.", - "de": "Halten Sie dieses Gerät an das Einladungs-Tag des Absenders." + "de": "Halten Sie dieses Gerät an das Einladungs-Tag des Absenders.", + "pt": "Aproxime este dispositivo da etiqueta de convite do remetente." } }, "receive_method_scan": { @@ -1682,7 +1842,8 @@ "fr": "Scanner un QR code", "es": "Escanear código QR", "it": "Scansiona codice QR", - "de": "QR-Code scannen" + "de": "QR-Code scannen", + "pt": "Ler código QR" } }, "receive_method_scan_description": { @@ -1692,7 +1853,8 @@ "fr": "Utilisez la caméra pour scanner le code VniDrop de l’expéditeur.", "es": "Use la cámara para escanear el código de VniDrop del remitente.", "it": "Usi la fotocamera per scansionare il codice VniDrop del mittente.", - "de": "Verwenden Sie die Kamera, um den VniDrop-Code des Absenders zu scannen." + "de": "Verwenden Sie die Kamera, um den VniDrop-Code des Absenders zu scannen.", + "pt": "Use a câmara para ler o código VniDrop do remetente." } }, "receive_new_subtitle": { @@ -1702,7 +1864,8 @@ "fr": "Transferts que vous avez reçus sur cet appareil.", "es": "Transferencias que ha recibido en este dispositivo.", "it": "Trasferimenti che ha ricevuto su questo dispositivo.", - "de": "Übertragungen, die Sie auf diesem Gerät empfangen haben." + "de": "Übertragungen, die Sie auf diesem Gerät empfangen haben.", + "pt": "Transferências que recebeu neste dispositivo." } }, "receive_nfc_waiting": { @@ -1712,7 +1875,8 @@ "fr": "Approchez du tag NFC…", "es": "Acerque a la etiqueta NFC…", "it": "Avvicini al tag NFC…", - "de": "Halten Sie das Gerät an das NFC-Tag…" + "de": "Halten Sie das Gerät an das NFC-Tag…", + "pt": "Aproxime da etiqueta NFC…" } }, "receive_open_files_failed": { @@ -1722,7 +1886,8 @@ "fr": "Impossible d’ouvrir VniDrop dans Fichiers.", "es": "No se pudo abrir VniDrop en Archivos.", "it": "Impossibile aprire VniDrop in File.", - "de": "VniDrop konnte in „Dateien“ nicht geöffnet werden." + "de": "VniDrop konnte in „Dateien“ nicht geöffnet werden.", + "pt": "Não foi possível abrir o VniDrop em Ficheiros." } }, "receive_review_title": { @@ -1732,7 +1897,8 @@ "fr": "Vérifier le transfert", "es": "Revisar transferencia", "it": "Rivedi trasferimento", - "de": "Übertragung prüfen" + "de": "Übertragung prüfen", + "pt": "Rever transferência" } }, "receive_title": { @@ -1742,7 +1908,8 @@ "fr": "Recevoir", "es": "Recibir", "it": "Ricevi", - "de": "Empfangen" + "de": "Empfangen", + "pt": "Receber" } }, "receive_unknown_transfer": { @@ -1752,7 +1919,8 @@ "fr": "Transfert VniDrop", "es": "Transferencia de VniDrop", "it": "Trasferimento VniDrop", - "de": "VniDrop-Übertragung" + "de": "VniDrop-Übertragung", + "pt": "Transferência VniDrop" } }, "send_access_anyone": { @@ -1762,7 +1930,8 @@ "fr": "Toute personne disposant de ce transfert", "es": "Cualquiera que tenga esta transferencia", "it": "Chiunque abbia questo trasferimento", - "de": "Jeder mit dieser Übertragung" + "de": "Jeder mit dieser Übertragung", + "pt": "Qualquer pessoa com esta transferência" } }, "send_access_anyone_description": { @@ -1772,7 +1941,8 @@ "fr": "Aucune approbation requise. À n’utiliser que pour des éléments que vous êtes à l’aise de partager.", "es": "No se requiere aprobación. Úselo solo para elementos que no le importe compartir.", "it": "Nessuna approvazione richiesta. Da usare solo per elementi che non ha problemi a condividere.", - "de": "Keine Genehmigung erforderlich. Verwenden Sie dies nur für Objekte, die Sie unbedenklich teilen können." + "de": "Keine Genehmigung erforderlich. Verwenden Sie dies nur für Objekte, die Sie unbedenklich teilen können.", + "pt": "Não é necessária aprovação. Utilize apenas para itens que não se importe de partilhar." } }, "send_access_anyone_warning": { @@ -1782,7 +1952,8 @@ "fr": "Toute personne disposant de l’invitation peut télécharger jusqu’à ce que vous arrêtiez le partage. Ne l’utilisez pas pour des éléments privés ou sensibles.", "es": "Cualquiera que tenga la invitación puede descargar hasta que deje de compartir. No lo use para elementos privados o sensibles.", "it": "Chiunque abbia l’invito può scaricare finché non interrompe la condivisione. Non lo usi per elementi privati o sensibili.", - "de": "Jeder mit der Einladung kann herunterladen, bis Sie die Freigabe beenden. Verwenden Sie dies nicht für private oder sensible Objekte." + "de": "Jeder mit der Einladung kann herunterladen, bis Sie die Freigabe beenden. Verwenden Sie dies nicht für private oder sensible Objekte.", + "pt": "Qualquer pessoa com o convite pode descarregar até parar de partilhar. Não utilize para itens privados ou sensíveis." } }, "send_access_approval": { @@ -1792,7 +1963,8 @@ "fr": "Demander avant chaque téléchargement", "es": "Preguntar antes de cada descarga", "it": "Chiedi prima di ogni download", - "de": "Vor jedem Download fragen" + "de": "Vor jedem Download fragen", + "pt": "Perguntar antes de cada descarga" } }, "send_access_approval_description": { @@ -1802,7 +1974,8 @@ "fr": "Vous approuvez ou refusez chaque nouveau destinataire.", "es": "Usted aprueba o rechaza a cada nuevo destinatario.", "it": "Approva o rifiuta ogni nuovo destinatario.", - "de": "Sie genehmigen oder lehnen jeden neuen Empfänger ab." + "de": "Sie genehmigen oder lehnen jeden neuen Empfänger ab.", + "pt": "Aprova ou recusa cada novo destinatário." } }, "send_access_title": { @@ -1812,7 +1985,8 @@ "fr": "Qui peut le recevoir ?", "es": "¿Quién puede recibirla?", "it": "Chi può riceverlo?", - "de": "Wer kann sie empfangen?" + "de": "Wer kann sie empfangen?", + "pt": "Quem a pode receber?" } }, "send_choose_file_body": { @@ -1822,7 +1996,8 @@ "fr": "Sélectionnez des fichiers ou un dossier sur cet appareil. Vous pourrez vérifier la sélection avant de créer le transfert.", "es": "Seleccione archivos o una carpeta de este dispositivo. Podrá revisar la selección antes de crear la transferencia.", "it": "Selezioni file o una cartella da questo dispositivo. Potrà rivedere la selezione prima di creare il trasferimento.", - "de": "Wählen Sie Dateien oder einen Ordner auf diesem Gerät aus. Sie können die Auswahl überprüfen, bevor Sie die Übertragung erstellen." + "de": "Wählen Sie Dateien oder einen Ordner auf diesem Gerät aus. Sie können die Auswahl überprüfen, bevor Sie die Übertragung erstellen.", + "pt": "Selecione ficheiros ou uma pasta deste dispositivo. Poderá rever a seleção antes de criar a transferência." } }, "send_choose_file_title": { @@ -1832,7 +2007,8 @@ "fr": "Choisissez quoi partager", "es": "Elija qué compartir", "it": "Scelga cosa condividere", - "de": "Wählen Sie, was Sie teilen möchten" + "de": "Wählen Sie, was Sie teilen möchten", + "pt": "Escolha o que partilhar" } }, "send_empty_body": { @@ -1842,7 +2018,8 @@ "fr": "Créez un transfert, décidez qui peut le recevoir, puis invitez-les avec un QR code, un tag NFC ou un fichier d’invitation.", "es": "Cree una transferencia, decida quién puede recibirla y luego invite a esas personas con un código QR, una etiqueta NFC o un archivo de invitación.", "it": "Crei un trasferimento, decida chi può riceverlo, poi inviti queste persone con un codice QR, un tag NFC o un file di invito.", - "de": "Erstellen Sie eine Übertragung, entscheiden Sie, wer sie empfangen darf, und laden Sie diese Personen dann mit einem QR-Code, einem NFC-Tag oder einer Einladungsdatei ein." + "de": "Erstellen Sie eine Übertragung, entscheiden Sie, wer sie empfangen darf, und laden Sie diese Personen dann mit einem QR-Code, einem NFC-Tag oder einer Einladungsdatei ein.", + "pt": "Crie uma transferência, decida quem a pode receber e depois convide essas pessoas com um código QR, uma etiqueta NFC ou um ficheiro de convite." } }, "send_empty_title": { @@ -1852,7 +2029,8 @@ "fr": "Rien partagé pour l’instant", "es": "Aún no se ha compartido nada", "it": "Ancora nulla di condiviso", - "de": "Noch nichts geteilt" + "de": "Noch nichts geteilt", + "pt": "Ainda não partilhou nada" } }, "send_file_size_unknown": { @@ -1862,7 +2040,8 @@ "fr": "Taille indisponible", "es": "Tamaño no disponible", "it": "Dimensione non disponibile", - "de": "Größe nicht verfügbar" + "de": "Größe nicht verfügbar", + "pt": "Tamanho indisponível" } }, "send_folder_label": { @@ -1872,7 +2051,8 @@ "fr": "Dossier", "es": "Carpeta", "it": "Cartella", - "de": "Ordner" + "de": "Ordner", + "pt": "Pasta" } }, "send_new_transfer_description": { @@ -1882,7 +2062,8 @@ "fr": "Créer un nouveau transfert", "es": "Crear una nueva transferencia", "it": "Crea un nuovo trasferimento", - "de": "Eine neue Übertragung erstellen" + "de": "Eine neue Übertragung erstellen", + "pt": "Criar uma nova transferência" } }, "send_new_transfer_title": { @@ -1892,7 +2073,8 @@ "fr": "Nouveau transfert", "es": "Nueva transferencia", "it": "Nuovo trasferimento", - "de": "Neue Übertragung" + "de": "Neue Übertragung", + "pt": "Nova transferência" } }, "send_review_title": { @@ -1902,7 +2084,8 @@ "fr": "Vérifier le transfert", "es": "Revisar transferencia", "it": "Rivedi trasferimento", - "de": "Übertragung prüfen" + "de": "Übertragung prüfen", + "pt": "Rever transferência" } }, "send_selected_files_count": { @@ -1918,7 +2101,8 @@ "fr": "{count} fichiers sélectionnés", "es": "{count} archivos seleccionados", "it": "{count} file selezionati", - "de": "{count} Dateien ausgewählt" + "de": "{count} Dateien ausgewählt", + "pt": "{count} ficheiros selecionados" } }, "send_stop_sharing": { @@ -1928,7 +2112,8 @@ "fr": "Arrêter le partage", "es": "Dejar de compartir", "it": "Interrompi condivisione", - "de": "Freigabe beenden" + "de": "Freigabe beenden", + "pt": "Parar de partilhar" } }, "send_stop_sharing_description": { @@ -1938,7 +2123,8 @@ "fr": "Cela arrête le transfert et interrompt toute personne en train de le télécharger. Il reste dans votre historique en tant qu’Arrêté.", "es": "Esto detiene la transferencia e interrumpe a quien esté descargándola. Permanece en su historial como Detenida.", "it": "Questo interrompe il trasferimento e blocca chiunque lo stia scaricando. Rimane nella sua cronologia come Interrotto.", - "de": "Dies beendet die Übertragung und unterbricht alle, die sie gerade herunterladen. Sie verbleibt in Ihrem Verlauf als „Beendet“." + "de": "Dies beendet die Übertragung und unterbricht alle, die sie gerade herunterladen. Sie verbleibt in Ihrem Verlauf als „Beendet“.", + "pt": "Isto para a transferência e interrompe quem estiver a descarregá-la. Permanece no seu histórico como Parada." } }, "send_subtitle": { @@ -1948,7 +2134,8 @@ "fr": "Transferts que vous partagez depuis cet appareil.", "es": "Transferencias que está compartiendo desde este dispositivo.", "it": "Trasferimenti che sta condividendo da questo dispositivo.", - "de": "Übertragungen, die Sie von diesem Gerät aus teilen." + "de": "Übertragungen, die Sie von diesem Gerät aus teilen.", + "pt": "Transferências que está a partilhar a partir deste dispositivo." } }, "send_title": { @@ -1958,7 +2145,8 @@ "fr": "Envoyer", "es": "Enviar", "it": "Invia", - "de": "Senden" + "de": "Senden", + "pt": "Enviar" } }, "send_transfer_created": { @@ -1968,7 +2156,8 @@ "fr": "Transfert créé.", "es": "Transferencia creada.", "it": "Trasferimento creato.", - "de": "Übertragung erstellt." + "de": "Übertragung erstellt.", + "pt": "Transferência criada." } }, "send_transfer_details_title": { @@ -1978,7 +2167,8 @@ "fr": "Détails du transfert", "es": "Detalles de la transferencia", "it": "Dettagli del trasferimento", - "de": "Übertragungsdetails" + "de": "Übertragungsdetails", + "pt": "Detalhes da transferência" } }, "send_transfers_title": { @@ -1988,7 +2178,8 @@ "fr": "Vos transferts", "es": "Sus transferencias", "it": "I suoi trasferimenti", - "de": "Ihre Übertragungen" + "de": "Ihre Übertragungen", + "pt": "As suas transferências" } }, "settings_subtitle": { @@ -1998,7 +2189,8 @@ "fr": "Votre nom, l’emplacement d’enregistrement des transferts, l’apparence et les notifications.", "es": "Su nombre, dónde se guardan las transferencias, la apariencia y las notificaciones.", "it": "Il suo nome, dove vengono salvati i trasferimenti, l’aspetto e le notifiche.", - "de": "Ihr Name, wo Übertragungen gesichert werden, Darstellung und Mitteilungen." + "de": "Ihr Name, wo Übertragungen gesichert werden, Darstellung und Mitteilungen.", + "pt": "O seu nome, onde as transferências são guardadas, o aspeto e as notificações." } }, "settings_title": { @@ -2008,7 +2200,8 @@ "fr": "Réglages", "es": "Ajustes", "it": "Impostazioni", - "de": "Einstellungen" + "de": "Einstellungen", + "pt": "Definições" } }, "snackbar_dismiss": { @@ -2018,7 +2211,8 @@ "fr": "Ignorer", "es": "Descartar", "it": "Ignora", - "de": "Ausblenden" + "de": "Ausblenden", + "pt": "Ignorar" } }, "status_available": { @@ -2028,7 +2222,8 @@ "fr": "Disponible", "es": "Disponible", "it": "Disponibile", - "de": "Verfügbar" + "de": "Verfügbar", + "pt": "Disponível" } }, "status_cancelled": { @@ -2038,7 +2233,8 @@ "fr": "Annulé", "es": "Cancelado", "it": "Annullato", - "de": "Abgebrochen" + "de": "Abgebrochen", + "pt": "Cancelado" } }, "status_completed": { @@ -2048,7 +2244,8 @@ "fr": "Terminé", "es": "Completado", "it": "Completato", - "de": "Abgeschlossen" + "de": "Abgeschlossen", + "pt": "Concluído" } }, "status_failed": { @@ -2058,7 +2255,8 @@ "fr": "Échec", "es": "Fallido", "it": "Non riuscito", - "de": "Fehlgeschlagen" + "de": "Fehlgeschlagen", + "pt": "Falhou" } }, "status_preparing": { @@ -2068,7 +2266,8 @@ "fr": "Préparation", "es": "Preparando", "it": "Preparazione", - "de": "Wird vorbereitet" + "de": "Wird vorbereitet", + "pt": "A preparar" } }, "status_receiving": { @@ -2078,7 +2277,8 @@ "fr": "Réception", "es": "Recibiendo", "it": "Ricezione", - "de": "Wird empfangen" + "de": "Wird empfangen", + "pt": "A receber" } }, "status_stopped": { @@ -2088,7 +2288,8 @@ "fr": "Arrêté", "es": "Detenido", "it": "Interrotto", - "de": "Beendet" + "de": "Beendet", + "pt": "Parada" } }, "storage_calculating": { @@ -2098,7 +2299,8 @@ "fr": "Calcul…", "es": "Calculando…", "it": "Calcolo…", - "de": "Wird berechnet…" + "de": "Wird berechnet…", + "pt": "A calcular…" } }, "storage_delete_transfers": { @@ -2108,7 +2310,8 @@ "fr": "Supprimer tous les transferts", "es": "Eliminar todas las transferencias", "it": "Elimina tutti i trasferimenti", - "de": "Alle Übertragungen löschen" + "de": "Alle Übertragungen löschen", + "pt": "Eliminar todas as transferências" } }, "storage_delete_transfers_description": { @@ -2118,7 +2321,8 @@ "fr": "Cela efface tous les enregistrements de transferts envoyés et reçus de votre historique. Vos fichiers reçus ne sont pas supprimés. Remarque : le moteur de transfert conserve son contenu stocké, donc les données de transfert peuvent ne pas diminuer. Cette action est irréversible.", "es": "Esto borra todos los registros de transferencias enviadas y recibidas de su historial. Sus archivos recibidos no se eliminan. Nota: el motor de transferencia conserva su contenido almacenado, por lo que los datos de transferencia pueden no disminuir. Esto no se puede deshacer.", "it": "Questo cancella dalla cronologia tutti i record dei trasferimenti inviati e ricevuti. I suoi file ricevuti non vengono eliminati. Nota: il motore di trasferimento conserva il contenuto memorizzato, quindi i dati di trasferimento potrebbero non diminuire. Questa operazione non può essere annullata.", - "de": "Dies löscht alle Datensätze gesendeter und empfangener Übertragungen aus Ihrem Verlauf. Ihre empfangenen Dateien werden nicht gelöscht. Hinweis: Die Übertragungs-Engine behält ihre gespeicherten Inhalte, sodass die Übertragungsdaten möglicherweise nicht abnehmen. Dies kann nicht rückgängig gemacht werden." + "de": "Dies löscht alle Datensätze gesendeter und empfangener Übertragungen aus Ihrem Verlauf. Ihre empfangenen Dateien werden nicht gelöscht. Hinweis: Die Übertragungs-Engine behält ihre gespeicherten Inhalte, sodass die Übertragungsdaten möglicherweise nicht abnehmen. Dies kann nicht rückgängig gemacht werden.", + "pt": "Isto elimina do seu histórico todos os registos de transferências enviadas e recebidas. Os seus ficheiros recebidos não são eliminados. Nota: o motor de transferência mantém o conteúdo armazenado, pelo que os dados de transferência podem não diminuir. Isto não pode ser anulado." } }, "storage_deleting": { @@ -2128,7 +2332,8 @@ "fr": "Suppression…", "es": "Eliminando…", "it": "Eliminazione…", - "de": "Wird gelöscht…" + "de": "Wird gelöscht…", + "pt": "A eliminar…" } }, "storage_footer": { @@ -2138,7 +2343,8 @@ "fr": "Les données de transfert sont gérées par le moteur de transfert — votre historique ainsi que le contenu des fichiers que vous avez partagés. Le bouton ci-dessous efface vos enregistrements de transferts ; le moteur conserve son contenu stocké, donc cette valeur peut ne pas baisser. Les fichiers reçus sont vos fichiers téléchargés et ne sont jamais supprimés ici.", "es": "Los datos de transferencia los gestiona el motor de transferencia: su historial más el contenido de los archivos que ha compartido. El botón de abajo borra sus registros de transferencias; el motor conserva su contenido almacenado, por lo que este valor puede no bajar. Los archivos recibidos son los archivos que ha descargado y nunca se eliminan aquí.", "it": "I dati di trasferimento sono gestiti dal motore di trasferimento: la sua cronologia più il contenuto dei file che ha condiviso. Il pulsante qui sotto cancella i record dei trasferimenti; il motore conserva il contenuto memorizzato, quindi questo valore potrebbe non diminuire. I file ricevuti sono i file che ha scaricato e non vengono mai eliminati qui.", - "de": "Übertragungsdaten werden von der Übertragungs-Engine verwaltet – Ihr Verlauf sowie der Inhalt der von Ihnen geteilten Dateien. Die Schaltfläche unten löscht Ihre Übertragungsdatensätze; die Engine behält ihre gespeicherten Inhalte, sodass dieser Wert möglicherweise nicht sinkt. Empfangene Dateien sind Ihre heruntergeladenen Dateien und werden hier niemals gelöscht." + "de": "Übertragungsdaten werden von der Übertragungs-Engine verwaltet – Ihr Verlauf sowie der Inhalt der von Ihnen geteilten Dateien. Die Schaltfläche unten löscht Ihre Übertragungsdatensätze; die Engine behält ihre gespeicherten Inhalte, sodass dieser Wert möglicherweise nicht sinkt. Empfangene Dateien sind Ihre heruntergeladenen Dateien und werden hier niemals gelöscht.", + "pt": "Os dados de transferência são geridos pelo motor de transferência — o seu histórico mais o conteúdo dos ficheiros que partilhou. O botão abaixo elimina os seus registos de transferências; o motor mantém o conteúdo armazenado, pelo que este valor pode não descer. Os ficheiros recebidos são os ficheiros que descarregou e nunca são eliminados aqui." } }, "storage_received_files": { @@ -2148,7 +2354,8 @@ "fr": "Fichiers reçus", "es": "Archivos recibidos", "it": "File ricevuti", - "de": "Empfangene Dateien" + "de": "Empfangene Dateien", + "pt": "Ficheiros recebidos" } }, "storage_temporary": { @@ -2158,7 +2365,8 @@ "fr": "Fichiers temporaires", "es": "Archivos temporales", "it": "File temporanei", - "de": "Temporäre Dateien" + "de": "Temporäre Dateien", + "pt": "Ficheiros temporários" } }, "storage_title": { @@ -2168,7 +2376,8 @@ "fr": "Stockage", "es": "Almacenamiento", "it": "Archiviazione", - "de": "Speicher" + "de": "Speicher", + "pt": "Armazenamento" } }, "storage_total": { @@ -2178,7 +2387,8 @@ "fr": "Total", "es": "Total", "it": "Totale", - "de": "Gesamt" + "de": "Gesamt", + "pt": "Total" } }, "storage_transfer_data": { @@ -2188,7 +2398,8 @@ "fr": "Données de transfert", "es": "Datos de transferencia", "it": "Dati di trasferimento", - "de": "Übertragungsdaten" + "de": "Übertragungsdaten", + "pt": "Dados de transferência" } }, "storage_transfers_deleted": { @@ -2198,7 +2409,8 @@ "fr": "Tous les transferts supprimés", "es": "Todas las transferencias eliminadas", "it": "Tutti i trasferimenti eliminati", - "de": "Alle Übertragungen gelöscht" + "de": "Alle Übertragungen gelöscht", + "pt": "Todas as transferências eliminadas" } }, "transfer_activity_description": { @@ -2208,7 +2420,8 @@ "fr": "Consultez les mises à jour importantes de ce transfert", "es": "Vea las actualizaciones importantes de esta transferencia", "it": "Veda gli aggiornamenti importanti di questo trasferimento", - "de": "Wichtige Aktualisierungen zu dieser Übertragung ansehen" + "de": "Wichtige Aktualisierungen zu dieser Übertragung ansehen", + "pt": "Ver as atualizações importantes desta transferência" } }, "transfer_activity_title": { @@ -2218,7 +2431,8 @@ "fr": "Activité", "es": "Actividad", "it": "Attività", - "de": "Aktivität" + "de": "Aktivität", + "pt": "Atividade" } }, "transfer_delete_description": { @@ -2234,7 +2448,8 @@ "fr": "« {arg1} » cessera d’être partagé et son historique de transfert sera retiré de cet appareil.", "es": "«{arg1}» dejará de compartirse y su historial de transferencia se eliminará de este dispositivo.", "it": "«{arg1}» non verrà più condiviso e la sua cronologia di trasferimento verrà rimossa da questo dispositivo.", - "de": "„{arg1}“ wird nicht mehr geteilt und sein Übertragungsverlauf wird von diesem Gerät entfernt." + "de": "„{arg1}“ wird nicht mehr geteilt und sein Übertragungsverlauf wird von diesem Gerät entfernt.", + "pt": "«{arg1}» deixará de ser partilhado e o seu histórico de transferência será removido deste dispositivo." } }, "transfer_delete_title": { @@ -2244,7 +2459,8 @@ "fr": "Supprimer le transfert ?", "es": "¿Eliminar la transferencia?", "it": "Eliminare il trasferimento?", - "de": "Übertragung löschen?" + "de": "Übertragung löschen?", + "pt": "Eliminar a transferência?" } }, "transfer_deleted": { @@ -2254,7 +2470,8 @@ "fr": "Transfert supprimé.", "es": "Transferencia eliminada.", "it": "Trasferimento eliminato.", - "de": "Übertragung gelöscht." + "de": "Übertragung gelöscht.", + "pt": "Transferência eliminada." } }, "transfer_deleting": { @@ -2264,7 +2481,8 @@ "fr": "Suppression…", "es": "Eliminando…", "it": "Eliminazione…", - "de": "Wird gelöscht…" + "de": "Wird gelöscht…", + "pt": "A eliminar…" } }, "transfer_details_title": { @@ -2274,7 +2492,8 @@ "fr": "Détails du transfert", "es": "Detalles de la transferencia", "it": "Dettagli del trasferimento", - "de": "Übertragungsdetails" + "de": "Übertragungsdetails", + "pt": "Detalhes da transferência" } }, "transfer_event_approved": { @@ -2284,7 +2503,8 @@ "fr": "Accès du destinataire approuvé", "es": "Acceso del destinatario aprobado", "it": "Accesso del destinatario approvato", - "de": "Empfängerzugriff genehmigt" + "de": "Empfängerzugriff genehmigt", + "pt": "Acesso do destinatário aprovado" } }, "transfer_event_completed": { @@ -2294,7 +2514,8 @@ "fr": "Un destinataire a terminé le transfert", "es": "Un destinatario completó la transferencia", "it": "Un destinatario ha completato il trasferimento", - "de": "Ein Empfänger hat die Übertragung abgeschlossen" + "de": "Ein Empfänger hat die Übertragung abgeschlossen", + "pt": "Um destinatário concluiu a transferência" } }, "transfer_event_connecting": { @@ -2304,7 +2525,8 @@ "fr": "Connexion à l’expéditeur", "es": "Conectando con el remitente", "it": "Connessione al mittente", - "de": "Verbindung zum Absender" + "de": "Verbindung zum Absender", + "pt": "A ligar ao remetente" } }, "transfer_event_downloading": { @@ -2314,7 +2536,8 @@ "fr": "Téléchargement", "es": "Descargando", "it": "Download", - "de": "Wird geladen" + "de": "Wird geladen", + "pt": "A descarregar" } }, "transfer_event_failed": { @@ -2324,7 +2547,8 @@ "fr": "Le transfert a rencontré un problème", "es": "La transferencia tuvo un problema", "it": "Il trasferimento ha riscontrato un problema", - "de": "Bei der Übertragung ist ein Problem aufgetreten" + "de": "Bei der Übertragung ist ein Problem aufgetreten", + "pt": "A transferência teve um problema" } }, "transfer_event_preparing": { @@ -2334,7 +2558,8 @@ "fr": "Préparation de votre transfert", "es": "Preparando su transferencia", "it": "Preparazione del trasferimento", - "de": "Ihre Übertragung wird vorbereitet" + "de": "Ihre Übertragung wird vorbereitet", + "pt": "A preparar a sua transferência" } }, "transfer_event_ready": { @@ -2344,7 +2569,8 @@ "fr": "Prêt à partager", "es": "Listo para compartir", "it": "Pronto per la condivisione", - "de": "Bereit zum Teilen" + "de": "Bereit zum Teilen", + "pt": "Pronto para partilhar" } }, "transfer_event_refused": { @@ -2354,7 +2580,8 @@ "fr": "Accès du destinataire refusé", "es": "Acceso del destinatario rechazado", "it": "Accesso del destinatario rifiutato", - "de": "Empfängerzugriff abgelehnt" + "de": "Empfängerzugriff abgelehnt", + "pt": "Acesso do destinatário recusado" } }, "transfer_event_requested": { @@ -2364,7 +2591,8 @@ "fr": "Un destinataire a demandé l’accès", "es": "Un destinatario solicitó acceso", "it": "Un destinatario ha richiesto l’accesso", - "de": "Ein Empfänger hat Zugriff angefragt" + "de": "Ein Empfänger hat Zugriff angefragt", + "pt": "Um destinatário pediu acesso" } }, "transfer_event_saving": { @@ -2374,7 +2602,8 @@ "fr": "Enregistrement", "es": "Guardando", "it": "Salvataggio", - "de": "Wird gesichert" + "de": "Wird gesichert", + "pt": "A guardar" } }, "transfer_event_stopped": { @@ -2384,7 +2613,8 @@ "fr": "Partage arrêté", "es": "Se dejó de compartir", "it": "Condivisione interrotta", - "de": "Freigabe beendet" + "de": "Freigabe beendet", + "pt": "Partilha parada" } }, "transfer_event_updated": { @@ -2394,7 +2624,8 @@ "fr": "Transfert mis à jour", "es": "Transferencia actualizada", "it": "Trasferimento aggiornato", - "de": "Übertragung aktualisiert" + "de": "Übertragung aktualisiert", + "pt": "Transferência atualizada" } }, "transfer_file_count": { @@ -2425,6 +2656,10 @@ "de": { "one": "{count} Datei", "other": "{count} Dateien" + }, + "pt": { + "one": "{count} ficheiro", + "other": "{count} ficheiros" } } }, @@ -2435,7 +2670,8 @@ "fr": "Invitation enregistrée.", "es": "Invitación guardada.", "it": "Invito salvato.", - "de": "Einladung gesichert." + "de": "Einladung gesichert.", + "pt": "Convite guardado." } }, "transfer_nearby_device": { @@ -2445,7 +2681,8 @@ "fr": "Appareil à proximité", "es": "Dispositivo cercano", "it": "Dispositivo nelle vicinanze", - "de": "Gerät in der Nähe" + "de": "Gerät in der Nähe", + "pt": "Dispositivo próximo" } }, "transfer_nfc_unavailable": { @@ -2455,7 +2692,8 @@ "fr": "L’écriture de tag NFC n’est pas disponible sur cet appareil.", "es": "La escritura de etiquetas NFC no está disponible en este dispositivo.", "it": "La scrittura dei tag NFC non è disponibile su questo dispositivo.", - "de": "Das Beschreiben von NFC-Tags ist auf diesem Gerät nicht verfügbar." + "de": "Das Beschreiben von NFC-Tags ist auf diesem Gerät nicht verfügbar.", + "pt": "A escrita de etiquetas NFC não está disponível neste dispositivo." } }, "transfer_nfc_waiting": { @@ -2465,7 +2703,8 @@ "fr": "Approchez votre appareil d’un tag NFC inscriptible.", "es": "Acerque su dispositivo a una etiqueta NFC grabable.", "it": "Avvicini il dispositivo a un tag NFC scrivibile.", - "de": "Halten Sie Ihr Gerät an ein beschreibbares NFC-Tag." + "de": "Halten Sie Ihr Gerät an ein beschreibbares NFC-Tag.", + "pt": "Aproxime o seu dispositivo de uma etiqueta NFC gravável." } }, "transfer_nfc_written": { @@ -2475,7 +2714,8 @@ "fr": "Invitation écrite sur le tag NFC.", "es": "Invitación escrita en la etiqueta NFC.", "it": "Invito scritto sul tag NFC.", - "de": "Einladung auf das NFC-Tag geschrieben." + "de": "Einladung auf das NFC-Tag geschrieben.", + "pt": "Convite escrito na etiqueta NFC." } }, "transfer_no_activity": { @@ -2485,7 +2725,8 @@ "fr": "Aucune activité à afficher pour l’instant.", "es": "Todavía no hay actividad que mostrar.", "it": "Non c’è ancora alcuna attività da mostrare.", - "de": "Es gibt noch keine Aktivität anzuzeigen." + "de": "Es gibt noch keine Aktivität anzuzeigen.", + "pt": "Ainda não há atividade para mostrar." } }, "transfer_no_receivers": { @@ -2495,7 +2736,8 @@ "fr": "Personne n’a encore demandé ce transfert.", "es": "Nadie ha solicitado aún esta transferencia.", "it": "Nessuno ha ancora richiesto questo trasferimento.", - "de": "Noch niemand hat diese Übertragung angefragt." + "de": "Noch niemand hat diese Übertragung angefragt.", + "pt": "Ainda ninguém pediu esta transferência." } }, "transfer_receiver_accepted": { @@ -2505,7 +2747,8 @@ "fr": "Approuvé — en attente de la fin", "es": "Aprobado: esperando a que se complete", "it": "Approvato: in attesa del completamento", - "de": "Genehmigt – wartet auf Abschluss" + "de": "Genehmigt – wartet auf Abschluss", + "pt": "Aprovado — a aguardar conclusão" } }, "transfer_receiver_completed": { @@ -2515,7 +2758,8 @@ "fr": "Reçu avec succès", "es": "Recibido correctamente", "it": "Ricevuto correttamente", - "de": "Erfolgreich empfangen" + "de": "Erfolgreich empfangen", + "pt": "Recebido com sucesso" } }, "transfer_receiver_expired": { @@ -2525,7 +2769,8 @@ "fr": "Demande expirée", "es": "Solicitud caducada", "it": "Richiesta scaduta", - "de": "Anfrage abgelaufen" + "de": "Anfrage abgelaufen", + "pt": "Pedido expirado" } }, "transfer_receiver_refused": { @@ -2535,7 +2780,8 @@ "fr": "Demande refusée", "es": "Solicitud rechazada", "it": "Richiesta rifiutata", - "de": "Anfrage abgelehnt" + "de": "Anfrage abgelehnt", + "pt": "Pedido recusado" } }, "transfer_receiver_requested": { @@ -2545,7 +2791,8 @@ "fr": "En attente de votre approbation", "es": "Esperando su aprobación", "it": "In attesa della sua approvazione", - "de": "Wartet auf Ihre Genehmigung" + "de": "Wartet auf Ihre Genehmigung", + "pt": "A aguardar a sua aprovação" } }, "transfer_receiver_unknown": { @@ -2555,7 +2802,8 @@ "fr": "Statut indisponible", "es": "Estado no disponible", "it": "Stato non disponibile", - "de": "Status nicht verfügbar" + "de": "Status nicht verfügbar", + "pt": "Estado indisponível" } }, "transfer_receivers_completed_count": { @@ -2571,7 +2819,8 @@ "fr": "{count} terminés", "es": "{count} completados", "it": "{count} completati", - "de": "{count} abgeschlossen" + "de": "{count} abgeschlossen", + "pt": "{count} concluídos" } }, "transfer_receivers_description": { @@ -2581,7 +2830,8 @@ "fr": "Demandes, approbations et livraisons terminées", "es": "Solicitudes, aprobaciones y entregas completadas", "it": "Richieste, approvazioni e consegne completate", - "de": "Anfragen, Genehmigungen und abgeschlossene Zustellungen" + "de": "Anfragen, Genehmigungen und abgeschlossene Zustellungen", + "pt": "Pedidos, aprovações e entregas concluídas" } }, "transfer_receivers_pending": { @@ -2597,7 +2847,8 @@ "fr": "{count} en attente", "es": "{count} en espera", "it": "{count} in attesa", - "de": "{count} warten" + "de": "{count} warten", + "pt": "{count} em espera" } }, "transfer_receivers_title": { @@ -2607,7 +2858,8 @@ "fr": "Destinataires", "es": "Destinatarios", "it": "Destinatari", - "de": "Empfänger" + "de": "Empfänger", + "pt": "Destinatários" } }, "transfer_scan_qr": { @@ -2617,7 +2869,8 @@ "fr": "Scannez avec VniDrop pour recevoir ce transfert", "es": "Escanee con VniDrop para recibir esta transferencia", "it": "Scansioni con VniDrop per ricevere questo trasferimento", - "de": "Mit VniDrop scannen, um diese Übertragung zu empfangen" + "de": "Mit VniDrop scannen, um diese Übertragung zu empfangen", + "pt": "Leia com o VniDrop para receber esta transferência" } }, "transfer_share_description": { @@ -2627,7 +2880,8 @@ "fr": "QR code, fichier d’invitation et options à proximité", "es": "Código QR, archivo de invitación y opciones cercanas", "it": "Codice QR, file di invito e opzioni nelle vicinanze", - "de": "QR-Code, Einladungsdatei und Optionen in der Nähe" + "de": "QR-Code, Einladungsdatei und Optionen in der Nähe", + "pt": "Código QR, ficheiro de convite e opções por perto" } }, "transfer_share_title": { @@ -2637,7 +2891,8 @@ "fr": "Partager", "es": "Compartir", "it": "Condividi", - "de": "Teilen" + "de": "Teilen", + "pt": "Partilhar" } }, "value_unavailable": { @@ -2647,7 +2902,8 @@ "fr": "Non disponible", "es": "No disponible", "it": "Non disponibile", - "de": "Nicht verfügbar" + "de": "Nicht verfügbar", + "pt": "Indisponível" } }, "version_title": { @@ -2657,7 +2913,8 @@ "fr": "Version de l’app", "es": "Versión de la app", "it": "Versione dell’app", - "de": "App-Version" + "de": "App-Version", + "pt": "Versão da app" } } } diff --git a/shared/src/commonMain/composeResources/values-pt/strings.xml b/shared/src/commonMain/composeResources/values-pt/strings.xml new file mode 100644 index 0000000..4071ac2 --- /dev/null +++ b/shared/src/commonMain/composeResources/values-pt/strings.xml @@ -0,0 +1,257 @@ + + + Comunicar um erro + O VniDrop transfere ficheiros e pastas diretamente de um dispositivo para outro através da rede, sem os carregar para qualquer serviço de alojamento. Não é necessário criar qualquer conta e não fica nenhuma cópia da sua transferência na nuvem depois de terminar. + Uma transferência direta entre dispositivos — os seus ficheiros vão diretamente para o destinatário. + As ligações são autenticadas e cifradas ponto a ponto (através do Iroh), e os ficheiros recebidos são verificados pela impressão digital do seu conteúdo. + É você quem decide quem recebe: aprove cada pedido ou abra uma transferência a qualquer pessoa que tenha o convite. + Sem conta — não há nada para registar. + Código aberto, publicado sob a licença Apache 2.0. + O que o VniDrop é + Não é armazenamento na nuvem — nenhum servidor guarda os seus ficheiros e nada fica na nuvem após uma transferência. + Não é difusão pública — um convite é uma ligação de acesso privado, não um anúncio a toda a gente por perto. + Não é um serviço de sincronização ou de cópia de segurança. + O que o VniDrop não é + Licença + Política de privacidade + Os convites são chaves de acesso. Trate um código QR, uma etiqueta NFC ou um ficheiro .vnd como uma ligação de acesso privado e partilhe-o apenas com as pessoas pretendidas — sobretudo com «Qualquer pessoa com esta transferência». + Recusa por predefinição — o VniDrop apenas fornece o conteúdo de uma partilha ativa e rejeita pedidos desconhecidos. + Os ficheiros recebidos são guardados no seu dispositivo e nunca substituem um ficheiro existente. + Política de privacidade + Se dois dispositivos não conseguirem ligar-se diretamente, a ligação cifrada pode ser retransmitida. Os retransmissores apenas encaminham pacotes cifrados; nunca guardam os seus ficheiros. + Privacidade e segurança + Envie ficheiros diretamente. Mantenha o controlo sobre quem os recebe. + Acerca de + Acompanhar o aspeto claro ou escuro deste dispositivo. + Modo escuro + Modo claro + Sistema + Aspeto + Pedido de receção + ID do dispositivo: %1$s + Um dispositivo próximo + %1$d pedidos em espera + %1$s quer receber «%2$s». + Nível da bateria + nome@exemplo.com + E-mail de contacto (opcional) + Diga-nos o que correu mal. Anexamos informações do dispositivo e, opcionalmente, registos recentes (com os valores sensíveis ocultados). + Informações do dispositivo + Descreva o que esperava que acontecesse + O que esperava? + Incluir registos recentes + Ajuda-nos a diagnosticar o problema. Os valores sensíveis são ocultados antes do envio. + Tamanho do anexo de registos + Descreva o que esperava. + Descreva o que aconteceu. + Enumere os passos para reproduzir o problema + Passos para reproduzir (opcional) + Enviar relatório + Não foi possível enviar o relatório de erro. Tente novamente mais tarde. + Obrigado — o seu relatório de erro foi registado. + A enviar… + Descreva o que aconteceu + O que aconteceu? + Aprovar + Voltar + Cancelar + Cancelar + Alterar ficheiros + Escolher ficheiros + Escolher pasta + Limpar + Fechar + Nova transferência + Eliminar transferência + Guardar ficheiro .vnd + Partilhar convite + Abrir Definições + Receber + Começar a receber + Recusar + Remover ficheiro + Usar predefinição + Tentar novamente + Começar a partilhar + A preparar a transferência… + Mostrar em Ficheiros + Escrever em etiqueta NFC + Modelo do dispositivo + Nome do dispositivo + Enviar relatórios de falhas e eventos de utilização anónimos para nos ajudar a melhorar o VniDrop. Pode desativar isto a qualquer momento. Convites, caminhos de ficheiros e conteúdos das transferências nunca são incluídos. + A partilha de diagnósticos está desativada. + A partilha de diagnósticos está ativada. + Partilhar diagnósticos + É necessário acesso à câmara para ler um código QR. + Não foi possível carregar as informações do dispositivo. + O VniDrop não conseguiu aceder aos ficheiros ou à pasta selecionados. Verifique as permissões e tente novamente. + Algo correu mal. Tente novamente. + O VniDrop não conseguiu concluir o arranque. Feche a app e tente novamente. + Não foi possível ler este convite. Peça um novo ao remetente. + Esse convite está vazio. Tente abri-lo novamente. + A biblioteca nativa do VniDrop está em falta nesta compilação. + Não foi possível utilizar esta etiqueta NFC. Tente outra. + O remetente não aprovou esta transferência, ou foi recusada. + O VniDrop não conseguiu guardar os dados da transferência neste dispositivo. + Não foi possível abrir o item selecionado. Tente escolhê-lo novamente. + Selecione pelo menos um item para partilhar. + O VniDrop não conseguiu abrir os seus sockets de rede neste dispositivo. + O VniDrop ainda está a iniciar. Abra o convite novamente dentro de momentos. + Não foi possível concluir a transferência. Verifique a sua ligação e tente novamente. + Nome do destinatário + Nome do remetente + Nome da transferência + Nome a apresentar + Permissão necessária + Indisponível + A verificar a pasta… + Pronto + Ficheiros + Tamanho + Estado + Receber + Enviar + Definições + Rede + Seja notificado sobre novos pedidos de receção enquanto o VniDrop está em segundo plano. + Notificações ativadas. + Permitir notificações + As notificações estão desativadas para o VniDrop. Pode ativá-las nas Definições. + Não foi possível abrir as definições de notificações. + Notificações + As notificações não estão disponíveis neste dispositivo. + Sistema operativo + Guardar as transferências recebidas em + Preferências + Cancelado + Concluído + Ligado + A ligar + A descarregar + Falhou + A preparar-se + Transferência interrompida + A preparar + Pronto + A receber + A pedir acesso + A guardar + A enviar + A enviar para %1$d + Pronto para partilhar + A processar… + Escolha o método de convite ao seu dispor. + Como pretende ligar-se? + Limpar histórico + Todas as receções concluídas, falhadas e canceladas serão removidas do histórico do VniDrop. Os ficheiros descarregados permanecerão neste dispositivo. + Limpar o histórico de receção? + Transferência recebida. + «%1$s» será removido do histórico do VniDrop. O ficheiro descarregado permanecerá neste dispositivo. + Eliminar do histórico de receção + Remover do histórico? + Abra um convite do VniDrop, leia um código QR ou aproxime uma etiqueta NFC. + Ainda não recebeu nada + Histórico de receção limpo. + Histórico + Abrir um convite .vnd + Escolha um convite guardado ou partilhado neste dispositivo. + Ler etiqueta NFC + Aproxime este dispositivo da etiqueta de convite do remetente. + Ler código QR + Use a câmara para ler o código VniDrop do remetente. + Transferências que recebeu neste dispositivo. + Aproxime da etiqueta NFC… + Não foi possível abrir o VniDrop em Ficheiros. + Rever transferência + Receber + Transferência VniDrop + Qualquer pessoa com esta transferência + Não é necessária aprovação. Utilize apenas para itens que não se importe de partilhar. + Qualquer pessoa com o convite pode descarregar até parar de partilhar. Não utilize para itens privados ou sensíveis. + Perguntar antes de cada descarga + Aprova ou recusa cada novo destinatário. + Quem a pode receber? + Selecione ficheiros ou uma pasta deste dispositivo. Poderá rever a seleção antes de criar a transferência. + Escolha o que partilhar + Crie uma transferência, decida quem a pode receber e depois convide essas pessoas com um código QR, uma etiqueta NFC ou um ficheiro de convite. + Ainda não partilhou nada + Tamanho indisponível + Pasta + Criar uma nova transferência + Nova transferência + Rever transferência + %1$d ficheiros selecionados + Parar de partilhar + Isto para a transferência e interrompe quem estiver a descarregá-la. Permanece no seu histórico como Parada. + Transferências que está a partilhar a partir deste dispositivo. + Enviar + Transferência criada. + Detalhes da transferência + As suas transferências + O seu nome, onde as transferências são guardadas, o aspeto e as notificações. + Definições + Ignorar + Disponível + Cancelado + Concluído + Falhou + A preparar + A receber + Parada + A calcular… + Eliminar todas as transferências + Isto elimina do seu histórico todos os registos de transferências enviadas e recebidas. Os seus ficheiros recebidos não são eliminados. Nota: o motor de transferência mantém o conteúdo armazenado, pelo que os dados de transferência podem não diminuir. Isto não pode ser anulado. + A eliminar… + Os dados de transferência são geridos pelo motor de transferência — o seu histórico mais o conteúdo dos ficheiros que partilhou. O botão abaixo elimina os seus registos de transferências; o motor mantém o conteúdo armazenado, pelo que este valor pode não descer. Os ficheiros recebidos são os ficheiros que descarregou e nunca são eliminados aqui. + Ficheiros recebidos + Ficheiros temporários + Armazenamento + Total + Dados de transferência + Todas as transferências eliminadas + Ver as atualizações importantes desta transferência + Atividade + «%1$s» deixará de ser partilhado e o seu histórico de transferência será removido deste dispositivo. + Eliminar a transferência? + Transferência eliminada. + A eliminar… + Detalhes da transferência + Acesso do destinatário aprovado + Um destinatário concluiu a transferência + A ligar ao remetente + A descarregar + A transferência teve um problema + A preparar a sua transferência + Pronto para partilhar + Acesso do destinatário recusado + Um destinatário pediu acesso + A guardar + Partilha parada + Transferência atualizada + Convite guardado. + Dispositivo próximo + A escrita de etiquetas NFC não está disponível neste dispositivo. + Aproxime o seu dispositivo de uma etiqueta NFC gravável. + Convite escrito na etiqueta NFC. + Ainda não há atividade para mostrar. + Ainda ninguém pediu esta transferência. + Aprovado — a aguardar conclusão + Recebido com sucesso + Pedido expirado + Pedido recusado + A aguardar a sua aprovação + Estado indisponível + %1$d concluídos + Pedidos, aprovações e entregas concluídas + %1$d em espera + Destinatários + Leia com o VniDrop para receber esta transferência + Código QR, ficheiro de convite e opções por perto + Partilhar + Indisponível + Versão da app + + %1$d ficheiro + %1$d ficheiros + + From 48a523371cf8acc726234e88c3f6c0285615c0f9 Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 20 Jul 2026 11:29:58 +0200 Subject: [PATCH 10/13] feat(l10n): add Polish translations Translate all 253 user-facing strings to Polish (standard professional UI register; gender-neutral phrasing; count strings use number-neutral "label: {count}" form). transfer_file_count uses full CLDR plural categories (one/few/many/other). Generates values-pl/strings.xml for KMP, pl localizations in the Apple catalog, and adds pl to CFBundleLocalizations. --- apple/VniDrop/Resources/Info.plist | 1 + apple/VniDrop/Resources/Localizable.xcstrings | 1542 +++++++++++++++++ localization/strings.json | 765 +++++--- .../composeResources/values-pl/strings.xml | 259 +++ 4 files changed, 2314 insertions(+), 253 deletions(-) create mode 100644 shared/src/commonMain/composeResources/values-pl/strings.xml diff --git a/apple/VniDrop/Resources/Info.plist b/apple/VniDrop/Resources/Info.plist index 2e2ca93..1620e9e 100644 --- a/apple/VniDrop/Resources/Info.plist +++ b/apple/VniDrop/Resources/Info.plist @@ -10,6 +10,7 @@ it de pt + pl CADisableMinimumFrameDurationOnPhone diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index 713807f..5e2eb44 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -39,6 +39,12 @@ "value": "%1$@ %2$@ · %3$@" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -81,6 +87,12 @@ "value": "%1$@ · %2$@" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -127,6 +139,12 @@ "value": "Segnala un bug" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zgłoś błąd" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -169,6 +187,12 @@ "value": "VniDrop trasferisce file e cartelle direttamente da un dispositivo a un altro sulla rete, senza caricarli su alcun servizio di hosting. Non c’è alcun account da creare e nessuna copia del suo trasferimento rimane nel cloud una volta terminato." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop przesyła pliki i foldery bezpośrednio z jednego urządzenia na drugie przez sieć, bez przesyłania ich do jakiejkolwiek usługi hostingowej. Nie trzeba zakładać konta, a po zakończeniu żadna kopia transferu nie pozostaje w chmurze." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -211,6 +235,12 @@ "value": "Un trasferimento diretto da dispositivo a dispositivo: i suoi file vanno direttamente al destinatario." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Bezpośredni transfer między urządzeniami — pliki trafiają prosto do odbiorcy." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -253,6 +283,12 @@ "value": "Le connessioni sono autenticate e cifrate end-to-end (tramite Iroh) e i file in arrivo vengono verificati tramite l’impronta del loro contenuto." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Połączenia są uwierzytelniane i szyfrowane od końca do końca (przez Iroh), a przychodzące pliki są weryfikowane na podstawie skrótu ich zawartości." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -295,6 +331,12 @@ "value": "Lei decide chi riceve: approvi ogni richiesta oppure apra un trasferimento a chiunque disponga dell’invito." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "To Ty decydujesz, kto otrzymuje: zatwierdź każde żądanie lub udostępnij transfer każdemu, kto ma zaproszenie." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -337,6 +379,12 @@ "value": "Senza account: non c’è nulla da registrare." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Bez konta — nie trzeba się rejestrować." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -379,6 +427,12 @@ "value": "Open source, rilasciato con licenza Apache 2.0." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Otwarte oprogramowanie, wydane na licencji Apache 2.0." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -421,6 +475,12 @@ "value": "Cos’è VniDrop" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Czym jest VniDrop" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -463,6 +523,12 @@ "value": "Non è un’archiviazione cloud: nessun server conserva i suoi file e nulla resta nel cloud dopo un trasferimento." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "To nie magazyn w chmurze — żaden serwer nie przechowuje Twoich plików i nic nie pozostaje w chmurze po transferze." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -505,6 +571,12 @@ "value": "Non è una diffusione pubblica: un invito è un link di accesso privato, non un annuncio a tutti nelle vicinanze." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "To nie publiczne rozgłaszanie — zaproszenie to prywatny link dostępu, a nie ogłoszenie dla wszystkich w pobliżu." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -547,6 +619,12 @@ "value": "Non è un servizio di sincronizzazione o di backup." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "To nie usługa synchronizacji ani kopii zapasowej." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -589,6 +667,12 @@ "value": "Cosa non è VniDrop" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Czym VniDrop nie jest" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -631,6 +715,12 @@ "value": "Licenza" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Licencja" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -673,6 +763,12 @@ "value": "Informativa sulla privacy" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Polityka prywatności" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -715,6 +811,12 @@ "value": "Gli inviti sono chiavi di accesso. Tratti un codice QR, un tag NFC o un file .vnd come un link di accesso privato e lo condivida solo con le persone previste, soprattutto con «Chiunque abbia questo trasferimento»." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zaproszenia są kluczami dostępu. Traktuj kod QR, tag NFC lub plik .vnd jak prywatny link dostępu i udostępniaj go tylko zamierzonym osobom — zwłaszcza przy opcji „Każdy, kto ma ten transfer”." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -757,6 +859,12 @@ "value": "Rifiuto predefinito: VniDrop serve solo il contenuto di una condivisione attiva e rifiuta le richieste sconosciute." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Domyślnie odmowa — VniDrop udostępnia tylko zawartość aktywnego udostępnienia i odrzuca nieznane żądania." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -799,6 +907,12 @@ "value": "I file ricevuti vengono salvati sul suo dispositivo e non sovrascrivono mai un file esistente." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odebrane pliki są zapisywane na Twoim urządzeniu i nigdy nie nadpisują istniejącego pliku." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -841,6 +955,12 @@ "value": "Informativa sulla privacy" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Polityka prywatności" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -883,6 +1003,12 @@ "value": "Se due dispositivi non riescono a connettersi direttamente, la connessione cifrata può essere instradata tramite relay. I relay inoltrano solo pacchetti cifrati; non memorizzano mai i suoi file." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Jeśli dwa urządzenia nie mogą połączyć się bezpośrednio, szyfrowane połączenie może być przekazywane przez przekaźnik. Przekaźniki przekazują tylko zaszyfrowane pakiety; nigdy nie przechowują Twoich plików." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -925,6 +1051,12 @@ "value": "Privacy e sicurezza" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Prywatność i bezpieczeństwo" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -967,6 +1099,12 @@ "value": "Invii file direttamente. Mantenga il controllo su chi li riceve." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wysyłaj pliki bezpośrednio. Zachowaj kontrolę nad tym, kto je otrzymuje." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1009,6 +1147,12 @@ "value": "Informazioni" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Informacje" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1051,6 +1195,12 @@ "value": "Segue l’aspetto chiaro o scuro di questo dispositivo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Dopasuj do jasnego lub ciemnego wyglądu tego urządzenia." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1093,6 +1243,12 @@ "value": "Modalità scura" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Tryb ciemny" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1135,6 +1291,12 @@ "value": "Modalità chiara" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Tryb jasny" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1177,6 +1339,12 @@ "value": "Sistema" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "System" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1219,6 +1387,12 @@ "value": "Aspetto" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wygląd" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1261,6 +1435,12 @@ "value": "Richiesta di ricezione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Prośba o odbiór" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1303,6 +1483,12 @@ "value": "ID dispositivo: %1$@" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Identyfikator urządzenia: %1$@" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1345,6 +1531,12 @@ "value": "Un dispositivo nelle vicinanze" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Urządzenie w pobliżu" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1387,6 +1579,12 @@ "value": "%1$d richieste in attesa" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Oczekujące prośby: %1$d" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1429,6 +1627,12 @@ "value": "%1$@ vuole ricevere «%2$@»." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ chce odebrać „%2$@”." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1471,6 +1675,12 @@ "value": "Livello batteria" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Poziom baterii" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1513,6 +1723,12 @@ "value": "nome@esempio.com" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "nazwa@przyklad.com" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1555,6 +1771,12 @@ "value": "Email di contatto (facoltativa)" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "E-mail kontaktowy (opcjonalnie)" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1597,6 +1819,12 @@ "value": "Ci dica cosa è andato storto. Alleghiamo le informazioni sul dispositivo e, facoltativamente, i log recenti (con i valori sensibili oscurati)." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Napisz, co poszło nie tak. Dołączamy informacje o urządzeniu i opcjonalnie ostatnie dzienniki (z ukrytymi wrażliwymi wartościami)." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1639,6 +1867,12 @@ "value": "Informazioni sul dispositivo" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Informacje o urządzeniu" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1681,6 +1915,12 @@ "value": "Descriva cosa si aspettava che accadesse" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Opisz oczekiwane zachowanie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1723,6 +1963,12 @@ "value": "Cosa si aspettava?" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Czego oczekiwano?" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1765,6 +2011,12 @@ "value": "Includi i log recenti" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Dołącz ostatnie dzienniki" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1807,6 +2059,12 @@ "value": "Ci aiuta a diagnosticare il problema. I valori sensibili vengono oscurati prima dell’invio." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pomaga nam zdiagnozować problem. Wrażliwe wartości są ukrywane przed wysłaniem." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1849,6 +2107,12 @@ "value": "Dimensione dell’allegato dei log" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Rozmiar załącznika z dziennikami" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1891,6 +2155,12 @@ "value": "Descriva cosa si aspettava." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Opisz oczekiwane zachowanie." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1933,6 +2203,12 @@ "value": "Descriva cosa è accaduto." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Opisz, co się stało." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -1975,6 +2251,12 @@ "value": "Elenchi i passaggi per riprodurre il problema" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wymień kroki umożliwiające odtworzenie problemu" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2017,6 +2299,12 @@ "value": "Passaggi per riprodurre (facoltativi)" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Kroki do odtworzenia (opcjonalnie)" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2059,6 +2347,12 @@ "value": "Invia segnalazione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wyślij zgłoszenie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2101,6 +2395,12 @@ "value": "Impossibile inviare la segnalazione. Riprovi più tardi." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się wysłać zgłoszenia błędu. Spróbuj ponownie później." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2143,6 +2443,12 @@ "value": "Grazie: la sua segnalazione è stata registrata." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Dziękujemy — Twoje zgłoszenie błędu zostało zapisane." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2185,6 +2491,12 @@ "value": "Invio in corso…" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wysyłanie…" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2227,6 +2539,12 @@ "value": "Descriva cosa è accaduto" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Opisz, co się stało" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2269,6 +2587,12 @@ "value": "Cosa è accaduto?" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Co się stało?" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2311,6 +2635,12 @@ "value": "Approva" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zatwierdź" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2353,6 +2683,12 @@ "value": "Indietro" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wstecz" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2395,6 +2731,12 @@ "value": "Annulla" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Anuluj" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2437,6 +2779,12 @@ "value": "Annulla" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Anuluj" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2479,6 +2827,12 @@ "value": "Cambia file" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zmień pliki" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2521,6 +2875,12 @@ "value": "Scegli file" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wybierz pliki" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2563,6 +2923,12 @@ "value": "Scegli cartella" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wybierz folder" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2605,6 +2971,12 @@ "value": "Cancella" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wyczyść" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2647,6 +3019,12 @@ "value": "Chiudi" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zamknij" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2689,6 +3067,12 @@ "value": "Nuovo trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nowy transfer" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2731,6 +3115,12 @@ "value": "Elimina trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usuń transfer" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2773,6 +3163,12 @@ "value": "Salva file .vnd" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zapisz plik .vnd" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2815,6 +3211,12 @@ "value": "Condividi invito" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Udostępnij zaproszenie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2857,6 +3259,12 @@ "value": "Apri Impostazioni" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Otwórz Ustawienia" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2899,6 +3307,12 @@ "value": "Ricevi" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbierz" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2941,6 +3355,12 @@ "value": "Inizia a ricevere" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Rozpocznij odbieranie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -2983,6 +3403,12 @@ "value": "Rifiuta" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odrzuć" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3025,6 +3451,12 @@ "value": "Rimuovi file" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usuń plik" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3067,6 +3499,12 @@ "value": "Usa predefinito" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Użyj domyślnego" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3109,6 +3547,12 @@ "value": "Riprova" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Spróbuj ponownie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3151,6 +3595,12 @@ "value": "Inizia a condividere" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Rozpocznij udostępnianie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3193,6 +3643,12 @@ "value": "Preparazione del trasferimento…" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przygotowywanie transferu…" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3235,6 +3691,12 @@ "value": "Mostra in File" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pokaż w Plikach" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3277,6 +3739,12 @@ "value": "Scrivi su tag NFC" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zapisz na tagu NFC" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3319,6 +3787,12 @@ "value": "Modello del dispositivo" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Model urządzenia" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3361,6 +3835,12 @@ "value": "Nome del dispositivo" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nazwa urządzenia" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3403,6 +3883,12 @@ "value": "Invia report di arresto anomalo ed eventi d’uso anonimi per aiutarci a migliorare VniDrop. Può disattivarlo in qualsiasi momento. Inviti, percorsi dei file e contenuti dei trasferimenti non vengono mai inclusi." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wysyłaj anonimowe raporty o awariach i zdarzenia użytkowania, aby pomóc nam ulepszać VniDrop. Możesz to wyłączyć w dowolnej chwili. Zaproszenia, ścieżki plików i zawartość transferów nigdy nie są dołączane." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3445,6 +3931,12 @@ "value": "La condivisione dei dati diagnostici è disattivata." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Udostępnianie diagnostyki jest wyłączone." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3487,6 +3979,12 @@ "value": "La condivisione dei dati diagnostici è attivata." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Udostępnianie diagnostyki jest włączone." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3529,6 +4027,12 @@ "value": "Condividi dati diagnostici" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Udostępniaj diagnostykę" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3571,6 +4075,12 @@ "value": "Per scansionare un codice QR è necessario l’accesso alla fotocamera." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Do zeskanowania kodu QR wymagany jest dostęp do aparatu." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3613,6 +4123,12 @@ "value": "Impossibile caricare le informazioni sul dispositivo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się wczytać informacji o urządzeniu." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3655,6 +4171,12 @@ "value": "VniDrop non ha potuto accedere ai file o alla cartella selezionati. Controlli le autorizzazioni e riprovi." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop nie mógł uzyskać dostępu do wybranych plików lub folderu. Sprawdź uprawnienia i spróbuj ponownie." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3697,6 +4219,12 @@ "value": "Qualcosa è andato storto. Riprovi." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Coś poszło nie tak. Spróbuj ponownie." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3739,6 +4267,12 @@ "value": "VniDrop non ha potuto completare l’avvio. Chiuda l’app e riprovi." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop nie mógł dokończyć uruchamiania. Zamknij aplikację i spróbuj ponownie." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3781,6 +4315,12 @@ "value": "Impossibile leggere questo invito. Ne chieda uno nuovo al mittente." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się odczytać tego zaproszenia. Poproś nadawcę o nowe." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3823,6 +4363,12 @@ "value": "Questo invito è vuoto. Provi ad aprirlo di nuovo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "To zaproszenie jest puste. Spróbuj otworzyć je ponownie." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3865,6 +4411,12 @@ "value": "La libreria nativa di VniDrop non è presente in questa build." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "W tej kompilacji brakuje natywnej biblioteki VniDrop." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3907,6 +4459,12 @@ "value": "Impossibile usare questo tag NFC. Ne provi un altro." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się użyć tego tagu NFC. Spróbuj innego." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3949,6 +4507,12 @@ "value": "Il mittente non ha approvato questo trasferimento, oppure è stato rifiutato." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nadawca nie zatwierdził tego transferu lub został on odrzucony." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -3991,6 +4555,12 @@ "value": "VniDrop non ha potuto salvare i dati del trasferimento su questo dispositivo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop nie mógł zapisać danych transferu na tym urządzeniu." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4033,6 +4603,12 @@ "value": "Impossibile aprire l’elemento selezionato. Provi a sceglierlo di nuovo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się otworzyć wybranego elementu. Spróbuj wybrać go ponownie." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4075,6 +4651,12 @@ "value": "Selezioni almeno un elemento da condividere." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wybierz co najmniej jeden element do udostępnienia." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4117,6 +4699,12 @@ "value": "VniDrop non ha potuto aprire i suoi socket di rete su questo dispositivo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop nie mógł otworzyć gniazd sieciowych na tym urządzeniu." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4159,6 +4747,12 @@ "value": "VniDrop è ancora in fase di avvio. Riapra l’invito tra un momento." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop jeszcze się uruchamia. Otwórz zaproszenie ponownie za chwilę." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4201,6 +4795,12 @@ "value": "Impossibile completare il trasferimento. Controlli la connessione e riprovi." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się ukończyć transferu. Sprawdź połączenie i spróbuj ponownie." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4243,6 +4843,12 @@ "value": "Nome del destinatario" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nazwa odbiorcy" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4285,6 +4891,12 @@ "value": "Nome del mittente" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nazwa nadawcy" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4327,6 +4939,12 @@ "value": "Nome del trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nazwa transferu" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4369,6 +4987,12 @@ "value": "Nome visualizzato" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nazwa wyświetlana" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4411,6 +5035,12 @@ "value": "Autorizzazione necessaria" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wymagane uprawnienie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4453,6 +5083,12 @@ "value": "Non disponibile" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Niedostępny" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4495,6 +5131,12 @@ "value": "Controllo della cartella…" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Sprawdzanie folderu…" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4537,6 +5179,12 @@ "value": "Pronta" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Gotowy" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4579,6 +5227,12 @@ "value": "File" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pliki" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4621,6 +5275,12 @@ "value": "Dimensione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Rozmiar" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4663,6 +5323,12 @@ "value": "Stato" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Status" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4705,6 +5371,12 @@ "value": "Ricevi" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbierz" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4747,6 +5419,12 @@ "value": "Invia" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wyślij" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4789,6 +5467,12 @@ "value": "Impostazioni" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Ustawienia" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4831,6 +5515,12 @@ "value": "Rete" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Sieć" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4873,6 +5563,12 @@ "value": "Ricevi avvisi sulle nuove richieste di ricezione quando VniDrop è in background." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Otrzymuj powiadomienia o nowych prośbach o odbiór, gdy VniDrop działa w tle." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4915,6 +5611,12 @@ "value": "Notifiche attivate." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Powiadomienia włączone." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4957,6 +5659,12 @@ "value": "Consenti le notifiche" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zezwól na powiadomienia" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -4999,6 +5707,12 @@ "value": "Le notifiche sono disattivate per VniDrop. Può attivarle in Impostazioni." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Powiadomienia są wyłączone dla VniDrop. Możesz je włączyć w Ustawieniach." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5041,6 +5755,12 @@ "value": "Impossibile aprire le impostazioni delle notifiche." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się otworzyć ustawień powiadomień." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5083,6 +5803,12 @@ "value": "Notifiche" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Powiadomienia" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5125,6 +5851,12 @@ "value": "Le notifiche non sono disponibili su questo dispositivo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Powiadomienia nie są dostępne na tym urządzeniu." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5167,6 +5899,12 @@ "value": "Sistema operativo" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "System operacyjny" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5209,6 +5947,12 @@ "value": "Salva i trasferimenti ricevuti in" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zapisuj odebrane transfery w" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5251,6 +5995,12 @@ "value": "Preferenze" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Preferencje" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5293,6 +6043,12 @@ "value": "Annullato" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Anulowano" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5335,6 +6091,12 @@ "value": "Completato" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Ukończono" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5377,6 +6139,12 @@ "value": "Connesso" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Połączono" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5419,6 +6187,12 @@ "value": "Connessione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Łączenie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5461,6 +6235,12 @@ "value": "Download" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pobieranie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5503,6 +6283,12 @@ "value": "Non riuscito" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Niepowodzenie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5545,6 +6331,12 @@ "value": "Preparazione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przygotowywanie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5587,6 +6379,12 @@ "value": "Trasferimento interrotto" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfer przerwany" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5629,6 +6427,12 @@ "value": "Preparazione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przygotowywanie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5671,6 +6475,12 @@ "value": "Pronto" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Gotowe" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5713,6 +6523,12 @@ "value": "Ricezione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbieranie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5755,6 +6571,12 @@ "value": "Richiesta di accesso" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Prośba o dostęp" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5797,6 +6619,12 @@ "value": "Salvataggio" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zapisywanie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5839,6 +6667,12 @@ "value": "Invio" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wysyłanie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5881,6 +6715,12 @@ "value": "Invio a %1$d" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wysyłanie do %1$d" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5923,6 +6763,12 @@ "value": "Pronto per la condivisione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Gotowe do udostępnienia" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -5965,6 +6811,12 @@ "value": "Elaborazione…" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przetwarzanie…" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6007,6 +6859,12 @@ "value": "Scelga il metodo di invito a sua disposizione." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wybierz dostępną metodę zaproszenia." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6049,6 +6907,12 @@ "value": "Come vuole connettersi?" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Jak chcesz się połączyć?" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6091,6 +6955,12 @@ "value": "Cancella cronologia" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wyczyść historię" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6133,6 +7003,12 @@ "value": "Tutte le ricezioni completate, non riuscite e annullate verranno rimosse dalla cronologia di VniDrop. I file scaricati rimarranno su questo dispositivo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wszystkie ukończone, nieudane i anulowane odbiory zostaną usunięte z historii VniDrop. Pobrane pliki pozostaną na tym urządzeniu." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6175,6 +7051,12 @@ "value": "Cancellare la cronologia di ricezione?" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wyczyścić historię odbioru?" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6217,6 +7099,12 @@ "value": "Trasferimento ricevuto." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfer odebrany." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6259,6 +7147,12 @@ "value": "«%1$@» verrà rimosso dalla cronologia di VniDrop. Il file scaricato rimarrà su questo dispositivo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "„%1$@” zostanie usunięty z historii VniDrop. Pobrany plik pozostanie na tym urządzeniu." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6301,6 +7195,12 @@ "value": "Elimina dalla cronologia di ricezione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usuń z historii odbioru" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6343,6 +7243,12 @@ "value": "Rimuovere dalla cronologia?" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usunąć z historii?" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6385,6 +7291,12 @@ "value": "Apra un invito VniDrop, scansioni un codice QR o avvicini un tag NFC." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Otwórz zaproszenie VniDrop, zeskanuj kod QR lub zbliż tag NFC." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6427,6 +7339,12 @@ "value": "Ancora nulla di ricevuto" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nic jeszcze nie odebrano" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6469,6 +7387,12 @@ "value": "Cronologia di ricezione cancellata." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Historia odbioru wyczyszczona." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6511,6 +7435,12 @@ "value": "Cronologia" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Historia" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6553,6 +7483,12 @@ "value": "Apri un invito .vnd" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Otwórz zaproszenie .vnd" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6595,6 +7531,12 @@ "value": "Scelga un invito salvato o condiviso su questo dispositivo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wybierz zaproszenie zapisane lub udostępnione na tym urządzeniu." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6637,6 +7579,12 @@ "value": "Leggi tag NFC" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odczytaj tag NFC" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6679,6 +7627,12 @@ "value": "Avvicini questo dispositivo al tag di invito del mittente." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zbliż to urządzenie do tagu zaproszenia nadawcy." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6721,6 +7675,12 @@ "value": "Scansiona codice QR" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zeskanuj kod QR" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6763,6 +7723,12 @@ "value": "Usi la fotocamera per scansionare il codice VniDrop del mittente." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Użyj aparatu, aby zeskanować kod VniDrop nadawcy." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6805,6 +7771,12 @@ "value": "Trasferimenti che ha ricevuto su questo dispositivo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfery odebrane na tym urządzeniu." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6847,6 +7819,12 @@ "value": "Avvicini al tag NFC…" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zbliż do tagu NFC…" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6889,6 +7867,12 @@ "value": "Impossibile aprire VniDrop in File." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się otworzyć VniDrop w Plikach." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6931,6 +7915,12 @@ "value": "Rivedi trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przejrzyj transfer" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -6973,6 +7963,12 @@ "value": "Ricevi" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbierz" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7015,6 +8011,12 @@ "value": "Trasferimento VniDrop" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfer VniDrop" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7057,6 +8059,12 @@ "value": "Chiunque abbia questo trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Każdy, kto ma ten transfer" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7099,6 +8107,12 @@ "value": "Nessuna approvazione richiesta. Da usare solo per elementi che non ha problemi a condividere." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie jest wymagane zatwierdzenie. Używaj tylko dla elementów, które możesz swobodnie udostępniać." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7141,6 +8155,12 @@ "value": "Chiunque abbia l’invito può scaricare finché non interrompe la condivisione. Non lo usi per elementi privati o sensibili." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Każdy, kto ma zaproszenie, może pobierać, dopóki nie zatrzymasz udostępniania. Nie używaj tego dla prywatnych ani wrażliwych elementów." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7183,6 +8203,12 @@ "value": "Chiedi prima di ogni download" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pytaj przed każdym pobraniem" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7225,6 +8251,12 @@ "value": "Approva o rifiuta ogni nuovo destinatario." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zatwierdzasz lub odrzucasz każdego nowego odbiorcę." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7267,6 +8299,12 @@ "value": "Chi può riceverlo?" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Kto może to odebrać?" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7309,6 +8347,12 @@ "value": "Selezioni file o una cartella da questo dispositivo. Potrà rivedere la selezione prima di creare il trasferimento." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wybierz pliki lub folder z tego urządzenia. Przed utworzeniem transferu możesz przejrzeć wybór." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7351,6 +8395,12 @@ "value": "Scelga cosa condividere" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wybierz, co udostępnić" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7393,6 +8443,12 @@ "value": "Crei un trasferimento, decida chi può riceverlo, poi inviti queste persone con un codice QR, un tag NFC o un file di invito." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Utwórz transfer, zdecyduj, kto może go odebrać, a następnie zaproś te osoby za pomocą kodu QR, tagu NFC lub pliku zaproszenia." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7435,6 +8491,12 @@ "value": "Ancora nulla di condiviso" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nic jeszcze nie udostępniono" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7477,6 +8539,12 @@ "value": "Dimensione non disponibile" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Rozmiar niedostępny" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7519,6 +8587,12 @@ "value": "Cartella" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Folder" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7561,6 +8635,12 @@ "value": "Crea un nuovo trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Utwórz nowy transfer" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7603,6 +8683,12 @@ "value": "Nuovo trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nowy transfer" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7645,6 +8731,12 @@ "value": "Rivedi trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przejrzyj transfer" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7687,6 +8779,12 @@ "value": "%1$d file selezionati" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wybrane pliki: %1$d" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7729,6 +8827,12 @@ "value": "Interrompi condivisione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zatrzymaj udostępnianie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7771,6 +8875,12 @@ "value": "Questo interrompe il trasferimento e blocca chiunque lo stia scaricando. Rimane nella sua cronologia come Interrotto." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "To zatrzymuje transfer i przerywa każdego, kto go właśnie pobiera. Pozostaje w historii jako Zatrzymany." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7813,6 +8923,12 @@ "value": "Trasferimenti che sta condividendo da questo dispositivo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfery udostępniane z tego urządzenia." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7855,6 +8971,12 @@ "value": "Invia" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wyślij" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7897,6 +9019,12 @@ "value": "Trasferimento creato." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfer utworzony." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7939,6 +9067,12 @@ "value": "Dettagli del trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Szczegóły transferu" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -7981,6 +9115,12 @@ "value": "I suoi trasferimenti" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Twoje transfery" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8023,6 +9163,12 @@ "value": "Il suo nome, dove vengono salvati i trasferimenti, l’aspetto e le notifiche." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Twoja nazwa, miejsce zapisu transferów, wygląd i powiadomienia." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8065,6 +9211,12 @@ "value": "Impostazioni" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Ustawienia" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8107,6 +9259,12 @@ "value": "Ignora" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zamknij" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8149,6 +9307,12 @@ "value": "Disponibile" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Dostępny" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8191,6 +9355,12 @@ "value": "Annullato" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Anulowany" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8233,6 +9403,12 @@ "value": "Completato" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Ukończony" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8275,6 +9451,12 @@ "value": "Non riuscito" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Niepowodzenie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8317,6 +9499,12 @@ "value": "Preparazione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przygotowywanie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8359,6 +9547,12 @@ "value": "Ricezione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbieranie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8401,6 +9595,12 @@ "value": "Interrotto" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zatrzymany" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8443,6 +9643,12 @@ "value": "Calcolo…" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Obliczanie…" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8485,6 +9691,12 @@ "value": "Elimina tutti i trasferimenti" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usuń wszystkie transfery" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8527,6 +9739,12 @@ "value": "Questo cancella dalla cronologia tutti i record dei trasferimenti inviati e ricevuti. I suoi file ricevuti non vengono eliminati. Nota: il motore di trasferimento conserva il contenuto memorizzato, quindi i dati di trasferimento potrebbero non diminuire. Questa operazione non può essere annullata." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "To usuwa z historii wszystkie rekordy wysłanych i odebranych transferów. Twoje odebrane pliki nie są usuwane. Uwaga: silnik transferu zachowuje przechowywaną zawartość, więc dane transferu mogą się nie zmniejszyć. Tej operacji nie można cofnąć." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8569,6 +9787,12 @@ "value": "Eliminazione…" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usuwanie…" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8611,6 +9835,12 @@ "value": "I dati di trasferimento sono gestiti dal motore di trasferimento: la sua cronologia più il contenuto dei file che ha condiviso. Il pulsante qui sotto cancella i record dei trasferimenti; il motore conserva il contenuto memorizzato, quindi questo valore potrebbe non diminuire. I file ricevuti sono i file che ha scaricato e non vengono mai eliminati qui." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Danymi transferu zarządza silnik transferu — Twoja historia oraz zawartość udostępnionych plików. Przycisk poniżej usuwa rekordy transferów; silnik zachowuje przechowywaną zawartość, więc ta wartość może się nie zmniejszyć. Odebrane pliki to Twoje pobrane pliki i nigdy nie są tu usuwane." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8653,6 +9883,12 @@ "value": "File ricevuti" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odebrane pliki" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8695,6 +9931,12 @@ "value": "File temporanei" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pliki tymczasowe" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8737,6 +9979,12 @@ "value": "Archiviazione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pamięć" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8779,6 +10027,12 @@ "value": "Totale" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Łącznie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8821,6 +10075,12 @@ "value": "Dati di trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Dane transferu" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8863,6 +10123,12 @@ "value": "Tutti i trasferimenti eliminati" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usunięto wszystkie transfery" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8905,6 +10171,12 @@ "value": "Veda gli aggiornamenti importanti di questo trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zobacz ważne aktualizacje tego transferu" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8947,6 +10219,12 @@ "value": "Attività" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Aktywność" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -8989,6 +10267,12 @@ "value": "«%1$@» non verrà più condiviso e la sua cronologia di trasferimento verrà rimossa da questo dispositivo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "„%1$@” przestanie być udostępniany, a jego historia transferu zostanie usunięta z tego urządzenia." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9031,6 +10315,12 @@ "value": "Eliminare il trasferimento?" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usunąć transfer?" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9073,6 +10363,12 @@ "value": "Trasferimento eliminato." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfer usunięty." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9115,6 +10411,12 @@ "value": "Eliminazione…" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usuwanie…" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9157,6 +10459,12 @@ "value": "Dettagli del trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Szczegóły transferu" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9199,6 +10507,12 @@ "value": "Accesso del destinatario approvato" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zatwierdzono dostęp odbiorcy" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9241,6 +10555,12 @@ "value": "Un destinatario ha completato il trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbiorca ukończył transfer" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9283,6 +10603,12 @@ "value": "Connessione al mittente" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Łączenie z nadawcą" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9325,6 +10651,12 @@ "value": "Download" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pobieranie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9367,6 +10699,12 @@ "value": "Il trasferimento ha riscontrato un problema" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Podczas transferu wystąpił problem" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9409,6 +10747,12 @@ "value": "Preparazione del trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przygotowywanie transferu" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9451,6 +10795,12 @@ "value": "Pronto per la condivisione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Gotowe do udostępnienia" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9493,6 +10843,12 @@ "value": "Accesso del destinatario rifiutato" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odrzucono dostęp odbiorcy" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9535,6 +10891,12 @@ "value": "Un destinatario ha richiesto l’accesso" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbiorca poprosił o dostęp" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9577,6 +10939,12 @@ "value": "Salvataggio" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zapisywanie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9619,6 +10987,12 @@ "value": "Condivisione interrotta" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zatrzymano udostępnianie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9661,6 +11035,12 @@ "value": "Trasferimento aggiornato" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfer zaktualizowany" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9763,6 +11143,36 @@ } } }, + "pl": { + "variations": { + "plural": { + "few": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d pliki" + } + }, + "many": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d plików" + } + }, + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d plik" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d pliku" + } + } + } + } + }, "pt": { "variations": { "plural": { @@ -9817,6 +11227,12 @@ "value": "Invito salvato." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zaproszenie zapisane." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9859,6 +11275,12 @@ "value": "Dispositivo nelle vicinanze" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Urządzenie w pobliżu" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9901,6 +11323,12 @@ "value": "La scrittura dei tag NFC non è disponibile su questo dispositivo." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zapis tagów NFC nie jest dostępny na tym urządzeniu." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9943,6 +11371,12 @@ "value": "Avvicini il dispositivo a un tag NFC scrivibile." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zbliż urządzenie do zapisywalnego tagu NFC." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -9985,6 +11419,12 @@ "value": "Invito scritto sul tag NFC." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zaproszenie zapisane na tagu NFC." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10027,6 +11467,12 @@ "value": "Non c’è ancora alcuna attività da mostrare." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie ma jeszcze aktywności do wyświetlenia." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10069,6 +11515,12 @@ "value": "Nessuno ha ancora richiesto questo trasferimento." } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nikt jeszcze nie poprosił o ten transfer." + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10111,6 +11563,12 @@ "value": "Approvato: in attesa del completamento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zatwierdzono — oczekiwanie na ukończenie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10153,6 +11611,12 @@ "value": "Ricevuto correttamente" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odebrano pomyślnie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10195,6 +11659,12 @@ "value": "Richiesta scaduta" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Prośba wygasła" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10237,6 +11707,12 @@ "value": "Richiesta rifiutata" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Prośba odrzucona" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10279,6 +11755,12 @@ "value": "In attesa della sua approvazione" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Oczekiwanie na Twoje zatwierdzenie" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10321,6 +11803,12 @@ "value": "Stato non disponibile" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Status niedostępny" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10363,6 +11851,12 @@ "value": "%1$d completati" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Ukończone: %1$d" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10405,6 +11899,12 @@ "value": "Richieste, approvazioni e consegne completate" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Prośby, zatwierdzenia i ukończone dostawy" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10447,6 +11947,12 @@ "value": "%1$d in attesa" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Oczekujące: %1$d" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10489,6 +11995,12 @@ "value": "Destinatari" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbiorcy" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10531,6 +12043,12 @@ "value": "Scansioni con VniDrop per ricevere questo trasferimento" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zeskanuj za pomocą VniDrop, aby odebrać ten transfer" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10573,6 +12091,12 @@ "value": "Codice QR, file di invito e opzioni nelle vicinanze" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Kod QR, plik zaproszenia i opcje w pobliżu" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10615,6 +12139,12 @@ "value": "Condividi" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Udostępnij" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10657,6 +12187,12 @@ "value": "Non disponibile" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Niedostępne" + } + }, "pt": { "stringUnit": { "state": "needs_review", @@ -10699,6 +12235,12 @@ "value": "Versione dell’app" } }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wersja aplikacji" + } + }, "pt": { "stringUnit": { "state": "needs_review", diff --git a/localization/strings.json b/localization/strings.json index 8a4904f..bb184c1 100644 --- a/localization/strings.json +++ b/localization/strings.json @@ -7,7 +7,8 @@ "es", "it", "de", - "pt" + "pt", + "pl" ], "strings": { "%@": { @@ -41,7 +42,8 @@ "es": "{arg1} {arg2} · {arg3}", "it": "{arg1} {arg2} · {arg3}", "de": "{arg1} {arg2} · {arg3}", - "pt": "{arg1} {arg2} · {arg3}" + "pt": "{arg1} {arg2} · {arg3}", + "pl": "{arg1} {arg2} · {arg3}" } }, "%@ · %@": { @@ -65,7 +67,8 @@ "es": "{arg1} · {arg2}", "it": "{arg1} · {arg2}", "de": "{arg1} · {arg2}", - "pt": "{arg1} · {arg2}" + "pt": "{arg1} · {arg2}", + "pl": "{arg1} · {arg2}" } }, "%@%%": { @@ -82,7 +85,8 @@ "es": "Informar de un error", "it": "Segnala un bug", "de": "Fehler melden", - "pt": "Comunicar um erro" + "pt": "Comunicar um erro", + "pl": "Zgłoś błąd" } }, "about_description": { @@ -93,7 +97,8 @@ "es": "VniDrop transfiere archivos y carpetas directamente de un dispositivo a otro a través de la red, sin subirlos a ningún servicio de alojamiento. No hay que crear ninguna cuenta y no queda ninguna copia de su transferencia en la nube una vez que termina.", "it": "VniDrop trasferisce file e cartelle direttamente da un dispositivo a un altro sulla rete, senza caricarli su alcun servizio di hosting. Non c’è alcun account da creare e nessuna copia del suo trasferimento rimane nel cloud una volta terminato.", "de": "VniDrop überträgt Dateien und Ordner direkt von einem Gerät auf ein anderes über das Netzwerk, ohne sie auf einen Hosting-Dienst hochzuladen. Es muss kein Konto erstellt werden, und nach Abschluss verbleibt keine Kopie Ihrer Übertragung in der Cloud.", - "pt": "O VniDrop transfere ficheiros e pastas diretamente de um dispositivo para outro através da rede, sem os carregar para qualquer serviço de alojamento. Não é necessário criar qualquer conta e não fica nenhuma cópia da sua transferência na nuvem depois de terminar." + "pt": "O VniDrop transfere ficheiros e pastas diretamente de um dispositivo para outro através da rede, sem os carregar para qualquer serviço de alojamento. Não é necessário criar qualquer conta e não fica nenhuma cópia da sua transferência na nuvem depois de terminar.", + "pl": "VniDrop przesyła pliki i foldery bezpośrednio z jednego urządzenia na drugie przez sieć, bez przesyłania ich do jakiejkolwiek usługi hostingowej. Nie trzeba zakładać konta, a po zakończeniu żadna kopia transferu nie pozostaje w chmurze." } }, "about_is_direct": { @@ -104,7 +109,8 @@ "es": "Una transferencia directa entre dispositivos: sus archivos van directamente al destinatario.", "it": "Un trasferimento diretto da dispositivo a dispositivo: i suoi file vanno direttamente al destinatario.", "de": "Eine direkte Gerät-zu-Gerät-Übertragung – Ihre Dateien gehen direkt an den Empfänger.", - "pt": "Uma transferência direta entre dispositivos — os seus ficheiros vão diretamente para o destinatário." + "pt": "Uma transferência direta entre dispositivos — os seus ficheiros vão diretamente para o destinatário.", + "pl": "Bezpośredni transfer między urządzeniami — pliki trafiają prosto do odbiorcy." } }, "about_is_encrypted": { @@ -115,7 +121,8 @@ "es": "Las conexiones están autenticadas y cifradas de extremo a extremo (mediante Iroh), y los archivos entrantes se verifican por su huella de contenido.", "it": "Le connessioni sono autenticate e cifrate end-to-end (tramite Iroh) e i file in arrivo vengono verificati tramite l’impronta del loro contenuto.", "de": "Verbindungen sind authentifiziert und Ende-zu-Ende-verschlüsselt (über Iroh), und eingehende Dateien werden anhand ihres Inhalts-Hashs überprüft.", - "pt": "As ligações são autenticadas e cifradas ponto a ponto (através do Iroh), e os ficheiros recebidos são verificados pela impressão digital do seu conteúdo." + "pt": "As ligações são autenticadas e cifradas ponto a ponto (através do Iroh), e os ficheiros recebidos são verificados pela impressão digital do seu conteúdo.", + "pl": "Połączenia są uwierzytelniane i szyfrowane od końca do końca (przez Iroh), a przychodzące pliki są weryfikowane na podstawie skrótu ich zawartości." } }, "about_is_in_control": { @@ -126,7 +133,8 @@ "es": "Usted decide quién recibe: apruebe cada solicitud o abra una transferencia a cualquiera que tenga la invitación.", "it": "Lei decide chi riceve: approvi ogni richiesta oppure apra un trasferimento a chiunque disponga dell’invito.", "de": "Sie entscheiden, wer empfängt: Genehmigen Sie jede Anfrage oder öffnen Sie eine Übertragung für alle, die die Einladung besitzen.", - "pt": "É você quem decide quem recebe: aprove cada pedido ou abra uma transferência a qualquer pessoa que tenha o convite." + "pt": "É você quem decide quem recebe: aprove cada pedido ou abra uma transferência a qualquer pessoa que tenha o convite.", + "pl": "To Ty decydujesz, kto otrzymuje: zatwierdź każde żądanie lub udostępnij transfer każdemu, kto ma zaproszenie." } }, "about_is_no_account": { @@ -137,7 +145,8 @@ "es": "Sin cuenta: no hay nada que registrar.", "it": "Senza account: non c’è nulla da registrare.", "de": "Ohne Konto – es gibt nichts zu registrieren.", - "pt": "Sem conta — não há nada para registar." + "pt": "Sem conta — não há nada para registar.", + "pl": "Bez konta — nie trzeba się rejestrować." } }, "about_is_open": { @@ -148,7 +157,8 @@ "es": "Código abierto, publicado bajo la licencia Apache 2.0.", "it": "Open source, rilasciato con licenza Apache 2.0.", "de": "Open Source, veröffentlicht unter der Apache-2.0-Lizenz.", - "pt": "Código aberto, publicado sob a licença Apache 2.0." + "pt": "Código aberto, publicado sob a licença Apache 2.0.", + "pl": "Otwarte oprogramowanie, wydane na licencji Apache 2.0." } }, "about_is_title": { @@ -159,7 +169,8 @@ "es": "Qué es VniDrop", "it": "Cos’è VniDrop", "de": "Was VniDrop ist", - "pt": "O que o VniDrop é" + "pt": "O que o VniDrop é", + "pl": "Czym jest VniDrop" } }, "about_isnt_cloud": { @@ -170,7 +181,8 @@ "es": "No es almacenamiento en la nube: ningún servidor guarda sus archivos y nada queda en la nube después de una transferencia.", "it": "Non è un’archiviazione cloud: nessun server conserva i suoi file e nulla resta nel cloud dopo un trasferimento.", "de": "Kein Cloud-Speicher – kein Server hält Ihre Dateien, und nach einer Übertragung wartet nichts in der Cloud.", - "pt": "Não é armazenamento na nuvem — nenhum servidor guarda os seus ficheiros e nada fica na nuvem após uma transferência." + "pt": "Não é armazenamento na nuvem — nenhum servidor guarda os seus ficheiros e nada fica na nuvem após uma transferência.", + "pl": "To nie magazyn w chmurze — żaden serwer nie przechowuje Twoich plików i nic nie pozostaje w chmurze po transferze." } }, "about_isnt_public": { @@ -181,7 +193,8 @@ "es": "No es difusión pública: una invitación es un enlace de acceso privado, no un anuncio para todos los que estén cerca.", "it": "Non è una diffusione pubblica: un invito è un link di accesso privato, non un annuncio a tutti nelle vicinanze.", "de": "Keine öffentliche Übertragung – eine Einladung ist ein privater Zugangslink, keine Ankündigung an alle in der Nähe.", - "pt": "Não é difusão pública — um convite é uma ligação de acesso privado, não um anúncio a toda a gente por perto." + "pt": "Não é difusão pública — um convite é uma ligação de acesso privado, não um anúncio a toda a gente por perto.", + "pl": "To nie publiczne rozgłaszanie — zaproszenie to prywatny link dostępu, a nie ogłoszenie dla wszystkich w pobliżu." } }, "about_isnt_sync": { @@ -192,7 +205,8 @@ "es": "No es un servicio de sincronización ni de copia de seguridad.", "it": "Non è un servizio di sincronizzazione o di backup.", "de": "Kein Synchronisierungs- oder Backup-Dienst.", - "pt": "Não é um serviço de sincronização ou de cópia de segurança." + "pt": "Não é um serviço de sincronização ou de cópia de segurança.", + "pl": "To nie usługa synchronizacji ani kopii zapasowej." } }, "about_isnt_title": { @@ -203,7 +217,8 @@ "es": "Qué no es VniDrop", "it": "Cosa non è VniDrop", "de": "Was VniDrop nicht ist", - "pt": "O que o VniDrop não é" + "pt": "O que o VniDrop não é", + "pl": "Czym VniDrop nie jest" } }, "about_license_label": { @@ -214,7 +229,8 @@ "es": "Licencia", "it": "Licenza", "de": "Lizenz", - "pt": "Licença" + "pt": "Licença", + "pl": "Licencja" } }, "about_privacy": { @@ -225,7 +241,8 @@ "es": "Política de privacidad", "it": "Informativa sulla privacy", "de": "Datenschutzrichtlinie", - "pt": "Política de privacidade" + "pt": "Política de privacidade", + "pl": "Polityka prywatności" } }, "about_privacy_capability": { @@ -236,7 +253,8 @@ "es": "Las invitaciones son claves de acceso. Trate un código QR, una etiqueta NFC o un archivo .vnd como un enlace de acceso privado y compártalo solo con las personas previstas, especialmente con «Cualquiera que tenga esta transferencia».", "it": "Gli inviti sono chiavi di accesso. Tratti un codice QR, un tag NFC o un file .vnd come un link di accesso privato e lo condivida solo con le persone previste, soprattutto con «Chiunque abbia questo trasferimento».", "de": "Einladungen sind Zugangsschlüssel. Behandeln Sie einen QR-Code, ein NFC-Tag oder eine .vnd-Datei wie einen privaten Zugangslink und teilen Sie ihn nur mit den vorgesehenen Personen – insbesondere bei „Jeder mit dieser Übertragung“.", - "pt": "Os convites são chaves de acesso. Trate um código QR, uma etiqueta NFC ou um ficheiro .vnd como uma ligação de acesso privado e partilhe-o apenas com as pessoas pretendidas — sobretudo com «Qualquer pessoa com esta transferência»." + "pt": "Os convites são chaves de acesso. Trate um código QR, uma etiqueta NFC ou um ficheiro .vnd como uma ligação de acesso privado e partilhe-o apenas com as pessoas pretendidas — sobretudo com «Qualquer pessoa com esta transferência».", + "pl": "Zaproszenia są kluczami dostępu. Traktuj kod QR, tag NFC lub plik .vnd jak prywatny link dostępu i udostępniaj go tylko zamierzonym osobom — zwłaszcza przy opcji „Każdy, kto ma ten transfer”." } }, "about_privacy_deny": { @@ -247,7 +265,8 @@ "es": "Denegación por defecto: VniDrop solo sirve el contenido de un recurso compartido activo y rechaza las solicitudes desconocidas.", "it": "Rifiuto predefinito: VniDrop serve solo il contenuto di una condivisione attiva e rifiuta le richieste sconosciute.", "de": "Standardmäßig ablehnen – VniDrop stellt nur den Inhalt einer aktiven Freigabe bereit und weist unbekannte Anfragen ab.", - "pt": "Recusa por predefinição — o VniDrop apenas fornece o conteúdo de uma partilha ativa e rejeita pedidos desconhecidos." + "pt": "Recusa por predefinição — o VniDrop apenas fornece o conteúdo de uma partilha ativa e rejeita pedidos desconhecidos.", + "pl": "Domyślnie odmowa — VniDrop udostępnia tylko zawartość aktywnego udostępnienia i odrzuca nieznane żądania." } }, "about_privacy_local": { @@ -258,7 +277,8 @@ "es": "Los archivos recibidos se guardan en su dispositivo y nunca sobrescriben un archivo existente.", "it": "I file ricevuti vengono salvati sul suo dispositivo e non sovrascrivono mai un file esistente.", "de": "Empfangene Dateien werden auf Ihrem Gerät gespeichert und überschreiben niemals eine vorhandene Datei.", - "pt": "Os ficheiros recebidos são guardados no seu dispositivo e nunca substituem um ficheiro existente." + "pt": "Os ficheiros recebidos são guardados no seu dispositivo e nunca substituem um ficheiro existente.", + "pl": "Odebrane pliki są zapisywane na Twoim urządzeniu i nigdy nie nadpisują istniejącego pliku." } }, "about_privacy_policy_label": { @@ -269,7 +289,8 @@ "es": "Política de privacidad", "it": "Informativa sulla privacy", "de": "Datenschutzrichtlinie", - "pt": "Política de privacidade" + "pt": "Política de privacidade", + "pl": "Polityka prywatności" } }, "about_privacy_relay": { @@ -280,7 +301,8 @@ "es": "Si dos dispositivos no pueden conectarse directamente, la conexión cifrada puede retransmitirse. Los relés solo reenvían paquetes cifrados; nunca almacenan sus archivos.", "it": "Se due dispositivi non riescono a connettersi direttamente, la connessione cifrata può essere instradata tramite relay. I relay inoltrano solo pacchetti cifrati; non memorizzano mai i suoi file.", "de": "Wenn zwei Geräte sich nicht direkt verbinden können, kann die verschlüsselte Verbindung weitergeleitet werden. Relays leiten nur verschlüsselte Pakete weiter; sie speichern niemals Ihre Dateien.", - "pt": "Se dois dispositivos não conseguirem ligar-se diretamente, a ligação cifrada pode ser retransmitida. Os retransmissores apenas encaminham pacotes cifrados; nunca guardam os seus ficheiros." + "pt": "Se dois dispositivos não conseguirem ligar-se diretamente, a ligação cifrada pode ser retransmitida. Os retransmissores apenas encaminham pacotes cifrados; nunca guardam os seus ficheiros.", + "pl": "Jeśli dwa urządzenia nie mogą połączyć się bezpośrednio, szyfrowane połączenie może być przekazywane przez przekaźnik. Przekaźniki przekazują tylko zaszyfrowane pakiety; nigdy nie przechowują Twoich plików." } }, "about_privacy_title": { @@ -291,7 +313,8 @@ "es": "Privacidad y seguridad", "it": "Privacy e sicurezza", "de": "Datenschutz & Sicherheit", - "pt": "Privacidade e segurança" + "pt": "Privacidade e segurança", + "pl": "Prywatność i bezpieczeństwo" } }, "about_tagline": { @@ -302,7 +325,8 @@ "es": "Envíe archivos directamente. Mantenga el control de quién los recibe.", "it": "Invii file direttamente. Mantenga il controllo su chi li riceve.", "de": "Senden Sie Dateien direkt. Behalten Sie die Kontrolle darüber, wer sie empfängt.", - "pt": "Envie ficheiros diretamente. Mantenha o controlo sobre quem os recebe." + "pt": "Envie ficheiros diretamente. Mantenha o controlo sobre quem os recebe.", + "pl": "Wysyłaj pliki bezpośrednio. Zachowaj kontrolę nad tym, kto je otrzymuje." } }, "about_title": { @@ -313,7 +337,8 @@ "es": "Acerca de", "it": "Informazioni", "de": "Über", - "pt": "Acerca de" + "pt": "Acerca de", + "pl": "Informacje" } }, "appearance_auto_description": { @@ -324,7 +349,8 @@ "es": "Seguir la apariencia clara u oscura de este dispositivo.", "it": "Segue l’aspetto chiaro o scuro di questo dispositivo.", "de": "Der hellen oder dunklen Darstellung dieses Geräts folgen.", - "pt": "Acompanhar o aspeto claro ou escuro deste dispositivo." + "pt": "Acompanhar o aspeto claro ou escuro deste dispositivo.", + "pl": "Dopasuj do jasnego lub ciemnego wyglądu tego urządzenia." } }, "appearance_dark_mode": { @@ -335,7 +361,8 @@ "es": "Modo oscuro", "it": "Modalità scura", "de": "Dunkelmodus", - "pt": "Modo escuro" + "pt": "Modo escuro", + "pl": "Tryb ciemny" } }, "appearance_light_mode": { @@ -346,7 +373,8 @@ "es": "Modo claro", "it": "Modalità chiara", "de": "Hellmodus", - "pt": "Modo claro" + "pt": "Modo claro", + "pl": "Tryb jasny" } }, "appearance_system_mode": { @@ -357,7 +385,8 @@ "es": "Sistema", "it": "Sistema", "de": "System", - "pt": "Sistema" + "pt": "Sistema", + "pl": "System" } }, "appearance_title": { @@ -368,7 +397,8 @@ "es": "Apariencia", "it": "Aspetto", "de": "Darstellung", - "pt": "Aspeto" + "pt": "Aspeto", + "pl": "Wygląd" } }, "approval_connection_request": { @@ -379,7 +409,8 @@ "es": "Solicitud de recepción", "it": "Richiesta di ricezione", "de": "Empfangsanfrage", - "pt": "Pedido de receção" + "pt": "Pedido de receção", + "pl": "Prośba o odbiór" } }, "approval_endpoint_id": { @@ -396,7 +427,8 @@ "es": "ID del dispositivo: {arg1}", "it": "ID dispositivo: {arg1}", "de": "Geräte-ID: {arg1}", - "pt": "ID do dispositivo: {arg1}" + "pt": "ID do dispositivo: {arg1}", + "pl": "Identyfikator urządzenia: {arg1}" } }, "approval_nearby_device": { @@ -407,7 +439,8 @@ "es": "Un dispositivo cercano", "it": "Un dispositivo nelle vicinanze", "de": "Ein Gerät in der Nähe", - "pt": "Um dispositivo próximo" + "pt": "Um dispositivo próximo", + "pl": "Urządzenie w pobliżu" } }, "approval_pending_count": { @@ -424,7 +457,8 @@ "es": "{count} solicitudes en espera", "it": "{count} richieste in attesa", "de": "{count} Anfragen warten", - "pt": "{count} pedidos em espera" + "pt": "{count} pedidos em espera", + "pl": "Oczekujące prośby: {count}" } }, "approval_request_body": { @@ -445,7 +479,8 @@ "es": "{arg1} quiere recibir «{arg2}».", "it": "{arg1} vuole ricevere «{arg2}».", "de": "{arg1} möchte „{arg2}“ empfangen.", - "pt": "{arg1} quer receber «{arg2}»." + "pt": "{arg1} quer receber «{arg2}».", + "pl": "{arg1} chce odebrać „{arg2}”." } }, "battery_level_title": { @@ -456,7 +491,8 @@ "es": "Nivel de batería", "it": "Livello batteria", "de": "Batteriestand", - "pt": "Nível da bateria" + "pt": "Nível da bateria", + "pl": "Poziom baterii" } }, "bug_report_contact_hint": { @@ -467,7 +503,8 @@ "es": "nombre@ejemplo.com", "it": "nome@esempio.com", "de": "name@beispiel.com", - "pt": "nome@exemplo.com" + "pt": "nome@exemplo.com", + "pl": "nazwa@przyklad.com" } }, "bug_report_contact_label": { @@ -478,7 +515,8 @@ "es": "Correo de contacto (opcional)", "it": "Email di contatto (facoltativa)", "de": "Kontakt-E-Mail (optional)", - "pt": "E-mail de contacto (opcional)" + "pt": "E-mail de contacto (opcional)", + "pl": "E-mail kontaktowy (opcjonalnie)" } }, "bug_report_description": { @@ -489,7 +527,8 @@ "es": "Cuéntenos qué salió mal. Adjuntamos información del dispositivo y, opcionalmente, registros recientes (con los valores sensibles ocultos).", "it": "Ci dica cosa è andato storto. Alleghiamo le informazioni sul dispositivo e, facoltativamente, i log recenti (con i valori sensibili oscurati).", "de": "Sagen Sie uns, was schiefgelaufen ist. Wir hängen Geräteinformationen und optional aktuelle Protokolle an (sensible Werte werden geschwärzt).", - "pt": "Diga-nos o que correu mal. Anexamos informações do dispositivo e, opcionalmente, registos recentes (com os valores sensíveis ocultados)." + "pt": "Diga-nos o que correu mal. Anexamos informações do dispositivo e, opcionalmente, registos recentes (com os valores sensíveis ocultados).", + "pl": "Napisz, co poszło nie tak. Dołączamy informacje o urządzeniu i opcjonalnie ostatnie dzienniki (z ukrytymi wrażliwymi wartościami)." } }, "bug_report_device_section": { @@ -500,7 +539,8 @@ "es": "Información del dispositivo", "it": "Informazioni sul dispositivo", "de": "Geräteinformationen", - "pt": "Informações do dispositivo" + "pt": "Informações do dispositivo", + "pl": "Informacje o urządzeniu" } }, "bug_report_expected_hint": { @@ -511,7 +551,8 @@ "es": "Describa lo que esperaba que ocurriera", "it": "Descriva cosa si aspettava che accadesse", "de": "Beschreiben Sie, was Sie erwartet haben", - "pt": "Descreva o que esperava que acontecesse" + "pt": "Descreva o que esperava que acontecesse", + "pl": "Opisz oczekiwane zachowanie" } }, "bug_report_expected_label": { @@ -522,7 +563,8 @@ "es": "¿Qué esperaba?", "it": "Cosa si aspettava?", "de": "Was haben Sie erwartet?", - "pt": "O que esperava?" + "pt": "O que esperava?", + "pl": "Czego oczekiwano?" } }, "bug_report_include_logs": { @@ -533,7 +575,8 @@ "es": "Incluir registros recientes", "it": "Includi i log recenti", "de": "Aktuelle Protokolle einschließen", - "pt": "Incluir registos recentes" + "pt": "Incluir registos recentes", + "pl": "Dołącz ostatnie dzienniki" } }, "bug_report_include_logs_description": { @@ -544,7 +587,8 @@ "es": "Nos ayuda a diagnosticar el problema. Los valores sensibles se ocultan antes de enviarlos.", "it": "Ci aiuta a diagnosticare il problema. I valori sensibili vengono oscurati prima dell’invio.", "de": "Hilft uns, das Problem zu diagnostizieren. Sensible Werte werden vor dem Senden geschwärzt.", - "pt": "Ajuda-nos a diagnosticar o problema. Os valores sensíveis são ocultados antes do envio." + "pt": "Ajuda-nos a diagnosticar o problema. Os valores sensíveis são ocultados antes do envio.", + "pl": "Pomaga nam zdiagnozować problem. Wrażliwe wartości są ukrywane przed wysłaniem." } }, "bug_report_logs_size": { @@ -555,7 +599,8 @@ "es": "Tamaño del archivo de registros", "it": "Dimensione dell’allegato dei log", "de": "Größe des Protokollanhangs", - "pt": "Tamanho do anexo de registos" + "pt": "Tamanho do anexo de registos", + "pl": "Rozmiar załącznika z dziennikami" } }, "bug_report_missing_expected": { @@ -566,7 +611,8 @@ "es": "Describa lo que esperaba.", "it": "Descriva cosa si aspettava.", "de": "Bitte beschreiben Sie, was Sie erwartet haben.", - "pt": "Descreva o que esperava." + "pt": "Descreva o que esperava.", + "pl": "Opisz oczekiwane zachowanie." } }, "bug_report_missing_what": { @@ -577,7 +623,8 @@ "es": "Describa lo que ocurrió.", "it": "Descriva cosa è accaduto.", "de": "Bitte beschreiben Sie, was passiert ist.", - "pt": "Descreva o que aconteceu." + "pt": "Descreva o que aconteceu.", + "pl": "Opisz, co się stało." } }, "bug_report_steps_hint": { @@ -588,7 +635,8 @@ "es": "Enumere los pasos para reproducir el problema", "it": "Elenchi i passaggi per riprodurre il problema", "de": "Listen Sie die Schritte zum Reproduzieren des Problems auf", - "pt": "Enumere os passos para reproduzir o problema" + "pt": "Enumere os passos para reproduzir o problema", + "pl": "Wymień kroki umożliwiające odtworzenie problemu" } }, "bug_report_steps_label": { @@ -599,7 +647,8 @@ "es": "Pasos para reproducir (opcional)", "it": "Passaggi per riprodurre (facoltativi)", "de": "Schritte zum Reproduzieren (optional)", - "pt": "Passos para reproduzir (opcional)" + "pt": "Passos para reproduzir (opcional)", + "pl": "Kroki do odtworzenia (opcjonalnie)" } }, "bug_report_submit": { @@ -610,7 +659,8 @@ "es": "Enviar informe", "it": "Invia segnalazione", "de": "Bericht senden", - "pt": "Enviar relatório" + "pt": "Enviar relatório", + "pl": "Wyślij zgłoszenie" } }, "bug_report_submit_failed": { @@ -621,7 +671,8 @@ "es": "No se pudo enviar el informe de error. Inténtelo de nuevo más tarde.", "it": "Impossibile inviare la segnalazione. Riprovi più tardi.", "de": "Der Fehlerbericht konnte nicht gesendet werden. Bitte versuchen Sie es später erneut.", - "pt": "Não foi possível enviar o relatório de erro. Tente novamente mais tarde." + "pt": "Não foi possível enviar o relatório de erro. Tente novamente mais tarde.", + "pl": "Nie udało się wysłać zgłoszenia błędu. Spróbuj ponownie później." } }, "bug_report_submitted": { @@ -632,7 +683,8 @@ "es": "Gracias: su informe de error se ha registrado.", "it": "Grazie: la sua segnalazione è stata registrata.", "de": "Danke – Ihr Fehlerbericht wurde erfasst.", - "pt": "Obrigado — o seu relatório de erro foi registado." + "pt": "Obrigado — o seu relatório de erro foi registado.", + "pl": "Dziękujemy — Twoje zgłoszenie błędu zostało zapisane." } }, "bug_report_submitting": { @@ -643,7 +695,8 @@ "es": "Enviando…", "it": "Invio in corso…", "de": "Wird gesendet…", - "pt": "A enviar…" + "pt": "A enviar…", + "pl": "Wysyłanie…" } }, "bug_report_what_hint": { @@ -654,7 +707,8 @@ "es": "Describa lo que ocurrió", "it": "Descriva cosa è accaduto", "de": "Beschreiben Sie, was passiert ist", - "pt": "Descreva o que aconteceu" + "pt": "Descreva o que aconteceu", + "pl": "Opisz, co się stało" } }, "bug_report_what_label": { @@ -665,7 +719,8 @@ "es": "¿Qué ocurrió?", "it": "Cosa è accaduto?", "de": "Was ist passiert?", - "pt": "O que aconteceu?" + "pt": "O que aconteceu?", + "pl": "Co się stało?" } }, "button_approve": { @@ -676,7 +731,8 @@ "es": "Aprobar", "it": "Approva", "de": "Genehmigen", - "pt": "Aprovar" + "pt": "Aprovar", + "pl": "Zatwierdź" } }, "button_back": { @@ -687,7 +743,8 @@ "es": "Atrás", "it": "Indietro", "de": "Zurück", - "pt": "Voltar" + "pt": "Voltar", + "pl": "Wstecz" } }, "button_cancel": { @@ -698,7 +755,8 @@ "es": "Cancelar", "it": "Annulla", "de": "Abbrechen", - "pt": "Cancelar" + "pt": "Cancelar", + "pl": "Anuluj" } }, "button_cancel_receive": { @@ -709,7 +767,8 @@ "es": "Cancelar", "it": "Annulla", "de": "Abbrechen", - "pt": "Cancelar" + "pt": "Cancelar", + "pl": "Anuluj" } }, "button_change_files": { @@ -720,7 +779,8 @@ "es": "Cambiar archivos", "it": "Cambia file", "de": "Dateien ändern", - "pt": "Alterar ficheiros" + "pt": "Alterar ficheiros", + "pl": "Zmień pliki" } }, "button_choose_files": { @@ -731,7 +791,8 @@ "es": "Elegir archivos", "it": "Scegli file", "de": "Dateien auswählen", - "pt": "Escolher ficheiros" + "pt": "Escolher ficheiros", + "pl": "Wybierz pliki" } }, "button_choose_folder": { @@ -742,7 +803,8 @@ "es": "Elegir carpeta", "it": "Scegli cartella", "de": "Ordner auswählen", - "pt": "Escolher pasta" + "pt": "Escolher pasta", + "pl": "Wybierz folder" } }, "button_clear": { @@ -753,7 +815,8 @@ "es": "Borrar", "it": "Cancella", "de": "Löschen", - "pt": "Limpar" + "pt": "Limpar", + "pl": "Wyczyść" } }, "button_close": { @@ -764,7 +827,8 @@ "es": "Cerrar", "it": "Chiudi", "de": "Schließen", - "pt": "Fechar" + "pt": "Fechar", + "pl": "Zamknij" } }, "button_create_new_transfer": { @@ -775,7 +839,8 @@ "es": "Nueva transferencia", "it": "Nuovo trasferimento", "de": "Neue Übertragung", - "pt": "Nova transferência" + "pt": "Nova transferência", + "pl": "Nowy transfer" } }, "button_delete_transfer": { @@ -786,7 +851,8 @@ "es": "Eliminar transferencia", "it": "Elimina trasferimento", "de": "Übertragung löschen", - "pt": "Eliminar transferência" + "pt": "Eliminar transferência", + "pl": "Usuń transfer" } }, "button_download_invitation": { @@ -797,7 +863,8 @@ "es": "Guardar archivo .vnd", "it": "Salva file .vnd", "de": ".vnd-Datei sichern", - "pt": "Guardar ficheiro .vnd" + "pt": "Guardar ficheiro .vnd", + "pl": "Zapisz plik .vnd" } }, "button_native_share": { @@ -808,7 +875,8 @@ "es": "Compartir invitación", "it": "Condividi invito", "de": "Einladung teilen", - "pt": "Partilhar convite" + "pt": "Partilhar convite", + "pl": "Udostępnij zaproszenie" } }, "button_open_settings": { @@ -819,7 +887,8 @@ "es": "Abrir Ajustes", "it": "Apri Impostazioni", "de": "Einstellungen öffnen", - "pt": "Abrir Definições" + "pt": "Abrir Definições", + "pl": "Otwórz Ustawienia" } }, "button_receive": { @@ -830,7 +899,8 @@ "es": "Recibir", "it": "Ricevi", "de": "Empfangen", - "pt": "Receber" + "pt": "Receber", + "pl": "Odbierz" } }, "button_receive_files": { @@ -841,7 +911,8 @@ "es": "Empezar a recibir", "it": "Inizia a ricevere", "de": "Empfang starten", - "pt": "Começar a receber" + "pt": "Começar a receber", + "pl": "Rozpocznij odbieranie" } }, "button_refuse": { @@ -852,7 +923,8 @@ "es": "Rechazar", "it": "Rifiuta", "de": "Ablehnen", - "pt": "Recusar" + "pt": "Recusar", + "pl": "Odrzuć" } }, "button_remove_file": { @@ -863,7 +935,8 @@ "es": "Quitar archivo", "it": "Rimuovi file", "de": "Datei entfernen", - "pt": "Remover ficheiro" + "pt": "Remover ficheiro", + "pl": "Usuń plik" } }, "button_reset_default": { @@ -874,7 +947,8 @@ "es": "Usar predeterminado", "it": "Usa predefinito", "de": "Standard verwenden", - "pt": "Usar predefinição" + "pt": "Usar predefinição", + "pl": "Użyj domyślnego" } }, "button_retry": { @@ -885,7 +959,8 @@ "es": "Reintentar", "it": "Riprova", "de": "Wiederholen", - "pt": "Tentar novamente" + "pt": "Tentar novamente", + "pl": "Spróbuj ponownie" } }, "button_share_file": { @@ -896,7 +971,8 @@ "es": "Empezar a compartir", "it": "Inizia a condividere", "de": "Freigabe starten", - "pt": "Começar a partilhar" + "pt": "Começar a partilhar", + "pl": "Rozpocznij udostępnianie" } }, "button_sharing_file": { @@ -907,7 +983,8 @@ "es": "Preparando la transferencia…", "it": "Preparazione del trasferimento…", "de": "Übertragung wird vorbereitet…", - "pt": "A preparar a transferência…" + "pt": "A preparar a transferência…", + "pl": "Przygotowywanie transferu…" } }, "button_show_in_files": { @@ -918,7 +995,8 @@ "es": "Mostrar en Archivos", "it": "Mostra in File", "de": "In „Dateien“ anzeigen", - "pt": "Mostrar em Ficheiros" + "pt": "Mostrar em Ficheiros", + "pl": "Pokaż w Plikach" } }, "button_write_nfc": { @@ -929,7 +1007,8 @@ "es": "Escribir en etiqueta NFC", "it": "Scrivi su tag NFC", "de": "Auf NFC-Tag schreiben", - "pt": "Escrever em etiqueta NFC" + "pt": "Escrever em etiqueta NFC", + "pl": "Zapisz na tagu NFC" } }, "device_model_title": { @@ -940,7 +1019,8 @@ "es": "Modelo del dispositivo", "it": "Modello del dispositivo", "de": "Gerätemodell", - "pt": "Modelo do dispositivo" + "pt": "Modelo do dispositivo", + "pl": "Model urządzenia" } }, "device_name_title": { @@ -951,7 +1031,8 @@ "es": "Nombre del dispositivo", "it": "Nome del dispositivo", "de": "Gerätename", - "pt": "Nome do dispositivo" + "pt": "Nome do dispositivo", + "pl": "Nazwa urządzenia" } }, "diagnostics_description": { @@ -962,7 +1043,8 @@ "es": "Enviar informes de fallos y eventos de uso anónimos para ayudarnos a mejorar VniDrop. Puede desactivarlo en cualquier momento. Las invitaciones, las rutas de archivos y el contenido de las transferencias nunca se incluyen.", "it": "Invia report di arresto anomalo ed eventi d’uso anonimi per aiutarci a migliorare VniDrop. Può disattivarlo in qualsiasi momento. Inviti, percorsi dei file e contenuti dei trasferimenti non vengono mai inclusi.", "de": "Anonyme Absturzberichte und Nutzungsereignisse senden, damit wir VniDrop verbessern können. Sie können dies jederzeit deaktivieren. Einladungen, Dateipfade und Übertragungsinhalte werden niemals einbezogen.", - "pt": "Enviar relatórios de falhas e eventos de utilização anónimos para nos ajudar a melhorar o VniDrop. Pode desativar isto a qualquer momento. Convites, caminhos de ficheiros e conteúdos das transferências nunca são incluídos." + "pt": "Enviar relatórios de falhas e eventos de utilização anónimos para nos ajudar a melhorar o VniDrop. Pode desativar isto a qualquer momento. Convites, caminhos de ficheiros e conteúdos das transferências nunca são incluídos.", + "pl": "Wysyłaj anonimowe raporty o awariach i zdarzenia użytkowania, aby pomóc nam ulepszać VniDrop. Możesz to wyłączyć w dowolnej chwili. Zaproszenia, ścieżki plików i zawartość transferów nigdy nie są dołączane." } }, "diagnostics_disabled_message": { @@ -973,7 +1055,8 @@ "es": "El uso compartido de diagnósticos está desactivado.", "it": "La condivisione dei dati diagnostici è disattivata.", "de": "Die Freigabe von Diagnosedaten ist deaktiviert.", - "pt": "A partilha de diagnósticos está desativada." + "pt": "A partilha de diagnósticos está desativada.", + "pl": "Udostępnianie diagnostyki jest wyłączone." } }, "diagnostics_enabled_message": { @@ -984,7 +1067,8 @@ "es": "El uso compartido de diagnósticos está activado.", "it": "La condivisione dei dati diagnostici è attivata.", "de": "Die Freigabe von Diagnosedaten ist aktiviert.", - "pt": "A partilha de diagnósticos está ativada." + "pt": "A partilha de diagnósticos está ativada.", + "pl": "Udostępnianie diagnostyki jest włączone." } }, "diagnostics_title": { @@ -995,7 +1079,8 @@ "es": "Compartir diagnósticos", "it": "Condividi dati diagnostici", "de": "Diagnosedaten teilen", - "pt": "Partilhar diagnósticos" + "pt": "Partilhar diagnósticos", + "pl": "Udostępniaj diagnostykę" } }, "error_camera": { @@ -1006,7 +1091,8 @@ "es": "Se necesita acceso a la cámara para escanear un código QR.", "it": "Per scansionare un codice QR è necessario l’accesso alla fotocamera.", "de": "Für das Scannen eines QR-Codes ist Kamerazugriff erforderlich.", - "pt": "É necessário acesso à câmara para ler um código QR." + "pt": "É necessário acesso à câmara para ler um código QR.", + "pl": "Do zeskanowania kodu QR wymagany jest dostęp do aparatu." } }, "error_device_info": { @@ -1017,7 +1103,8 @@ "es": "No se pudo cargar la información del dispositivo.", "it": "Impossibile caricare le informazioni sul dispositivo.", "de": "Geräteinformationen konnten nicht geladen werden.", - "pt": "Não foi possível carregar as informações do dispositivo." + "pt": "Não foi possível carregar as informações do dispositivo.", + "pl": "Nie udało się wczytać informacji o urządzeniu." } }, "error_filesystem": { @@ -1028,7 +1115,8 @@ "es": "VniDrop no pudo acceder a los archivos o la carpeta seleccionados. Compruebe los permisos e inténtelo de nuevo.", "it": "VniDrop non ha potuto accedere ai file o alla cartella selezionati. Controlli le autorizzazioni e riprovi.", "de": "VniDrop konnte nicht auf die ausgewählten Dateien oder den Ordner zugreifen. Überprüfen Sie die Berechtigungen und versuchen Sie es erneut.", - "pt": "O VniDrop não conseguiu aceder aos ficheiros ou à pasta selecionados. Verifique as permissões e tente novamente." + "pt": "O VniDrop não conseguiu aceder aos ficheiros ou à pasta selecionados. Verifique as permissões e tente novamente.", + "pl": "VniDrop nie mógł uzyskać dostępu do wybranych plików lub folderu. Sprawdź uprawnienia i spróbuj ponownie." } }, "error_generic": { @@ -1039,7 +1127,8 @@ "es": "Algo salió mal. Inténtelo de nuevo.", "it": "Qualcosa è andato storto. Riprovi.", "de": "Etwas ist schiefgelaufen. Versuchen Sie es erneut.", - "pt": "Algo correu mal. Tente novamente." + "pt": "Algo correu mal. Tente novamente.", + "pl": "Coś poszło nie tak. Spróbuj ponownie." } }, "error_initialization": { @@ -1050,7 +1139,8 @@ "es": "VniDrop no pudo terminar de iniciarse. Cierre la app e inténtelo de nuevo.", "it": "VniDrop non ha potuto completare l’avvio. Chiuda l’app e riprovi.", "de": "VniDrop konnte den Start nicht abschließen. Schließen Sie die App und versuchen Sie es erneut.", - "pt": "O VniDrop não conseguiu concluir o arranque. Feche a app e tente novamente." + "pt": "O VniDrop não conseguiu concluir o arranque. Feche a app e tente novamente.", + "pl": "VniDrop nie mógł dokończyć uruchamiania. Zamknij aplikację i spróbuj ponownie." } }, "error_invalid_ticket": { @@ -1061,7 +1151,8 @@ "es": "No se pudo leer esta invitación. Pida al remitente una nueva.", "it": "Impossibile leggere questo invito. Ne chieda uno nuovo al mittente.", "de": "Diese Einladung konnte nicht gelesen werden. Bitten Sie den Absender um eine neue.", - "pt": "Não foi possível ler este convite. Peça um novo ao remetente." + "pt": "Não foi possível ler este convite. Peça um novo ao remetente.", + "pl": "Nie udało się odczytać tego zaproszenia. Poproś nadawcę o nowe." } }, "error_invitation_empty": { @@ -1072,7 +1163,8 @@ "es": "Esa invitación está vacía. Intente abrirla de nuevo.", "it": "Questo invito è vuoto. Provi ad aprirlo di nuovo.", "de": "Diese Einladung ist leer. Versuchen Sie, sie erneut zu öffnen.", - "pt": "Esse convite está vazio. Tente abri-lo novamente." + "pt": "Esse convite está vazio. Tente abri-lo novamente.", + "pl": "To zaproszenie jest puste. Spróbuj otworzyć je ponownie." } }, "error_missing_native_library": { @@ -1083,7 +1175,8 @@ "es": "Falta la biblioteca nativa de VniDrop en esta versión.", "it": "La libreria nativa di VniDrop non è presente in questa build.", "de": "Die native VniDrop-Bibliothek fehlt in diesem Build.", - "pt": "A biblioteca nativa do VniDrop está em falta nesta compilação." + "pt": "A biblioteca nativa do VniDrop está em falta nesta compilação.", + "pl": "W tej kompilacji brakuje natywnej biblioteki VniDrop." } }, "error_nfc": { @@ -1094,7 +1187,8 @@ "es": "No se pudo usar esta etiqueta NFC. Pruebe con otra.", "it": "Impossibile usare questo tag NFC. Ne provi un altro.", "de": "Dieses NFC-Tag konnte nicht verwendet werden. Versuchen Sie ein anderes.", - "pt": "Não foi possível utilizar esta etiqueta NFC. Tente outra." + "pt": "Não foi possível utilizar esta etiqueta NFC. Tente outra.", + "pl": "Nie udało się użyć tego tagu NFC. Spróbuj innego." } }, "error_permission": { @@ -1105,7 +1199,8 @@ "es": "El remitente no ha aprobado esta transferencia, o fue rechazada.", "it": "Il mittente non ha approvato questo trasferimento, oppure è stato rifiutato.", "de": "Der Absender hat diese Übertragung nicht genehmigt oder sie wurde abgelehnt.", - "pt": "O remetente não aprovou esta transferência, ou foi recusada." + "pt": "O remetente não aprovou esta transferência, ou foi recusada.", + "pl": "Nadawca nie zatwierdził tego transferu lub został on odrzucony." } }, "error_repository": { @@ -1116,7 +1211,8 @@ "es": "VniDrop no pudo guardar los datos de la transferencia en este dispositivo.", "it": "VniDrop non ha potuto salvare i dati del trasferimento su questo dispositivo.", "de": "VniDrop konnte die Übertragungsdaten auf diesem Gerät nicht speichern.", - "pt": "O VniDrop não conseguiu guardar os dados da transferência neste dispositivo." + "pt": "O VniDrop não conseguiu guardar os dados da transferência neste dispositivo.", + "pl": "VniDrop nie mógł zapisać danych transferu na tym urządzeniu." } }, "error_selection_failed": { @@ -1127,7 +1223,8 @@ "es": "No se pudo abrir el elemento seleccionado. Intente elegirlo de nuevo.", "it": "Impossibile aprire l’elemento selezionato. Provi a sceglierlo di nuovo.", "de": "Das ausgewählte Objekt konnte nicht geöffnet werden. Versuchen Sie, es erneut auszuwählen.", - "pt": "Não foi possível abrir o item selecionado. Tente escolhê-lo novamente." + "pt": "Não foi possível abrir o item selecionado. Tente escolhê-lo novamente.", + "pl": "Nie udało się otworzyć wybranego elementu. Spróbuj wybrać go ponownie." } }, "error_share_empty": { @@ -1138,7 +1235,8 @@ "es": "Seleccione al menos un elemento para compartir.", "it": "Selezioni almeno un elemento da condividere.", "de": "Wählen Sie mindestens ein Objekt zum Teilen aus.", - "pt": "Selecione pelo menos um item para partilhar." + "pt": "Selecione pelo menos um item para partilhar.", + "pl": "Wybierz co najmniej jeden element do udostępnienia." } }, "error_socket_bind": { @@ -1149,7 +1247,8 @@ "es": "VniDrop no pudo abrir sus sockets de red en este dispositivo.", "it": "VniDrop non ha potuto aprire i suoi socket di rete su questo dispositivo.", "de": "VniDrop konnte seine Netzwerk-Sockets auf diesem Gerät nicht öffnen.", - "pt": "O VniDrop não conseguiu abrir os seus sockets de rede neste dispositivo." + "pt": "O VniDrop não conseguiu abrir os seus sockets de rede neste dispositivo.", + "pl": "VniDrop nie mógł otworzyć gniazd sieciowych na tym urządzeniu." } }, "error_starting_up": { @@ -1160,7 +1259,8 @@ "es": "VniDrop todavía se está iniciando. Vuelva a abrir la invitación en un momento.", "it": "VniDrop è ancora in fase di avvio. Riapra l’invito tra un momento.", "de": "VniDrop startet noch. Öffnen Sie die Einladung gleich erneut.", - "pt": "O VniDrop ainda está a iniciar. Abra o convite novamente dentro de momentos." + "pt": "O VniDrop ainda está a iniciar. Abra o convite novamente dentro de momentos.", + "pl": "VniDrop jeszcze się uruchamia. Otwórz zaproszenie ponownie za chwilę." } }, "error_transfer": { @@ -1171,7 +1271,8 @@ "es": "No se pudo completar la transferencia. Compruebe su conexión e inténtelo de nuevo.", "it": "Impossibile completare il trasferimento. Controlli la connessione e riprovi.", "de": "Die Übertragung konnte nicht abgeschlossen werden. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.", - "pt": "Não foi possível concluir a transferência. Verifique a sua ligação e tente novamente." + "pt": "Não foi possível concluir a transferência. Verifique a sua ligação e tente novamente.", + "pl": "Nie udało się ukończyć transferu. Sprawdź połączenie i spróbuj ponownie." } }, "field_receiver_name": { @@ -1182,7 +1283,8 @@ "es": "Nombre del destinatario", "it": "Nome del destinatario", "de": "Empfängername", - "pt": "Nome do destinatário" + "pt": "Nome do destinatário", + "pl": "Nazwa odbiorcy" } }, "field_sender_name": { @@ -1193,7 +1295,8 @@ "es": "Nombre del remitente", "it": "Nome del mittente", "de": "Absendername", - "pt": "Nome do remetente" + "pt": "Nome do remetente", + "pl": "Nazwa nadawcy" } }, "field_transfer_name": { @@ -1204,7 +1307,8 @@ "es": "Nombre de la transferencia", "it": "Nome del trasferimento", "de": "Übertragungsname", - "pt": "Nome da transferência" + "pt": "Nome da transferência", + "pl": "Nazwa transferu" } }, "field_username": { @@ -1215,7 +1319,8 @@ "es": "Nombre visible", "it": "Nome visualizzato", "de": "Anzeigename", - "pt": "Nome a apresentar" + "pt": "Nome a apresentar", + "pl": "Nazwa wyświetlana" } }, "folder_status_permission_required": { @@ -1226,7 +1331,8 @@ "es": "Permiso necesario", "it": "Autorizzazione necessaria", "de": "Berechtigung erforderlich", - "pt": "Permissão necessária" + "pt": "Permissão necessária", + "pl": "Wymagane uprawnienie" } }, "folder_status_unavailable": { @@ -1237,7 +1343,8 @@ "es": "No disponible", "it": "Non disponibile", "de": "Nicht verfügbar", - "pt": "Indisponível" + "pt": "Indisponível", + "pl": "Niedostępny" } }, "folder_status_validating": { @@ -1248,7 +1355,8 @@ "es": "Comprobando carpeta…", "it": "Controllo della cartella…", "de": "Ordner wird geprüft…", - "pt": "A verificar a pasta…" + "pt": "A verificar a pasta…", + "pl": "Sprawdzanie folderu…" } }, "folder_status_writable": { @@ -1259,7 +1367,8 @@ "es": "Listo", "it": "Pronta", "de": "Bereit", - "pt": "Pronto" + "pt": "Pronto", + "pl": "Gotowy" } }, "metadata_files": { @@ -1270,7 +1379,8 @@ "es": "Archivos", "it": "File", "de": "Dateien", - "pt": "Ficheiros" + "pt": "Ficheiros", + "pl": "Pliki" } }, "metadata_size": { @@ -1281,7 +1391,8 @@ "es": "Tamaño", "it": "Dimensione", "de": "Größe", - "pt": "Tamanho" + "pt": "Tamanho", + "pl": "Rozmiar" } }, "metadata_status": { @@ -1292,7 +1403,8 @@ "es": "Estado", "it": "Stato", "de": "Status", - "pt": "Estado" + "pt": "Estado", + "pl": "Status" } }, "nav_receive": { @@ -1303,7 +1415,8 @@ "es": "Recibir", "it": "Ricevi", "de": "Empfangen", - "pt": "Receber" + "pt": "Receber", + "pl": "Odbierz" } }, "nav_send": { @@ -1314,7 +1427,8 @@ "es": "Enviar", "it": "Invia", "de": "Senden", - "pt": "Enviar" + "pt": "Enviar", + "pl": "Wyślij" } }, "nav_settings": { @@ -1325,7 +1439,8 @@ "es": "Ajustes", "it": "Impostazioni", "de": "Einstellungen", - "pt": "Definições" + "pt": "Definições", + "pl": "Ustawienia" } }, "network_title": { @@ -1336,7 +1451,8 @@ "es": "Red", "it": "Rete", "de": "Netzwerk", - "pt": "Rede" + "pt": "Rede", + "pl": "Sieć" } }, "notifications_description": { @@ -1347,7 +1463,8 @@ "es": "Reciba avisos sobre nuevas solicitudes de recepción cuando VniDrop está en segundo plano.", "it": "Ricevi avvisi sulle nuove richieste di ricezione quando VniDrop è in background.", "de": "Werden Sie über neue Empfangsanfragen benachrichtigt, während VniDrop im Hintergrund läuft.", - "pt": "Seja notificado sobre novos pedidos de receção enquanto o VniDrop está em segundo plano." + "pt": "Seja notificado sobre novos pedidos de receção enquanto o VniDrop está em segundo plano.", + "pl": "Otrzymuj powiadomienia o nowych prośbach o odbiór, gdy VniDrop działa w tle." } }, "notifications_enabled_message": { @@ -1358,7 +1475,8 @@ "es": "Notificaciones activadas.", "it": "Notifiche attivate.", "de": "Mitteilungen aktiviert.", - "pt": "Notificações ativadas." + "pt": "Notificações ativadas.", + "pl": "Powiadomienia włączone." } }, "notifications_local_title": { @@ -1369,7 +1487,8 @@ "es": "Permitir notificaciones", "it": "Consenti le notifiche", "de": "Mitteilungen erlauben", - "pt": "Permitir notificações" + "pt": "Permitir notificações", + "pl": "Zezwól na powiadomienia" } }, "notifications_permission_denied": { @@ -1380,7 +1499,8 @@ "es": "Las notificaciones están desactivadas para VniDrop. Puede activarlas en Ajustes.", "it": "Le notifiche sono disattivate per VniDrop. Può attivarle in Impostazioni.", "de": "Mitteilungen sind für VniDrop deaktiviert. Sie können sie in den Einstellungen aktivieren.", - "pt": "As notificações estão desativadas para o VniDrop. Pode ativá-las nas Definições." + "pt": "As notificações estão desativadas para o VniDrop. Pode ativá-las nas Definições.", + "pl": "Powiadomienia są wyłączone dla VniDrop. Możesz je włączyć w Ustawieniach." } }, "notifications_settings_open_failed": { @@ -1391,7 +1511,8 @@ "es": "No se pudieron abrir los ajustes de notificaciones.", "it": "Impossibile aprire le impostazioni delle notifiche.", "de": "Die Mitteilungseinstellungen konnten nicht geöffnet werden.", - "pt": "Não foi possível abrir as definições de notificações." + "pt": "Não foi possível abrir as definições de notificações.", + "pl": "Nie udało się otworzyć ustawień powiadomień." } }, "notifications_title": { @@ -1402,7 +1523,8 @@ "es": "Notificaciones", "it": "Notifiche", "de": "Mitteilungen", - "pt": "Notificações" + "pt": "Notificações", + "pl": "Powiadomienia" } }, "notifications_unsupported": { @@ -1413,7 +1535,8 @@ "es": "Las notificaciones no están disponibles en este dispositivo.", "it": "Le notifiche non sono disponibili su questo dispositivo.", "de": "Mitteilungen sind auf diesem Gerät nicht verfügbar.", - "pt": "As notificações não estão disponíveis neste dispositivo." + "pt": "As notificações não estão disponíveis neste dispositivo.", + "pl": "Powiadomienia nie są dostępne na tym urządzeniu." } }, "os_version_title": { @@ -1424,7 +1547,8 @@ "es": "Sistema operativo", "it": "Sistema operativo", "de": "Betriebssystem", - "pt": "Sistema operativo" + "pt": "Sistema operativo", + "pl": "System operacyjny" } }, "preferences_receive_folder_title": { @@ -1435,7 +1559,8 @@ "es": "Guardar las transferencias recibidas en", "it": "Salva i trasferimenti ricevuti in", "de": "Empfangene Übertragungen sichern in", - "pt": "Guardar as transferências recebidas em" + "pt": "Guardar as transferências recebidas em", + "pl": "Zapisuj odebrane transfery w" } }, "preferences_title": { @@ -1446,7 +1571,8 @@ "es": "Preferencias", "it": "Preferenze", "de": "Voreinstellungen", - "pt": "Preferências" + "pt": "Preferências", + "pl": "Preferencje" } }, "progress_cancelled": { @@ -1457,7 +1583,8 @@ "es": "Cancelado", "it": "Annullato", "de": "Abgebrochen", - "pt": "Cancelado" + "pt": "Cancelado", + "pl": "Anulowano" } }, "progress_completed": { @@ -1468,7 +1595,8 @@ "es": "Completado", "it": "Completato", "de": "Abgeschlossen", - "pt": "Concluído" + "pt": "Concluído", + "pl": "Ukończono" } }, "progress_connected": { @@ -1479,7 +1607,8 @@ "es": "Conectado", "it": "Connesso", "de": "Verbunden", - "pt": "Ligado" + "pt": "Ligado", + "pl": "Połączono" } }, "progress_connecting": { @@ -1490,7 +1619,8 @@ "es": "Conectando", "it": "Connessione", "de": "Verbinden", - "pt": "A ligar" + "pt": "A ligar", + "pl": "Łączenie" } }, "progress_downloading": { @@ -1501,7 +1631,8 @@ "es": "Descargando", "it": "Download", "de": "Wird geladen", - "pt": "A descarregar" + "pt": "A descarregar", + "pl": "Pobieranie" } }, "progress_failed": { @@ -1512,7 +1643,8 @@ "es": "Fallido", "it": "Non riuscito", "de": "Fehlgeschlagen", - "pt": "Falhou" + "pt": "Falhou", + "pl": "Niepowodzenie" } }, "progress_getting_ready": { @@ -1523,7 +1655,8 @@ "es": "Preparándose", "it": "Preparazione", "de": "Wird bereitgemacht", - "pt": "A preparar-se" + "pt": "A preparar-se", + "pl": "Przygotowywanie" } }, "progress_interrupted": { @@ -1534,7 +1667,8 @@ "es": "Transferencia interrumpida", "it": "Trasferimento interrotto", "de": "Übertragung unterbrochen", - "pt": "Transferência interrompida" + "pt": "Transferência interrompida", + "pl": "Transfer przerwany" } }, "progress_preparing": { @@ -1545,7 +1679,8 @@ "es": "Preparando", "it": "Preparazione", "de": "Wird vorbereitet", - "pt": "A preparar" + "pt": "A preparar", + "pl": "Przygotowywanie" } }, "progress_ready": { @@ -1556,7 +1691,8 @@ "es": "Listo", "it": "Pronto", "de": "Bereit", - "pt": "Pronto" + "pt": "Pronto", + "pl": "Gotowe" } }, "progress_receiving": { @@ -1567,7 +1703,8 @@ "es": "Recibiendo", "it": "Ricezione", "de": "Wird empfangen", - "pt": "A receber" + "pt": "A receber", + "pl": "Odbieranie" } }, "progress_requesting_access": { @@ -1578,7 +1715,8 @@ "es": "Solicitando acceso", "it": "Richiesta di accesso", "de": "Zugriff wird angefragt", - "pt": "A pedir acesso" + "pt": "A pedir acesso", + "pl": "Prośba o dostęp" } }, "progress_saving": { @@ -1589,7 +1727,8 @@ "es": "Guardando", "it": "Salvataggio", "de": "Wird gesichert", - "pt": "A guardar" + "pt": "A guardar", + "pl": "Zapisywanie" } }, "progress_sending": { @@ -1600,7 +1739,8 @@ "es": "Enviando", "it": "Invio", "de": "Wird gesendet", - "pt": "A enviar" + "pt": "A enviar", + "pl": "Wysyłanie" } }, "progress_sending_to_count": { @@ -1611,7 +1751,8 @@ "es": "Enviando a {count}", "it": "Invio a {count}", "de": "Senden an {count}", - "pt": "A enviar para {count}" + "pt": "A enviar para {count}", + "pl": "Wysyłanie do {count}" }, "args": [ { @@ -1628,7 +1769,8 @@ "es": "Listo para compartir", "it": "Pronto per la condivisione", "de": "Bereit zum Teilen", - "pt": "Pronto para partilhar" + "pt": "Pronto para partilhar", + "pl": "Gotowe do udostępnienia" } }, "progress_working": { @@ -1639,7 +1781,8 @@ "es": "Trabajando…", "it": "Elaborazione…", "de": "Wird bearbeitet…", - "pt": "A processar…" + "pt": "A processar…", + "pl": "Przetwarzanie…" } }, "receive_choose_method_body": { @@ -1650,7 +1793,8 @@ "es": "Elija el método de invitación de que disponga.", "it": "Scelga il metodo di invito a sua disposizione.", "de": "Wählen Sie die Ihnen zur Verfügung stehende Einladungsmethode.", - "pt": "Escolha o método de convite ao seu dispor." + "pt": "Escolha o método de convite ao seu dispor.", + "pl": "Wybierz dostępną metodę zaproszenia." } }, "receive_choose_method_title": { @@ -1661,7 +1805,8 @@ "es": "¿Cómo quiere conectarse?", "it": "Come vuole connettersi?", "de": "Wie möchten Sie sich verbinden?", - "pt": "Como pretende ligar-se?" + "pt": "Como pretende ligar-se?", + "pl": "Jak chcesz się połączyć?" } }, "receive_clear_history": { @@ -1672,7 +1817,8 @@ "es": "Borrar historial", "it": "Cancella cronologia", "de": "Verlauf löschen", - "pt": "Limpar histórico" + "pt": "Limpar histórico", + "pl": "Wyczyść historię" } }, "receive_clear_history_description": { @@ -1683,7 +1829,8 @@ "es": "Todas las recepciones completadas, fallidas y canceladas se eliminarán del historial de VniDrop. Los archivos descargados permanecerán en este dispositivo.", "it": "Tutte le ricezioni completate, non riuscite e annullate verranno rimosse dalla cronologia di VniDrop. I file scaricati rimarranno su questo dispositivo.", "de": "Alle abgeschlossenen, fehlgeschlagenen und abgebrochenen Empfänge werden aus dem Verlauf von VniDrop entfernt. Heruntergeladene Dateien verbleiben auf diesem Gerät.", - "pt": "Todas as receções concluídas, falhadas e canceladas serão removidas do histórico do VniDrop. Os ficheiros descarregados permanecerão neste dispositivo." + "pt": "Todas as receções concluídas, falhadas e canceladas serão removidas do histórico do VniDrop. Os ficheiros descarregados permanecerão neste dispositivo.", + "pl": "Wszystkie ukończone, nieudane i anulowane odbiory zostaną usunięte z historii VniDrop. Pobrane pliki pozostaną na tym urządzeniu." } }, "receive_clear_history_title": { @@ -1694,7 +1841,8 @@ "es": "¿Borrar el historial de recepción?", "it": "Cancellare la cronologia di ricezione?", "de": "Empfangsverlauf löschen?", - "pt": "Limpar o histórico de receção?" + "pt": "Limpar o histórico de receção?", + "pl": "Wyczyścić historię odbioru?" } }, "receive_completed": { @@ -1705,7 +1853,8 @@ "es": "Transferencia recibida.", "it": "Trasferimento ricevuto.", "de": "Übertragung empfangen.", - "pt": "Transferência recebida." + "pt": "Transferência recebida.", + "pl": "Transfer odebrany." } }, "receive_delete_history_description": { @@ -1722,7 +1871,8 @@ "es": "«{arg1}» se eliminará del historial de VniDrop. El archivo descargado permanecerá en este dispositivo.", "it": "«{arg1}» verrà rimosso dalla cronologia di VniDrop. Il file scaricato rimarrà su questo dispositivo.", "de": "„{arg1}“ wird aus dem Verlauf von VniDrop entfernt. Die heruntergeladene Datei verbleibt auf diesem Gerät.", - "pt": "«{arg1}» será removido do histórico do VniDrop. O ficheiro descarregado permanecerá neste dispositivo." + "pt": "«{arg1}» será removido do histórico do VniDrop. O ficheiro descarregado permanecerá neste dispositivo.", + "pl": "„{arg1}” zostanie usunięty z historii VniDrop. Pobrany plik pozostanie na tym urządzeniu." } }, "receive_delete_history_item": { @@ -1733,7 +1883,8 @@ "es": "Eliminar del historial de recepción", "it": "Elimina dalla cronologia di ricezione", "de": "Aus Empfangsverlauf löschen", - "pt": "Eliminar do histórico de receção" + "pt": "Eliminar do histórico de receção", + "pl": "Usuń z historii odbioru" } }, "receive_delete_history_title": { @@ -1744,7 +1895,8 @@ "es": "¿Quitar del historial?", "it": "Rimuovere dalla cronologia?", "de": "Aus dem Verlauf entfernen?", - "pt": "Remover do histórico?" + "pt": "Remover do histórico?", + "pl": "Usunąć z historii?" } }, "receive_empty_body": { @@ -1755,7 +1907,8 @@ "es": "Abra una invitación de VniDrop, escanee un código QR o acerque una etiqueta NFC.", "it": "Apra un invito VniDrop, scansioni un codice QR o avvicini un tag NFC.", "de": "Öffnen Sie eine VniDrop-Einladung, scannen Sie einen QR-Code oder halten Sie das Gerät an ein NFC-Tag.", - "pt": "Abra um convite do VniDrop, leia um código QR ou aproxime uma etiqueta NFC." + "pt": "Abra um convite do VniDrop, leia um código QR ou aproxime uma etiqueta NFC.", + "pl": "Otwórz zaproszenie VniDrop, zeskanuj kod QR lub zbliż tag NFC." } }, "receive_empty_title": { @@ -1766,7 +1919,8 @@ "es": "Aún no se ha recibido nada", "it": "Ancora nulla di ricevuto", "de": "Noch nichts empfangen", - "pt": "Ainda não recebeu nada" + "pt": "Ainda não recebeu nada", + "pl": "Nic jeszcze nie odebrano" } }, "receive_history_cleared": { @@ -1777,7 +1931,8 @@ "es": "Historial de recepción borrado.", "it": "Cronologia di ricezione cancellata.", "de": "Empfangsverlauf gelöscht.", - "pt": "Histórico de receção limpo." + "pt": "Histórico de receção limpo.", + "pl": "Historia odbioru wyczyszczona." } }, "receive_history_title": { @@ -1788,7 +1943,8 @@ "es": "Historial", "it": "Cronologia", "de": "Verlauf", - "pt": "Histórico" + "pt": "Histórico", + "pl": "Historia" } }, "receive_method_file": { @@ -1799,7 +1955,8 @@ "es": "Abrir una invitación .vnd", "it": "Apri un invito .vnd", "de": "Eine .vnd-Einladung öffnen", - "pt": "Abrir um convite .vnd" + "pt": "Abrir um convite .vnd", + "pl": "Otwórz zaproszenie .vnd" } }, "receive_method_file_description": { @@ -1810,7 +1967,8 @@ "es": "Elija una invitación guardada o compartida en este dispositivo.", "it": "Scelga un invito salvato o condiviso su questo dispositivo.", "de": "Wählen Sie eine auf diesem Gerät gespeicherte oder geteilte Einladung.", - "pt": "Escolha um convite guardado ou partilhado neste dispositivo." + "pt": "Escolha um convite guardado ou partilhado neste dispositivo.", + "pl": "Wybierz zaproszenie zapisane lub udostępnione na tym urządzeniu." } }, "receive_method_nfc": { @@ -1821,7 +1979,8 @@ "es": "Leer etiqueta NFC", "it": "Leggi tag NFC", "de": "NFC-Tag lesen", - "pt": "Ler etiqueta NFC" + "pt": "Ler etiqueta NFC", + "pl": "Odczytaj tag NFC" } }, "receive_method_nfc_description": { @@ -1832,7 +1991,8 @@ "es": "Acerque este dispositivo a la etiqueta de invitación del remitente.", "it": "Avvicini questo dispositivo al tag di invito del mittente.", "de": "Halten Sie dieses Gerät an das Einladungs-Tag des Absenders.", - "pt": "Aproxime este dispositivo da etiqueta de convite do remetente." + "pt": "Aproxime este dispositivo da etiqueta de convite do remetente.", + "pl": "Zbliż to urządzenie do tagu zaproszenia nadawcy." } }, "receive_method_scan": { @@ -1843,7 +2003,8 @@ "es": "Escanear código QR", "it": "Scansiona codice QR", "de": "QR-Code scannen", - "pt": "Ler código QR" + "pt": "Ler código QR", + "pl": "Zeskanuj kod QR" } }, "receive_method_scan_description": { @@ -1854,7 +2015,8 @@ "es": "Use la cámara para escanear el código de VniDrop del remitente.", "it": "Usi la fotocamera per scansionare il codice VniDrop del mittente.", "de": "Verwenden Sie die Kamera, um den VniDrop-Code des Absenders zu scannen.", - "pt": "Use a câmara para ler o código VniDrop do remetente." + "pt": "Use a câmara para ler o código VniDrop do remetente.", + "pl": "Użyj aparatu, aby zeskanować kod VniDrop nadawcy." } }, "receive_new_subtitle": { @@ -1865,7 +2027,8 @@ "es": "Transferencias que ha recibido en este dispositivo.", "it": "Trasferimenti che ha ricevuto su questo dispositivo.", "de": "Übertragungen, die Sie auf diesem Gerät empfangen haben.", - "pt": "Transferências que recebeu neste dispositivo." + "pt": "Transferências que recebeu neste dispositivo.", + "pl": "Transfery odebrane na tym urządzeniu." } }, "receive_nfc_waiting": { @@ -1876,7 +2039,8 @@ "es": "Acerque a la etiqueta NFC…", "it": "Avvicini al tag NFC…", "de": "Halten Sie das Gerät an das NFC-Tag…", - "pt": "Aproxime da etiqueta NFC…" + "pt": "Aproxime da etiqueta NFC…", + "pl": "Zbliż do tagu NFC…" } }, "receive_open_files_failed": { @@ -1887,7 +2051,8 @@ "es": "No se pudo abrir VniDrop en Archivos.", "it": "Impossibile aprire VniDrop in File.", "de": "VniDrop konnte in „Dateien“ nicht geöffnet werden.", - "pt": "Não foi possível abrir o VniDrop em Ficheiros." + "pt": "Não foi possível abrir o VniDrop em Ficheiros.", + "pl": "Nie udało się otworzyć VniDrop w Plikach." } }, "receive_review_title": { @@ -1898,7 +2063,8 @@ "es": "Revisar transferencia", "it": "Rivedi trasferimento", "de": "Übertragung prüfen", - "pt": "Rever transferência" + "pt": "Rever transferência", + "pl": "Przejrzyj transfer" } }, "receive_title": { @@ -1909,7 +2075,8 @@ "es": "Recibir", "it": "Ricevi", "de": "Empfangen", - "pt": "Receber" + "pt": "Receber", + "pl": "Odbierz" } }, "receive_unknown_transfer": { @@ -1920,7 +2087,8 @@ "es": "Transferencia de VniDrop", "it": "Trasferimento VniDrop", "de": "VniDrop-Übertragung", - "pt": "Transferência VniDrop" + "pt": "Transferência VniDrop", + "pl": "Transfer VniDrop" } }, "send_access_anyone": { @@ -1931,7 +2099,8 @@ "es": "Cualquiera que tenga esta transferencia", "it": "Chiunque abbia questo trasferimento", "de": "Jeder mit dieser Übertragung", - "pt": "Qualquer pessoa com esta transferência" + "pt": "Qualquer pessoa com esta transferência", + "pl": "Każdy, kto ma ten transfer" } }, "send_access_anyone_description": { @@ -1942,7 +2111,8 @@ "es": "No se requiere aprobación. Úselo solo para elementos que no le importe compartir.", "it": "Nessuna approvazione richiesta. Da usare solo per elementi che non ha problemi a condividere.", "de": "Keine Genehmigung erforderlich. Verwenden Sie dies nur für Objekte, die Sie unbedenklich teilen können.", - "pt": "Não é necessária aprovação. Utilize apenas para itens que não se importe de partilhar." + "pt": "Não é necessária aprovação. Utilize apenas para itens que não se importe de partilhar.", + "pl": "Nie jest wymagane zatwierdzenie. Używaj tylko dla elementów, które możesz swobodnie udostępniać." } }, "send_access_anyone_warning": { @@ -1953,7 +2123,8 @@ "es": "Cualquiera que tenga la invitación puede descargar hasta que deje de compartir. No lo use para elementos privados o sensibles.", "it": "Chiunque abbia l’invito può scaricare finché non interrompe la condivisione. Non lo usi per elementi privati o sensibili.", "de": "Jeder mit der Einladung kann herunterladen, bis Sie die Freigabe beenden. Verwenden Sie dies nicht für private oder sensible Objekte.", - "pt": "Qualquer pessoa com o convite pode descarregar até parar de partilhar. Não utilize para itens privados ou sensíveis." + "pt": "Qualquer pessoa com o convite pode descarregar até parar de partilhar. Não utilize para itens privados ou sensíveis.", + "pl": "Każdy, kto ma zaproszenie, może pobierać, dopóki nie zatrzymasz udostępniania. Nie używaj tego dla prywatnych ani wrażliwych elementów." } }, "send_access_approval": { @@ -1964,7 +2135,8 @@ "es": "Preguntar antes de cada descarga", "it": "Chiedi prima di ogni download", "de": "Vor jedem Download fragen", - "pt": "Perguntar antes de cada descarga" + "pt": "Perguntar antes de cada descarga", + "pl": "Pytaj przed każdym pobraniem" } }, "send_access_approval_description": { @@ -1975,7 +2147,8 @@ "es": "Usted aprueba o rechaza a cada nuevo destinatario.", "it": "Approva o rifiuta ogni nuovo destinatario.", "de": "Sie genehmigen oder lehnen jeden neuen Empfänger ab.", - "pt": "Aprova ou recusa cada novo destinatário." + "pt": "Aprova ou recusa cada novo destinatário.", + "pl": "Zatwierdzasz lub odrzucasz każdego nowego odbiorcę." } }, "send_access_title": { @@ -1986,7 +2159,8 @@ "es": "¿Quién puede recibirla?", "it": "Chi può riceverlo?", "de": "Wer kann sie empfangen?", - "pt": "Quem a pode receber?" + "pt": "Quem a pode receber?", + "pl": "Kto może to odebrać?" } }, "send_choose_file_body": { @@ -1997,7 +2171,8 @@ "es": "Seleccione archivos o una carpeta de este dispositivo. Podrá revisar la selección antes de crear la transferencia.", "it": "Selezioni file o una cartella da questo dispositivo. Potrà rivedere la selezione prima di creare il trasferimento.", "de": "Wählen Sie Dateien oder einen Ordner auf diesem Gerät aus. Sie können die Auswahl überprüfen, bevor Sie die Übertragung erstellen.", - "pt": "Selecione ficheiros ou uma pasta deste dispositivo. Poderá rever a seleção antes de criar a transferência." + "pt": "Selecione ficheiros ou uma pasta deste dispositivo. Poderá rever a seleção antes de criar a transferência.", + "pl": "Wybierz pliki lub folder z tego urządzenia. Przed utworzeniem transferu możesz przejrzeć wybór." } }, "send_choose_file_title": { @@ -2008,7 +2183,8 @@ "es": "Elija qué compartir", "it": "Scelga cosa condividere", "de": "Wählen Sie, was Sie teilen möchten", - "pt": "Escolha o que partilhar" + "pt": "Escolha o que partilhar", + "pl": "Wybierz, co udostępnić" } }, "send_empty_body": { @@ -2019,7 +2195,8 @@ "es": "Cree una transferencia, decida quién puede recibirla y luego invite a esas personas con un código QR, una etiqueta NFC o un archivo de invitación.", "it": "Crei un trasferimento, decida chi può riceverlo, poi inviti queste persone con un codice QR, un tag NFC o un file di invito.", "de": "Erstellen Sie eine Übertragung, entscheiden Sie, wer sie empfangen darf, und laden Sie diese Personen dann mit einem QR-Code, einem NFC-Tag oder einer Einladungsdatei ein.", - "pt": "Crie uma transferência, decida quem a pode receber e depois convide essas pessoas com um código QR, uma etiqueta NFC ou um ficheiro de convite." + "pt": "Crie uma transferência, decida quem a pode receber e depois convide essas pessoas com um código QR, uma etiqueta NFC ou um ficheiro de convite.", + "pl": "Utwórz transfer, zdecyduj, kto może go odebrać, a następnie zaproś te osoby za pomocą kodu QR, tagu NFC lub pliku zaproszenia." } }, "send_empty_title": { @@ -2030,7 +2207,8 @@ "es": "Aún no se ha compartido nada", "it": "Ancora nulla di condiviso", "de": "Noch nichts geteilt", - "pt": "Ainda não partilhou nada" + "pt": "Ainda não partilhou nada", + "pl": "Nic jeszcze nie udostępniono" } }, "send_file_size_unknown": { @@ -2041,7 +2219,8 @@ "es": "Tamaño no disponible", "it": "Dimensione non disponibile", "de": "Größe nicht verfügbar", - "pt": "Tamanho indisponível" + "pt": "Tamanho indisponível", + "pl": "Rozmiar niedostępny" } }, "send_folder_label": { @@ -2052,7 +2231,8 @@ "es": "Carpeta", "it": "Cartella", "de": "Ordner", - "pt": "Pasta" + "pt": "Pasta", + "pl": "Folder" } }, "send_new_transfer_description": { @@ -2063,7 +2243,8 @@ "es": "Crear una nueva transferencia", "it": "Crea un nuovo trasferimento", "de": "Eine neue Übertragung erstellen", - "pt": "Criar uma nova transferência" + "pt": "Criar uma nova transferência", + "pl": "Utwórz nowy transfer" } }, "send_new_transfer_title": { @@ -2074,7 +2255,8 @@ "es": "Nueva transferencia", "it": "Nuovo trasferimento", "de": "Neue Übertragung", - "pt": "Nova transferência" + "pt": "Nova transferência", + "pl": "Nowy transfer" } }, "send_review_title": { @@ -2085,7 +2267,8 @@ "es": "Revisar transferencia", "it": "Rivedi trasferimento", "de": "Übertragung prüfen", - "pt": "Rever transferência" + "pt": "Rever transferência", + "pl": "Przejrzyj transfer" } }, "send_selected_files_count": { @@ -2102,7 +2285,8 @@ "es": "{count} archivos seleccionados", "it": "{count} file selezionati", "de": "{count} Dateien ausgewählt", - "pt": "{count} ficheiros selecionados" + "pt": "{count} ficheiros selecionados", + "pl": "Wybrane pliki: {count}" } }, "send_stop_sharing": { @@ -2113,7 +2297,8 @@ "es": "Dejar de compartir", "it": "Interrompi condivisione", "de": "Freigabe beenden", - "pt": "Parar de partilhar" + "pt": "Parar de partilhar", + "pl": "Zatrzymaj udostępnianie" } }, "send_stop_sharing_description": { @@ -2124,7 +2309,8 @@ "es": "Esto detiene la transferencia e interrumpe a quien esté descargándola. Permanece en su historial como Detenida.", "it": "Questo interrompe il trasferimento e blocca chiunque lo stia scaricando. Rimane nella sua cronologia come Interrotto.", "de": "Dies beendet die Übertragung und unterbricht alle, die sie gerade herunterladen. Sie verbleibt in Ihrem Verlauf als „Beendet“.", - "pt": "Isto para a transferência e interrompe quem estiver a descarregá-la. Permanece no seu histórico como Parada." + "pt": "Isto para a transferência e interrompe quem estiver a descarregá-la. Permanece no seu histórico como Parada.", + "pl": "To zatrzymuje transfer i przerywa każdego, kto go właśnie pobiera. Pozostaje w historii jako Zatrzymany." } }, "send_subtitle": { @@ -2135,7 +2321,8 @@ "es": "Transferencias que está compartiendo desde este dispositivo.", "it": "Trasferimenti che sta condividendo da questo dispositivo.", "de": "Übertragungen, die Sie von diesem Gerät aus teilen.", - "pt": "Transferências que está a partilhar a partir deste dispositivo." + "pt": "Transferências que está a partilhar a partir deste dispositivo.", + "pl": "Transfery udostępniane z tego urządzenia." } }, "send_title": { @@ -2146,7 +2333,8 @@ "es": "Enviar", "it": "Invia", "de": "Senden", - "pt": "Enviar" + "pt": "Enviar", + "pl": "Wyślij" } }, "send_transfer_created": { @@ -2157,7 +2345,8 @@ "es": "Transferencia creada.", "it": "Trasferimento creato.", "de": "Übertragung erstellt.", - "pt": "Transferência criada." + "pt": "Transferência criada.", + "pl": "Transfer utworzony." } }, "send_transfer_details_title": { @@ -2168,7 +2357,8 @@ "es": "Detalles de la transferencia", "it": "Dettagli del trasferimento", "de": "Übertragungsdetails", - "pt": "Detalhes da transferência" + "pt": "Detalhes da transferência", + "pl": "Szczegóły transferu" } }, "send_transfers_title": { @@ -2179,7 +2369,8 @@ "es": "Sus transferencias", "it": "I suoi trasferimenti", "de": "Ihre Übertragungen", - "pt": "As suas transferências" + "pt": "As suas transferências", + "pl": "Twoje transfery" } }, "settings_subtitle": { @@ -2190,7 +2381,8 @@ "es": "Su nombre, dónde se guardan las transferencias, la apariencia y las notificaciones.", "it": "Il suo nome, dove vengono salvati i trasferimenti, l’aspetto e le notifiche.", "de": "Ihr Name, wo Übertragungen gesichert werden, Darstellung und Mitteilungen.", - "pt": "O seu nome, onde as transferências são guardadas, o aspeto e as notificações." + "pt": "O seu nome, onde as transferências são guardadas, o aspeto e as notificações.", + "pl": "Twoja nazwa, miejsce zapisu transferów, wygląd i powiadomienia." } }, "settings_title": { @@ -2201,7 +2393,8 @@ "es": "Ajustes", "it": "Impostazioni", "de": "Einstellungen", - "pt": "Definições" + "pt": "Definições", + "pl": "Ustawienia" } }, "snackbar_dismiss": { @@ -2212,7 +2405,8 @@ "es": "Descartar", "it": "Ignora", "de": "Ausblenden", - "pt": "Ignorar" + "pt": "Ignorar", + "pl": "Zamknij" } }, "status_available": { @@ -2223,7 +2417,8 @@ "es": "Disponible", "it": "Disponibile", "de": "Verfügbar", - "pt": "Disponível" + "pt": "Disponível", + "pl": "Dostępny" } }, "status_cancelled": { @@ -2234,7 +2429,8 @@ "es": "Cancelado", "it": "Annullato", "de": "Abgebrochen", - "pt": "Cancelado" + "pt": "Cancelado", + "pl": "Anulowany" } }, "status_completed": { @@ -2245,7 +2441,8 @@ "es": "Completado", "it": "Completato", "de": "Abgeschlossen", - "pt": "Concluído" + "pt": "Concluído", + "pl": "Ukończony" } }, "status_failed": { @@ -2256,7 +2453,8 @@ "es": "Fallido", "it": "Non riuscito", "de": "Fehlgeschlagen", - "pt": "Falhou" + "pt": "Falhou", + "pl": "Niepowodzenie" } }, "status_preparing": { @@ -2267,7 +2465,8 @@ "es": "Preparando", "it": "Preparazione", "de": "Wird vorbereitet", - "pt": "A preparar" + "pt": "A preparar", + "pl": "Przygotowywanie" } }, "status_receiving": { @@ -2278,7 +2477,8 @@ "es": "Recibiendo", "it": "Ricezione", "de": "Wird empfangen", - "pt": "A receber" + "pt": "A receber", + "pl": "Odbieranie" } }, "status_stopped": { @@ -2289,7 +2489,8 @@ "es": "Detenido", "it": "Interrotto", "de": "Beendet", - "pt": "Parada" + "pt": "Parada", + "pl": "Zatrzymany" } }, "storage_calculating": { @@ -2300,7 +2501,8 @@ "es": "Calculando…", "it": "Calcolo…", "de": "Wird berechnet…", - "pt": "A calcular…" + "pt": "A calcular…", + "pl": "Obliczanie…" } }, "storage_delete_transfers": { @@ -2311,7 +2513,8 @@ "es": "Eliminar todas las transferencias", "it": "Elimina tutti i trasferimenti", "de": "Alle Übertragungen löschen", - "pt": "Eliminar todas as transferências" + "pt": "Eliminar todas as transferências", + "pl": "Usuń wszystkie transfery" } }, "storage_delete_transfers_description": { @@ -2322,7 +2525,8 @@ "es": "Esto borra todos los registros de transferencias enviadas y recibidas de su historial. Sus archivos recibidos no se eliminan. Nota: el motor de transferencia conserva su contenido almacenado, por lo que los datos de transferencia pueden no disminuir. Esto no se puede deshacer.", "it": "Questo cancella dalla cronologia tutti i record dei trasferimenti inviati e ricevuti. I suoi file ricevuti non vengono eliminati. Nota: il motore di trasferimento conserva il contenuto memorizzato, quindi i dati di trasferimento potrebbero non diminuire. Questa operazione non può essere annullata.", "de": "Dies löscht alle Datensätze gesendeter und empfangener Übertragungen aus Ihrem Verlauf. Ihre empfangenen Dateien werden nicht gelöscht. Hinweis: Die Übertragungs-Engine behält ihre gespeicherten Inhalte, sodass die Übertragungsdaten möglicherweise nicht abnehmen. Dies kann nicht rückgängig gemacht werden.", - "pt": "Isto elimina do seu histórico todos os registos de transferências enviadas e recebidas. Os seus ficheiros recebidos não são eliminados. Nota: o motor de transferência mantém o conteúdo armazenado, pelo que os dados de transferência podem não diminuir. Isto não pode ser anulado." + "pt": "Isto elimina do seu histórico todos os registos de transferências enviadas e recebidas. Os seus ficheiros recebidos não são eliminados. Nota: o motor de transferência mantém o conteúdo armazenado, pelo que os dados de transferência podem não diminuir. Isto não pode ser anulado.", + "pl": "To usuwa z historii wszystkie rekordy wysłanych i odebranych transferów. Twoje odebrane pliki nie są usuwane. Uwaga: silnik transferu zachowuje przechowywaną zawartość, więc dane transferu mogą się nie zmniejszyć. Tej operacji nie można cofnąć." } }, "storage_deleting": { @@ -2333,7 +2537,8 @@ "es": "Eliminando…", "it": "Eliminazione…", "de": "Wird gelöscht…", - "pt": "A eliminar…" + "pt": "A eliminar…", + "pl": "Usuwanie…" } }, "storage_footer": { @@ -2344,7 +2549,8 @@ "es": "Los datos de transferencia los gestiona el motor de transferencia: su historial más el contenido de los archivos que ha compartido. El botón de abajo borra sus registros de transferencias; el motor conserva su contenido almacenado, por lo que este valor puede no bajar. Los archivos recibidos son los archivos que ha descargado y nunca se eliminan aquí.", "it": "I dati di trasferimento sono gestiti dal motore di trasferimento: la sua cronologia più il contenuto dei file che ha condiviso. Il pulsante qui sotto cancella i record dei trasferimenti; il motore conserva il contenuto memorizzato, quindi questo valore potrebbe non diminuire. I file ricevuti sono i file che ha scaricato e non vengono mai eliminati qui.", "de": "Übertragungsdaten werden von der Übertragungs-Engine verwaltet – Ihr Verlauf sowie der Inhalt der von Ihnen geteilten Dateien. Die Schaltfläche unten löscht Ihre Übertragungsdatensätze; die Engine behält ihre gespeicherten Inhalte, sodass dieser Wert möglicherweise nicht sinkt. Empfangene Dateien sind Ihre heruntergeladenen Dateien und werden hier niemals gelöscht.", - "pt": "Os dados de transferência são geridos pelo motor de transferência — o seu histórico mais o conteúdo dos ficheiros que partilhou. O botão abaixo elimina os seus registos de transferências; o motor mantém o conteúdo armazenado, pelo que este valor pode não descer. Os ficheiros recebidos são os ficheiros que descarregou e nunca são eliminados aqui." + "pt": "Os dados de transferência são geridos pelo motor de transferência — o seu histórico mais o conteúdo dos ficheiros que partilhou. O botão abaixo elimina os seus registos de transferências; o motor mantém o conteúdo armazenado, pelo que este valor pode não descer. Os ficheiros recebidos são os ficheiros que descarregou e nunca são eliminados aqui.", + "pl": "Danymi transferu zarządza silnik transferu — Twoja historia oraz zawartość udostępnionych plików. Przycisk poniżej usuwa rekordy transferów; silnik zachowuje przechowywaną zawartość, więc ta wartość może się nie zmniejszyć. Odebrane pliki to Twoje pobrane pliki i nigdy nie są tu usuwane." } }, "storage_received_files": { @@ -2355,7 +2561,8 @@ "es": "Archivos recibidos", "it": "File ricevuti", "de": "Empfangene Dateien", - "pt": "Ficheiros recebidos" + "pt": "Ficheiros recebidos", + "pl": "Odebrane pliki" } }, "storage_temporary": { @@ -2366,7 +2573,8 @@ "es": "Archivos temporales", "it": "File temporanei", "de": "Temporäre Dateien", - "pt": "Ficheiros temporários" + "pt": "Ficheiros temporários", + "pl": "Pliki tymczasowe" } }, "storage_title": { @@ -2377,7 +2585,8 @@ "es": "Almacenamiento", "it": "Archiviazione", "de": "Speicher", - "pt": "Armazenamento" + "pt": "Armazenamento", + "pl": "Pamięć" } }, "storage_total": { @@ -2388,7 +2597,8 @@ "es": "Total", "it": "Totale", "de": "Gesamt", - "pt": "Total" + "pt": "Total", + "pl": "Łącznie" } }, "storage_transfer_data": { @@ -2399,7 +2609,8 @@ "es": "Datos de transferencia", "it": "Dati di trasferimento", "de": "Übertragungsdaten", - "pt": "Dados de transferência" + "pt": "Dados de transferência", + "pl": "Dane transferu" } }, "storage_transfers_deleted": { @@ -2410,7 +2621,8 @@ "es": "Todas las transferencias eliminadas", "it": "Tutti i trasferimenti eliminati", "de": "Alle Übertragungen gelöscht", - "pt": "Todas as transferências eliminadas" + "pt": "Todas as transferências eliminadas", + "pl": "Usunięto wszystkie transfery" } }, "transfer_activity_description": { @@ -2421,7 +2633,8 @@ "es": "Vea las actualizaciones importantes de esta transferencia", "it": "Veda gli aggiornamenti importanti di questo trasferimento", "de": "Wichtige Aktualisierungen zu dieser Übertragung ansehen", - "pt": "Ver as atualizações importantes desta transferência" + "pt": "Ver as atualizações importantes desta transferência", + "pl": "Zobacz ważne aktualizacje tego transferu" } }, "transfer_activity_title": { @@ -2432,7 +2645,8 @@ "es": "Actividad", "it": "Attività", "de": "Aktivität", - "pt": "Atividade" + "pt": "Atividade", + "pl": "Aktywność" } }, "transfer_delete_description": { @@ -2449,7 +2663,8 @@ "es": "«{arg1}» dejará de compartirse y su historial de transferencia se eliminará de este dispositivo.", "it": "«{arg1}» non verrà più condiviso e la sua cronologia di trasferimento verrà rimossa da questo dispositivo.", "de": "„{arg1}“ wird nicht mehr geteilt und sein Übertragungsverlauf wird von diesem Gerät entfernt.", - "pt": "«{arg1}» deixará de ser partilhado e o seu histórico de transferência será removido deste dispositivo." + "pt": "«{arg1}» deixará de ser partilhado e o seu histórico de transferência será removido deste dispositivo.", + "pl": "„{arg1}” przestanie być udostępniany, a jego historia transferu zostanie usunięta z tego urządzenia." } }, "transfer_delete_title": { @@ -2460,7 +2675,8 @@ "es": "¿Eliminar la transferencia?", "it": "Eliminare il trasferimento?", "de": "Übertragung löschen?", - "pt": "Eliminar a transferência?" + "pt": "Eliminar a transferência?", + "pl": "Usunąć transfer?" } }, "transfer_deleted": { @@ -2471,7 +2687,8 @@ "es": "Transferencia eliminada.", "it": "Trasferimento eliminato.", "de": "Übertragung gelöscht.", - "pt": "Transferência eliminada." + "pt": "Transferência eliminada.", + "pl": "Transfer usunięty." } }, "transfer_deleting": { @@ -2482,7 +2699,8 @@ "es": "Eliminando…", "it": "Eliminazione…", "de": "Wird gelöscht…", - "pt": "A eliminar…" + "pt": "A eliminar…", + "pl": "Usuwanie…" } }, "transfer_details_title": { @@ -2493,7 +2711,8 @@ "es": "Detalles de la transferencia", "it": "Dettagli del trasferimento", "de": "Übertragungsdetails", - "pt": "Detalhes da transferência" + "pt": "Detalhes da transferência", + "pl": "Szczegóły transferu" } }, "transfer_event_approved": { @@ -2504,7 +2723,8 @@ "es": "Acceso del destinatario aprobado", "it": "Accesso del destinatario approvato", "de": "Empfängerzugriff genehmigt", - "pt": "Acesso do destinatário aprovado" + "pt": "Acesso do destinatário aprovado", + "pl": "Zatwierdzono dostęp odbiorcy" } }, "transfer_event_completed": { @@ -2515,7 +2735,8 @@ "es": "Un destinatario completó la transferencia", "it": "Un destinatario ha completato il trasferimento", "de": "Ein Empfänger hat die Übertragung abgeschlossen", - "pt": "Um destinatário concluiu a transferência" + "pt": "Um destinatário concluiu a transferência", + "pl": "Odbiorca ukończył transfer" } }, "transfer_event_connecting": { @@ -2526,7 +2747,8 @@ "es": "Conectando con el remitente", "it": "Connessione al mittente", "de": "Verbindung zum Absender", - "pt": "A ligar ao remetente" + "pt": "A ligar ao remetente", + "pl": "Łączenie z nadawcą" } }, "transfer_event_downloading": { @@ -2537,7 +2759,8 @@ "es": "Descargando", "it": "Download", "de": "Wird geladen", - "pt": "A descarregar" + "pt": "A descarregar", + "pl": "Pobieranie" } }, "transfer_event_failed": { @@ -2548,7 +2771,8 @@ "es": "La transferencia tuvo un problema", "it": "Il trasferimento ha riscontrato un problema", "de": "Bei der Übertragung ist ein Problem aufgetreten", - "pt": "A transferência teve um problema" + "pt": "A transferência teve um problema", + "pl": "Podczas transferu wystąpił problem" } }, "transfer_event_preparing": { @@ -2559,7 +2783,8 @@ "es": "Preparando su transferencia", "it": "Preparazione del trasferimento", "de": "Ihre Übertragung wird vorbereitet", - "pt": "A preparar a sua transferência" + "pt": "A preparar a sua transferência", + "pl": "Przygotowywanie transferu" } }, "transfer_event_ready": { @@ -2570,7 +2795,8 @@ "es": "Listo para compartir", "it": "Pronto per la condivisione", "de": "Bereit zum Teilen", - "pt": "Pronto para partilhar" + "pt": "Pronto para partilhar", + "pl": "Gotowe do udostępnienia" } }, "transfer_event_refused": { @@ -2581,7 +2807,8 @@ "es": "Acceso del destinatario rechazado", "it": "Accesso del destinatario rifiutato", "de": "Empfängerzugriff abgelehnt", - "pt": "Acesso do destinatário recusado" + "pt": "Acesso do destinatário recusado", + "pl": "Odrzucono dostęp odbiorcy" } }, "transfer_event_requested": { @@ -2592,7 +2819,8 @@ "es": "Un destinatario solicitó acceso", "it": "Un destinatario ha richiesto l’accesso", "de": "Ein Empfänger hat Zugriff angefragt", - "pt": "Um destinatário pediu acesso" + "pt": "Um destinatário pediu acesso", + "pl": "Odbiorca poprosił o dostęp" } }, "transfer_event_saving": { @@ -2603,7 +2831,8 @@ "es": "Guardando", "it": "Salvataggio", "de": "Wird gesichert", - "pt": "A guardar" + "pt": "A guardar", + "pl": "Zapisywanie" } }, "transfer_event_stopped": { @@ -2614,7 +2843,8 @@ "es": "Se dejó de compartir", "it": "Condivisione interrotta", "de": "Freigabe beendet", - "pt": "Partilha parada" + "pt": "Partilha parada", + "pl": "Zatrzymano udostępnianie" } }, "transfer_event_updated": { @@ -2625,7 +2855,8 @@ "es": "Transferencia actualizada", "it": "Trasferimento aggiornato", "de": "Übertragung aktualisiert", - "pt": "Transferência atualizada" + "pt": "Transferência atualizada", + "pl": "Transfer zaktualizowany" } }, "transfer_file_count": { @@ -2660,6 +2891,12 @@ "pt": { "one": "{count} ficheiro", "other": "{count} ficheiros" + }, + "pl": { + "one": "{count} plik", + "few": "{count} pliki", + "many": "{count} plików", + "other": "{count} pliku" } } }, @@ -2671,7 +2908,8 @@ "es": "Invitación guardada.", "it": "Invito salvato.", "de": "Einladung gesichert.", - "pt": "Convite guardado." + "pt": "Convite guardado.", + "pl": "Zaproszenie zapisane." } }, "transfer_nearby_device": { @@ -2682,7 +2920,8 @@ "es": "Dispositivo cercano", "it": "Dispositivo nelle vicinanze", "de": "Gerät in der Nähe", - "pt": "Dispositivo próximo" + "pt": "Dispositivo próximo", + "pl": "Urządzenie w pobliżu" } }, "transfer_nfc_unavailable": { @@ -2693,7 +2932,8 @@ "es": "La escritura de etiquetas NFC no está disponible en este dispositivo.", "it": "La scrittura dei tag NFC non è disponibile su questo dispositivo.", "de": "Das Beschreiben von NFC-Tags ist auf diesem Gerät nicht verfügbar.", - "pt": "A escrita de etiquetas NFC não está disponível neste dispositivo." + "pt": "A escrita de etiquetas NFC não está disponível neste dispositivo.", + "pl": "Zapis tagów NFC nie jest dostępny na tym urządzeniu." } }, "transfer_nfc_waiting": { @@ -2704,7 +2944,8 @@ "es": "Acerque su dispositivo a una etiqueta NFC grabable.", "it": "Avvicini il dispositivo a un tag NFC scrivibile.", "de": "Halten Sie Ihr Gerät an ein beschreibbares NFC-Tag.", - "pt": "Aproxime o seu dispositivo de uma etiqueta NFC gravável." + "pt": "Aproxime o seu dispositivo de uma etiqueta NFC gravável.", + "pl": "Zbliż urządzenie do zapisywalnego tagu NFC." } }, "transfer_nfc_written": { @@ -2715,7 +2956,8 @@ "es": "Invitación escrita en la etiqueta NFC.", "it": "Invito scritto sul tag NFC.", "de": "Einladung auf das NFC-Tag geschrieben.", - "pt": "Convite escrito na etiqueta NFC." + "pt": "Convite escrito na etiqueta NFC.", + "pl": "Zaproszenie zapisane na tagu NFC." } }, "transfer_no_activity": { @@ -2726,7 +2968,8 @@ "es": "Todavía no hay actividad que mostrar.", "it": "Non c’è ancora alcuna attività da mostrare.", "de": "Es gibt noch keine Aktivität anzuzeigen.", - "pt": "Ainda não há atividade para mostrar." + "pt": "Ainda não há atividade para mostrar.", + "pl": "Nie ma jeszcze aktywności do wyświetlenia." } }, "transfer_no_receivers": { @@ -2737,7 +2980,8 @@ "es": "Nadie ha solicitado aún esta transferencia.", "it": "Nessuno ha ancora richiesto questo trasferimento.", "de": "Noch niemand hat diese Übertragung angefragt.", - "pt": "Ainda ninguém pediu esta transferência." + "pt": "Ainda ninguém pediu esta transferência.", + "pl": "Nikt jeszcze nie poprosił o ten transfer." } }, "transfer_receiver_accepted": { @@ -2748,7 +2992,8 @@ "es": "Aprobado: esperando a que se complete", "it": "Approvato: in attesa del completamento", "de": "Genehmigt – wartet auf Abschluss", - "pt": "Aprovado — a aguardar conclusão" + "pt": "Aprovado — a aguardar conclusão", + "pl": "Zatwierdzono — oczekiwanie na ukończenie" } }, "transfer_receiver_completed": { @@ -2759,7 +3004,8 @@ "es": "Recibido correctamente", "it": "Ricevuto correttamente", "de": "Erfolgreich empfangen", - "pt": "Recebido com sucesso" + "pt": "Recebido com sucesso", + "pl": "Odebrano pomyślnie" } }, "transfer_receiver_expired": { @@ -2770,7 +3016,8 @@ "es": "Solicitud caducada", "it": "Richiesta scaduta", "de": "Anfrage abgelaufen", - "pt": "Pedido expirado" + "pt": "Pedido expirado", + "pl": "Prośba wygasła" } }, "transfer_receiver_refused": { @@ -2781,7 +3028,8 @@ "es": "Solicitud rechazada", "it": "Richiesta rifiutata", "de": "Anfrage abgelehnt", - "pt": "Pedido recusado" + "pt": "Pedido recusado", + "pl": "Prośba odrzucona" } }, "transfer_receiver_requested": { @@ -2792,7 +3040,8 @@ "es": "Esperando su aprobación", "it": "In attesa della sua approvazione", "de": "Wartet auf Ihre Genehmigung", - "pt": "A aguardar a sua aprovação" + "pt": "A aguardar a sua aprovação", + "pl": "Oczekiwanie na Twoje zatwierdzenie" } }, "transfer_receiver_unknown": { @@ -2803,7 +3052,8 @@ "es": "Estado no disponible", "it": "Stato non disponibile", "de": "Status nicht verfügbar", - "pt": "Estado indisponível" + "pt": "Estado indisponível", + "pl": "Status niedostępny" } }, "transfer_receivers_completed_count": { @@ -2820,7 +3070,8 @@ "es": "{count} completados", "it": "{count} completati", "de": "{count} abgeschlossen", - "pt": "{count} concluídos" + "pt": "{count} concluídos", + "pl": "Ukończone: {count}" } }, "transfer_receivers_description": { @@ -2831,7 +3082,8 @@ "es": "Solicitudes, aprobaciones y entregas completadas", "it": "Richieste, approvazioni e consegne completate", "de": "Anfragen, Genehmigungen und abgeschlossene Zustellungen", - "pt": "Pedidos, aprovações e entregas concluídas" + "pt": "Pedidos, aprovações e entregas concluídas", + "pl": "Prośby, zatwierdzenia i ukończone dostawy" } }, "transfer_receivers_pending": { @@ -2848,7 +3100,8 @@ "es": "{count} en espera", "it": "{count} in attesa", "de": "{count} warten", - "pt": "{count} em espera" + "pt": "{count} em espera", + "pl": "Oczekujące: {count}" } }, "transfer_receivers_title": { @@ -2859,7 +3112,8 @@ "es": "Destinatarios", "it": "Destinatari", "de": "Empfänger", - "pt": "Destinatários" + "pt": "Destinatários", + "pl": "Odbiorcy" } }, "transfer_scan_qr": { @@ -2870,7 +3124,8 @@ "es": "Escanee con VniDrop para recibir esta transferencia", "it": "Scansioni con VniDrop per ricevere questo trasferimento", "de": "Mit VniDrop scannen, um diese Übertragung zu empfangen", - "pt": "Leia com o VniDrop para receber esta transferência" + "pt": "Leia com o VniDrop para receber esta transferência", + "pl": "Zeskanuj za pomocą VniDrop, aby odebrać ten transfer" } }, "transfer_share_description": { @@ -2881,7 +3136,8 @@ "es": "Código QR, archivo de invitación y opciones cercanas", "it": "Codice QR, file di invito e opzioni nelle vicinanze", "de": "QR-Code, Einladungsdatei und Optionen in der Nähe", - "pt": "Código QR, ficheiro de convite e opções por perto" + "pt": "Código QR, ficheiro de convite e opções por perto", + "pl": "Kod QR, plik zaproszenia i opcje w pobliżu" } }, "transfer_share_title": { @@ -2892,7 +3148,8 @@ "es": "Compartir", "it": "Condividi", "de": "Teilen", - "pt": "Partilhar" + "pt": "Partilhar", + "pl": "Udostępnij" } }, "value_unavailable": { @@ -2903,7 +3160,8 @@ "es": "No disponible", "it": "Non disponibile", "de": "Nicht verfügbar", - "pt": "Indisponível" + "pt": "Indisponível", + "pl": "Niedostępne" } }, "version_title": { @@ -2914,7 +3172,8 @@ "es": "Versión de la app", "it": "Versione dell’app", "de": "App-Version", - "pt": "Versão da app" + "pt": "Versão da app", + "pl": "Wersja aplikacji" } } } diff --git a/shared/src/commonMain/composeResources/values-pl/strings.xml b/shared/src/commonMain/composeResources/values-pl/strings.xml new file mode 100644 index 0000000..15a5f00 --- /dev/null +++ b/shared/src/commonMain/composeResources/values-pl/strings.xml @@ -0,0 +1,259 @@ + + + Zgłoś błąd + VniDrop przesyła pliki i foldery bezpośrednio z jednego urządzenia na drugie przez sieć, bez przesyłania ich do jakiejkolwiek usługi hostingowej. Nie trzeba zakładać konta, a po zakończeniu żadna kopia transferu nie pozostaje w chmurze. + Bezpośredni transfer między urządzeniami — pliki trafiają prosto do odbiorcy. + Połączenia są uwierzytelniane i szyfrowane od końca do końca (przez Iroh), a przychodzące pliki są weryfikowane na podstawie skrótu ich zawartości. + To Ty decydujesz, kto otrzymuje: zatwierdź każde żądanie lub udostępnij transfer każdemu, kto ma zaproszenie. + Bez konta — nie trzeba się rejestrować. + Otwarte oprogramowanie, wydane na licencji Apache 2.0. + Czym jest VniDrop + To nie magazyn w chmurze — żaden serwer nie przechowuje Twoich plików i nic nie pozostaje w chmurze po transferze. + To nie publiczne rozgłaszanie — zaproszenie to prywatny link dostępu, a nie ogłoszenie dla wszystkich w pobliżu. + To nie usługa synchronizacji ani kopii zapasowej. + Czym VniDrop nie jest + Licencja + Polityka prywatności + Zaproszenia są kluczami dostępu. Traktuj kod QR, tag NFC lub plik .vnd jak prywatny link dostępu i udostępniaj go tylko zamierzonym osobom — zwłaszcza przy opcji „Każdy, kto ma ten transfer”. + Domyślnie odmowa — VniDrop udostępnia tylko zawartość aktywnego udostępnienia i odrzuca nieznane żądania. + Odebrane pliki są zapisywane na Twoim urządzeniu i nigdy nie nadpisują istniejącego pliku. + Polityka prywatności + Jeśli dwa urządzenia nie mogą połączyć się bezpośrednio, szyfrowane połączenie może być przekazywane przez przekaźnik. Przekaźniki przekazują tylko zaszyfrowane pakiety; nigdy nie przechowują Twoich plików. + Prywatność i bezpieczeństwo + Wysyłaj pliki bezpośrednio. Zachowaj kontrolę nad tym, kto je otrzymuje. + Informacje + Dopasuj do jasnego lub ciemnego wyglądu tego urządzenia. + Tryb ciemny + Tryb jasny + System + Wygląd + Prośba o odbiór + Identyfikator urządzenia: %1$s + Urządzenie w pobliżu + Oczekujące prośby: %1$d + %1$s chce odebrać „%2$s”. + Poziom baterii + nazwa@przyklad.com + E-mail kontaktowy (opcjonalnie) + Napisz, co poszło nie tak. Dołączamy informacje o urządzeniu i opcjonalnie ostatnie dzienniki (z ukrytymi wrażliwymi wartościami). + Informacje o urządzeniu + Opisz oczekiwane zachowanie + Czego oczekiwano? + Dołącz ostatnie dzienniki + Pomaga nam zdiagnozować problem. Wrażliwe wartości są ukrywane przed wysłaniem. + Rozmiar załącznika z dziennikami + Opisz oczekiwane zachowanie. + Opisz, co się stało. + Wymień kroki umożliwiające odtworzenie problemu + Kroki do odtworzenia (opcjonalnie) + Wyślij zgłoszenie + Nie udało się wysłać zgłoszenia błędu. Spróbuj ponownie później. + Dziękujemy — Twoje zgłoszenie błędu zostało zapisane. + Wysyłanie… + Opisz, co się stało + Co się stało? + Zatwierdź + Wstecz + Anuluj + Anuluj + Zmień pliki + Wybierz pliki + Wybierz folder + Wyczyść + Zamknij + Nowy transfer + Usuń transfer + Zapisz plik .vnd + Udostępnij zaproszenie + Otwórz Ustawienia + Odbierz + Rozpocznij odbieranie + Odrzuć + Usuń plik + Użyj domyślnego + Spróbuj ponownie + Rozpocznij udostępnianie + Przygotowywanie transferu… + Pokaż w Plikach + Zapisz na tagu NFC + Model urządzenia + Nazwa urządzenia + Wysyłaj anonimowe raporty o awariach i zdarzenia użytkowania, aby pomóc nam ulepszać VniDrop. Możesz to wyłączyć w dowolnej chwili. Zaproszenia, ścieżki plików i zawartość transferów nigdy nie są dołączane. + Udostępnianie diagnostyki jest wyłączone. + Udostępnianie diagnostyki jest włączone. + Udostępniaj diagnostykę + Do zeskanowania kodu QR wymagany jest dostęp do aparatu. + Nie udało się wczytać informacji o urządzeniu. + VniDrop nie mógł uzyskać dostępu do wybranych plików lub folderu. Sprawdź uprawnienia i spróbuj ponownie. + Coś poszło nie tak. Spróbuj ponownie. + VniDrop nie mógł dokończyć uruchamiania. Zamknij aplikację i spróbuj ponownie. + Nie udało się odczytać tego zaproszenia. Poproś nadawcę o nowe. + To zaproszenie jest puste. Spróbuj otworzyć je ponownie. + W tej kompilacji brakuje natywnej biblioteki VniDrop. + Nie udało się użyć tego tagu NFC. Spróbuj innego. + Nadawca nie zatwierdził tego transferu lub został on odrzucony. + VniDrop nie mógł zapisać danych transferu na tym urządzeniu. + Nie udało się otworzyć wybranego elementu. Spróbuj wybrać go ponownie. + Wybierz co najmniej jeden element do udostępnienia. + VniDrop nie mógł otworzyć gniazd sieciowych na tym urządzeniu. + VniDrop jeszcze się uruchamia. Otwórz zaproszenie ponownie za chwilę. + Nie udało się ukończyć transferu. Sprawdź połączenie i spróbuj ponownie. + Nazwa odbiorcy + Nazwa nadawcy + Nazwa transferu + Nazwa wyświetlana + Wymagane uprawnienie + Niedostępny + Sprawdzanie folderu… + Gotowy + Pliki + Rozmiar + Status + Odbierz + Wyślij + Ustawienia + Sieć + Otrzymuj powiadomienia o nowych prośbach o odbiór, gdy VniDrop działa w tle. + Powiadomienia włączone. + Zezwól na powiadomienia + Powiadomienia są wyłączone dla VniDrop. Możesz je włączyć w Ustawieniach. + Nie udało się otworzyć ustawień powiadomień. + Powiadomienia + Powiadomienia nie są dostępne na tym urządzeniu. + System operacyjny + Zapisuj odebrane transfery w + Preferencje + Anulowano + Ukończono + Połączono + Łączenie + Pobieranie + Niepowodzenie + Przygotowywanie + Transfer przerwany + Przygotowywanie + Gotowe + Odbieranie + Prośba o dostęp + Zapisywanie + Wysyłanie + Wysyłanie do %1$d + Gotowe do udostępnienia + Przetwarzanie… + Wybierz dostępną metodę zaproszenia. + Jak chcesz się połączyć? + Wyczyść historię + Wszystkie ukończone, nieudane i anulowane odbiory zostaną usunięte z historii VniDrop. Pobrane pliki pozostaną na tym urządzeniu. + Wyczyścić historię odbioru? + Transfer odebrany. + „%1$s” zostanie usunięty z historii VniDrop. Pobrany plik pozostanie na tym urządzeniu. + Usuń z historii odbioru + Usunąć z historii? + Otwórz zaproszenie VniDrop, zeskanuj kod QR lub zbliż tag NFC. + Nic jeszcze nie odebrano + Historia odbioru wyczyszczona. + Historia + Otwórz zaproszenie .vnd + Wybierz zaproszenie zapisane lub udostępnione na tym urządzeniu. + Odczytaj tag NFC + Zbliż to urządzenie do tagu zaproszenia nadawcy. + Zeskanuj kod QR + Użyj aparatu, aby zeskanować kod VniDrop nadawcy. + Transfery odebrane na tym urządzeniu. + Zbliż do tagu NFC… + Nie udało się otworzyć VniDrop w Plikach. + Przejrzyj transfer + Odbierz + Transfer VniDrop + Każdy, kto ma ten transfer + Nie jest wymagane zatwierdzenie. Używaj tylko dla elementów, które możesz swobodnie udostępniać. + Każdy, kto ma zaproszenie, może pobierać, dopóki nie zatrzymasz udostępniania. Nie używaj tego dla prywatnych ani wrażliwych elementów. + Pytaj przed każdym pobraniem + Zatwierdzasz lub odrzucasz każdego nowego odbiorcę. + Kto może to odebrać? + Wybierz pliki lub folder z tego urządzenia. Przed utworzeniem transferu możesz przejrzeć wybór. + Wybierz, co udostępnić + Utwórz transfer, zdecyduj, kto może go odebrać, a następnie zaproś te osoby za pomocą kodu QR, tagu NFC lub pliku zaproszenia. + Nic jeszcze nie udostępniono + Rozmiar niedostępny + Folder + Utwórz nowy transfer + Nowy transfer + Przejrzyj transfer + Wybrane pliki: %1$d + Zatrzymaj udostępnianie + To zatrzymuje transfer i przerywa każdego, kto go właśnie pobiera. Pozostaje w historii jako Zatrzymany. + Transfery udostępniane z tego urządzenia. + Wyślij + Transfer utworzony. + Szczegóły transferu + Twoje transfery + Twoja nazwa, miejsce zapisu transferów, wygląd i powiadomienia. + Ustawienia + Zamknij + Dostępny + Anulowany + Ukończony + Niepowodzenie + Przygotowywanie + Odbieranie + Zatrzymany + Obliczanie… + Usuń wszystkie transfery + To usuwa z historii wszystkie rekordy wysłanych i odebranych transferów. Twoje odebrane pliki nie są usuwane. Uwaga: silnik transferu zachowuje przechowywaną zawartość, więc dane transferu mogą się nie zmniejszyć. Tej operacji nie można cofnąć. + Usuwanie… + Danymi transferu zarządza silnik transferu — Twoja historia oraz zawartość udostępnionych plików. Przycisk poniżej usuwa rekordy transferów; silnik zachowuje przechowywaną zawartość, więc ta wartość może się nie zmniejszyć. Odebrane pliki to Twoje pobrane pliki i nigdy nie są tu usuwane. + Odebrane pliki + Pliki tymczasowe + Pamięć + Łącznie + Dane transferu + Usunięto wszystkie transfery + Zobacz ważne aktualizacje tego transferu + Aktywność + „%1$s” przestanie być udostępniany, a jego historia transferu zostanie usunięta z tego urządzenia. + Usunąć transfer? + Transfer usunięty. + Usuwanie… + Szczegóły transferu + Zatwierdzono dostęp odbiorcy + Odbiorca ukończył transfer + Łączenie z nadawcą + Pobieranie + Podczas transferu wystąpił problem + Przygotowywanie transferu + Gotowe do udostępnienia + Odrzucono dostęp odbiorcy + Odbiorca poprosił o dostęp + Zapisywanie + Zatrzymano udostępnianie + Transfer zaktualizowany + Zaproszenie zapisane. + Urządzenie w pobliżu + Zapis tagów NFC nie jest dostępny na tym urządzeniu. + Zbliż urządzenie do zapisywalnego tagu NFC. + Zaproszenie zapisane na tagu NFC. + Nie ma jeszcze aktywności do wyświetlenia. + Nikt jeszcze nie poprosił o ten transfer. + Zatwierdzono — oczekiwanie na ukończenie + Odebrano pomyślnie + Prośba wygasła + Prośba odrzucona + Oczekiwanie na Twoje zatwierdzenie + Status niedostępny + Ukończone: %1$d + Prośby, zatwierdzenia i ukończone dostawy + Oczekujące: %1$d + Odbiorcy + Zeskanuj za pomocą VniDrop, aby odebrać ten transfer + Kod QR, plik zaproszenia i opcje w pobliżu + Udostępnij + Niedostępne + Wersja aplikacji + + %1$d plik + %1$d pliki + %1$d plików + %1$d pliku + + From 0efde724148d170f558fe87ef266dcc68c44afde Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 20 Jul 2026 11:34:21 +0200 Subject: [PATCH 11/13] feat(l10n): add Dutch translations Translate all 253 user-facing strings to Dutch (formal "u"), including the transfer_file_count plural. Generates values-nl/strings.xml for KMP, nl localizations in the Apple catalog, and adds nl to CFBundleLocalizations. --- apple/VniDrop/Resources/Info.plist | 1 + apple/VniDrop/Resources/Localizable.xcstrings | 1530 +++++++++++++++++ localization/strings.json | 763 +++++--- .../composeResources/values-nl/strings.xml | 257 +++ 4 files changed, 2298 insertions(+), 253 deletions(-) create mode 100644 shared/src/commonMain/composeResources/values-nl/strings.xml diff --git a/apple/VniDrop/Resources/Info.plist b/apple/VniDrop/Resources/Info.plist index 1620e9e..0075cbc 100644 --- a/apple/VniDrop/Resources/Info.plist +++ b/apple/VniDrop/Resources/Info.plist @@ -11,6 +11,7 @@ de pt pl + nl CADisableMinimumFrameDurationOnPhone diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index 5e2eb44..dc8f18f 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -39,6 +39,12 @@ "value": "%1$@ %2$@ · %3$@" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -87,6 +93,12 @@ "value": "%1$@ · %2$@" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -139,6 +151,12 @@ "value": "Segnala un bug" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Een fout melden" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -187,6 +205,12 @@ "value": "VniDrop trasferisce file e cartelle direttamente da un dispositivo a un altro sulla rete, senza caricarli su alcun servizio di hosting. Non c’è alcun account da creare e nessuna copia del suo trasferimento rimane nel cloud una volta terminato." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop verplaatst bestanden en mappen rechtstreeks van het ene apparaat naar het andere via het netwerk, zonder ze naar een hostingdienst te uploaden. U hoeft geen account aan te maken en er blijft geen kopie van uw overdracht in de cloud achter zodra u klaar bent." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -235,6 +259,12 @@ "value": "Un trasferimento diretto da dispositivo a dispositivo: i suoi file vanno direttamente al destinatario." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Een directe overdracht van apparaat naar apparaat — uw bestanden gaan rechtstreeks naar de ontvanger." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -283,6 +313,12 @@ "value": "Le connessioni sono autenticate e cifrate end-to-end (tramite Iroh) e i file in arrivo vengono verificati tramite l’impronta del loro contenuto." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verbindingen zijn geverifieerd en end-to-end versleuteld (via Iroh), en binnenkomende bestanden worden gecontroleerd aan de hand van hun inhouds-hash." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -331,6 +367,12 @@ "value": "Lei decide chi riceve: approvi ogni richiesta oppure apra un trasferimento a chiunque disponga dell’invito." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "U bepaalt wie ontvangt: keur elk verzoek goed, of stel een overdracht open voor iedereen met de uitnodiging." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -379,6 +421,12 @@ "value": "Senza account: non c’è nulla da registrare." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Zonder account — er is niets om aan te melden." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -427,6 +475,12 @@ "value": "Open source, rilasciato con licenza Apache 2.0." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Opensource, uitgebracht onder de Apache 2.0-licentie." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -475,6 +529,12 @@ "value": "Cos’è VniDrop" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wat VniDrop is" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -523,6 +583,12 @@ "value": "Non è un’archiviazione cloud: nessun server conserva i suoi file e nulla resta nel cloud dopo un trasferimento." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Geen cloudopslag — geen enkele server bewaart uw bestanden en er wacht niets in de cloud na een overdracht." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -571,6 +637,12 @@ "value": "Non è una diffusione pubblica: un invito è un link di accesso privato, non un annuncio a tutti nelle vicinanze." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Geen openbare uitzending — een uitnodiging is een privétoegangslink, geen aankondiging aan iedereen in de buurt." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -619,6 +691,12 @@ "value": "Non è un servizio di sincronizzazione o di backup." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Geen synchronisatie- of back-updienst." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -667,6 +745,12 @@ "value": "Cosa non è VniDrop" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wat VniDrop niet is" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -715,6 +799,12 @@ "value": "Licenza" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Licentie" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -763,6 +853,12 @@ "value": "Informativa sulla privacy" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Privacybeleid" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -811,6 +907,12 @@ "value": "Gli inviti sono chiavi di accesso. Tratti un codice QR, un tag NFC o un file .vnd come un link di accesso privato e lo condivida solo con le persone previste, soprattutto con «Chiunque abbia questo trasferimento»." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uitnodigingen zijn toegangssleutels. Behandel een QR-code, NFC-tag of .vnd-bestand als een privétoegangslink en deel deze alleen met de bedoelde personen — vooral bij ‘Iedereen met deze overdracht’." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -859,6 +961,12 @@ "value": "Rifiuto predefinito: VniDrop serve solo il contenuto di una condivisione attiva e rifiuta le richieste sconosciute." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Standaard weigeren — VniDrop levert alleen de inhoud van een actieve deling en wijst onbekende verzoeken af." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -907,6 +1015,12 @@ "value": "I file ricevuti vengono salvati sul suo dispositivo e non sovrascrivono mai un file esistente." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen bestanden worden op uw apparaat bewaard en overschrijven nooit een bestaand bestand." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -955,6 +1069,12 @@ "value": "Informativa sulla privacy" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Privacybeleid" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1003,6 +1123,12 @@ "value": "Se due dispositivi non riescono a connettersi direttamente, la connessione cifrata può essere instradata tramite relay. I relay inoltrano solo pacchetti cifrati; non memorizzano mai i suoi file." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Als twee apparaten niet rechtstreeks verbinding kunnen maken, kan de versleutelde verbinding via een relay worden doorgestuurd. Relays sturen alleen versleutelde pakketten door; ze slaan uw bestanden nooit op." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1051,6 +1177,12 @@ "value": "Privacy e sicurezza" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Privacy en beveiliging" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1099,6 +1231,12 @@ "value": "Invii file direttamente. Mantenga il controllo su chi li riceve." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verstuur bestanden rechtstreeks. Houd controle over wie ze ontvangt." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1147,6 +1285,12 @@ "value": "Informazioni" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Over" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1195,6 +1339,12 @@ "value": "Segue l’aspetto chiaro o scuro di questo dispositivo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "De lichte of donkere weergave van dit apparaat volgen." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1243,6 +1393,12 @@ "value": "Modalità scura" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Donkere modus" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1291,6 +1447,12 @@ "value": "Modalità chiara" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Lichte modus" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1339,6 +1501,12 @@ "value": "Sistema" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Systeem" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1387,6 +1555,12 @@ "value": "Aspetto" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Weergave" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1435,6 +1609,12 @@ "value": "Richiesta di ricezione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangstverzoek" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1483,6 +1663,12 @@ "value": "ID dispositivo: %1$@" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Apparaat-ID: %1$@" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1531,6 +1717,12 @@ "value": "Un dispositivo nelle vicinanze" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Een apparaat in de buurt" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1579,6 +1771,12 @@ "value": "%1$d richieste in attesa" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d verzoeken in behandeling" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1627,6 +1825,12 @@ "value": "%1$@ vuole ricevere «%2$@»." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ wil ‘%2$@’ ontvangen." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1675,6 +1879,12 @@ "value": "Livello batteria" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Batterijniveau" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1723,6 +1933,12 @@ "value": "nome@esempio.com" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "naam@voorbeeld.com" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1771,6 +1987,12 @@ "value": "Email di contatto (facoltativa)" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Contact-e-mail (optioneel)" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1819,6 +2041,12 @@ "value": "Ci dica cosa è andato storto. Alleghiamo le informazioni sul dispositivo e, facoltativamente, i log recenti (con i valori sensibili oscurati)." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Vertel ons wat er misging. We voegen apparaatgegevens toe en optioneel recente logbestanden (met gevoelige waarden onleesbaar gemaakt)." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1867,6 +2095,12 @@ "value": "Informazioni sul dispositivo" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Apparaatgegevens" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1915,6 +2149,12 @@ "value": "Descriva cosa si aspettava che accadesse" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Beschrijf wat u verwachtte" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -1963,6 +2203,12 @@ "value": "Cosa si aspettava?" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wat verwachtte u?" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2011,6 +2257,12 @@ "value": "Includi i log recenti" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Recente logbestanden meesturen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2059,6 +2311,12 @@ "value": "Ci aiuta a diagnosticare il problema. I valori sensibili vengono oscurati prima dell’invio." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Helpt ons het probleem te diagnosticeren. Gevoelige waarden worden vóór verzending onleesbaar gemaakt." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2107,6 +2365,12 @@ "value": "Dimensione dell’allegato dei log" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Grootte van logbijlage" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2155,6 +2419,12 @@ "value": "Descriva cosa si aspettava." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Beschrijf wat u verwachtte." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2203,6 +2473,12 @@ "value": "Descriva cosa è accaduto." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Beschrijf wat er gebeurde." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2251,6 +2527,12 @@ "value": "Elenchi i passaggi per riprodurre il problema" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Noem de stappen om het probleem te reproduceren" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2299,6 +2581,12 @@ "value": "Passaggi per riprodurre (facoltativi)" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Stappen om te reproduceren (optioneel)" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2347,6 +2635,12 @@ "value": "Invia segnalazione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Rapport versturen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2395,6 +2689,12 @@ "value": "Impossibile inviare la segnalazione. Riprovi più tardi." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Het foutrapport kon niet worden verstuurd. Probeer het later opnieuw." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2443,6 +2743,12 @@ "value": "Grazie: la sua segnalazione è stata registrata." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bedankt — uw foutrapport is vastgelegd." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2491,6 +2797,12 @@ "value": "Invio in corso…" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bezig met versturen…" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2539,6 +2851,12 @@ "value": "Descriva cosa è accaduto" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Beschrijf wat er gebeurde" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2587,6 +2905,12 @@ "value": "Cosa è accaduto?" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wat is er gebeurd?" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2635,6 +2959,12 @@ "value": "Approva" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Goedkeuren" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2683,6 +3013,12 @@ "value": "Indietro" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Terug" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2731,6 +3067,12 @@ "value": "Annulla" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Annuleren" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2779,6 +3121,12 @@ "value": "Annulla" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Annuleren" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2827,6 +3175,12 @@ "value": "Cambia file" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bestanden wijzigen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2875,6 +3229,12 @@ "value": "Scegli file" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bestanden kiezen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2923,6 +3283,12 @@ "value": "Scegli cartella" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Map kiezen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -2971,6 +3337,12 @@ "value": "Cancella" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wissen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3019,6 +3391,12 @@ "value": "Chiudi" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Sluiten" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3067,6 +3445,12 @@ "value": "Nuovo trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Nieuwe overdracht" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3115,6 +3499,12 @@ "value": "Elimina trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht verwijderen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3163,6 +3553,12 @@ "value": "Salva file .vnd" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": ".vnd-bestand bewaren" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3211,6 +3607,12 @@ "value": "Condividi invito" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uitnodiging delen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3259,6 +3661,12 @@ "value": "Apri Impostazioni" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Instellingen openen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3307,6 +3715,12 @@ "value": "Ricevi" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3355,6 +3769,12 @@ "value": "Inizia a ricevere" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen starten" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3403,6 +3823,12 @@ "value": "Rifiuta" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Weigeren" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3451,6 +3877,12 @@ "value": "Rimuovi file" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bestand verwijderen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3499,6 +3931,12 @@ "value": "Usa predefinito" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Standaard gebruiken" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3547,6 +3985,12 @@ "value": "Riprova" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Opnieuw proberen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3595,6 +4039,12 @@ "value": "Inizia a condividere" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Delen starten" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3643,6 +4093,12 @@ "value": "Preparazione del trasferimento…" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht voorbereiden…" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3691,6 +4147,12 @@ "value": "Mostra in File" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Toon in Bestanden" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3739,6 +4201,12 @@ "value": "Scrivi su tag NFC" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Naar NFC-tag schrijven" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3787,6 +4255,12 @@ "value": "Modello del dispositivo" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Apparaatmodel" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3835,6 +4309,12 @@ "value": "Nome del dispositivo" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Apparaatnaam" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3883,6 +4363,12 @@ "value": "Invia report di arresto anomalo ed eventi d’uso anonimi per aiutarci a migliorare VniDrop. Può disattivarlo in qualsiasi momento. Inviti, percorsi dei file e contenuti dei trasferimenti non vengono mai inclusi." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verstuur anonieme crashrapporten en gebruiksgebeurtenissen zodat we VniDrop kunnen verbeteren. U kunt dit op elk moment uitschakelen. Uitnodigingen, bestandspaden en overdrachtsinhoud worden nooit meegestuurd." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3931,6 +4417,12 @@ "value": "La condivisione dei dati diagnostici è disattivata." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Het delen van diagnostische gegevens is uitgeschakeld." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -3979,6 +4471,12 @@ "value": "La condivisione dei dati diagnostici è attivata." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Het delen van diagnostische gegevens is ingeschakeld." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4027,6 +4525,12 @@ "value": "Condividi dati diagnostici" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Diagnostische gegevens delen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4075,6 +4579,12 @@ "value": "Per scansionare un codice QR è necessario l’accesso alla fotocamera." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Voor het scannen van een QR-code is toegang tot de camera vereist." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4123,6 +4633,12 @@ "value": "Impossibile caricare le informazioni sul dispositivo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Apparaatgegevens konden niet worden geladen." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4171,6 +4687,12 @@ "value": "VniDrop non ha potuto accedere ai file o alla cartella selezionati. Controlli le autorizzazioni e riprovi." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop kon geen toegang krijgen tot de geselecteerde bestanden of map. Controleer de machtigingen en probeer het opnieuw." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4219,6 +4741,12 @@ "value": "Qualcosa è andato storto. Riprovi." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Er is iets misgegaan. Probeer het opnieuw." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4267,6 +4795,12 @@ "value": "VniDrop non ha potuto completare l’avvio. Chiuda l’app e riprovi." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop kon het opstarten niet voltooien. Sluit de app en probeer het opnieuw." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4315,6 +4849,12 @@ "value": "Impossibile leggere questo invito. Ne chieda uno nuovo al mittente." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Deze uitnodiging kon niet worden gelezen. Vraag de afzender om een nieuwe." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4363,6 +4903,12 @@ "value": "Questo invito è vuoto. Provi ad aprirlo di nuovo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Die uitnodiging is leeg. Probeer deze opnieuw te openen." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4411,6 +4957,12 @@ "value": "La libreria nativa di VniDrop non è presente in questa build." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "De native VniDrop-bibliotheek ontbreekt in deze build." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4459,6 +5011,12 @@ "value": "Impossibile usare questo tag NFC. Ne provi un altro." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Deze NFC-tag kon niet worden gebruikt. Probeer een andere." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4507,6 +5065,12 @@ "value": "Il mittente non ha approvato questo trasferimento, oppure è stato rifiutato." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "De afzender heeft deze overdracht niet goedgekeurd, of deze is geweigerd." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4555,6 +5119,12 @@ "value": "VniDrop non ha potuto salvare i dati del trasferimento su questo dispositivo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop kon de overdrachtsgegevens niet op dit apparaat bewaren." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4603,6 +5173,12 @@ "value": "Impossibile aprire l’elemento selezionato. Provi a sceglierlo di nuovo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Het geselecteerde item kon niet worden geopend. Probeer het opnieuw te kiezen." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4651,6 +5227,12 @@ "value": "Selezioni almeno un elemento da condividere." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Selecteer minstens één item om te delen." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4699,6 +5281,12 @@ "value": "VniDrop non ha potuto aprire i suoi socket di rete su questo dispositivo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop kon zijn netwerksockets niet openen op dit apparaat." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4747,6 +5335,12 @@ "value": "VniDrop è ancora in fase di avvio. Riapra l’invito tra un momento." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop is nog aan het opstarten. Open de uitnodiging zo meteen opnieuw." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4795,6 +5389,12 @@ "value": "Impossibile completare il trasferimento. Controlli la connessione e riprovi." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "De overdracht kon niet worden voltooid. Controleer uw verbinding en probeer het opnieuw." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4843,6 +5443,12 @@ "value": "Nome del destinatario" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Naam van ontvanger" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4891,6 +5497,12 @@ "value": "Nome del mittente" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Naam van afzender" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4939,6 +5551,12 @@ "value": "Nome del trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Naam van overdracht" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -4987,6 +5605,12 @@ "value": "Nome visualizzato" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Weergavenaam" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5035,6 +5659,12 @@ "value": "Autorizzazione necessaria" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Machtiging vereist" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5083,6 +5713,12 @@ "value": "Non disponibile" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Niet beschikbaar" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5131,6 +5767,12 @@ "value": "Controllo della cartella…" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Map controleren…" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5179,6 +5821,12 @@ "value": "Pronta" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Gereed" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5227,6 +5875,12 @@ "value": "File" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bestanden" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5275,6 +5929,12 @@ "value": "Dimensione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Grootte" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5323,6 +5983,12 @@ "value": "Stato" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Status" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5371,6 +6037,12 @@ "value": "Ricevi" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5419,6 +6091,12 @@ "value": "Invia" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Versturen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5467,6 +6145,12 @@ "value": "Impostazioni" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Instellingen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5515,6 +6199,12 @@ "value": "Rete" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Netwerk" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5563,6 +6253,12 @@ "value": "Ricevi avvisi sulle nuove richieste di ricezione quando VniDrop è in background." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvang meldingen over nieuwe ontvangstverzoeken terwijl VniDrop op de achtergrond draait." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5611,6 +6307,12 @@ "value": "Notifiche attivate." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Meldingen ingeschakeld." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5659,6 +6361,12 @@ "value": "Consenti le notifiche" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Meldingen toestaan" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5707,6 +6415,12 @@ "value": "Le notifiche sono disattivate per VniDrop. Può attivarle in Impostazioni." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Meldingen zijn uitgeschakeld voor VniDrop. U kunt ze inschakelen in Instellingen." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5755,6 +6469,12 @@ "value": "Impossibile aprire le impostazioni delle notifiche." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "De meldingsinstellingen konden niet worden geopend." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5803,6 +6523,12 @@ "value": "Notifiche" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Meldingen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5851,6 +6577,12 @@ "value": "Le notifiche non sono disponibili su questo dispositivo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Meldingen zijn niet beschikbaar op dit apparaat." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5899,6 +6631,12 @@ "value": "Sistema operativo" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Besturingssysteem" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5947,6 +6685,12 @@ "value": "Salva i trasferimenti ricevuti in" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen overdrachten bewaren in" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -5995,6 +6739,12 @@ "value": "Preferenze" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Voorkeuren" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6043,6 +6793,12 @@ "value": "Annullato" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Geannuleerd" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6091,6 +6847,12 @@ "value": "Completato" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Voltooid" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6139,6 +6901,12 @@ "value": "Connesso" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verbonden" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6187,6 +6955,12 @@ "value": "Connessione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verbinden" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6235,6 +7009,12 @@ "value": "Download" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Downloaden" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6283,6 +7063,12 @@ "value": "Non riuscito" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Mislukt" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6331,6 +7117,12 @@ "value": "Preparazione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Klaarmaken" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6379,6 +7171,12 @@ "value": "Trasferimento interrotto" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht onderbroken" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6427,6 +7225,12 @@ "value": "Preparazione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Voorbereiden" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6475,6 +7279,12 @@ "value": "Pronto" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Gereed" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6523,6 +7333,12 @@ "value": "Ricezione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6571,6 +7387,12 @@ "value": "Richiesta di accesso" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Toegang aanvragen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6619,6 +7441,12 @@ "value": "Salvataggio" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bewaren" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6667,6 +7495,12 @@ "value": "Invio" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Versturen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6715,6 +7549,12 @@ "value": "Invio a %1$d" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Versturen naar %1$d" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6763,6 +7603,12 @@ "value": "Pronto per la condivisione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Klaar om te delen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6811,6 +7657,12 @@ "value": "Elaborazione…" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bezig…" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6859,6 +7711,12 @@ "value": "Scelga il metodo di invito a sua disposizione." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Kies de uitnodigingsmethode die u ter beschikking staat." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6907,6 +7765,12 @@ "value": "Come vuole connettersi?" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Hoe wilt u verbinding maken?" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -6955,6 +7819,12 @@ "value": "Cancella cronologia" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Geschiedenis wissen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7003,6 +7873,12 @@ "value": "Tutte le ricezioni completate, non riuscite e annullate verranno rimosse dalla cronologia di VniDrop. I file scaricati rimarranno su questo dispositivo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Alle voltooide, mislukte en geannuleerde ontvangsten worden uit de geschiedenis van VniDrop verwijderd. Gedownloade bestanden blijven op dit apparaat." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7051,6 +7927,12 @@ "value": "Cancellare la cronologia di ricezione?" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangstgeschiedenis wissen?" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7099,6 +7981,12 @@ "value": "Trasferimento ricevuto." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht ontvangen." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7147,6 +8035,12 @@ "value": "«%1$@» verrà rimosso dalla cronologia di VniDrop. Il file scaricato rimarrà su questo dispositivo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "‘%1$@’ wordt uit de geschiedenis van VniDrop verwijderd. Het gedownloade bestand blijft op dit apparaat." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7195,6 +8089,12 @@ "value": "Elimina dalla cronologia di ricezione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uit ontvangstgeschiedenis verwijderen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7243,6 +8143,12 @@ "value": "Rimuovere dalla cronologia?" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uit geschiedenis verwijderen?" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7291,6 +8197,12 @@ "value": "Apra un invito VniDrop, scansioni un codice QR o avvicini un tag NFC." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Open een VniDrop-uitnodiging, scan een QR-code of houd het apparaat bij een NFC-tag." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7339,6 +8251,12 @@ "value": "Ancora nulla di ricevuto" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Nog niets ontvangen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7387,6 +8305,12 @@ "value": "Cronologia di ricezione cancellata." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangstgeschiedenis gewist." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7435,6 +8359,12 @@ "value": "Cronologia" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Geschiedenis" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7483,6 +8413,12 @@ "value": "Apri un invito .vnd" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Een .vnd-uitnodiging openen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7531,6 +8467,12 @@ "value": "Scelga un invito salvato o condiviso su questo dispositivo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Kies een uitnodiging die op dit apparaat is bewaard of gedeeld." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7579,6 +8521,12 @@ "value": "Leggi tag NFC" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "NFC-tag lezen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7627,6 +8575,12 @@ "value": "Avvicini questo dispositivo al tag di invito del mittente." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Houd dit apparaat bij de uitnodigingstag van de afzender." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7675,6 +8629,12 @@ "value": "Scansiona codice QR" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "QR-code scannen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7723,6 +8683,12 @@ "value": "Usi la fotocamera per scansionare il codice VniDrop del mittente." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Gebruik de camera om de VniDrop-code van de afzender te scannen." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7771,6 +8737,12 @@ "value": "Trasferimenti che ha ricevuto su questo dispositivo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdrachten die u op dit apparaat hebt ontvangen." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7819,6 +8791,12 @@ "value": "Avvicini al tag NFC…" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Houd bij de NFC-tag…" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7867,6 +8845,12 @@ "value": "Impossibile aprire VniDrop in File." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop kon niet worden geopend in Bestanden." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7915,6 +8899,12 @@ "value": "Rivedi trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht controleren" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -7963,6 +8953,12 @@ "value": "Ricevi" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8011,6 +9007,12 @@ "value": "Trasferimento VniDrop" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop-overdracht" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8059,6 +9061,12 @@ "value": "Chiunque abbia questo trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Iedereen met deze overdracht" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8107,6 +9115,12 @@ "value": "Nessuna approvazione richiesta. Da usare solo per elementi che non ha problemi a condividere." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Geen goedkeuring vereist. Gebruik dit alleen voor items die u gerust kunt delen." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8155,6 +9169,12 @@ "value": "Chiunque abbia l’invito può scaricare finché non interrompe la condivisione. Non lo usi per elementi privati o sensibili." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Iedereen met de uitnodiging kan downloaden totdat u stopt met delen. Gebruik dit niet voor privé- of gevoelige items." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8203,6 +9223,12 @@ "value": "Chiedi prima di ogni download" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Vragen vóór elke download" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8251,6 +9277,12 @@ "value": "Approva o rifiuta ogni nuovo destinatario." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "U keurt elke nieuwe ontvanger goed of weigert deze." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8299,6 +9331,12 @@ "value": "Chi può riceverlo?" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wie kan het ontvangen?" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8347,6 +9385,12 @@ "value": "Selezioni file o una cartella da questo dispositivo. Potrà rivedere la selezione prima di creare il trasferimento." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Selecteer bestanden of een map op dit apparaat. U kunt de selectie controleren voordat u de overdracht aanmaakt." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8395,6 +9439,12 @@ "value": "Scelga cosa condividere" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Kies wat u wilt delen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8443,6 +9493,12 @@ "value": "Crei un trasferimento, decida chi può riceverlo, poi inviti queste persone con un codice QR, un tag NFC o un file di invito." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Maak een overdracht aan, bepaal wie deze kan ontvangen en nodig die personen vervolgens uit met een QR-code, NFC-tag of uitnodigingsbestand." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8491,6 +9547,12 @@ "value": "Ancora nulla di condiviso" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Nog niets gedeeld" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8539,6 +9601,12 @@ "value": "Dimensione non disponibile" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Grootte niet beschikbaar" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8587,6 +9655,12 @@ "value": "Cartella" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Map" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8635,6 +9709,12 @@ "value": "Crea un nuovo trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Een nieuwe overdracht aanmaken" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8683,6 +9763,12 @@ "value": "Nuovo trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Nieuwe overdracht" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8731,6 +9817,12 @@ "value": "Rivedi trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht controleren" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8779,6 +9871,12 @@ "value": "%1$d file selezionati" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d bestanden geselecteerd" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8827,6 +9925,12 @@ "value": "Interrompi condivisione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Stoppen met delen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8875,6 +9979,12 @@ "value": "Questo interrompe il trasferimento e blocca chiunque lo stia scaricando. Rimane nella sua cronologia come Interrotto." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Hiermee stopt de overdracht en wordt iedereen die deze op dit moment downloadt onderbroken. De overdracht blijft in uw geschiedenis staan als Gestopt." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8923,6 +10033,12 @@ "value": "Trasferimenti che sta condividendo da questo dispositivo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdrachten die u vanaf dit apparaat deelt." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -8971,6 +10087,12 @@ "value": "Invia" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Versturen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9019,6 +10141,12 @@ "value": "Trasferimento creato." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht aangemaakt." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9067,6 +10195,12 @@ "value": "Dettagli del trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdrachtsdetails" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9115,6 +10249,12 @@ "value": "I suoi trasferimenti" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uw overdrachten" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9163,6 +10303,12 @@ "value": "Il suo nome, dove vengono salvati i trasferimenti, l’aspetto e le notifiche." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uw naam, waar overdrachten worden bewaard, weergave en meldingen." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9211,6 +10357,12 @@ "value": "Impostazioni" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Instellingen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9259,6 +10411,12 @@ "value": "Ignora" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Sluiten" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9307,6 +10465,12 @@ "value": "Disponibile" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Beschikbaar" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9355,6 +10519,12 @@ "value": "Annullato" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Geannuleerd" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9403,6 +10573,12 @@ "value": "Completato" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Voltooid" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9451,6 +10627,12 @@ "value": "Non riuscito" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Mislukt" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9499,6 +10681,12 @@ "value": "Preparazione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Voorbereiden" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9547,6 +10735,12 @@ "value": "Ricezione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9595,6 +10789,12 @@ "value": "Interrotto" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Gestopt" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9643,6 +10843,12 @@ "value": "Calcolo…" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Berekenen…" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9691,6 +10897,12 @@ "value": "Elimina tutti i trasferimenti" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Alle overdrachten verwijderen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9739,6 +10951,12 @@ "value": "Questo cancella dalla cronologia tutti i record dei trasferimenti inviati e ricevuti. I suoi file ricevuti non vengono eliminati. Nota: il motore di trasferimento conserva il contenuto memorizzato, quindi i dati di trasferimento potrebbero non diminuire. Questa operazione non può essere annullata." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Hiermee worden alle records van verzonden en ontvangen overdrachten uit uw geschiedenis gewist. Uw ontvangen bestanden worden niet verwijderd. Let op: de overdrachtsengine bewaart de opgeslagen inhoud, dus de overdrachtsgegevens nemen mogelijk niet af. Dit kan niet ongedaan worden gemaakt." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9787,6 +11005,12 @@ "value": "Eliminazione…" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verwijderen…" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9835,6 +11059,12 @@ "value": "I dati di trasferimento sono gestiti dal motore di trasferimento: la sua cronologia più il contenuto dei file che ha condiviso. Il pulsante qui sotto cancella i record dei trasferimenti; il motore conserva il contenuto memorizzato, quindi questo valore potrebbe non diminuire. I file ricevuti sono i file che ha scaricato e non vengono mai eliminati qui." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdrachtsgegevens worden beheerd door de overdrachtsengine — uw geschiedenis plus de inhoud van de bestanden die u hebt gedeeld. De knop hieronder wist uw overdrachtsrecords; de engine bewaart de opgeslagen inhoud, dus deze waarde daalt mogelijk niet. Ontvangen bestanden zijn uw gedownloade bestanden en worden hier nooit verwijderd." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9883,6 +11113,12 @@ "value": "File ricevuti" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen bestanden" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9931,6 +11167,12 @@ "value": "File temporanei" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Tijdelijke bestanden" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -9979,6 +11221,12 @@ "value": "Archiviazione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Opslag" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10027,6 +11275,12 @@ "value": "Totale" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Totaal" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10075,6 +11329,12 @@ "value": "Dati di trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdrachtsgegevens" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10123,6 +11383,12 @@ "value": "Tutti i trasferimenti eliminati" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Alle overdrachten verwijderd" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10171,6 +11437,12 @@ "value": "Veda gli aggiornamenti importanti di questo trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bekijk belangrijke updates voor deze overdracht" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10219,6 +11491,12 @@ "value": "Attività" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Activiteit" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10267,6 +11545,12 @@ "value": "«%1$@» non verrà più condiviso e la sua cronologia di trasferimento verrà rimossa da questo dispositivo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "‘%1$@’ wordt niet meer gedeeld en de overdrachtsgeschiedenis wordt van dit apparaat verwijderd." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10315,6 +11599,12 @@ "value": "Eliminare il trasferimento?" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht verwijderen?" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10363,6 +11653,12 @@ "value": "Trasferimento eliminato." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht verwijderd." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10411,6 +11707,12 @@ "value": "Eliminazione…" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verwijderen…" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10459,6 +11761,12 @@ "value": "Dettagli del trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdrachtsdetails" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10507,6 +11815,12 @@ "value": "Accesso del destinatario approvato" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Toegang ontvanger goedgekeurd" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10555,6 +11869,12 @@ "value": "Un destinatario ha completato il trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Een ontvanger heeft de overdracht voltooid" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10603,6 +11923,12 @@ "value": "Connessione al mittente" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verbinden met afzender" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10651,6 +11977,12 @@ "value": "Download" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Downloaden" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10699,6 +12031,12 @@ "value": "Il trasferimento ha riscontrato un problema" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Er is een probleem opgetreden bij de overdracht" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10747,6 +12085,12 @@ "value": "Preparazione del trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uw overdracht voorbereiden" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10795,6 +12139,12 @@ "value": "Pronto per la condivisione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Klaar om te delen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10843,6 +12193,12 @@ "value": "Accesso del destinatario rifiutato" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Toegang ontvanger geweigerd" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10891,6 +12247,12 @@ "value": "Un destinatario ha richiesto l’accesso" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Een ontvanger heeft toegang aangevraagd" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10939,6 +12301,12 @@ "value": "Salvataggio" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bewaren" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -10987,6 +12355,12 @@ "value": "Condivisione interrotta" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Delen gestopt" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11035,6 +12409,12 @@ "value": "Trasferimento aggiornato" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht bijgewerkt" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11143,6 +12523,24 @@ } } }, + "nl": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d bestand" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d bestanden" + } + } + } + } + }, "pl": { "variations": { "plural": { @@ -11227,6 +12625,12 @@ "value": "Invito salvato." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uitnodiging bewaard." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11275,6 +12679,12 @@ "value": "Dispositivo nelle vicinanze" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Apparaat in de buurt" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11323,6 +12733,12 @@ "value": "La scrittura dei tag NFC non è disponibile su questo dispositivo." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Het schrijven van NFC-tags is niet beschikbaar op dit apparaat." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11371,6 +12787,12 @@ "value": "Avvicini il dispositivo a un tag NFC scrivibile." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Houd uw apparaat bij een beschrijfbare NFC-tag." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11419,6 +12841,12 @@ "value": "Invito scritto sul tag NFC." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uitnodiging naar de NFC-tag geschreven." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11467,6 +12895,12 @@ "value": "Non c’è ancora alcuna attività da mostrare." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Er is nog geen activiteit om weer te geven." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11515,6 +12949,12 @@ "value": "Nessuno ha ancora richiesto questo trasferimento." } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Nog niemand heeft deze overdracht aangevraagd." + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11563,6 +13003,12 @@ "value": "Approvato: in attesa del completamento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Goedgekeurd — wachten op voltooiing" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11611,6 +13057,12 @@ "value": "Ricevuto correttamente" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Succesvol ontvangen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11659,6 +13111,12 @@ "value": "Richiesta scaduta" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verzoek verlopen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11707,6 +13165,12 @@ "value": "Richiesta rifiutata" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verzoek geweigerd" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11755,6 +13219,12 @@ "value": "In attesa della sua approvazione" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wachten op uw goedkeuring" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11803,6 +13273,12 @@ "value": "Stato non disponibile" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Status niet beschikbaar" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11851,6 +13327,12 @@ "value": "%1$d completati" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d voltooid" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11899,6 +13381,12 @@ "value": "Richieste, approvazioni e consegne completate" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verzoeken, goedkeuringen en voltooide leveringen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11947,6 +13435,12 @@ "value": "%1$d in attesa" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d in behandeling" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -11995,6 +13489,12 @@ "value": "Destinatari" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangers" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -12043,6 +13543,12 @@ "value": "Scansioni con VniDrop per ricevere questo trasferimento" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Scan met VniDrop om deze overdracht te ontvangen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -12091,6 +13597,12 @@ "value": "Codice QR, file di invito e opzioni nelle vicinanze" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "QR-code, uitnodigingsbestand en opties in de buurt" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -12139,6 +13651,12 @@ "value": "Condividi" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Delen" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -12187,6 +13705,12 @@ "value": "Non disponibile" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Niet beschikbaar" + } + }, "pl": { "stringUnit": { "state": "needs_review", @@ -12235,6 +13759,12 @@ "value": "Versione dell’app" } }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "App-versie" + } + }, "pl": { "stringUnit": { "state": "needs_review", diff --git a/localization/strings.json b/localization/strings.json index bb184c1..22d21ca 100644 --- a/localization/strings.json +++ b/localization/strings.json @@ -8,7 +8,8 @@ "it", "de", "pt", - "pl" + "pl", + "nl" ], "strings": { "%@": { @@ -43,7 +44,8 @@ "it": "{arg1} {arg2} · {arg3}", "de": "{arg1} {arg2} · {arg3}", "pt": "{arg1} {arg2} · {arg3}", - "pl": "{arg1} {arg2} · {arg3}" + "pl": "{arg1} {arg2} · {arg3}", + "nl": "{arg1} {arg2} · {arg3}" } }, "%@ · %@": { @@ -68,7 +70,8 @@ "it": "{arg1} · {arg2}", "de": "{arg1} · {arg2}", "pt": "{arg1} · {arg2}", - "pl": "{arg1} · {arg2}" + "pl": "{arg1} · {arg2}", + "nl": "{arg1} · {arg2}" } }, "%@%%": { @@ -86,7 +89,8 @@ "it": "Segnala un bug", "de": "Fehler melden", "pt": "Comunicar um erro", - "pl": "Zgłoś błąd" + "pl": "Zgłoś błąd", + "nl": "Een fout melden" } }, "about_description": { @@ -98,7 +102,8 @@ "it": "VniDrop trasferisce file e cartelle direttamente da un dispositivo a un altro sulla rete, senza caricarli su alcun servizio di hosting. Non c’è alcun account da creare e nessuna copia del suo trasferimento rimane nel cloud una volta terminato.", "de": "VniDrop überträgt Dateien und Ordner direkt von einem Gerät auf ein anderes über das Netzwerk, ohne sie auf einen Hosting-Dienst hochzuladen. Es muss kein Konto erstellt werden, und nach Abschluss verbleibt keine Kopie Ihrer Übertragung in der Cloud.", "pt": "O VniDrop transfere ficheiros e pastas diretamente de um dispositivo para outro através da rede, sem os carregar para qualquer serviço de alojamento. Não é necessário criar qualquer conta e não fica nenhuma cópia da sua transferência na nuvem depois de terminar.", - "pl": "VniDrop przesyła pliki i foldery bezpośrednio z jednego urządzenia na drugie przez sieć, bez przesyłania ich do jakiejkolwiek usługi hostingowej. Nie trzeba zakładać konta, a po zakończeniu żadna kopia transferu nie pozostaje w chmurze." + "pl": "VniDrop przesyła pliki i foldery bezpośrednio z jednego urządzenia na drugie przez sieć, bez przesyłania ich do jakiejkolwiek usługi hostingowej. Nie trzeba zakładać konta, a po zakończeniu żadna kopia transferu nie pozostaje w chmurze.", + "nl": "VniDrop verplaatst bestanden en mappen rechtstreeks van het ene apparaat naar het andere via het netwerk, zonder ze naar een hostingdienst te uploaden. U hoeft geen account aan te maken en er blijft geen kopie van uw overdracht in de cloud achter zodra u klaar bent." } }, "about_is_direct": { @@ -110,7 +115,8 @@ "it": "Un trasferimento diretto da dispositivo a dispositivo: i suoi file vanno direttamente al destinatario.", "de": "Eine direkte Gerät-zu-Gerät-Übertragung – Ihre Dateien gehen direkt an den Empfänger.", "pt": "Uma transferência direta entre dispositivos — os seus ficheiros vão diretamente para o destinatário.", - "pl": "Bezpośredni transfer między urządzeniami — pliki trafiają prosto do odbiorcy." + "pl": "Bezpośredni transfer między urządzeniami — pliki trafiają prosto do odbiorcy.", + "nl": "Een directe overdracht van apparaat naar apparaat — uw bestanden gaan rechtstreeks naar de ontvanger." } }, "about_is_encrypted": { @@ -122,7 +128,8 @@ "it": "Le connessioni sono autenticate e cifrate end-to-end (tramite Iroh) e i file in arrivo vengono verificati tramite l’impronta del loro contenuto.", "de": "Verbindungen sind authentifiziert und Ende-zu-Ende-verschlüsselt (über Iroh), und eingehende Dateien werden anhand ihres Inhalts-Hashs überprüft.", "pt": "As ligações são autenticadas e cifradas ponto a ponto (através do Iroh), e os ficheiros recebidos são verificados pela impressão digital do seu conteúdo.", - "pl": "Połączenia są uwierzytelniane i szyfrowane od końca do końca (przez Iroh), a przychodzące pliki są weryfikowane na podstawie skrótu ich zawartości." + "pl": "Połączenia są uwierzytelniane i szyfrowane od końca do końca (przez Iroh), a przychodzące pliki są weryfikowane na podstawie skrótu ich zawartości.", + "nl": "Verbindingen zijn geverifieerd en end-to-end versleuteld (via Iroh), en binnenkomende bestanden worden gecontroleerd aan de hand van hun inhouds-hash." } }, "about_is_in_control": { @@ -134,7 +141,8 @@ "it": "Lei decide chi riceve: approvi ogni richiesta oppure apra un trasferimento a chiunque disponga dell’invito.", "de": "Sie entscheiden, wer empfängt: Genehmigen Sie jede Anfrage oder öffnen Sie eine Übertragung für alle, die die Einladung besitzen.", "pt": "É você quem decide quem recebe: aprove cada pedido ou abra uma transferência a qualquer pessoa que tenha o convite.", - "pl": "To Ty decydujesz, kto otrzymuje: zatwierdź każde żądanie lub udostępnij transfer każdemu, kto ma zaproszenie." + "pl": "To Ty decydujesz, kto otrzymuje: zatwierdź każde żądanie lub udostępnij transfer każdemu, kto ma zaproszenie.", + "nl": "U bepaalt wie ontvangt: keur elk verzoek goed, of stel een overdracht open voor iedereen met de uitnodiging." } }, "about_is_no_account": { @@ -146,7 +154,8 @@ "it": "Senza account: non c’è nulla da registrare.", "de": "Ohne Konto – es gibt nichts zu registrieren.", "pt": "Sem conta — não há nada para registar.", - "pl": "Bez konta — nie trzeba się rejestrować." + "pl": "Bez konta — nie trzeba się rejestrować.", + "nl": "Zonder account — er is niets om aan te melden." } }, "about_is_open": { @@ -158,7 +167,8 @@ "it": "Open source, rilasciato con licenza Apache 2.0.", "de": "Open Source, veröffentlicht unter der Apache-2.0-Lizenz.", "pt": "Código aberto, publicado sob a licença Apache 2.0.", - "pl": "Otwarte oprogramowanie, wydane na licencji Apache 2.0." + "pl": "Otwarte oprogramowanie, wydane na licencji Apache 2.0.", + "nl": "Opensource, uitgebracht onder de Apache 2.0-licentie." } }, "about_is_title": { @@ -170,7 +180,8 @@ "it": "Cos’è VniDrop", "de": "Was VniDrop ist", "pt": "O que o VniDrop é", - "pl": "Czym jest VniDrop" + "pl": "Czym jest VniDrop", + "nl": "Wat VniDrop is" } }, "about_isnt_cloud": { @@ -182,7 +193,8 @@ "it": "Non è un’archiviazione cloud: nessun server conserva i suoi file e nulla resta nel cloud dopo un trasferimento.", "de": "Kein Cloud-Speicher – kein Server hält Ihre Dateien, und nach einer Übertragung wartet nichts in der Cloud.", "pt": "Não é armazenamento na nuvem — nenhum servidor guarda os seus ficheiros e nada fica na nuvem após uma transferência.", - "pl": "To nie magazyn w chmurze — żaden serwer nie przechowuje Twoich plików i nic nie pozostaje w chmurze po transferze." + "pl": "To nie magazyn w chmurze — żaden serwer nie przechowuje Twoich plików i nic nie pozostaje w chmurze po transferze.", + "nl": "Geen cloudopslag — geen enkele server bewaart uw bestanden en er wacht niets in de cloud na een overdracht." } }, "about_isnt_public": { @@ -194,7 +206,8 @@ "it": "Non è una diffusione pubblica: un invito è un link di accesso privato, non un annuncio a tutti nelle vicinanze.", "de": "Keine öffentliche Übertragung – eine Einladung ist ein privater Zugangslink, keine Ankündigung an alle in der Nähe.", "pt": "Não é difusão pública — um convite é uma ligação de acesso privado, não um anúncio a toda a gente por perto.", - "pl": "To nie publiczne rozgłaszanie — zaproszenie to prywatny link dostępu, a nie ogłoszenie dla wszystkich w pobliżu." + "pl": "To nie publiczne rozgłaszanie — zaproszenie to prywatny link dostępu, a nie ogłoszenie dla wszystkich w pobliżu.", + "nl": "Geen openbare uitzending — een uitnodiging is een privétoegangslink, geen aankondiging aan iedereen in de buurt." } }, "about_isnt_sync": { @@ -206,7 +219,8 @@ "it": "Non è un servizio di sincronizzazione o di backup.", "de": "Kein Synchronisierungs- oder Backup-Dienst.", "pt": "Não é um serviço de sincronização ou de cópia de segurança.", - "pl": "To nie usługa synchronizacji ani kopii zapasowej." + "pl": "To nie usługa synchronizacji ani kopii zapasowej.", + "nl": "Geen synchronisatie- of back-updienst." } }, "about_isnt_title": { @@ -218,7 +232,8 @@ "it": "Cosa non è VniDrop", "de": "Was VniDrop nicht ist", "pt": "O que o VniDrop não é", - "pl": "Czym VniDrop nie jest" + "pl": "Czym VniDrop nie jest", + "nl": "Wat VniDrop niet is" } }, "about_license_label": { @@ -230,7 +245,8 @@ "it": "Licenza", "de": "Lizenz", "pt": "Licença", - "pl": "Licencja" + "pl": "Licencja", + "nl": "Licentie" } }, "about_privacy": { @@ -242,7 +258,8 @@ "it": "Informativa sulla privacy", "de": "Datenschutzrichtlinie", "pt": "Política de privacidade", - "pl": "Polityka prywatności" + "pl": "Polityka prywatności", + "nl": "Privacybeleid" } }, "about_privacy_capability": { @@ -254,7 +271,8 @@ "it": "Gli inviti sono chiavi di accesso. Tratti un codice QR, un tag NFC o un file .vnd come un link di accesso privato e lo condivida solo con le persone previste, soprattutto con «Chiunque abbia questo trasferimento».", "de": "Einladungen sind Zugangsschlüssel. Behandeln Sie einen QR-Code, ein NFC-Tag oder eine .vnd-Datei wie einen privaten Zugangslink und teilen Sie ihn nur mit den vorgesehenen Personen – insbesondere bei „Jeder mit dieser Übertragung“.", "pt": "Os convites são chaves de acesso. Trate um código QR, uma etiqueta NFC ou um ficheiro .vnd como uma ligação de acesso privado e partilhe-o apenas com as pessoas pretendidas — sobretudo com «Qualquer pessoa com esta transferência».", - "pl": "Zaproszenia są kluczami dostępu. Traktuj kod QR, tag NFC lub plik .vnd jak prywatny link dostępu i udostępniaj go tylko zamierzonym osobom — zwłaszcza przy opcji „Każdy, kto ma ten transfer”." + "pl": "Zaproszenia są kluczami dostępu. Traktuj kod QR, tag NFC lub plik .vnd jak prywatny link dostępu i udostępniaj go tylko zamierzonym osobom — zwłaszcza przy opcji „Każdy, kto ma ten transfer”.", + "nl": "Uitnodigingen zijn toegangssleutels. Behandel een QR-code, NFC-tag of .vnd-bestand als een privétoegangslink en deel deze alleen met de bedoelde personen — vooral bij ‘Iedereen met deze overdracht’." } }, "about_privacy_deny": { @@ -266,7 +284,8 @@ "it": "Rifiuto predefinito: VniDrop serve solo il contenuto di una condivisione attiva e rifiuta le richieste sconosciute.", "de": "Standardmäßig ablehnen – VniDrop stellt nur den Inhalt einer aktiven Freigabe bereit und weist unbekannte Anfragen ab.", "pt": "Recusa por predefinição — o VniDrop apenas fornece o conteúdo de uma partilha ativa e rejeita pedidos desconhecidos.", - "pl": "Domyślnie odmowa — VniDrop udostępnia tylko zawartość aktywnego udostępnienia i odrzuca nieznane żądania." + "pl": "Domyślnie odmowa — VniDrop udostępnia tylko zawartość aktywnego udostępnienia i odrzuca nieznane żądania.", + "nl": "Standaard weigeren — VniDrop levert alleen de inhoud van een actieve deling en wijst onbekende verzoeken af." } }, "about_privacy_local": { @@ -278,7 +297,8 @@ "it": "I file ricevuti vengono salvati sul suo dispositivo e non sovrascrivono mai un file esistente.", "de": "Empfangene Dateien werden auf Ihrem Gerät gespeichert und überschreiben niemals eine vorhandene Datei.", "pt": "Os ficheiros recebidos são guardados no seu dispositivo e nunca substituem um ficheiro existente.", - "pl": "Odebrane pliki są zapisywane na Twoim urządzeniu i nigdy nie nadpisują istniejącego pliku." + "pl": "Odebrane pliki są zapisywane na Twoim urządzeniu i nigdy nie nadpisują istniejącego pliku.", + "nl": "Ontvangen bestanden worden op uw apparaat bewaard en overschrijven nooit een bestaand bestand." } }, "about_privacy_policy_label": { @@ -290,7 +310,8 @@ "it": "Informativa sulla privacy", "de": "Datenschutzrichtlinie", "pt": "Política de privacidade", - "pl": "Polityka prywatności" + "pl": "Polityka prywatności", + "nl": "Privacybeleid" } }, "about_privacy_relay": { @@ -302,7 +323,8 @@ "it": "Se due dispositivi non riescono a connettersi direttamente, la connessione cifrata può essere instradata tramite relay. I relay inoltrano solo pacchetti cifrati; non memorizzano mai i suoi file.", "de": "Wenn zwei Geräte sich nicht direkt verbinden können, kann die verschlüsselte Verbindung weitergeleitet werden. Relays leiten nur verschlüsselte Pakete weiter; sie speichern niemals Ihre Dateien.", "pt": "Se dois dispositivos não conseguirem ligar-se diretamente, a ligação cifrada pode ser retransmitida. Os retransmissores apenas encaminham pacotes cifrados; nunca guardam os seus ficheiros.", - "pl": "Jeśli dwa urządzenia nie mogą połączyć się bezpośrednio, szyfrowane połączenie może być przekazywane przez przekaźnik. Przekaźniki przekazują tylko zaszyfrowane pakiety; nigdy nie przechowują Twoich plików." + "pl": "Jeśli dwa urządzenia nie mogą połączyć się bezpośrednio, szyfrowane połączenie może być przekazywane przez przekaźnik. Przekaźniki przekazują tylko zaszyfrowane pakiety; nigdy nie przechowują Twoich plików.", + "nl": "Als twee apparaten niet rechtstreeks verbinding kunnen maken, kan de versleutelde verbinding via een relay worden doorgestuurd. Relays sturen alleen versleutelde pakketten door; ze slaan uw bestanden nooit op." } }, "about_privacy_title": { @@ -314,7 +336,8 @@ "it": "Privacy e sicurezza", "de": "Datenschutz & Sicherheit", "pt": "Privacidade e segurança", - "pl": "Prywatność i bezpieczeństwo" + "pl": "Prywatność i bezpieczeństwo", + "nl": "Privacy en beveiliging" } }, "about_tagline": { @@ -326,7 +349,8 @@ "it": "Invii file direttamente. Mantenga il controllo su chi li riceve.", "de": "Senden Sie Dateien direkt. Behalten Sie die Kontrolle darüber, wer sie empfängt.", "pt": "Envie ficheiros diretamente. Mantenha o controlo sobre quem os recebe.", - "pl": "Wysyłaj pliki bezpośrednio. Zachowaj kontrolę nad tym, kto je otrzymuje." + "pl": "Wysyłaj pliki bezpośrednio. Zachowaj kontrolę nad tym, kto je otrzymuje.", + "nl": "Verstuur bestanden rechtstreeks. Houd controle over wie ze ontvangt." } }, "about_title": { @@ -338,7 +362,8 @@ "it": "Informazioni", "de": "Über", "pt": "Acerca de", - "pl": "Informacje" + "pl": "Informacje", + "nl": "Over" } }, "appearance_auto_description": { @@ -350,7 +375,8 @@ "it": "Segue l’aspetto chiaro o scuro di questo dispositivo.", "de": "Der hellen oder dunklen Darstellung dieses Geräts folgen.", "pt": "Acompanhar o aspeto claro ou escuro deste dispositivo.", - "pl": "Dopasuj do jasnego lub ciemnego wyglądu tego urządzenia." + "pl": "Dopasuj do jasnego lub ciemnego wyglądu tego urządzenia.", + "nl": "De lichte of donkere weergave van dit apparaat volgen." } }, "appearance_dark_mode": { @@ -362,7 +388,8 @@ "it": "Modalità scura", "de": "Dunkelmodus", "pt": "Modo escuro", - "pl": "Tryb ciemny" + "pl": "Tryb ciemny", + "nl": "Donkere modus" } }, "appearance_light_mode": { @@ -374,7 +401,8 @@ "it": "Modalità chiara", "de": "Hellmodus", "pt": "Modo claro", - "pl": "Tryb jasny" + "pl": "Tryb jasny", + "nl": "Lichte modus" } }, "appearance_system_mode": { @@ -386,7 +414,8 @@ "it": "Sistema", "de": "System", "pt": "Sistema", - "pl": "System" + "pl": "System", + "nl": "Systeem" } }, "appearance_title": { @@ -398,7 +427,8 @@ "it": "Aspetto", "de": "Darstellung", "pt": "Aspeto", - "pl": "Wygląd" + "pl": "Wygląd", + "nl": "Weergave" } }, "approval_connection_request": { @@ -410,7 +440,8 @@ "it": "Richiesta di ricezione", "de": "Empfangsanfrage", "pt": "Pedido de receção", - "pl": "Prośba o odbiór" + "pl": "Prośba o odbiór", + "nl": "Ontvangstverzoek" } }, "approval_endpoint_id": { @@ -428,7 +459,8 @@ "it": "ID dispositivo: {arg1}", "de": "Geräte-ID: {arg1}", "pt": "ID do dispositivo: {arg1}", - "pl": "Identyfikator urządzenia: {arg1}" + "pl": "Identyfikator urządzenia: {arg1}", + "nl": "Apparaat-ID: {arg1}" } }, "approval_nearby_device": { @@ -440,7 +472,8 @@ "it": "Un dispositivo nelle vicinanze", "de": "Ein Gerät in der Nähe", "pt": "Um dispositivo próximo", - "pl": "Urządzenie w pobliżu" + "pl": "Urządzenie w pobliżu", + "nl": "Een apparaat in de buurt" } }, "approval_pending_count": { @@ -458,7 +491,8 @@ "it": "{count} richieste in attesa", "de": "{count} Anfragen warten", "pt": "{count} pedidos em espera", - "pl": "Oczekujące prośby: {count}" + "pl": "Oczekujące prośby: {count}", + "nl": "{count} verzoeken in behandeling" } }, "approval_request_body": { @@ -480,7 +514,8 @@ "it": "{arg1} vuole ricevere «{arg2}».", "de": "{arg1} möchte „{arg2}“ empfangen.", "pt": "{arg1} quer receber «{arg2}».", - "pl": "{arg1} chce odebrać „{arg2}”." + "pl": "{arg1} chce odebrać „{arg2}”.", + "nl": "{arg1} wil ‘{arg2}’ ontvangen." } }, "battery_level_title": { @@ -492,7 +527,8 @@ "it": "Livello batteria", "de": "Batteriestand", "pt": "Nível da bateria", - "pl": "Poziom baterii" + "pl": "Poziom baterii", + "nl": "Batterijniveau" } }, "bug_report_contact_hint": { @@ -504,7 +540,8 @@ "it": "nome@esempio.com", "de": "name@beispiel.com", "pt": "nome@exemplo.com", - "pl": "nazwa@przyklad.com" + "pl": "nazwa@przyklad.com", + "nl": "naam@voorbeeld.com" } }, "bug_report_contact_label": { @@ -516,7 +553,8 @@ "it": "Email di contatto (facoltativa)", "de": "Kontakt-E-Mail (optional)", "pt": "E-mail de contacto (opcional)", - "pl": "E-mail kontaktowy (opcjonalnie)" + "pl": "E-mail kontaktowy (opcjonalnie)", + "nl": "Contact-e-mail (optioneel)" } }, "bug_report_description": { @@ -528,7 +566,8 @@ "it": "Ci dica cosa è andato storto. Alleghiamo le informazioni sul dispositivo e, facoltativamente, i log recenti (con i valori sensibili oscurati).", "de": "Sagen Sie uns, was schiefgelaufen ist. Wir hängen Geräteinformationen und optional aktuelle Protokolle an (sensible Werte werden geschwärzt).", "pt": "Diga-nos o que correu mal. Anexamos informações do dispositivo e, opcionalmente, registos recentes (com os valores sensíveis ocultados).", - "pl": "Napisz, co poszło nie tak. Dołączamy informacje o urządzeniu i opcjonalnie ostatnie dzienniki (z ukrytymi wrażliwymi wartościami)." + "pl": "Napisz, co poszło nie tak. Dołączamy informacje o urządzeniu i opcjonalnie ostatnie dzienniki (z ukrytymi wrażliwymi wartościami).", + "nl": "Vertel ons wat er misging. We voegen apparaatgegevens toe en optioneel recente logbestanden (met gevoelige waarden onleesbaar gemaakt)." } }, "bug_report_device_section": { @@ -540,7 +579,8 @@ "it": "Informazioni sul dispositivo", "de": "Geräteinformationen", "pt": "Informações do dispositivo", - "pl": "Informacje o urządzeniu" + "pl": "Informacje o urządzeniu", + "nl": "Apparaatgegevens" } }, "bug_report_expected_hint": { @@ -552,7 +592,8 @@ "it": "Descriva cosa si aspettava che accadesse", "de": "Beschreiben Sie, was Sie erwartet haben", "pt": "Descreva o que esperava que acontecesse", - "pl": "Opisz oczekiwane zachowanie" + "pl": "Opisz oczekiwane zachowanie", + "nl": "Beschrijf wat u verwachtte" } }, "bug_report_expected_label": { @@ -564,7 +605,8 @@ "it": "Cosa si aspettava?", "de": "Was haben Sie erwartet?", "pt": "O que esperava?", - "pl": "Czego oczekiwano?" + "pl": "Czego oczekiwano?", + "nl": "Wat verwachtte u?" } }, "bug_report_include_logs": { @@ -576,7 +618,8 @@ "it": "Includi i log recenti", "de": "Aktuelle Protokolle einschließen", "pt": "Incluir registos recentes", - "pl": "Dołącz ostatnie dzienniki" + "pl": "Dołącz ostatnie dzienniki", + "nl": "Recente logbestanden meesturen" } }, "bug_report_include_logs_description": { @@ -588,7 +631,8 @@ "it": "Ci aiuta a diagnosticare il problema. I valori sensibili vengono oscurati prima dell’invio.", "de": "Hilft uns, das Problem zu diagnostizieren. Sensible Werte werden vor dem Senden geschwärzt.", "pt": "Ajuda-nos a diagnosticar o problema. Os valores sensíveis são ocultados antes do envio.", - "pl": "Pomaga nam zdiagnozować problem. Wrażliwe wartości są ukrywane przed wysłaniem." + "pl": "Pomaga nam zdiagnozować problem. Wrażliwe wartości są ukrywane przed wysłaniem.", + "nl": "Helpt ons het probleem te diagnosticeren. Gevoelige waarden worden vóór verzending onleesbaar gemaakt." } }, "bug_report_logs_size": { @@ -600,7 +644,8 @@ "it": "Dimensione dell’allegato dei log", "de": "Größe des Protokollanhangs", "pt": "Tamanho do anexo de registos", - "pl": "Rozmiar załącznika z dziennikami" + "pl": "Rozmiar załącznika z dziennikami", + "nl": "Grootte van logbijlage" } }, "bug_report_missing_expected": { @@ -612,7 +657,8 @@ "it": "Descriva cosa si aspettava.", "de": "Bitte beschreiben Sie, was Sie erwartet haben.", "pt": "Descreva o que esperava.", - "pl": "Opisz oczekiwane zachowanie." + "pl": "Opisz oczekiwane zachowanie.", + "nl": "Beschrijf wat u verwachtte." } }, "bug_report_missing_what": { @@ -624,7 +670,8 @@ "it": "Descriva cosa è accaduto.", "de": "Bitte beschreiben Sie, was passiert ist.", "pt": "Descreva o que aconteceu.", - "pl": "Opisz, co się stało." + "pl": "Opisz, co się stało.", + "nl": "Beschrijf wat er gebeurde." } }, "bug_report_steps_hint": { @@ -636,7 +683,8 @@ "it": "Elenchi i passaggi per riprodurre il problema", "de": "Listen Sie die Schritte zum Reproduzieren des Problems auf", "pt": "Enumere os passos para reproduzir o problema", - "pl": "Wymień kroki umożliwiające odtworzenie problemu" + "pl": "Wymień kroki umożliwiające odtworzenie problemu", + "nl": "Noem de stappen om het probleem te reproduceren" } }, "bug_report_steps_label": { @@ -648,7 +696,8 @@ "it": "Passaggi per riprodurre (facoltativi)", "de": "Schritte zum Reproduzieren (optional)", "pt": "Passos para reproduzir (opcional)", - "pl": "Kroki do odtworzenia (opcjonalnie)" + "pl": "Kroki do odtworzenia (opcjonalnie)", + "nl": "Stappen om te reproduceren (optioneel)" } }, "bug_report_submit": { @@ -660,7 +709,8 @@ "it": "Invia segnalazione", "de": "Bericht senden", "pt": "Enviar relatório", - "pl": "Wyślij zgłoszenie" + "pl": "Wyślij zgłoszenie", + "nl": "Rapport versturen" } }, "bug_report_submit_failed": { @@ -672,7 +722,8 @@ "it": "Impossibile inviare la segnalazione. Riprovi più tardi.", "de": "Der Fehlerbericht konnte nicht gesendet werden. Bitte versuchen Sie es später erneut.", "pt": "Não foi possível enviar o relatório de erro. Tente novamente mais tarde.", - "pl": "Nie udało się wysłać zgłoszenia błędu. Spróbuj ponownie później." + "pl": "Nie udało się wysłać zgłoszenia błędu. Spróbuj ponownie później.", + "nl": "Het foutrapport kon niet worden verstuurd. Probeer het later opnieuw." } }, "bug_report_submitted": { @@ -684,7 +735,8 @@ "it": "Grazie: la sua segnalazione è stata registrata.", "de": "Danke – Ihr Fehlerbericht wurde erfasst.", "pt": "Obrigado — o seu relatório de erro foi registado.", - "pl": "Dziękujemy — Twoje zgłoszenie błędu zostało zapisane." + "pl": "Dziękujemy — Twoje zgłoszenie błędu zostało zapisane.", + "nl": "Bedankt — uw foutrapport is vastgelegd." } }, "bug_report_submitting": { @@ -696,7 +748,8 @@ "it": "Invio in corso…", "de": "Wird gesendet…", "pt": "A enviar…", - "pl": "Wysyłanie…" + "pl": "Wysyłanie…", + "nl": "Bezig met versturen…" } }, "bug_report_what_hint": { @@ -708,7 +761,8 @@ "it": "Descriva cosa è accaduto", "de": "Beschreiben Sie, was passiert ist", "pt": "Descreva o que aconteceu", - "pl": "Opisz, co się stało" + "pl": "Opisz, co się stało", + "nl": "Beschrijf wat er gebeurde" } }, "bug_report_what_label": { @@ -720,7 +774,8 @@ "it": "Cosa è accaduto?", "de": "Was ist passiert?", "pt": "O que aconteceu?", - "pl": "Co się stało?" + "pl": "Co się stało?", + "nl": "Wat is er gebeurd?" } }, "button_approve": { @@ -732,7 +787,8 @@ "it": "Approva", "de": "Genehmigen", "pt": "Aprovar", - "pl": "Zatwierdź" + "pl": "Zatwierdź", + "nl": "Goedkeuren" } }, "button_back": { @@ -744,7 +800,8 @@ "it": "Indietro", "de": "Zurück", "pt": "Voltar", - "pl": "Wstecz" + "pl": "Wstecz", + "nl": "Terug" } }, "button_cancel": { @@ -756,7 +813,8 @@ "it": "Annulla", "de": "Abbrechen", "pt": "Cancelar", - "pl": "Anuluj" + "pl": "Anuluj", + "nl": "Annuleren" } }, "button_cancel_receive": { @@ -768,7 +826,8 @@ "it": "Annulla", "de": "Abbrechen", "pt": "Cancelar", - "pl": "Anuluj" + "pl": "Anuluj", + "nl": "Annuleren" } }, "button_change_files": { @@ -780,7 +839,8 @@ "it": "Cambia file", "de": "Dateien ändern", "pt": "Alterar ficheiros", - "pl": "Zmień pliki" + "pl": "Zmień pliki", + "nl": "Bestanden wijzigen" } }, "button_choose_files": { @@ -792,7 +852,8 @@ "it": "Scegli file", "de": "Dateien auswählen", "pt": "Escolher ficheiros", - "pl": "Wybierz pliki" + "pl": "Wybierz pliki", + "nl": "Bestanden kiezen" } }, "button_choose_folder": { @@ -804,7 +865,8 @@ "it": "Scegli cartella", "de": "Ordner auswählen", "pt": "Escolher pasta", - "pl": "Wybierz folder" + "pl": "Wybierz folder", + "nl": "Map kiezen" } }, "button_clear": { @@ -816,7 +878,8 @@ "it": "Cancella", "de": "Löschen", "pt": "Limpar", - "pl": "Wyczyść" + "pl": "Wyczyść", + "nl": "Wissen" } }, "button_close": { @@ -828,7 +891,8 @@ "it": "Chiudi", "de": "Schließen", "pt": "Fechar", - "pl": "Zamknij" + "pl": "Zamknij", + "nl": "Sluiten" } }, "button_create_new_transfer": { @@ -840,7 +904,8 @@ "it": "Nuovo trasferimento", "de": "Neue Übertragung", "pt": "Nova transferência", - "pl": "Nowy transfer" + "pl": "Nowy transfer", + "nl": "Nieuwe overdracht" } }, "button_delete_transfer": { @@ -852,7 +917,8 @@ "it": "Elimina trasferimento", "de": "Übertragung löschen", "pt": "Eliminar transferência", - "pl": "Usuń transfer" + "pl": "Usuń transfer", + "nl": "Overdracht verwijderen" } }, "button_download_invitation": { @@ -864,7 +930,8 @@ "it": "Salva file .vnd", "de": ".vnd-Datei sichern", "pt": "Guardar ficheiro .vnd", - "pl": "Zapisz plik .vnd" + "pl": "Zapisz plik .vnd", + "nl": ".vnd-bestand bewaren" } }, "button_native_share": { @@ -876,7 +943,8 @@ "it": "Condividi invito", "de": "Einladung teilen", "pt": "Partilhar convite", - "pl": "Udostępnij zaproszenie" + "pl": "Udostępnij zaproszenie", + "nl": "Uitnodiging delen" } }, "button_open_settings": { @@ -888,7 +956,8 @@ "it": "Apri Impostazioni", "de": "Einstellungen öffnen", "pt": "Abrir Definições", - "pl": "Otwórz Ustawienia" + "pl": "Otwórz Ustawienia", + "nl": "Instellingen openen" } }, "button_receive": { @@ -900,7 +969,8 @@ "it": "Ricevi", "de": "Empfangen", "pt": "Receber", - "pl": "Odbierz" + "pl": "Odbierz", + "nl": "Ontvangen" } }, "button_receive_files": { @@ -912,7 +982,8 @@ "it": "Inizia a ricevere", "de": "Empfang starten", "pt": "Começar a receber", - "pl": "Rozpocznij odbieranie" + "pl": "Rozpocznij odbieranie", + "nl": "Ontvangen starten" } }, "button_refuse": { @@ -924,7 +995,8 @@ "it": "Rifiuta", "de": "Ablehnen", "pt": "Recusar", - "pl": "Odrzuć" + "pl": "Odrzuć", + "nl": "Weigeren" } }, "button_remove_file": { @@ -936,7 +1008,8 @@ "it": "Rimuovi file", "de": "Datei entfernen", "pt": "Remover ficheiro", - "pl": "Usuń plik" + "pl": "Usuń plik", + "nl": "Bestand verwijderen" } }, "button_reset_default": { @@ -948,7 +1021,8 @@ "it": "Usa predefinito", "de": "Standard verwenden", "pt": "Usar predefinição", - "pl": "Użyj domyślnego" + "pl": "Użyj domyślnego", + "nl": "Standaard gebruiken" } }, "button_retry": { @@ -960,7 +1034,8 @@ "it": "Riprova", "de": "Wiederholen", "pt": "Tentar novamente", - "pl": "Spróbuj ponownie" + "pl": "Spróbuj ponownie", + "nl": "Opnieuw proberen" } }, "button_share_file": { @@ -972,7 +1047,8 @@ "it": "Inizia a condividere", "de": "Freigabe starten", "pt": "Começar a partilhar", - "pl": "Rozpocznij udostępnianie" + "pl": "Rozpocznij udostępnianie", + "nl": "Delen starten" } }, "button_sharing_file": { @@ -984,7 +1060,8 @@ "it": "Preparazione del trasferimento…", "de": "Übertragung wird vorbereitet…", "pt": "A preparar a transferência…", - "pl": "Przygotowywanie transferu…" + "pl": "Przygotowywanie transferu…", + "nl": "Overdracht voorbereiden…" } }, "button_show_in_files": { @@ -996,7 +1073,8 @@ "it": "Mostra in File", "de": "In „Dateien“ anzeigen", "pt": "Mostrar em Ficheiros", - "pl": "Pokaż w Plikach" + "pl": "Pokaż w Plikach", + "nl": "Toon in Bestanden" } }, "button_write_nfc": { @@ -1008,7 +1086,8 @@ "it": "Scrivi su tag NFC", "de": "Auf NFC-Tag schreiben", "pt": "Escrever em etiqueta NFC", - "pl": "Zapisz na tagu NFC" + "pl": "Zapisz na tagu NFC", + "nl": "Naar NFC-tag schrijven" } }, "device_model_title": { @@ -1020,7 +1099,8 @@ "it": "Modello del dispositivo", "de": "Gerätemodell", "pt": "Modelo do dispositivo", - "pl": "Model urządzenia" + "pl": "Model urządzenia", + "nl": "Apparaatmodel" } }, "device_name_title": { @@ -1032,7 +1112,8 @@ "it": "Nome del dispositivo", "de": "Gerätename", "pt": "Nome do dispositivo", - "pl": "Nazwa urządzenia" + "pl": "Nazwa urządzenia", + "nl": "Apparaatnaam" } }, "diagnostics_description": { @@ -1044,7 +1125,8 @@ "it": "Invia report di arresto anomalo ed eventi d’uso anonimi per aiutarci a migliorare VniDrop. Può disattivarlo in qualsiasi momento. Inviti, percorsi dei file e contenuti dei trasferimenti non vengono mai inclusi.", "de": "Anonyme Absturzberichte und Nutzungsereignisse senden, damit wir VniDrop verbessern können. Sie können dies jederzeit deaktivieren. Einladungen, Dateipfade und Übertragungsinhalte werden niemals einbezogen.", "pt": "Enviar relatórios de falhas e eventos de utilização anónimos para nos ajudar a melhorar o VniDrop. Pode desativar isto a qualquer momento. Convites, caminhos de ficheiros e conteúdos das transferências nunca são incluídos.", - "pl": "Wysyłaj anonimowe raporty o awariach i zdarzenia użytkowania, aby pomóc nam ulepszać VniDrop. Możesz to wyłączyć w dowolnej chwili. Zaproszenia, ścieżki plików i zawartość transferów nigdy nie są dołączane." + "pl": "Wysyłaj anonimowe raporty o awariach i zdarzenia użytkowania, aby pomóc nam ulepszać VniDrop. Możesz to wyłączyć w dowolnej chwili. Zaproszenia, ścieżki plików i zawartość transferów nigdy nie są dołączane.", + "nl": "Verstuur anonieme crashrapporten en gebruiksgebeurtenissen zodat we VniDrop kunnen verbeteren. U kunt dit op elk moment uitschakelen. Uitnodigingen, bestandspaden en overdrachtsinhoud worden nooit meegestuurd." } }, "diagnostics_disabled_message": { @@ -1056,7 +1138,8 @@ "it": "La condivisione dei dati diagnostici è disattivata.", "de": "Die Freigabe von Diagnosedaten ist deaktiviert.", "pt": "A partilha de diagnósticos está desativada.", - "pl": "Udostępnianie diagnostyki jest wyłączone." + "pl": "Udostępnianie diagnostyki jest wyłączone.", + "nl": "Het delen van diagnostische gegevens is uitgeschakeld." } }, "diagnostics_enabled_message": { @@ -1068,7 +1151,8 @@ "it": "La condivisione dei dati diagnostici è attivata.", "de": "Die Freigabe von Diagnosedaten ist aktiviert.", "pt": "A partilha de diagnósticos está ativada.", - "pl": "Udostępnianie diagnostyki jest włączone." + "pl": "Udostępnianie diagnostyki jest włączone.", + "nl": "Het delen van diagnostische gegevens is ingeschakeld." } }, "diagnostics_title": { @@ -1080,7 +1164,8 @@ "it": "Condividi dati diagnostici", "de": "Diagnosedaten teilen", "pt": "Partilhar diagnósticos", - "pl": "Udostępniaj diagnostykę" + "pl": "Udostępniaj diagnostykę", + "nl": "Diagnostische gegevens delen" } }, "error_camera": { @@ -1092,7 +1177,8 @@ "it": "Per scansionare un codice QR è necessario l’accesso alla fotocamera.", "de": "Für das Scannen eines QR-Codes ist Kamerazugriff erforderlich.", "pt": "É necessário acesso à câmara para ler um código QR.", - "pl": "Do zeskanowania kodu QR wymagany jest dostęp do aparatu." + "pl": "Do zeskanowania kodu QR wymagany jest dostęp do aparatu.", + "nl": "Voor het scannen van een QR-code is toegang tot de camera vereist." } }, "error_device_info": { @@ -1104,7 +1190,8 @@ "it": "Impossibile caricare le informazioni sul dispositivo.", "de": "Geräteinformationen konnten nicht geladen werden.", "pt": "Não foi possível carregar as informações do dispositivo.", - "pl": "Nie udało się wczytać informacji o urządzeniu." + "pl": "Nie udało się wczytać informacji o urządzeniu.", + "nl": "Apparaatgegevens konden niet worden geladen." } }, "error_filesystem": { @@ -1116,7 +1203,8 @@ "it": "VniDrop non ha potuto accedere ai file o alla cartella selezionati. Controlli le autorizzazioni e riprovi.", "de": "VniDrop konnte nicht auf die ausgewählten Dateien oder den Ordner zugreifen. Überprüfen Sie die Berechtigungen und versuchen Sie es erneut.", "pt": "O VniDrop não conseguiu aceder aos ficheiros ou à pasta selecionados. Verifique as permissões e tente novamente.", - "pl": "VniDrop nie mógł uzyskać dostępu do wybranych plików lub folderu. Sprawdź uprawnienia i spróbuj ponownie." + "pl": "VniDrop nie mógł uzyskać dostępu do wybranych plików lub folderu. Sprawdź uprawnienia i spróbuj ponownie.", + "nl": "VniDrop kon geen toegang krijgen tot de geselecteerde bestanden of map. Controleer de machtigingen en probeer het opnieuw." } }, "error_generic": { @@ -1128,7 +1216,8 @@ "it": "Qualcosa è andato storto. Riprovi.", "de": "Etwas ist schiefgelaufen. Versuchen Sie es erneut.", "pt": "Algo correu mal. Tente novamente.", - "pl": "Coś poszło nie tak. Spróbuj ponownie." + "pl": "Coś poszło nie tak. Spróbuj ponownie.", + "nl": "Er is iets misgegaan. Probeer het opnieuw." } }, "error_initialization": { @@ -1140,7 +1229,8 @@ "it": "VniDrop non ha potuto completare l’avvio. Chiuda l’app e riprovi.", "de": "VniDrop konnte den Start nicht abschließen. Schließen Sie die App und versuchen Sie es erneut.", "pt": "O VniDrop não conseguiu concluir o arranque. Feche a app e tente novamente.", - "pl": "VniDrop nie mógł dokończyć uruchamiania. Zamknij aplikację i spróbuj ponownie." + "pl": "VniDrop nie mógł dokończyć uruchamiania. Zamknij aplikację i spróbuj ponownie.", + "nl": "VniDrop kon het opstarten niet voltooien. Sluit de app en probeer het opnieuw." } }, "error_invalid_ticket": { @@ -1152,7 +1242,8 @@ "it": "Impossibile leggere questo invito. Ne chieda uno nuovo al mittente.", "de": "Diese Einladung konnte nicht gelesen werden. Bitten Sie den Absender um eine neue.", "pt": "Não foi possível ler este convite. Peça um novo ao remetente.", - "pl": "Nie udało się odczytać tego zaproszenia. Poproś nadawcę o nowe." + "pl": "Nie udało się odczytać tego zaproszenia. Poproś nadawcę o nowe.", + "nl": "Deze uitnodiging kon niet worden gelezen. Vraag de afzender om een nieuwe." } }, "error_invitation_empty": { @@ -1164,7 +1255,8 @@ "it": "Questo invito è vuoto. Provi ad aprirlo di nuovo.", "de": "Diese Einladung ist leer. Versuchen Sie, sie erneut zu öffnen.", "pt": "Esse convite está vazio. Tente abri-lo novamente.", - "pl": "To zaproszenie jest puste. Spróbuj otworzyć je ponownie." + "pl": "To zaproszenie jest puste. Spróbuj otworzyć je ponownie.", + "nl": "Die uitnodiging is leeg. Probeer deze opnieuw te openen." } }, "error_missing_native_library": { @@ -1176,7 +1268,8 @@ "it": "La libreria nativa di VniDrop non è presente in questa build.", "de": "Die native VniDrop-Bibliothek fehlt in diesem Build.", "pt": "A biblioteca nativa do VniDrop está em falta nesta compilação.", - "pl": "W tej kompilacji brakuje natywnej biblioteki VniDrop." + "pl": "W tej kompilacji brakuje natywnej biblioteki VniDrop.", + "nl": "De native VniDrop-bibliotheek ontbreekt in deze build." } }, "error_nfc": { @@ -1188,7 +1281,8 @@ "it": "Impossibile usare questo tag NFC. Ne provi un altro.", "de": "Dieses NFC-Tag konnte nicht verwendet werden. Versuchen Sie ein anderes.", "pt": "Não foi possível utilizar esta etiqueta NFC. Tente outra.", - "pl": "Nie udało się użyć tego tagu NFC. Spróbuj innego." + "pl": "Nie udało się użyć tego tagu NFC. Spróbuj innego.", + "nl": "Deze NFC-tag kon niet worden gebruikt. Probeer een andere." } }, "error_permission": { @@ -1200,7 +1294,8 @@ "it": "Il mittente non ha approvato questo trasferimento, oppure è stato rifiutato.", "de": "Der Absender hat diese Übertragung nicht genehmigt oder sie wurde abgelehnt.", "pt": "O remetente não aprovou esta transferência, ou foi recusada.", - "pl": "Nadawca nie zatwierdził tego transferu lub został on odrzucony." + "pl": "Nadawca nie zatwierdził tego transferu lub został on odrzucony.", + "nl": "De afzender heeft deze overdracht niet goedgekeurd, of deze is geweigerd." } }, "error_repository": { @@ -1212,7 +1307,8 @@ "it": "VniDrop non ha potuto salvare i dati del trasferimento su questo dispositivo.", "de": "VniDrop konnte die Übertragungsdaten auf diesem Gerät nicht speichern.", "pt": "O VniDrop não conseguiu guardar os dados da transferência neste dispositivo.", - "pl": "VniDrop nie mógł zapisać danych transferu na tym urządzeniu." + "pl": "VniDrop nie mógł zapisać danych transferu na tym urządzeniu.", + "nl": "VniDrop kon de overdrachtsgegevens niet op dit apparaat bewaren." } }, "error_selection_failed": { @@ -1224,7 +1320,8 @@ "it": "Impossibile aprire l’elemento selezionato. Provi a sceglierlo di nuovo.", "de": "Das ausgewählte Objekt konnte nicht geöffnet werden. Versuchen Sie, es erneut auszuwählen.", "pt": "Não foi possível abrir o item selecionado. Tente escolhê-lo novamente.", - "pl": "Nie udało się otworzyć wybranego elementu. Spróbuj wybrać go ponownie." + "pl": "Nie udało się otworzyć wybranego elementu. Spróbuj wybrać go ponownie.", + "nl": "Het geselecteerde item kon niet worden geopend. Probeer het opnieuw te kiezen." } }, "error_share_empty": { @@ -1236,7 +1333,8 @@ "it": "Selezioni almeno un elemento da condividere.", "de": "Wählen Sie mindestens ein Objekt zum Teilen aus.", "pt": "Selecione pelo menos um item para partilhar.", - "pl": "Wybierz co najmniej jeden element do udostępnienia." + "pl": "Wybierz co najmniej jeden element do udostępnienia.", + "nl": "Selecteer minstens één item om te delen." } }, "error_socket_bind": { @@ -1248,7 +1346,8 @@ "it": "VniDrop non ha potuto aprire i suoi socket di rete su questo dispositivo.", "de": "VniDrop konnte seine Netzwerk-Sockets auf diesem Gerät nicht öffnen.", "pt": "O VniDrop não conseguiu abrir os seus sockets de rede neste dispositivo.", - "pl": "VniDrop nie mógł otworzyć gniazd sieciowych na tym urządzeniu." + "pl": "VniDrop nie mógł otworzyć gniazd sieciowych na tym urządzeniu.", + "nl": "VniDrop kon zijn netwerksockets niet openen op dit apparaat." } }, "error_starting_up": { @@ -1260,7 +1359,8 @@ "it": "VniDrop è ancora in fase di avvio. Riapra l’invito tra un momento.", "de": "VniDrop startet noch. Öffnen Sie die Einladung gleich erneut.", "pt": "O VniDrop ainda está a iniciar. Abra o convite novamente dentro de momentos.", - "pl": "VniDrop jeszcze się uruchamia. Otwórz zaproszenie ponownie za chwilę." + "pl": "VniDrop jeszcze się uruchamia. Otwórz zaproszenie ponownie za chwilę.", + "nl": "VniDrop is nog aan het opstarten. Open de uitnodiging zo meteen opnieuw." } }, "error_transfer": { @@ -1272,7 +1372,8 @@ "it": "Impossibile completare il trasferimento. Controlli la connessione e riprovi.", "de": "Die Übertragung konnte nicht abgeschlossen werden. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.", "pt": "Não foi possível concluir a transferência. Verifique a sua ligação e tente novamente.", - "pl": "Nie udało się ukończyć transferu. Sprawdź połączenie i spróbuj ponownie." + "pl": "Nie udało się ukończyć transferu. Sprawdź połączenie i spróbuj ponownie.", + "nl": "De overdracht kon niet worden voltooid. Controleer uw verbinding en probeer het opnieuw." } }, "field_receiver_name": { @@ -1284,7 +1385,8 @@ "it": "Nome del destinatario", "de": "Empfängername", "pt": "Nome do destinatário", - "pl": "Nazwa odbiorcy" + "pl": "Nazwa odbiorcy", + "nl": "Naam van ontvanger" } }, "field_sender_name": { @@ -1296,7 +1398,8 @@ "it": "Nome del mittente", "de": "Absendername", "pt": "Nome do remetente", - "pl": "Nazwa nadawcy" + "pl": "Nazwa nadawcy", + "nl": "Naam van afzender" } }, "field_transfer_name": { @@ -1308,7 +1411,8 @@ "it": "Nome del trasferimento", "de": "Übertragungsname", "pt": "Nome da transferência", - "pl": "Nazwa transferu" + "pl": "Nazwa transferu", + "nl": "Naam van overdracht" } }, "field_username": { @@ -1320,7 +1424,8 @@ "it": "Nome visualizzato", "de": "Anzeigename", "pt": "Nome a apresentar", - "pl": "Nazwa wyświetlana" + "pl": "Nazwa wyświetlana", + "nl": "Weergavenaam" } }, "folder_status_permission_required": { @@ -1332,7 +1437,8 @@ "it": "Autorizzazione necessaria", "de": "Berechtigung erforderlich", "pt": "Permissão necessária", - "pl": "Wymagane uprawnienie" + "pl": "Wymagane uprawnienie", + "nl": "Machtiging vereist" } }, "folder_status_unavailable": { @@ -1344,7 +1450,8 @@ "it": "Non disponibile", "de": "Nicht verfügbar", "pt": "Indisponível", - "pl": "Niedostępny" + "pl": "Niedostępny", + "nl": "Niet beschikbaar" } }, "folder_status_validating": { @@ -1356,7 +1463,8 @@ "it": "Controllo della cartella…", "de": "Ordner wird geprüft…", "pt": "A verificar a pasta…", - "pl": "Sprawdzanie folderu…" + "pl": "Sprawdzanie folderu…", + "nl": "Map controleren…" } }, "folder_status_writable": { @@ -1368,7 +1476,8 @@ "it": "Pronta", "de": "Bereit", "pt": "Pronto", - "pl": "Gotowy" + "pl": "Gotowy", + "nl": "Gereed" } }, "metadata_files": { @@ -1380,7 +1489,8 @@ "it": "File", "de": "Dateien", "pt": "Ficheiros", - "pl": "Pliki" + "pl": "Pliki", + "nl": "Bestanden" } }, "metadata_size": { @@ -1392,7 +1502,8 @@ "it": "Dimensione", "de": "Größe", "pt": "Tamanho", - "pl": "Rozmiar" + "pl": "Rozmiar", + "nl": "Grootte" } }, "metadata_status": { @@ -1404,7 +1515,8 @@ "it": "Stato", "de": "Status", "pt": "Estado", - "pl": "Status" + "pl": "Status", + "nl": "Status" } }, "nav_receive": { @@ -1416,7 +1528,8 @@ "it": "Ricevi", "de": "Empfangen", "pt": "Receber", - "pl": "Odbierz" + "pl": "Odbierz", + "nl": "Ontvangen" } }, "nav_send": { @@ -1428,7 +1541,8 @@ "it": "Invia", "de": "Senden", "pt": "Enviar", - "pl": "Wyślij" + "pl": "Wyślij", + "nl": "Versturen" } }, "nav_settings": { @@ -1440,7 +1554,8 @@ "it": "Impostazioni", "de": "Einstellungen", "pt": "Definições", - "pl": "Ustawienia" + "pl": "Ustawienia", + "nl": "Instellingen" } }, "network_title": { @@ -1452,7 +1567,8 @@ "it": "Rete", "de": "Netzwerk", "pt": "Rede", - "pl": "Sieć" + "pl": "Sieć", + "nl": "Netwerk" } }, "notifications_description": { @@ -1464,7 +1580,8 @@ "it": "Ricevi avvisi sulle nuove richieste di ricezione quando VniDrop è in background.", "de": "Werden Sie über neue Empfangsanfragen benachrichtigt, während VniDrop im Hintergrund läuft.", "pt": "Seja notificado sobre novos pedidos de receção enquanto o VniDrop está em segundo plano.", - "pl": "Otrzymuj powiadomienia o nowych prośbach o odbiór, gdy VniDrop działa w tle." + "pl": "Otrzymuj powiadomienia o nowych prośbach o odbiór, gdy VniDrop działa w tle.", + "nl": "Ontvang meldingen over nieuwe ontvangstverzoeken terwijl VniDrop op de achtergrond draait." } }, "notifications_enabled_message": { @@ -1476,7 +1593,8 @@ "it": "Notifiche attivate.", "de": "Mitteilungen aktiviert.", "pt": "Notificações ativadas.", - "pl": "Powiadomienia włączone." + "pl": "Powiadomienia włączone.", + "nl": "Meldingen ingeschakeld." } }, "notifications_local_title": { @@ -1488,7 +1606,8 @@ "it": "Consenti le notifiche", "de": "Mitteilungen erlauben", "pt": "Permitir notificações", - "pl": "Zezwól na powiadomienia" + "pl": "Zezwól na powiadomienia", + "nl": "Meldingen toestaan" } }, "notifications_permission_denied": { @@ -1500,7 +1619,8 @@ "it": "Le notifiche sono disattivate per VniDrop. Può attivarle in Impostazioni.", "de": "Mitteilungen sind für VniDrop deaktiviert. Sie können sie in den Einstellungen aktivieren.", "pt": "As notificações estão desativadas para o VniDrop. Pode ativá-las nas Definições.", - "pl": "Powiadomienia są wyłączone dla VniDrop. Możesz je włączyć w Ustawieniach." + "pl": "Powiadomienia są wyłączone dla VniDrop. Możesz je włączyć w Ustawieniach.", + "nl": "Meldingen zijn uitgeschakeld voor VniDrop. U kunt ze inschakelen in Instellingen." } }, "notifications_settings_open_failed": { @@ -1512,7 +1632,8 @@ "it": "Impossibile aprire le impostazioni delle notifiche.", "de": "Die Mitteilungseinstellungen konnten nicht geöffnet werden.", "pt": "Não foi possível abrir as definições de notificações.", - "pl": "Nie udało się otworzyć ustawień powiadomień." + "pl": "Nie udało się otworzyć ustawień powiadomień.", + "nl": "De meldingsinstellingen konden niet worden geopend." } }, "notifications_title": { @@ -1524,7 +1645,8 @@ "it": "Notifiche", "de": "Mitteilungen", "pt": "Notificações", - "pl": "Powiadomienia" + "pl": "Powiadomienia", + "nl": "Meldingen" } }, "notifications_unsupported": { @@ -1536,7 +1658,8 @@ "it": "Le notifiche non sono disponibili su questo dispositivo.", "de": "Mitteilungen sind auf diesem Gerät nicht verfügbar.", "pt": "As notificações não estão disponíveis neste dispositivo.", - "pl": "Powiadomienia nie są dostępne na tym urządzeniu." + "pl": "Powiadomienia nie są dostępne na tym urządzeniu.", + "nl": "Meldingen zijn niet beschikbaar op dit apparaat." } }, "os_version_title": { @@ -1548,7 +1671,8 @@ "it": "Sistema operativo", "de": "Betriebssystem", "pt": "Sistema operativo", - "pl": "System operacyjny" + "pl": "System operacyjny", + "nl": "Besturingssysteem" } }, "preferences_receive_folder_title": { @@ -1560,7 +1684,8 @@ "it": "Salva i trasferimenti ricevuti in", "de": "Empfangene Übertragungen sichern in", "pt": "Guardar as transferências recebidas em", - "pl": "Zapisuj odebrane transfery w" + "pl": "Zapisuj odebrane transfery w", + "nl": "Ontvangen overdrachten bewaren in" } }, "preferences_title": { @@ -1572,7 +1697,8 @@ "it": "Preferenze", "de": "Voreinstellungen", "pt": "Preferências", - "pl": "Preferencje" + "pl": "Preferencje", + "nl": "Voorkeuren" } }, "progress_cancelled": { @@ -1584,7 +1710,8 @@ "it": "Annullato", "de": "Abgebrochen", "pt": "Cancelado", - "pl": "Anulowano" + "pl": "Anulowano", + "nl": "Geannuleerd" } }, "progress_completed": { @@ -1596,7 +1723,8 @@ "it": "Completato", "de": "Abgeschlossen", "pt": "Concluído", - "pl": "Ukończono" + "pl": "Ukończono", + "nl": "Voltooid" } }, "progress_connected": { @@ -1608,7 +1736,8 @@ "it": "Connesso", "de": "Verbunden", "pt": "Ligado", - "pl": "Połączono" + "pl": "Połączono", + "nl": "Verbonden" } }, "progress_connecting": { @@ -1620,7 +1749,8 @@ "it": "Connessione", "de": "Verbinden", "pt": "A ligar", - "pl": "Łączenie" + "pl": "Łączenie", + "nl": "Verbinden" } }, "progress_downloading": { @@ -1632,7 +1762,8 @@ "it": "Download", "de": "Wird geladen", "pt": "A descarregar", - "pl": "Pobieranie" + "pl": "Pobieranie", + "nl": "Downloaden" } }, "progress_failed": { @@ -1644,7 +1775,8 @@ "it": "Non riuscito", "de": "Fehlgeschlagen", "pt": "Falhou", - "pl": "Niepowodzenie" + "pl": "Niepowodzenie", + "nl": "Mislukt" } }, "progress_getting_ready": { @@ -1656,7 +1788,8 @@ "it": "Preparazione", "de": "Wird bereitgemacht", "pt": "A preparar-se", - "pl": "Przygotowywanie" + "pl": "Przygotowywanie", + "nl": "Klaarmaken" } }, "progress_interrupted": { @@ -1668,7 +1801,8 @@ "it": "Trasferimento interrotto", "de": "Übertragung unterbrochen", "pt": "Transferência interrompida", - "pl": "Transfer przerwany" + "pl": "Transfer przerwany", + "nl": "Overdracht onderbroken" } }, "progress_preparing": { @@ -1680,7 +1814,8 @@ "it": "Preparazione", "de": "Wird vorbereitet", "pt": "A preparar", - "pl": "Przygotowywanie" + "pl": "Przygotowywanie", + "nl": "Voorbereiden" } }, "progress_ready": { @@ -1692,7 +1827,8 @@ "it": "Pronto", "de": "Bereit", "pt": "Pronto", - "pl": "Gotowe" + "pl": "Gotowe", + "nl": "Gereed" } }, "progress_receiving": { @@ -1704,7 +1840,8 @@ "it": "Ricezione", "de": "Wird empfangen", "pt": "A receber", - "pl": "Odbieranie" + "pl": "Odbieranie", + "nl": "Ontvangen" } }, "progress_requesting_access": { @@ -1716,7 +1853,8 @@ "it": "Richiesta di accesso", "de": "Zugriff wird angefragt", "pt": "A pedir acesso", - "pl": "Prośba o dostęp" + "pl": "Prośba o dostęp", + "nl": "Toegang aanvragen" } }, "progress_saving": { @@ -1728,7 +1866,8 @@ "it": "Salvataggio", "de": "Wird gesichert", "pt": "A guardar", - "pl": "Zapisywanie" + "pl": "Zapisywanie", + "nl": "Bewaren" } }, "progress_sending": { @@ -1740,7 +1879,8 @@ "it": "Invio", "de": "Wird gesendet", "pt": "A enviar", - "pl": "Wysyłanie" + "pl": "Wysyłanie", + "nl": "Versturen" } }, "progress_sending_to_count": { @@ -1752,7 +1892,8 @@ "it": "Invio a {count}", "de": "Senden an {count}", "pt": "A enviar para {count}", - "pl": "Wysyłanie do {count}" + "pl": "Wysyłanie do {count}", + "nl": "Versturen naar {count}" }, "args": [ { @@ -1770,7 +1911,8 @@ "it": "Pronto per la condivisione", "de": "Bereit zum Teilen", "pt": "Pronto para partilhar", - "pl": "Gotowe do udostępnienia" + "pl": "Gotowe do udostępnienia", + "nl": "Klaar om te delen" } }, "progress_working": { @@ -1782,7 +1924,8 @@ "it": "Elaborazione…", "de": "Wird bearbeitet…", "pt": "A processar…", - "pl": "Przetwarzanie…" + "pl": "Przetwarzanie…", + "nl": "Bezig…" } }, "receive_choose_method_body": { @@ -1794,7 +1937,8 @@ "it": "Scelga il metodo di invito a sua disposizione.", "de": "Wählen Sie die Ihnen zur Verfügung stehende Einladungsmethode.", "pt": "Escolha o método de convite ao seu dispor.", - "pl": "Wybierz dostępną metodę zaproszenia." + "pl": "Wybierz dostępną metodę zaproszenia.", + "nl": "Kies de uitnodigingsmethode die u ter beschikking staat." } }, "receive_choose_method_title": { @@ -1806,7 +1950,8 @@ "it": "Come vuole connettersi?", "de": "Wie möchten Sie sich verbinden?", "pt": "Como pretende ligar-se?", - "pl": "Jak chcesz się połączyć?" + "pl": "Jak chcesz się połączyć?", + "nl": "Hoe wilt u verbinding maken?" } }, "receive_clear_history": { @@ -1818,7 +1963,8 @@ "it": "Cancella cronologia", "de": "Verlauf löschen", "pt": "Limpar histórico", - "pl": "Wyczyść historię" + "pl": "Wyczyść historię", + "nl": "Geschiedenis wissen" } }, "receive_clear_history_description": { @@ -1830,7 +1976,8 @@ "it": "Tutte le ricezioni completate, non riuscite e annullate verranno rimosse dalla cronologia di VniDrop. I file scaricati rimarranno su questo dispositivo.", "de": "Alle abgeschlossenen, fehlgeschlagenen und abgebrochenen Empfänge werden aus dem Verlauf von VniDrop entfernt. Heruntergeladene Dateien verbleiben auf diesem Gerät.", "pt": "Todas as receções concluídas, falhadas e canceladas serão removidas do histórico do VniDrop. Os ficheiros descarregados permanecerão neste dispositivo.", - "pl": "Wszystkie ukończone, nieudane i anulowane odbiory zostaną usunięte z historii VniDrop. Pobrane pliki pozostaną na tym urządzeniu." + "pl": "Wszystkie ukończone, nieudane i anulowane odbiory zostaną usunięte z historii VniDrop. Pobrane pliki pozostaną na tym urządzeniu.", + "nl": "Alle voltooide, mislukte en geannuleerde ontvangsten worden uit de geschiedenis van VniDrop verwijderd. Gedownloade bestanden blijven op dit apparaat." } }, "receive_clear_history_title": { @@ -1842,7 +1989,8 @@ "it": "Cancellare la cronologia di ricezione?", "de": "Empfangsverlauf löschen?", "pt": "Limpar o histórico de receção?", - "pl": "Wyczyścić historię odbioru?" + "pl": "Wyczyścić historię odbioru?", + "nl": "Ontvangstgeschiedenis wissen?" } }, "receive_completed": { @@ -1854,7 +2002,8 @@ "it": "Trasferimento ricevuto.", "de": "Übertragung empfangen.", "pt": "Transferência recebida.", - "pl": "Transfer odebrany." + "pl": "Transfer odebrany.", + "nl": "Overdracht ontvangen." } }, "receive_delete_history_description": { @@ -1872,7 +2021,8 @@ "it": "«{arg1}» verrà rimosso dalla cronologia di VniDrop. Il file scaricato rimarrà su questo dispositivo.", "de": "„{arg1}“ wird aus dem Verlauf von VniDrop entfernt. Die heruntergeladene Datei verbleibt auf diesem Gerät.", "pt": "«{arg1}» será removido do histórico do VniDrop. O ficheiro descarregado permanecerá neste dispositivo.", - "pl": "„{arg1}” zostanie usunięty z historii VniDrop. Pobrany plik pozostanie na tym urządzeniu." + "pl": "„{arg1}” zostanie usunięty z historii VniDrop. Pobrany plik pozostanie na tym urządzeniu.", + "nl": "‘{arg1}’ wordt uit de geschiedenis van VniDrop verwijderd. Het gedownloade bestand blijft op dit apparaat." } }, "receive_delete_history_item": { @@ -1884,7 +2034,8 @@ "it": "Elimina dalla cronologia di ricezione", "de": "Aus Empfangsverlauf löschen", "pt": "Eliminar do histórico de receção", - "pl": "Usuń z historii odbioru" + "pl": "Usuń z historii odbioru", + "nl": "Uit ontvangstgeschiedenis verwijderen" } }, "receive_delete_history_title": { @@ -1896,7 +2047,8 @@ "it": "Rimuovere dalla cronologia?", "de": "Aus dem Verlauf entfernen?", "pt": "Remover do histórico?", - "pl": "Usunąć z historii?" + "pl": "Usunąć z historii?", + "nl": "Uit geschiedenis verwijderen?" } }, "receive_empty_body": { @@ -1908,7 +2060,8 @@ "it": "Apra un invito VniDrop, scansioni un codice QR o avvicini un tag NFC.", "de": "Öffnen Sie eine VniDrop-Einladung, scannen Sie einen QR-Code oder halten Sie das Gerät an ein NFC-Tag.", "pt": "Abra um convite do VniDrop, leia um código QR ou aproxime uma etiqueta NFC.", - "pl": "Otwórz zaproszenie VniDrop, zeskanuj kod QR lub zbliż tag NFC." + "pl": "Otwórz zaproszenie VniDrop, zeskanuj kod QR lub zbliż tag NFC.", + "nl": "Open een VniDrop-uitnodiging, scan een QR-code of houd het apparaat bij een NFC-tag." } }, "receive_empty_title": { @@ -1920,7 +2073,8 @@ "it": "Ancora nulla di ricevuto", "de": "Noch nichts empfangen", "pt": "Ainda não recebeu nada", - "pl": "Nic jeszcze nie odebrano" + "pl": "Nic jeszcze nie odebrano", + "nl": "Nog niets ontvangen" } }, "receive_history_cleared": { @@ -1932,7 +2086,8 @@ "it": "Cronologia di ricezione cancellata.", "de": "Empfangsverlauf gelöscht.", "pt": "Histórico de receção limpo.", - "pl": "Historia odbioru wyczyszczona." + "pl": "Historia odbioru wyczyszczona.", + "nl": "Ontvangstgeschiedenis gewist." } }, "receive_history_title": { @@ -1944,7 +2099,8 @@ "it": "Cronologia", "de": "Verlauf", "pt": "Histórico", - "pl": "Historia" + "pl": "Historia", + "nl": "Geschiedenis" } }, "receive_method_file": { @@ -1956,7 +2112,8 @@ "it": "Apri un invito .vnd", "de": "Eine .vnd-Einladung öffnen", "pt": "Abrir um convite .vnd", - "pl": "Otwórz zaproszenie .vnd" + "pl": "Otwórz zaproszenie .vnd", + "nl": "Een .vnd-uitnodiging openen" } }, "receive_method_file_description": { @@ -1968,7 +2125,8 @@ "it": "Scelga un invito salvato o condiviso su questo dispositivo.", "de": "Wählen Sie eine auf diesem Gerät gespeicherte oder geteilte Einladung.", "pt": "Escolha um convite guardado ou partilhado neste dispositivo.", - "pl": "Wybierz zaproszenie zapisane lub udostępnione na tym urządzeniu." + "pl": "Wybierz zaproszenie zapisane lub udostępnione na tym urządzeniu.", + "nl": "Kies een uitnodiging die op dit apparaat is bewaard of gedeeld." } }, "receive_method_nfc": { @@ -1980,7 +2138,8 @@ "it": "Leggi tag NFC", "de": "NFC-Tag lesen", "pt": "Ler etiqueta NFC", - "pl": "Odczytaj tag NFC" + "pl": "Odczytaj tag NFC", + "nl": "NFC-tag lezen" } }, "receive_method_nfc_description": { @@ -1992,7 +2151,8 @@ "it": "Avvicini questo dispositivo al tag di invito del mittente.", "de": "Halten Sie dieses Gerät an das Einladungs-Tag des Absenders.", "pt": "Aproxime este dispositivo da etiqueta de convite do remetente.", - "pl": "Zbliż to urządzenie do tagu zaproszenia nadawcy." + "pl": "Zbliż to urządzenie do tagu zaproszenia nadawcy.", + "nl": "Houd dit apparaat bij de uitnodigingstag van de afzender." } }, "receive_method_scan": { @@ -2004,7 +2164,8 @@ "it": "Scansiona codice QR", "de": "QR-Code scannen", "pt": "Ler código QR", - "pl": "Zeskanuj kod QR" + "pl": "Zeskanuj kod QR", + "nl": "QR-code scannen" } }, "receive_method_scan_description": { @@ -2016,7 +2177,8 @@ "it": "Usi la fotocamera per scansionare il codice VniDrop del mittente.", "de": "Verwenden Sie die Kamera, um den VniDrop-Code des Absenders zu scannen.", "pt": "Use a câmara para ler o código VniDrop do remetente.", - "pl": "Użyj aparatu, aby zeskanować kod VniDrop nadawcy." + "pl": "Użyj aparatu, aby zeskanować kod VniDrop nadawcy.", + "nl": "Gebruik de camera om de VniDrop-code van de afzender te scannen." } }, "receive_new_subtitle": { @@ -2028,7 +2190,8 @@ "it": "Trasferimenti che ha ricevuto su questo dispositivo.", "de": "Übertragungen, die Sie auf diesem Gerät empfangen haben.", "pt": "Transferências que recebeu neste dispositivo.", - "pl": "Transfery odebrane na tym urządzeniu." + "pl": "Transfery odebrane na tym urządzeniu.", + "nl": "Overdrachten die u op dit apparaat hebt ontvangen." } }, "receive_nfc_waiting": { @@ -2040,7 +2203,8 @@ "it": "Avvicini al tag NFC…", "de": "Halten Sie das Gerät an das NFC-Tag…", "pt": "Aproxime da etiqueta NFC…", - "pl": "Zbliż do tagu NFC…" + "pl": "Zbliż do tagu NFC…", + "nl": "Houd bij de NFC-tag…" } }, "receive_open_files_failed": { @@ -2052,7 +2216,8 @@ "it": "Impossibile aprire VniDrop in File.", "de": "VniDrop konnte in „Dateien“ nicht geöffnet werden.", "pt": "Não foi possível abrir o VniDrop em Ficheiros.", - "pl": "Nie udało się otworzyć VniDrop w Plikach." + "pl": "Nie udało się otworzyć VniDrop w Plikach.", + "nl": "VniDrop kon niet worden geopend in Bestanden." } }, "receive_review_title": { @@ -2064,7 +2229,8 @@ "it": "Rivedi trasferimento", "de": "Übertragung prüfen", "pt": "Rever transferência", - "pl": "Przejrzyj transfer" + "pl": "Przejrzyj transfer", + "nl": "Overdracht controleren" } }, "receive_title": { @@ -2076,7 +2242,8 @@ "it": "Ricevi", "de": "Empfangen", "pt": "Receber", - "pl": "Odbierz" + "pl": "Odbierz", + "nl": "Ontvangen" } }, "receive_unknown_transfer": { @@ -2088,7 +2255,8 @@ "it": "Trasferimento VniDrop", "de": "VniDrop-Übertragung", "pt": "Transferência VniDrop", - "pl": "Transfer VniDrop" + "pl": "Transfer VniDrop", + "nl": "VniDrop-overdracht" } }, "send_access_anyone": { @@ -2100,7 +2268,8 @@ "it": "Chiunque abbia questo trasferimento", "de": "Jeder mit dieser Übertragung", "pt": "Qualquer pessoa com esta transferência", - "pl": "Każdy, kto ma ten transfer" + "pl": "Każdy, kto ma ten transfer", + "nl": "Iedereen met deze overdracht" } }, "send_access_anyone_description": { @@ -2112,7 +2281,8 @@ "it": "Nessuna approvazione richiesta. Da usare solo per elementi che non ha problemi a condividere.", "de": "Keine Genehmigung erforderlich. Verwenden Sie dies nur für Objekte, die Sie unbedenklich teilen können.", "pt": "Não é necessária aprovação. Utilize apenas para itens que não se importe de partilhar.", - "pl": "Nie jest wymagane zatwierdzenie. Używaj tylko dla elementów, które możesz swobodnie udostępniać." + "pl": "Nie jest wymagane zatwierdzenie. Używaj tylko dla elementów, które możesz swobodnie udostępniać.", + "nl": "Geen goedkeuring vereist. Gebruik dit alleen voor items die u gerust kunt delen." } }, "send_access_anyone_warning": { @@ -2124,7 +2294,8 @@ "it": "Chiunque abbia l’invito può scaricare finché non interrompe la condivisione. Non lo usi per elementi privati o sensibili.", "de": "Jeder mit der Einladung kann herunterladen, bis Sie die Freigabe beenden. Verwenden Sie dies nicht für private oder sensible Objekte.", "pt": "Qualquer pessoa com o convite pode descarregar até parar de partilhar. Não utilize para itens privados ou sensíveis.", - "pl": "Każdy, kto ma zaproszenie, może pobierać, dopóki nie zatrzymasz udostępniania. Nie używaj tego dla prywatnych ani wrażliwych elementów." + "pl": "Każdy, kto ma zaproszenie, może pobierać, dopóki nie zatrzymasz udostępniania. Nie używaj tego dla prywatnych ani wrażliwych elementów.", + "nl": "Iedereen met de uitnodiging kan downloaden totdat u stopt met delen. Gebruik dit niet voor privé- of gevoelige items." } }, "send_access_approval": { @@ -2136,7 +2307,8 @@ "it": "Chiedi prima di ogni download", "de": "Vor jedem Download fragen", "pt": "Perguntar antes de cada descarga", - "pl": "Pytaj przed każdym pobraniem" + "pl": "Pytaj przed każdym pobraniem", + "nl": "Vragen vóór elke download" } }, "send_access_approval_description": { @@ -2148,7 +2320,8 @@ "it": "Approva o rifiuta ogni nuovo destinatario.", "de": "Sie genehmigen oder lehnen jeden neuen Empfänger ab.", "pt": "Aprova ou recusa cada novo destinatário.", - "pl": "Zatwierdzasz lub odrzucasz każdego nowego odbiorcę." + "pl": "Zatwierdzasz lub odrzucasz każdego nowego odbiorcę.", + "nl": "U keurt elke nieuwe ontvanger goed of weigert deze." } }, "send_access_title": { @@ -2160,7 +2333,8 @@ "it": "Chi può riceverlo?", "de": "Wer kann sie empfangen?", "pt": "Quem a pode receber?", - "pl": "Kto może to odebrać?" + "pl": "Kto może to odebrać?", + "nl": "Wie kan het ontvangen?" } }, "send_choose_file_body": { @@ -2172,7 +2346,8 @@ "it": "Selezioni file o una cartella da questo dispositivo. Potrà rivedere la selezione prima di creare il trasferimento.", "de": "Wählen Sie Dateien oder einen Ordner auf diesem Gerät aus. Sie können die Auswahl überprüfen, bevor Sie die Übertragung erstellen.", "pt": "Selecione ficheiros ou uma pasta deste dispositivo. Poderá rever a seleção antes de criar a transferência.", - "pl": "Wybierz pliki lub folder z tego urządzenia. Przed utworzeniem transferu możesz przejrzeć wybór." + "pl": "Wybierz pliki lub folder z tego urządzenia. Przed utworzeniem transferu możesz przejrzeć wybór.", + "nl": "Selecteer bestanden of een map op dit apparaat. U kunt de selectie controleren voordat u de overdracht aanmaakt." } }, "send_choose_file_title": { @@ -2184,7 +2359,8 @@ "it": "Scelga cosa condividere", "de": "Wählen Sie, was Sie teilen möchten", "pt": "Escolha o que partilhar", - "pl": "Wybierz, co udostępnić" + "pl": "Wybierz, co udostępnić", + "nl": "Kies wat u wilt delen" } }, "send_empty_body": { @@ -2196,7 +2372,8 @@ "it": "Crei un trasferimento, decida chi può riceverlo, poi inviti queste persone con un codice QR, un tag NFC o un file di invito.", "de": "Erstellen Sie eine Übertragung, entscheiden Sie, wer sie empfangen darf, und laden Sie diese Personen dann mit einem QR-Code, einem NFC-Tag oder einer Einladungsdatei ein.", "pt": "Crie uma transferência, decida quem a pode receber e depois convide essas pessoas com um código QR, uma etiqueta NFC ou um ficheiro de convite.", - "pl": "Utwórz transfer, zdecyduj, kto może go odebrać, a następnie zaproś te osoby za pomocą kodu QR, tagu NFC lub pliku zaproszenia." + "pl": "Utwórz transfer, zdecyduj, kto może go odebrać, a następnie zaproś te osoby za pomocą kodu QR, tagu NFC lub pliku zaproszenia.", + "nl": "Maak een overdracht aan, bepaal wie deze kan ontvangen en nodig die personen vervolgens uit met een QR-code, NFC-tag of uitnodigingsbestand." } }, "send_empty_title": { @@ -2208,7 +2385,8 @@ "it": "Ancora nulla di condiviso", "de": "Noch nichts geteilt", "pt": "Ainda não partilhou nada", - "pl": "Nic jeszcze nie udostępniono" + "pl": "Nic jeszcze nie udostępniono", + "nl": "Nog niets gedeeld" } }, "send_file_size_unknown": { @@ -2220,7 +2398,8 @@ "it": "Dimensione non disponibile", "de": "Größe nicht verfügbar", "pt": "Tamanho indisponível", - "pl": "Rozmiar niedostępny" + "pl": "Rozmiar niedostępny", + "nl": "Grootte niet beschikbaar" } }, "send_folder_label": { @@ -2232,7 +2411,8 @@ "it": "Cartella", "de": "Ordner", "pt": "Pasta", - "pl": "Folder" + "pl": "Folder", + "nl": "Map" } }, "send_new_transfer_description": { @@ -2244,7 +2424,8 @@ "it": "Crea un nuovo trasferimento", "de": "Eine neue Übertragung erstellen", "pt": "Criar uma nova transferência", - "pl": "Utwórz nowy transfer" + "pl": "Utwórz nowy transfer", + "nl": "Een nieuwe overdracht aanmaken" } }, "send_new_transfer_title": { @@ -2256,7 +2437,8 @@ "it": "Nuovo trasferimento", "de": "Neue Übertragung", "pt": "Nova transferência", - "pl": "Nowy transfer" + "pl": "Nowy transfer", + "nl": "Nieuwe overdracht" } }, "send_review_title": { @@ -2268,7 +2450,8 @@ "it": "Rivedi trasferimento", "de": "Übertragung prüfen", "pt": "Rever transferência", - "pl": "Przejrzyj transfer" + "pl": "Przejrzyj transfer", + "nl": "Overdracht controleren" } }, "send_selected_files_count": { @@ -2286,7 +2469,8 @@ "it": "{count} file selezionati", "de": "{count} Dateien ausgewählt", "pt": "{count} ficheiros selecionados", - "pl": "Wybrane pliki: {count}" + "pl": "Wybrane pliki: {count}", + "nl": "{count} bestanden geselecteerd" } }, "send_stop_sharing": { @@ -2298,7 +2482,8 @@ "it": "Interrompi condivisione", "de": "Freigabe beenden", "pt": "Parar de partilhar", - "pl": "Zatrzymaj udostępnianie" + "pl": "Zatrzymaj udostępnianie", + "nl": "Stoppen met delen" } }, "send_stop_sharing_description": { @@ -2310,7 +2495,8 @@ "it": "Questo interrompe il trasferimento e blocca chiunque lo stia scaricando. Rimane nella sua cronologia come Interrotto.", "de": "Dies beendet die Übertragung und unterbricht alle, die sie gerade herunterladen. Sie verbleibt in Ihrem Verlauf als „Beendet“.", "pt": "Isto para a transferência e interrompe quem estiver a descarregá-la. Permanece no seu histórico como Parada.", - "pl": "To zatrzymuje transfer i przerywa każdego, kto go właśnie pobiera. Pozostaje w historii jako Zatrzymany." + "pl": "To zatrzymuje transfer i przerywa każdego, kto go właśnie pobiera. Pozostaje w historii jako Zatrzymany.", + "nl": "Hiermee stopt de overdracht en wordt iedereen die deze op dit moment downloadt onderbroken. De overdracht blijft in uw geschiedenis staan als Gestopt." } }, "send_subtitle": { @@ -2322,7 +2508,8 @@ "it": "Trasferimenti che sta condividendo da questo dispositivo.", "de": "Übertragungen, die Sie von diesem Gerät aus teilen.", "pt": "Transferências que está a partilhar a partir deste dispositivo.", - "pl": "Transfery udostępniane z tego urządzenia." + "pl": "Transfery udostępniane z tego urządzenia.", + "nl": "Overdrachten die u vanaf dit apparaat deelt." } }, "send_title": { @@ -2334,7 +2521,8 @@ "it": "Invia", "de": "Senden", "pt": "Enviar", - "pl": "Wyślij" + "pl": "Wyślij", + "nl": "Versturen" } }, "send_transfer_created": { @@ -2346,7 +2534,8 @@ "it": "Trasferimento creato.", "de": "Übertragung erstellt.", "pt": "Transferência criada.", - "pl": "Transfer utworzony." + "pl": "Transfer utworzony.", + "nl": "Overdracht aangemaakt." } }, "send_transfer_details_title": { @@ -2358,7 +2547,8 @@ "it": "Dettagli del trasferimento", "de": "Übertragungsdetails", "pt": "Detalhes da transferência", - "pl": "Szczegóły transferu" + "pl": "Szczegóły transferu", + "nl": "Overdrachtsdetails" } }, "send_transfers_title": { @@ -2370,7 +2560,8 @@ "it": "I suoi trasferimenti", "de": "Ihre Übertragungen", "pt": "As suas transferências", - "pl": "Twoje transfery" + "pl": "Twoje transfery", + "nl": "Uw overdrachten" } }, "settings_subtitle": { @@ -2382,7 +2573,8 @@ "it": "Il suo nome, dove vengono salvati i trasferimenti, l’aspetto e le notifiche.", "de": "Ihr Name, wo Übertragungen gesichert werden, Darstellung und Mitteilungen.", "pt": "O seu nome, onde as transferências são guardadas, o aspeto e as notificações.", - "pl": "Twoja nazwa, miejsce zapisu transferów, wygląd i powiadomienia." + "pl": "Twoja nazwa, miejsce zapisu transferów, wygląd i powiadomienia.", + "nl": "Uw naam, waar overdrachten worden bewaard, weergave en meldingen." } }, "settings_title": { @@ -2394,7 +2586,8 @@ "it": "Impostazioni", "de": "Einstellungen", "pt": "Definições", - "pl": "Ustawienia" + "pl": "Ustawienia", + "nl": "Instellingen" } }, "snackbar_dismiss": { @@ -2406,7 +2599,8 @@ "it": "Ignora", "de": "Ausblenden", "pt": "Ignorar", - "pl": "Zamknij" + "pl": "Zamknij", + "nl": "Sluiten" } }, "status_available": { @@ -2418,7 +2612,8 @@ "it": "Disponibile", "de": "Verfügbar", "pt": "Disponível", - "pl": "Dostępny" + "pl": "Dostępny", + "nl": "Beschikbaar" } }, "status_cancelled": { @@ -2430,7 +2625,8 @@ "it": "Annullato", "de": "Abgebrochen", "pt": "Cancelado", - "pl": "Anulowany" + "pl": "Anulowany", + "nl": "Geannuleerd" } }, "status_completed": { @@ -2442,7 +2638,8 @@ "it": "Completato", "de": "Abgeschlossen", "pt": "Concluído", - "pl": "Ukończony" + "pl": "Ukończony", + "nl": "Voltooid" } }, "status_failed": { @@ -2454,7 +2651,8 @@ "it": "Non riuscito", "de": "Fehlgeschlagen", "pt": "Falhou", - "pl": "Niepowodzenie" + "pl": "Niepowodzenie", + "nl": "Mislukt" } }, "status_preparing": { @@ -2466,7 +2664,8 @@ "it": "Preparazione", "de": "Wird vorbereitet", "pt": "A preparar", - "pl": "Przygotowywanie" + "pl": "Przygotowywanie", + "nl": "Voorbereiden" } }, "status_receiving": { @@ -2478,7 +2677,8 @@ "it": "Ricezione", "de": "Wird empfangen", "pt": "A receber", - "pl": "Odbieranie" + "pl": "Odbieranie", + "nl": "Ontvangen" } }, "status_stopped": { @@ -2490,7 +2690,8 @@ "it": "Interrotto", "de": "Beendet", "pt": "Parada", - "pl": "Zatrzymany" + "pl": "Zatrzymany", + "nl": "Gestopt" } }, "storage_calculating": { @@ -2502,7 +2703,8 @@ "it": "Calcolo…", "de": "Wird berechnet…", "pt": "A calcular…", - "pl": "Obliczanie…" + "pl": "Obliczanie…", + "nl": "Berekenen…" } }, "storage_delete_transfers": { @@ -2514,7 +2716,8 @@ "it": "Elimina tutti i trasferimenti", "de": "Alle Übertragungen löschen", "pt": "Eliminar todas as transferências", - "pl": "Usuń wszystkie transfery" + "pl": "Usuń wszystkie transfery", + "nl": "Alle overdrachten verwijderen" } }, "storage_delete_transfers_description": { @@ -2526,7 +2729,8 @@ "it": "Questo cancella dalla cronologia tutti i record dei trasferimenti inviati e ricevuti. I suoi file ricevuti non vengono eliminati. Nota: il motore di trasferimento conserva il contenuto memorizzato, quindi i dati di trasferimento potrebbero non diminuire. Questa operazione non può essere annullata.", "de": "Dies löscht alle Datensätze gesendeter und empfangener Übertragungen aus Ihrem Verlauf. Ihre empfangenen Dateien werden nicht gelöscht. Hinweis: Die Übertragungs-Engine behält ihre gespeicherten Inhalte, sodass die Übertragungsdaten möglicherweise nicht abnehmen. Dies kann nicht rückgängig gemacht werden.", "pt": "Isto elimina do seu histórico todos os registos de transferências enviadas e recebidas. Os seus ficheiros recebidos não são eliminados. Nota: o motor de transferência mantém o conteúdo armazenado, pelo que os dados de transferência podem não diminuir. Isto não pode ser anulado.", - "pl": "To usuwa z historii wszystkie rekordy wysłanych i odebranych transferów. Twoje odebrane pliki nie są usuwane. Uwaga: silnik transferu zachowuje przechowywaną zawartość, więc dane transferu mogą się nie zmniejszyć. Tej operacji nie można cofnąć." + "pl": "To usuwa z historii wszystkie rekordy wysłanych i odebranych transferów. Twoje odebrane pliki nie są usuwane. Uwaga: silnik transferu zachowuje przechowywaną zawartość, więc dane transferu mogą się nie zmniejszyć. Tej operacji nie można cofnąć.", + "nl": "Hiermee worden alle records van verzonden en ontvangen overdrachten uit uw geschiedenis gewist. Uw ontvangen bestanden worden niet verwijderd. Let op: de overdrachtsengine bewaart de opgeslagen inhoud, dus de overdrachtsgegevens nemen mogelijk niet af. Dit kan niet ongedaan worden gemaakt." } }, "storage_deleting": { @@ -2538,7 +2742,8 @@ "it": "Eliminazione…", "de": "Wird gelöscht…", "pt": "A eliminar…", - "pl": "Usuwanie…" + "pl": "Usuwanie…", + "nl": "Verwijderen…" } }, "storage_footer": { @@ -2550,7 +2755,8 @@ "it": "I dati di trasferimento sono gestiti dal motore di trasferimento: la sua cronologia più il contenuto dei file che ha condiviso. Il pulsante qui sotto cancella i record dei trasferimenti; il motore conserva il contenuto memorizzato, quindi questo valore potrebbe non diminuire. I file ricevuti sono i file che ha scaricato e non vengono mai eliminati qui.", "de": "Übertragungsdaten werden von der Übertragungs-Engine verwaltet – Ihr Verlauf sowie der Inhalt der von Ihnen geteilten Dateien. Die Schaltfläche unten löscht Ihre Übertragungsdatensätze; die Engine behält ihre gespeicherten Inhalte, sodass dieser Wert möglicherweise nicht sinkt. Empfangene Dateien sind Ihre heruntergeladenen Dateien und werden hier niemals gelöscht.", "pt": "Os dados de transferência são geridos pelo motor de transferência — o seu histórico mais o conteúdo dos ficheiros que partilhou. O botão abaixo elimina os seus registos de transferências; o motor mantém o conteúdo armazenado, pelo que este valor pode não descer. Os ficheiros recebidos são os ficheiros que descarregou e nunca são eliminados aqui.", - "pl": "Danymi transferu zarządza silnik transferu — Twoja historia oraz zawartość udostępnionych plików. Przycisk poniżej usuwa rekordy transferów; silnik zachowuje przechowywaną zawartość, więc ta wartość może się nie zmniejszyć. Odebrane pliki to Twoje pobrane pliki i nigdy nie są tu usuwane." + "pl": "Danymi transferu zarządza silnik transferu — Twoja historia oraz zawartość udostępnionych plików. Przycisk poniżej usuwa rekordy transferów; silnik zachowuje przechowywaną zawartość, więc ta wartość może się nie zmniejszyć. Odebrane pliki to Twoje pobrane pliki i nigdy nie są tu usuwane.", + "nl": "Overdrachtsgegevens worden beheerd door de overdrachtsengine — uw geschiedenis plus de inhoud van de bestanden die u hebt gedeeld. De knop hieronder wist uw overdrachtsrecords; de engine bewaart de opgeslagen inhoud, dus deze waarde daalt mogelijk niet. Ontvangen bestanden zijn uw gedownloade bestanden en worden hier nooit verwijderd." } }, "storage_received_files": { @@ -2562,7 +2768,8 @@ "it": "File ricevuti", "de": "Empfangene Dateien", "pt": "Ficheiros recebidos", - "pl": "Odebrane pliki" + "pl": "Odebrane pliki", + "nl": "Ontvangen bestanden" } }, "storage_temporary": { @@ -2574,7 +2781,8 @@ "it": "File temporanei", "de": "Temporäre Dateien", "pt": "Ficheiros temporários", - "pl": "Pliki tymczasowe" + "pl": "Pliki tymczasowe", + "nl": "Tijdelijke bestanden" } }, "storage_title": { @@ -2586,7 +2794,8 @@ "it": "Archiviazione", "de": "Speicher", "pt": "Armazenamento", - "pl": "Pamięć" + "pl": "Pamięć", + "nl": "Opslag" } }, "storage_total": { @@ -2598,7 +2807,8 @@ "it": "Totale", "de": "Gesamt", "pt": "Total", - "pl": "Łącznie" + "pl": "Łącznie", + "nl": "Totaal" } }, "storage_transfer_data": { @@ -2610,7 +2820,8 @@ "it": "Dati di trasferimento", "de": "Übertragungsdaten", "pt": "Dados de transferência", - "pl": "Dane transferu" + "pl": "Dane transferu", + "nl": "Overdrachtsgegevens" } }, "storage_transfers_deleted": { @@ -2622,7 +2833,8 @@ "it": "Tutti i trasferimenti eliminati", "de": "Alle Übertragungen gelöscht", "pt": "Todas as transferências eliminadas", - "pl": "Usunięto wszystkie transfery" + "pl": "Usunięto wszystkie transfery", + "nl": "Alle overdrachten verwijderd" } }, "transfer_activity_description": { @@ -2634,7 +2846,8 @@ "it": "Veda gli aggiornamenti importanti di questo trasferimento", "de": "Wichtige Aktualisierungen zu dieser Übertragung ansehen", "pt": "Ver as atualizações importantes desta transferência", - "pl": "Zobacz ważne aktualizacje tego transferu" + "pl": "Zobacz ważne aktualizacje tego transferu", + "nl": "Bekijk belangrijke updates voor deze overdracht" } }, "transfer_activity_title": { @@ -2646,7 +2859,8 @@ "it": "Attività", "de": "Aktivität", "pt": "Atividade", - "pl": "Aktywność" + "pl": "Aktywność", + "nl": "Activiteit" } }, "transfer_delete_description": { @@ -2664,7 +2878,8 @@ "it": "«{arg1}» non verrà più condiviso e la sua cronologia di trasferimento verrà rimossa da questo dispositivo.", "de": "„{arg1}“ wird nicht mehr geteilt und sein Übertragungsverlauf wird von diesem Gerät entfernt.", "pt": "«{arg1}» deixará de ser partilhado e o seu histórico de transferência será removido deste dispositivo.", - "pl": "„{arg1}” przestanie być udostępniany, a jego historia transferu zostanie usunięta z tego urządzenia." + "pl": "„{arg1}” przestanie być udostępniany, a jego historia transferu zostanie usunięta z tego urządzenia.", + "nl": "‘{arg1}’ wordt niet meer gedeeld en de overdrachtsgeschiedenis wordt van dit apparaat verwijderd." } }, "transfer_delete_title": { @@ -2676,7 +2891,8 @@ "it": "Eliminare il trasferimento?", "de": "Übertragung löschen?", "pt": "Eliminar a transferência?", - "pl": "Usunąć transfer?" + "pl": "Usunąć transfer?", + "nl": "Overdracht verwijderen?" } }, "transfer_deleted": { @@ -2688,7 +2904,8 @@ "it": "Trasferimento eliminato.", "de": "Übertragung gelöscht.", "pt": "Transferência eliminada.", - "pl": "Transfer usunięty." + "pl": "Transfer usunięty.", + "nl": "Overdracht verwijderd." } }, "transfer_deleting": { @@ -2700,7 +2917,8 @@ "it": "Eliminazione…", "de": "Wird gelöscht…", "pt": "A eliminar…", - "pl": "Usuwanie…" + "pl": "Usuwanie…", + "nl": "Verwijderen…" } }, "transfer_details_title": { @@ -2712,7 +2930,8 @@ "it": "Dettagli del trasferimento", "de": "Übertragungsdetails", "pt": "Detalhes da transferência", - "pl": "Szczegóły transferu" + "pl": "Szczegóły transferu", + "nl": "Overdrachtsdetails" } }, "transfer_event_approved": { @@ -2724,7 +2943,8 @@ "it": "Accesso del destinatario approvato", "de": "Empfängerzugriff genehmigt", "pt": "Acesso do destinatário aprovado", - "pl": "Zatwierdzono dostęp odbiorcy" + "pl": "Zatwierdzono dostęp odbiorcy", + "nl": "Toegang ontvanger goedgekeurd" } }, "transfer_event_completed": { @@ -2736,7 +2956,8 @@ "it": "Un destinatario ha completato il trasferimento", "de": "Ein Empfänger hat die Übertragung abgeschlossen", "pt": "Um destinatário concluiu a transferência", - "pl": "Odbiorca ukończył transfer" + "pl": "Odbiorca ukończył transfer", + "nl": "Een ontvanger heeft de overdracht voltooid" } }, "transfer_event_connecting": { @@ -2748,7 +2969,8 @@ "it": "Connessione al mittente", "de": "Verbindung zum Absender", "pt": "A ligar ao remetente", - "pl": "Łączenie z nadawcą" + "pl": "Łączenie z nadawcą", + "nl": "Verbinden met afzender" } }, "transfer_event_downloading": { @@ -2760,7 +2982,8 @@ "it": "Download", "de": "Wird geladen", "pt": "A descarregar", - "pl": "Pobieranie" + "pl": "Pobieranie", + "nl": "Downloaden" } }, "transfer_event_failed": { @@ -2772,7 +2995,8 @@ "it": "Il trasferimento ha riscontrato un problema", "de": "Bei der Übertragung ist ein Problem aufgetreten", "pt": "A transferência teve um problema", - "pl": "Podczas transferu wystąpił problem" + "pl": "Podczas transferu wystąpił problem", + "nl": "Er is een probleem opgetreden bij de overdracht" } }, "transfer_event_preparing": { @@ -2784,7 +3008,8 @@ "it": "Preparazione del trasferimento", "de": "Ihre Übertragung wird vorbereitet", "pt": "A preparar a sua transferência", - "pl": "Przygotowywanie transferu" + "pl": "Przygotowywanie transferu", + "nl": "Uw overdracht voorbereiden" } }, "transfer_event_ready": { @@ -2796,7 +3021,8 @@ "it": "Pronto per la condivisione", "de": "Bereit zum Teilen", "pt": "Pronto para partilhar", - "pl": "Gotowe do udostępnienia" + "pl": "Gotowe do udostępnienia", + "nl": "Klaar om te delen" } }, "transfer_event_refused": { @@ -2808,7 +3034,8 @@ "it": "Accesso del destinatario rifiutato", "de": "Empfängerzugriff abgelehnt", "pt": "Acesso do destinatário recusado", - "pl": "Odrzucono dostęp odbiorcy" + "pl": "Odrzucono dostęp odbiorcy", + "nl": "Toegang ontvanger geweigerd" } }, "transfer_event_requested": { @@ -2820,7 +3047,8 @@ "it": "Un destinatario ha richiesto l’accesso", "de": "Ein Empfänger hat Zugriff angefragt", "pt": "Um destinatário pediu acesso", - "pl": "Odbiorca poprosił o dostęp" + "pl": "Odbiorca poprosił o dostęp", + "nl": "Een ontvanger heeft toegang aangevraagd" } }, "transfer_event_saving": { @@ -2832,7 +3060,8 @@ "it": "Salvataggio", "de": "Wird gesichert", "pt": "A guardar", - "pl": "Zapisywanie" + "pl": "Zapisywanie", + "nl": "Bewaren" } }, "transfer_event_stopped": { @@ -2844,7 +3073,8 @@ "it": "Condivisione interrotta", "de": "Freigabe beendet", "pt": "Partilha parada", - "pl": "Zatrzymano udostępnianie" + "pl": "Zatrzymano udostępnianie", + "nl": "Delen gestopt" } }, "transfer_event_updated": { @@ -2856,7 +3086,8 @@ "it": "Trasferimento aggiornato", "de": "Übertragung aktualisiert", "pt": "Transferência atualizada", - "pl": "Transfer zaktualizowany" + "pl": "Transfer zaktualizowany", + "nl": "Overdracht bijgewerkt" } }, "transfer_file_count": { @@ -2897,6 +3128,10 @@ "few": "{count} pliki", "many": "{count} plików", "other": "{count} pliku" + }, + "nl": { + "one": "{count} bestand", + "other": "{count} bestanden" } } }, @@ -2909,7 +3144,8 @@ "it": "Invito salvato.", "de": "Einladung gesichert.", "pt": "Convite guardado.", - "pl": "Zaproszenie zapisane." + "pl": "Zaproszenie zapisane.", + "nl": "Uitnodiging bewaard." } }, "transfer_nearby_device": { @@ -2921,7 +3157,8 @@ "it": "Dispositivo nelle vicinanze", "de": "Gerät in der Nähe", "pt": "Dispositivo próximo", - "pl": "Urządzenie w pobliżu" + "pl": "Urządzenie w pobliżu", + "nl": "Apparaat in de buurt" } }, "transfer_nfc_unavailable": { @@ -2933,7 +3170,8 @@ "it": "La scrittura dei tag NFC non è disponibile su questo dispositivo.", "de": "Das Beschreiben von NFC-Tags ist auf diesem Gerät nicht verfügbar.", "pt": "A escrita de etiquetas NFC não está disponível neste dispositivo.", - "pl": "Zapis tagów NFC nie jest dostępny na tym urządzeniu." + "pl": "Zapis tagów NFC nie jest dostępny na tym urządzeniu.", + "nl": "Het schrijven van NFC-tags is niet beschikbaar op dit apparaat." } }, "transfer_nfc_waiting": { @@ -2945,7 +3183,8 @@ "it": "Avvicini il dispositivo a un tag NFC scrivibile.", "de": "Halten Sie Ihr Gerät an ein beschreibbares NFC-Tag.", "pt": "Aproxime o seu dispositivo de uma etiqueta NFC gravável.", - "pl": "Zbliż urządzenie do zapisywalnego tagu NFC." + "pl": "Zbliż urządzenie do zapisywalnego tagu NFC.", + "nl": "Houd uw apparaat bij een beschrijfbare NFC-tag." } }, "transfer_nfc_written": { @@ -2957,7 +3196,8 @@ "it": "Invito scritto sul tag NFC.", "de": "Einladung auf das NFC-Tag geschrieben.", "pt": "Convite escrito na etiqueta NFC.", - "pl": "Zaproszenie zapisane na tagu NFC." + "pl": "Zaproszenie zapisane na tagu NFC.", + "nl": "Uitnodiging naar de NFC-tag geschreven." } }, "transfer_no_activity": { @@ -2969,7 +3209,8 @@ "it": "Non c’è ancora alcuna attività da mostrare.", "de": "Es gibt noch keine Aktivität anzuzeigen.", "pt": "Ainda não há atividade para mostrar.", - "pl": "Nie ma jeszcze aktywności do wyświetlenia." + "pl": "Nie ma jeszcze aktywności do wyświetlenia.", + "nl": "Er is nog geen activiteit om weer te geven." } }, "transfer_no_receivers": { @@ -2981,7 +3222,8 @@ "it": "Nessuno ha ancora richiesto questo trasferimento.", "de": "Noch niemand hat diese Übertragung angefragt.", "pt": "Ainda ninguém pediu esta transferência.", - "pl": "Nikt jeszcze nie poprosił o ten transfer." + "pl": "Nikt jeszcze nie poprosił o ten transfer.", + "nl": "Nog niemand heeft deze overdracht aangevraagd." } }, "transfer_receiver_accepted": { @@ -2993,7 +3235,8 @@ "it": "Approvato: in attesa del completamento", "de": "Genehmigt – wartet auf Abschluss", "pt": "Aprovado — a aguardar conclusão", - "pl": "Zatwierdzono — oczekiwanie na ukończenie" + "pl": "Zatwierdzono — oczekiwanie na ukończenie", + "nl": "Goedgekeurd — wachten op voltooiing" } }, "transfer_receiver_completed": { @@ -3005,7 +3248,8 @@ "it": "Ricevuto correttamente", "de": "Erfolgreich empfangen", "pt": "Recebido com sucesso", - "pl": "Odebrano pomyślnie" + "pl": "Odebrano pomyślnie", + "nl": "Succesvol ontvangen" } }, "transfer_receiver_expired": { @@ -3017,7 +3261,8 @@ "it": "Richiesta scaduta", "de": "Anfrage abgelaufen", "pt": "Pedido expirado", - "pl": "Prośba wygasła" + "pl": "Prośba wygasła", + "nl": "Verzoek verlopen" } }, "transfer_receiver_refused": { @@ -3029,7 +3274,8 @@ "it": "Richiesta rifiutata", "de": "Anfrage abgelehnt", "pt": "Pedido recusado", - "pl": "Prośba odrzucona" + "pl": "Prośba odrzucona", + "nl": "Verzoek geweigerd" } }, "transfer_receiver_requested": { @@ -3041,7 +3287,8 @@ "it": "In attesa della sua approvazione", "de": "Wartet auf Ihre Genehmigung", "pt": "A aguardar a sua aprovação", - "pl": "Oczekiwanie na Twoje zatwierdzenie" + "pl": "Oczekiwanie na Twoje zatwierdzenie", + "nl": "Wachten op uw goedkeuring" } }, "transfer_receiver_unknown": { @@ -3053,7 +3300,8 @@ "it": "Stato non disponibile", "de": "Status nicht verfügbar", "pt": "Estado indisponível", - "pl": "Status niedostępny" + "pl": "Status niedostępny", + "nl": "Status niet beschikbaar" } }, "transfer_receivers_completed_count": { @@ -3071,7 +3319,8 @@ "it": "{count} completati", "de": "{count} abgeschlossen", "pt": "{count} concluídos", - "pl": "Ukończone: {count}" + "pl": "Ukończone: {count}", + "nl": "{count} voltooid" } }, "transfer_receivers_description": { @@ -3083,7 +3332,8 @@ "it": "Richieste, approvazioni e consegne completate", "de": "Anfragen, Genehmigungen und abgeschlossene Zustellungen", "pt": "Pedidos, aprovações e entregas concluídas", - "pl": "Prośby, zatwierdzenia i ukończone dostawy" + "pl": "Prośby, zatwierdzenia i ukończone dostawy", + "nl": "Verzoeken, goedkeuringen en voltooide leveringen" } }, "transfer_receivers_pending": { @@ -3101,7 +3351,8 @@ "it": "{count} in attesa", "de": "{count} warten", "pt": "{count} em espera", - "pl": "Oczekujące: {count}" + "pl": "Oczekujące: {count}", + "nl": "{count} in behandeling" } }, "transfer_receivers_title": { @@ -3113,7 +3364,8 @@ "it": "Destinatari", "de": "Empfänger", "pt": "Destinatários", - "pl": "Odbiorcy" + "pl": "Odbiorcy", + "nl": "Ontvangers" } }, "transfer_scan_qr": { @@ -3125,7 +3377,8 @@ "it": "Scansioni con VniDrop per ricevere questo trasferimento", "de": "Mit VniDrop scannen, um diese Übertragung zu empfangen", "pt": "Leia com o VniDrop para receber esta transferência", - "pl": "Zeskanuj za pomocą VniDrop, aby odebrać ten transfer" + "pl": "Zeskanuj za pomocą VniDrop, aby odebrać ten transfer", + "nl": "Scan met VniDrop om deze overdracht te ontvangen" } }, "transfer_share_description": { @@ -3137,7 +3390,8 @@ "it": "Codice QR, file di invito e opzioni nelle vicinanze", "de": "QR-Code, Einladungsdatei und Optionen in der Nähe", "pt": "Código QR, ficheiro de convite e opções por perto", - "pl": "Kod QR, plik zaproszenia i opcje w pobliżu" + "pl": "Kod QR, plik zaproszenia i opcje w pobliżu", + "nl": "QR-code, uitnodigingsbestand en opties in de buurt" } }, "transfer_share_title": { @@ -3149,7 +3403,8 @@ "it": "Condividi", "de": "Teilen", "pt": "Partilhar", - "pl": "Udostępnij" + "pl": "Udostępnij", + "nl": "Delen" } }, "value_unavailable": { @@ -3161,7 +3416,8 @@ "it": "Non disponibile", "de": "Nicht verfügbar", "pt": "Indisponível", - "pl": "Niedostępne" + "pl": "Niedostępne", + "nl": "Niet beschikbaar" } }, "version_title": { @@ -3173,7 +3429,8 @@ "it": "Versione dell’app", "de": "App-Version", "pt": "Versão da app", - "pl": "Wersja aplikacji" + "pl": "Wersja aplikacji", + "nl": "App-versie" } } } diff --git a/shared/src/commonMain/composeResources/values-nl/strings.xml b/shared/src/commonMain/composeResources/values-nl/strings.xml new file mode 100644 index 0000000..3ade85c --- /dev/null +++ b/shared/src/commonMain/composeResources/values-nl/strings.xml @@ -0,0 +1,257 @@ + + + Een fout melden + VniDrop verplaatst bestanden en mappen rechtstreeks van het ene apparaat naar het andere via het netwerk, zonder ze naar een hostingdienst te uploaden. U hoeft geen account aan te maken en er blijft geen kopie van uw overdracht in de cloud achter zodra u klaar bent. + Een directe overdracht van apparaat naar apparaat — uw bestanden gaan rechtstreeks naar de ontvanger. + Verbindingen zijn geverifieerd en end-to-end versleuteld (via Iroh), en binnenkomende bestanden worden gecontroleerd aan de hand van hun inhouds-hash. + U bepaalt wie ontvangt: keur elk verzoek goed, of stel een overdracht open voor iedereen met de uitnodiging. + Zonder account — er is niets om aan te melden. + Opensource, uitgebracht onder de Apache 2.0-licentie. + Wat VniDrop is + Geen cloudopslag — geen enkele server bewaart uw bestanden en er wacht niets in de cloud na een overdracht. + Geen openbare uitzending — een uitnodiging is een privétoegangslink, geen aankondiging aan iedereen in de buurt. + Geen synchronisatie- of back-updienst. + Wat VniDrop niet is + Licentie + Privacybeleid + Uitnodigingen zijn toegangssleutels. Behandel een QR-code, NFC-tag of .vnd-bestand als een privétoegangslink en deel deze alleen met de bedoelde personen — vooral bij ‘Iedereen met deze overdracht’. + Standaard weigeren — VniDrop levert alleen de inhoud van een actieve deling en wijst onbekende verzoeken af. + Ontvangen bestanden worden op uw apparaat bewaard en overschrijven nooit een bestaand bestand. + Privacybeleid + Als twee apparaten niet rechtstreeks verbinding kunnen maken, kan de versleutelde verbinding via een relay worden doorgestuurd. Relays sturen alleen versleutelde pakketten door; ze slaan uw bestanden nooit op. + Privacy en beveiliging + Verstuur bestanden rechtstreeks. Houd controle over wie ze ontvangt. + Over + De lichte of donkere weergave van dit apparaat volgen. + Donkere modus + Lichte modus + Systeem + Weergave + Ontvangstverzoek + Apparaat-ID: %1$s + Een apparaat in de buurt + %1$d verzoeken in behandeling + %1$s wil ‘%2$s’ ontvangen. + Batterijniveau + naam@voorbeeld.com + Contact-e-mail (optioneel) + Vertel ons wat er misging. We voegen apparaatgegevens toe en optioneel recente logbestanden (met gevoelige waarden onleesbaar gemaakt). + Apparaatgegevens + Beschrijf wat u verwachtte + Wat verwachtte u? + Recente logbestanden meesturen + Helpt ons het probleem te diagnosticeren. Gevoelige waarden worden vóór verzending onleesbaar gemaakt. + Grootte van logbijlage + Beschrijf wat u verwachtte. + Beschrijf wat er gebeurde. + Noem de stappen om het probleem te reproduceren + Stappen om te reproduceren (optioneel) + Rapport versturen + Het foutrapport kon niet worden verstuurd. Probeer het later opnieuw. + Bedankt — uw foutrapport is vastgelegd. + Bezig met versturen… + Beschrijf wat er gebeurde + Wat is er gebeurd? + Goedkeuren + Terug + Annuleren + Annuleren + Bestanden wijzigen + Bestanden kiezen + Map kiezen + Wissen + Sluiten + Nieuwe overdracht + Overdracht verwijderen + .vnd-bestand bewaren + Uitnodiging delen + Instellingen openen + Ontvangen + Ontvangen starten + Weigeren + Bestand verwijderen + Standaard gebruiken + Opnieuw proberen + Delen starten + Overdracht voorbereiden… + Toon in Bestanden + Naar NFC-tag schrijven + Apparaatmodel + Apparaatnaam + Verstuur anonieme crashrapporten en gebruiksgebeurtenissen zodat we VniDrop kunnen verbeteren. U kunt dit op elk moment uitschakelen. Uitnodigingen, bestandspaden en overdrachtsinhoud worden nooit meegestuurd. + Het delen van diagnostische gegevens is uitgeschakeld. + Het delen van diagnostische gegevens is ingeschakeld. + Diagnostische gegevens delen + Voor het scannen van een QR-code is toegang tot de camera vereist. + Apparaatgegevens konden niet worden geladen. + VniDrop kon geen toegang krijgen tot de geselecteerde bestanden of map. Controleer de machtigingen en probeer het opnieuw. + Er is iets misgegaan. Probeer het opnieuw. + VniDrop kon het opstarten niet voltooien. Sluit de app en probeer het opnieuw. + Deze uitnodiging kon niet worden gelezen. Vraag de afzender om een nieuwe. + Die uitnodiging is leeg. Probeer deze opnieuw te openen. + De native VniDrop-bibliotheek ontbreekt in deze build. + Deze NFC-tag kon niet worden gebruikt. Probeer een andere. + De afzender heeft deze overdracht niet goedgekeurd, of deze is geweigerd. + VniDrop kon de overdrachtsgegevens niet op dit apparaat bewaren. + Het geselecteerde item kon niet worden geopend. Probeer het opnieuw te kiezen. + Selecteer minstens één item om te delen. + VniDrop kon zijn netwerksockets niet openen op dit apparaat. + VniDrop is nog aan het opstarten. Open de uitnodiging zo meteen opnieuw. + De overdracht kon niet worden voltooid. Controleer uw verbinding en probeer het opnieuw. + Naam van ontvanger + Naam van afzender + Naam van overdracht + Weergavenaam + Machtiging vereist + Niet beschikbaar + Map controleren… + Gereed + Bestanden + Grootte + Status + Ontvangen + Versturen + Instellingen + Netwerk + Ontvang meldingen over nieuwe ontvangstverzoeken terwijl VniDrop op de achtergrond draait. + Meldingen ingeschakeld. + Meldingen toestaan + Meldingen zijn uitgeschakeld voor VniDrop. U kunt ze inschakelen in Instellingen. + De meldingsinstellingen konden niet worden geopend. + Meldingen + Meldingen zijn niet beschikbaar op dit apparaat. + Besturingssysteem + Ontvangen overdrachten bewaren in + Voorkeuren + Geannuleerd + Voltooid + Verbonden + Verbinden + Downloaden + Mislukt + Klaarmaken + Overdracht onderbroken + Voorbereiden + Gereed + Ontvangen + Toegang aanvragen + Bewaren + Versturen + Versturen naar %1$d + Klaar om te delen + Bezig… + Kies de uitnodigingsmethode die u ter beschikking staat. + Hoe wilt u verbinding maken? + Geschiedenis wissen + Alle voltooide, mislukte en geannuleerde ontvangsten worden uit de geschiedenis van VniDrop verwijderd. Gedownloade bestanden blijven op dit apparaat. + Ontvangstgeschiedenis wissen? + Overdracht ontvangen. + ‘%1$s’ wordt uit de geschiedenis van VniDrop verwijderd. Het gedownloade bestand blijft op dit apparaat. + Uit ontvangstgeschiedenis verwijderen + Uit geschiedenis verwijderen? + Open een VniDrop-uitnodiging, scan een QR-code of houd het apparaat bij een NFC-tag. + Nog niets ontvangen + Ontvangstgeschiedenis gewist. + Geschiedenis + Een .vnd-uitnodiging openen + Kies een uitnodiging die op dit apparaat is bewaard of gedeeld. + NFC-tag lezen + Houd dit apparaat bij de uitnodigingstag van de afzender. + QR-code scannen + Gebruik de camera om de VniDrop-code van de afzender te scannen. + Overdrachten die u op dit apparaat hebt ontvangen. + Houd bij de NFC-tag… + VniDrop kon niet worden geopend in Bestanden. + Overdracht controleren + Ontvangen + VniDrop-overdracht + Iedereen met deze overdracht + Geen goedkeuring vereist. Gebruik dit alleen voor items die u gerust kunt delen. + Iedereen met de uitnodiging kan downloaden totdat u stopt met delen. Gebruik dit niet voor privé- of gevoelige items. + Vragen vóór elke download + U keurt elke nieuwe ontvanger goed of weigert deze. + Wie kan het ontvangen? + Selecteer bestanden of een map op dit apparaat. U kunt de selectie controleren voordat u de overdracht aanmaakt. + Kies wat u wilt delen + Maak een overdracht aan, bepaal wie deze kan ontvangen en nodig die personen vervolgens uit met een QR-code, NFC-tag of uitnodigingsbestand. + Nog niets gedeeld + Grootte niet beschikbaar + Map + Een nieuwe overdracht aanmaken + Nieuwe overdracht + Overdracht controleren + %1$d bestanden geselecteerd + Stoppen met delen + Hiermee stopt de overdracht en wordt iedereen die deze op dit moment downloadt onderbroken. De overdracht blijft in uw geschiedenis staan als Gestopt. + Overdrachten die u vanaf dit apparaat deelt. + Versturen + Overdracht aangemaakt. + Overdrachtsdetails + Uw overdrachten + Uw naam, waar overdrachten worden bewaard, weergave en meldingen. + Instellingen + Sluiten + Beschikbaar + Geannuleerd + Voltooid + Mislukt + Voorbereiden + Ontvangen + Gestopt + Berekenen… + Alle overdrachten verwijderen + Hiermee worden alle records van verzonden en ontvangen overdrachten uit uw geschiedenis gewist. Uw ontvangen bestanden worden niet verwijderd. Let op: de overdrachtsengine bewaart de opgeslagen inhoud, dus de overdrachtsgegevens nemen mogelijk niet af. Dit kan niet ongedaan worden gemaakt. + Verwijderen… + Overdrachtsgegevens worden beheerd door de overdrachtsengine — uw geschiedenis plus de inhoud van de bestanden die u hebt gedeeld. De knop hieronder wist uw overdrachtsrecords; de engine bewaart de opgeslagen inhoud, dus deze waarde daalt mogelijk niet. Ontvangen bestanden zijn uw gedownloade bestanden en worden hier nooit verwijderd. + Ontvangen bestanden + Tijdelijke bestanden + Opslag + Totaal + Overdrachtsgegevens + Alle overdrachten verwijderd + Bekijk belangrijke updates voor deze overdracht + Activiteit + ‘%1$s’ wordt niet meer gedeeld en de overdrachtsgeschiedenis wordt van dit apparaat verwijderd. + Overdracht verwijderen? + Overdracht verwijderd. + Verwijderen… + Overdrachtsdetails + Toegang ontvanger goedgekeurd + Een ontvanger heeft de overdracht voltooid + Verbinden met afzender + Downloaden + Er is een probleem opgetreden bij de overdracht + Uw overdracht voorbereiden + Klaar om te delen + Toegang ontvanger geweigerd + Een ontvanger heeft toegang aangevraagd + Bewaren + Delen gestopt + Overdracht bijgewerkt + Uitnodiging bewaard. + Apparaat in de buurt + Het schrijven van NFC-tags is niet beschikbaar op dit apparaat. + Houd uw apparaat bij een beschrijfbare NFC-tag. + Uitnodiging naar de NFC-tag geschreven. + Er is nog geen activiteit om weer te geven. + Nog niemand heeft deze overdracht aangevraagd. + Goedgekeurd — wachten op voltooiing + Succesvol ontvangen + Verzoek verlopen + Verzoek geweigerd + Wachten op uw goedkeuring + Status niet beschikbaar + %1$d voltooid + Verzoeken, goedkeuringen en voltooide leveringen + %1$d in behandeling + Ontvangers + Scan met VniDrop om deze overdracht te ontvangen + QR-code, uitnodigingsbestand en opties in de buurt + Delen + Niet beschikbaar + App-versie + + %1$d bestand + %1$d bestanden + + From 8178296d92f2cee11874014575c776d13fc191e0 Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 20 Jul 2026 11:38:12 +0200 Subject: [PATCH 12/13] feat(l10n): add Russian translations Translate all 253 user-facing strings to Russian (professional UI register; count strings use number-neutral "label: {count}" form). transfer_file_count uses full CLDR plural categories (one/few/many/other). Generates values-ru/strings.xml for KMP, ru localizations in the Apple catalog, and adds ru to CFBundleLocalizations. Completes the initial 8-language set. --- apple/VniDrop/Resources/Info.plist | 1 + apple/VniDrop/Resources/Localizable.xcstrings | 1542 +++++++++++++++++ localization/strings.json | 765 +++++--- .../composeResources/values-ru/strings.xml | 259 +++ 4 files changed, 2314 insertions(+), 253 deletions(-) create mode 100644 shared/src/commonMain/composeResources/values-ru/strings.xml diff --git a/apple/VniDrop/Resources/Info.plist b/apple/VniDrop/Resources/Info.plist index 0075cbc..904953d 100644 --- a/apple/VniDrop/Resources/Info.plist +++ b/apple/VniDrop/Resources/Info.plist @@ -12,6 +12,7 @@ pt pl nl + ru CADisableMinimumFrameDurationOnPhone diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index dc8f18f..4649aee 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -56,6 +56,12 @@ "state": "needs_review", "value": "%1$@ %2$@ · %3$@" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } } } }, @@ -110,6 +116,12 @@ "state": "needs_review", "value": "%1$@ · %2$@" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } } } }, @@ -168,6 +180,12 @@ "state": "needs_review", "value": "Comunicar um erro" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сообщить об ошибке" + } } } }, @@ -222,6 +240,12 @@ "state": "needs_review", "value": "O VniDrop transfere ficheiros e pastas diretamente de um dispositivo para outro através da rede, sem os carregar para qualquer serviço de alojamento. Não é necessário criar qualquer conta e não fica nenhuma cópia da sua transferência na nuvem depois de terminar." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop передаёт файлы и папки напрямую с одного устройства на другое по сети, не загружая их в какой-либо хостинг-сервис. Не нужно создавать учётную запись, и после завершения ни одна копия вашей передачи не остаётся в облаке." + } } } }, @@ -276,6 +300,12 @@ "state": "needs_review", "value": "Uma transferência direta entre dispositivos — os seus ficheiros vão diretamente para o destinatário." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Прямая передача с устройства на устройство — ваши файлы попадают напрямую к получателю." + } } } }, @@ -330,6 +360,12 @@ "state": "needs_review", "value": "As ligações são autenticadas e cifradas ponto a ponto (através do Iroh), e os ficheiros recebidos são verificados pela impressão digital do seu conteúdo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Соединения аутентифицированы и зашифрованы сквозным шифрованием (через Iroh), а входящие файлы проверяются по хешу их содержимого." + } } } }, @@ -384,6 +420,12 @@ "state": "needs_review", "value": "É você quem decide quem recebe: aprove cada pedido ou abra uma transferência a qualquer pessoa que tenha o convite." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Вы решаете, кто получает: одобряйте каждый запрос или откройте передачу всем, у кого есть приглашение." + } } } }, @@ -438,6 +480,12 @@ "state": "needs_review", "value": "Sem conta — não há nada para registar." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Без учётной записи — регистрироваться не нужно." + } } } }, @@ -492,6 +540,12 @@ "state": "needs_review", "value": "Código aberto, publicado sob a licença Apache 2.0." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Открытый исходный код, распространяется по лицензии Apache 2.0." + } } } }, @@ -546,6 +600,12 @@ "state": "needs_review", "value": "O que o VniDrop é" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Что такое VniDrop" + } } } }, @@ -600,6 +660,12 @@ "state": "needs_review", "value": "Não é armazenamento na nuvem — nenhum servidor guarda os seus ficheiros e nada fica na nuvem após uma transferência." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Это не облачное хранилище — ни один сервер не хранит ваши файлы, и после передачи в облаке ничего не остаётся." + } } } }, @@ -654,6 +720,12 @@ "state": "needs_review", "value": "Não é difusão pública — um convite é uma ligação de acesso privado, não um anúncio a toda a gente por perto." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Это не публичная рассылка — приглашение является частной ссылкой доступа, а не объявлением для всех поблизости." + } } } }, @@ -708,6 +780,12 @@ "state": "needs_review", "value": "Não é um serviço de sincronização ou de cópia de segurança." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Это не служба синхронизации или резервного копирования." + } } } }, @@ -762,6 +840,12 @@ "state": "needs_review", "value": "O que o VniDrop não é" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Чем VniDrop не является" + } } } }, @@ -816,6 +900,12 @@ "state": "needs_review", "value": "Licença" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Лицензия" + } } } }, @@ -870,6 +960,12 @@ "state": "needs_review", "value": "Política de privacidade" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Политика конфиденциальности" + } } } }, @@ -924,6 +1020,12 @@ "state": "needs_review", "value": "Os convites são chaves de acesso. Trate um código QR, uma etiqueta NFC ou um ficheiro .vnd como uma ligação de acesso privado e partilhe-o apenas com as pessoas pretendidas — sobretudo com «Qualquer pessoa com esta transferência»." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Приглашения — это ключи доступа. Относитесь к QR-коду, NFC-метке или файлу .vnd как к частной ссылке доступа и делитесь ими только с теми, для кого они предназначены, особенно при варианте «Любой, у кого есть эта передача»." + } } } }, @@ -978,6 +1080,12 @@ "state": "needs_review", "value": "Recusa por predefinição — o VniDrop apenas fornece o conteúdo de uma partilha ativa e rejeita pedidos desconhecidos." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отказ по умолчанию — VniDrop предоставляет только содержимое активной передачи и отклоняет неизвестные запросы." + } } } }, @@ -1032,6 +1140,12 @@ "state": "needs_review", "value": "Os ficheiros recebidos são guardados no seu dispositivo e nunca substituem um ficheiro existente." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Полученные файлы сохраняются на вашем устройстве и никогда не перезаписывают существующий файл." + } } } }, @@ -1086,6 +1200,12 @@ "state": "needs_review", "value": "Política de privacidade" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Политика конфиденциальности" + } } } }, @@ -1140,6 +1260,12 @@ "state": "needs_review", "value": "Se dois dispositivos não conseguirem ligar-se diretamente, a ligação cifrada pode ser retransmitida. Os retransmissores apenas encaminham pacotes cifrados; nunca guardam os seus ficheiros." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Если два устройства не могут соединиться напрямую, зашифрованное соединение может передаваться через ретранслятор. Ретрансляторы пересылают только зашифрованные пакеты; они никогда не хранят ваши файлы." + } } } }, @@ -1194,6 +1320,12 @@ "state": "needs_review", "value": "Privacidade e segurança" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Конфиденциальность и безопасность" + } } } }, @@ -1248,6 +1380,12 @@ "state": "needs_review", "value": "Envie ficheiros diretamente. Mantenha o controlo sobre quem os recebe." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправляйте файлы напрямую. Сохраняйте контроль над тем, кто их получает." + } } } }, @@ -1302,6 +1440,12 @@ "state": "needs_review", "value": "Acerca de" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "О приложении" + } } } }, @@ -1356,6 +1500,12 @@ "state": "needs_review", "value": "Acompanhar o aspeto claro ou escuro deste dispositivo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Следовать светлому или тёмному оформлению этого устройства." + } } } }, @@ -1410,6 +1560,12 @@ "state": "needs_review", "value": "Modo escuro" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Тёмный режим" + } } } }, @@ -1464,6 +1620,12 @@ "state": "needs_review", "value": "Modo claro" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Светлый режим" + } } } }, @@ -1518,6 +1680,12 @@ "state": "needs_review", "value": "Sistema" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Системный" + } } } }, @@ -1572,6 +1740,12 @@ "state": "needs_review", "value": "Aspeto" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Оформление" + } } } }, @@ -1626,6 +1800,12 @@ "state": "needs_review", "value": "Pedido de receção" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Запрос на получение" + } } } }, @@ -1680,6 +1860,12 @@ "state": "needs_review", "value": "ID do dispositivo: %1$@" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Идентификатор устройства: %1$@" + } } } }, @@ -1734,6 +1920,12 @@ "state": "needs_review", "value": "Um dispositivo próximo" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Устройство поблизости" + } } } }, @@ -1788,6 +1980,12 @@ "state": "needs_review", "value": "%1$d pedidos em espera" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ожидающих запросов: %1$d" + } } } }, @@ -1842,6 +2040,12 @@ "state": "needs_review", "value": "%1$@ quer receber «%2$@»." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ хочет получить «%2$@»." + } } } }, @@ -1896,6 +2100,12 @@ "state": "needs_review", "value": "Nível da bateria" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Уровень заряда" + } } } }, @@ -1950,6 +2160,12 @@ "state": "needs_review", "value": "nome@exemplo.com" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "имя@пример.com" + } } } }, @@ -2004,6 +2220,12 @@ "state": "needs_review", "value": "E-mail de contacto (opcional)" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Контактный e-mail (необязательно)" + } } } }, @@ -2058,6 +2280,12 @@ "state": "needs_review", "value": "Diga-nos o que correu mal. Anexamos informações do dispositivo e, opcionalmente, registos recentes (com os valores sensíveis ocultados)." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Расскажите, что пошло не так. Мы прикладываем сведения об устройстве и, при желании, недавние журналы (конфиденциальные значения скрыты)." + } } } }, @@ -2112,6 +2340,12 @@ "state": "needs_review", "value": "Informações do dispositivo" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сведения об устройстве" + } } } }, @@ -2166,6 +2400,12 @@ "state": "needs_review", "value": "Descreva o que esperava que acontecesse" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Опишите, что вы ожидали" + } } } }, @@ -2220,6 +2460,12 @@ "state": "needs_review", "value": "O que esperava?" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Что вы ожидали?" + } } } }, @@ -2274,6 +2520,12 @@ "state": "needs_review", "value": "Incluir registos recentes" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Включить недавние журналы" + } } } }, @@ -2328,6 +2580,12 @@ "state": "needs_review", "value": "Ajuda-nos a diagnosticar o problema. Os valores sensíveis são ocultados antes do envio." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Помогает нам диагностировать проблему. Конфиденциальные значения скрываются перед отправкой." + } } } }, @@ -2382,6 +2640,12 @@ "state": "needs_review", "value": "Tamanho do anexo de registos" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Размер вложения с журналами" + } } } }, @@ -2436,6 +2700,12 @@ "state": "needs_review", "value": "Descreva o que esperava." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Опишите, что вы ожидали." + } } } }, @@ -2490,6 +2760,12 @@ "state": "needs_review", "value": "Descreva o que aconteceu." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Опишите, что произошло." + } } } }, @@ -2544,6 +2820,12 @@ "state": "needs_review", "value": "Enumere os passos para reproduzir o problema" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Перечислите шаги для воспроизведения проблемы" + } } } }, @@ -2598,6 +2880,12 @@ "state": "needs_review", "value": "Passos para reproduzir (opcional)" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Шаги для воспроизведения (необязательно)" + } } } }, @@ -2652,6 +2940,12 @@ "state": "needs_review", "value": "Enviar relatório" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправить отчёт" + } } } }, @@ -2706,6 +3000,12 @@ "state": "needs_review", "value": "Não foi possível enviar o relatório de erro. Tente novamente mais tarde." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось отправить отчёт об ошибке. Повторите попытку позже." + } } } }, @@ -2760,6 +3060,12 @@ "state": "needs_review", "value": "Obrigado — o seu relatório de erro foi registado." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Спасибо — ваш отчёт об ошибке записан." + } } } }, @@ -2814,6 +3120,12 @@ "state": "needs_review", "value": "A enviar…" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправка…" + } } } }, @@ -2868,6 +3180,12 @@ "state": "needs_review", "value": "Descreva o que aconteceu" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Опишите, что произошло" + } } } }, @@ -2922,6 +3240,12 @@ "state": "needs_review", "value": "O que aconteceu?" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Что произошло?" + } } } }, @@ -2976,6 +3300,12 @@ "state": "needs_review", "value": "Aprovar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Одобрить" + } } } }, @@ -3030,6 +3360,12 @@ "state": "needs_review", "value": "Voltar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Назад" + } } } }, @@ -3084,6 +3420,12 @@ "state": "needs_review", "value": "Cancelar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отмена" + } } } }, @@ -3138,6 +3480,12 @@ "state": "needs_review", "value": "Cancelar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отмена" + } } } }, @@ -3192,6 +3540,12 @@ "state": "needs_review", "value": "Alterar ficheiros" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Изменить файлы" + } } } }, @@ -3246,6 +3600,12 @@ "state": "needs_review", "value": "Escolher ficheiros" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выбрать файлы" + } } } }, @@ -3300,6 +3660,12 @@ "state": "needs_review", "value": "Escolher pasta" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выбрать папку" + } } } }, @@ -3354,6 +3720,12 @@ "state": "needs_review", "value": "Limpar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Очистить" + } } } }, @@ -3408,6 +3780,12 @@ "state": "needs_review", "value": "Fechar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Закрыть" + } } } }, @@ -3462,6 +3840,12 @@ "state": "needs_review", "value": "Nova transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Новая передача" + } } } }, @@ -3516,6 +3900,12 @@ "state": "needs_review", "value": "Eliminar transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удалить передачу" + } } } }, @@ -3570,6 +3960,12 @@ "state": "needs_review", "value": "Guardar ficheiro .vnd" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сохранить файл .vnd" + } } } }, @@ -3624,6 +4020,12 @@ "state": "needs_review", "value": "Partilhar convite" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Поделиться приглашением" + } } } }, @@ -3678,6 +4080,12 @@ "state": "needs_review", "value": "Abrir Definições" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Открыть Настройки" + } } } }, @@ -3732,6 +4140,12 @@ "state": "needs_review", "value": "Receber" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получить" + } } } }, @@ -3786,6 +4200,12 @@ "state": "needs_review", "value": "Começar a receber" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Начать получение" + } } } }, @@ -3840,6 +4260,12 @@ "state": "needs_review", "value": "Recusar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отклонить" + } } } }, @@ -3894,6 +4320,12 @@ "state": "needs_review", "value": "Remover ficheiro" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удалить файл" + } } } }, @@ -3948,6 +4380,12 @@ "state": "needs_review", "value": "Usar predefinição" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "По умолчанию" + } } } }, @@ -4002,6 +4440,12 @@ "state": "needs_review", "value": "Tentar novamente" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Повторить" + } } } }, @@ -4056,6 +4500,12 @@ "state": "needs_review", "value": "Começar a partilhar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Начать раздачу" + } } } }, @@ -4110,6 +4560,12 @@ "state": "needs_review", "value": "A preparar a transferência…" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подготовка передачи…" + } } } }, @@ -4164,6 +4620,12 @@ "state": "needs_review", "value": "Mostrar em Ficheiros" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Показать в Файлах" + } } } }, @@ -4218,6 +4680,12 @@ "state": "needs_review", "value": "Escrever em etiqueta NFC" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Записать на NFC-метку" + } } } }, @@ -4272,6 +4740,12 @@ "state": "needs_review", "value": "Modelo do dispositivo" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Модель устройства" + } } } }, @@ -4326,6 +4800,12 @@ "state": "needs_review", "value": "Nome do dispositivo" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Имя устройства" + } } } }, @@ -4380,6 +4860,12 @@ "state": "needs_review", "value": "Enviar relatórios de falhas e eventos de utilização anónimos para nos ajudar a melhorar o VniDrop. Pode desativar isto a qualquer momento. Convites, caminhos de ficheiros e conteúdos das transferências nunca são incluídos." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправлять анонимные отчёты о сбоях и события использования, чтобы помочь нам улучшать VniDrop. Вы можете отключить это в любой момент. Приглашения, пути к файлам и содержимое передач никогда не включаются." + } } } }, @@ -4434,6 +4920,12 @@ "state": "needs_review", "value": "A partilha de diagnósticos está desativada." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача диагностики отключена." + } } } }, @@ -4488,6 +4980,12 @@ "state": "needs_review", "value": "A partilha de diagnósticos está ativada." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача диагностики включена." + } } } }, @@ -4542,6 +5040,12 @@ "state": "needs_review", "value": "Partilhar diagnósticos" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Делиться диагностикой" + } } } }, @@ -4596,6 +5100,12 @@ "state": "needs_review", "value": "É necessário acesso à câmara para ler um código QR." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Для сканирования QR-кода требуется доступ к камере." + } } } }, @@ -4650,6 +5160,12 @@ "state": "needs_review", "value": "Não foi possível carregar as informações do dispositivo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось загрузить сведения об устройстве." + } } } }, @@ -4704,6 +5220,12 @@ "state": "needs_review", "value": "O VniDrop não conseguiu aceder aos ficheiros ou à pasta selecionados. Verifique as permissões e tente novamente." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop не удалось получить доступ к выбранным файлам или папке. Проверьте разрешения и повторите попытку." + } } } }, @@ -4758,6 +5280,12 @@ "state": "needs_review", "value": "Algo correu mal. Tente novamente." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Что-то пошло не так. Повторите попытку." + } } } }, @@ -4812,6 +5340,12 @@ "state": "needs_review", "value": "O VniDrop não conseguiu concluir o arranque. Feche a app e tente novamente." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop не удалось завершить запуск. Закройте приложение и повторите попытку." + } } } }, @@ -4866,6 +5400,12 @@ "state": "needs_review", "value": "Não foi possível ler este convite. Peça um novo ao remetente." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось прочитать это приглашение. Попросите отправителя прислать новое." + } } } }, @@ -4920,6 +5460,12 @@ "state": "needs_review", "value": "Esse convite está vazio. Tente abri-lo novamente." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Это приглашение пустое. Попробуйте открыть его снова." + } } } }, @@ -4974,6 +5520,12 @@ "state": "needs_review", "value": "A biblioteca nativa do VniDrop está em falta nesta compilação." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "В этой сборке отсутствует нативная библиотека VniDrop." + } } } }, @@ -5028,6 +5580,12 @@ "state": "needs_review", "value": "Não foi possível utilizar esta etiqueta NFC. Tente outra." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось использовать эту NFC-метку. Попробуйте другую." + } } } }, @@ -5082,6 +5640,12 @@ "state": "needs_review", "value": "O remetente não aprovou esta transferência, ou foi recusada." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправитель не одобрил эту передачу, или она была отклонена." + } } } }, @@ -5136,6 +5700,12 @@ "state": "needs_review", "value": "O VniDrop não conseguiu guardar os dados da transferência neste dispositivo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop не удалось сохранить данные передачи на этом устройстве." + } } } }, @@ -5190,6 +5760,12 @@ "state": "needs_review", "value": "Não foi possível abrir o item selecionado. Tente escolhê-lo novamente." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось открыть выбранный объект. Попробуйте выбрать его снова." + } } } }, @@ -5244,6 +5820,12 @@ "state": "needs_review", "value": "Selecione pelo menos um item para partilhar." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выберите хотя бы один объект для отправки." + } } } }, @@ -5298,6 +5880,12 @@ "state": "needs_review", "value": "O VniDrop não conseguiu abrir os seus sockets de rede neste dispositivo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop не удалось открыть сетевые сокеты на этом устройстве." + } } } }, @@ -5352,6 +5940,12 @@ "state": "needs_review", "value": "O VniDrop ainda está a iniciar. Abra o convite novamente dentro de momentos." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop ещё запускается. Откройте приглашение снова через мгновение." + } } } }, @@ -5406,6 +6000,12 @@ "state": "needs_review", "value": "Não foi possível concluir a transferência. Verifique a sua ligação e tente novamente." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось завершить передачу. Проверьте подключение и повторите попытку." + } } } }, @@ -5460,6 +6060,12 @@ "state": "needs_review", "value": "Nome do destinatário" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Имя получателя" + } } } }, @@ -5514,6 +6120,12 @@ "state": "needs_review", "value": "Nome do remetente" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Имя отправителя" + } } } }, @@ -5568,6 +6180,12 @@ "state": "needs_review", "value": "Nome da transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Название передачи" + } } } }, @@ -5622,6 +6240,12 @@ "state": "needs_review", "value": "Nome a apresentar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отображаемое имя" + } } } }, @@ -5676,6 +6300,12 @@ "state": "needs_review", "value": "Permissão necessária" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Требуется разрешение" + } } } }, @@ -5730,6 +6360,12 @@ "state": "needs_review", "value": "Indisponível" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Недоступно" + } } } }, @@ -5784,6 +6420,12 @@ "state": "needs_review", "value": "A verificar a pasta…" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Проверка папки…" + } } } }, @@ -5838,6 +6480,12 @@ "state": "needs_review", "value": "Pronto" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Готово" + } } } }, @@ -5892,6 +6540,12 @@ "state": "needs_review", "value": "Ficheiros" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Файлы" + } } } }, @@ -5946,6 +6600,12 @@ "state": "needs_review", "value": "Tamanho" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Размер" + } } } }, @@ -6000,6 +6660,12 @@ "state": "needs_review", "value": "Estado" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Статус" + } } } }, @@ -6054,6 +6720,12 @@ "state": "needs_review", "value": "Receber" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получить" + } } } }, @@ -6108,6 +6780,12 @@ "state": "needs_review", "value": "Enviar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправить" + } } } }, @@ -6162,6 +6840,12 @@ "state": "needs_review", "value": "Definições" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Настройки" + } } } }, @@ -6216,6 +6900,12 @@ "state": "needs_review", "value": "Rede" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сеть" + } } } }, @@ -6270,6 +6960,12 @@ "state": "needs_review", "value": "Seja notificado sobre novos pedidos de receção enquanto o VniDrop está em segundo plano." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получайте уведомления о новых запросах на получение, пока VniDrop работает в фоне." + } } } }, @@ -6324,6 +7020,12 @@ "state": "needs_review", "value": "Notificações ativadas." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Уведомления включены." + } } } }, @@ -6378,6 +7080,12 @@ "state": "needs_review", "value": "Permitir notificações" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Разрешить уведомления" + } } } }, @@ -6432,6 +7140,12 @@ "state": "needs_review", "value": "As notificações estão desativadas para o VniDrop. Pode ativá-las nas Definições." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Уведомления отключены для VniDrop. Вы можете включить их в Настройках." + } } } }, @@ -6486,6 +7200,12 @@ "state": "needs_review", "value": "Não foi possível abrir as definições de notificações." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось открыть настройки уведомлений." + } } } }, @@ -6540,6 +7260,12 @@ "state": "needs_review", "value": "Notificações" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Уведомления" + } } } }, @@ -6594,6 +7320,12 @@ "state": "needs_review", "value": "As notificações não estão disponíveis neste dispositivo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Уведомления недоступны на этом устройстве." + } } } }, @@ -6648,6 +7380,12 @@ "state": "needs_review", "value": "Sistema operativo" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Операционная система" + } } } }, @@ -6702,6 +7440,12 @@ "state": "needs_review", "value": "Guardar as transferências recebidas em" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сохранять полученные передачи в" + } } } }, @@ -6756,6 +7500,12 @@ "state": "needs_review", "value": "Preferências" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Параметры" + } } } }, @@ -6810,6 +7560,12 @@ "state": "needs_review", "value": "Cancelado" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отменено" + } } } }, @@ -6864,6 +7620,12 @@ "state": "needs_review", "value": "Concluído" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Завершено" + } } } }, @@ -6918,6 +7680,12 @@ "state": "needs_review", "value": "Ligado" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подключено" + } } } }, @@ -6972,6 +7740,12 @@ "state": "needs_review", "value": "A ligar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подключение" + } } } }, @@ -7026,6 +7800,12 @@ "state": "needs_review", "value": "A descarregar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Загрузка" + } } } }, @@ -7080,6 +7860,12 @@ "state": "needs_review", "value": "Falhou" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ошибка" + } } } }, @@ -7134,6 +7920,12 @@ "state": "needs_review", "value": "A preparar-se" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подготовка" + } } } }, @@ -7188,6 +7980,12 @@ "state": "needs_review", "value": "Transferência interrompida" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача прервана" + } } } }, @@ -7242,6 +8040,12 @@ "state": "needs_review", "value": "A preparar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подготовка" + } } } }, @@ -7296,6 +8100,12 @@ "state": "needs_review", "value": "Pronto" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Готово" + } } } }, @@ -7350,6 +8160,12 @@ "state": "needs_review", "value": "A receber" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получение" + } } } }, @@ -7404,6 +8220,12 @@ "state": "needs_review", "value": "A pedir acesso" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Запрос доступа" + } } } }, @@ -7458,6 +8280,12 @@ "state": "needs_review", "value": "A guardar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сохранение" + } } } }, @@ -7512,6 +8340,12 @@ "state": "needs_review", "value": "A enviar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправка" + } } } }, @@ -7566,6 +8400,12 @@ "state": "needs_review", "value": "A enviar para %1$d" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправка получателям: %1$d" + } } } }, @@ -7620,6 +8460,12 @@ "state": "needs_review", "value": "Pronto para partilhar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Готово к раздаче" + } } } }, @@ -7674,6 +8520,12 @@ "state": "needs_review", "value": "A processar…" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Обработка…" + } } } }, @@ -7728,6 +8580,12 @@ "state": "needs_review", "value": "Escolha o método de convite ao seu dispor." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выберите доступный вам способ приглашения." + } } } }, @@ -7782,6 +8640,12 @@ "state": "needs_review", "value": "Como pretende ligar-se?" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Как вы хотите подключиться?" + } } } }, @@ -7836,6 +8700,12 @@ "state": "needs_review", "value": "Limpar histórico" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Очистить историю" + } } } }, @@ -7890,6 +8760,12 @@ "state": "needs_review", "value": "Todas as receções concluídas, falhadas e canceladas serão removidas do histórico do VniDrop. Os ficheiros descarregados permanecerão neste dispositivo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Все завершённые, неудачные и отменённые получения будут удалены из истории VniDrop. Загруженные файлы останутся на этом устройстве." + } } } }, @@ -7944,6 +8820,12 @@ "state": "needs_review", "value": "Limpar o histórico de receção?" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Очистить историю получения?" + } } } }, @@ -7998,6 +8880,12 @@ "state": "needs_review", "value": "Transferência recebida." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача получена." + } } } }, @@ -8052,6 +8940,12 @@ "state": "needs_review", "value": "«%1$@» será removido do histórico do VniDrop. O ficheiro descarregado permanecerá neste dispositivo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "«%1$@» будет удалён из истории VniDrop. Загруженный файл останется на этом устройстве." + } } } }, @@ -8106,6 +9000,12 @@ "state": "needs_review", "value": "Eliminar do histórico de receção" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удалить из истории получения" + } } } }, @@ -8160,6 +9060,12 @@ "state": "needs_review", "value": "Remover do histórico?" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удалить из истории?" + } } } }, @@ -8214,6 +9120,12 @@ "state": "needs_review", "value": "Abra um convite do VniDrop, leia um código QR ou aproxime uma etiqueta NFC." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Откройте приглашение VniDrop, отсканируйте QR-код или поднесите NFC-метку." + } } } }, @@ -8268,6 +9180,12 @@ "state": "needs_review", "value": "Ainda não recebeu nada" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Пока ничего не получено" + } } } }, @@ -8322,6 +9240,12 @@ "state": "needs_review", "value": "Histórico de receção limpo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "История получения очищена." + } } } }, @@ -8376,6 +9300,12 @@ "state": "needs_review", "value": "Histórico" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "История" + } } } }, @@ -8430,6 +9360,12 @@ "state": "needs_review", "value": "Abrir um convite .vnd" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Открыть приглашение .vnd" + } } } }, @@ -8484,6 +9420,12 @@ "state": "needs_review", "value": "Escolha um convite guardado ou partilhado neste dispositivo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выберите приглашение, сохранённое или отправленное на это устройство." + } } } }, @@ -8538,6 +9480,12 @@ "state": "needs_review", "value": "Ler etiqueta NFC" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Прочитать NFC-метку" + } } } }, @@ -8592,6 +9540,12 @@ "state": "needs_review", "value": "Aproxime este dispositivo da etiqueta de convite do remetente." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Поднесите это устройство к метке приглашения отправителя." + } } } }, @@ -8646,6 +9600,12 @@ "state": "needs_review", "value": "Ler código QR" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сканировать QR-код" + } } } }, @@ -8700,6 +9660,12 @@ "state": "needs_review", "value": "Use a câmara para ler o código VniDrop do remetente." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Используйте камеру, чтобы отсканировать код VniDrop отправителя." + } } } }, @@ -8754,6 +9720,12 @@ "state": "needs_review", "value": "Transferências que recebeu neste dispositivo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передачи, полученные на этом устройстве." + } } } }, @@ -8808,6 +9780,12 @@ "state": "needs_review", "value": "Aproxime da etiqueta NFC…" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Поднесите к NFC-метке…" + } } } }, @@ -8862,6 +9840,12 @@ "state": "needs_review", "value": "Não foi possível abrir o VniDrop em Ficheiros." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось открыть VniDrop в Файлах." + } } } }, @@ -8916,6 +9900,12 @@ "state": "needs_review", "value": "Rever transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Проверить передачу" + } } } }, @@ -8970,6 +9960,12 @@ "state": "needs_review", "value": "Receber" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получить" + } } } }, @@ -9024,6 +10020,12 @@ "state": "needs_review", "value": "Transferência VniDrop" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача VniDrop" + } } } }, @@ -9078,6 +10080,12 @@ "state": "needs_review", "value": "Qualquer pessoa com esta transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Любой, у кого есть эта передача" + } } } }, @@ -9132,6 +10140,12 @@ "state": "needs_review", "value": "Não é necessária aprovação. Utilize apenas para itens que não se importe de partilhar." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Одобрение не требуется. Используйте только для объектов, которыми вы готовы поделиться." + } } } }, @@ -9186,6 +10200,12 @@ "state": "needs_review", "value": "Qualquer pessoa com o convite pode descarregar até parar de partilhar. Não utilize para itens privados ou sensíveis." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Любой, у кого есть приглашение, может загружать, пока вы не остановите раздачу. Не используйте это для личных или конфиденциальных объектов." + } } } }, @@ -9240,6 +10260,12 @@ "state": "needs_review", "value": "Perguntar antes de cada descarga" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Спрашивать перед каждой загрузкой" + } } } }, @@ -9294,6 +10320,12 @@ "state": "needs_review", "value": "Aprova ou recusa cada novo destinatário." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Вы одобряете или отклоняете каждого нового получателя." + } } } }, @@ -9348,6 +10380,12 @@ "state": "needs_review", "value": "Quem a pode receber?" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Кто может это получить?" + } } } }, @@ -9402,6 +10440,12 @@ "state": "needs_review", "value": "Selecione ficheiros ou uma pasta deste dispositivo. Poderá rever a seleção antes de criar a transferência." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выберите файлы или папку на этом устройстве. Вы сможете проверить выбор перед созданием передачи." + } } } }, @@ -9456,6 +10500,12 @@ "state": "needs_review", "value": "Escolha o que partilhar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выберите, чем поделиться" + } } } }, @@ -9510,6 +10560,12 @@ "state": "needs_review", "value": "Crie uma transferência, decida quem a pode receber e depois convide essas pessoas com um código QR, uma etiqueta NFC ou um ficheiro de convite." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Создайте передачу, решите, кто может её получить, затем пригласите этих людей с помощью QR-кода, NFC-метки или файла приглашения." + } } } }, @@ -9564,6 +10620,12 @@ "state": "needs_review", "value": "Ainda não partilhou nada" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Пока ничем не поделились" + } } } }, @@ -9618,6 +10680,12 @@ "state": "needs_review", "value": "Tamanho indisponível" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Размер недоступен" + } } } }, @@ -9672,6 +10740,12 @@ "state": "needs_review", "value": "Pasta" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Папка" + } } } }, @@ -9726,6 +10800,12 @@ "state": "needs_review", "value": "Criar uma nova transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Создать новую передачу" + } } } }, @@ -9780,6 +10860,12 @@ "state": "needs_review", "value": "Nova transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Новая передача" + } } } }, @@ -9834,6 +10920,12 @@ "state": "needs_review", "value": "Rever transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Проверить передачу" + } } } }, @@ -9888,6 +10980,12 @@ "state": "needs_review", "value": "%1$d ficheiros selecionados" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выбрано файлов: %1$d" + } } } }, @@ -9942,6 +11040,12 @@ "state": "needs_review", "value": "Parar de partilhar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Остановить раздачу" + } } } }, @@ -9996,6 +11100,12 @@ "state": "needs_review", "value": "Isto para a transferência e interrompe quem estiver a descarregá-la. Permanece no seu histórico como Parada." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Это остановит передачу и прервёт всех, кто сейчас её загружает. Она останется в вашей истории со статусом «Остановлена»." + } } } }, @@ -10050,6 +11160,12 @@ "state": "needs_review", "value": "Transferências que está a partilhar a partir deste dispositivo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передачи, которыми вы делитесь с этого устройства." + } } } }, @@ -10104,6 +11220,12 @@ "state": "needs_review", "value": "Enviar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправить" + } } } }, @@ -10158,6 +11280,12 @@ "state": "needs_review", "value": "Transferência criada." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача создана." + } } } }, @@ -10212,6 +11340,12 @@ "state": "needs_review", "value": "Detalhes da transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сведения о передаче" + } } } }, @@ -10266,6 +11400,12 @@ "state": "needs_review", "value": "As suas transferências" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ваши передачи" + } } } }, @@ -10320,6 +11460,12 @@ "state": "needs_review", "value": "O seu nome, onde as transferências são guardadas, o aspeto e as notificações." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ваше имя, место сохранения передач, оформление и уведомления." + } } } }, @@ -10374,6 +11520,12 @@ "state": "needs_review", "value": "Definições" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Настройки" + } } } }, @@ -10428,6 +11580,12 @@ "state": "needs_review", "value": "Ignorar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Закрыть" + } } } }, @@ -10482,6 +11640,12 @@ "state": "needs_review", "value": "Disponível" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Доступно" + } } } }, @@ -10536,6 +11700,12 @@ "state": "needs_review", "value": "Cancelado" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отменено" + } } } }, @@ -10590,6 +11760,12 @@ "state": "needs_review", "value": "Concluído" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Завершено" + } } } }, @@ -10644,6 +11820,12 @@ "state": "needs_review", "value": "Falhou" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ошибка" + } } } }, @@ -10698,6 +11880,12 @@ "state": "needs_review", "value": "A preparar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подготовка" + } } } }, @@ -10752,6 +11940,12 @@ "state": "needs_review", "value": "A receber" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получение" + } } } }, @@ -10806,6 +12000,12 @@ "state": "needs_review", "value": "Parada" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Остановлено" + } } } }, @@ -10860,6 +12060,12 @@ "state": "needs_review", "value": "A calcular…" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Вычисление…" + } } } }, @@ -10914,6 +12120,12 @@ "state": "needs_review", "value": "Eliminar todas as transferências" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удалить все передачи" + } } } }, @@ -10968,6 +12180,12 @@ "state": "needs_review", "value": "Isto elimina do seu histórico todos os registos de transferências enviadas e recebidas. Os seus ficheiros recebidos não são eliminados. Nota: o motor de transferência mantém o conteúdo armazenado, pelo que os dados de transferência podem não diminuir. Isto não pode ser anulado." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Это удалит из истории все записи об отправленных и полученных передачах. Ваши полученные файлы не удаляются. Примечание: механизм передачи сохраняет своё содержимое, поэтому объём данных передачи может не уменьшиться. Это действие нельзя отменить." + } } } }, @@ -11022,6 +12240,12 @@ "state": "needs_review", "value": "A eliminar…" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удаление…" + } } } }, @@ -11076,6 +12300,12 @@ "state": "needs_review", "value": "Os dados de transferência são geridos pelo motor de transferência — o seu histórico mais o conteúdo dos ficheiros que partilhou. O botão abaixo elimina os seus registos de transferências; o motor mantém o conteúdo armazenado, pelo que este valor pode não descer. Os ficheiros recebidos são os ficheiros que descarregou e nunca são eliminados aqui." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Данными передачи управляет механизм передачи — ваша история плюс содержимое файлов, которыми вы поделились. Кнопка ниже удаляет записи о передачах; механизм сохраняет своё содержимое, поэтому это значение может не уменьшиться. Полученные файлы — это загруженные вами файлы, и они никогда не удаляются здесь." + } } } }, @@ -11130,6 +12360,12 @@ "state": "needs_review", "value": "Ficheiros recebidos" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Полученные файлы" + } } } }, @@ -11184,6 +12420,12 @@ "state": "needs_review", "value": "Ficheiros temporários" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Временные файлы" + } } } }, @@ -11238,6 +12480,12 @@ "state": "needs_review", "value": "Armazenamento" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Хранилище" + } } } }, @@ -11292,6 +12540,12 @@ "state": "needs_review", "value": "Total" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Всего" + } } } }, @@ -11346,6 +12600,12 @@ "state": "needs_review", "value": "Dados de transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Данные передачи" + } } } }, @@ -11400,6 +12660,12 @@ "state": "needs_review", "value": "Todas as transferências eliminadas" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Все передачи удалены" + } } } }, @@ -11454,6 +12720,12 @@ "state": "needs_review", "value": "Ver as atualizações importantes desta transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Просматривайте важные обновления этой передачи" + } } } }, @@ -11508,6 +12780,12 @@ "state": "needs_review", "value": "Atividade" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Активность" + } } } }, @@ -11562,6 +12840,12 @@ "state": "needs_review", "value": "«%1$@» deixará de ser partilhado e o seu histórico de transferência será removido deste dispositivo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "«%1$@» перестанет раздаваться, а её история передачи будет удалена с этого устройства." + } } } }, @@ -11616,6 +12900,12 @@ "state": "needs_review", "value": "Eliminar a transferência?" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удалить передачу?" + } } } }, @@ -11670,6 +12960,12 @@ "state": "needs_review", "value": "Transferência eliminada." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача удалена." + } } } }, @@ -11724,6 +13020,12 @@ "state": "needs_review", "value": "A eliminar…" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удаление…" + } } } }, @@ -11778,6 +13080,12 @@ "state": "needs_review", "value": "Detalhes da transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сведения о передаче" + } } } }, @@ -11832,6 +13140,12 @@ "state": "needs_review", "value": "Acesso do destinatário aprovado" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Доступ получателя одобрен" + } } } }, @@ -11886,6 +13200,12 @@ "state": "needs_review", "value": "Um destinatário concluiu a transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получатель завершил передачу" + } } } }, @@ -11940,6 +13260,12 @@ "state": "needs_review", "value": "A ligar ao remetente" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подключение к отправителю" + } } } }, @@ -11994,6 +13320,12 @@ "state": "needs_review", "value": "A descarregar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Загрузка" + } } } }, @@ -12048,6 +13380,12 @@ "state": "needs_review", "value": "A transferência teve um problema" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "При передаче возникла проблема" + } } } }, @@ -12102,6 +13440,12 @@ "state": "needs_review", "value": "A preparar a sua transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подготовка вашей передачи" + } } } }, @@ -12156,6 +13500,12 @@ "state": "needs_review", "value": "Pronto para partilhar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Готово к раздаче" + } } } }, @@ -12210,6 +13560,12 @@ "state": "needs_review", "value": "Acesso do destinatário recusado" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Доступ получателя отклонён" + } } } }, @@ -12264,6 +13620,12 @@ "state": "needs_review", "value": "Um destinatário pediu acesso" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получатель запросил доступ" + } } } }, @@ -12318,6 +13680,12 @@ "state": "needs_review", "value": "A guardar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сохранение" + } } } }, @@ -12372,6 +13740,12 @@ "state": "needs_review", "value": "Partilha parada" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Раздача остановлена" + } } } }, @@ -12426,6 +13800,12 @@ "state": "needs_review", "value": "Transferência atualizada" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача обновлена" + } } } }, @@ -12588,6 +13968,36 @@ } } } + }, + "ru": { + "variations": { + "plural": { + "few": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d файла" + } + }, + "many": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d файлов" + } + }, + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d файл" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d файла" + } + } + } + } } } }, @@ -12642,6 +14052,12 @@ "state": "needs_review", "value": "Convite guardado." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Приглашение сохранено." + } } } }, @@ -12696,6 +14112,12 @@ "state": "needs_review", "value": "Dispositivo próximo" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Устройство поблизости" + } } } }, @@ -12750,6 +14172,12 @@ "state": "needs_review", "value": "A escrita de etiquetas NFC não está disponível neste dispositivo." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Запись NFC-меток недоступна на этом устройстве." + } } } }, @@ -12804,6 +14232,12 @@ "state": "needs_review", "value": "Aproxime o seu dispositivo de uma etiqueta NFC gravável." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Поднесите устройство к записываемой NFC-метке." + } } } }, @@ -12858,6 +14292,12 @@ "state": "needs_review", "value": "Convite escrito na etiqueta NFC." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Приглашение записано на NFC-метку." + } } } }, @@ -12912,6 +14352,12 @@ "state": "needs_review", "value": "Ainda não há atividade para mostrar." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Пока нет активности для отображения." + } } } }, @@ -12966,6 +14412,12 @@ "state": "needs_review", "value": "Ainda ninguém pediu esta transferência." } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Никто ещё не запросил эту передачу." + } } } }, @@ -13020,6 +14472,12 @@ "state": "needs_review", "value": "Aprovado — a aguardar conclusão" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Одобрено — ожидание завершения" + } } } }, @@ -13074,6 +14532,12 @@ "state": "needs_review", "value": "Recebido com sucesso" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Успешно получено" + } } } }, @@ -13128,6 +14592,12 @@ "state": "needs_review", "value": "Pedido expirado" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Запрос истёк" + } } } }, @@ -13182,6 +14652,12 @@ "state": "needs_review", "value": "Pedido recusado" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Запрос отклонён" + } } } }, @@ -13236,6 +14712,12 @@ "state": "needs_review", "value": "A aguardar a sua aprovação" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ожидание вашего одобрения" + } } } }, @@ -13290,6 +14772,12 @@ "state": "needs_review", "value": "Estado indisponível" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Статус недоступен" + } } } }, @@ -13344,6 +14832,12 @@ "state": "needs_review", "value": "%1$d concluídos" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Завершено: %1$d" + } } } }, @@ -13398,6 +14892,12 @@ "state": "needs_review", "value": "Pedidos, aprovações e entregas concluídas" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Запросы, одобрения и завершённые доставки" + } } } }, @@ -13452,6 +14952,12 @@ "state": "needs_review", "value": "%1$d em espera" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ожидают: %1$d" + } } } }, @@ -13506,6 +15012,12 @@ "state": "needs_review", "value": "Destinatários" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получатели" + } } } }, @@ -13560,6 +15072,12 @@ "state": "needs_review", "value": "Leia com o VniDrop para receber esta transferência" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отсканируйте с помощью VniDrop, чтобы получить эту передачу" + } } } }, @@ -13614,6 +15132,12 @@ "state": "needs_review", "value": "Código QR, ficheiro de convite e opções por perto" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "QR-код, файл приглашения и варианты поблизости" + } } } }, @@ -13668,6 +15192,12 @@ "state": "needs_review", "value": "Partilhar" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Поделиться" + } } } }, @@ -13722,6 +15252,12 @@ "state": "needs_review", "value": "Indisponível" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Недоступно" + } } } }, @@ -13776,6 +15312,12 @@ "state": "needs_review", "value": "Versão da app" } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Версия приложения" + } } } } diff --git a/localization/strings.json b/localization/strings.json index 22d21ca..2d6e710 100644 --- a/localization/strings.json +++ b/localization/strings.json @@ -9,7 +9,8 @@ "de", "pt", "pl", - "nl" + "nl", + "ru" ], "strings": { "%@": { @@ -45,7 +46,8 @@ "de": "{arg1} {arg2} · {arg3}", "pt": "{arg1} {arg2} · {arg3}", "pl": "{arg1} {arg2} · {arg3}", - "nl": "{arg1} {arg2} · {arg3}" + "nl": "{arg1} {arg2} · {arg3}", + "ru": "{arg1} {arg2} · {arg3}" } }, "%@ · %@": { @@ -71,7 +73,8 @@ "de": "{arg1} · {arg2}", "pt": "{arg1} · {arg2}", "pl": "{arg1} · {arg2}", - "nl": "{arg1} · {arg2}" + "nl": "{arg1} · {arg2}", + "ru": "{arg1} · {arg2}" } }, "%@%%": { @@ -90,7 +93,8 @@ "de": "Fehler melden", "pt": "Comunicar um erro", "pl": "Zgłoś błąd", - "nl": "Een fout melden" + "nl": "Een fout melden", + "ru": "Сообщить об ошибке" } }, "about_description": { @@ -103,7 +107,8 @@ "de": "VniDrop überträgt Dateien und Ordner direkt von einem Gerät auf ein anderes über das Netzwerk, ohne sie auf einen Hosting-Dienst hochzuladen. Es muss kein Konto erstellt werden, und nach Abschluss verbleibt keine Kopie Ihrer Übertragung in der Cloud.", "pt": "O VniDrop transfere ficheiros e pastas diretamente de um dispositivo para outro através da rede, sem os carregar para qualquer serviço de alojamento. Não é necessário criar qualquer conta e não fica nenhuma cópia da sua transferência na nuvem depois de terminar.", "pl": "VniDrop przesyła pliki i foldery bezpośrednio z jednego urządzenia na drugie przez sieć, bez przesyłania ich do jakiejkolwiek usługi hostingowej. Nie trzeba zakładać konta, a po zakończeniu żadna kopia transferu nie pozostaje w chmurze.", - "nl": "VniDrop verplaatst bestanden en mappen rechtstreeks van het ene apparaat naar het andere via het netwerk, zonder ze naar een hostingdienst te uploaden. U hoeft geen account aan te maken en er blijft geen kopie van uw overdracht in de cloud achter zodra u klaar bent." + "nl": "VniDrop verplaatst bestanden en mappen rechtstreeks van het ene apparaat naar het andere via het netwerk, zonder ze naar een hostingdienst te uploaden. U hoeft geen account aan te maken en er blijft geen kopie van uw overdracht in de cloud achter zodra u klaar bent.", + "ru": "VniDrop передаёт файлы и папки напрямую с одного устройства на другое по сети, не загружая их в какой-либо хостинг-сервис. Не нужно создавать учётную запись, и после завершения ни одна копия вашей передачи не остаётся в облаке." } }, "about_is_direct": { @@ -116,7 +121,8 @@ "de": "Eine direkte Gerät-zu-Gerät-Übertragung – Ihre Dateien gehen direkt an den Empfänger.", "pt": "Uma transferência direta entre dispositivos — os seus ficheiros vão diretamente para o destinatário.", "pl": "Bezpośredni transfer między urządzeniami — pliki trafiają prosto do odbiorcy.", - "nl": "Een directe overdracht van apparaat naar apparaat — uw bestanden gaan rechtstreeks naar de ontvanger." + "nl": "Een directe overdracht van apparaat naar apparaat — uw bestanden gaan rechtstreeks naar de ontvanger.", + "ru": "Прямая передача с устройства на устройство — ваши файлы попадают напрямую к получателю." } }, "about_is_encrypted": { @@ -129,7 +135,8 @@ "de": "Verbindungen sind authentifiziert und Ende-zu-Ende-verschlüsselt (über Iroh), und eingehende Dateien werden anhand ihres Inhalts-Hashs überprüft.", "pt": "As ligações são autenticadas e cifradas ponto a ponto (através do Iroh), e os ficheiros recebidos são verificados pela impressão digital do seu conteúdo.", "pl": "Połączenia są uwierzytelniane i szyfrowane od końca do końca (przez Iroh), a przychodzące pliki są weryfikowane na podstawie skrótu ich zawartości.", - "nl": "Verbindingen zijn geverifieerd en end-to-end versleuteld (via Iroh), en binnenkomende bestanden worden gecontroleerd aan de hand van hun inhouds-hash." + "nl": "Verbindingen zijn geverifieerd en end-to-end versleuteld (via Iroh), en binnenkomende bestanden worden gecontroleerd aan de hand van hun inhouds-hash.", + "ru": "Соединения аутентифицированы и зашифрованы сквозным шифрованием (через Iroh), а входящие файлы проверяются по хешу их содержимого." } }, "about_is_in_control": { @@ -142,7 +149,8 @@ "de": "Sie entscheiden, wer empfängt: Genehmigen Sie jede Anfrage oder öffnen Sie eine Übertragung für alle, die die Einladung besitzen.", "pt": "É você quem decide quem recebe: aprove cada pedido ou abra uma transferência a qualquer pessoa que tenha o convite.", "pl": "To Ty decydujesz, kto otrzymuje: zatwierdź każde żądanie lub udostępnij transfer każdemu, kto ma zaproszenie.", - "nl": "U bepaalt wie ontvangt: keur elk verzoek goed, of stel een overdracht open voor iedereen met de uitnodiging." + "nl": "U bepaalt wie ontvangt: keur elk verzoek goed, of stel een overdracht open voor iedereen met de uitnodiging.", + "ru": "Вы решаете, кто получает: одобряйте каждый запрос или откройте передачу всем, у кого есть приглашение." } }, "about_is_no_account": { @@ -155,7 +163,8 @@ "de": "Ohne Konto – es gibt nichts zu registrieren.", "pt": "Sem conta — não há nada para registar.", "pl": "Bez konta — nie trzeba się rejestrować.", - "nl": "Zonder account — er is niets om aan te melden." + "nl": "Zonder account — er is niets om aan te melden.", + "ru": "Без учётной записи — регистрироваться не нужно." } }, "about_is_open": { @@ -168,7 +177,8 @@ "de": "Open Source, veröffentlicht unter der Apache-2.0-Lizenz.", "pt": "Código aberto, publicado sob a licença Apache 2.0.", "pl": "Otwarte oprogramowanie, wydane na licencji Apache 2.0.", - "nl": "Opensource, uitgebracht onder de Apache 2.0-licentie." + "nl": "Opensource, uitgebracht onder de Apache 2.0-licentie.", + "ru": "Открытый исходный код, распространяется по лицензии Apache 2.0." } }, "about_is_title": { @@ -181,7 +191,8 @@ "de": "Was VniDrop ist", "pt": "O que o VniDrop é", "pl": "Czym jest VniDrop", - "nl": "Wat VniDrop is" + "nl": "Wat VniDrop is", + "ru": "Что такое VniDrop" } }, "about_isnt_cloud": { @@ -194,7 +205,8 @@ "de": "Kein Cloud-Speicher – kein Server hält Ihre Dateien, und nach einer Übertragung wartet nichts in der Cloud.", "pt": "Não é armazenamento na nuvem — nenhum servidor guarda os seus ficheiros e nada fica na nuvem após uma transferência.", "pl": "To nie magazyn w chmurze — żaden serwer nie przechowuje Twoich plików i nic nie pozostaje w chmurze po transferze.", - "nl": "Geen cloudopslag — geen enkele server bewaart uw bestanden en er wacht niets in de cloud na een overdracht." + "nl": "Geen cloudopslag — geen enkele server bewaart uw bestanden en er wacht niets in de cloud na een overdracht.", + "ru": "Это не облачное хранилище — ни один сервер не хранит ваши файлы, и после передачи в облаке ничего не остаётся." } }, "about_isnt_public": { @@ -207,7 +219,8 @@ "de": "Keine öffentliche Übertragung – eine Einladung ist ein privater Zugangslink, keine Ankündigung an alle in der Nähe.", "pt": "Não é difusão pública — um convite é uma ligação de acesso privado, não um anúncio a toda a gente por perto.", "pl": "To nie publiczne rozgłaszanie — zaproszenie to prywatny link dostępu, a nie ogłoszenie dla wszystkich w pobliżu.", - "nl": "Geen openbare uitzending — een uitnodiging is een privétoegangslink, geen aankondiging aan iedereen in de buurt." + "nl": "Geen openbare uitzending — een uitnodiging is een privétoegangslink, geen aankondiging aan iedereen in de buurt.", + "ru": "Это не публичная рассылка — приглашение является частной ссылкой доступа, а не объявлением для всех поблизости." } }, "about_isnt_sync": { @@ -220,7 +233,8 @@ "de": "Kein Synchronisierungs- oder Backup-Dienst.", "pt": "Não é um serviço de sincronização ou de cópia de segurança.", "pl": "To nie usługa synchronizacji ani kopii zapasowej.", - "nl": "Geen synchronisatie- of back-updienst." + "nl": "Geen synchronisatie- of back-updienst.", + "ru": "Это не служба синхронизации или резервного копирования." } }, "about_isnt_title": { @@ -233,7 +247,8 @@ "de": "Was VniDrop nicht ist", "pt": "O que o VniDrop não é", "pl": "Czym VniDrop nie jest", - "nl": "Wat VniDrop niet is" + "nl": "Wat VniDrop niet is", + "ru": "Чем VniDrop не является" } }, "about_license_label": { @@ -246,7 +261,8 @@ "de": "Lizenz", "pt": "Licença", "pl": "Licencja", - "nl": "Licentie" + "nl": "Licentie", + "ru": "Лицензия" } }, "about_privacy": { @@ -259,7 +275,8 @@ "de": "Datenschutzrichtlinie", "pt": "Política de privacidade", "pl": "Polityka prywatności", - "nl": "Privacybeleid" + "nl": "Privacybeleid", + "ru": "Политика конфиденциальности" } }, "about_privacy_capability": { @@ -272,7 +289,8 @@ "de": "Einladungen sind Zugangsschlüssel. Behandeln Sie einen QR-Code, ein NFC-Tag oder eine .vnd-Datei wie einen privaten Zugangslink und teilen Sie ihn nur mit den vorgesehenen Personen – insbesondere bei „Jeder mit dieser Übertragung“.", "pt": "Os convites são chaves de acesso. Trate um código QR, uma etiqueta NFC ou um ficheiro .vnd como uma ligação de acesso privado e partilhe-o apenas com as pessoas pretendidas — sobretudo com «Qualquer pessoa com esta transferência».", "pl": "Zaproszenia są kluczami dostępu. Traktuj kod QR, tag NFC lub plik .vnd jak prywatny link dostępu i udostępniaj go tylko zamierzonym osobom — zwłaszcza przy opcji „Każdy, kto ma ten transfer”.", - "nl": "Uitnodigingen zijn toegangssleutels. Behandel een QR-code, NFC-tag of .vnd-bestand als een privétoegangslink en deel deze alleen met de bedoelde personen — vooral bij ‘Iedereen met deze overdracht’." + "nl": "Uitnodigingen zijn toegangssleutels. Behandel een QR-code, NFC-tag of .vnd-bestand als een privétoegangslink en deel deze alleen met de bedoelde personen — vooral bij ‘Iedereen met deze overdracht’.", + "ru": "Приглашения — это ключи доступа. Относитесь к QR-коду, NFC-метке или файлу .vnd как к частной ссылке доступа и делитесь ими только с теми, для кого они предназначены, особенно при варианте «Любой, у кого есть эта передача»." } }, "about_privacy_deny": { @@ -285,7 +303,8 @@ "de": "Standardmäßig ablehnen – VniDrop stellt nur den Inhalt einer aktiven Freigabe bereit und weist unbekannte Anfragen ab.", "pt": "Recusa por predefinição — o VniDrop apenas fornece o conteúdo de uma partilha ativa e rejeita pedidos desconhecidos.", "pl": "Domyślnie odmowa — VniDrop udostępnia tylko zawartość aktywnego udostępnienia i odrzuca nieznane żądania.", - "nl": "Standaard weigeren — VniDrop levert alleen de inhoud van een actieve deling en wijst onbekende verzoeken af." + "nl": "Standaard weigeren — VniDrop levert alleen de inhoud van een actieve deling en wijst onbekende verzoeken af.", + "ru": "Отказ по умолчанию — VniDrop предоставляет только содержимое активной передачи и отклоняет неизвестные запросы." } }, "about_privacy_local": { @@ -298,7 +317,8 @@ "de": "Empfangene Dateien werden auf Ihrem Gerät gespeichert und überschreiben niemals eine vorhandene Datei.", "pt": "Os ficheiros recebidos são guardados no seu dispositivo e nunca substituem um ficheiro existente.", "pl": "Odebrane pliki są zapisywane na Twoim urządzeniu i nigdy nie nadpisują istniejącego pliku.", - "nl": "Ontvangen bestanden worden op uw apparaat bewaard en overschrijven nooit een bestaand bestand." + "nl": "Ontvangen bestanden worden op uw apparaat bewaard en overschrijven nooit een bestaand bestand.", + "ru": "Полученные файлы сохраняются на вашем устройстве и никогда не перезаписывают существующий файл." } }, "about_privacy_policy_label": { @@ -311,7 +331,8 @@ "de": "Datenschutzrichtlinie", "pt": "Política de privacidade", "pl": "Polityka prywatności", - "nl": "Privacybeleid" + "nl": "Privacybeleid", + "ru": "Политика конфиденциальности" } }, "about_privacy_relay": { @@ -324,7 +345,8 @@ "de": "Wenn zwei Geräte sich nicht direkt verbinden können, kann die verschlüsselte Verbindung weitergeleitet werden. Relays leiten nur verschlüsselte Pakete weiter; sie speichern niemals Ihre Dateien.", "pt": "Se dois dispositivos não conseguirem ligar-se diretamente, a ligação cifrada pode ser retransmitida. Os retransmissores apenas encaminham pacotes cifrados; nunca guardam os seus ficheiros.", "pl": "Jeśli dwa urządzenia nie mogą połączyć się bezpośrednio, szyfrowane połączenie może być przekazywane przez przekaźnik. Przekaźniki przekazują tylko zaszyfrowane pakiety; nigdy nie przechowują Twoich plików.", - "nl": "Als twee apparaten niet rechtstreeks verbinding kunnen maken, kan de versleutelde verbinding via een relay worden doorgestuurd. Relays sturen alleen versleutelde pakketten door; ze slaan uw bestanden nooit op." + "nl": "Als twee apparaten niet rechtstreeks verbinding kunnen maken, kan de versleutelde verbinding via een relay worden doorgestuurd. Relays sturen alleen versleutelde pakketten door; ze slaan uw bestanden nooit op.", + "ru": "Если два устройства не могут соединиться напрямую, зашифрованное соединение может передаваться через ретранслятор. Ретрансляторы пересылают только зашифрованные пакеты; они никогда не хранят ваши файлы." } }, "about_privacy_title": { @@ -337,7 +359,8 @@ "de": "Datenschutz & Sicherheit", "pt": "Privacidade e segurança", "pl": "Prywatność i bezpieczeństwo", - "nl": "Privacy en beveiliging" + "nl": "Privacy en beveiliging", + "ru": "Конфиденциальность и безопасность" } }, "about_tagline": { @@ -350,7 +373,8 @@ "de": "Senden Sie Dateien direkt. Behalten Sie die Kontrolle darüber, wer sie empfängt.", "pt": "Envie ficheiros diretamente. Mantenha o controlo sobre quem os recebe.", "pl": "Wysyłaj pliki bezpośrednio. Zachowaj kontrolę nad tym, kto je otrzymuje.", - "nl": "Verstuur bestanden rechtstreeks. Houd controle over wie ze ontvangt." + "nl": "Verstuur bestanden rechtstreeks. Houd controle over wie ze ontvangt.", + "ru": "Отправляйте файлы напрямую. Сохраняйте контроль над тем, кто их получает." } }, "about_title": { @@ -363,7 +387,8 @@ "de": "Über", "pt": "Acerca de", "pl": "Informacje", - "nl": "Over" + "nl": "Over", + "ru": "О приложении" } }, "appearance_auto_description": { @@ -376,7 +401,8 @@ "de": "Der hellen oder dunklen Darstellung dieses Geräts folgen.", "pt": "Acompanhar o aspeto claro ou escuro deste dispositivo.", "pl": "Dopasuj do jasnego lub ciemnego wyglądu tego urządzenia.", - "nl": "De lichte of donkere weergave van dit apparaat volgen." + "nl": "De lichte of donkere weergave van dit apparaat volgen.", + "ru": "Следовать светлому или тёмному оформлению этого устройства." } }, "appearance_dark_mode": { @@ -389,7 +415,8 @@ "de": "Dunkelmodus", "pt": "Modo escuro", "pl": "Tryb ciemny", - "nl": "Donkere modus" + "nl": "Donkere modus", + "ru": "Тёмный режим" } }, "appearance_light_mode": { @@ -402,7 +429,8 @@ "de": "Hellmodus", "pt": "Modo claro", "pl": "Tryb jasny", - "nl": "Lichte modus" + "nl": "Lichte modus", + "ru": "Светлый режим" } }, "appearance_system_mode": { @@ -415,7 +443,8 @@ "de": "System", "pt": "Sistema", "pl": "System", - "nl": "Systeem" + "nl": "Systeem", + "ru": "Системный" } }, "appearance_title": { @@ -428,7 +457,8 @@ "de": "Darstellung", "pt": "Aspeto", "pl": "Wygląd", - "nl": "Weergave" + "nl": "Weergave", + "ru": "Оформление" } }, "approval_connection_request": { @@ -441,7 +471,8 @@ "de": "Empfangsanfrage", "pt": "Pedido de receção", "pl": "Prośba o odbiór", - "nl": "Ontvangstverzoek" + "nl": "Ontvangstverzoek", + "ru": "Запрос на получение" } }, "approval_endpoint_id": { @@ -460,7 +491,8 @@ "de": "Geräte-ID: {arg1}", "pt": "ID do dispositivo: {arg1}", "pl": "Identyfikator urządzenia: {arg1}", - "nl": "Apparaat-ID: {arg1}" + "nl": "Apparaat-ID: {arg1}", + "ru": "Идентификатор устройства: {arg1}" } }, "approval_nearby_device": { @@ -473,7 +505,8 @@ "de": "Ein Gerät in der Nähe", "pt": "Um dispositivo próximo", "pl": "Urządzenie w pobliżu", - "nl": "Een apparaat in de buurt" + "nl": "Een apparaat in de buurt", + "ru": "Устройство поблизости" } }, "approval_pending_count": { @@ -492,7 +525,8 @@ "de": "{count} Anfragen warten", "pt": "{count} pedidos em espera", "pl": "Oczekujące prośby: {count}", - "nl": "{count} verzoeken in behandeling" + "nl": "{count} verzoeken in behandeling", + "ru": "Ожидающих запросов: {count}" } }, "approval_request_body": { @@ -515,7 +549,8 @@ "de": "{arg1} möchte „{arg2}“ empfangen.", "pt": "{arg1} quer receber «{arg2}».", "pl": "{arg1} chce odebrać „{arg2}”.", - "nl": "{arg1} wil ‘{arg2}’ ontvangen." + "nl": "{arg1} wil ‘{arg2}’ ontvangen.", + "ru": "{arg1} хочет получить «{arg2}»." } }, "battery_level_title": { @@ -528,7 +563,8 @@ "de": "Batteriestand", "pt": "Nível da bateria", "pl": "Poziom baterii", - "nl": "Batterijniveau" + "nl": "Batterijniveau", + "ru": "Уровень заряда" } }, "bug_report_contact_hint": { @@ -541,7 +577,8 @@ "de": "name@beispiel.com", "pt": "nome@exemplo.com", "pl": "nazwa@przyklad.com", - "nl": "naam@voorbeeld.com" + "nl": "naam@voorbeeld.com", + "ru": "имя@пример.com" } }, "bug_report_contact_label": { @@ -554,7 +591,8 @@ "de": "Kontakt-E-Mail (optional)", "pt": "E-mail de contacto (opcional)", "pl": "E-mail kontaktowy (opcjonalnie)", - "nl": "Contact-e-mail (optioneel)" + "nl": "Contact-e-mail (optioneel)", + "ru": "Контактный e-mail (необязательно)" } }, "bug_report_description": { @@ -567,7 +605,8 @@ "de": "Sagen Sie uns, was schiefgelaufen ist. Wir hängen Geräteinformationen und optional aktuelle Protokolle an (sensible Werte werden geschwärzt).", "pt": "Diga-nos o que correu mal. Anexamos informações do dispositivo e, opcionalmente, registos recentes (com os valores sensíveis ocultados).", "pl": "Napisz, co poszło nie tak. Dołączamy informacje o urządzeniu i opcjonalnie ostatnie dzienniki (z ukrytymi wrażliwymi wartościami).", - "nl": "Vertel ons wat er misging. We voegen apparaatgegevens toe en optioneel recente logbestanden (met gevoelige waarden onleesbaar gemaakt)." + "nl": "Vertel ons wat er misging. We voegen apparaatgegevens toe en optioneel recente logbestanden (met gevoelige waarden onleesbaar gemaakt).", + "ru": "Расскажите, что пошло не так. Мы прикладываем сведения об устройстве и, при желании, недавние журналы (конфиденциальные значения скрыты)." } }, "bug_report_device_section": { @@ -580,7 +619,8 @@ "de": "Geräteinformationen", "pt": "Informações do dispositivo", "pl": "Informacje o urządzeniu", - "nl": "Apparaatgegevens" + "nl": "Apparaatgegevens", + "ru": "Сведения об устройстве" } }, "bug_report_expected_hint": { @@ -593,7 +633,8 @@ "de": "Beschreiben Sie, was Sie erwartet haben", "pt": "Descreva o que esperava que acontecesse", "pl": "Opisz oczekiwane zachowanie", - "nl": "Beschrijf wat u verwachtte" + "nl": "Beschrijf wat u verwachtte", + "ru": "Опишите, что вы ожидали" } }, "bug_report_expected_label": { @@ -606,7 +647,8 @@ "de": "Was haben Sie erwartet?", "pt": "O que esperava?", "pl": "Czego oczekiwano?", - "nl": "Wat verwachtte u?" + "nl": "Wat verwachtte u?", + "ru": "Что вы ожидали?" } }, "bug_report_include_logs": { @@ -619,7 +661,8 @@ "de": "Aktuelle Protokolle einschließen", "pt": "Incluir registos recentes", "pl": "Dołącz ostatnie dzienniki", - "nl": "Recente logbestanden meesturen" + "nl": "Recente logbestanden meesturen", + "ru": "Включить недавние журналы" } }, "bug_report_include_logs_description": { @@ -632,7 +675,8 @@ "de": "Hilft uns, das Problem zu diagnostizieren. Sensible Werte werden vor dem Senden geschwärzt.", "pt": "Ajuda-nos a diagnosticar o problema. Os valores sensíveis são ocultados antes do envio.", "pl": "Pomaga nam zdiagnozować problem. Wrażliwe wartości są ukrywane przed wysłaniem.", - "nl": "Helpt ons het probleem te diagnosticeren. Gevoelige waarden worden vóór verzending onleesbaar gemaakt." + "nl": "Helpt ons het probleem te diagnosticeren. Gevoelige waarden worden vóór verzending onleesbaar gemaakt.", + "ru": "Помогает нам диагностировать проблему. Конфиденциальные значения скрываются перед отправкой." } }, "bug_report_logs_size": { @@ -645,7 +689,8 @@ "de": "Größe des Protokollanhangs", "pt": "Tamanho do anexo de registos", "pl": "Rozmiar załącznika z dziennikami", - "nl": "Grootte van logbijlage" + "nl": "Grootte van logbijlage", + "ru": "Размер вложения с журналами" } }, "bug_report_missing_expected": { @@ -658,7 +703,8 @@ "de": "Bitte beschreiben Sie, was Sie erwartet haben.", "pt": "Descreva o que esperava.", "pl": "Opisz oczekiwane zachowanie.", - "nl": "Beschrijf wat u verwachtte." + "nl": "Beschrijf wat u verwachtte.", + "ru": "Опишите, что вы ожидали." } }, "bug_report_missing_what": { @@ -671,7 +717,8 @@ "de": "Bitte beschreiben Sie, was passiert ist.", "pt": "Descreva o que aconteceu.", "pl": "Opisz, co się stało.", - "nl": "Beschrijf wat er gebeurde." + "nl": "Beschrijf wat er gebeurde.", + "ru": "Опишите, что произошло." } }, "bug_report_steps_hint": { @@ -684,7 +731,8 @@ "de": "Listen Sie die Schritte zum Reproduzieren des Problems auf", "pt": "Enumere os passos para reproduzir o problema", "pl": "Wymień kroki umożliwiające odtworzenie problemu", - "nl": "Noem de stappen om het probleem te reproduceren" + "nl": "Noem de stappen om het probleem te reproduceren", + "ru": "Перечислите шаги для воспроизведения проблемы" } }, "bug_report_steps_label": { @@ -697,7 +745,8 @@ "de": "Schritte zum Reproduzieren (optional)", "pt": "Passos para reproduzir (opcional)", "pl": "Kroki do odtworzenia (opcjonalnie)", - "nl": "Stappen om te reproduceren (optioneel)" + "nl": "Stappen om te reproduceren (optioneel)", + "ru": "Шаги для воспроизведения (необязательно)" } }, "bug_report_submit": { @@ -710,7 +759,8 @@ "de": "Bericht senden", "pt": "Enviar relatório", "pl": "Wyślij zgłoszenie", - "nl": "Rapport versturen" + "nl": "Rapport versturen", + "ru": "Отправить отчёт" } }, "bug_report_submit_failed": { @@ -723,7 +773,8 @@ "de": "Der Fehlerbericht konnte nicht gesendet werden. Bitte versuchen Sie es später erneut.", "pt": "Não foi possível enviar o relatório de erro. Tente novamente mais tarde.", "pl": "Nie udało się wysłać zgłoszenia błędu. Spróbuj ponownie później.", - "nl": "Het foutrapport kon niet worden verstuurd. Probeer het later opnieuw." + "nl": "Het foutrapport kon niet worden verstuurd. Probeer het later opnieuw.", + "ru": "Не удалось отправить отчёт об ошибке. Повторите попытку позже." } }, "bug_report_submitted": { @@ -736,7 +787,8 @@ "de": "Danke – Ihr Fehlerbericht wurde erfasst.", "pt": "Obrigado — o seu relatório de erro foi registado.", "pl": "Dziękujemy — Twoje zgłoszenie błędu zostało zapisane.", - "nl": "Bedankt — uw foutrapport is vastgelegd." + "nl": "Bedankt — uw foutrapport is vastgelegd.", + "ru": "Спасибо — ваш отчёт об ошибке записан." } }, "bug_report_submitting": { @@ -749,7 +801,8 @@ "de": "Wird gesendet…", "pt": "A enviar…", "pl": "Wysyłanie…", - "nl": "Bezig met versturen…" + "nl": "Bezig met versturen…", + "ru": "Отправка…" } }, "bug_report_what_hint": { @@ -762,7 +815,8 @@ "de": "Beschreiben Sie, was passiert ist", "pt": "Descreva o que aconteceu", "pl": "Opisz, co się stało", - "nl": "Beschrijf wat er gebeurde" + "nl": "Beschrijf wat er gebeurde", + "ru": "Опишите, что произошло" } }, "bug_report_what_label": { @@ -775,7 +829,8 @@ "de": "Was ist passiert?", "pt": "O que aconteceu?", "pl": "Co się stało?", - "nl": "Wat is er gebeurd?" + "nl": "Wat is er gebeurd?", + "ru": "Что произошло?" } }, "button_approve": { @@ -788,7 +843,8 @@ "de": "Genehmigen", "pt": "Aprovar", "pl": "Zatwierdź", - "nl": "Goedkeuren" + "nl": "Goedkeuren", + "ru": "Одобрить" } }, "button_back": { @@ -801,7 +857,8 @@ "de": "Zurück", "pt": "Voltar", "pl": "Wstecz", - "nl": "Terug" + "nl": "Terug", + "ru": "Назад" } }, "button_cancel": { @@ -814,7 +871,8 @@ "de": "Abbrechen", "pt": "Cancelar", "pl": "Anuluj", - "nl": "Annuleren" + "nl": "Annuleren", + "ru": "Отмена" } }, "button_cancel_receive": { @@ -827,7 +885,8 @@ "de": "Abbrechen", "pt": "Cancelar", "pl": "Anuluj", - "nl": "Annuleren" + "nl": "Annuleren", + "ru": "Отмена" } }, "button_change_files": { @@ -840,7 +899,8 @@ "de": "Dateien ändern", "pt": "Alterar ficheiros", "pl": "Zmień pliki", - "nl": "Bestanden wijzigen" + "nl": "Bestanden wijzigen", + "ru": "Изменить файлы" } }, "button_choose_files": { @@ -853,7 +913,8 @@ "de": "Dateien auswählen", "pt": "Escolher ficheiros", "pl": "Wybierz pliki", - "nl": "Bestanden kiezen" + "nl": "Bestanden kiezen", + "ru": "Выбрать файлы" } }, "button_choose_folder": { @@ -866,7 +927,8 @@ "de": "Ordner auswählen", "pt": "Escolher pasta", "pl": "Wybierz folder", - "nl": "Map kiezen" + "nl": "Map kiezen", + "ru": "Выбрать папку" } }, "button_clear": { @@ -879,7 +941,8 @@ "de": "Löschen", "pt": "Limpar", "pl": "Wyczyść", - "nl": "Wissen" + "nl": "Wissen", + "ru": "Очистить" } }, "button_close": { @@ -892,7 +955,8 @@ "de": "Schließen", "pt": "Fechar", "pl": "Zamknij", - "nl": "Sluiten" + "nl": "Sluiten", + "ru": "Закрыть" } }, "button_create_new_transfer": { @@ -905,7 +969,8 @@ "de": "Neue Übertragung", "pt": "Nova transferência", "pl": "Nowy transfer", - "nl": "Nieuwe overdracht" + "nl": "Nieuwe overdracht", + "ru": "Новая передача" } }, "button_delete_transfer": { @@ -918,7 +983,8 @@ "de": "Übertragung löschen", "pt": "Eliminar transferência", "pl": "Usuń transfer", - "nl": "Overdracht verwijderen" + "nl": "Overdracht verwijderen", + "ru": "Удалить передачу" } }, "button_download_invitation": { @@ -931,7 +997,8 @@ "de": ".vnd-Datei sichern", "pt": "Guardar ficheiro .vnd", "pl": "Zapisz plik .vnd", - "nl": ".vnd-bestand bewaren" + "nl": ".vnd-bestand bewaren", + "ru": "Сохранить файл .vnd" } }, "button_native_share": { @@ -944,7 +1011,8 @@ "de": "Einladung teilen", "pt": "Partilhar convite", "pl": "Udostępnij zaproszenie", - "nl": "Uitnodiging delen" + "nl": "Uitnodiging delen", + "ru": "Поделиться приглашением" } }, "button_open_settings": { @@ -957,7 +1025,8 @@ "de": "Einstellungen öffnen", "pt": "Abrir Definições", "pl": "Otwórz Ustawienia", - "nl": "Instellingen openen" + "nl": "Instellingen openen", + "ru": "Открыть Настройки" } }, "button_receive": { @@ -970,7 +1039,8 @@ "de": "Empfangen", "pt": "Receber", "pl": "Odbierz", - "nl": "Ontvangen" + "nl": "Ontvangen", + "ru": "Получить" } }, "button_receive_files": { @@ -983,7 +1053,8 @@ "de": "Empfang starten", "pt": "Começar a receber", "pl": "Rozpocznij odbieranie", - "nl": "Ontvangen starten" + "nl": "Ontvangen starten", + "ru": "Начать получение" } }, "button_refuse": { @@ -996,7 +1067,8 @@ "de": "Ablehnen", "pt": "Recusar", "pl": "Odrzuć", - "nl": "Weigeren" + "nl": "Weigeren", + "ru": "Отклонить" } }, "button_remove_file": { @@ -1009,7 +1081,8 @@ "de": "Datei entfernen", "pt": "Remover ficheiro", "pl": "Usuń plik", - "nl": "Bestand verwijderen" + "nl": "Bestand verwijderen", + "ru": "Удалить файл" } }, "button_reset_default": { @@ -1022,7 +1095,8 @@ "de": "Standard verwenden", "pt": "Usar predefinição", "pl": "Użyj domyślnego", - "nl": "Standaard gebruiken" + "nl": "Standaard gebruiken", + "ru": "По умолчанию" } }, "button_retry": { @@ -1035,7 +1109,8 @@ "de": "Wiederholen", "pt": "Tentar novamente", "pl": "Spróbuj ponownie", - "nl": "Opnieuw proberen" + "nl": "Opnieuw proberen", + "ru": "Повторить" } }, "button_share_file": { @@ -1048,7 +1123,8 @@ "de": "Freigabe starten", "pt": "Começar a partilhar", "pl": "Rozpocznij udostępnianie", - "nl": "Delen starten" + "nl": "Delen starten", + "ru": "Начать раздачу" } }, "button_sharing_file": { @@ -1061,7 +1137,8 @@ "de": "Übertragung wird vorbereitet…", "pt": "A preparar a transferência…", "pl": "Przygotowywanie transferu…", - "nl": "Overdracht voorbereiden…" + "nl": "Overdracht voorbereiden…", + "ru": "Подготовка передачи…" } }, "button_show_in_files": { @@ -1074,7 +1151,8 @@ "de": "In „Dateien“ anzeigen", "pt": "Mostrar em Ficheiros", "pl": "Pokaż w Plikach", - "nl": "Toon in Bestanden" + "nl": "Toon in Bestanden", + "ru": "Показать в Файлах" } }, "button_write_nfc": { @@ -1087,7 +1165,8 @@ "de": "Auf NFC-Tag schreiben", "pt": "Escrever em etiqueta NFC", "pl": "Zapisz na tagu NFC", - "nl": "Naar NFC-tag schrijven" + "nl": "Naar NFC-tag schrijven", + "ru": "Записать на NFC-метку" } }, "device_model_title": { @@ -1100,7 +1179,8 @@ "de": "Gerätemodell", "pt": "Modelo do dispositivo", "pl": "Model urządzenia", - "nl": "Apparaatmodel" + "nl": "Apparaatmodel", + "ru": "Модель устройства" } }, "device_name_title": { @@ -1113,7 +1193,8 @@ "de": "Gerätename", "pt": "Nome do dispositivo", "pl": "Nazwa urządzenia", - "nl": "Apparaatnaam" + "nl": "Apparaatnaam", + "ru": "Имя устройства" } }, "diagnostics_description": { @@ -1126,7 +1207,8 @@ "de": "Anonyme Absturzberichte und Nutzungsereignisse senden, damit wir VniDrop verbessern können. Sie können dies jederzeit deaktivieren. Einladungen, Dateipfade und Übertragungsinhalte werden niemals einbezogen.", "pt": "Enviar relatórios de falhas e eventos de utilização anónimos para nos ajudar a melhorar o VniDrop. Pode desativar isto a qualquer momento. Convites, caminhos de ficheiros e conteúdos das transferências nunca são incluídos.", "pl": "Wysyłaj anonimowe raporty o awariach i zdarzenia użytkowania, aby pomóc nam ulepszać VniDrop. Możesz to wyłączyć w dowolnej chwili. Zaproszenia, ścieżki plików i zawartość transferów nigdy nie są dołączane.", - "nl": "Verstuur anonieme crashrapporten en gebruiksgebeurtenissen zodat we VniDrop kunnen verbeteren. U kunt dit op elk moment uitschakelen. Uitnodigingen, bestandspaden en overdrachtsinhoud worden nooit meegestuurd." + "nl": "Verstuur anonieme crashrapporten en gebruiksgebeurtenissen zodat we VniDrop kunnen verbeteren. U kunt dit op elk moment uitschakelen. Uitnodigingen, bestandspaden en overdrachtsinhoud worden nooit meegestuurd.", + "ru": "Отправлять анонимные отчёты о сбоях и события использования, чтобы помочь нам улучшать VniDrop. Вы можете отключить это в любой момент. Приглашения, пути к файлам и содержимое передач никогда не включаются." } }, "diagnostics_disabled_message": { @@ -1139,7 +1221,8 @@ "de": "Die Freigabe von Diagnosedaten ist deaktiviert.", "pt": "A partilha de diagnósticos está desativada.", "pl": "Udostępnianie diagnostyki jest wyłączone.", - "nl": "Het delen van diagnostische gegevens is uitgeschakeld." + "nl": "Het delen van diagnostische gegevens is uitgeschakeld.", + "ru": "Передача диагностики отключена." } }, "diagnostics_enabled_message": { @@ -1152,7 +1235,8 @@ "de": "Die Freigabe von Diagnosedaten ist aktiviert.", "pt": "A partilha de diagnósticos está ativada.", "pl": "Udostępnianie diagnostyki jest włączone.", - "nl": "Het delen van diagnostische gegevens is ingeschakeld." + "nl": "Het delen van diagnostische gegevens is ingeschakeld.", + "ru": "Передача диагностики включена." } }, "diagnostics_title": { @@ -1165,7 +1249,8 @@ "de": "Diagnosedaten teilen", "pt": "Partilhar diagnósticos", "pl": "Udostępniaj diagnostykę", - "nl": "Diagnostische gegevens delen" + "nl": "Diagnostische gegevens delen", + "ru": "Делиться диагностикой" } }, "error_camera": { @@ -1178,7 +1263,8 @@ "de": "Für das Scannen eines QR-Codes ist Kamerazugriff erforderlich.", "pt": "É necessário acesso à câmara para ler um código QR.", "pl": "Do zeskanowania kodu QR wymagany jest dostęp do aparatu.", - "nl": "Voor het scannen van een QR-code is toegang tot de camera vereist." + "nl": "Voor het scannen van een QR-code is toegang tot de camera vereist.", + "ru": "Для сканирования QR-кода требуется доступ к камере." } }, "error_device_info": { @@ -1191,7 +1277,8 @@ "de": "Geräteinformationen konnten nicht geladen werden.", "pt": "Não foi possível carregar as informações do dispositivo.", "pl": "Nie udało się wczytać informacji o urządzeniu.", - "nl": "Apparaatgegevens konden niet worden geladen." + "nl": "Apparaatgegevens konden niet worden geladen.", + "ru": "Не удалось загрузить сведения об устройстве." } }, "error_filesystem": { @@ -1204,7 +1291,8 @@ "de": "VniDrop konnte nicht auf die ausgewählten Dateien oder den Ordner zugreifen. Überprüfen Sie die Berechtigungen und versuchen Sie es erneut.", "pt": "O VniDrop não conseguiu aceder aos ficheiros ou à pasta selecionados. Verifique as permissões e tente novamente.", "pl": "VniDrop nie mógł uzyskać dostępu do wybranych plików lub folderu. Sprawdź uprawnienia i spróbuj ponownie.", - "nl": "VniDrop kon geen toegang krijgen tot de geselecteerde bestanden of map. Controleer de machtigingen en probeer het opnieuw." + "nl": "VniDrop kon geen toegang krijgen tot de geselecteerde bestanden of map. Controleer de machtigingen en probeer het opnieuw.", + "ru": "VniDrop не удалось получить доступ к выбранным файлам или папке. Проверьте разрешения и повторите попытку." } }, "error_generic": { @@ -1217,7 +1305,8 @@ "de": "Etwas ist schiefgelaufen. Versuchen Sie es erneut.", "pt": "Algo correu mal. Tente novamente.", "pl": "Coś poszło nie tak. Spróbuj ponownie.", - "nl": "Er is iets misgegaan. Probeer het opnieuw." + "nl": "Er is iets misgegaan. Probeer het opnieuw.", + "ru": "Что-то пошло не так. Повторите попытку." } }, "error_initialization": { @@ -1230,7 +1319,8 @@ "de": "VniDrop konnte den Start nicht abschließen. Schließen Sie die App und versuchen Sie es erneut.", "pt": "O VniDrop não conseguiu concluir o arranque. Feche a app e tente novamente.", "pl": "VniDrop nie mógł dokończyć uruchamiania. Zamknij aplikację i spróbuj ponownie.", - "nl": "VniDrop kon het opstarten niet voltooien. Sluit de app en probeer het opnieuw." + "nl": "VniDrop kon het opstarten niet voltooien. Sluit de app en probeer het opnieuw.", + "ru": "VniDrop не удалось завершить запуск. Закройте приложение и повторите попытку." } }, "error_invalid_ticket": { @@ -1243,7 +1333,8 @@ "de": "Diese Einladung konnte nicht gelesen werden. Bitten Sie den Absender um eine neue.", "pt": "Não foi possível ler este convite. Peça um novo ao remetente.", "pl": "Nie udało się odczytać tego zaproszenia. Poproś nadawcę o nowe.", - "nl": "Deze uitnodiging kon niet worden gelezen. Vraag de afzender om een nieuwe." + "nl": "Deze uitnodiging kon niet worden gelezen. Vraag de afzender om een nieuwe.", + "ru": "Не удалось прочитать это приглашение. Попросите отправителя прислать новое." } }, "error_invitation_empty": { @@ -1256,7 +1347,8 @@ "de": "Diese Einladung ist leer. Versuchen Sie, sie erneut zu öffnen.", "pt": "Esse convite está vazio. Tente abri-lo novamente.", "pl": "To zaproszenie jest puste. Spróbuj otworzyć je ponownie.", - "nl": "Die uitnodiging is leeg. Probeer deze opnieuw te openen." + "nl": "Die uitnodiging is leeg. Probeer deze opnieuw te openen.", + "ru": "Это приглашение пустое. Попробуйте открыть его снова." } }, "error_missing_native_library": { @@ -1269,7 +1361,8 @@ "de": "Die native VniDrop-Bibliothek fehlt in diesem Build.", "pt": "A biblioteca nativa do VniDrop está em falta nesta compilação.", "pl": "W tej kompilacji brakuje natywnej biblioteki VniDrop.", - "nl": "De native VniDrop-bibliotheek ontbreekt in deze build." + "nl": "De native VniDrop-bibliotheek ontbreekt in deze build.", + "ru": "В этой сборке отсутствует нативная библиотека VniDrop." } }, "error_nfc": { @@ -1282,7 +1375,8 @@ "de": "Dieses NFC-Tag konnte nicht verwendet werden. Versuchen Sie ein anderes.", "pt": "Não foi possível utilizar esta etiqueta NFC. Tente outra.", "pl": "Nie udało się użyć tego tagu NFC. Spróbuj innego.", - "nl": "Deze NFC-tag kon niet worden gebruikt. Probeer een andere." + "nl": "Deze NFC-tag kon niet worden gebruikt. Probeer een andere.", + "ru": "Не удалось использовать эту NFC-метку. Попробуйте другую." } }, "error_permission": { @@ -1295,7 +1389,8 @@ "de": "Der Absender hat diese Übertragung nicht genehmigt oder sie wurde abgelehnt.", "pt": "O remetente não aprovou esta transferência, ou foi recusada.", "pl": "Nadawca nie zatwierdził tego transferu lub został on odrzucony.", - "nl": "De afzender heeft deze overdracht niet goedgekeurd, of deze is geweigerd." + "nl": "De afzender heeft deze overdracht niet goedgekeurd, of deze is geweigerd.", + "ru": "Отправитель не одобрил эту передачу, или она была отклонена." } }, "error_repository": { @@ -1308,7 +1403,8 @@ "de": "VniDrop konnte die Übertragungsdaten auf diesem Gerät nicht speichern.", "pt": "O VniDrop não conseguiu guardar os dados da transferência neste dispositivo.", "pl": "VniDrop nie mógł zapisać danych transferu na tym urządzeniu.", - "nl": "VniDrop kon de overdrachtsgegevens niet op dit apparaat bewaren." + "nl": "VniDrop kon de overdrachtsgegevens niet op dit apparaat bewaren.", + "ru": "VniDrop не удалось сохранить данные передачи на этом устройстве." } }, "error_selection_failed": { @@ -1321,7 +1417,8 @@ "de": "Das ausgewählte Objekt konnte nicht geöffnet werden. Versuchen Sie, es erneut auszuwählen.", "pt": "Não foi possível abrir o item selecionado. Tente escolhê-lo novamente.", "pl": "Nie udało się otworzyć wybranego elementu. Spróbuj wybrać go ponownie.", - "nl": "Het geselecteerde item kon niet worden geopend. Probeer het opnieuw te kiezen." + "nl": "Het geselecteerde item kon niet worden geopend. Probeer het opnieuw te kiezen.", + "ru": "Не удалось открыть выбранный объект. Попробуйте выбрать его снова." } }, "error_share_empty": { @@ -1334,7 +1431,8 @@ "de": "Wählen Sie mindestens ein Objekt zum Teilen aus.", "pt": "Selecione pelo menos um item para partilhar.", "pl": "Wybierz co najmniej jeden element do udostępnienia.", - "nl": "Selecteer minstens één item om te delen." + "nl": "Selecteer minstens één item om te delen.", + "ru": "Выберите хотя бы один объект для отправки." } }, "error_socket_bind": { @@ -1347,7 +1445,8 @@ "de": "VniDrop konnte seine Netzwerk-Sockets auf diesem Gerät nicht öffnen.", "pt": "O VniDrop não conseguiu abrir os seus sockets de rede neste dispositivo.", "pl": "VniDrop nie mógł otworzyć gniazd sieciowych na tym urządzeniu.", - "nl": "VniDrop kon zijn netwerksockets niet openen op dit apparaat." + "nl": "VniDrop kon zijn netwerksockets niet openen op dit apparaat.", + "ru": "VniDrop не удалось открыть сетевые сокеты на этом устройстве." } }, "error_starting_up": { @@ -1360,7 +1459,8 @@ "de": "VniDrop startet noch. Öffnen Sie die Einladung gleich erneut.", "pt": "O VniDrop ainda está a iniciar. Abra o convite novamente dentro de momentos.", "pl": "VniDrop jeszcze się uruchamia. Otwórz zaproszenie ponownie za chwilę.", - "nl": "VniDrop is nog aan het opstarten. Open de uitnodiging zo meteen opnieuw." + "nl": "VniDrop is nog aan het opstarten. Open de uitnodiging zo meteen opnieuw.", + "ru": "VniDrop ещё запускается. Откройте приглашение снова через мгновение." } }, "error_transfer": { @@ -1373,7 +1473,8 @@ "de": "Die Übertragung konnte nicht abgeschlossen werden. Überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.", "pt": "Não foi possível concluir a transferência. Verifique a sua ligação e tente novamente.", "pl": "Nie udało się ukończyć transferu. Sprawdź połączenie i spróbuj ponownie.", - "nl": "De overdracht kon niet worden voltooid. Controleer uw verbinding en probeer het opnieuw." + "nl": "De overdracht kon niet worden voltooid. Controleer uw verbinding en probeer het opnieuw.", + "ru": "Не удалось завершить передачу. Проверьте подключение и повторите попытку." } }, "field_receiver_name": { @@ -1386,7 +1487,8 @@ "de": "Empfängername", "pt": "Nome do destinatário", "pl": "Nazwa odbiorcy", - "nl": "Naam van ontvanger" + "nl": "Naam van ontvanger", + "ru": "Имя получателя" } }, "field_sender_name": { @@ -1399,7 +1501,8 @@ "de": "Absendername", "pt": "Nome do remetente", "pl": "Nazwa nadawcy", - "nl": "Naam van afzender" + "nl": "Naam van afzender", + "ru": "Имя отправителя" } }, "field_transfer_name": { @@ -1412,7 +1515,8 @@ "de": "Übertragungsname", "pt": "Nome da transferência", "pl": "Nazwa transferu", - "nl": "Naam van overdracht" + "nl": "Naam van overdracht", + "ru": "Название передачи" } }, "field_username": { @@ -1425,7 +1529,8 @@ "de": "Anzeigename", "pt": "Nome a apresentar", "pl": "Nazwa wyświetlana", - "nl": "Weergavenaam" + "nl": "Weergavenaam", + "ru": "Отображаемое имя" } }, "folder_status_permission_required": { @@ -1438,7 +1543,8 @@ "de": "Berechtigung erforderlich", "pt": "Permissão necessária", "pl": "Wymagane uprawnienie", - "nl": "Machtiging vereist" + "nl": "Machtiging vereist", + "ru": "Требуется разрешение" } }, "folder_status_unavailable": { @@ -1451,7 +1557,8 @@ "de": "Nicht verfügbar", "pt": "Indisponível", "pl": "Niedostępny", - "nl": "Niet beschikbaar" + "nl": "Niet beschikbaar", + "ru": "Недоступно" } }, "folder_status_validating": { @@ -1464,7 +1571,8 @@ "de": "Ordner wird geprüft…", "pt": "A verificar a pasta…", "pl": "Sprawdzanie folderu…", - "nl": "Map controleren…" + "nl": "Map controleren…", + "ru": "Проверка папки…" } }, "folder_status_writable": { @@ -1477,7 +1585,8 @@ "de": "Bereit", "pt": "Pronto", "pl": "Gotowy", - "nl": "Gereed" + "nl": "Gereed", + "ru": "Готово" } }, "metadata_files": { @@ -1490,7 +1599,8 @@ "de": "Dateien", "pt": "Ficheiros", "pl": "Pliki", - "nl": "Bestanden" + "nl": "Bestanden", + "ru": "Файлы" } }, "metadata_size": { @@ -1503,7 +1613,8 @@ "de": "Größe", "pt": "Tamanho", "pl": "Rozmiar", - "nl": "Grootte" + "nl": "Grootte", + "ru": "Размер" } }, "metadata_status": { @@ -1516,7 +1627,8 @@ "de": "Status", "pt": "Estado", "pl": "Status", - "nl": "Status" + "nl": "Status", + "ru": "Статус" } }, "nav_receive": { @@ -1529,7 +1641,8 @@ "de": "Empfangen", "pt": "Receber", "pl": "Odbierz", - "nl": "Ontvangen" + "nl": "Ontvangen", + "ru": "Получить" } }, "nav_send": { @@ -1542,7 +1655,8 @@ "de": "Senden", "pt": "Enviar", "pl": "Wyślij", - "nl": "Versturen" + "nl": "Versturen", + "ru": "Отправить" } }, "nav_settings": { @@ -1555,7 +1669,8 @@ "de": "Einstellungen", "pt": "Definições", "pl": "Ustawienia", - "nl": "Instellingen" + "nl": "Instellingen", + "ru": "Настройки" } }, "network_title": { @@ -1568,7 +1683,8 @@ "de": "Netzwerk", "pt": "Rede", "pl": "Sieć", - "nl": "Netwerk" + "nl": "Netwerk", + "ru": "Сеть" } }, "notifications_description": { @@ -1581,7 +1697,8 @@ "de": "Werden Sie über neue Empfangsanfragen benachrichtigt, während VniDrop im Hintergrund läuft.", "pt": "Seja notificado sobre novos pedidos de receção enquanto o VniDrop está em segundo plano.", "pl": "Otrzymuj powiadomienia o nowych prośbach o odbiór, gdy VniDrop działa w tle.", - "nl": "Ontvang meldingen over nieuwe ontvangstverzoeken terwijl VniDrop op de achtergrond draait." + "nl": "Ontvang meldingen over nieuwe ontvangstverzoeken terwijl VniDrop op de achtergrond draait.", + "ru": "Получайте уведомления о новых запросах на получение, пока VniDrop работает в фоне." } }, "notifications_enabled_message": { @@ -1594,7 +1711,8 @@ "de": "Mitteilungen aktiviert.", "pt": "Notificações ativadas.", "pl": "Powiadomienia włączone.", - "nl": "Meldingen ingeschakeld." + "nl": "Meldingen ingeschakeld.", + "ru": "Уведомления включены." } }, "notifications_local_title": { @@ -1607,7 +1725,8 @@ "de": "Mitteilungen erlauben", "pt": "Permitir notificações", "pl": "Zezwól na powiadomienia", - "nl": "Meldingen toestaan" + "nl": "Meldingen toestaan", + "ru": "Разрешить уведомления" } }, "notifications_permission_denied": { @@ -1620,7 +1739,8 @@ "de": "Mitteilungen sind für VniDrop deaktiviert. Sie können sie in den Einstellungen aktivieren.", "pt": "As notificações estão desativadas para o VniDrop. Pode ativá-las nas Definições.", "pl": "Powiadomienia są wyłączone dla VniDrop. Możesz je włączyć w Ustawieniach.", - "nl": "Meldingen zijn uitgeschakeld voor VniDrop. U kunt ze inschakelen in Instellingen." + "nl": "Meldingen zijn uitgeschakeld voor VniDrop. U kunt ze inschakelen in Instellingen.", + "ru": "Уведомления отключены для VniDrop. Вы можете включить их в Настройках." } }, "notifications_settings_open_failed": { @@ -1633,7 +1753,8 @@ "de": "Die Mitteilungseinstellungen konnten nicht geöffnet werden.", "pt": "Não foi possível abrir as definições de notificações.", "pl": "Nie udało się otworzyć ustawień powiadomień.", - "nl": "De meldingsinstellingen konden niet worden geopend." + "nl": "De meldingsinstellingen konden niet worden geopend.", + "ru": "Не удалось открыть настройки уведомлений." } }, "notifications_title": { @@ -1646,7 +1767,8 @@ "de": "Mitteilungen", "pt": "Notificações", "pl": "Powiadomienia", - "nl": "Meldingen" + "nl": "Meldingen", + "ru": "Уведомления" } }, "notifications_unsupported": { @@ -1659,7 +1781,8 @@ "de": "Mitteilungen sind auf diesem Gerät nicht verfügbar.", "pt": "As notificações não estão disponíveis neste dispositivo.", "pl": "Powiadomienia nie są dostępne na tym urządzeniu.", - "nl": "Meldingen zijn niet beschikbaar op dit apparaat." + "nl": "Meldingen zijn niet beschikbaar op dit apparaat.", + "ru": "Уведомления недоступны на этом устройстве." } }, "os_version_title": { @@ -1672,7 +1795,8 @@ "de": "Betriebssystem", "pt": "Sistema operativo", "pl": "System operacyjny", - "nl": "Besturingssysteem" + "nl": "Besturingssysteem", + "ru": "Операционная система" } }, "preferences_receive_folder_title": { @@ -1685,7 +1809,8 @@ "de": "Empfangene Übertragungen sichern in", "pt": "Guardar as transferências recebidas em", "pl": "Zapisuj odebrane transfery w", - "nl": "Ontvangen overdrachten bewaren in" + "nl": "Ontvangen overdrachten bewaren in", + "ru": "Сохранять полученные передачи в" } }, "preferences_title": { @@ -1698,7 +1823,8 @@ "de": "Voreinstellungen", "pt": "Preferências", "pl": "Preferencje", - "nl": "Voorkeuren" + "nl": "Voorkeuren", + "ru": "Параметры" } }, "progress_cancelled": { @@ -1711,7 +1837,8 @@ "de": "Abgebrochen", "pt": "Cancelado", "pl": "Anulowano", - "nl": "Geannuleerd" + "nl": "Geannuleerd", + "ru": "Отменено" } }, "progress_completed": { @@ -1724,7 +1851,8 @@ "de": "Abgeschlossen", "pt": "Concluído", "pl": "Ukończono", - "nl": "Voltooid" + "nl": "Voltooid", + "ru": "Завершено" } }, "progress_connected": { @@ -1737,7 +1865,8 @@ "de": "Verbunden", "pt": "Ligado", "pl": "Połączono", - "nl": "Verbonden" + "nl": "Verbonden", + "ru": "Подключено" } }, "progress_connecting": { @@ -1750,7 +1879,8 @@ "de": "Verbinden", "pt": "A ligar", "pl": "Łączenie", - "nl": "Verbinden" + "nl": "Verbinden", + "ru": "Подключение" } }, "progress_downloading": { @@ -1763,7 +1893,8 @@ "de": "Wird geladen", "pt": "A descarregar", "pl": "Pobieranie", - "nl": "Downloaden" + "nl": "Downloaden", + "ru": "Загрузка" } }, "progress_failed": { @@ -1776,7 +1907,8 @@ "de": "Fehlgeschlagen", "pt": "Falhou", "pl": "Niepowodzenie", - "nl": "Mislukt" + "nl": "Mislukt", + "ru": "Ошибка" } }, "progress_getting_ready": { @@ -1789,7 +1921,8 @@ "de": "Wird bereitgemacht", "pt": "A preparar-se", "pl": "Przygotowywanie", - "nl": "Klaarmaken" + "nl": "Klaarmaken", + "ru": "Подготовка" } }, "progress_interrupted": { @@ -1802,7 +1935,8 @@ "de": "Übertragung unterbrochen", "pt": "Transferência interrompida", "pl": "Transfer przerwany", - "nl": "Overdracht onderbroken" + "nl": "Overdracht onderbroken", + "ru": "Передача прервана" } }, "progress_preparing": { @@ -1815,7 +1949,8 @@ "de": "Wird vorbereitet", "pt": "A preparar", "pl": "Przygotowywanie", - "nl": "Voorbereiden" + "nl": "Voorbereiden", + "ru": "Подготовка" } }, "progress_ready": { @@ -1828,7 +1963,8 @@ "de": "Bereit", "pt": "Pronto", "pl": "Gotowe", - "nl": "Gereed" + "nl": "Gereed", + "ru": "Готово" } }, "progress_receiving": { @@ -1841,7 +1977,8 @@ "de": "Wird empfangen", "pt": "A receber", "pl": "Odbieranie", - "nl": "Ontvangen" + "nl": "Ontvangen", + "ru": "Получение" } }, "progress_requesting_access": { @@ -1854,7 +1991,8 @@ "de": "Zugriff wird angefragt", "pt": "A pedir acesso", "pl": "Prośba o dostęp", - "nl": "Toegang aanvragen" + "nl": "Toegang aanvragen", + "ru": "Запрос доступа" } }, "progress_saving": { @@ -1867,7 +2005,8 @@ "de": "Wird gesichert", "pt": "A guardar", "pl": "Zapisywanie", - "nl": "Bewaren" + "nl": "Bewaren", + "ru": "Сохранение" } }, "progress_sending": { @@ -1880,7 +2019,8 @@ "de": "Wird gesendet", "pt": "A enviar", "pl": "Wysyłanie", - "nl": "Versturen" + "nl": "Versturen", + "ru": "Отправка" } }, "progress_sending_to_count": { @@ -1893,7 +2033,8 @@ "de": "Senden an {count}", "pt": "A enviar para {count}", "pl": "Wysyłanie do {count}", - "nl": "Versturen naar {count}" + "nl": "Versturen naar {count}", + "ru": "Отправка получателям: {count}" }, "args": [ { @@ -1912,7 +2053,8 @@ "de": "Bereit zum Teilen", "pt": "Pronto para partilhar", "pl": "Gotowe do udostępnienia", - "nl": "Klaar om te delen" + "nl": "Klaar om te delen", + "ru": "Готово к раздаче" } }, "progress_working": { @@ -1925,7 +2067,8 @@ "de": "Wird bearbeitet…", "pt": "A processar…", "pl": "Przetwarzanie…", - "nl": "Bezig…" + "nl": "Bezig…", + "ru": "Обработка…" } }, "receive_choose_method_body": { @@ -1938,7 +2081,8 @@ "de": "Wählen Sie die Ihnen zur Verfügung stehende Einladungsmethode.", "pt": "Escolha o método de convite ao seu dispor.", "pl": "Wybierz dostępną metodę zaproszenia.", - "nl": "Kies de uitnodigingsmethode die u ter beschikking staat." + "nl": "Kies de uitnodigingsmethode die u ter beschikking staat.", + "ru": "Выберите доступный вам способ приглашения." } }, "receive_choose_method_title": { @@ -1951,7 +2095,8 @@ "de": "Wie möchten Sie sich verbinden?", "pt": "Como pretende ligar-se?", "pl": "Jak chcesz się połączyć?", - "nl": "Hoe wilt u verbinding maken?" + "nl": "Hoe wilt u verbinding maken?", + "ru": "Как вы хотите подключиться?" } }, "receive_clear_history": { @@ -1964,7 +2109,8 @@ "de": "Verlauf löschen", "pt": "Limpar histórico", "pl": "Wyczyść historię", - "nl": "Geschiedenis wissen" + "nl": "Geschiedenis wissen", + "ru": "Очистить историю" } }, "receive_clear_history_description": { @@ -1977,7 +2123,8 @@ "de": "Alle abgeschlossenen, fehlgeschlagenen und abgebrochenen Empfänge werden aus dem Verlauf von VniDrop entfernt. Heruntergeladene Dateien verbleiben auf diesem Gerät.", "pt": "Todas as receções concluídas, falhadas e canceladas serão removidas do histórico do VniDrop. Os ficheiros descarregados permanecerão neste dispositivo.", "pl": "Wszystkie ukończone, nieudane i anulowane odbiory zostaną usunięte z historii VniDrop. Pobrane pliki pozostaną na tym urządzeniu.", - "nl": "Alle voltooide, mislukte en geannuleerde ontvangsten worden uit de geschiedenis van VniDrop verwijderd. Gedownloade bestanden blijven op dit apparaat." + "nl": "Alle voltooide, mislukte en geannuleerde ontvangsten worden uit de geschiedenis van VniDrop verwijderd. Gedownloade bestanden blijven op dit apparaat.", + "ru": "Все завершённые, неудачные и отменённые получения будут удалены из истории VniDrop. Загруженные файлы останутся на этом устройстве." } }, "receive_clear_history_title": { @@ -1990,7 +2137,8 @@ "de": "Empfangsverlauf löschen?", "pt": "Limpar o histórico de receção?", "pl": "Wyczyścić historię odbioru?", - "nl": "Ontvangstgeschiedenis wissen?" + "nl": "Ontvangstgeschiedenis wissen?", + "ru": "Очистить историю получения?" } }, "receive_completed": { @@ -2003,7 +2151,8 @@ "de": "Übertragung empfangen.", "pt": "Transferência recebida.", "pl": "Transfer odebrany.", - "nl": "Overdracht ontvangen." + "nl": "Overdracht ontvangen.", + "ru": "Передача получена." } }, "receive_delete_history_description": { @@ -2022,7 +2171,8 @@ "de": "„{arg1}“ wird aus dem Verlauf von VniDrop entfernt. Die heruntergeladene Datei verbleibt auf diesem Gerät.", "pt": "«{arg1}» será removido do histórico do VniDrop. O ficheiro descarregado permanecerá neste dispositivo.", "pl": "„{arg1}” zostanie usunięty z historii VniDrop. Pobrany plik pozostanie na tym urządzeniu.", - "nl": "‘{arg1}’ wordt uit de geschiedenis van VniDrop verwijderd. Het gedownloade bestand blijft op dit apparaat." + "nl": "‘{arg1}’ wordt uit de geschiedenis van VniDrop verwijderd. Het gedownloade bestand blijft op dit apparaat.", + "ru": "«{arg1}» будет удалён из истории VniDrop. Загруженный файл останется на этом устройстве." } }, "receive_delete_history_item": { @@ -2035,7 +2185,8 @@ "de": "Aus Empfangsverlauf löschen", "pt": "Eliminar do histórico de receção", "pl": "Usuń z historii odbioru", - "nl": "Uit ontvangstgeschiedenis verwijderen" + "nl": "Uit ontvangstgeschiedenis verwijderen", + "ru": "Удалить из истории получения" } }, "receive_delete_history_title": { @@ -2048,7 +2199,8 @@ "de": "Aus dem Verlauf entfernen?", "pt": "Remover do histórico?", "pl": "Usunąć z historii?", - "nl": "Uit geschiedenis verwijderen?" + "nl": "Uit geschiedenis verwijderen?", + "ru": "Удалить из истории?" } }, "receive_empty_body": { @@ -2061,7 +2213,8 @@ "de": "Öffnen Sie eine VniDrop-Einladung, scannen Sie einen QR-Code oder halten Sie das Gerät an ein NFC-Tag.", "pt": "Abra um convite do VniDrop, leia um código QR ou aproxime uma etiqueta NFC.", "pl": "Otwórz zaproszenie VniDrop, zeskanuj kod QR lub zbliż tag NFC.", - "nl": "Open een VniDrop-uitnodiging, scan een QR-code of houd het apparaat bij een NFC-tag." + "nl": "Open een VniDrop-uitnodiging, scan een QR-code of houd het apparaat bij een NFC-tag.", + "ru": "Откройте приглашение VniDrop, отсканируйте QR-код или поднесите NFC-метку." } }, "receive_empty_title": { @@ -2074,7 +2227,8 @@ "de": "Noch nichts empfangen", "pt": "Ainda não recebeu nada", "pl": "Nic jeszcze nie odebrano", - "nl": "Nog niets ontvangen" + "nl": "Nog niets ontvangen", + "ru": "Пока ничего не получено" } }, "receive_history_cleared": { @@ -2087,7 +2241,8 @@ "de": "Empfangsverlauf gelöscht.", "pt": "Histórico de receção limpo.", "pl": "Historia odbioru wyczyszczona.", - "nl": "Ontvangstgeschiedenis gewist." + "nl": "Ontvangstgeschiedenis gewist.", + "ru": "История получения очищена." } }, "receive_history_title": { @@ -2100,7 +2255,8 @@ "de": "Verlauf", "pt": "Histórico", "pl": "Historia", - "nl": "Geschiedenis" + "nl": "Geschiedenis", + "ru": "История" } }, "receive_method_file": { @@ -2113,7 +2269,8 @@ "de": "Eine .vnd-Einladung öffnen", "pt": "Abrir um convite .vnd", "pl": "Otwórz zaproszenie .vnd", - "nl": "Een .vnd-uitnodiging openen" + "nl": "Een .vnd-uitnodiging openen", + "ru": "Открыть приглашение .vnd" } }, "receive_method_file_description": { @@ -2126,7 +2283,8 @@ "de": "Wählen Sie eine auf diesem Gerät gespeicherte oder geteilte Einladung.", "pt": "Escolha um convite guardado ou partilhado neste dispositivo.", "pl": "Wybierz zaproszenie zapisane lub udostępnione na tym urządzeniu.", - "nl": "Kies een uitnodiging die op dit apparaat is bewaard of gedeeld." + "nl": "Kies een uitnodiging die op dit apparaat is bewaard of gedeeld.", + "ru": "Выберите приглашение, сохранённое или отправленное на это устройство." } }, "receive_method_nfc": { @@ -2139,7 +2297,8 @@ "de": "NFC-Tag lesen", "pt": "Ler etiqueta NFC", "pl": "Odczytaj tag NFC", - "nl": "NFC-tag lezen" + "nl": "NFC-tag lezen", + "ru": "Прочитать NFC-метку" } }, "receive_method_nfc_description": { @@ -2152,7 +2311,8 @@ "de": "Halten Sie dieses Gerät an das Einladungs-Tag des Absenders.", "pt": "Aproxime este dispositivo da etiqueta de convite do remetente.", "pl": "Zbliż to urządzenie do tagu zaproszenia nadawcy.", - "nl": "Houd dit apparaat bij de uitnodigingstag van de afzender." + "nl": "Houd dit apparaat bij de uitnodigingstag van de afzender.", + "ru": "Поднесите это устройство к метке приглашения отправителя." } }, "receive_method_scan": { @@ -2165,7 +2325,8 @@ "de": "QR-Code scannen", "pt": "Ler código QR", "pl": "Zeskanuj kod QR", - "nl": "QR-code scannen" + "nl": "QR-code scannen", + "ru": "Сканировать QR-код" } }, "receive_method_scan_description": { @@ -2178,7 +2339,8 @@ "de": "Verwenden Sie die Kamera, um den VniDrop-Code des Absenders zu scannen.", "pt": "Use a câmara para ler o código VniDrop do remetente.", "pl": "Użyj aparatu, aby zeskanować kod VniDrop nadawcy.", - "nl": "Gebruik de camera om de VniDrop-code van de afzender te scannen." + "nl": "Gebruik de camera om de VniDrop-code van de afzender te scannen.", + "ru": "Используйте камеру, чтобы отсканировать код VniDrop отправителя." } }, "receive_new_subtitle": { @@ -2191,7 +2353,8 @@ "de": "Übertragungen, die Sie auf diesem Gerät empfangen haben.", "pt": "Transferências que recebeu neste dispositivo.", "pl": "Transfery odebrane na tym urządzeniu.", - "nl": "Overdrachten die u op dit apparaat hebt ontvangen." + "nl": "Overdrachten die u op dit apparaat hebt ontvangen.", + "ru": "Передачи, полученные на этом устройстве." } }, "receive_nfc_waiting": { @@ -2204,7 +2367,8 @@ "de": "Halten Sie das Gerät an das NFC-Tag…", "pt": "Aproxime da etiqueta NFC…", "pl": "Zbliż do tagu NFC…", - "nl": "Houd bij de NFC-tag…" + "nl": "Houd bij de NFC-tag…", + "ru": "Поднесите к NFC-метке…" } }, "receive_open_files_failed": { @@ -2217,7 +2381,8 @@ "de": "VniDrop konnte in „Dateien“ nicht geöffnet werden.", "pt": "Não foi possível abrir o VniDrop em Ficheiros.", "pl": "Nie udało się otworzyć VniDrop w Plikach.", - "nl": "VniDrop kon niet worden geopend in Bestanden." + "nl": "VniDrop kon niet worden geopend in Bestanden.", + "ru": "Не удалось открыть VniDrop в Файлах." } }, "receive_review_title": { @@ -2230,7 +2395,8 @@ "de": "Übertragung prüfen", "pt": "Rever transferência", "pl": "Przejrzyj transfer", - "nl": "Overdracht controleren" + "nl": "Overdracht controleren", + "ru": "Проверить передачу" } }, "receive_title": { @@ -2243,7 +2409,8 @@ "de": "Empfangen", "pt": "Receber", "pl": "Odbierz", - "nl": "Ontvangen" + "nl": "Ontvangen", + "ru": "Получить" } }, "receive_unknown_transfer": { @@ -2256,7 +2423,8 @@ "de": "VniDrop-Übertragung", "pt": "Transferência VniDrop", "pl": "Transfer VniDrop", - "nl": "VniDrop-overdracht" + "nl": "VniDrop-overdracht", + "ru": "Передача VniDrop" } }, "send_access_anyone": { @@ -2269,7 +2437,8 @@ "de": "Jeder mit dieser Übertragung", "pt": "Qualquer pessoa com esta transferência", "pl": "Każdy, kto ma ten transfer", - "nl": "Iedereen met deze overdracht" + "nl": "Iedereen met deze overdracht", + "ru": "Любой, у кого есть эта передача" } }, "send_access_anyone_description": { @@ -2282,7 +2451,8 @@ "de": "Keine Genehmigung erforderlich. Verwenden Sie dies nur für Objekte, die Sie unbedenklich teilen können.", "pt": "Não é necessária aprovação. Utilize apenas para itens que não se importe de partilhar.", "pl": "Nie jest wymagane zatwierdzenie. Używaj tylko dla elementów, które możesz swobodnie udostępniać.", - "nl": "Geen goedkeuring vereist. Gebruik dit alleen voor items die u gerust kunt delen." + "nl": "Geen goedkeuring vereist. Gebruik dit alleen voor items die u gerust kunt delen.", + "ru": "Одобрение не требуется. Используйте только для объектов, которыми вы готовы поделиться." } }, "send_access_anyone_warning": { @@ -2295,7 +2465,8 @@ "de": "Jeder mit der Einladung kann herunterladen, bis Sie die Freigabe beenden. Verwenden Sie dies nicht für private oder sensible Objekte.", "pt": "Qualquer pessoa com o convite pode descarregar até parar de partilhar. Não utilize para itens privados ou sensíveis.", "pl": "Każdy, kto ma zaproszenie, może pobierać, dopóki nie zatrzymasz udostępniania. Nie używaj tego dla prywatnych ani wrażliwych elementów.", - "nl": "Iedereen met de uitnodiging kan downloaden totdat u stopt met delen. Gebruik dit niet voor privé- of gevoelige items." + "nl": "Iedereen met de uitnodiging kan downloaden totdat u stopt met delen. Gebruik dit niet voor privé- of gevoelige items.", + "ru": "Любой, у кого есть приглашение, может загружать, пока вы не остановите раздачу. Не используйте это для личных или конфиденциальных объектов." } }, "send_access_approval": { @@ -2308,7 +2479,8 @@ "de": "Vor jedem Download fragen", "pt": "Perguntar antes de cada descarga", "pl": "Pytaj przed każdym pobraniem", - "nl": "Vragen vóór elke download" + "nl": "Vragen vóór elke download", + "ru": "Спрашивать перед каждой загрузкой" } }, "send_access_approval_description": { @@ -2321,7 +2493,8 @@ "de": "Sie genehmigen oder lehnen jeden neuen Empfänger ab.", "pt": "Aprova ou recusa cada novo destinatário.", "pl": "Zatwierdzasz lub odrzucasz każdego nowego odbiorcę.", - "nl": "U keurt elke nieuwe ontvanger goed of weigert deze." + "nl": "U keurt elke nieuwe ontvanger goed of weigert deze.", + "ru": "Вы одобряете или отклоняете каждого нового получателя." } }, "send_access_title": { @@ -2334,7 +2507,8 @@ "de": "Wer kann sie empfangen?", "pt": "Quem a pode receber?", "pl": "Kto może to odebrać?", - "nl": "Wie kan het ontvangen?" + "nl": "Wie kan het ontvangen?", + "ru": "Кто может это получить?" } }, "send_choose_file_body": { @@ -2347,7 +2521,8 @@ "de": "Wählen Sie Dateien oder einen Ordner auf diesem Gerät aus. Sie können die Auswahl überprüfen, bevor Sie die Übertragung erstellen.", "pt": "Selecione ficheiros ou uma pasta deste dispositivo. Poderá rever a seleção antes de criar a transferência.", "pl": "Wybierz pliki lub folder z tego urządzenia. Przed utworzeniem transferu możesz przejrzeć wybór.", - "nl": "Selecteer bestanden of een map op dit apparaat. U kunt de selectie controleren voordat u de overdracht aanmaakt." + "nl": "Selecteer bestanden of een map op dit apparaat. U kunt de selectie controleren voordat u de overdracht aanmaakt.", + "ru": "Выберите файлы или папку на этом устройстве. Вы сможете проверить выбор перед созданием передачи." } }, "send_choose_file_title": { @@ -2360,7 +2535,8 @@ "de": "Wählen Sie, was Sie teilen möchten", "pt": "Escolha o que partilhar", "pl": "Wybierz, co udostępnić", - "nl": "Kies wat u wilt delen" + "nl": "Kies wat u wilt delen", + "ru": "Выберите, чем поделиться" } }, "send_empty_body": { @@ -2373,7 +2549,8 @@ "de": "Erstellen Sie eine Übertragung, entscheiden Sie, wer sie empfangen darf, und laden Sie diese Personen dann mit einem QR-Code, einem NFC-Tag oder einer Einladungsdatei ein.", "pt": "Crie uma transferência, decida quem a pode receber e depois convide essas pessoas com um código QR, uma etiqueta NFC ou um ficheiro de convite.", "pl": "Utwórz transfer, zdecyduj, kto może go odebrać, a następnie zaproś te osoby za pomocą kodu QR, tagu NFC lub pliku zaproszenia.", - "nl": "Maak een overdracht aan, bepaal wie deze kan ontvangen en nodig die personen vervolgens uit met een QR-code, NFC-tag of uitnodigingsbestand." + "nl": "Maak een overdracht aan, bepaal wie deze kan ontvangen en nodig die personen vervolgens uit met een QR-code, NFC-tag of uitnodigingsbestand.", + "ru": "Создайте передачу, решите, кто может её получить, затем пригласите этих людей с помощью QR-кода, NFC-метки или файла приглашения." } }, "send_empty_title": { @@ -2386,7 +2563,8 @@ "de": "Noch nichts geteilt", "pt": "Ainda não partilhou nada", "pl": "Nic jeszcze nie udostępniono", - "nl": "Nog niets gedeeld" + "nl": "Nog niets gedeeld", + "ru": "Пока ничем не поделились" } }, "send_file_size_unknown": { @@ -2399,7 +2577,8 @@ "de": "Größe nicht verfügbar", "pt": "Tamanho indisponível", "pl": "Rozmiar niedostępny", - "nl": "Grootte niet beschikbaar" + "nl": "Grootte niet beschikbaar", + "ru": "Размер недоступен" } }, "send_folder_label": { @@ -2412,7 +2591,8 @@ "de": "Ordner", "pt": "Pasta", "pl": "Folder", - "nl": "Map" + "nl": "Map", + "ru": "Папка" } }, "send_new_transfer_description": { @@ -2425,7 +2605,8 @@ "de": "Eine neue Übertragung erstellen", "pt": "Criar uma nova transferência", "pl": "Utwórz nowy transfer", - "nl": "Een nieuwe overdracht aanmaken" + "nl": "Een nieuwe overdracht aanmaken", + "ru": "Создать новую передачу" } }, "send_new_transfer_title": { @@ -2438,7 +2619,8 @@ "de": "Neue Übertragung", "pt": "Nova transferência", "pl": "Nowy transfer", - "nl": "Nieuwe overdracht" + "nl": "Nieuwe overdracht", + "ru": "Новая передача" } }, "send_review_title": { @@ -2451,7 +2633,8 @@ "de": "Übertragung prüfen", "pt": "Rever transferência", "pl": "Przejrzyj transfer", - "nl": "Overdracht controleren" + "nl": "Overdracht controleren", + "ru": "Проверить передачу" } }, "send_selected_files_count": { @@ -2470,7 +2653,8 @@ "de": "{count} Dateien ausgewählt", "pt": "{count} ficheiros selecionados", "pl": "Wybrane pliki: {count}", - "nl": "{count} bestanden geselecteerd" + "nl": "{count} bestanden geselecteerd", + "ru": "Выбрано файлов: {count}" } }, "send_stop_sharing": { @@ -2483,7 +2667,8 @@ "de": "Freigabe beenden", "pt": "Parar de partilhar", "pl": "Zatrzymaj udostępnianie", - "nl": "Stoppen met delen" + "nl": "Stoppen met delen", + "ru": "Остановить раздачу" } }, "send_stop_sharing_description": { @@ -2496,7 +2681,8 @@ "de": "Dies beendet die Übertragung und unterbricht alle, die sie gerade herunterladen. Sie verbleibt in Ihrem Verlauf als „Beendet“.", "pt": "Isto para a transferência e interrompe quem estiver a descarregá-la. Permanece no seu histórico como Parada.", "pl": "To zatrzymuje transfer i przerywa każdego, kto go właśnie pobiera. Pozostaje w historii jako Zatrzymany.", - "nl": "Hiermee stopt de overdracht en wordt iedereen die deze op dit moment downloadt onderbroken. De overdracht blijft in uw geschiedenis staan als Gestopt." + "nl": "Hiermee stopt de overdracht en wordt iedereen die deze op dit moment downloadt onderbroken. De overdracht blijft in uw geschiedenis staan als Gestopt.", + "ru": "Это остановит передачу и прервёт всех, кто сейчас её загружает. Она останется в вашей истории со статусом «Остановлена»." } }, "send_subtitle": { @@ -2509,7 +2695,8 @@ "de": "Übertragungen, die Sie von diesem Gerät aus teilen.", "pt": "Transferências que está a partilhar a partir deste dispositivo.", "pl": "Transfery udostępniane z tego urządzenia.", - "nl": "Overdrachten die u vanaf dit apparaat deelt." + "nl": "Overdrachten die u vanaf dit apparaat deelt.", + "ru": "Передачи, которыми вы делитесь с этого устройства." } }, "send_title": { @@ -2522,7 +2709,8 @@ "de": "Senden", "pt": "Enviar", "pl": "Wyślij", - "nl": "Versturen" + "nl": "Versturen", + "ru": "Отправить" } }, "send_transfer_created": { @@ -2535,7 +2723,8 @@ "de": "Übertragung erstellt.", "pt": "Transferência criada.", "pl": "Transfer utworzony.", - "nl": "Overdracht aangemaakt." + "nl": "Overdracht aangemaakt.", + "ru": "Передача создана." } }, "send_transfer_details_title": { @@ -2548,7 +2737,8 @@ "de": "Übertragungsdetails", "pt": "Detalhes da transferência", "pl": "Szczegóły transferu", - "nl": "Overdrachtsdetails" + "nl": "Overdrachtsdetails", + "ru": "Сведения о передаче" } }, "send_transfers_title": { @@ -2561,7 +2751,8 @@ "de": "Ihre Übertragungen", "pt": "As suas transferências", "pl": "Twoje transfery", - "nl": "Uw overdrachten" + "nl": "Uw overdrachten", + "ru": "Ваши передачи" } }, "settings_subtitle": { @@ -2574,7 +2765,8 @@ "de": "Ihr Name, wo Übertragungen gesichert werden, Darstellung und Mitteilungen.", "pt": "O seu nome, onde as transferências são guardadas, o aspeto e as notificações.", "pl": "Twoja nazwa, miejsce zapisu transferów, wygląd i powiadomienia.", - "nl": "Uw naam, waar overdrachten worden bewaard, weergave en meldingen." + "nl": "Uw naam, waar overdrachten worden bewaard, weergave en meldingen.", + "ru": "Ваше имя, место сохранения передач, оформление и уведомления." } }, "settings_title": { @@ -2587,7 +2779,8 @@ "de": "Einstellungen", "pt": "Definições", "pl": "Ustawienia", - "nl": "Instellingen" + "nl": "Instellingen", + "ru": "Настройки" } }, "snackbar_dismiss": { @@ -2600,7 +2793,8 @@ "de": "Ausblenden", "pt": "Ignorar", "pl": "Zamknij", - "nl": "Sluiten" + "nl": "Sluiten", + "ru": "Закрыть" } }, "status_available": { @@ -2613,7 +2807,8 @@ "de": "Verfügbar", "pt": "Disponível", "pl": "Dostępny", - "nl": "Beschikbaar" + "nl": "Beschikbaar", + "ru": "Доступно" } }, "status_cancelled": { @@ -2626,7 +2821,8 @@ "de": "Abgebrochen", "pt": "Cancelado", "pl": "Anulowany", - "nl": "Geannuleerd" + "nl": "Geannuleerd", + "ru": "Отменено" } }, "status_completed": { @@ -2639,7 +2835,8 @@ "de": "Abgeschlossen", "pt": "Concluído", "pl": "Ukończony", - "nl": "Voltooid" + "nl": "Voltooid", + "ru": "Завершено" } }, "status_failed": { @@ -2652,7 +2849,8 @@ "de": "Fehlgeschlagen", "pt": "Falhou", "pl": "Niepowodzenie", - "nl": "Mislukt" + "nl": "Mislukt", + "ru": "Ошибка" } }, "status_preparing": { @@ -2665,7 +2863,8 @@ "de": "Wird vorbereitet", "pt": "A preparar", "pl": "Przygotowywanie", - "nl": "Voorbereiden" + "nl": "Voorbereiden", + "ru": "Подготовка" } }, "status_receiving": { @@ -2678,7 +2877,8 @@ "de": "Wird empfangen", "pt": "A receber", "pl": "Odbieranie", - "nl": "Ontvangen" + "nl": "Ontvangen", + "ru": "Получение" } }, "status_stopped": { @@ -2691,7 +2891,8 @@ "de": "Beendet", "pt": "Parada", "pl": "Zatrzymany", - "nl": "Gestopt" + "nl": "Gestopt", + "ru": "Остановлено" } }, "storage_calculating": { @@ -2704,7 +2905,8 @@ "de": "Wird berechnet…", "pt": "A calcular…", "pl": "Obliczanie…", - "nl": "Berekenen…" + "nl": "Berekenen…", + "ru": "Вычисление…" } }, "storage_delete_transfers": { @@ -2717,7 +2919,8 @@ "de": "Alle Übertragungen löschen", "pt": "Eliminar todas as transferências", "pl": "Usuń wszystkie transfery", - "nl": "Alle overdrachten verwijderen" + "nl": "Alle overdrachten verwijderen", + "ru": "Удалить все передачи" } }, "storage_delete_transfers_description": { @@ -2730,7 +2933,8 @@ "de": "Dies löscht alle Datensätze gesendeter und empfangener Übertragungen aus Ihrem Verlauf. Ihre empfangenen Dateien werden nicht gelöscht. Hinweis: Die Übertragungs-Engine behält ihre gespeicherten Inhalte, sodass die Übertragungsdaten möglicherweise nicht abnehmen. Dies kann nicht rückgängig gemacht werden.", "pt": "Isto elimina do seu histórico todos os registos de transferências enviadas e recebidas. Os seus ficheiros recebidos não são eliminados. Nota: o motor de transferência mantém o conteúdo armazenado, pelo que os dados de transferência podem não diminuir. Isto não pode ser anulado.", "pl": "To usuwa z historii wszystkie rekordy wysłanych i odebranych transferów. Twoje odebrane pliki nie są usuwane. Uwaga: silnik transferu zachowuje przechowywaną zawartość, więc dane transferu mogą się nie zmniejszyć. Tej operacji nie można cofnąć.", - "nl": "Hiermee worden alle records van verzonden en ontvangen overdrachten uit uw geschiedenis gewist. Uw ontvangen bestanden worden niet verwijderd. Let op: de overdrachtsengine bewaart de opgeslagen inhoud, dus de overdrachtsgegevens nemen mogelijk niet af. Dit kan niet ongedaan worden gemaakt." + "nl": "Hiermee worden alle records van verzonden en ontvangen overdrachten uit uw geschiedenis gewist. Uw ontvangen bestanden worden niet verwijderd. Let op: de overdrachtsengine bewaart de opgeslagen inhoud, dus de overdrachtsgegevens nemen mogelijk niet af. Dit kan niet ongedaan worden gemaakt.", + "ru": "Это удалит из истории все записи об отправленных и полученных передачах. Ваши полученные файлы не удаляются. Примечание: механизм передачи сохраняет своё содержимое, поэтому объём данных передачи может не уменьшиться. Это действие нельзя отменить." } }, "storage_deleting": { @@ -2743,7 +2947,8 @@ "de": "Wird gelöscht…", "pt": "A eliminar…", "pl": "Usuwanie…", - "nl": "Verwijderen…" + "nl": "Verwijderen…", + "ru": "Удаление…" } }, "storage_footer": { @@ -2756,7 +2961,8 @@ "de": "Übertragungsdaten werden von der Übertragungs-Engine verwaltet – Ihr Verlauf sowie der Inhalt der von Ihnen geteilten Dateien. Die Schaltfläche unten löscht Ihre Übertragungsdatensätze; die Engine behält ihre gespeicherten Inhalte, sodass dieser Wert möglicherweise nicht sinkt. Empfangene Dateien sind Ihre heruntergeladenen Dateien und werden hier niemals gelöscht.", "pt": "Os dados de transferência são geridos pelo motor de transferência — o seu histórico mais o conteúdo dos ficheiros que partilhou. O botão abaixo elimina os seus registos de transferências; o motor mantém o conteúdo armazenado, pelo que este valor pode não descer. Os ficheiros recebidos são os ficheiros que descarregou e nunca são eliminados aqui.", "pl": "Danymi transferu zarządza silnik transferu — Twoja historia oraz zawartość udostępnionych plików. Przycisk poniżej usuwa rekordy transferów; silnik zachowuje przechowywaną zawartość, więc ta wartość może się nie zmniejszyć. Odebrane pliki to Twoje pobrane pliki i nigdy nie są tu usuwane.", - "nl": "Overdrachtsgegevens worden beheerd door de overdrachtsengine — uw geschiedenis plus de inhoud van de bestanden die u hebt gedeeld. De knop hieronder wist uw overdrachtsrecords; de engine bewaart de opgeslagen inhoud, dus deze waarde daalt mogelijk niet. Ontvangen bestanden zijn uw gedownloade bestanden en worden hier nooit verwijderd." + "nl": "Overdrachtsgegevens worden beheerd door de overdrachtsengine — uw geschiedenis plus de inhoud van de bestanden die u hebt gedeeld. De knop hieronder wist uw overdrachtsrecords; de engine bewaart de opgeslagen inhoud, dus deze waarde daalt mogelijk niet. Ontvangen bestanden zijn uw gedownloade bestanden en worden hier nooit verwijderd.", + "ru": "Данными передачи управляет механизм передачи — ваша история плюс содержимое файлов, которыми вы поделились. Кнопка ниже удаляет записи о передачах; механизм сохраняет своё содержимое, поэтому это значение может не уменьшиться. Полученные файлы — это загруженные вами файлы, и они никогда не удаляются здесь." } }, "storage_received_files": { @@ -2769,7 +2975,8 @@ "de": "Empfangene Dateien", "pt": "Ficheiros recebidos", "pl": "Odebrane pliki", - "nl": "Ontvangen bestanden" + "nl": "Ontvangen bestanden", + "ru": "Полученные файлы" } }, "storage_temporary": { @@ -2782,7 +2989,8 @@ "de": "Temporäre Dateien", "pt": "Ficheiros temporários", "pl": "Pliki tymczasowe", - "nl": "Tijdelijke bestanden" + "nl": "Tijdelijke bestanden", + "ru": "Временные файлы" } }, "storage_title": { @@ -2795,7 +3003,8 @@ "de": "Speicher", "pt": "Armazenamento", "pl": "Pamięć", - "nl": "Opslag" + "nl": "Opslag", + "ru": "Хранилище" } }, "storage_total": { @@ -2808,7 +3017,8 @@ "de": "Gesamt", "pt": "Total", "pl": "Łącznie", - "nl": "Totaal" + "nl": "Totaal", + "ru": "Всего" } }, "storage_transfer_data": { @@ -2821,7 +3031,8 @@ "de": "Übertragungsdaten", "pt": "Dados de transferência", "pl": "Dane transferu", - "nl": "Overdrachtsgegevens" + "nl": "Overdrachtsgegevens", + "ru": "Данные передачи" } }, "storage_transfers_deleted": { @@ -2834,7 +3045,8 @@ "de": "Alle Übertragungen gelöscht", "pt": "Todas as transferências eliminadas", "pl": "Usunięto wszystkie transfery", - "nl": "Alle overdrachten verwijderd" + "nl": "Alle overdrachten verwijderd", + "ru": "Все передачи удалены" } }, "transfer_activity_description": { @@ -2847,7 +3059,8 @@ "de": "Wichtige Aktualisierungen zu dieser Übertragung ansehen", "pt": "Ver as atualizações importantes desta transferência", "pl": "Zobacz ważne aktualizacje tego transferu", - "nl": "Bekijk belangrijke updates voor deze overdracht" + "nl": "Bekijk belangrijke updates voor deze overdracht", + "ru": "Просматривайте важные обновления этой передачи" } }, "transfer_activity_title": { @@ -2860,7 +3073,8 @@ "de": "Aktivität", "pt": "Atividade", "pl": "Aktywność", - "nl": "Activiteit" + "nl": "Activiteit", + "ru": "Активность" } }, "transfer_delete_description": { @@ -2879,7 +3093,8 @@ "de": "„{arg1}“ wird nicht mehr geteilt und sein Übertragungsverlauf wird von diesem Gerät entfernt.", "pt": "«{arg1}» deixará de ser partilhado e o seu histórico de transferência será removido deste dispositivo.", "pl": "„{arg1}” przestanie być udostępniany, a jego historia transferu zostanie usunięta z tego urządzenia.", - "nl": "‘{arg1}’ wordt niet meer gedeeld en de overdrachtsgeschiedenis wordt van dit apparaat verwijderd." + "nl": "‘{arg1}’ wordt niet meer gedeeld en de overdrachtsgeschiedenis wordt van dit apparaat verwijderd.", + "ru": "«{arg1}» перестанет раздаваться, а её история передачи будет удалена с этого устройства." } }, "transfer_delete_title": { @@ -2892,7 +3107,8 @@ "de": "Übertragung löschen?", "pt": "Eliminar a transferência?", "pl": "Usunąć transfer?", - "nl": "Overdracht verwijderen?" + "nl": "Overdracht verwijderen?", + "ru": "Удалить передачу?" } }, "transfer_deleted": { @@ -2905,7 +3121,8 @@ "de": "Übertragung gelöscht.", "pt": "Transferência eliminada.", "pl": "Transfer usunięty.", - "nl": "Overdracht verwijderd." + "nl": "Overdracht verwijderd.", + "ru": "Передача удалена." } }, "transfer_deleting": { @@ -2918,7 +3135,8 @@ "de": "Wird gelöscht…", "pt": "A eliminar…", "pl": "Usuwanie…", - "nl": "Verwijderen…" + "nl": "Verwijderen…", + "ru": "Удаление…" } }, "transfer_details_title": { @@ -2931,7 +3149,8 @@ "de": "Übertragungsdetails", "pt": "Detalhes da transferência", "pl": "Szczegóły transferu", - "nl": "Overdrachtsdetails" + "nl": "Overdrachtsdetails", + "ru": "Сведения о передаче" } }, "transfer_event_approved": { @@ -2944,7 +3163,8 @@ "de": "Empfängerzugriff genehmigt", "pt": "Acesso do destinatário aprovado", "pl": "Zatwierdzono dostęp odbiorcy", - "nl": "Toegang ontvanger goedgekeurd" + "nl": "Toegang ontvanger goedgekeurd", + "ru": "Доступ получателя одобрен" } }, "transfer_event_completed": { @@ -2957,7 +3177,8 @@ "de": "Ein Empfänger hat die Übertragung abgeschlossen", "pt": "Um destinatário concluiu a transferência", "pl": "Odbiorca ukończył transfer", - "nl": "Een ontvanger heeft de overdracht voltooid" + "nl": "Een ontvanger heeft de overdracht voltooid", + "ru": "Получатель завершил передачу" } }, "transfer_event_connecting": { @@ -2970,7 +3191,8 @@ "de": "Verbindung zum Absender", "pt": "A ligar ao remetente", "pl": "Łączenie z nadawcą", - "nl": "Verbinden met afzender" + "nl": "Verbinden met afzender", + "ru": "Подключение к отправителю" } }, "transfer_event_downloading": { @@ -2983,7 +3205,8 @@ "de": "Wird geladen", "pt": "A descarregar", "pl": "Pobieranie", - "nl": "Downloaden" + "nl": "Downloaden", + "ru": "Загрузка" } }, "transfer_event_failed": { @@ -2996,7 +3219,8 @@ "de": "Bei der Übertragung ist ein Problem aufgetreten", "pt": "A transferência teve um problema", "pl": "Podczas transferu wystąpił problem", - "nl": "Er is een probleem opgetreden bij de overdracht" + "nl": "Er is een probleem opgetreden bij de overdracht", + "ru": "При передаче возникла проблема" } }, "transfer_event_preparing": { @@ -3009,7 +3233,8 @@ "de": "Ihre Übertragung wird vorbereitet", "pt": "A preparar a sua transferência", "pl": "Przygotowywanie transferu", - "nl": "Uw overdracht voorbereiden" + "nl": "Uw overdracht voorbereiden", + "ru": "Подготовка вашей передачи" } }, "transfer_event_ready": { @@ -3022,7 +3247,8 @@ "de": "Bereit zum Teilen", "pt": "Pronto para partilhar", "pl": "Gotowe do udostępnienia", - "nl": "Klaar om te delen" + "nl": "Klaar om te delen", + "ru": "Готово к раздаче" } }, "transfer_event_refused": { @@ -3035,7 +3261,8 @@ "de": "Empfängerzugriff abgelehnt", "pt": "Acesso do destinatário recusado", "pl": "Odrzucono dostęp odbiorcy", - "nl": "Toegang ontvanger geweigerd" + "nl": "Toegang ontvanger geweigerd", + "ru": "Доступ получателя отклонён" } }, "transfer_event_requested": { @@ -3048,7 +3275,8 @@ "de": "Ein Empfänger hat Zugriff angefragt", "pt": "Um destinatário pediu acesso", "pl": "Odbiorca poprosił o dostęp", - "nl": "Een ontvanger heeft toegang aangevraagd" + "nl": "Een ontvanger heeft toegang aangevraagd", + "ru": "Получатель запросил доступ" } }, "transfer_event_saving": { @@ -3061,7 +3289,8 @@ "de": "Wird gesichert", "pt": "A guardar", "pl": "Zapisywanie", - "nl": "Bewaren" + "nl": "Bewaren", + "ru": "Сохранение" } }, "transfer_event_stopped": { @@ -3074,7 +3303,8 @@ "de": "Freigabe beendet", "pt": "Partilha parada", "pl": "Zatrzymano udostępnianie", - "nl": "Delen gestopt" + "nl": "Delen gestopt", + "ru": "Раздача остановлена" } }, "transfer_event_updated": { @@ -3087,7 +3317,8 @@ "de": "Übertragung aktualisiert", "pt": "Transferência atualizada", "pl": "Transfer zaktualizowany", - "nl": "Overdracht bijgewerkt" + "nl": "Overdracht bijgewerkt", + "ru": "Передача обновлена" } }, "transfer_file_count": { @@ -3132,6 +3363,12 @@ "nl": { "one": "{count} bestand", "other": "{count} bestanden" + }, + "ru": { + "one": "{count} файл", + "few": "{count} файла", + "many": "{count} файлов", + "other": "{count} файла" } } }, @@ -3145,7 +3382,8 @@ "de": "Einladung gesichert.", "pt": "Convite guardado.", "pl": "Zaproszenie zapisane.", - "nl": "Uitnodiging bewaard." + "nl": "Uitnodiging bewaard.", + "ru": "Приглашение сохранено." } }, "transfer_nearby_device": { @@ -3158,7 +3396,8 @@ "de": "Gerät in der Nähe", "pt": "Dispositivo próximo", "pl": "Urządzenie w pobliżu", - "nl": "Apparaat in de buurt" + "nl": "Apparaat in de buurt", + "ru": "Устройство поблизости" } }, "transfer_nfc_unavailable": { @@ -3171,7 +3410,8 @@ "de": "Das Beschreiben von NFC-Tags ist auf diesem Gerät nicht verfügbar.", "pt": "A escrita de etiquetas NFC não está disponível neste dispositivo.", "pl": "Zapis tagów NFC nie jest dostępny na tym urządzeniu.", - "nl": "Het schrijven van NFC-tags is niet beschikbaar op dit apparaat." + "nl": "Het schrijven van NFC-tags is niet beschikbaar op dit apparaat.", + "ru": "Запись NFC-меток недоступна на этом устройстве." } }, "transfer_nfc_waiting": { @@ -3184,7 +3424,8 @@ "de": "Halten Sie Ihr Gerät an ein beschreibbares NFC-Tag.", "pt": "Aproxime o seu dispositivo de uma etiqueta NFC gravável.", "pl": "Zbliż urządzenie do zapisywalnego tagu NFC.", - "nl": "Houd uw apparaat bij een beschrijfbare NFC-tag." + "nl": "Houd uw apparaat bij een beschrijfbare NFC-tag.", + "ru": "Поднесите устройство к записываемой NFC-метке." } }, "transfer_nfc_written": { @@ -3197,7 +3438,8 @@ "de": "Einladung auf das NFC-Tag geschrieben.", "pt": "Convite escrito na etiqueta NFC.", "pl": "Zaproszenie zapisane na tagu NFC.", - "nl": "Uitnodiging naar de NFC-tag geschreven." + "nl": "Uitnodiging naar de NFC-tag geschreven.", + "ru": "Приглашение записано на NFC-метку." } }, "transfer_no_activity": { @@ -3210,7 +3452,8 @@ "de": "Es gibt noch keine Aktivität anzuzeigen.", "pt": "Ainda não há atividade para mostrar.", "pl": "Nie ma jeszcze aktywności do wyświetlenia.", - "nl": "Er is nog geen activiteit om weer te geven." + "nl": "Er is nog geen activiteit om weer te geven.", + "ru": "Пока нет активности для отображения." } }, "transfer_no_receivers": { @@ -3223,7 +3466,8 @@ "de": "Noch niemand hat diese Übertragung angefragt.", "pt": "Ainda ninguém pediu esta transferência.", "pl": "Nikt jeszcze nie poprosił o ten transfer.", - "nl": "Nog niemand heeft deze overdracht aangevraagd." + "nl": "Nog niemand heeft deze overdracht aangevraagd.", + "ru": "Никто ещё не запросил эту передачу." } }, "transfer_receiver_accepted": { @@ -3236,7 +3480,8 @@ "de": "Genehmigt – wartet auf Abschluss", "pt": "Aprovado — a aguardar conclusão", "pl": "Zatwierdzono — oczekiwanie na ukończenie", - "nl": "Goedgekeurd — wachten op voltooiing" + "nl": "Goedgekeurd — wachten op voltooiing", + "ru": "Одобрено — ожидание завершения" } }, "transfer_receiver_completed": { @@ -3249,7 +3494,8 @@ "de": "Erfolgreich empfangen", "pt": "Recebido com sucesso", "pl": "Odebrano pomyślnie", - "nl": "Succesvol ontvangen" + "nl": "Succesvol ontvangen", + "ru": "Успешно получено" } }, "transfer_receiver_expired": { @@ -3262,7 +3508,8 @@ "de": "Anfrage abgelaufen", "pt": "Pedido expirado", "pl": "Prośba wygasła", - "nl": "Verzoek verlopen" + "nl": "Verzoek verlopen", + "ru": "Запрос истёк" } }, "transfer_receiver_refused": { @@ -3275,7 +3522,8 @@ "de": "Anfrage abgelehnt", "pt": "Pedido recusado", "pl": "Prośba odrzucona", - "nl": "Verzoek geweigerd" + "nl": "Verzoek geweigerd", + "ru": "Запрос отклонён" } }, "transfer_receiver_requested": { @@ -3288,7 +3536,8 @@ "de": "Wartet auf Ihre Genehmigung", "pt": "A aguardar a sua aprovação", "pl": "Oczekiwanie na Twoje zatwierdzenie", - "nl": "Wachten op uw goedkeuring" + "nl": "Wachten op uw goedkeuring", + "ru": "Ожидание вашего одобрения" } }, "transfer_receiver_unknown": { @@ -3301,7 +3550,8 @@ "de": "Status nicht verfügbar", "pt": "Estado indisponível", "pl": "Status niedostępny", - "nl": "Status niet beschikbaar" + "nl": "Status niet beschikbaar", + "ru": "Статус недоступен" } }, "transfer_receivers_completed_count": { @@ -3320,7 +3570,8 @@ "de": "{count} abgeschlossen", "pt": "{count} concluídos", "pl": "Ukończone: {count}", - "nl": "{count} voltooid" + "nl": "{count} voltooid", + "ru": "Завершено: {count}" } }, "transfer_receivers_description": { @@ -3333,7 +3584,8 @@ "de": "Anfragen, Genehmigungen und abgeschlossene Zustellungen", "pt": "Pedidos, aprovações e entregas concluídas", "pl": "Prośby, zatwierdzenia i ukończone dostawy", - "nl": "Verzoeken, goedkeuringen en voltooide leveringen" + "nl": "Verzoeken, goedkeuringen en voltooide leveringen", + "ru": "Запросы, одобрения и завершённые доставки" } }, "transfer_receivers_pending": { @@ -3352,7 +3604,8 @@ "de": "{count} warten", "pt": "{count} em espera", "pl": "Oczekujące: {count}", - "nl": "{count} in behandeling" + "nl": "{count} in behandeling", + "ru": "Ожидают: {count}" } }, "transfer_receivers_title": { @@ -3365,7 +3618,8 @@ "de": "Empfänger", "pt": "Destinatários", "pl": "Odbiorcy", - "nl": "Ontvangers" + "nl": "Ontvangers", + "ru": "Получатели" } }, "transfer_scan_qr": { @@ -3378,7 +3632,8 @@ "de": "Mit VniDrop scannen, um diese Übertragung zu empfangen", "pt": "Leia com o VniDrop para receber esta transferência", "pl": "Zeskanuj za pomocą VniDrop, aby odebrać ten transfer", - "nl": "Scan met VniDrop om deze overdracht te ontvangen" + "nl": "Scan met VniDrop om deze overdracht te ontvangen", + "ru": "Отсканируйте с помощью VniDrop, чтобы получить эту передачу" } }, "transfer_share_description": { @@ -3391,7 +3646,8 @@ "de": "QR-Code, Einladungsdatei und Optionen in der Nähe", "pt": "Código QR, ficheiro de convite e opções por perto", "pl": "Kod QR, plik zaproszenia i opcje w pobliżu", - "nl": "QR-code, uitnodigingsbestand en opties in de buurt" + "nl": "QR-code, uitnodigingsbestand en opties in de buurt", + "ru": "QR-код, файл приглашения и варианты поблизости" } }, "transfer_share_title": { @@ -3404,7 +3660,8 @@ "de": "Teilen", "pt": "Partilhar", "pl": "Udostępnij", - "nl": "Delen" + "nl": "Delen", + "ru": "Поделиться" } }, "value_unavailable": { @@ -3417,7 +3674,8 @@ "de": "Nicht verfügbar", "pt": "Indisponível", "pl": "Niedostępne", - "nl": "Niet beschikbaar" + "nl": "Niet beschikbaar", + "ru": "Недоступно" } }, "version_title": { @@ -3430,7 +3688,8 @@ "de": "App-Version", "pt": "Versão da app", "pl": "Wersja aplikacji", - "nl": "App-versie" + "nl": "App-versie", + "ru": "Версия приложения" } } } diff --git a/shared/src/commonMain/composeResources/values-ru/strings.xml b/shared/src/commonMain/composeResources/values-ru/strings.xml new file mode 100644 index 0000000..fd984e0 --- /dev/null +++ b/shared/src/commonMain/composeResources/values-ru/strings.xml @@ -0,0 +1,259 @@ + + + Сообщить об ошибке + VniDrop передаёт файлы и папки напрямую с одного устройства на другое по сети, не загружая их в какой-либо хостинг-сервис. Не нужно создавать учётную запись, и после завершения ни одна копия вашей передачи не остаётся в облаке. + Прямая передача с устройства на устройство — ваши файлы попадают напрямую к получателю. + Соединения аутентифицированы и зашифрованы сквозным шифрованием (через Iroh), а входящие файлы проверяются по хешу их содержимого. + Вы решаете, кто получает: одобряйте каждый запрос или откройте передачу всем, у кого есть приглашение. + Без учётной записи — регистрироваться не нужно. + Открытый исходный код, распространяется по лицензии Apache 2.0. + Что такое VniDrop + Это не облачное хранилище — ни один сервер не хранит ваши файлы, и после передачи в облаке ничего не остаётся. + Это не публичная рассылка — приглашение является частной ссылкой доступа, а не объявлением для всех поблизости. + Это не служба синхронизации или резервного копирования. + Чем VniDrop не является + Лицензия + Политика конфиденциальности + Приглашения — это ключи доступа. Относитесь к QR-коду, NFC-метке или файлу .vnd как к частной ссылке доступа и делитесь ими только с теми, для кого они предназначены, особенно при варианте «Любой, у кого есть эта передача». + Отказ по умолчанию — VniDrop предоставляет только содержимое активной передачи и отклоняет неизвестные запросы. + Полученные файлы сохраняются на вашем устройстве и никогда не перезаписывают существующий файл. + Политика конфиденциальности + Если два устройства не могут соединиться напрямую, зашифрованное соединение может передаваться через ретранслятор. Ретрансляторы пересылают только зашифрованные пакеты; они никогда не хранят ваши файлы. + Конфиденциальность и безопасность + Отправляйте файлы напрямую. Сохраняйте контроль над тем, кто их получает. + О приложении + Следовать светлому или тёмному оформлению этого устройства. + Тёмный режим + Светлый режим + Системный + Оформление + Запрос на получение + Идентификатор устройства: %1$s + Устройство поблизости + Ожидающих запросов: %1$d + %1$s хочет получить «%2$s». + Уровень заряда + имя@пример.com + Контактный e-mail (необязательно) + Расскажите, что пошло не так. Мы прикладываем сведения об устройстве и, при желании, недавние журналы (конфиденциальные значения скрыты). + Сведения об устройстве + Опишите, что вы ожидали + Что вы ожидали? + Включить недавние журналы + Помогает нам диагностировать проблему. Конфиденциальные значения скрываются перед отправкой. + Размер вложения с журналами + Опишите, что вы ожидали. + Опишите, что произошло. + Перечислите шаги для воспроизведения проблемы + Шаги для воспроизведения (необязательно) + Отправить отчёт + Не удалось отправить отчёт об ошибке. Повторите попытку позже. + Спасибо — ваш отчёт об ошибке записан. + Отправка… + Опишите, что произошло + Что произошло? + Одобрить + Назад + Отмена + Отмена + Изменить файлы + Выбрать файлы + Выбрать папку + Очистить + Закрыть + Новая передача + Удалить передачу + Сохранить файл .vnd + Поделиться приглашением + Открыть Настройки + Получить + Начать получение + Отклонить + Удалить файл + По умолчанию + Повторить + Начать раздачу + Подготовка передачи… + Показать в Файлах + Записать на NFC-метку + Модель устройства + Имя устройства + Отправлять анонимные отчёты о сбоях и события использования, чтобы помочь нам улучшать VniDrop. Вы можете отключить это в любой момент. Приглашения, пути к файлам и содержимое передач никогда не включаются. + Передача диагностики отключена. + Передача диагностики включена. + Делиться диагностикой + Для сканирования QR-кода требуется доступ к камере. + Не удалось загрузить сведения об устройстве. + VniDrop не удалось получить доступ к выбранным файлам или папке. Проверьте разрешения и повторите попытку. + Что-то пошло не так. Повторите попытку. + VniDrop не удалось завершить запуск. Закройте приложение и повторите попытку. + Не удалось прочитать это приглашение. Попросите отправителя прислать новое. + Это приглашение пустое. Попробуйте открыть его снова. + В этой сборке отсутствует нативная библиотека VniDrop. + Не удалось использовать эту NFC-метку. Попробуйте другую. + Отправитель не одобрил эту передачу, или она была отклонена. + VniDrop не удалось сохранить данные передачи на этом устройстве. + Не удалось открыть выбранный объект. Попробуйте выбрать его снова. + Выберите хотя бы один объект для отправки. + VniDrop не удалось открыть сетевые сокеты на этом устройстве. + VniDrop ещё запускается. Откройте приглашение снова через мгновение. + Не удалось завершить передачу. Проверьте подключение и повторите попытку. + Имя получателя + Имя отправителя + Название передачи + Отображаемое имя + Требуется разрешение + Недоступно + Проверка папки… + Готово + Файлы + Размер + Статус + Получить + Отправить + Настройки + Сеть + Получайте уведомления о новых запросах на получение, пока VniDrop работает в фоне. + Уведомления включены. + Разрешить уведомления + Уведомления отключены для VniDrop. Вы можете включить их в Настройках. + Не удалось открыть настройки уведомлений. + Уведомления + Уведомления недоступны на этом устройстве. + Операционная система + Сохранять полученные передачи в + Параметры + Отменено + Завершено + Подключено + Подключение + Загрузка + Ошибка + Подготовка + Передача прервана + Подготовка + Готово + Получение + Запрос доступа + Сохранение + Отправка + Отправка получателям: %1$d + Готово к раздаче + Обработка… + Выберите доступный вам способ приглашения. + Как вы хотите подключиться? + Очистить историю + Все завершённые, неудачные и отменённые получения будут удалены из истории VniDrop. Загруженные файлы останутся на этом устройстве. + Очистить историю получения? + Передача получена. + «%1$s» будет удалён из истории VniDrop. Загруженный файл останется на этом устройстве. + Удалить из истории получения + Удалить из истории? + Откройте приглашение VniDrop, отсканируйте QR-код или поднесите NFC-метку. + Пока ничего не получено + История получения очищена. + История + Открыть приглашение .vnd + Выберите приглашение, сохранённое или отправленное на это устройство. + Прочитать NFC-метку + Поднесите это устройство к метке приглашения отправителя. + Сканировать QR-код + Используйте камеру, чтобы отсканировать код VniDrop отправителя. + Передачи, полученные на этом устройстве. + Поднесите к NFC-метке… + Не удалось открыть VniDrop в Файлах. + Проверить передачу + Получить + Передача VniDrop + Любой, у кого есть эта передача + Одобрение не требуется. Используйте только для объектов, которыми вы готовы поделиться. + Любой, у кого есть приглашение, может загружать, пока вы не остановите раздачу. Не используйте это для личных или конфиденциальных объектов. + Спрашивать перед каждой загрузкой + Вы одобряете или отклоняете каждого нового получателя. + Кто может это получить? + Выберите файлы или папку на этом устройстве. Вы сможете проверить выбор перед созданием передачи. + Выберите, чем поделиться + Создайте передачу, решите, кто может её получить, затем пригласите этих людей с помощью QR-кода, NFC-метки или файла приглашения. + Пока ничем не поделились + Размер недоступен + Папка + Создать новую передачу + Новая передача + Проверить передачу + Выбрано файлов: %1$d + Остановить раздачу + Это остановит передачу и прервёт всех, кто сейчас её загружает. Она останется в вашей истории со статусом «Остановлена». + Передачи, которыми вы делитесь с этого устройства. + Отправить + Передача создана. + Сведения о передаче + Ваши передачи + Ваше имя, место сохранения передач, оформление и уведомления. + Настройки + Закрыть + Доступно + Отменено + Завершено + Ошибка + Подготовка + Получение + Остановлено + Вычисление… + Удалить все передачи + Это удалит из истории все записи об отправленных и полученных передачах. Ваши полученные файлы не удаляются. Примечание: механизм передачи сохраняет своё содержимое, поэтому объём данных передачи может не уменьшиться. Это действие нельзя отменить. + Удаление… + Данными передачи управляет механизм передачи — ваша история плюс содержимое файлов, которыми вы поделились. Кнопка ниже удаляет записи о передачах; механизм сохраняет своё содержимое, поэтому это значение может не уменьшиться. Полученные файлы — это загруженные вами файлы, и они никогда не удаляются здесь. + Полученные файлы + Временные файлы + Хранилище + Всего + Данные передачи + Все передачи удалены + Просматривайте важные обновления этой передачи + Активность + «%1$s» перестанет раздаваться, а её история передачи будет удалена с этого устройства. + Удалить передачу? + Передача удалена. + Удаление… + Сведения о передаче + Доступ получателя одобрен + Получатель завершил передачу + Подключение к отправителю + Загрузка + При передаче возникла проблема + Подготовка вашей передачи + Готово к раздаче + Доступ получателя отклонён + Получатель запросил доступ + Сохранение + Раздача остановлена + Передача обновлена + Приглашение сохранено. + Устройство поблизости + Запись NFC-меток недоступна на этом устройстве. + Поднесите устройство к записываемой NFC-метке. + Приглашение записано на NFC-метку. + Пока нет активности для отображения. + Никто ещё не запросил эту передачу. + Одобрено — ожидание завершения + Успешно получено + Запрос истёк + Запрос отклонён + Ожидание вашего одобрения + Статус недоступен + Завершено: %1$d + Запросы, одобрения и завершённые доставки + Ожидают: %1$d + Получатели + Отсканируйте с помощью VniDrop, чтобы получить эту передачу + QR-код, файл приглашения и варианты поблизости + Поделиться + Недоступно + Версия приложения + + %1$d файл + %1$d файла + %1$d файлов + %1$d файла + + From 276ee9f97465700825e4ef7f260287993526d424 Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Mon, 20 Jul 2026 12:40:57 +0200 Subject: [PATCH 13/13] i18n(ru): avoid seeding terminology MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace "раздача"/"раздаваться" (literally "seeding") with neutral "общий доступ"/"отправка" phrasing across the Russian strings, to avoid BitTorrent connotations for App Store review. --- apple/VniDrop/Resources/Localizable.xcstrings | 12 ++++++------ localization/strings.json | 12 ++++++------ .../composeResources/values-ru/strings.xml | 12 ++++++------ 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index 4649aee..c35aa07 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -4504,7 +4504,7 @@ "ru": { "stringUnit": { "state": "needs_review", - "value": "Начать раздачу" + "value": "Начать общий доступ" } } } @@ -8464,7 +8464,7 @@ "ru": { "stringUnit": { "state": "needs_review", - "value": "Готово к раздаче" + "value": "Готово к отправке" } } } @@ -10204,7 +10204,7 @@ "ru": { "stringUnit": { "state": "needs_review", - "value": "Любой, у кого есть приглашение, может загружать, пока вы не остановите раздачу. Не используйте это для личных или конфиденциальных объектов." + "value": "Любой, у кого есть приглашение, может загружать, пока вы не остановите общий доступ. Не используйте это для личных или конфиденциальных объектов." } } } @@ -11044,7 +11044,7 @@ "ru": { "stringUnit": { "state": "needs_review", - "value": "Остановить раздачу" + "value": "Остановить общий доступ" } } } @@ -12844,7 +12844,7 @@ "ru": { "stringUnit": { "state": "needs_review", - "value": "«%1$@» перестанет раздаваться, а её история передачи будет удалена с этого устройства." + "value": "Общий доступ к «%1$@» будет остановлен, а история передачи будет удалена с этого устройства." } } } @@ -13504,7 +13504,7 @@ "ru": { "stringUnit": { "state": "needs_review", - "value": "Готово к раздаче" + "value": "Готово к отправке" } } } diff --git a/localization/strings.json b/localization/strings.json index 2d6e710..5942a9b 100644 --- a/localization/strings.json +++ b/localization/strings.json @@ -1124,7 +1124,7 @@ "pt": "Começar a partilhar", "pl": "Rozpocznij udostępnianie", "nl": "Delen starten", - "ru": "Начать раздачу" + "ru": "Начать общий доступ" } }, "button_sharing_file": { @@ -2054,7 +2054,7 @@ "pt": "Pronto para partilhar", "pl": "Gotowe do udostępnienia", "nl": "Klaar om te delen", - "ru": "Готово к раздаче" + "ru": "Готово к отправке" } }, "progress_working": { @@ -2466,7 +2466,7 @@ "pt": "Qualquer pessoa com o convite pode descarregar até parar de partilhar. Não utilize para itens privados ou sensíveis.", "pl": "Każdy, kto ma zaproszenie, może pobierać, dopóki nie zatrzymasz udostępniania. Nie używaj tego dla prywatnych ani wrażliwych elementów.", "nl": "Iedereen met de uitnodiging kan downloaden totdat u stopt met delen. Gebruik dit niet voor privé- of gevoelige items.", - "ru": "Любой, у кого есть приглашение, может загружать, пока вы не остановите раздачу. Не используйте это для личных или конфиденциальных объектов." + "ru": "Любой, у кого есть приглашение, может загружать, пока вы не остановите общий доступ. Не используйте это для личных или конфиденциальных объектов." } }, "send_access_approval": { @@ -2668,7 +2668,7 @@ "pt": "Parar de partilhar", "pl": "Zatrzymaj udostępnianie", "nl": "Stoppen met delen", - "ru": "Остановить раздачу" + "ru": "Остановить общий доступ" } }, "send_stop_sharing_description": { @@ -3094,7 +3094,7 @@ "pt": "«{arg1}» deixará de ser partilhado e o seu histórico de transferência será removido deste dispositivo.", "pl": "„{arg1}” przestanie być udostępniany, a jego historia transferu zostanie usunięta z tego urządzenia.", "nl": "‘{arg1}’ wordt niet meer gedeeld en de overdrachtsgeschiedenis wordt van dit apparaat verwijderd.", - "ru": "«{arg1}» перестанет раздаваться, а её история передачи будет удалена с этого устройства." + "ru": "Общий доступ к «{arg1}» будет остановлен, а история передачи будет удалена с этого устройства." } }, "transfer_delete_title": { @@ -3248,7 +3248,7 @@ "pt": "Pronto para partilhar", "pl": "Gotowe do udostępnienia", "nl": "Klaar om te delen", - "ru": "Готово к раздаче" + "ru": "Готово к отправке" } }, "transfer_event_refused": { diff --git a/shared/src/commonMain/composeResources/values-ru/strings.xml b/shared/src/commonMain/composeResources/values-ru/strings.xml index fd984e0..869bc11 100644 --- a/shared/src/commonMain/composeResources/values-ru/strings.xml +++ b/shared/src/commonMain/composeResources/values-ru/strings.xml @@ -72,7 +72,7 @@ Удалить файл По умолчанию Повторить - Начать раздачу + Начать общий доступ Подготовка передачи… Показать в Файлах Записать на NFC-метку @@ -138,7 +138,7 @@ Сохранение Отправка Отправка получателям: %1$d - Готово к раздаче + Готово к отправке Обработка… Выберите доступный вам способ приглашения. Как вы хотите подключиться? @@ -167,7 +167,7 @@ Передача VniDrop Любой, у кого есть эта передача Одобрение не требуется. Используйте только для объектов, которыми вы готовы поделиться. - Любой, у кого есть приглашение, может загружать, пока вы не остановите раздачу. Не используйте это для личных или конфиденциальных объектов. + Любой, у кого есть приглашение, может загружать, пока вы не остановите общий доступ. Не используйте это для личных или конфиденциальных объектов. Спрашивать перед каждой загрузкой Вы одобряете или отклоняете каждого нового получателя. Кто может это получить? @@ -181,7 +181,7 @@ Новая передача Проверить передачу Выбрано файлов: %1$d - Остановить раздачу + Остановить общий доступ Это остановит передачу и прервёт всех, кто сейчас её загружает. Она останется в вашей истории со статусом «Остановлена». Передачи, которыми вы делитесь с этого устройства. Отправить @@ -211,7 +211,7 @@ Все передачи удалены Просматривайте важные обновления этой передачи Активность - «%1$s» перестанет раздаваться, а её история передачи будет удалена с этого устройства. + Общий доступ к «%1$s» будет остановлен, а история передачи будет удалена с этого устройства. Удалить передачу? Передача удалена. Удаление… @@ -222,7 +222,7 @@ Загрузка При передаче возникла проблема Подготовка вашей передачи - Готово к раздаче + Готово к отправке Доступ получателя отклонён Получатель запросил доступ Сохранение