diff --git a/apple/VniDrop/Resources/Info.plist b/apple/VniDrop/Resources/Info.plist index f19dd0c..904953d 100644 --- a/apple/VniDrop/Resources/Info.plist +++ b/apple/VniDrop/Resources/Info.plist @@ -2,6 +2,18 @@ + CFBundleLocalizations + + en + fr + es + it + de + pt + pl + nl + ru + CADisableMinimumFrameDurationOnPhone CFBundleDevelopmentRegion diff --git a/apple/VniDrop/Resources/Localizable.xcstrings b/apple/VniDrop/Resources/Localizable.xcstrings index b34e4e2..c35aa07 100644 --- a/apple/VniDrop/Resources/Localizable.xcstrings +++ b/apple/VniDrop/Resources/Localizable.xcstrings @@ -1,2578 +1,15326 @@ { - "sourceLanguage" : "en", - "strings" : { - "%@" : { - - }, - "%@ · %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ · %2$@" - } - } - } - }, - "%@ %@ · %@" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ %2$@ · %3$@" - } - } - } - }, - "%@%%" : { - - }, - "about_bug_report" : { - "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_is_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "What VniDrop is" - } - } - } - }, - "about_is_direct" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "A direct device-to-device transfer — your files go straight to the receiver." - } - } - } - }, - "about_is_no_account" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Account-free — there’s nothing to sign up for." - } - } - } - }, - "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_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" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open source, released under the Apache 2.0 license." - } - } - } - }, - "about_isnt_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "What VniDrop isn’t" - } - } - } - }, - "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_sync" : { - "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_privacy_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Privacy & security" - } - } - } - }, - "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_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_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_local" : { - "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" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Privacy policy" - } - } - } - }, - "about_tagline" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Send files directly. Stay in control of who receives them." - } - } - } - }, - "about_privacy" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Privacy policy" - } - } - } - }, - "about_title" : { - "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_dark_mode" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dark mode" - } - } - } - }, - "appearance_light_mode" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Light mode" - } - } - } - }, - "appearance_system_mode" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "System" - } - } - } - }, - "appearance_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Appearance" - } - } - } - }, - "approval_connection_request" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receive request" - } - } - } - }, - "approval_endpoint_id" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Device ID: %1$@" - } - } - } - }, - "approval_nearby_device" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "A nearby device" - } - } - } - }, - "approval_pending_count" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$d requests waiting" - } - } - } - }, - "approval_request_body" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$@ wants to receive “%2$@”." - } - } - } - }, - "battery_level_title" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Battery level" - } - } - } - }, - "bug_report_contact_hint" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "name@example.com" - } - } - } - }, - "bug_report_contact_label" : { - "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_steps_hint" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "List the steps to reproduce the issue" - } - } - } - }, - "bug_report_what_hint" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Describe what happened" - } - } - } - }, - "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_device_section" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Device information" - } - } - } - }, - "bug_report_expected_label" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "What did you expect?" - } - } - } - }, - "bug_report_include_logs" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Include recent logs" - } - } - } - }, - "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_logs_size" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Log attachment size" - } - } - } - }, - "bug_report_missing_expected" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Please describe what you expected." - } - } - } - }, - "bug_report_missing_what" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Please describe what happened." - } - } - } - }, - "bug_report_steps_label" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Steps to reproduce (optional)" - } - } - } - }, - "bug_report_submit" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Submit report" - } - } - } - }, - "bug_report_submit_failed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Could not submit the bug report. Try again later." - } - } - } - }, - "bug_report_submitted" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thanks — your bug report was recorded." - } - } - } - }, - "bug_report_submitting" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Submitting…" - } - } - } - }, - "bug_report_what_label" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "What happened?" - } - } - } - }, - "button_approve" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Approve" - } - } - } - }, - "button_back" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Back" - } - } - } - }, - "button_cancel" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancel" - } - } - } - }, - "button_cancel_receive" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancel" - } - } - } - }, - "button_change_files" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Change files" - } - } - } - }, - "button_choose_files" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Choose files" - } - } - } - }, - "button_choose_folder" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Choose folder" - } - } - } - }, - "button_clear" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Clear" - } - } - } - }, - "button_close" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Close" - } - } - } - }, - "button_create_new_transfer" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "New transfer" - } - } - } - }, - "button_delete_transfer" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Delete transfer" - } - } - } - }, - "button_download_invitation" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Save .vnd file" - } - } - } - }, - "button_native_share" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Share invitation" - } - } - } - }, - "button_open_settings" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Open Settings" - } - } - } - }, - "button_receive" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receive" - } - } - } - }, - "button_receive_files" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Start receiving" - } - } - } - }, - "button_refuse" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Refuse" - } - } - } - }, - "button_remove_file" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Remove file" - } - } - } - }, - "button_reset_default" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Use default" - } - } - } - }, - "button_retry" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Retry" - } - } - } - }, - "button_share_file" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Start sharing" - } - } - } - }, - "button_sharing_file" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Preparing transfer…" - } - } - } - }, - "button_show_in_files" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Show in Files" - } - } - } - }, - "button_write_nfc" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Write to NFC tag" - } - } - } - }, - "device_model_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Device model" - } - } - } - }, - "device_name_title" : { - "extractionState" : "stale", - "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_disabled_message" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Diagnostics sharing is off." - } - } - } - }, - "diagnostics_enabled_message" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Diagnostics sharing is on." - } - } - } - }, - "diagnostics_title" : { - "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_device_info" : { - "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_generic" : { - "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_invalid_ticket" : { - "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_missing_native_library" : { - "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_permission" : { - "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_selection_failed" : { - "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_socket_bind" : { - "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_transfer" : { - "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_sender_name" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sender name" - } - } - } - }, - "field_transfer_name" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer name" - } - } - } - }, - "field_username" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Display name" - } - } - } - }, - "folder_status_permission_required" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Permission needed" - } - } - } - }, - "folder_status_unavailable" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Unavailable" - } - } - } - }, - "folder_status_validating" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Checking folder…" - } - } - } - }, - "folder_status_writable" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ready" - } - } - } - }, - "metadata_files" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Files" - } - } - } - }, - "metadata_size" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Size" - } - } - } - }, - "metadata_status" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Status" - } - } - } - }, - "nav_receive" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receive" - } - } - } - }, - "nav_send" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Send" - } - } - } - }, - "nav_settings" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Settings" - } - } - } - }, - "network_title" : { - "extractionState" : "stale", - "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_enabled_message" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Notifications enabled." - } - } - } - }, - "notifications_local_title" : { - "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_settings_open_failed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Could not open notification settings." - } - } - } - }, - "notifications_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Notifications" - } - } - } - }, - "notifications_unsupported" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Notifications are not available on this device." - } - } - } - }, - "os_version_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Operating system" - } - } - } - }, - "preferences_receive_folder_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Save received transfers to" - } - } - } - }, - "preferences_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Preferences" - } - } - } - }, - "progress_cancelled" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancelled" - } - } - } - }, - "progress_completed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Completed" - } - } - } - }, - "progress_connected" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Connected" - } - } - } - }, - "progress_connecting" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Connecting" - } - } - } - }, - "progress_downloading" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Downloading" - } - } - } - }, - "progress_failed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Failed" - } - } - } - }, - "progress_getting_ready" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Getting ready" - } - } - } - }, - "progress_interrupted" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer interrupted" - } - } - } - }, - "progress_preparing" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Preparing" - } - } - } - }, - "progress_ready" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ready" - } - } - } - }, - "progress_receiving" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receiving" - } - } - } - }, - "progress_requesting_access" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Requesting access" - } - } - } - }, - "progress_saving" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Saving" - } - } - } - }, - "progress_sending" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sending" - } - } - } - }, - "progress_sending_to_count" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sending to %lld" - } - } - } - }, - "progress_share_ready" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ready to share" - } - } - } - }, - "progress_working" : { - "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_title" : { - "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_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_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Clear receive history?" - } - } - } - }, - "receive_completed" : { - "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_item" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Delete from receive history" - } - } - } - }, - "receive_delete_history_title" : { - "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_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nothing received yet" - } - } - } - }, - "receive_history_cleared" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receive history cleared." - } - } - } - }, - "receive_history_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "History" - } - } - } - }, - "receive_method_file" : { - "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_nfc" : { - "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_scan" : { - "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_new_subtitle" : { - "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_open_files_failed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Couldn’t open VniDrop in Files." - } - } - } - }, - "receive_review_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Review transfer" - } - } - } - }, - "receive_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receive" - } - } - } - }, - "receive_unknown_transfer" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "VniDrop transfer" - } - } - } - }, - "send_access_anyone" : { - "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_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_approval" : { - "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_title" : { - "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_title" : { - "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_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nothing shared yet" - } - } - } - }, - "send_file_size_unknown" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Size unavailable" - } - } - } - }, - "send_folder_label" : { - "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_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "New transfer" - } - } - } - }, - "send_review_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Review transfer" - } - } - } - }, - "send_selected_files_count" : { - "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" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stop sharing" - } - } - } - }, - "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_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Send" - } - } - } - }, - "send_transfer_created" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer created." - } - } - } - }, - "send_transfer_details_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer details" - } - } - } - }, - "send_transfers_title" : { - "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_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Settings" - } - } - } - }, - "snackbar_dismiss" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dismiss" - } - } - } - }, - "storage_calculating" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Calculating…" - } - } - } - }, - "storage_delete_transfers" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Delete all transfers" - } - } - } - }, - "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." - } - } - } - }, - "storage_deleting" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deleting…" - } - } - } - }, - "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." - } - } - } - }, - "storage_received_files" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Received files" - } - } - } - }, - "storage_temporary" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Temporary files" - } - } - } - }, - "storage_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Storage" - } - } - } - }, - "storage_total" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Total" - } - } - } - }, - "storage_transfer_data" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer data" - } - } - } - }, - "storage_transfers_deleted" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "All transfers deleted" - } - } - } - }, - "status_available" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Available" - } - } - } - }, - "status_cancelled" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancelled" - } - } - } - }, - "status_completed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Completed" - } - } - } - }, - "status_failed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Failed" - } - } - } - }, - "status_preparing" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Preparing" - } - } - } - }, - "status_receiving" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receiving" - } - } - } - }, - "status_stopped" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stopped" - } - } - } - }, - "transfer_activity_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "See important updates for this transfer" - } - } - } - }, - "transfer_activity_title" : { - "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_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Delete transfer?" - } - } - } - }, - "transfer_deleted" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer deleted." - } - } - } - }, - "transfer_deleting" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deleting…" - } - } - } - }, - "transfer_details_title" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Transfer details" - } - } - } - }, - "transfer_event_approved" : { - "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_connecting" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Connecting to sender" - } - } - } - }, - "transfer_event_downloading" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Downloading" - } - } - } - }, - "transfer_event_failed" : { - "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_ready" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ready to share" - } - } - } - }, - "transfer_event_refused" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receiver access refused" - } - } - } - }, - "transfer_event_requested" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "A receiver requested access" - } - } - } - }, - "transfer_event_saving" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Saving" - } - } - } - }, - "transfer_event_stopped" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sharing stopped" - } - } - } - }, - "transfer_event_updated" : { - "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_other" : { - "extractionState" : "stale", - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$d files" - } - } - } - }, - "transfer_invitation_saved" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Invitation saved." - } - } - } - }, - "transfer_nearby_device" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nearby device" - } - } - } - }, - "transfer_nfc_unavailable" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "NFC tag writing is not available on this device." - } - } - } - }, - "transfer_nfc_waiting" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hold your device near a writable NFC tag." - } - } - } - }, - "transfer_nfc_written" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Invitation written to the NFC tag." - } - } - } - }, - "transfer_no_activity" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "There is no activity to show yet." - } - } - } - }, - "transfer_no_receivers" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nobody has requested this transfer yet." - } - } - } - }, - "transfer_receiver_accepted" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Approved — waiting for completion" - } - } - } - }, - "transfer_receiver_completed" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Received successfully" - } - } - } - }, - "transfer_receiver_expired" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Request expired" - } - } - } - }, - "transfer_receiver_refused" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Request refused" - } - } - } - }, - "transfer_receiver_requested" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Waiting for your approval" - } - } - } - }, - "transfer_receiver_unknown" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Status unavailable" - } - } - } - }, - "transfer_receivers_completed_count" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$d completed" - } - } - } - }, - "transfer_receivers_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Requests, approvals, and completed deliveries" - } - } - } - }, - "transfer_receivers_pending" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%1$d waiting" - } - } - } - }, - "transfer_receivers_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receivers" - } - } - } - }, - "transfer_scan_qr" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Scan with VniDrop to receive this transfer" - } - } - } - }, - "transfer_share_description" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "QR code, invitation file, and nearby options" - } - } - } - }, - "transfer_share_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Share" - } - } - } - }, - "value_unavailable" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Not available" - } - } - } - }, - "version_title" : { - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "App version" + "sourceLanguage": "en", + "strings": { + "%@": { + "comment": "Apple format passthrough placeholder (single value). Legacy literal key — rename to a semantic key.", + "extractionState": "manual" + }, + "%@ %@ · %@": { + "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", + "value": "%1$@ %2$@ · %3$@" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ %2$@ · %3$@" + } + } + } + }, + "%@ · %@": { + "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", + "value": "%1$@ · %2$@" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ · %2$@" + } + } + } + }, + "%@%%": { + "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": "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", + "value": "Report a bug" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Informar de un error" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Signaler un bug" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Segnala un bug" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Een fout melden" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zgłoś błąd" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Comunicar um erro" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сообщить об ошибке" + } + } + } + }, + "about_description": { + "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", + "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", + "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." + } + }, + "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", + "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", + "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 передаёт файлы и папки напрямую с одного устройства на другое по сети, не загружая их в какой-либо хостинг-сервис. Не нужно создавать учётную запись, и после завершения ни одна копия вашей передачи не остаётся в облаке." + } + } + } + }, + "about_is_direct": { + "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", + "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", + "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." + } + }, + "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", + "value": "Bezpośredni transfer między urządzeniami — pliki trafiają prosto do odbiorcy." + } + }, + "pt": { + "stringUnit": { + "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": "Прямая передача с устройства на устройство — ваши файлы попадают напрямую к получателю." + } + } + } + }, + "about_is_encrypted": { + "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", + "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", + "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." + } + }, + "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", + "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", + "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), а входящие файлы проверяются по хешу их содержимого." + } + } + } + }, + "about_is_in_control": { + "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", + "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", + "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." + } + }, + "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", + "value": "To Ty decydujesz, kto otrzymuje: zatwierdź każde żądanie lub udostępnij transfer każdemu, kto ma zaproszenie." + } + }, + "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." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Вы решаете, кто получает: одобряйте каждый запрос или откройте передачу всем, у кого есть приглашение." + } + } + } + }, + "about_is_no_account": { + "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", + "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", + "value": "Sans compte — il n’y a rien à créer." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Bez konta — nie trzeba się rejestrować." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Sem conta — não há nada para registar." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Без учётной записи — регистрироваться не нужно." + } + } + } + }, + "about_is_open": { + "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", + "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", + "value": "Open source, publié sous licence Apache 2.0." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Otwarte oprogramowanie, wydane na licencji Apache 2.0." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Código aberto, publicado sob a licença Apache 2.0." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Открытый исходный код, распространяется по лицензии Apache 2.0." + } + } + } + }, + "about_is_title": { + "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", + "value": "What VniDrop is" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Qué es VniDrop" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ce qu’est VniDrop" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cos’è VniDrop" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wat VniDrop is" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Czym jest VniDrop" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O que o VniDrop é" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Что такое VniDrop" + } + } + } + }, + "about_isnt_cloud": { + "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", + "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", + "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." + } + }, + "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", + "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", + "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": "Это не облачное хранилище — ни один сервер не хранит ваши файлы, и после передачи в облаке ничего не остаётся." + } + } + } + }, + "about_isnt_public": { + "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", + "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", + "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." + } + }, + "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", + "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", + "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": "Это не публичная рассылка — приглашение является частной ссылкой доступа, а не объявлением для всех поблизости." + } + } + } + }, + "about_isnt_sync": { + "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", + "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", + "value": "Pas un service de synchronisation ou de sauvegarde." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "To nie usługa synchronizacji ani kopii zapasowej." + } + }, + "pt": { + "stringUnit": { + "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": "Это не служба синхронизации или резервного копирования." + } + } + } + }, + "about_isnt_title": { + "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", + "value": "What VniDrop isn’t" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Qué no es VniDrop" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ce que VniDrop n’est pas" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cosa non è VniDrop" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wat VniDrop niet is" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Czym VniDrop nie jest" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O que o VniDrop não é" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Чем VniDrop не является" + } + } + } + }, + "about_license_label": { + "comment": "About screen: label for the license row.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Lizenz" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "License" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Licencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Licence" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Licenza" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Licentie" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Licencja" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Licença" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Лицензия" + } + } + } + }, + "about_privacy": { + "comment": "About screen: link to the privacy policy.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Datenschutzrichtlinie" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Privacy policy" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Política de privacidad" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Politique de confidentialité" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Informativa sulla privacy" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Privacybeleid" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Polityka prywatności" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Política de privacidade" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Политика конфиденциальности" + } + } + } + }, + "about_privacy_capability": { + "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", + "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", + "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»." + } + }, + "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", + "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", + "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 как к частной ссылке доступа и делитесь ими только с теми, для кого они предназначены, особенно при варианте «Любой, у кого есть эта передача»." + } + } + } + }, + "about_privacy_deny": { + "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", + "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", + "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." + } + }, + "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", + "value": "Domyślnie odmowa — VniDrop udostępnia tylko zawartość aktywnego udostępnienia i odrzuca nieznane żądania." + } + }, + "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." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отказ по умолчанию — VniDrop предоставляет только содержимое активной передачи и отклоняет неизвестные запросы." + } + } + } + }, + "about_privacy_local": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen bestanden worden op uw apparaat bewaard en overschrijven nooit een bestaand bestand." + } + }, + "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", + "value": "Os ficheiros recebidos são guardados no seu dispositivo e nunca substituem um ficheiro existente." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Полученные файлы сохраняются на вашем устройстве и никогда не перезаписывают существующий файл." + } + } + } + }, + "about_privacy_policy_label": { + "comment": "About screen: label for the privacy policy row.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Datenschutzrichtlinie" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Privacy policy" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Política de privacidad" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Politique de confidentialité" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Informativa sulla privacy" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Privacybeleid" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Polityka prywatności" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Política de privacidade" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Политика конфиденциальности" + } + } + } + }, + "about_privacy_relay": { + "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", + "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", + "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." + } + }, + "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", + "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", + "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": "Если два устройства не могут соединиться напрямую, зашифрованное соединение может передаваться через ретранслятор. Ретрансляторы пересылают только зашифрованные пакеты; они никогда не хранят ваши файлы." + } + } + } + }, + "about_privacy_title": { + "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", + "value": "Privacy & security" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Privacidad y seguridad" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Confidentialité et sécurité" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Privacy e sicurezza" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Privacy en beveiliging" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Prywatność i bezpieczeństwo" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Privacidade e segurança" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Конфиденциальность и безопасность" + } + } + } + }, + "about_tagline": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verstuur bestanden rechtstreeks. Houd controle over wie ze ontvangt." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wysyłaj pliki bezpośrednio. Zachowaj kontrolę nad tym, kto je otrzymuje." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Envie ficheiros diretamente. Mantenha o controlo sobre quem os recebe." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправляйте файлы напрямую. Сохраняйте контроль над тем, кто их получает." + } + } + } + }, + "about_title": { + "comment": "About screen: navigation/screen title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Über" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "About" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Acerca de" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "À propos" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Informazioni" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Over" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Informacje" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Acerca de" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "О приложении" + } + } + } + }, + "appearance_auto_description": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "De lichte of donkere weergave van dit apparaat volgen." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Dopasuj do jasnego lub ciemnego wyglądu tego urządzenia." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Acompanhar o aspeto claro ou escuro deste dispositivo." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Следовать светлому или тёмному оформлению этого устройства." + } + } + } + }, + "appearance_dark_mode": { + "comment": "Settings > Appearance: label for the dark theme option.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Dunkelmodus" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Dark mode" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Modo oscuro" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Mode sombre" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Modalità scura" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Donkere modus" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Tryb ciemny" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Modo escuro" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Тёмный режим" + } + } + } + }, + "appearance_light_mode": { + "comment": "Settings > Appearance: label for the light theme option.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Hellmodus" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Light mode" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Modo claro" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Mode clair" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Modalità chiara" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Lichte modus" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Tryb jasny" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Modo claro" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Светлый режим" + } + } + } + }, + "appearance_system_mode": { + "comment": "Settings > Appearance: label for the follow-system option.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "System" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "System" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Sistema" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Système" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Sistema" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Systeem" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "System" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Sistema" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Системный" + } + } + } + }, + "appearance_title": { + "comment": "Settings > Appearance: section title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Darstellung" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Appearance" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Apariencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Apparence" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Aspetto" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Weergave" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wygląd" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aspeto" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Оформление" + } + } + } + }, + "approval_connection_request": { + "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", + "value": "Receive request" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Solicitud de recepción" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demande de réception" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Richiesta di ricezione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangstverzoek" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Prośba o odbiór" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pedido de receção" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Запрос на получение" + } + } + } + }, + "approval_endpoint_id": { + "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", + "value": "Device ID: %1$@" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "ID del dispositivo: %1$@" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Identifiant de l’appareil : %1$@" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "ID dispositivo: %1$@" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Apparaat-ID: %1$@" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Identyfikator urządzenia: %1$@" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "ID do dispositivo: %1$@" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Идентификатор устройства: %1$@" + } + } + } + }, + "approval_nearby_device": { + "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", + "value": "A nearby device" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Un dispositivo cercano" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Un appareil à proximité" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Un dispositivo nelle vicinanze" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Een apparaat in de buurt" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Urządzenie w pobliżu" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Um dispositivo próximo" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Устройство поблизости" + } + } + } + }, + "approval_pending_count": { + "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", + "value": "%1$d requests waiting" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d solicitudes en espera" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d demandes en attente" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d richieste in attesa" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d verzoeken in behandeling" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Oczekujące prośby: %1$d" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d pedidos em espera" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ожидающих запросов: %1$d" + } + } + } + }, + "approval_request_body": { + "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", + "value": "%1$@ wants to receive “%2$@”." + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ quiere recibir «%2$@»." + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ souhaite recevoir « %2$@ »." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ vuole ricevere «%2$@»." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ wil ‘%2$@’ ontvangen." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ chce odebrać „%2$@”." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ quer receber «%2$@»." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "%1$@ хочет получить «%2$@»." + } + } + } + }, + "battery_level_title": { + "comment": "Device information row: battery level label.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Batteriestand" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Battery level" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nivel de batería" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Niveau de batterie" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Livello batteria" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Batterijniveau" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Poziom baterii" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nível da bateria" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Уровень заряда" + } + } + } + }, + "bug_report_contact_hint": { + "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", + "value": "name@example.com" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "nombre@ejemplo.com" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "nom@exemple.com" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "nome@esempio.com" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "naam@voorbeeld.com" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "nazwa@przyklad.com" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "nome@exemplo.com" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "имя@пример.com" + } + } + } + }, + "bug_report_contact_label": { + "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", + "value": "Contact email (optional)" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Correo de contacto (opcional)" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "E-mail de contact (facultatif)" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Email di contatto (facoltativa)" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Contact-e-mail (optioneel)" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "E-mail kontaktowy (opcjonalnie)" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "E-mail de contacto (opcional)" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Контактный e-mail (необязательно)" + } + } + } + }, + "bug_report_description": { + "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", + "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", + "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)." + } + }, + "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", + "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", + "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": "Расскажите, что пошло не так. Мы прикладываем сведения об устройстве и, при желании, недавние журналы (конфиденциальные значения скрыты)." + } + } + } + }, + "bug_report_device_section": { + "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", + "value": "Device information" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Información del dispositivo" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Informations sur l’appareil" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Informazioni sul dispositivo" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Apparaatgegevens" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Informacje o urządzeniu" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Informações do dispositivo" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сведения об устройстве" + } + } + } + }, + "bug_report_expected_hint": { + "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", + "value": "Describe what you expected to happen" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Describa lo que esperaba que ocurriera" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Décrivez ce à quoi vous vous attendiez" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Descriva cosa si aspettava che accadesse" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Beschrijf wat u verwachtte" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Opisz oczekiwane zachowanie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Descreva o que esperava que acontecesse" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Опишите, что вы ожидали" + } + } + } + }, + "bug_report_expected_label": { + "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", + "value": "What did you expect?" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Qué esperaba?" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "À quoi vous attendiez-vous ?" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cosa si aspettava?" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wat verwachtte u?" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Czego oczekiwano?" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O que esperava?" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Что вы ожидали?" + } + } + } + }, + "bug_report_include_logs": { + "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", + "value": "Include recent logs" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Incluir registros recientes" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Inclure les journaux récents" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Includi i log recenti" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Recente logbestanden meesturen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Dołącz ostatnie dzienniki" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Incluir registos recentes" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Включить недавние журналы" + } + } + } + }, + "bug_report_include_logs_description": { + "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", + "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", + "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." + } + }, + "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", + "value": "Pomaga nam zdiagnozować problem. Wrażliwe wartości są ukrywane przed wysłaniem." + } + }, + "pt": { + "stringUnit": { + "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": "Помогает нам диагностировать проблему. Конфиденциальные значения скрываются перед отправкой." + } + } + } + }, + "bug_report_logs_size": { + "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", + "value": "Log attachment size" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Tamaño del archivo de registros" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Taille de la pièce jointe des journaux" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dimensione dell’allegato dei log" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Grootte van logbijlage" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Rozmiar załącznika z dziennikami" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Tamanho do anexo de registos" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Размер вложения с журналами" + } + } + } + }, + "bug_report_missing_expected": { + "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", + "value": "Please describe what you expected." + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Describa lo que esperaba." + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Veuillez décrire ce à quoi vous vous attendiez." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Descriva cosa si aspettava." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Beschrijf wat u verwachtte." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Opisz oczekiwane zachowanie." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Descreva o que esperava." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Опишите, что вы ожидали." + } + } + } + }, + "bug_report_missing_what": { + "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", + "value": "Please describe what happened." + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Describa lo que ocurrió." + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Veuillez décrire ce qui s’est passé." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Descriva cosa è accaduto." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Beschrijf wat er gebeurde." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Opisz, co się stało." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Descreva o que aconteceu." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Опишите, что произошло." + } + } + } + }, + "bug_report_steps_hint": { + "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", + "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", + "value": "Listez les étapes pour reproduire le problème" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Wymień kroki umożliwiające odtworzenie problemu" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Enumere os passos para reproduzir o problema" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Перечислите шаги для воспроизведения проблемы" + } + } + } + }, + "bug_report_steps_label": { + "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", + "value": "Steps to reproduce (optional)" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Pasos para reproducir (opcional)" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Étapes pour reproduire (facultatif)" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Passaggi per riprodurre (facoltativi)" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Stappen om te reproduceren (optioneel)" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Kroki do odtworzenia (opcjonalnie)" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Passos para reproduzir (opcional)" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Шаги для воспроизведения (необязательно)" + } + } + } + }, + "bug_report_submit": { + "comment": "Bug report form: submit button.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Bericht senden" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Submit report" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar informe" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoyer le rapport" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invia segnalazione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Rapport versturen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wyślij zgłoszenie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar relatório" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправить отчёт" + } + } + } + }, + "bug_report_submit_failed": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Het foutrapport kon niet worden verstuurd. Probeer het later opnieuw." + } + }, + "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", + "value": "Não foi possível enviar o relatório de erro. Tente novamente mais tarde." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось отправить отчёт об ошибке. Повторите попытку позже." + } + } + } + }, + "bug_report_submitted": { + "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", + "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", + "value": "Merci — votre rapport de bug a été enregistré." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Grazie: la sua segnalazione è stata registrata." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bedankt — uw foutrapport is vastgelegd." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Dziękujemy — Twoje zgłoszenie błędu zostało zapisane." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Obrigado — o seu relatório de erro foi registado." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Спасибо — ваш отчёт об ошибке записан." + } + } + } + }, + "bug_report_submitting": { + "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", + "value": "Submitting…" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enviando…" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoi…" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invio in corso…" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bezig met versturen…" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wysyłanie…" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A enviar…" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправка…" + } + } + } + }, + "bug_report_what_hint": { + "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", + "value": "Describe what happened" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Describa lo que ocurrió" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Décrivez ce qui s’est passé" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Descriva cosa è accaduto" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Beschrijf wat er gebeurde" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Opisz, co się stało" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Descreva o que aconteceu" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Опишите, что произошло" + } + } + } + }, + "bug_report_what_label": { + "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", + "value": "What happened?" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Qué ocurrió?" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Que s’est-il passé ?" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cosa è accaduto?" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wat is er gebeurd?" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Co się stało?" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O que aconteceu?" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Что произошло?" + } + } + } + }, + "button_approve": { + "comment": "Button: approve a receiver's request.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Genehmigen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Approve" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Aprobar" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Approuver" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Approva" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Goedkeuren" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zatwierdź" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aprovar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Одобрить" + } + } + } + }, + "button_back": { + "comment": "Button: go back to the previous step/screen.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Zurück" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Back" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Atrás" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Retour" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Indietro" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Terug" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wstecz" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Voltar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Назад" + } + } + } + }, + "button_cancel": { + "comment": "Button: cancel the current action or dialog.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Abbrechen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Cancel" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelar" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Annuler" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Annulla" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Annuleren" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Anuluj" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отмена" + } + } + } + }, + "button_cancel_receive": { + "comment": "Button: cancel an in-progress receive.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Abbrechen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Cancel" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelar" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Annuler" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Annulla" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Annuleren" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Anuluj" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отмена" + } + } + } + }, + "button_change_files": { + "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", + "value": "Change files" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cambiar archivos" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Modifier les fichiers" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cambia file" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bestanden wijzigen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zmień pliki" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Alterar ficheiros" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Изменить файлы" + } + } + } + }, + "button_choose_files": { + "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", + "value": "Choose files" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Elegir archivos" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Choisir des fichiers" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Scegli file" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bestanden kiezen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wybierz pliki" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Escolher ficheiros" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выбрать файлы" + } + } + } + }, + "button_choose_folder": { + "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", + "value": "Choose folder" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Elegir carpeta" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Choisir un dossier" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Scegli cartella" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Map kiezen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wybierz folder" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Escolher pasta" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выбрать папку" + } + } + } + }, + "button_clear": { + "comment": "Button: clear the current input or selection.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Löschen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Clear" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Borrar" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Effacer" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cancella" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wissen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wyczyść" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Limpar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Очистить" + } + } + } + }, + "button_close": { + "comment": "Button: close the current sheet/dialog.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Schließen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Close" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cerrar" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Fermer" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Chiudi" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Sluiten" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zamknij" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Fechar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Закрыть" + } + } + } + }, + "button_create_new_transfer": { + "comment": "Button: start creating a new transfer (Send tab).", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Neue Übertragung" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "New transfer" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nueva transferencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nouveau transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nuovo trasferimento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Nieuwe overdracht" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nowy transfer" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nova transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Новая передача" + } + } + } + }, + "button_delete_transfer": { + "comment": "Button: delete a transfer.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung löschen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Delete transfer" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar transferencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Supprimer le transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Elimina trasferimento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht verwijderen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usuń transfer" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удалить передачу" + } + } + } + }, + "button_download_invitation": { + "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", + "value": "Save .vnd file" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Guardar archivo .vnd" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Enregistrer le fichier .vnd" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Salva file .vnd" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": ".vnd-bestand bewaren" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zapisz plik .vnd" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Guardar ficheiro .vnd" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сохранить файл .vnd" + } + } + } + }, + "button_native_share": { + "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", + "value": "Share invitation" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Compartir invitación" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Partager l’invitation" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Condividi invito" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uitnodiging delen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Udostępnij zaproszenie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Partilhar convite" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Поделиться приглашением" + } + } + } + }, + "button_open_settings": { + "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", + "value": "Open Settings" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Abrir Ajustes" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ouvrir les Réglages" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Apri Impostazioni" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Instellingen openen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Otwórz Ustawienia" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Abrir Definições" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Открыть Настройки" + } + } + } + }, + "button_receive": { + "comment": "Button: receive label (Receive action).", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfangen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Receive" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Recibir" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Recevoir" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ricevi" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbierz" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Receber" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получить" + } + } + } + }, + "button_receive_files": { + "comment": "Button: start receiving a transfer.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfang starten" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Start receiving" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Empezar a recibir" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Commencer à recevoir" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Inizia a ricevere" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen starten" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Rozpocznij odbieranie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Começar a receber" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Начать получение" + } + } + } + }, + "button_refuse": { + "comment": "Button: refuse a receiver's request.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ablehnen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Refuse" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Rechazar" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Refuser" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Rifiuta" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Weigeren" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odrzuć" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Recusar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отклонить" + } + } + } + }, + "button_remove_file": { + "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", + "value": "Remove file" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Quitar archivo" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Retirer le fichier" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Rimuovi file" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bestand verwijderen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usuń plik" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Remover ficheiro" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удалить файл" + } + } + } + }, + "button_reset_default": { + "comment": "Button: reset a setting to its default value.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Standard verwenden" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Use default" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Usar predeterminado" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Valeur par défaut" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Usa predefinito" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Standaard gebruiken" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Użyj domyślnego" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Usar predefinição" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "По умолчанию" + } + } + } + }, + "button_retry": { + "comment": "Button: retry after a failed operation.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wiederholen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Retry" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Reintentar" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réessayer" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Riprova" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Opnieuw proberen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Spróbuj ponownie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Tentar novamente" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Повторить" + } + } + } + }, + "button_share_file": { + "comment": "Button: start sharing the transfer (make it available).", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Freigabe starten" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Start sharing" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Empezar a compartir" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Commencer le partage" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Inizia a condividere" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Delen starten" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Rozpocznij udostępnianie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Começar a partilhar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Начать общий доступ" + } + } + } + }, + "button_sharing_file": { + "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", + "value": "Preparing transfer…" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preparando la transferencia…" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation du transfert…" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Preparazione del trasferimento…" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht voorbereiden…" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przygotowywanie transferu…" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A preparar a transferência…" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подготовка передачи…" + } + } + } + }, + "button_show_in_files": { + "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", + "value": "Show in Files" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Mostrar en Archivos" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Afficher dans Fichiers" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Mostra in File" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Toon in Bestanden" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pokaż w Plikach" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Mostrar em Ficheiros" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Показать в Файлах" + } + } + } + }, + "button_write_nfc": { + "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", + "value": "Write to NFC tag" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Escribir en etiqueta NFC" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Écrire sur un tag NFC" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Scrivi su tag NFC" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Naar NFC-tag schrijven" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zapisz na tagu NFC" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Escrever em etiqueta NFC" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Записать на NFC-метку" + } + } + } + }, + "device_model_title": { + "comment": "Device information row: device model label.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Gerätemodell" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Device model" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Modelo del dispositivo" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Modèle de l’appareil" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Modello del dispositivo" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Apparaatmodel" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Model urządzenia" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Modelo do dispositivo" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Модель устройства" + } + } + } + }, + "device_name_title": { + "comment": "Device information row: device name label.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Gerätename" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Device name" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nombre del dispositivo" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom de l’appareil" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nome del dispositivo" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Apparaatnaam" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nazwa urządzenia" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nome do dispositivo" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Имя устройства" + } + } + } + }, + "diagnostics_description": { + "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", + "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", + "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." + } + }, + "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", + "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", + "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. Вы можете отключить это в любой момент. Приглашения, пути к файлам и содержимое передач никогда не включаются." + } + } + } + }, + "diagnostics_disabled_message": { + "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", + "value": "Diagnostics sharing is off." + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "El uso compartido de diagnósticos está desactivado." + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Le partage des diagnostics est désactivé." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Udostępnianie diagnostyki jest wyłączone." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A partilha de diagnósticos está desativada." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача диагностики отключена." + } + } + } + }, + "diagnostics_enabled_message": { + "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", + "value": "Diagnostics sharing is on." + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "El uso compartido de diagnósticos está activado." + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Le partage des diagnostics est activé." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Udostępnianie diagnostyki jest włączone." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A partilha de diagnósticos está ativada." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача диагностики включена." + } + } + } + }, + "diagnostics_title": { + "comment": "Settings > Diagnostics: toggle title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Diagnosedaten teilen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Share diagnostics" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Compartir diagnósticos" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Partager les diagnostics" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Condividi dati diagnostici" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Diagnostische gegevens delen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Udostępniaj diagnostykę" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Partilhar diagnósticos" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Делиться диагностикой" + } + } + } + }, + "error_camera": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Voor het scannen van een QR-code is toegang tot de camera vereist." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Do zeskanowania kodu QR wymagany jest dostęp do aparatu." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "É necessário acesso à câmara para ler um código QR." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Для сканирования QR-кода требуется доступ к камере." + } + } + } + }, + "error_device_info": { + "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", + "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", + "value": "Impossible de charger les informations de l’appareil." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impossibile caricare le informazioni sul dispositivo." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Apparaatgegevens konden niet worden geladen." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się wczytać informacji o urządzeniu." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível carregar as informações do dispositivo." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось загрузить сведения об устройстве." + } + } + } + }, + "error_filesystem": { + "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", + "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", + "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." + } + }, + "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", + "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", + "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 не удалось получить доступ к выбранным файлам или папке. Проверьте разрешения и повторите попытку." + } + } + } + }, + "error_generic": { + "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", + "value": "Something went wrong. Try again." + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Algo salió mal. Inténtelo de nuevo." + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Une erreur est survenue. Réessayez." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Qualcosa è andato storto. Riprovi." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Er is iets misgegaan. Probeer het opnieuw." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Coś poszło nie tak. Spróbuj ponownie." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Algo correu mal. Tente novamente." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Что-то пошло не так. Повторите попытку." + } + } + } + }, + "error_initialization": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop kon het opstarten niet voltooien. Sluit de app en probeer het opnieuw." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop nie mógł dokończyć uruchamiania. Zamknij aplikację i spróbuj ponownie." + } + }, + "pt": { + "stringUnit": { + "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 не удалось завершить запуск. Закройте приложение и повторите попытку." + } + } + } + }, + "error_invalid_ticket": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Deze uitnodiging kon niet worden gelezen. Vraag de afzender om een nieuwe." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się odczytać tego zaproszenia. Poproś nadawcę o nowe." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível ler este convite. Peça um novo ao remetente." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось прочитать это приглашение. Попросите отправителя прислать новое." + } + } + } + }, + "error_invitation_empty": { + "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", + "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", + "value": "Cette invitation est vide. Essayez de l’ouvrir à nouveau." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "To zaproszenie jest puste. Spróbuj otworzyć je ponownie." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Esse convite está vazio. Tente abri-lo novamente." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Это приглашение пустое. Попробуйте открыть его снова." + } + } + } + }, + "error_missing_native_library": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "De native VniDrop-bibliotheek ontbreekt in deze build." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "W tej kompilacji brakuje natywnej biblioteki VniDrop." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A biblioteca nativa do VniDrop está em falta nesta compilação." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "В этой сборке отсутствует нативная библиотека VniDrop." + } + } + } + }, + "error_nfc": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Deze NFC-tag kon niet worden gebruikt. Probeer een andere." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się użyć tego tagu NFC. Spróbuj innego." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível utilizar esta etiqueta NFC. Tente outra." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось использовать эту NFC-метку. Попробуйте другую." + } + } + } + }, + "error_permission": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "De afzender heeft deze overdracht niet goedgekeurd, of deze is geweigerd." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nadawca nie zatwierdził tego transferu lub został on odrzucony." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O remetente não aprovou esta transferência, ou foi recusada." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправитель не одобрил эту передачу, или она была отклонена." + } + } + } + }, + "error_repository": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop kon de overdrachtsgegevens niet op dit apparaat bewaren." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop nie mógł zapisać danych transferu na tym urządzeniu." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O VniDrop não conseguiu guardar os dados da transferência neste dispositivo." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop не удалось сохранить данные передачи на этом устройстве." + } + } + } + }, + "error_selection_failed": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Het geselecteerde item kon niet worden geopend. Probeer het opnieuw te kiezen." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się otworzyć wybranego elementu. Spróbuj wybrać go ponownie." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível abrir o item selecionado. Tente escolhê-lo novamente." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось открыть выбранный объект. Попробуйте выбрать его снова." + } + } + } + }, + "error_share_empty": { + "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", + "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", + "value": "Sélectionnez au moins un élément à partager." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Wybierz co najmniej jeden element do udostępnienia." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Selecione pelo menos um item para partilhar." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выберите хотя бы один объект для отправки." + } + } + } + }, + "error_socket_bind": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop kon zijn netwerksockets niet openen op dit apparaat." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop nie mógł otworzyć gniazd sieciowych na tym urządzeniu." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O VniDrop não conseguiu abrir os seus sockets de rede neste dispositivo." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop не удалось открыть сетевые сокеты на этом устройстве." + } + } + } + }, + "error_starting_up": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop is nog aan het opstarten. Open de uitnodiging zo meteen opnieuw." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop jeszcze się uruchamia. Otwórz zaproszenie ponownie za chwilę." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "O VniDrop ainda está a iniciar. Abra o convite novamente dentro de momentos." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop ещё запускается. Откройте приглашение снова через мгновение." + } + } + } + }, + "error_transfer": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "De overdracht kon niet worden voltooid. Controleer uw verbinding en probeer het opnieuw." + } + }, + "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", + "value": "Não foi possível concluir a transferência. Verifique a sua ligação e tente novamente." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось завершить передачу. Проверьте подключение и повторите попытку." + } + } + } + }, + "field_receiver_name": { + "comment": "Text field label: the receiver's display name.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfängername" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Receiver name" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nombre del destinatario" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom du destinataire" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nome del destinatario" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Naam van ontvanger" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nazwa odbiorcy" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nome do destinatário" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Имя получателя" + } + } + } + }, + "field_sender_name": { + "comment": "Text field label: the sender's display name.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Absendername" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Sender name" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nombre del remitente" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom de l’expéditeur" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nome del mittente" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Naam van afzender" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nazwa nadawcy" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nome do remetente" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Имя отправителя" + } + } + } + }, + "field_transfer_name": { + "comment": "Text field label: the name given to a transfer.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragungsname" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer name" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nombre de la transferencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom du transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nome del trasferimento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Naam van overdracht" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nazwa transferu" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nome da transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Название передачи" + } + } + } + }, + "field_username": { + "comment": "Settings text field label: this device's display name.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Anzeigename" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Display name" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nombre visible" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nom d’affichage" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nome visualizzato" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Weergavenaam" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nazwa wyświetlana" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nome a apresentar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отображаемое имя" + } + } + } + }, + "folder_status_permission_required": { + "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", + "value": "Permission needed" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Permiso necesario" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Autorisation requise" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Autorizzazione necessaria" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Machtiging vereist" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wymagane uprawnienie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Permissão necessária" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Требуется разрешение" + } + } + } + }, + "folder_status_unavailable": { + "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", + "value": "Unavailable" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No disponible" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Indisponible" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Non disponibile" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Niet beschikbaar" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Niedostępny" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Indisponível" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Недоступно" + } + } + } + }, + "folder_status_validating": { + "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", + "value": "Checking folder…" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Comprobando carpeta…" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vérification du dossier…" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Controllo della cartella…" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Map controleren…" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Sprawdzanie folderu…" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A verificar a pasta…" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Проверка папки…" + } + } + } + }, + "folder_status_writable": { + "comment": "Receive-folder status: the folder is valid and writable.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Bereit" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Ready" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Listo" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Prêt" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Pronta" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Gereed" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Gotowy" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Готово" + } + } + } + }, + "metadata_files": { + "comment": "Transfer metadata label: number of files.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Dateien" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Files" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Archivos" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Fichiers" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "File" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bestanden" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pliki" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ficheiros" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Файлы" + } + } + } + }, + "metadata_size": { + "comment": "Transfer metadata label: total size.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Größe" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Size" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Tamaño" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Taille" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dimensione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Grootte" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Rozmiar" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Tamanho" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Размер" + } + } + } + }, + "metadata_status": { + "comment": "Transfer metadata label: current status.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Status" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Status" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Estado" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Statut" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Stato" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Status" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Status" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Estado" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Статус" + } + } + } + }, + "nav_receive": { + "comment": "Bottom navigation: Receive tab label.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfangen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Receive" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Recibir" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Recevoir" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ricevi" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbierz" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Receber" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получить" + } + } + } + }, + "nav_send": { + "comment": "Bottom navigation: Send tab label.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Senden" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Send" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoyer" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invia" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Versturen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wyślij" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправить" + } + } + } + }, + "nav_settings": { + "comment": "Bottom navigation: Settings tab label.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Einstellungen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Settings" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Ajustes" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réglages" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impostazioni" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Instellingen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Ustawienia" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Definições" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Настройки" + } + } + } + }, + "network_title": { + "comment": "Device information row: network label.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Netzwerk" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Network" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Red" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réseau" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Rete" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Netwerk" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Sieć" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Rede" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сеть" + } + } + } + }, + "notifications_description": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvang meldingen over nieuwe ontvangstverzoeken terwijl VniDrop op de achtergrond draait." + } + }, + "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", + "value": "Seja notificado sobre novos pedidos de receção enquanto o VniDrop está em segundo plano." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получайте уведомления о новых запросах на получение, пока VniDrop работает в фоне." + } + } + } + }, + "notifications_enabled_message": { + "comment": "Settings > Notifications: confirmation when notifications are enabled.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Mitteilungen aktiviert." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Notifications enabled." + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Notificaciones activadas." + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Notifications activées." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Notifiche attivate." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Meldingen ingeschakeld." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Powiadomienia włączone." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Notificações ativadas." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Уведомления включены." + } + } + } + }, + "notifications_local_title": { + "comment": "Settings > Notifications: label for the allow-notifications action.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Mitteilungen erlauben" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Allow notifications" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Permitir notificaciones" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Autoriser les notifications" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Consenti le notifiche" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Meldingen toestaan" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zezwól na powiadomienia" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Permitir notificações" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Разрешить уведомления" + } + } + } + }, + "notifications_permission_denied": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Meldingen zijn uitgeschakeld voor VniDrop. U kunt ze inschakelen in Instellingen." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Powiadomienia są wyłączone dla VniDrop. Możesz je włączyć w Ustawieniach." + } + }, + "pt": { + "stringUnit": { + "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. Вы можете включить их в Настройках." + } + } + } + }, + "notifications_settings_open_failed": { + "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", + "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", + "value": "Impossible d’ouvrir les réglages de notifications." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impossibile aprire le impostazioni delle notifiche." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "De meldingsinstellingen konden niet worden geopend." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się otworzyć ustawień powiadomień." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível abrir as definições de notificações." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось открыть настройки уведомлений." + } + } + } + }, + "notifications_title": { + "comment": "Settings > Notifications: section title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Mitteilungen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Notifications" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Notificaciones" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Notifications" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Notifiche" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Meldingen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Powiadomienia" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Notificações" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Уведомления" + } + } + } + }, + "notifications_unsupported": { + "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", + "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", + "value": "Les notifications ne sont pas disponibles sur cet appareil." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Powiadomienia nie są dostępne na tym urządzeniu." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "As notificações não estão disponíveis neste dispositivo." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Уведомления недоступны на этом устройстве." + } + } + } + }, + "os_version_title": { + "comment": "Device information row: operating system version label.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Betriebssystem" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Operating system" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Sistema operativo" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Système d’exploitation" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Sistema operativo" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Besturingssysteem" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "System operacyjny" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Sistema operativo" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Операционная система" + } + } + } + }, + "preferences_receive_folder_title": { + "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", + "value": "Save received transfers to" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Guardar las transferencias recibidas en" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Enregistrer les transferts reçus dans" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Salva i trasferimenti ricevuti in" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen overdrachten bewaren in" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zapisuj odebrane transfery w" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Guardar as transferências recebidas em" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сохранять полученные передачи в" + } + } + } + }, + "preferences_title": { + "comment": "Settings > Preferences: section title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Voreinstellungen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Preferences" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preferencias" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préférences" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Preferenze" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Voorkeuren" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Preferencje" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Preferências" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Параметры" + } + } + } + }, + "progress_cancelled": { + "comment": "Transfer progress label: cancelled.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Abgebrochen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Cancelled" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelado" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Annulé" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Annullato" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Geannuleerd" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Anulowano" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelado" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отменено" + } + } + } + }, + "progress_completed": { + "comment": "Transfer progress label: completed.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Abgeschlossen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Completed" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Completado" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Terminé" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Completato" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Voltooid" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Ukończono" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Concluído" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Завершено" + } + } + } + }, + "progress_connected": { + "comment": "Transfer progress label: connected.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verbunden" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Connected" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Conectado" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Connecté" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Connesso" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verbonden" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Połączono" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ligado" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подключено" + } + } + } + }, + "progress_connecting": { + "comment": "Transfer progress label: connecting.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verbinden" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Connecting" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Conectando" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Connexion" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Connessione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verbinden" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Łączenie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A ligar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подключение" + } + } + } + }, + "progress_downloading": { + "comment": "Transfer progress label: downloading.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird geladen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Downloading" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Descargando" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Téléchargement" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Download" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Downloaden" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pobieranie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A descarregar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Загрузка" + } + } + } + }, + "progress_failed": { + "comment": "Transfer progress label: failed.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Fehlgeschlagen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Failed" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Fallido" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Échec" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Non riuscito" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Mislukt" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Niepowodzenie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Falhou" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ошибка" + } + } + } + }, + "progress_getting_ready": { + "comment": "Transfer progress label: getting ready.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird bereitgemacht" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Getting ready" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preparándose" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Preparazione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Klaarmaken" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przygotowywanie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A preparar-se" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подготовка" + } + } + } + }, + "progress_interrupted": { + "comment": "Transfer progress label: the transfer was interrupted.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung unterbrochen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer interrupted" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencia interrumpida" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert interrompu" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimento interrotto" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht onderbroken" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfer przerwany" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferência interrompida" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача прервана" + } + } + } + }, + "progress_preparing": { + "comment": "Transfer progress label: preparing.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird vorbereitet" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Preparing" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preparando" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Preparazione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Voorbereiden" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przygotowywanie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A preparar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подготовка" + } + } + } + }, + "progress_ready": { + "comment": "Transfer progress label: ready.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Bereit" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Ready" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Listo" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Prêt" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Gereed" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Gotowe" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Готово" + } + } + } + }, + "progress_receiving": { + "comment": "Transfer progress label: receiving.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird empfangen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Receiving" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Recibiendo" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réception" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ricezione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbieranie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A receber" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получение" + } + } + } + }, + "progress_requesting_access": { + "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", + "value": "Requesting access" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Solicitando acceso" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demande d’accès" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Richiesta di accesso" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Toegang aanvragen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Prośba o dostęp" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A pedir acesso" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Запрос доступа" + } + } + } + }, + "progress_saving": { + "comment": "Transfer progress label: saving received files.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird gesichert" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Saving" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Guardando" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Enregistrement" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Salvataggio" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bewaren" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zapisywanie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A guardar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сохранение" + } + } + } + }, + "progress_sending": { + "comment": "Transfer progress label: sending.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird gesendet" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Sending" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enviando" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoi" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invio" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Versturen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wysyłanie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A enviar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправка" + } + } + } + }, + "progress_sending_to_count": { + "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", + "value": "Sending to %1$d" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enviando a %1$d" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoi à %1$d" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invio a %1$d" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Versturen naar %1$d" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wysyłanie do %1$d" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A enviar para %1$d" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправка получателям: %1$d" + } + } + } + }, + "progress_share_ready": { + "comment": "Transfer progress label: the share is ready.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Bereit zum Teilen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Ready to share" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Listo para compartir" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Prêt à partager" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto per la condivisione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Klaar om te delen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Gotowe do udostępnienia" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto para partilhar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Готово к отправке" + } + } + } + }, + "progress_working": { + "comment": "Transfer progress label: generic working/in-progress state.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird bearbeitet…" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Working…" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Trabajando…" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "En cours…" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Elaborazione…" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bezig…" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przetwarzanie…" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A processar…" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Обработка…" + } + } + } + }, + "receive_choose_method_body": { + "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", + "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", + "value": "Choisissez la méthode d’invitation à votre disposition." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Wybierz dostępną metodę zaproszenia." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Escolha o método de convite ao seu dispor." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выберите доступный вам способ приглашения." + } + } + } + }, + "receive_choose_method_title": { + "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", + "value": "How would you like to connect?" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Cómo quiere conectarse?" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Comment souhaitez-vous vous connecter ?" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Come vuole connettersi?" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Hoe wilt u verbinding maken?" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Jak chcesz się połączyć?" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Como pretende ligar-se?" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Как вы хотите подключиться?" + } + } + } + }, + "receive_clear_history": { + "comment": "Receive history: action to clear all history.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verlauf löschen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Clear history" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Borrar historial" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Effacer l’historique" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cancella cronologia" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Geschiedenis wissen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wyczyść historię" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Limpar histórico" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Очистить историю" + } + } + } + }, + "receive_clear_history_description": { + "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", + "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", + "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." + } + }, + "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", + "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", + "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. Загруженные файлы останутся на этом устройстве." + } + } + } + }, + "receive_clear_history_title": { + "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", + "value": "Clear receive history?" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Borrar el historial de recepción?" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Effacer l’historique de réception ?" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cancellare la cronologia di ricezione?" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangstgeschiedenis wissen?" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wyczyścić historię odbioru?" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Limpar o histórico de receção?" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Очистить историю получения?" + } + } + } + }, + "receive_completed": { + "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", + "value": "Transfer received." + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencia recibida." + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert reçu." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimento ricevuto." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht ontvangen." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfer odebrany." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferência recebida." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача получена." + } + } + } + }, + "receive_delete_history_description": { + "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", + "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", + "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." + } + }, + "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", + "value": "„%1$@” zostanie usunięty z historii VniDrop. Pobrany plik pozostanie na tym urządzeniu." + } + }, + "pt": { + "stringUnit": { + "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. Загруженный файл останется на этом устройстве." + } + } + } + }, + "receive_delete_history_item": { + "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", + "value": "Delete from receive history" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar del historial de recepción" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Supprimer de l’historique de réception" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Elimina dalla cronologia di ricezione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uit ontvangstgeschiedenis verwijderen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usuń z historii odbioru" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar do histórico de receção" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удалить из истории получения" + } + } + } + }, + "receive_delete_history_title": { + "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", + "value": "Remove from history?" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Quitar del historial?" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Retirer de l’historique ?" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Rimuovere dalla cronologia?" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uit geschiedenis verwijderen?" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usunąć z historii?" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Remover do histórico?" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удалить из истории?" + } + } + } + }, + "receive_empty_body": { + "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", + "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", + "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." + } + }, + "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", + "value": "Otwórz zaproszenie VniDrop, zeskanuj kod QR lub zbliż tag NFC." + } + }, + "pt": { + "stringUnit": { + "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-метку." + } + } + } + }, + "receive_empty_title": { + "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", + "value": "Nothing received yet" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Aún no se ha recibido nada" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Rien reçu pour l’instant" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ancora nulla di ricevuto" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Nog niets ontvangen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nic jeszcze nie odebrano" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ainda não recebeu nada" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Пока ничего не получено" + } + } + } + }, + "receive_history_cleared": { + "comment": "Receive history: toast confirming history was cleared.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfangsverlauf gelöscht." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Receive history cleared." + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Historial de recepción borrado." + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Historique de réception effacé." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cronologia di ricezione cancellata." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangstgeschiedenis gewist." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Historia odbioru wyczyszczona." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Histórico de receção limpo." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "История получения очищена." + } + } + } + }, + "receive_history_title": { + "comment": "Receive tab: History section title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verlauf" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "History" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Historial" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Historique" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cronologia" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Geschiedenis" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Historia" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Histórico" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "История" + } + } + } + }, + "receive_method_file": { + "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", + "value": "Open a .vnd invitation" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Abrir una invitación .vnd" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ouvrir une invitation .vnd" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Apri un invito .vnd" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Een .vnd-uitnodiging openen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Otwórz zaproszenie .vnd" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Abrir um convite .vnd" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Открыть приглашение .vnd" + } + } + } + }, + "receive_method_file_description": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Kies een uitnodiging die op dit apparaat is bewaard of gedeeld." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wybierz zaproszenie zapisane lub udostępnione na tym urządzeniu." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Escolha um convite guardado ou partilhado neste dispositivo." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выберите приглашение, сохранённое или отправленное на это устройство." + } + } + } + }, + "receive_method_nfc": { + "comment": "Receive method: read an NFC tag.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "NFC-Tag lesen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Read NFC tag" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Leer etiqueta NFC" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Lire un tag NFC" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Leggi tag NFC" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "NFC-tag lezen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odczytaj tag NFC" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ler etiqueta NFC" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Прочитать NFC-метку" + } + } + } + }, + "receive_method_nfc_description": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Houd dit apparaat bij de uitnodigingstag van de afzender." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zbliż to urządzenie do tagu zaproszenia nadawcy." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aproxime este dispositivo da etiqueta de convite do remetente." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Поднесите это устройство к метке приглашения отправителя." + } + } + } + }, + "receive_method_scan": { + "comment": "Receive method: scan a QR code.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "QR-Code scannen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Scan QR code" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Escanear código QR" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Scanner un QR code" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Scansiona codice QR" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "QR-code scannen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zeskanuj kod QR" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ler código QR" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сканировать QR-код" + } + } + } + }, + "receive_method_scan_description": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Gebruik de camera om de VniDrop-code van de afzender te scannen." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Użyj aparatu, aby zeskanować kod VniDrop nadawcy." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Use a câmara para ler o código VniDrop do remetente." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Используйте камеру, чтобы отсканировать код VniDrop отправителя." + } + } + } + }, + "receive_new_subtitle": { + "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", + "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", + "value": "Transferts que vous avez reçus sur cet appareil." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Transfery odebrane na tym urządzeniu." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferências que recebeu neste dispositivo." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передачи, полученные на этом устройстве." + } + } + } + }, + "receive_nfc_waiting": { + "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", + "value": "Hold near the NFC tag…" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Acerque a la etiqueta NFC…" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Approchez du tag NFC…" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Avvicini al tag NFC…" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Houd bij de NFC-tag…" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zbliż do tagu NFC…" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aproxime da etiqueta NFC…" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Поднесите к NFC-метке…" + } + } + } + }, + "receive_open_files_failed": { + "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", + "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", + "value": "Impossible d’ouvrir VniDrop dans Fichiers." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impossibile aprire VniDrop in File." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop kon niet worden geopend in Bestanden." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nie udało się otworzyć VniDrop w Plikach." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Não foi possível abrir o VniDrop em Ficheiros." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Не удалось открыть VniDrop в Файлах." + } + } + } + }, + "receive_review_title": { + "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", + "value": "Review transfer" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Revisar transferencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vérifier le transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Rivedi trasferimento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht controleren" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przejrzyj transfer" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Rever transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Проверить передачу" + } + } + } + }, + "receive_title": { + "comment": "Receive tab: screen title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfangen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Receive" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Recibir" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Recevoir" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ricevi" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbierz" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Receber" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получить" + } + } + } + }, + "receive_unknown_transfer": { + "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", + "value": "VniDrop transfer" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencia de VniDrop" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert VniDrop" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimento VniDrop" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "VniDrop-overdracht" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfer VniDrop" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferência VniDrop" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача VniDrop" + } + } + } + }, + "send_access_anyone": { + "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", + "value": "Anyone with this transfer" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cualquiera que tenga esta transferencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Toute personne disposant de ce transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Chiunque abbia questo trasferimento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Iedereen met deze overdracht" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Każdy, kto ma ten transfer" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Qualquer pessoa com esta transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Любой, у кого есть эта передача" + } + } + } + }, + "send_access_anyone_description": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Geen goedkeuring vereist. Gebruik dit alleen voor items die u gerust kunt delen." + } + }, + "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", + "value": "Não é necessária aprovação. Utilize apenas para itens que não se importe de partilhar." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Одобрение не требуется. Используйте только для объектов, которыми вы готовы поделиться." + } + } + } + }, + "send_access_anyone_warning": { + "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", + "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", + "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." + } + }, + "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", + "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", + "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": "Любой, у кого есть приглашение, может загружать, пока вы не остановите общий доступ. Не используйте это для личных или конфиденциальных объектов." + } + } + } + }, + "send_access_approval": { + "comment": "Send access option: approve each receiver.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Vor jedem Download fragen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Ask before each download" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preguntar antes de cada descarga" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demander avant chaque téléchargement" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Chiedi prima di ogni download" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Vragen vóór elke download" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pytaj przed każdym pobraniem" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Perguntar antes de cada descarga" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Спрашивать перед каждой загрузкой" + } + } + } + }, + "send_access_approval_description": { + "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", + "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", + "value": "Vous approuvez ou refusez chaque nouveau destinataire." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Zatwierdzasz lub odrzucasz każdego nowego odbiorcę." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aprova ou recusa cada novo destinatário." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Вы одобряете или отклоняете каждого нового получателя." + } + } + } + }, + "send_access_title": { + "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", + "value": "Who can receive it?" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Quién puede recibirla?" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Qui peut le recevoir ?" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Chi può riceverlo?" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wie kan het ontvangen?" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Kto może to odebrać?" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Quem a pode receber?" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Кто может это получить?" + } + } + } + }, + "send_choose_file_body": { + "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", + "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", + "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." + } + }, + "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", + "value": "Wybierz pliki lub folder z tego urządzenia. Przed utworzeniem transferu możesz przejrzeć wybór." + } + }, + "pt": { + "stringUnit": { + "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": "Выберите файлы или папку на этом устройстве. Вы сможете проверить выбор перед созданием передачи." + } + } + } + }, + "send_choose_file_title": { + "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", + "value": "Choose what to share" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Elija qué compartir" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Choisissez quoi partager" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Scelga cosa condividere" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Kies wat u wilt delen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wybierz, co udostępnić" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Escolha o que partilhar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выберите, чем поделиться" + } + } + } + }, + "send_empty_body": { + "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", + "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", + "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." + } + }, + "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", + "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", + "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-метки или файла приглашения." + } + } + } + }, + "send_empty_title": { + "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", + "value": "Nothing shared yet" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Aún no se ha compartido nada" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Rien partagé pour l’instant" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ancora nulla di condiviso" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Nog niets gedeeld" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nic jeszcze nie udostępniono" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ainda não partilhou nada" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Пока ничем не поделились" + } + } + } + }, + "send_file_size_unknown": { + "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", + "value": "Size unavailable" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Tamaño no disponible" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Taille indisponible" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dimensione non disponibile" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Grootte niet beschikbaar" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Rozmiar niedostępny" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Tamanho indisponível" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Размер недоступен" + } + } + } + }, + "send_folder_label": { + "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", + "value": "Folder" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Carpeta" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Dossier" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Cartella" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Map" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Folder" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pasta" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Папка" + } + } + } + }, + "send_new_transfer_description": { + "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", + "value": "Create a new transfer" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Crear una nueva transferencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Créer un nouveau transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Crea un nuovo trasferimento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Een nieuwe overdracht aanmaken" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Utwórz nowy transfer" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Criar uma nova transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Создать новую передачу" + } + } + } + }, + "send_new_transfer_title": { + "comment": "Send flow: title for the new-transfer step.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Neue Übertragung" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "New transfer" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Nueva transferencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Nouveau transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nuovo trasferimento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Nieuwe overdracht" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nowy transfer" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Nova transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Новая передача" + } + } + } + }, + "send_review_title": { + "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", + "value": "Review transfer" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Revisar transferencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vérifier le transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Rivedi trasferimento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht controleren" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przejrzyj transfer" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Rever transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Проверить передачу" + } + } + } + }, + "send_selected_files_count": { + "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", + "value": "%1$d files selected" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d archivos seleccionados" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d fichiers sélectionnés" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d file selezionati" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d bestanden geselecteerd" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wybrane pliki: %1$d" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d ficheiros selecionados" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Выбрано файлов: %1$d" + } + } + } + }, + "send_stop_sharing": { + "comment": "Transfer details: action to stop sharing a transfer.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Freigabe beenden" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Stop sharing" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Dejar de compartir" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Arrêter le partage" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Interrompi condivisione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Stoppen met delen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zatrzymaj udostępnianie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Parar de partilhar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Остановить общий доступ" + } + } + } + }, + "send_stop_sharing_description": { + "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", + "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", + "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." + } + }, + "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", + "value": "To zatrzymuje transfer i przerywa każdego, kto go właśnie pobiera. Pozostaje w historii jako Zatrzymany." + } + }, + "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." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Это остановит передачу и прервёт всех, кто сейчас её загружает. Она останется в вашей истории со статусом «Остановлена»." + } + } + } + }, + "send_subtitle": { + "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", + "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", + "value": "Transferts que vous partagez depuis cet appareil." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Transfery udostępniane z tego urządzenia." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferências que está a partilhar a partir deste dispositivo." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передачи, которыми вы делитесь с этого устройства." + } + } + } + }, + "send_title": { + "comment": "Send tab: screen title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Senden" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Send" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Envoyer" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invia" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Versturen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wyślij" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Enviar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отправить" + } + } + } + }, + "send_transfer_created": { + "comment": "Send flow: toast confirming a transfer was created.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung erstellt." + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer created." + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencia creada." + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert créé." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimento creato." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht aangemaakt." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfer utworzony." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferência criada." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача создана." + } + } + } + }, + "send_transfer_details_title": { + "comment": "Send flow: title of the transfer details screen.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragungsdetails" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer details" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Detalles de la transferencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Détails du transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dettagli del trasferimento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdrachtsdetails" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Szczegóły transferu" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Detalhes da transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сведения о передаче" + } + } + } + }, + "send_transfers_title": { + "comment": "Send tab: 'Your transfers' list heading.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ihre Übertragungen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Your transfers" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Sus transferencias" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Vos transferts" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "I suoi trasferimenti" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uw overdrachten" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Twoje transfery" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "As suas transferências" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ваши передачи" + } + } + } + }, + "settings_subtitle": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uw naam, waar overdrachten worden bewaard, weergave en meldingen." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Twoja nazwa, miejsce zapisu transferów, wygląd i powiadomienia." + } + }, + "pt": { + "stringUnit": { + "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": "Ваше имя, место сохранения передач, оформление и уведомления." + } + } + } + }, + "settings_title": { + "comment": "Settings screen: title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Einstellungen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Settings" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Ajustes" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réglages" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Impostazioni" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Instellingen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Ustawienia" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Definições" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Настройки" + } + } + } + }, + "snackbar_dismiss": { + "comment": "Snackbar: accessibility label / action to dismiss the snackbar.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ausblenden" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Dismiss" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Descartar" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Ignorer" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ignora" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Sluiten" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zamknij" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ignorar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Закрыть" + } + } + } + }, + "status_available": { + "comment": "Transfer status: available (actively shared).", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verfügbar" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Available" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Disponible" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Disponible" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Disponibile" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Beschikbaar" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Dostępny" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Disponível" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Доступно" + } + } + } + }, + "status_cancelled": { + "comment": "Transfer status: cancelled.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Abgebrochen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Cancelled" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelado" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Annulé" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Annullato" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Geannuleerd" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Anulowany" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Cancelado" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отменено" + } + } + } + }, + "status_completed": { + "comment": "Transfer status: completed.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Abgeschlossen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Completed" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Completado" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Terminé" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Completato" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Voltooid" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Ukończony" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Concluído" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Завершено" + } + } + } + }, + "status_failed": { + "comment": "Transfer status: failed.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Fehlgeschlagen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Failed" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Fallido" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Échec" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Non riuscito" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Mislukt" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Niepowodzenie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Falhou" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ошибка" + } + } + } + }, + "status_preparing": { + "comment": "Transfer status: preparing.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird vorbereitet" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Preparing" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preparando" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Preparazione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Voorbereiden" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przygotowywanie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A preparar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подготовка" + } + } + } + }, + "status_receiving": { + "comment": "Transfer status: receiving.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird empfangen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Receiving" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Recibiendo" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Réception" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ricezione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbieranie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A receber" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получение" + } + } + } + }, + "status_stopped": { + "comment": "Transfer status: stopped.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Beendet" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Stopped" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Detenido" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Arrêté" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Interrotto" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Gestopt" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zatrzymany" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Parada" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Остановлено" + } + } + } + }, + "storage_calculating": { + "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", + "value": "Calculating…" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Calculando…" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Calcul…" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Calcolo…" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Berekenen…" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Obliczanie…" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A calcular…" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Вычисление…" + } + } + } + }, + "storage_delete_transfers": { + "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", + "value": "Delete all transfers" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar todas las transferencias" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Supprimer tous les transferts" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Elimina tutti i trasferimenti" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Alle overdrachten verwijderen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usuń wszystkie transfery" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar todas as transferências" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удалить все передачи" + } + } + } + }, + "storage_delete_transfers_description": { + "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", + "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", + "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." + } + }, + "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", + "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", + "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": "Это удалит из истории все записи об отправленных и полученных передачах. Ваши полученные файлы не удаляются. Примечание: механизм передачи сохраняет своё содержимое, поэтому объём данных передачи может не уменьшиться. Это действие нельзя отменить." + } + } + } + }, + "storage_deleting": { + "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", + "value": "Deleting…" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminando…" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Suppression…" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminazione…" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verwijderen…" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usuwanie…" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A eliminar…" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удаление…" + } + } + } + }, + "storage_footer": { + "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", + "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", + "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." + } + }, + "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", + "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", + "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": "Данными передачи управляет механизм передачи — ваша история плюс содержимое файлов, которыми вы поделились. Кнопка ниже удаляет записи о передачах; механизм сохраняет своё содержимое, поэтому это значение может не уменьшиться. Полученные файлы — это загруженные вами файлы, и они никогда не удаляются здесь." + } + } + } + }, + "storage_received_files": { + "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", + "value": "Received files" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Archivos recibidos" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Fichiers reçus" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "File ricevuti" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangen bestanden" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odebrane pliki" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ficheiros recebidos" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Полученные файлы" + } + } + } + }, + "storage_temporary": { + "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", + "value": "Temporary files" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Archivos temporales" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Fichiers temporaires" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "File temporanei" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Tijdelijke bestanden" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pliki tymczasowe" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ficheiros temporários" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Временные файлы" + } + } + } + }, + "storage_title": { + "comment": "Settings > Storage: section title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Speicher" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Storage" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Almacenamiento" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Stockage" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Archiviazione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Opslag" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pamięć" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Armazenamento" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Хранилище" + } + } + } + }, + "storage_total": { + "comment": "Settings > Storage: label for the total-size row.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Gesamt" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Total" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Total" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Total" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Totale" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Totaal" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Łącznie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Total" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Всего" + } + } + } + }, + "storage_transfer_data": { + "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", + "value": "Transfer data" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Datos de transferencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Données de transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dati di trasferimento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdrachtsgegevens" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Dane transferu" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Dados de transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Данные передачи" + } + } + } + }, + "storage_transfers_deleted": { + "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", + "value": "All transfers deleted" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Todas las transferencias eliminadas" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Tous les transferts supprimés" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Tutti i trasferimenti eliminati" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Alle overdrachten verwijderd" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usunięto wszystkie transfery" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Todas as transferências eliminadas" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Все передачи удалены" + } + } + } + }, + "transfer_activity_description": { + "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", + "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", + "value": "Consultez les mises à jour importantes de ce transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Zobacz ważne aktualizacje tego transferu" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ver as atualizações importantes desta transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Просматривайте важные обновления этой передачи" + } + } + } + }, + "transfer_activity_title": { + "comment": "Transfer details: Activity section title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Aktivität" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Activity" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Actividad" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Activité" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Attività" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Activiteit" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Aktywność" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Atividade" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Активность" + } + } + } + }, + "transfer_delete_description": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "‘%1$@’ wordt niet meer gedeeld en de overdrachtsgeschiedenis wordt van dit apparaat verwijderd." + } + }, + "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", + "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$@» будет остановлен, а история передачи будет удалена с этого устройства." + } + } + } + }, + "transfer_delete_title": { + "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", + "value": "Delete transfer?" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "¿Eliminar la transferencia?" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Supprimer le transfert ?" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminare il trasferimento?" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht verwijderen?" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usunąć transfer?" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminar a transferência?" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удалить передачу?" + } + } + } + }, + "transfer_deleted": { + "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", + "value": "Transfer deleted." + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencia eliminada." + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert supprimé." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimento eliminato." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht verwijderd." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfer usunięty." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferência eliminada." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача удалена." + } + } + } + }, + "transfer_deleting": { + "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", + "value": "Deleting…" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminando…" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Suppression…" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Eliminazione…" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verwijderen…" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Usuwanie…" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A eliminar…" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Удаление…" + } + } + } + }, + "transfer_details_title": { + "comment": "Transfer details: screen title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragungsdetails" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer details" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Detalles de la transferencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Détails du transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dettagli del trasferimento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdrachtsdetails" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Szczegóły transferu" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Detalhes da transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сведения о передаче" + } + } + } + }, + "transfer_event_approved": { + "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", + "value": "Receiver access approved" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Acceso del destinatario aprobado" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Accès du destinataire approuvé" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Accesso del destinatario approvato" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Toegang ontvanger goedgekeurd" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zatwierdzono dostęp odbiorcy" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Acesso do destinatário aprovado" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Доступ получателя одобрен" + } + } + } + }, + "transfer_event_completed": { + "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", + "value": "A receiver completed the transfer" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinatario completó la transferencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinataire a terminé le transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinatario ha completato il trasferimento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Een ontvanger heeft de overdracht voltooid" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbiorca ukończył transfer" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Um destinatário concluiu a transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получатель завершил передачу" + } + } + } + }, + "transfer_event_connecting": { + "comment": "Transfer activity event: connecting to the sender.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Verbindung zum Absender" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Connecting to sender" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Conectando con el remitente" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Connexion à l’expéditeur" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Connessione al mittente" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verbinden met afzender" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Łączenie z nadawcą" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A ligar ao remetente" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подключение к отправителю" + } + } + } + }, + "transfer_event_downloading": { + "comment": "Transfer activity event: downloading.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird geladen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Downloading" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Descargando" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Téléchargement" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Download" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Downloaden" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Pobieranie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A descarregar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Загрузка" + } + } + } + }, + "transfer_event_failed": { + "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", + "value": "The transfer encountered a problem" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "La transferencia tuvo un problema" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Le transfert a rencontré un problème" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Podczas transferu wystąpił problem" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A transferência teve um problema" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "При передаче возникла проблема" + } + } + } + }, + "transfer_event_preparing": { + "comment": "Transfer activity event: preparing the transfer.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Ihre Übertragung wird vorbereitet" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Preparing your transfer" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Preparando su transferencia" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Préparation de votre transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Preparazione del trasferimento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uw overdracht voorbereiden" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Przygotowywanie transferu" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A preparar a sua transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Подготовка вашей передачи" + } + } + } + }, + "transfer_event_ready": { + "comment": "Transfer activity event: ready to share.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Bereit zum Teilen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Ready to share" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Listo para compartir" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Prêt à partager" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto per la condivisione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Klaar om te delen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Gotowe do udostępnienia" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pronto para partilhar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Готово к отправке" + } + } + } + }, + "transfer_event_refused": { + "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", + "value": "Receiver access refused" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Acceso del destinatario rechazado" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Accès du destinataire refusé" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Accesso del destinatario rifiutato" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Toegang ontvanger geweigerd" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odrzucono dostęp odbiorcy" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Acesso do destinatário recusado" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Доступ получателя отклонён" + } + } + } + }, + "transfer_event_requested": { + "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", + "value": "A receiver requested access" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinatario solicitó acceso" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinataire a demandé l’accès" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Un destinatario ha richiesto l’accesso" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Een ontvanger heeft toegang aangevraagd" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbiorca poprosił o dostęp" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Um destinatário pediu acesso" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получатель запросил доступ" + } + } + } + }, + "transfer_event_saving": { + "comment": "Transfer activity event: saving received files.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Wird gesichert" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Saving" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Guardando" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Enregistrement" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Salvataggio" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Bewaren" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zapisywanie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A guardar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Сохранение" + } + } + } + }, + "transfer_event_stopped": { + "comment": "Transfer activity event: sharing was stopped.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Freigabe beendet" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Sharing stopped" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Se dejó de compartir" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Partage arrêté" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Condivisione interrotta" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Delen gestopt" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zatrzymano udostępnianie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Partilha parada" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Раздача остановлена" + } + } + } + }, + "transfer_event_updated": { + "comment": "Transfer activity event: the transfer was updated.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Übertragung aktualisiert" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Transfer updated" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Transferencia actualizada" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Transfert mis à jour" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Trasferimento aggiornato" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Overdracht bijgewerkt" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Transfer zaktualizowany" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Transferência atualizada" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Передача обновлена" + } + } + } + }, + "transfer_file_count": { + "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": { + "one": { + "stringUnit": { + "state": "translated", + "value": "%1$d file" + } + }, + "other": { + "stringUnit": { + "state": "translated", + "value": "%1$d files" + } + } + } + } + }, + "es": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d archivo" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d archivos" + } + } + } + } + }, + "fr": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d fichier" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d fichiers" + } + } + } + } + }, + "it": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d file" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d file" + } + } + } + } + }, + "nl": { + "variations": { + "plural": { + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d bestand" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d bestanden" + } + } + } + } + }, + "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": { + "one": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d ficheiro" + } + }, + "other": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d ficheiros" + } + } + } + } + }, + "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 файла" + } + } + } + } + } + } + }, + "transfer_invitation_saved": { + "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", + "value": "Invitation saved." + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Invitación guardada." + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Invitation enregistrée." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invito salvato." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uitnodiging bewaard." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zaproszenie zapisane." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Convite guardado." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Приглашение сохранено." + } + } + } + }, + "transfer_nearby_device": { + "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", + "value": "Nearby device" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Dispositivo cercano" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Appareil à proximité" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Dispositivo nelle vicinanze" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Apparaat in de buurt" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Urządzenie w pobliżu" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Dispositivo próximo" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Устройство поблизости" + } + } + } + }, + "transfer_nfc_unavailable": { + "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", + "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", + "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." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Het schrijven van NFC-tags is niet beschikbaar op dit apparaat." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zapis tagów NFC nie jest dostępny na tym urządzeniu." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A escrita de etiquetas NFC não está disponível neste dispositivo." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Запись NFC-меток недоступна на этом устройстве." + } + } + } + }, + "transfer_nfc_waiting": { + "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", + "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", + "value": "Approchez votre appareil d’un tag NFC inscriptible." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Zbliż urządzenie do zapisywalnego tagu NFC." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aproxime o seu dispositivo de uma etiqueta NFC gravável." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Поднесите устройство к записываемой NFC-метке." + } + } + } + }, + "transfer_nfc_written": { + "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", + "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", + "value": "Invitation écrite sur le tag NFC." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Invito scritto sul tag NFC." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Uitnodiging naar de NFC-tag geschreven." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zaproszenie zapisane na tagu NFC." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Convite escrito na etiqueta NFC." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Приглашение записано на NFC-метку." + } + } + } + }, + "transfer_no_activity": { + "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", + "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", + "value": "Aucune activité à afficher pour l’instant." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Nie ma jeszcze aktywności do wyświetlenia." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ainda não há atividade para mostrar." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Пока нет активности для отображения." + } + } + } + }, + "transfer_no_receivers": { + "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", + "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", + "value": "Personne n’a encore demandé ce transfert." + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Nessuno ha ancora richiesto questo trasferimento." + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Nog niemand heeft deze overdracht aangevraagd." + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Nikt jeszcze nie poprosił o ten transfer." + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Ainda ninguém pediu esta transferência." + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Никто ещё не запросил эту передачу." + } + } + } + }, + "transfer_receiver_accepted": { + "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", + "value": "Approved — waiting for completion" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Aprobado: esperando a que se complete" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Approuvé — en attente de la fin" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Approvato: in attesa del completamento" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Goedgekeurd — wachten op voltooiing" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Zatwierdzono — oczekiwanie na ukończenie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Aprovado — a aguardar conclusão" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Одобрено — ожидание завершения" + } + } + } + }, + "transfer_receiver_completed": { + "comment": "Receiver status: received successfully.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Erfolgreich empfangen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Received successfully" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Recibido correctamente" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Reçu avec succès" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Ricevuto correttamente" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Succesvol ontvangen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odebrano pomyślnie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Recebido com sucesso" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Успешно получено" + } + } + } + }, + "transfer_receiver_expired": { + "comment": "Receiver status: the request expired.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Anfrage abgelaufen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Request expired" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Solicitud caducada" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demande expirée" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Richiesta scaduta" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verzoek verlopen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Prośba wygasła" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pedido expirado" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Запрос истёк" + } + } + } + }, + "transfer_receiver_refused": { + "comment": "Receiver status: the request was refused.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Anfrage abgelehnt" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Request refused" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Solicitud rechazada" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demande refusée" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Richiesta rifiutata" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verzoek geweigerd" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Prośba odrzucona" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pedido recusado" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Запрос отклонён" + } + } + } + }, + "transfer_receiver_requested": { + "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", + "value": "Waiting for your approval" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Esperando su aprobación" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "En attente de votre approbation" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "In attesa della sua approvazione" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Wachten op uw goedkeuring" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Oczekiwanie na Twoje zatwierdzenie" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "A aguardar a sua aprovação" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ожидание вашего одобрения" + } + } + } + }, + "transfer_receiver_unknown": { + "comment": "Receiver status: status unavailable/unknown.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Status nicht verfügbar" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Status unavailable" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Estado no disponible" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Statut indisponible" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Stato non disponibile" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Status niet beschikbaar" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Status niedostępny" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Estado indisponível" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Статус недоступен" + } + } + } + }, + "transfer_receivers_completed_count": { + "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", + "value": "%1$d completed" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d completados" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d terminés" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d completati" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d voltooid" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Ukończone: %1$d" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d concluídos" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Завершено: %1$d" + } + } + } + }, + "transfer_receivers_description": { + "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", + "value": "Requests, approvals, and completed deliveries" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Solicitudes, aprobaciones y entregas completadas" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Demandes, approbations et livraisons terminées" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Richieste, approvazioni e consegne completate" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Verzoeken, goedkeuringen en voltooide leveringen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Prośby, zatwierdzenia i ukończone dostawy" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Pedidos, aprovações e entregas concluídas" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Запросы, одобрения и завершённые доставки" + } + } + } + }, + "transfer_receivers_pending": { + "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", + "value": "%1$d waiting" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d en espera" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d en attente" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d in attesa" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d in behandeling" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Oczekujące: %1$d" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "%1$d em espera" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Ожидают: %1$d" + } + } + } + }, + "transfer_receivers_title": { + "comment": "Transfer details: Receivers section title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Empfänger" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Receivers" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Destinatarios" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Destinataires" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Destinatari" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Ontvangers" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Odbiorcy" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Destinatários" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Получатели" + } + } + } + }, + "transfer_scan_qr": { + "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", + "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", + "value": "Scannez avec VniDrop pour recevoir ce transfert" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Zeskanuj za pomocą VniDrop, aby odebrać ten transfer" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Leia com o VniDrop para receber esta transferência" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Отсканируйте с помощью VniDrop, чтобы получить эту передачу" + } + } + } + }, + "transfer_share_description": { + "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", + "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", + "value": "QR code, fichier d’invitation et options à proximité" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "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", + "value": "Kod QR, plik zaproszenia i opcje w pobliżu" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Código QR, ficheiro de convite e opções por perto" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "QR-код, файл приглашения и варианты поблизости" + } + } + } + }, + "transfer_share_title": { + "comment": "Transfer details: Share section title.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "Teilen" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "Share" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Compartir" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Partager" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Condividi" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Delen" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Udostępnij" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Partilhar" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Поделиться" + } + } + } + }, + "value_unavailable": { + "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", + "value": "Not available" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "No disponible" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Non disponible" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Non disponibile" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "Niet beschikbaar" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Niedostępne" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Indisponível" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Недоступно" + } + } + } + }, + "version_title": { + "comment": "Device information / Settings row: app version label.", + "extractionState": "manual", + "localizations": { + "de": { + "stringUnit": { + "state": "needs_review", + "value": "App-Version" + } + }, + "en": { + "stringUnit": { + "state": "translated", + "value": "App version" + } + }, + "es": { + "stringUnit": { + "state": "needs_review", + "value": "Versión de la app" + } + }, + "fr": { + "stringUnit": { + "state": "needs_review", + "value": "Version de l’app" + } + }, + "it": { + "stringUnit": { + "state": "needs_review", + "value": "Versione dell’app" + } + }, + "nl": { + "stringUnit": { + "state": "needs_review", + "value": "App-versie" + } + }, + "pl": { + "stringUnit": { + "state": "needs_review", + "value": "Wersja aplikacji" + } + }, + "pt": { + "stringUnit": { + "state": "needs_review", + "value": "Versão da app" + } + }, + "ru": { + "stringUnit": { + "state": "needs_review", + "value": "Версия приложения" } } } } }, - "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..b51fb90 --- /dev/null +++ b/localization/src/commands/generate.ts @@ -0,0 +1,123 @@ +/** + * 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_INFO_PLIST, + 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; +} + +// ---- 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() { + 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}`); + + await syncInfoPlistLocalizations(doc.supportedLanguages); + + 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..ace576f --- /dev/null +++ b/localization/src/config.ts @@ -0,0 +1,30 @@ +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", +); + +/** 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, + "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..f4e6907 --- /dev/null +++ b/localization/src/lib/placeholders.ts @@ -0,0 +1,99 @@ +/** + * 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), +// 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"; + 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..5942a9b --- /dev/null +++ b/localization/strings.json @@ -0,0 +1,3696 @@ +{ + "$schema": "./schema.json", + "sourceLanguage": "en", + "supportedLanguages": [ + "en", + "fr", + "es", + "it", + "de", + "pt", + "pl", + "nl", + "ru" + ], + "strings": { + "%@": { + "context": "Apple format passthrough placeholder (single value). Legacy literal key — rename to a semantic key.", + "targets": [ + "apple" + ] + }, + "%@ %@ · %@": { + "context": "Apple format template composing three values with a middot separator (e.g. metadata rows). Legacy literal key — rename.", + "targets": [ + "apple" + ], + "args": [ + { + "name": "arg1", + "type": "string" + }, + { + "name": "arg2", + "type": "string" + }, + { + "name": "arg3", + "type": "string" + } + ], + "translations": { + "en": "{arg1} {arg2} · {arg3}", + "fr": "{arg1} {arg2} · {arg3}", + "es": "{arg1} {arg2} · {arg3}", + "it": "{arg1} {arg2} · {arg3}", + "de": "{arg1} {arg2} · {arg3}", + "pt": "{arg1} {arg2} · {arg3}", + "pl": "{arg1} {arg2} · {arg3}", + "nl": "{arg1} {arg2} · {arg3}", + "ru": "{arg1} {arg2} · {arg3}" + } + }, + "%@ · %@": { + "context": "Apple format template composing two values with a middot separator. Legacy literal key — rename.", + "targets": [ + "apple" + ], + "args": [ + { + "name": "arg1", + "type": "string" + }, + { + "name": "arg2", + "type": "string" + } + ], + "translations": { + "en": "{arg1} · {arg2}", + "fr": "{arg1} · {arg2}", + "es": "{arg1} · {arg2}", + "it": "{arg1} · {arg2}", + "de": "{arg1} · {arg2}", + "pt": "{arg1} · {arg2}", + "pl": "{arg1} · {arg2}", + "nl": "{arg1} · {arg2}", + "ru": "{arg1} · {arg2}" + } + }, + "%@%%": { + "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": "About screen: button/link that opens the bug report form.", + "translations": { + "en": "Report a bug", + "fr": "Signaler un bug", + "es": "Informar de un error", + "it": "Segnala un bug", + "de": "Fehler melden", + "pt": "Comunicar um erro", + "pl": "Zgłoś błąd", + "nl": "Een fout melden", + "ru": "Сообщить об ошибке" + } + }, + "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é.", + "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.", + "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.", + "ru": "VniDrop передаёт файлы и папки напрямую с одного устройства на другое по сети, не загружая их в какой-либо хостинг-сервис. Не нужно создавать учётную запись, и после завершения ни одна копия вашей передачи не остаётся в облаке." + } + }, + "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.", + "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.", + "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.", + "ru": "Прямая передача с устройства на устройство — ваши файлы попадают напрямую к получателю." + } + }, + "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.", + "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.", + "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.", + "ru": "Соединения аутентифицированы и зашифрованы сквозным шифрованием (через Iroh), а входящие файлы проверяются по хешу их содержимого." + } + }, + "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.", + "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.", + "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.", + "ru": "Вы решаете, кто получает: одобряйте каждый запрос или откройте передачу всем, у кого есть приглашение." + } + }, + "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.", + "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.", + "pl": "Bez konta — nie trzeba się rejestrować.", + "nl": "Zonder account — er is niets om aan te melden.", + "ru": "Без учётной записи — регистрироваться не нужно." + } + }, + "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.", + "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.", + "pl": "Otwarte oprogramowanie, wydane na licencji Apache 2.0.", + "nl": "Opensource, uitgebracht onder de Apache 2.0-licentie.", + "ru": "Открытый исходный код, распространяется по лицензии 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", + "es": "Qué es VniDrop", + "it": "Cos’è VniDrop", + "de": "Was VniDrop ist", + "pt": "O que o VniDrop é", + "pl": "Czym jest VniDrop", + "nl": "Wat VniDrop is", + "ru": "Что такое 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.", + "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.", + "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.", + "ru": "Это не облачное хранилище — ни один сервер не хранит ваши файлы, и после передачи в облаке ничего не остаётся." + } + }, + "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.", + "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.", + "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.", + "ru": "Это не публичная рассылка — приглашение является частной ссылкой доступа, а не объявлением для всех поблизости." + } + }, + "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.", + "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.", + "pl": "To nie usługa synchronizacji ani kopii zapasowej.", + "nl": "Geen synchronisatie- of back-updienst.", + "ru": "Это не служба синхронизации или резервного копирования." + } + }, + "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", + "es": "Qué no es VniDrop", + "it": "Cosa non è VniDrop", + "de": "Was VniDrop nicht ist", + "pt": "O que o VniDrop não é", + "pl": "Czym VniDrop nie jest", + "nl": "Wat VniDrop niet is", + "ru": "Чем VniDrop не является" + } + }, + "about_license_label": { + "context": "About screen: label for the license row.", + "translations": { + "en": "License", + "fr": "Licence", + "es": "Licencia", + "it": "Licenza", + "de": "Lizenz", + "pt": "Licença", + "pl": "Licencja", + "nl": "Licentie", + "ru": "Лицензия" + } + }, + "about_privacy": { + "context": "About screen: link to the privacy policy.", + "translations": { + "en": "Privacy policy", + "fr": "Politique de confidentialité", + "es": "Política de privacidad", + "it": "Informativa sulla privacy", + "de": "Datenschutzrichtlinie", + "pt": "Política de privacidade", + "pl": "Polityka prywatności", + "nl": "Privacybeleid", + "ru": "Политика конфиденциальности" + } + }, + "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 ».", + "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».", + "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’.", + "ru": "Приглашения — это ключи доступа. Относитесь к QR-коду, NFC-метке или файлу .vnd как к частной ссылке доступа и делитесь ими только с теми, для кого они предназначены, особенно при варианте «Любой, у кого есть эта передача»." + } + }, + "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.", + "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.", + "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.", + "ru": "Отказ по умолчанию — VniDrop предоставляет только содержимое активной передачи и отклоняет неизвестные запросы." + } + }, + "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.", + "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.", + "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.", + "ru": "Полученные файлы сохраняются на вашем устройстве и никогда не перезаписывают существующий файл." + } + }, + "about_privacy_policy_label": { + "context": "About screen: label for the privacy policy row.", + "translations": { + "en": "Privacy policy", + "fr": "Politique de confidentialité", + "es": "Política de privacidad", + "it": "Informativa sulla privacy", + "de": "Datenschutzrichtlinie", + "pt": "Política de privacidade", + "pl": "Polityka prywatności", + "nl": "Privacybeleid", + "ru": "Политика конфиденциальности" + } + }, + "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.", + "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.", + "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.", + "ru": "Если два устройства не могут соединиться напрямую, зашифрованное соединение может передаваться через ретранслятор. Ретрансляторы пересылают только зашифрованные пакеты; они никогда не хранят ваши файлы." + } + }, + "about_privacy_title": { + "context": "About screen: section heading for the Privacy & security list.", + "translations": { + "en": "Privacy & security", + "fr": "Confidentialité et sécurité", + "es": "Privacidad y seguridad", + "it": "Privacy e sicurezza", + "de": "Datenschutz & Sicherheit", + "pt": "Privacidade e segurança", + "pl": "Prywatność i bezpieczeństwo", + "nl": "Privacy en beveiliging", + "ru": "Конфиденциальность и безопасность" + } + }, + "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.", + "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.", + "pl": "Wysyłaj pliki bezpośrednio. Zachowaj kontrolę nad tym, kto je otrzymuje.", + "nl": "Verstuur bestanden rechtstreeks. Houd controle over wie ze ontvangt.", + "ru": "Отправляйте файлы напрямую. Сохраняйте контроль над тем, кто их получает." + } + }, + "about_title": { + "context": "About screen: navigation/screen title.", + "translations": { + "en": "About", + "fr": "À propos", + "es": "Acerca de", + "it": "Informazioni", + "de": "Über", + "pt": "Acerca de", + "pl": "Informacje", + "nl": "Over", + "ru": "О приложении" + } + }, + "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.", + "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.", + "pl": "Dopasuj do jasnego lub ciemnego wyglądu tego urządzenia.", + "nl": "De lichte of donkere weergave van dit apparaat volgen.", + "ru": "Следовать светлому или тёмному оформлению этого устройства." + } + }, + "appearance_dark_mode": { + "context": "Settings > Appearance: label for the dark theme option.", + "translations": { + "en": "Dark mode", + "fr": "Mode sombre", + "es": "Modo oscuro", + "it": "Modalità scura", + "de": "Dunkelmodus", + "pt": "Modo escuro", + "pl": "Tryb ciemny", + "nl": "Donkere modus", + "ru": "Тёмный режим" + } + }, + "appearance_light_mode": { + "context": "Settings > Appearance: label for the light theme option.", + "translations": { + "en": "Light mode", + "fr": "Mode clair", + "es": "Modo claro", + "it": "Modalità chiara", + "de": "Hellmodus", + "pt": "Modo claro", + "pl": "Tryb jasny", + "nl": "Lichte modus", + "ru": "Светлый режим" + } + }, + "appearance_system_mode": { + "context": "Settings > Appearance: label for the follow-system option.", + "translations": { + "en": "System", + "fr": "Système", + "es": "Sistema", + "it": "Sistema", + "de": "System", + "pt": "Sistema", + "pl": "System", + "nl": "Systeem", + "ru": "Системный" + } + }, + "appearance_title": { + "context": "Settings > Appearance: section title.", + "translations": { + "en": "Appearance", + "fr": "Apparence", + "es": "Apariencia", + "it": "Aspetto", + "de": "Darstellung", + "pt": "Aspeto", + "pl": "Wygląd", + "nl": "Weergave", + "ru": "Оформление" + } + }, + "approval_connection_request": { + "context": "Approval prompt: title when a receiver requests to download a transfer.", + "translations": { + "en": "Receive request", + "fr": "Demande de réception", + "es": "Solicitud de recepción", + "it": "Richiesta di ricezione", + "de": "Empfangsanfrage", + "pt": "Pedido de receção", + "pl": "Prośba o odbiór", + "nl": "Ontvangstverzoek", + "ru": "Запрос на получение" + } + }, + "approval_endpoint_id": { + "context": "Approval prompt: shows the requesting device's ID. {arg1} = device/endpoint identifier.", + "args": [ + { + "name": "arg1", + "type": "string" + } + ], + "translations": { + "en": "Device ID: {arg1}", + "fr": "Identifiant de l’appareil : {arg1}", + "es": "ID del dispositivo: {arg1}", + "it": "ID dispositivo: {arg1}", + "de": "Geräte-ID: {arg1}", + "pt": "ID do dispositivo: {arg1}", + "pl": "Identyfikator urządzenia: {arg1}", + "nl": "Apparaat-ID: {arg1}", + "ru": "Идентификатор устройства: {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é", + "es": "Un dispositivo cercano", + "it": "Un dispositivo nelle vicinanze", + "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", + "ru": "Устройство поблизости" + } + }, + "approval_pending_count": { + "context": "Send/transfer list: badge showing how many receive requests are awaiting approval. {count} = pending requests.", + "args": [ + { + "name": "count", + "type": "int" + } + ], + "translations": { + "en": "{count} requests waiting", + "fr": "{count} demandes en attente", + "es": "{count} solicitudes en espera", + "it": "{count} richieste in attesa", + "de": "{count} Anfragen warten", + "pt": "{count} pedidos em espera", + "pl": "Oczekujące prośby: {count}", + "nl": "{count} verzoeken in behandeling", + "ru": "Ожидающих запросов: {count}" + } + }, + "approval_request_body": { + "context": "Approval prompt body: '{arg1} wants to receive \"{arg2}\".' {arg1} = requester name, {arg2} = transfer name.", + "args": [ + { + "name": "arg1", + "type": "string" + }, + { + "name": "arg2", + "type": "string" + } + ], + "translations": { + "en": "{arg1} wants to receive “{arg2}”.", + "fr": "{arg1} souhaite recevoir « {arg2} ».", + "es": "{arg1} quiere recibir «{arg2}».", + "it": "{arg1} vuole ricevere «{arg2}».", + "de": "{arg1} möchte „{arg2}“ empfangen.", + "pt": "{arg1} quer receber «{arg2}».", + "pl": "{arg1} chce odebrać „{arg2}”.", + "nl": "{arg1} wil ‘{arg2}’ ontvangen.", + "ru": "{arg1} хочет получить «{arg2}»." + } + }, + "battery_level_title": { + "context": "Device information row: battery level label.", + "translations": { + "en": "Battery level", + "fr": "Niveau de batterie", + "es": "Nivel de batería", + "it": "Livello batteria", + "de": "Batteriestand", + "pt": "Nível da bateria", + "pl": "Poziom baterii", + "nl": "Batterijniveau", + "ru": "Уровень заряда" + } + }, + "bug_report_contact_hint": { + "context": "Bug report form: placeholder text in the contact email field.", + "translations": { + "en": "name@example.com", + "fr": "nom@exemple.com", + "es": "nombre@ejemplo.com", + "it": "nome@esempio.com", + "de": "name@beispiel.com", + "pt": "nome@exemplo.com", + "pl": "nazwa@przyklad.com", + "nl": "naam@voorbeeld.com", + "ru": "имя@пример.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)", + "es": "Correo de contacto (opcional)", + "it": "Email di contatto (facoltativa)", + "de": "Kontakt-E-Mail (optional)", + "pt": "E-mail de contacto (opcional)", + "pl": "E-mail kontaktowy (opcjonalnie)", + "nl": "Contact-e-mail (optioneel)", + "ru": "Контактный e-mail (необязательно)" + } + }, + "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).", + "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).", + "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).", + "ru": "Расскажите, что пошло не так. Мы прикладываем сведения об устройстве и, при желании, недавние журналы (конфиденциальные значения скрыты)." + } + }, + "bug_report_device_section": { + "context": "Bug report form: heading for the attached device information section.", + "translations": { + "en": "Device information", + "fr": "Informations sur l’appareil", + "es": "Información del dispositivo", + "it": "Informazioni sul dispositivo", + "de": "Geräteinformationen", + "pt": "Informações do dispositivo", + "pl": "Informacje o urządzeniu", + "nl": "Apparaatgegevens", + "ru": "Сведения об устройстве" + } + }, + "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", + "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", + "pl": "Opisz oczekiwane zachowanie", + "nl": "Beschrijf wat u verwachtte", + "ru": "Опишите, что вы ожидали" + } + }, + "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 ?", + "es": "¿Qué esperaba?", + "it": "Cosa si aspettava?", + "de": "Was haben Sie erwartet?", + "pt": "O que esperava?", + "pl": "Czego oczekiwano?", + "nl": "Wat verwachtte u?", + "ru": "Что вы ожидали?" + } + }, + "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", + "es": "Incluir registros recientes", + "it": "Includi i log recenti", + "de": "Aktuelle Protokolle einschließen", + "pt": "Incluir registos recentes", + "pl": "Dołącz ostatnie dzienniki", + "nl": "Recente logbestanden meesturen", + "ru": "Включить недавние журналы" + } + }, + "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.", + "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.", + "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.", + "ru": "Помогает нам диагностировать проблему. Конфиденциальные значения скрываются перед отправкой." + } + }, + "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", + "es": "Tamaño del archivo de registros", + "it": "Dimensione dell’allegato dei log", + "de": "Größe des Protokollanhangs", + "pt": "Tamanho do anexo de registos", + "pl": "Rozmiar załącznika z dziennikami", + "nl": "Grootte van logbijlage", + "ru": "Размер вложения с журналами" + } + }, + "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.", + "es": "Describa lo que esperaba.", + "it": "Descriva cosa si aspettava.", + "de": "Bitte beschreiben Sie, was Sie erwartet haben.", + "pt": "Descreva o que esperava.", + "pl": "Opisz oczekiwane zachowanie.", + "nl": "Beschrijf wat u verwachtte.", + "ru": "Опишите, что вы ожидали." + } + }, + "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é.", + "es": "Describa lo que ocurrió.", + "it": "Descriva cosa è accaduto.", + "de": "Bitte beschreiben Sie, was passiert ist.", + "pt": "Descreva o que aconteceu.", + "pl": "Opisz, co się stało.", + "nl": "Beschrijf wat er gebeurde.", + "ru": "Опишите, что произошло." + } + }, + "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", + "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", + "pl": "Wymień kroki umożliwiające odtworzenie problemu", + "nl": "Noem de stappen om het probleem te reproduceren", + "ru": "Перечислите шаги для воспроизведения проблемы" + } + }, + "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)", + "es": "Pasos para reproducir (opcional)", + "it": "Passaggi per riprodurre (facoltativi)", + "de": "Schritte zum Reproduzieren (optional)", + "pt": "Passos para reproduzir (opcional)", + "pl": "Kroki do odtworzenia (opcjonalnie)", + "nl": "Stappen om te reproduceren (optioneel)", + "ru": "Шаги для воспроизведения (необязательно)" + } + }, + "bug_report_submit": { + "context": "Bug report form: submit button.", + "translations": { + "en": "Submit report", + "fr": "Envoyer le rapport", + "es": "Enviar informe", + "it": "Invia segnalazione", + "de": "Bericht senden", + "pt": "Enviar relatório", + "pl": "Wyślij zgłoszenie", + "nl": "Rapport versturen", + "ru": "Отправить отчёт" + } + }, + "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.", + "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.", + "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.", + "ru": "Не удалось отправить отчёт об ошибке. Повторите попытку позже." + } + }, + "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é.", + "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.", + "pl": "Dziękujemy — Twoje zgłoszenie błędu zostało zapisane.", + "nl": "Bedankt — uw foutrapport is vastgelegd.", + "ru": "Спасибо — ваш отчёт об ошибке записан." + } + }, + "bug_report_submitting": { + "context": "Bug report form: progress label while the report is being sent.", + "translations": { + "en": "Submitting…", + "fr": "Envoi…", + "es": "Enviando…", + "it": "Invio in corso…", + "de": "Wird gesendet…", + "pt": "A enviar…", + "pl": "Wysyłanie…", + "nl": "Bezig met versturen…", + "ru": "Отправка…" + } + }, + "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é", + "es": "Describa lo que ocurrió", + "it": "Descriva cosa è accaduto", + "de": "Beschreiben Sie, was passiert ist", + "pt": "Descreva o que aconteceu", + "pl": "Opisz, co się stało", + "nl": "Beschrijf wat er gebeurde", + "ru": "Опишите, что произошло" + } + }, + "bug_report_what_label": { + "context": "Bug report form: label for the what-happened field.", + "translations": { + "en": "What happened?", + "fr": "Que s’est-il passé ?", + "es": "¿Qué ocurrió?", + "it": "Cosa è accaduto?", + "de": "Was ist passiert?", + "pt": "O que aconteceu?", + "pl": "Co się stało?", + "nl": "Wat is er gebeurd?", + "ru": "Что произошло?" + } + }, + "button_approve": { + "context": "Button: approve a receiver's request.", + "translations": { + "en": "Approve", + "fr": "Approuver", + "es": "Aprobar", + "it": "Approva", + "de": "Genehmigen", + "pt": "Aprovar", + "pl": "Zatwierdź", + "nl": "Goedkeuren", + "ru": "Одобрить" + } + }, + "button_back": { + "context": "Button: go back to the previous step/screen.", + "translations": { + "en": "Back", + "fr": "Retour", + "es": "Atrás", + "it": "Indietro", + "de": "Zurück", + "pt": "Voltar", + "pl": "Wstecz", + "nl": "Terug", + "ru": "Назад" + } + }, + "button_cancel": { + "context": "Button: cancel the current action or dialog.", + "translations": { + "en": "Cancel", + "fr": "Annuler", + "es": "Cancelar", + "it": "Annulla", + "de": "Abbrechen", + "pt": "Cancelar", + "pl": "Anuluj", + "nl": "Annuleren", + "ru": "Отмена" + } + }, + "button_cancel_receive": { + "context": "Button: cancel an in-progress receive.", + "translations": { + "en": "Cancel", + "fr": "Annuler", + "es": "Cancelar", + "it": "Annulla", + "de": "Abbrechen", + "pt": "Cancelar", + "pl": "Anuluj", + "nl": "Annuleren", + "ru": "Отмена" + } + }, + "button_change_files": { + "context": "Button: change the selected files in the send flow.", + "translations": { + "en": "Change files", + "fr": "Modifier les fichiers", + "es": "Cambiar archivos", + "it": "Cambia file", + "de": "Dateien ändern", + "pt": "Alterar ficheiros", + "pl": "Zmień pliki", + "nl": "Bestanden wijzigen", + "ru": "Изменить файлы" + } + }, + "button_choose_files": { + "context": "Button: open the file picker to choose files to send.", + "translations": { + "en": "Choose files", + "fr": "Choisir des fichiers", + "es": "Elegir archivos", + "it": "Scegli file", + "de": "Dateien auswählen", + "pt": "Escolher ficheiros", + "pl": "Wybierz pliki", + "nl": "Bestanden kiezen", + "ru": "Выбрать файлы" + } + }, + "button_choose_folder": { + "context": "Button: open the folder picker (send selection or receive folder).", + "translations": { + "en": "Choose folder", + "fr": "Choisir un dossier", + "es": "Elegir carpeta", + "it": "Scegli cartella", + "de": "Ordner auswählen", + "pt": "Escolher pasta", + "pl": "Wybierz folder", + "nl": "Map kiezen", + "ru": "Выбрать папку" + } + }, + "button_clear": { + "context": "Button: clear the current input or selection.", + "translations": { + "en": "Clear", + "fr": "Effacer", + "es": "Borrar", + "it": "Cancella", + "de": "Löschen", + "pt": "Limpar", + "pl": "Wyczyść", + "nl": "Wissen", + "ru": "Очистить" + } + }, + "button_close": { + "context": "Button: close the current sheet/dialog.", + "translations": { + "en": "Close", + "fr": "Fermer", + "es": "Cerrar", + "it": "Chiudi", + "de": "Schließen", + "pt": "Fechar", + "pl": "Zamknij", + "nl": "Sluiten", + "ru": "Закрыть" + } + }, + "button_create_new_transfer": { + "context": "Button: start creating a new transfer (Send tab).", + "translations": { + "en": "New transfer", + "fr": "Nouveau transfert", + "es": "Nueva transferencia", + "it": "Nuovo trasferimento", + "de": "Neue Übertragung", + "pt": "Nova transferência", + "pl": "Nowy transfer", + "nl": "Nieuwe overdracht", + "ru": "Новая передача" + } + }, + "button_delete_transfer": { + "context": "Button: delete a transfer.", + "translations": { + "en": "Delete transfer", + "fr": "Supprimer le transfert", + "es": "Eliminar transferencia", + "it": "Elimina trasferimento", + "de": "Übertragung löschen", + "pt": "Eliminar transferência", + "pl": "Usuń transfer", + "nl": "Overdracht verwijderen", + "ru": "Удалить передачу" + } + }, + "button_download_invitation": { + "context": "Button: save the invitation as a .vnd file.", + "translations": { + "en": "Save .vnd file", + "fr": "Enregistrer le fichier .vnd", + "es": "Guardar archivo .vnd", + "it": "Salva file .vnd", + "de": ".vnd-Datei sichern", + "pt": "Guardar ficheiro .vnd", + "pl": "Zapisz plik .vnd", + "nl": ".vnd-bestand bewaren", + "ru": "Сохранить файл .vnd" + } + }, + "button_native_share": { + "context": "Button: open the OS share sheet to share the invitation.", + "translations": { + "en": "Share invitation", + "fr": "Partager l’invitation", + "es": "Compartir invitación", + "it": "Condividi invito", + "de": "Einladung teilen", + "pt": "Partilhar convite", + "pl": "Udostępnij zaproszenie", + "nl": "Uitnodiging delen", + "ru": "Поделиться приглашением" + } + }, + "button_open_settings": { + "context": "Button: open the OS Settings app (e.g. for permissions).", + "translations": { + "en": "Open Settings", + "fr": "Ouvrir les Réglages", + "es": "Abrir Ajustes", + "it": "Apri Impostazioni", + "de": "Einstellungen öffnen", + "pt": "Abrir Definições", + "pl": "Otwórz Ustawienia", + "nl": "Instellingen openen", + "ru": "Открыть Настройки" + } + }, + "button_receive": { + "context": "Button: receive label (Receive action).", + "translations": { + "en": "Receive", + "fr": "Recevoir", + "es": "Recibir", + "it": "Ricevi", + "de": "Empfangen", + "pt": "Receber", + "pl": "Odbierz", + "nl": "Ontvangen", + "ru": "Получить" + } + }, + "button_receive_files": { + "context": "Button: start receiving a transfer.", + "translations": { + "en": "Start receiving", + "fr": "Commencer à recevoir", + "es": "Empezar a recibir", + "it": "Inizia a ricevere", + "de": "Empfang starten", + "pt": "Começar a receber", + "pl": "Rozpocznij odbieranie", + "nl": "Ontvangen starten", + "ru": "Начать получение" + } + }, + "button_refuse": { + "context": "Button: refuse a receiver's request.", + "translations": { + "en": "Refuse", + "fr": "Refuser", + "es": "Rechazar", + "it": "Rifiuta", + "de": "Ablehnen", + "pt": "Recusar", + "pl": "Odrzuć", + "nl": "Weigeren", + "ru": "Отклонить" + } + }, + "button_remove_file": { + "context": "Button: remove a single file from the send selection.", + "translations": { + "en": "Remove file", + "fr": "Retirer le fichier", + "es": "Quitar archivo", + "it": "Rimuovi file", + "de": "Datei entfernen", + "pt": "Remover ficheiro", + "pl": "Usuń plik", + "nl": "Bestand verwijderen", + "ru": "Удалить файл" + } + }, + "button_reset_default": { + "context": "Button: reset a setting to its default value.", + "translations": { + "en": "Use default", + "fr": "Valeur par défaut", + "es": "Usar predeterminado", + "it": "Usa predefinito", + "de": "Standard verwenden", + "pt": "Usar predefinição", + "pl": "Użyj domyślnego", + "nl": "Standaard gebruiken", + "ru": "По умолчанию" + } + }, + "button_retry": { + "context": "Button: retry after a failed operation.", + "translations": { + "en": "Retry", + "fr": "Réessayer", + "es": "Reintentar", + "it": "Riprova", + "de": "Wiederholen", + "pt": "Tentar novamente", + "pl": "Spróbuj ponownie", + "nl": "Opnieuw proberen", + "ru": "Повторить" + } + }, + "button_share_file": { + "context": "Button: start sharing the transfer (make it available).", + "translations": { + "en": "Start sharing", + "fr": "Commencer le partage", + "es": "Empezar a compartir", + "it": "Inizia a condividere", + "de": "Freigabe starten", + "pt": "Começar a partilhar", + "pl": "Rozpocznij udostępnianie", + "nl": "Delen starten", + "ru": "Начать общий доступ" + } + }, + "button_sharing_file": { + "context": "Button: disabled/loading state while the transfer is being prepared.", + "translations": { + "en": "Preparing transfer…", + "fr": "Préparation du transfert…", + "es": "Preparando la transferencia…", + "it": "Preparazione del trasferimento…", + "de": "Übertragung wird vorbereitet…", + "pt": "A preparar a transferência…", + "pl": "Przygotowywanie transferu…", + "nl": "Overdracht voorbereiden…", + "ru": "Подготовка передачи…" + } + }, + "button_show_in_files": { + "context": "Button: reveal a received file in the Files app.", + "translations": { + "en": "Show in Files", + "fr": "Afficher dans Fichiers", + "es": "Mostrar en Archivos", + "it": "Mostra in File", + "de": "In „Dateien“ anzeigen", + "pt": "Mostrar em Ficheiros", + "pl": "Pokaż w Plikach", + "nl": "Toon in Bestanden", + "ru": "Показать в Файлах" + } + }, + "button_write_nfc": { + "context": "Button: write the invitation to an NFC tag.", + "translations": { + "en": "Write to NFC tag", + "fr": "Écrire sur un tag NFC", + "es": "Escribir en etiqueta NFC", + "it": "Scrivi su tag NFC", + "de": "Auf NFC-Tag schreiben", + "pt": "Escrever em etiqueta NFC", + "pl": "Zapisz na tagu NFC", + "nl": "Naar NFC-tag schrijven", + "ru": "Записать на NFC-метку" + } + }, + "device_model_title": { + "context": "Device information row: device model label.", + "translations": { + "en": "Device model", + "fr": "Modèle de l’appareil", + "es": "Modelo del dispositivo", + "it": "Modello del dispositivo", + "de": "Gerätemodell", + "pt": "Modelo do dispositivo", + "pl": "Model urządzenia", + "nl": "Apparaatmodel", + "ru": "Модель устройства" + } + }, + "device_name_title": { + "context": "Device information row: device name label.", + "translations": { + "en": "Device name", + "fr": "Nom de l’appareil", + "es": "Nombre del dispositivo", + "it": "Nome del dispositivo", + "de": "Gerätename", + "pt": "Nome do dispositivo", + "pl": "Nazwa urządzenia", + "nl": "Apparaatnaam", + "ru": "Имя устройства" + } + }, + "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.", + "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.", + "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.", + "ru": "Отправлять анонимные отчёты о сбоях и события использования, чтобы помочь нам улучшать VniDrop. Вы можете отключить это в любой момент. Приглашения, пути к файлам и содержимое передач никогда не включаются." + } + }, + "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é.", + "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.", + "pl": "Udostępnianie diagnostyki jest wyłączone.", + "nl": "Het delen van diagnostische gegevens is uitgeschakeld.", + "ru": "Передача диагностики отключена." + } + }, + "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é.", + "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.", + "pl": "Udostępnianie diagnostyki jest włączone.", + "nl": "Het delen van diagnostische gegevens is ingeschakeld.", + "ru": "Передача диагностики включена." + } + }, + "diagnostics_title": { + "context": "Settings > Diagnostics: toggle title.", + "translations": { + "en": "Share diagnostics", + "fr": "Partager les diagnostics", + "es": "Compartir diagnósticos", + "it": "Condividi dati diagnostici", + "de": "Diagnosedaten teilen", + "pt": "Partilhar diagnósticos", + "pl": "Udostępniaj diagnostykę", + "nl": "Diagnostische gegevens delen", + "ru": "Делиться диагностикой" + } + }, + "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.", + "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.", + "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.", + "ru": "Для сканирования 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.", + "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.", + "pl": "Nie udało się wczytać informacji o urządzeniu.", + "nl": "Apparaatgegevens konden niet worden geladen.", + "ru": "Не удалось загрузить сведения об устройстве." + } + }, + "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.", + "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.", + "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.", + "ru": "VniDrop не удалось получить доступ к выбранным файлам или папке. Проверьте разрешения и повторите попытку." + } + }, + "error_generic": { + "context": "Error: generic fallback message.", + "translations": { + "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.", + "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.", + "ru": "Что-то пошло не так. Повторите попытку." + } + }, + "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.", + "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.", + "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.", + "ru": "VniDrop не удалось завершить запуск. Закройте приложение и повторите попытку." + } + }, + "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.", + "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.", + "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.", + "ru": "Не удалось прочитать это приглашение. Попросите отправителя прислать новое." + } + }, + "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.", + "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.", + "pl": "To zaproszenie jest puste. Spróbuj otworzyć je ponownie.", + "nl": "Die uitnodiging is leeg. Probeer deze opnieuw te openen.", + "ru": "Это приглашение пустое. Попробуйте открыть его снова." + } + }, + "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.", + "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.", + "pl": "W tej kompilacji brakuje natywnej biblioteki VniDrop.", + "nl": "De native VniDrop-bibliotheek ontbreekt in deze build.", + "ru": "В этой сборке отсутствует нативная библиотека VniDrop." + } + }, + "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.", + "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.", + "pl": "Nie udało się użyć tego tagu NFC. Spróbuj innego.", + "nl": "Deze NFC-tag kon niet worden gebruikt. Probeer een andere.", + "ru": "Не удалось использовать эту NFC-метку. Попробуйте другую." + } + }, + "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é.", + "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.", + "pl": "Nadawca nie zatwierdził tego transferu lub został on odrzucony.", + "nl": "De afzender heeft deze overdracht niet goedgekeurd, of deze is geweigerd.", + "ru": "Отправитель не одобрил эту передачу, или она была отклонена." + } + }, + "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.", + "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.", + "pl": "VniDrop nie mógł zapisać danych transferu na tym urządzeniu.", + "nl": "VniDrop kon de overdrachtsgegevens niet op dit apparaat bewaren.", + "ru": "VniDrop не удалось сохранить данные передачи на этом устройстве." + } + }, + "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.", + "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.", + "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.", + "ru": "Не удалось открыть выбранный объект. Попробуйте выбрать его снова." + } + }, + "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.", + "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.", + "pl": "Wybierz co najmniej jeden element do udostępnienia.", + "nl": "Selecteer minstens één item om te delen.", + "ru": "Выберите хотя бы один объект для отправки." + } + }, + "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.", + "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.", + "pl": "VniDrop nie mógł otworzyć gniazd sieciowych na tym urządzeniu.", + "nl": "VniDrop kon zijn netwerksockets niet openen op dit apparaat.", + "ru": "VniDrop не удалось открыть сетевые сокеты на этом устройстве." + } + }, + "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.", + "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.", + "pl": "VniDrop jeszcze się uruchamia. Otwórz zaproszenie ponownie za chwilę.", + "nl": "VniDrop is nog aan het opstarten. Open de uitnodiging zo meteen opnieuw.", + "ru": "VniDrop ещё запускается. Откройте приглашение снова через мгновение." + } + }, + "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.", + "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.", + "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.", + "ru": "Не удалось завершить передачу. Проверьте подключение и повторите попытку." + } + }, + "field_receiver_name": { + "context": "Text field label: the receiver's display name.", + "translations": { + "en": "Receiver name", + "fr": "Nom du destinataire", + "es": "Nombre del destinatario", + "it": "Nome del destinatario", + "de": "Empfängername", + "pt": "Nome do destinatário", + "pl": "Nazwa odbiorcy", + "nl": "Naam van ontvanger", + "ru": "Имя получателя" + } + }, + "field_sender_name": { + "context": "Text field label: the sender's display name.", + "translations": { + "en": "Sender name", + "fr": "Nom de l’expéditeur", + "es": "Nombre del remitente", + "it": "Nome del mittente", + "de": "Absendername", + "pt": "Nome do remetente", + "pl": "Nazwa nadawcy", + "nl": "Naam van afzender", + "ru": "Имя отправителя" + } + }, + "field_transfer_name": { + "context": "Text field label: the name given to a transfer.", + "translations": { + "en": "Transfer name", + "fr": "Nom du transfert", + "es": "Nombre de la transferencia", + "it": "Nome del trasferimento", + "de": "Übertragungsname", + "pt": "Nome da transferência", + "pl": "Nazwa transferu", + "nl": "Naam van overdracht", + "ru": "Название передачи" + } + }, + "field_username": { + "context": "Settings text field label: this device's display name.", + "translations": { + "en": "Display name", + "fr": "Nom d’affichage", + "es": "Nombre visible", + "it": "Nome visualizzato", + "de": "Anzeigename", + "pt": "Nome a apresentar", + "pl": "Nazwa wyświetlana", + "nl": "Weergavenaam", + "ru": "Отображаемое имя" + } + }, + "folder_status_permission_required": { + "context": "Receive-folder status: permission is required to write to the chosen folder.", + "translations": { + "en": "Permission needed", + "fr": "Autorisation requise", + "es": "Permiso necesario", + "it": "Autorizzazione necessaria", + "de": "Berechtigung erforderlich", + "pt": "Permissão necessária", + "pl": "Wymagane uprawnienie", + "nl": "Machtiging vereist", + "ru": "Требуется разрешение" + } + }, + "folder_status_unavailable": { + "context": "Receive-folder status: the chosen folder is unavailable.", + "translations": { + "en": "Unavailable", + "fr": "Indisponible", + "es": "No disponible", + "it": "Non disponibile", + "de": "Nicht verfügbar", + "pt": "Indisponível", + "pl": "Niedostępny", + "nl": "Niet beschikbaar", + "ru": "Недоступно" + } + }, + "folder_status_validating": { + "context": "Receive-folder status: the folder is being checked.", + "translations": { + "en": "Checking folder…", + "fr": "Vérification du dossier…", + "es": "Comprobando carpeta…", + "it": "Controllo della cartella…", + "de": "Ordner wird geprüft…", + "pt": "A verificar a pasta…", + "pl": "Sprawdzanie folderu…", + "nl": "Map controleren…", + "ru": "Проверка папки…" + } + }, + "folder_status_writable": { + "context": "Receive-folder status: the folder is valid and writable.", + "translations": { + "en": "Ready", + "fr": "Prêt", + "es": "Listo", + "it": "Pronta", + "de": "Bereit", + "pt": "Pronto", + "pl": "Gotowy", + "nl": "Gereed", + "ru": "Готово" + } + }, + "metadata_files": { + "context": "Transfer metadata label: number of files.", + "translations": { + "en": "Files", + "fr": "Fichiers", + "es": "Archivos", + "it": "File", + "de": "Dateien", + "pt": "Ficheiros", + "pl": "Pliki", + "nl": "Bestanden", + "ru": "Файлы" + } + }, + "metadata_size": { + "context": "Transfer metadata label: total size.", + "translations": { + "en": "Size", + "fr": "Taille", + "es": "Tamaño", + "it": "Dimensione", + "de": "Größe", + "pt": "Tamanho", + "pl": "Rozmiar", + "nl": "Grootte", + "ru": "Размер" + } + }, + "metadata_status": { + "context": "Transfer metadata label: current status.", + "translations": { + "en": "Status", + "fr": "Statut", + "es": "Estado", + "it": "Stato", + "de": "Status", + "pt": "Estado", + "pl": "Status", + "nl": "Status", + "ru": "Статус" + } + }, + "nav_receive": { + "context": "Bottom navigation: Receive tab label.", + "translations": { + "en": "Receive", + "fr": "Recevoir", + "es": "Recibir", + "it": "Ricevi", + "de": "Empfangen", + "pt": "Receber", + "pl": "Odbierz", + "nl": "Ontvangen", + "ru": "Получить" + } + }, + "nav_send": { + "context": "Bottom navigation: Send tab label.", + "translations": { + "en": "Send", + "fr": "Envoyer", + "es": "Enviar", + "it": "Invia", + "de": "Senden", + "pt": "Enviar", + "pl": "Wyślij", + "nl": "Versturen", + "ru": "Отправить" + } + }, + "nav_settings": { + "context": "Bottom navigation: Settings tab label.", + "translations": { + "en": "Settings", + "fr": "Réglages", + "es": "Ajustes", + "it": "Impostazioni", + "de": "Einstellungen", + "pt": "Definições", + "pl": "Ustawienia", + "nl": "Instellingen", + "ru": "Настройки" + } + }, + "network_title": { + "context": "Device information row: network label.", + "translations": { + "en": "Network", + "fr": "Réseau", + "es": "Red", + "it": "Rete", + "de": "Netzwerk", + "pt": "Rede", + "pl": "Sieć", + "nl": "Netwerk", + "ru": "Сеть" + } + }, + "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.", + "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.", + "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.", + "ru": "Получайте уведомления о новых запросах на получение, пока VniDrop работает в фоне." + } + }, + "notifications_enabled_message": { + "context": "Settings > Notifications: confirmation when notifications are enabled.", + "translations": { + "en": "Notifications enabled.", + "fr": "Notifications activées.", + "es": "Notificaciones activadas.", + "it": "Notifiche attivate.", + "de": "Mitteilungen aktiviert.", + "pt": "Notificações ativadas.", + "pl": "Powiadomienia włączone.", + "nl": "Meldingen ingeschakeld.", + "ru": "Уведомления включены." + } + }, + "notifications_local_title": { + "context": "Settings > Notifications: label for the allow-notifications action.", + "translations": { + "en": "Allow notifications", + "fr": "Autoriser les notifications", + "es": "Permitir notificaciones", + "it": "Consenti le notifiche", + "de": "Mitteilungen erlauben", + "pt": "Permitir notificações", + "pl": "Zezwól na powiadomienia", + "nl": "Meldingen toestaan", + "ru": "Разрешить уведомления" + } + }, + "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.", + "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.", + "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.", + "ru": "Уведомления отключены для VniDrop. Вы можете включить их в Настройках." + } + }, + "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.", + "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.", + "pl": "Nie udało się otworzyć ustawień powiadomień.", + "nl": "De meldingsinstellingen konden niet worden geopend.", + "ru": "Не удалось открыть настройки уведомлений." + } + }, + "notifications_title": { + "context": "Settings > Notifications: section title.", + "translations": { + "en": "Notifications", + "fr": "Notifications", + "es": "Notificaciones", + "it": "Notifiche", + "de": "Mitteilungen", + "pt": "Notificações", + "pl": "Powiadomienia", + "nl": "Meldingen", + "ru": "Уведомления" + } + }, + "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.", + "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.", + "pl": "Powiadomienia nie są dostępne na tym urządzeniu.", + "nl": "Meldingen zijn niet beschikbaar op dit apparaat.", + "ru": "Уведомления недоступны на этом устройстве." + } + }, + "os_version_title": { + "context": "Device information row: operating system version label.", + "translations": { + "en": "Operating system", + "fr": "Système d’exploitation", + "es": "Sistema operativo", + "it": "Sistema operativo", + "de": "Betriebssystem", + "pt": "Sistema operativo", + "pl": "System operacyjny", + "nl": "Besturingssysteem", + "ru": "Операционная система" + } + }, + "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", + "es": "Guardar las transferencias recibidas en", + "it": "Salva i trasferimenti ricevuti in", + "de": "Empfangene Übertragungen sichern in", + "pt": "Guardar as transferências recebidas em", + "pl": "Zapisuj odebrane transfery w", + "nl": "Ontvangen overdrachten bewaren in", + "ru": "Сохранять полученные передачи в" + } + }, + "preferences_title": { + "context": "Settings > Preferences: section title.", + "translations": { + "en": "Preferences", + "fr": "Préférences", + "es": "Preferencias", + "it": "Preferenze", + "de": "Voreinstellungen", + "pt": "Preferências", + "pl": "Preferencje", + "nl": "Voorkeuren", + "ru": "Параметры" + } + }, + "progress_cancelled": { + "context": "Transfer progress label: cancelled.", + "translations": { + "en": "Cancelled", + "fr": "Annulé", + "es": "Cancelado", + "it": "Annullato", + "de": "Abgebrochen", + "pt": "Cancelado", + "pl": "Anulowano", + "nl": "Geannuleerd", + "ru": "Отменено" + } + }, + "progress_completed": { + "context": "Transfer progress label: completed.", + "translations": { + "en": "Completed", + "fr": "Terminé", + "es": "Completado", + "it": "Completato", + "de": "Abgeschlossen", + "pt": "Concluído", + "pl": "Ukończono", + "nl": "Voltooid", + "ru": "Завершено" + } + }, + "progress_connected": { + "context": "Transfer progress label: connected.", + "translations": { + "en": "Connected", + "fr": "Connecté", + "es": "Conectado", + "it": "Connesso", + "de": "Verbunden", + "pt": "Ligado", + "pl": "Połączono", + "nl": "Verbonden", + "ru": "Подключено" + } + }, + "progress_connecting": { + "context": "Transfer progress label: connecting.", + "translations": { + "en": "Connecting", + "fr": "Connexion", + "es": "Conectando", + "it": "Connessione", + "de": "Verbinden", + "pt": "A ligar", + "pl": "Łączenie", + "nl": "Verbinden", + "ru": "Подключение" + } + }, + "progress_downloading": { + "context": "Transfer progress label: downloading.", + "translations": { + "en": "Downloading", + "fr": "Téléchargement", + "es": "Descargando", + "it": "Download", + "de": "Wird geladen", + "pt": "A descarregar", + "pl": "Pobieranie", + "nl": "Downloaden", + "ru": "Загрузка" + } + }, + "progress_failed": { + "context": "Transfer progress label: failed.", + "translations": { + "en": "Failed", + "fr": "Échec", + "es": "Fallido", + "it": "Non riuscito", + "de": "Fehlgeschlagen", + "pt": "Falhou", + "pl": "Niepowodzenie", + "nl": "Mislukt", + "ru": "Ошибка" + } + }, + "progress_getting_ready": { + "context": "Transfer progress label: getting ready.", + "translations": { + "en": "Getting ready", + "fr": "Préparation", + "es": "Preparándose", + "it": "Preparazione", + "de": "Wird bereitgemacht", + "pt": "A preparar-se", + "pl": "Przygotowywanie", + "nl": "Klaarmaken", + "ru": "Подготовка" + } + }, + "progress_interrupted": { + "context": "Transfer progress label: the transfer was interrupted.", + "translations": { + "en": "Transfer interrupted", + "fr": "Transfert interrompu", + "es": "Transferencia interrumpida", + "it": "Trasferimento interrotto", + "de": "Übertragung unterbrochen", + "pt": "Transferência interrompida", + "pl": "Transfer przerwany", + "nl": "Overdracht onderbroken", + "ru": "Передача прервана" + } + }, + "progress_preparing": { + "context": "Transfer progress label: preparing.", + "translations": { + "en": "Preparing", + "fr": "Préparation", + "es": "Preparando", + "it": "Preparazione", + "de": "Wird vorbereitet", + "pt": "A preparar", + "pl": "Przygotowywanie", + "nl": "Voorbereiden", + "ru": "Подготовка" + } + }, + "progress_ready": { + "context": "Transfer progress label: ready.", + "translations": { + "en": "Ready", + "fr": "Prêt", + "es": "Listo", + "it": "Pronto", + "de": "Bereit", + "pt": "Pronto", + "pl": "Gotowe", + "nl": "Gereed", + "ru": "Готово" + } + }, + "progress_receiving": { + "context": "Transfer progress label: receiving.", + "translations": { + "en": "Receiving", + "fr": "Réception", + "es": "Recibiendo", + "it": "Ricezione", + "de": "Wird empfangen", + "pt": "A receber", + "pl": "Odbieranie", + "nl": "Ontvangen", + "ru": "Получение" + } + }, + "progress_requesting_access": { + "context": "Transfer progress label: requesting access from the sender.", + "translations": { + "en": "Requesting access", + "fr": "Demande d’accès", + "es": "Solicitando acceso", + "it": "Richiesta di accesso", + "de": "Zugriff wird angefragt", + "pt": "A pedir acesso", + "pl": "Prośba o dostęp", + "nl": "Toegang aanvragen", + "ru": "Запрос доступа" + } + }, + "progress_saving": { + "context": "Transfer progress label: saving received files.", + "translations": { + "en": "Saving", + "fr": "Enregistrement", + "es": "Guardando", + "it": "Salvataggio", + "de": "Wird gesichert", + "pt": "A guardar", + "pl": "Zapisywanie", + "nl": "Bewaren", + "ru": "Сохранение" + } + }, + "progress_sending": { + "context": "Transfer progress label: sending.", + "translations": { + "en": "Sending", + "fr": "Envoi", + "es": "Enviando", + "it": "Invio", + "de": "Wird gesendet", + "pt": "A enviar", + "pl": "Wysyłanie", + "nl": "Versturen", + "ru": "Отправка" + } + }, + "progress_sending_to_count": { + "context": "Transfer progress label: sending to N receivers. %lld = receiver count.", + "translations": { + "en": "Sending to {count}", + "fr": "Envoi à {count}", + "es": "Enviando a {count}", + "it": "Invio a {count}", + "de": "Senden an {count}", + "pt": "A enviar para {count}", + "pl": "Wysyłanie do {count}", + "nl": "Versturen naar {count}", + "ru": "Отправка получателям: {count}" + }, + "args": [ + { + "name": "count", + "type": "int" + } + ] + }, + "progress_share_ready": { + "context": "Transfer progress label: the share is ready.", + "translations": { + "en": "Ready to share", + "fr": "Prêt à partager", + "es": "Listo para compartir", + "it": "Pronto per la condivisione", + "de": "Bereit zum Teilen", + "pt": "Pronto para partilhar", + "pl": "Gotowe do udostępnienia", + "nl": "Klaar om te delen", + "ru": "Готово к отправке" + } + }, + "progress_working": { + "context": "Transfer progress label: generic working/in-progress state.", + "translations": { + "en": "Working…", + "fr": "En cours…", + "es": "Trabajando…", + "it": "Elaborazione…", + "de": "Wird bearbeitet…", + "pt": "A processar…", + "pl": "Przetwarzanie…", + "nl": "Bezig…", + "ru": "Обработка…" + } + }, + "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.", + "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.", + "pl": "Wybierz dostępną metodę zaproszenia.", + "nl": "Kies de uitnodigingsmethode die u ter beschikking staat.", + "ru": "Выберите доступный вам способ приглашения." + } + }, + "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 ?", + "es": "¿Cómo quiere conectarse?", + "it": "Come vuole connettersi?", + "de": "Wie möchten Sie sich verbinden?", + "pt": "Como pretende ligar-se?", + "pl": "Jak chcesz się połączyć?", + "nl": "Hoe wilt u verbinding maken?", + "ru": "Как вы хотите подключиться?" + } + }, + "receive_clear_history": { + "context": "Receive history: action to clear all history.", + "translations": { + "en": "Clear history", + "fr": "Effacer l’historique", + "es": "Borrar historial", + "it": "Cancella cronologia", + "de": "Verlauf löschen", + "pt": "Limpar histórico", + "pl": "Wyczyść historię", + "nl": "Geschiedenis wissen", + "ru": "Очистить историю" + } + }, + "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.", + "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.", + "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.", + "ru": "Все завершённые, неудачные и отменённые получения будут удалены из истории VniDrop. Загруженные файлы останутся на этом устройстве." + } + }, + "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 ?", + "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?", + "pl": "Wyczyścić historię odbioru?", + "nl": "Ontvangstgeschiedenis wissen?", + "ru": "Очистить историю получения?" + } + }, + "receive_completed": { + "context": "Receive flow: toast/message when a transfer finishes downloading.", + "translations": { + "en": "Transfer received.", + "fr": "Transfert reçu.", + "es": "Transferencia recibida.", + "it": "Trasferimento ricevuto.", + "de": "Übertragung empfangen.", + "pt": "Transferência recebida.", + "pl": "Transfer odebrany.", + "nl": "Overdracht ontvangen.", + "ru": "Передача получена." + } + }, + "receive_delete_history_description": { + "context": "Receive history: confirmation body for removing one item. {arg1} = transfer name.", + "args": [ + { + "name": "arg1", + "type": "string" + } + ], + "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.", + "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.", + "nl": "‘{arg1}’ wordt uit de geschiedenis van VniDrop verwijderd. Het gedownloade bestand blijft op dit apparaat.", + "ru": "«{arg1}» будет удалён из истории VniDrop. Загруженный файл останется на этом устройстве." + } + }, + "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", + "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", + "pl": "Usuń z historii odbioru", + "nl": "Uit ontvangstgeschiedenis verwijderen", + "ru": "Удалить из истории получения" + } + }, + "receive_delete_history_title": { + "context": "Receive history: confirmation title for removing one item.", + "translations": { + "en": "Remove from history?", + "fr": "Retirer de l’historique ?", + "es": "¿Quitar del historial?", + "it": "Rimuovere dalla cronologia?", + "de": "Aus dem Verlauf entfernen?", + "pt": "Remover do histórico?", + "pl": "Usunąć z historii?", + "nl": "Uit geschiedenis verwijderen?", + "ru": "Удалить из истории?" + } + }, + "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.", + "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.", + "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.", + "ru": "Откройте приглашение VniDrop, отсканируйте QR-код или поднесите 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", + "es": "Aún no se ha recibido nada", + "it": "Ancora nulla di ricevuto", + "de": "Noch nichts empfangen", + "pt": "Ainda não recebeu nada", + "pl": "Nic jeszcze nie odebrano", + "nl": "Nog niets ontvangen", + "ru": "Пока ничего не получено" + } + }, + "receive_history_cleared": { + "context": "Receive history: toast confirming history was cleared.", + "translations": { + "en": "Receive history cleared.", + "fr": "Historique de réception effacé.", + "es": "Historial de recepción borrado.", + "it": "Cronologia di ricezione cancellata.", + "de": "Empfangsverlauf gelöscht.", + "pt": "Histórico de receção limpo.", + "pl": "Historia odbioru wyczyszczona.", + "nl": "Ontvangstgeschiedenis gewist.", + "ru": "История получения очищена." + } + }, + "receive_history_title": { + "context": "Receive tab: History section title.", + "translations": { + "en": "History", + "fr": "Historique", + "es": "Historial", + "it": "Cronologia", + "de": "Verlauf", + "pt": "Histórico", + "pl": "Historia", + "nl": "Geschiedenis", + "ru": "История" + } + }, + "receive_method_file": { + "context": "Receive method: open a .vnd invitation file.", + "translations": { + "en": "Open a .vnd invitation", + "fr": "Ouvrir une invitation .vnd", + "es": "Abrir una invitación .vnd", + "it": "Apri un invito .vnd", + "de": "Eine .vnd-Einladung öffnen", + "pt": "Abrir um convite .vnd", + "pl": "Otwórz zaproszenie .vnd", + "nl": "Een .vnd-uitnodiging openen", + "ru": "Открыть приглашение .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.", + "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.", + "pl": "Wybierz zaproszenie zapisane lub udostępnione na tym urządzeniu.", + "nl": "Kies een uitnodiging die op dit apparaat is bewaard of gedeeld.", + "ru": "Выберите приглашение, сохранённое или отправленное на это устройство." + } + }, + "receive_method_nfc": { + "context": "Receive method: read an NFC tag.", + "translations": { + "en": "Read NFC tag", + "fr": "Lire un tag NFC", + "es": "Leer etiqueta NFC", + "it": "Leggi tag NFC", + "de": "NFC-Tag lesen", + "pt": "Ler etiqueta NFC", + "pl": "Odczytaj tag NFC", + "nl": "NFC-tag lezen", + "ru": "Прочитать 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.", + "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.", + "pl": "Zbliż to urządzenie do tagu zaproszenia nadawcy.", + "nl": "Houd dit apparaat bij de uitnodigingstag van de afzender.", + "ru": "Поднесите это устройство к метке приглашения отправителя." + } + }, + "receive_method_scan": { + "context": "Receive method: scan a QR code.", + "translations": { + "en": "Scan QR code", + "fr": "Scanner un QR code", + "es": "Escanear código QR", + "it": "Scansiona codice QR", + "de": "QR-Code scannen", + "pt": "Ler código QR", + "pl": "Zeskanuj kod QR", + "nl": "QR-code scannen", + "ru": "Сканировать 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.", + "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.", + "pl": "Użyj aparatu, aby zeskanować kod VniDrop nadawcy.", + "nl": "Gebruik de camera om de VniDrop-code van de afzender te scannen.", + "ru": "Используйте камеру, чтобы отсканировать код VniDrop отправителя." + } + }, + "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.", + "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.", + "pl": "Transfery odebrane na tym urządzeniu.", + "nl": "Overdrachten die u op dit apparaat hebt ontvangen.", + "ru": "Передачи, полученные на этом устройстве." + } + }, + "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…", + "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…", + "pl": "Zbliż do tagu NFC…", + "nl": "Houd bij de NFC-tag…", + "ru": "Поднесите к 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.", + "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.", + "pl": "Nie udało się otworzyć VniDrop w Plikach.", + "nl": "VniDrop kon niet worden geopend in Bestanden.", + "ru": "Не удалось открыть VniDrop в Файлах." + } + }, + "receive_review_title": { + "context": "Receive flow: title of the review screen before accepting a transfer.", + "translations": { + "en": "Review transfer", + "fr": "Vérifier le transfert", + "es": "Revisar transferencia", + "it": "Rivedi trasferimento", + "de": "Übertragung prüfen", + "pt": "Rever transferência", + "pl": "Przejrzyj transfer", + "nl": "Overdracht controleren", + "ru": "Проверить передачу" + } + }, + "receive_title": { + "context": "Receive tab: screen title.", + "translations": { + "en": "Receive", + "fr": "Recevoir", + "es": "Recibir", + "it": "Ricevi", + "de": "Empfangen", + "pt": "Receber", + "pl": "Odbierz", + "nl": "Ontvangen", + "ru": "Получить" + } + }, + "receive_unknown_transfer": { + "context": "Receive flow: fallback name for a transfer with no title.", + "translations": { + "en": "VniDrop transfer", + "fr": "Transfert VniDrop", + "es": "Transferencia de VniDrop", + "it": "Trasferimento VniDrop", + "de": "VniDrop-Übertragung", + "pt": "Transferência VniDrop", + "pl": "Transfer VniDrop", + "nl": "VniDrop-overdracht", + "ru": "Передача 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", + "es": "Cualquiera que tenga esta transferencia", + "it": "Chiunque abbia questo trasferimento", + "de": "Jeder mit dieser Übertragung", + "pt": "Qualquer pessoa com esta transferência", + "pl": "Każdy, kto ma ten transfer", + "nl": "Iedereen met deze overdracht", + "ru": "Любой, у кого есть эта передача" + } + }, + "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.", + "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.", + "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.", + "ru": "Одобрение не требуется. Используйте только для объектов, которыми вы готовы поделиться." + } + }, + "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.", + "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.", + "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": "Любой, у кого есть приглашение, может загружать, пока вы не остановите общий доступ. Не используйте это для личных или конфиденциальных объектов." + } + }, + "send_access_approval": { + "context": "Send access option: approve each receiver.", + "translations": { + "en": "Ask before each download", + "fr": "Demander avant chaque téléchargement", + "es": "Preguntar antes de cada descarga", + "it": "Chiedi prima di ogni download", + "de": "Vor jedem Download fragen", + "pt": "Perguntar antes de cada descarga", + "pl": "Pytaj przed każdym pobraniem", + "nl": "Vragen vóór elke download", + "ru": "Спрашивать перед каждой загрузкой" + } + }, + "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.", + "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.", + "pl": "Zatwierdzasz lub odrzucasz każdego nowego odbiorcę.", + "nl": "U keurt elke nieuwe ontvanger goed of weigert deze.", + "ru": "Вы одобряете или отклоняете каждого нового получателя." + } + }, + "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 ?", + "es": "¿Quién puede recibirla?", + "it": "Chi può riceverlo?", + "de": "Wer kann sie empfangen?", + "pt": "Quem a pode receber?", + "pl": "Kto może to odebrać?", + "nl": "Wie kan het ontvangen?", + "ru": "Кто может это получить?" + } + }, + "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.", + "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.", + "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.", + "ru": "Выберите файлы или папку на этом устройстве. Вы сможете проверить выбор перед созданием передачи." + } + }, + "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", + "es": "Elija qué compartir", + "it": "Scelga cosa condividere", + "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", + "ru": "Выберите, чем поделиться" + } + }, + "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.", + "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.", + "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.", + "ru": "Создайте передачу, решите, кто может её получить, затем пригласите этих людей с помощью QR-кода, NFC-метки или файла приглашения." + } + }, + "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", + "es": "Aún no se ha compartido nada", + "it": "Ancora nulla di condiviso", + "de": "Noch nichts geteilt", + "pt": "Ainda não partilhou nada", + "pl": "Nic jeszcze nie udostępniono", + "nl": "Nog niets gedeeld", + "ru": "Пока ничем не поделились" + } + }, + "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", + "es": "Tamaño no disponible", + "it": "Dimensione non disponibile", + "de": "Größe nicht verfügbar", + "pt": "Tamanho indisponível", + "pl": "Rozmiar niedostępny", + "nl": "Grootte niet beschikbaar", + "ru": "Размер недоступен" + } + }, + "send_folder_label": { + "context": "Send flow: label indicating a selected item is a folder.", + "translations": { + "en": "Folder", + "fr": "Dossier", + "es": "Carpeta", + "it": "Cartella", + "de": "Ordner", + "pt": "Pasta", + "pl": "Folder", + "nl": "Map", + "ru": "Папка" + } + }, + "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", + "es": "Crear una nueva transferencia", + "it": "Crea un nuovo trasferimento", + "de": "Eine neue Übertragung erstellen", + "pt": "Criar uma nova transferência", + "pl": "Utwórz nowy transfer", + "nl": "Een nieuwe overdracht aanmaken", + "ru": "Создать новую передачу" + } + }, + "send_new_transfer_title": { + "context": "Send flow: title for the new-transfer step.", + "translations": { + "en": "New transfer", + "fr": "Nouveau transfert", + "es": "Nueva transferencia", + "it": "Nuovo trasferimento", + "de": "Neue Übertragung", + "pt": "Nova transferência", + "pl": "Nowy transfer", + "nl": "Nieuwe overdracht", + "ru": "Новая передача" + } + }, + "send_review_title": { + "context": "Send flow: title of the review-transfer step before creating it.", + "translations": { + "en": "Review transfer", + "fr": "Vérifier le transfert", + "es": "Revisar transferencia", + "it": "Rivedi trasferimento", + "de": "Übertragung prüfen", + "pt": "Rever transferência", + "pl": "Przejrzyj transfer", + "nl": "Overdracht controleren", + "ru": "Проверить передачу" + } + }, + "send_selected_files_count": { + "context": "Send flow: count of files chosen. {count} = selected files. NOTE: singular case reads '1 files' — should become a plural.", + "args": [ + { + "name": "count", + "type": "int" + } + ], + "translations": { + "en": "{count} files selected", + "fr": "{count} fichiers sélectionnés", + "es": "{count} archivos seleccionados", + "it": "{count} file selezionati", + "de": "{count} Dateien ausgewählt", + "pt": "{count} ficheiros selecionados", + "pl": "Wybrane pliki: {count}", + "nl": "{count} bestanden geselecteerd", + "ru": "Выбрано файлов: {count}" + } + }, + "send_stop_sharing": { + "context": "Transfer details: action to stop sharing a transfer.", + "translations": { + "en": "Stop sharing", + "fr": "Arrêter le partage", + "es": "Dejar de compartir", + "it": "Interrompi condivisione", + "de": "Freigabe beenden", + "pt": "Parar de partilhar", + "pl": "Zatrzymaj udostępnianie", + "nl": "Stoppen met delen", + "ru": "Остановить общий доступ" + } + }, + "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é.", + "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.", + "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.", + "ru": "Это остановит передачу и прервёт всех, кто сейчас её загружает. Она останется в вашей истории со статусом «Остановлена»." + } + }, + "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.", + "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.", + "pl": "Transfery udostępniane z tego urządzenia.", + "nl": "Overdrachten die u vanaf dit apparaat deelt.", + "ru": "Передачи, которыми вы делитесь с этого устройства." + } + }, + "send_title": { + "context": "Send tab: screen title.", + "translations": { + "en": "Send", + "fr": "Envoyer", + "es": "Enviar", + "it": "Invia", + "de": "Senden", + "pt": "Enviar", + "pl": "Wyślij", + "nl": "Versturen", + "ru": "Отправить" + } + }, + "send_transfer_created": { + "context": "Send flow: toast confirming a transfer was created.", + "translations": { + "en": "Transfer created.", + "fr": "Transfert créé.", + "es": "Transferencia creada.", + "it": "Trasferimento creato.", + "de": "Übertragung erstellt.", + "pt": "Transferência criada.", + "pl": "Transfer utworzony.", + "nl": "Overdracht aangemaakt.", + "ru": "Передача создана." + } + }, + "send_transfer_details_title": { + "context": "Send flow: title of the transfer details screen.", + "translations": { + "en": "Transfer details", + "fr": "Détails du transfert", + "es": "Detalles de la transferencia", + "it": "Dettagli del trasferimento", + "de": "Übertragungsdetails", + "pt": "Detalhes da transferência", + "pl": "Szczegóły transferu", + "nl": "Overdrachtsdetails", + "ru": "Сведения о передаче" + } + }, + "send_transfers_title": { + "context": "Send tab: 'Your transfers' list heading.", + "translations": { + "en": "Your transfers", + "fr": "Vos transferts", + "es": "Sus transferencias", + "it": "I suoi trasferimenti", + "de": "Ihre Übertragungen", + "pt": "As suas transferências", + "pl": "Twoje transfery", + "nl": "Uw overdrachten", + "ru": "Ваши передачи" + } + }, + "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.", + "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.", + "pl": "Twoja nazwa, miejsce zapisu transferów, wygląd i powiadomienia.", + "nl": "Uw naam, waar overdrachten worden bewaard, weergave en meldingen.", + "ru": "Ваше имя, место сохранения передач, оформление и уведомления." + } + }, + "settings_title": { + "context": "Settings screen: title.", + "translations": { + "en": "Settings", + "fr": "Réglages", + "es": "Ajustes", + "it": "Impostazioni", + "de": "Einstellungen", + "pt": "Definições", + "pl": "Ustawienia", + "nl": "Instellingen", + "ru": "Настройки" + } + }, + "snackbar_dismiss": { + "context": "Snackbar: accessibility label / action to dismiss the snackbar.", + "translations": { + "en": "Dismiss", + "fr": "Ignorer", + "es": "Descartar", + "it": "Ignora", + "de": "Ausblenden", + "pt": "Ignorar", + "pl": "Zamknij", + "nl": "Sluiten", + "ru": "Закрыть" + } + }, + "status_available": { + "context": "Transfer status: available (actively shared).", + "translations": { + "en": "Available", + "fr": "Disponible", + "es": "Disponible", + "it": "Disponibile", + "de": "Verfügbar", + "pt": "Disponível", + "pl": "Dostępny", + "nl": "Beschikbaar", + "ru": "Доступно" + } + }, + "status_cancelled": { + "context": "Transfer status: cancelled.", + "translations": { + "en": "Cancelled", + "fr": "Annulé", + "es": "Cancelado", + "it": "Annullato", + "de": "Abgebrochen", + "pt": "Cancelado", + "pl": "Anulowany", + "nl": "Geannuleerd", + "ru": "Отменено" + } + }, + "status_completed": { + "context": "Transfer status: completed.", + "translations": { + "en": "Completed", + "fr": "Terminé", + "es": "Completado", + "it": "Completato", + "de": "Abgeschlossen", + "pt": "Concluído", + "pl": "Ukończony", + "nl": "Voltooid", + "ru": "Завершено" + } + }, + "status_failed": { + "context": "Transfer status: failed.", + "translations": { + "en": "Failed", + "fr": "Échec", + "es": "Fallido", + "it": "Non riuscito", + "de": "Fehlgeschlagen", + "pt": "Falhou", + "pl": "Niepowodzenie", + "nl": "Mislukt", + "ru": "Ошибка" + } + }, + "status_preparing": { + "context": "Transfer status: preparing.", + "translations": { + "en": "Preparing", + "fr": "Préparation", + "es": "Preparando", + "it": "Preparazione", + "de": "Wird vorbereitet", + "pt": "A preparar", + "pl": "Przygotowywanie", + "nl": "Voorbereiden", + "ru": "Подготовка" + } + }, + "status_receiving": { + "context": "Transfer status: receiving.", + "translations": { + "en": "Receiving", + "fr": "Réception", + "es": "Recibiendo", + "it": "Ricezione", + "de": "Wird empfangen", + "pt": "A receber", + "pl": "Odbieranie", + "nl": "Ontvangen", + "ru": "Получение" + } + }, + "status_stopped": { + "context": "Transfer status: stopped.", + "translations": { + "en": "Stopped", + "fr": "Arrêté", + "es": "Detenido", + "it": "Interrotto", + "de": "Beendet", + "pt": "Parada", + "pl": "Zatrzymany", + "nl": "Gestopt", + "ru": "Остановлено" + } + }, + "storage_calculating": { + "context": "Settings > Storage: placeholder while a size is being calculated.", + "translations": { + "en": "Calculating…", + "fr": "Calcul…", + "es": "Calculando…", + "it": "Calcolo…", + "de": "Wird berechnet…", + "pt": "A calcular…", + "pl": "Obliczanie…", + "nl": "Berekenen…", + "ru": "Вычисление…" + } + }, + "storage_delete_transfers": { + "context": "Settings > Storage: button to delete all transfer records.", + "translations": { + "en": "Delete all transfers", + "fr": "Supprimer tous les transferts", + "es": "Eliminar todas las transferencias", + "it": "Elimina tutti i trasferimenti", + "de": "Alle Übertragungen löschen", + "pt": "Eliminar todas as transferências", + "pl": "Usuń wszystkie transfery", + "nl": "Alle overdrachten verwijderen", + "ru": "Удалить все передачи" + } + }, + "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.", + "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.", + "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.", + "ru": "Это удалит из истории все записи об отправленных и полученных передачах. Ваши полученные файлы не удаляются. Примечание: механизм передачи сохраняет своё содержимое, поэтому объём данных передачи может не уменьшиться. Это действие нельзя отменить." + } + }, + "storage_deleting": { + "context": "Settings > Storage: progress label while transfers are being deleted.", + "translations": { + "en": "Deleting…", + "fr": "Suppression…", + "es": "Eliminando…", + "it": "Eliminazione…", + "de": "Wird gelöscht…", + "pt": "A eliminar…", + "pl": "Usuwanie…", + "nl": "Verwijderen…", + "ru": "Удаление…" + } + }, + "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.", + "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.", + "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.", + "ru": "Данными передачи управляет механизм передачи — ваша история плюс содержимое файлов, которыми вы поделились. Кнопка ниже удаляет записи о передачах; механизм сохраняет своё содержимое, поэтому это значение может не уменьшиться. Полученные файлы — это загруженные вами файлы, и они никогда не удаляются здесь." + } + }, + "storage_received_files": { + "context": "Settings > Storage: label for the received-files size row.", + "translations": { + "en": "Received files", + "fr": "Fichiers reçus", + "es": "Archivos recibidos", + "it": "File ricevuti", + "de": "Empfangene Dateien", + "pt": "Ficheiros recebidos", + "pl": "Odebrane pliki", + "nl": "Ontvangen bestanden", + "ru": "Полученные файлы" + } + }, + "storage_temporary": { + "context": "Settings > Storage: label for the temporary-files size row.", + "translations": { + "en": "Temporary files", + "fr": "Fichiers temporaires", + "es": "Archivos temporales", + "it": "File temporanei", + "de": "Temporäre Dateien", + "pt": "Ficheiros temporários", + "pl": "Pliki tymczasowe", + "nl": "Tijdelijke bestanden", + "ru": "Временные файлы" + } + }, + "storage_title": { + "context": "Settings > Storage: section title.", + "translations": { + "en": "Storage", + "fr": "Stockage", + "es": "Almacenamiento", + "it": "Archiviazione", + "de": "Speicher", + "pt": "Armazenamento", + "pl": "Pamięć", + "nl": "Opslag", + "ru": "Хранилище" + } + }, + "storage_total": { + "context": "Settings > Storage: label for the total-size row.", + "translations": { + "en": "Total", + "fr": "Total", + "es": "Total", + "it": "Totale", + "de": "Gesamt", + "pt": "Total", + "pl": "Łącznie", + "nl": "Totaal", + "ru": "Всего" + } + }, + "storage_transfer_data": { + "context": "Settings > Storage: label for the transfer-engine data size row.", + "translations": { + "en": "Transfer data", + "fr": "Données de transfert", + "es": "Datos de transferencia", + "it": "Dati di trasferimento", + "de": "Übertragungsdaten", + "pt": "Dados de transferência", + "pl": "Dane transferu", + "nl": "Overdrachtsgegevens", + "ru": "Данные передачи" + } + }, + "storage_transfers_deleted": { + "context": "Settings > Storage: toast confirming all transfers were deleted.", + "translations": { + "en": "All transfers deleted", + "fr": "Tous les transferts supprimés", + "es": "Todas las transferencias eliminadas", + "it": "Tutti i trasferimenti eliminati", + "de": "Alle Übertragungen gelöscht", + "pt": "Todas as transferências eliminadas", + "pl": "Usunięto wszystkie transfery", + "nl": "Alle overdrachten verwijderd", + "ru": "Все передачи удалены" + } + }, + "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", + "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", + "pl": "Zobacz ważne aktualizacje tego transferu", + "nl": "Bekijk belangrijke updates voor deze overdracht", + "ru": "Просматривайте важные обновления этой передачи" + } + }, + "transfer_activity_title": { + "context": "Transfer details: Activity section title.", + "translations": { + "en": "Activity", + "fr": "Activité", + "es": "Actividad", + "it": "Attività", + "de": "Aktivität", + "pt": "Atividade", + "pl": "Aktywność", + "nl": "Activiteit", + "ru": "Активность" + } + }, + "transfer_delete_description": { + "context": "Transfer details: confirmation body for deleting a transfer. {arg1} = transfer name.", + "args": [ + { + "name": "arg1", + "type": "string" + } + ], + "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.", + "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.", + "nl": "‘{arg1}’ wordt niet meer gedeeld en de overdrachtsgeschiedenis wordt van dit apparaat verwijderd.", + "ru": "Общий доступ к «{arg1}» будет остановлен, а история передачи будет удалена с этого устройства." + } + }, + "transfer_delete_title": { + "context": "Transfer details: confirmation title for deleting a transfer.", + "translations": { + "en": "Delete transfer?", + "fr": "Supprimer le transfert ?", + "es": "¿Eliminar la transferencia?", + "it": "Eliminare il trasferimento?", + "de": "Übertragung löschen?", + "pt": "Eliminar a transferência?", + "pl": "Usunąć transfer?", + "nl": "Overdracht verwijderen?", + "ru": "Удалить передачу?" + } + }, + "transfer_deleted": { + "context": "Transfer details: toast confirming a transfer was deleted.", + "translations": { + "en": "Transfer deleted.", + "fr": "Transfert supprimé.", + "es": "Transferencia eliminada.", + "it": "Trasferimento eliminato.", + "de": "Übertragung gelöscht.", + "pt": "Transferência eliminada.", + "pl": "Transfer usunięty.", + "nl": "Overdracht verwijderd.", + "ru": "Передача удалена." + } + }, + "transfer_deleting": { + "context": "Transfer details: progress label while a transfer is being deleted.", + "translations": { + "en": "Deleting…", + "fr": "Suppression…", + "es": "Eliminando…", + "it": "Eliminazione…", + "de": "Wird gelöscht…", + "pt": "A eliminar…", + "pl": "Usuwanie…", + "nl": "Verwijderen…", + "ru": "Удаление…" + } + }, + "transfer_details_title": { + "context": "Transfer details: screen title.", + "translations": { + "en": "Transfer details", + "fr": "Détails du transfert", + "es": "Detalles de la transferencia", + "it": "Dettagli del trasferimento", + "de": "Übertragungsdetails", + "pt": "Detalhes da transferência", + "pl": "Szczegóły transferu", + "nl": "Overdrachtsdetails", + "ru": "Сведения о передаче" + } + }, + "transfer_event_approved": { + "context": "Transfer activity event: a receiver's access was approved.", + "translations": { + "en": "Receiver access approved", + "fr": "Accès du destinataire approuvé", + "es": "Acceso del destinatario aprobado", + "it": "Accesso del destinatario approvato", + "de": "Empfängerzugriff genehmigt", + "pt": "Acesso do destinatário aprovado", + "pl": "Zatwierdzono dostęp odbiorcy", + "nl": "Toegang ontvanger goedgekeurd", + "ru": "Доступ получателя одобрен" + } + }, + "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", + "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", + "pl": "Odbiorca ukończył transfer", + "nl": "Een ontvanger heeft de overdracht voltooid", + "ru": "Получатель завершил передачу" + } + }, + "transfer_event_connecting": { + "context": "Transfer activity event: connecting to the sender.", + "translations": { + "en": "Connecting to sender", + "fr": "Connexion à l’expéditeur", + "es": "Conectando con el remitente", + "it": "Connessione al mittente", + "de": "Verbindung zum Absender", + "pt": "A ligar ao remetente", + "pl": "Łączenie z nadawcą", + "nl": "Verbinden met afzender", + "ru": "Подключение к отправителю" + } + }, + "transfer_event_downloading": { + "context": "Transfer activity event: downloading.", + "translations": { + "en": "Downloading", + "fr": "Téléchargement", + "es": "Descargando", + "it": "Download", + "de": "Wird geladen", + "pt": "A descarregar", + "pl": "Pobieranie", + "nl": "Downloaden", + "ru": "Загрузка" + } + }, + "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", + "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", + "pl": "Podczas transferu wystąpił problem", + "nl": "Er is een probleem opgetreden bij de overdracht", + "ru": "При передаче возникла проблема" + } + }, + "transfer_event_preparing": { + "context": "Transfer activity event: preparing the transfer.", + "translations": { + "en": "Preparing your transfer", + "fr": "Préparation de votre transfert", + "es": "Preparando su transferencia", + "it": "Preparazione del trasferimento", + "de": "Ihre Übertragung wird vorbereitet", + "pt": "A preparar a sua transferência", + "pl": "Przygotowywanie transferu", + "nl": "Uw overdracht voorbereiden", + "ru": "Подготовка вашей передачи" + } + }, + "transfer_event_ready": { + "context": "Transfer activity event: ready to share.", + "translations": { + "en": "Ready to share", + "fr": "Prêt à partager", + "es": "Listo para compartir", + "it": "Pronto per la condivisione", + "de": "Bereit zum Teilen", + "pt": "Pronto para partilhar", + "pl": "Gotowe do udostępnienia", + "nl": "Klaar om te delen", + "ru": "Готово к отправке" + } + }, + "transfer_event_refused": { + "context": "Transfer activity event: a receiver's access was refused.", + "translations": { + "en": "Receiver access refused", + "fr": "Accès du destinataire refusé", + "es": "Acceso del destinatario rechazado", + "it": "Accesso del destinatario rifiutato", + "de": "Empfängerzugriff abgelehnt", + "pt": "Acesso do destinatário recusado", + "pl": "Odrzucono dostęp odbiorcy", + "nl": "Toegang ontvanger geweigerd", + "ru": "Доступ получателя отклонён" + } + }, + "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", + "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", + "pl": "Odbiorca poprosił o dostęp", + "nl": "Een ontvanger heeft toegang aangevraagd", + "ru": "Получатель запросил доступ" + } + }, + "transfer_event_saving": { + "context": "Transfer activity event: saving received files.", + "translations": { + "en": "Saving", + "fr": "Enregistrement", + "es": "Guardando", + "it": "Salvataggio", + "de": "Wird gesichert", + "pt": "A guardar", + "pl": "Zapisywanie", + "nl": "Bewaren", + "ru": "Сохранение" + } + }, + "transfer_event_stopped": { + "context": "Transfer activity event: sharing was stopped.", + "translations": { + "en": "Sharing stopped", + "fr": "Partage arrêté", + "es": "Se dejó de compartir", + "it": "Condivisione interrotta", + "de": "Freigabe beendet", + "pt": "Partilha parada", + "pl": "Zatrzymano udostępnianie", + "nl": "Delen gestopt", + "ru": "Раздача остановлена" + } + }, + "transfer_event_updated": { + "context": "Transfer activity event: the transfer was updated.", + "translations": { + "en": "Transfer updated", + "fr": "Transfert mis à jour", + "es": "Transferencia actualizada", + "it": "Trasferimento aggiornato", + "de": "Übertragung aktualisiert", + "pt": "Transferência atualizada", + "pl": "Transfer zaktualizowany", + "nl": "Overdracht bijgewerkt", + "ru": "Передача обновлена" + } + }, + "transfer_file_count": { + "context": "Transfer subtitle: file count with pluralization. {count} = number of files.", + "args": [ + { + "name": "count", + "type": "int" + } + ], + "plural": { + "en": { + "other": "{count} files", + "one": "{count} file" + }, + "fr": { + "one": "{count} fichier", + "other": "{count} fichiers" + }, + "es": { + "one": "{count} archivo", + "other": "{count} archivos" + }, + "it": { + "one": "{count} file", + "other": "{count} file" + }, + "de": { + "one": "{count} Datei", + "other": "{count} Dateien" + }, + "pt": { + "one": "{count} ficheiro", + "other": "{count} ficheiros" + }, + "pl": { + "one": "{count} plik", + "few": "{count} pliki", + "many": "{count} plików", + "other": "{count} pliku" + }, + "nl": { + "one": "{count} bestand", + "other": "{count} bestanden" + }, + "ru": { + "one": "{count} файл", + "few": "{count} файла", + "many": "{count} файлов", + "other": "{count} файла" + } + } + }, + "transfer_invitation_saved": { + "context": "Transfer share: toast confirming the invitation file was saved.", + "translations": { + "en": "Invitation saved.", + "fr": "Invitation enregistrée.", + "es": "Invitación guardada.", + "it": "Invito salvato.", + "de": "Einladung gesichert.", + "pt": "Convite guardado.", + "pl": "Zaproszenie zapisane.", + "nl": "Uitnodiging bewaard.", + "ru": "Приглашение сохранено." + } + }, + "transfer_nearby_device": { + "context": "Transfer share/receivers: label for a nearby device.", + "translations": { + "en": "Nearby device", + "fr": "Appareil à proximité", + "es": "Dispositivo cercano", + "it": "Dispositivo nelle vicinanze", + "de": "Gerät in der Nähe", + "pt": "Dispositivo próximo", + "pl": "Urządzenie w pobliżu", + "nl": "Apparaat in de buurt", + "ru": "Устройство поблизости" + } + }, + "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.", + "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.", + "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.", + "ru": "Запись NFC-меток недоступна на этом устройстве." + } + }, + "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.", + "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.", + "pl": "Zbliż urządzenie do zapisywalnego tagu NFC.", + "nl": "Houd uw apparaat bij een beschrijfbare NFC-tag.", + "ru": "Поднесите устройство к записываемой NFC-метке." + } + }, + "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.", + "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.", + "pl": "Zaproszenie zapisane na tagu NFC.", + "nl": "Uitnodiging naar de NFC-tag geschreven.", + "ru": "Приглашение записано на 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.", + "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.", + "pl": "Nie ma jeszcze aktywności do wyświetlenia.", + "nl": "Er is nog geen activiteit om weer te geven.", + "ru": "Пока нет активности для отображения." + } + }, + "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.", + "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.", + "pl": "Nikt jeszcze nie poprosił o ten transfer.", + "nl": "Nog niemand heeft deze overdracht aangevraagd.", + "ru": "Никто ещё не запросил эту передачу." + } + }, + "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", + "es": "Aprobado: esperando a que se complete", + "it": "Approvato: in attesa del completamento", + "de": "Genehmigt – wartet auf Abschluss", + "pt": "Aprovado — a aguardar conclusão", + "pl": "Zatwierdzono — oczekiwanie na ukończenie", + "nl": "Goedgekeurd — wachten op voltooiing", + "ru": "Одобрено — ожидание завершения" + } + }, + "transfer_receiver_completed": { + "context": "Receiver status: received successfully.", + "translations": { + "en": "Received successfully", + "fr": "Reçu avec succès", + "es": "Recibido correctamente", + "it": "Ricevuto correttamente", + "de": "Erfolgreich empfangen", + "pt": "Recebido com sucesso", + "pl": "Odebrano pomyślnie", + "nl": "Succesvol ontvangen", + "ru": "Успешно получено" + } + }, + "transfer_receiver_expired": { + "context": "Receiver status: the request expired.", + "translations": { + "en": "Request expired", + "fr": "Demande expirée", + "es": "Solicitud caducada", + "it": "Richiesta scaduta", + "de": "Anfrage abgelaufen", + "pt": "Pedido expirado", + "pl": "Prośba wygasła", + "nl": "Verzoek verlopen", + "ru": "Запрос истёк" + } + }, + "transfer_receiver_refused": { + "context": "Receiver status: the request was refused.", + "translations": { + "en": "Request refused", + "fr": "Demande refusée", + "es": "Solicitud rechazada", + "it": "Richiesta rifiutata", + "de": "Anfrage abgelehnt", + "pt": "Pedido recusado", + "pl": "Prośba odrzucona", + "nl": "Verzoek geweigerd", + "ru": "Запрос отклонён" + } + }, + "transfer_receiver_requested": { + "context": "Receiver status: waiting for the sender's approval.", + "translations": { + "en": "Waiting for your approval", + "fr": "En attente de votre approbation", + "es": "Esperando su aprobación", + "it": "In attesa della sua approvazione", + "de": "Wartet auf Ihre Genehmigung", + "pt": "A aguardar a sua aprovação", + "pl": "Oczekiwanie na Twoje zatwierdzenie", + "nl": "Wachten op uw goedkeuring", + "ru": "Ожидание вашего одобрения" + } + }, + "transfer_receiver_unknown": { + "context": "Receiver status: status unavailable/unknown.", + "translations": { + "en": "Status unavailable", + "fr": "Statut indisponible", + "es": "Estado no disponible", + "it": "Stato non disponibile", + "de": "Status nicht verfügbar", + "pt": "Estado indisponível", + "pl": "Status niedostępny", + "nl": "Status niet beschikbaar", + "ru": "Статус недоступен" + } + }, + "transfer_receivers_completed_count": { + "context": "Receivers summary: how many receivers completed. {count} = completed receivers.", + "args": [ + { + "name": "count", + "type": "int" + } + ], + "translations": { + "en": "{count} completed", + "fr": "{count} terminés", + "es": "{count} completados", + "it": "{count} completati", + "de": "{count} abgeschlossen", + "pt": "{count} concluídos", + "pl": "Ukończone: {count}", + "nl": "{count} voltooid", + "ru": "Завершено: {count}" + } + }, + "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", + "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", + "pl": "Prośby, zatwierdzenia i ukończone dostawy", + "nl": "Verzoeken, goedkeuringen en voltooide leveringen", + "ru": "Запросы, одобрения и завершённые доставки" + } + }, + "transfer_receivers_pending": { + "context": "Receivers summary: how many requests are waiting. {count} = pending receivers.", + "args": [ + { + "name": "count", + "type": "int" + } + ], + "translations": { + "en": "{count} waiting", + "fr": "{count} en attente", + "es": "{count} en espera", + "it": "{count} in attesa", + "de": "{count} warten", + "pt": "{count} em espera", + "pl": "Oczekujące: {count}", + "nl": "{count} in behandeling", + "ru": "Ожидают: {count}" + } + }, + "transfer_receivers_title": { + "context": "Transfer details: Receivers section title.", + "translations": { + "en": "Receivers", + "fr": "Destinataires", + "es": "Destinatarios", + "it": "Destinatari", + "de": "Empfänger", + "pt": "Destinatários", + "pl": "Odbiorcy", + "nl": "Ontvangers", + "ru": "Получатели" + } + }, + "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", + "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", + "pl": "Zeskanuj za pomocą VniDrop, aby odebrać ten transfer", + "nl": "Scan met VniDrop om deze overdracht te ontvangen", + "ru": "Отсканируйте с помощью VniDrop, чтобы получить эту передачу" + } + }, + "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é", + "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", + "pl": "Kod QR, plik zaproszenia i opcje w pobliżu", + "nl": "QR-code, uitnodigingsbestand en opties in de buurt", + "ru": "QR-код, файл приглашения и варианты поблизости" + } + }, + "transfer_share_title": { + "context": "Transfer details: Share section title.", + "translations": { + "en": "Share", + "fr": "Partager", + "es": "Compartir", + "it": "Condividi", + "de": "Teilen", + "pt": "Partilhar", + "pl": "Udostępnij", + "nl": "Delen", + "ru": "Поделиться" + } + }, + "value_unavailable": { + "context": "Placeholder shown when a device-info or metadata value can't be read.", + "translations": { + "en": "Not available", + "fr": "Non disponible", + "es": "No disponible", + "it": "Non disponibile", + "de": "Nicht verfügbar", + "pt": "Indisponível", + "pl": "Niedostępne", + "nl": "Niet beschikbaar", + "ru": "Недоступно" + } + }, + "version_title": { + "context": "Device information / Settings row: app version label.", + "translations": { + "en": "App version", + "fr": "Version de l’app", + "es": "Versión de la app", + "it": "Versione dell’app", + "de": "App-Version", + "pt": "Versão da app", + "pl": "Wersja aplikacji", + "nl": "App-versie", + "ru": "Версия приложения" + } + } + } +} 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-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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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 + + 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..869bc11 --- /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 файла + + diff --git a/shared/src/commonMain/composeResources/values/strings.xml b/shared/src/commonMain/composeResources/values/strings.xml index e866f8b..e4e00e1 100644 --- a/shared/src/commonMain/composeResources/values/strings.xml +++ b/shared/src/commonMain/composeResources/values/strings.xml @@ -1,218 +1,257 @@ + - 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 + 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 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 + 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 - 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. + 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 + 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 + Sending to %1$d + 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 + 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. + Transfer details + Your transfers + Your name, where transfers are saved, appearance, and notifications. + Settings + Dismiss + Available + Cancelled + Completed + Failed + 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. + 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