mirror of
https://github.com/sudosylabs/vnidrop.git
synced 2026-08-05 10:29:58 +02:00
Replace the placeholder `context` on all 255 keys in strings.json with a description of where each string appears and its purpose, and regenerate the xcstrings so the comments flow through to the Apple catalog.
3063 lines
84 KiB
Plaintext
3063 lines
84 KiB
Plaintext
{
|
||
"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": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "%1$@ %2$@ · %3$@"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"%@ · %@": {
|
||
"comment": "Apple format template composing two values with a middot separator. Legacy literal key — rename.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"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": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Report a bug"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_description": {
|
||
"comment": "About screen: intro paragraph describing what VniDrop does.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "VniDrop moves files and folders straight from one device to another over the network, without uploading them to any file-hosting service. There’s no account to create, and no copy of your transfer is left in the cloud once you’re done."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_is_direct": {
|
||
"comment": "About screen, 'What VniDrop is' list: point about direct device-to-device transfer.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "A direct device-to-device transfer — your files go straight to the receiver."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_is_encrypted": {
|
||
"comment": "About screen, 'What VniDrop is' list: point about encrypted, verified connections.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Connections are authenticated and end-to-end encrypted (via Iroh), and incoming files are verified by their content hash."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_is_in_control": {
|
||
"comment": "About screen, 'What VniDrop is' list: point about controlling who receives.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "You decide who receives: approve each request, or open a transfer to anyone holding the invitation."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_is_no_account": {
|
||
"comment": "About screen, 'What VniDrop is' list: point about being account-free.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Account-free — there’s nothing to sign up for."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_is_open": {
|
||
"comment": "About screen, 'What VniDrop is' list: point about being open source.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Open source, released under the Apache 2.0 license."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_is_title": {
|
||
"comment": "About screen: section heading for the 'What VniDrop is' list.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "What VniDrop is"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_isnt_cloud": {
|
||
"comment": "About screen, 'What VniDrop isn't' list: point about not being cloud storage.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Not cloud storage — no server holds your files, and nothing waits in the cloud after a transfer."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_isnt_public": {
|
||
"comment": "About screen, 'What VniDrop isn't' list: point about invitations not being public broadcasts.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Not public broadcasting — an invitation is a private access link, not an announcement to everyone nearby."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_isnt_sync": {
|
||
"comment": "About screen, 'What VniDrop isn't' list: point about not being sync/backup.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Not a sync or backup service."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_isnt_title": {
|
||
"comment": "About screen: section heading for the 'What VniDrop isn't' list.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "What VniDrop isn’t"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_license_label": {
|
||
"comment": "About screen: label for the license row.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "License"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_privacy": {
|
||
"comment": "About screen: link to the privacy policy.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Privacy policy"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_privacy_capability": {
|
||
"comment": "About screen, Privacy & security list: point that invitations are capabilities to share carefully.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Invitations are capabilities. Treat a QR code, NFC tag, or .vnd file like a private access link and share it only with the people you intend — especially with “Anyone with this transfer.”"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_privacy_deny": {
|
||
"comment": "About screen, Privacy & security list: point about denying unknown requests by default.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Deny by default — VniDrop serves only the content of an active share and rejects unknown requests."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_privacy_local": {
|
||
"comment": "About screen, Privacy & security list: point about received files staying local and never overwriting.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Received files are saved on your device and never silently overwrite an existing file."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_privacy_policy_label": {
|
||
"comment": "About screen: label for the privacy policy row.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Privacy policy"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_privacy_relay": {
|
||
"comment": "About screen, Privacy & security list: point explaining encrypted relays.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "If two devices can’t connect directly, the encrypted connection may be relayed. Relays forward encrypted packets only; they never store your files."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_privacy_title": {
|
||
"comment": "About screen: section heading for the Privacy & security list.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Privacy & security"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_tagline": {
|
||
"comment": "About screen: short tagline under the app name.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Send files directly. Stay in control of who receives them."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"about_title": {
|
||
"comment": "About screen: navigation/screen title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "About"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"appearance_auto_description": {
|
||
"comment": "Settings > Appearance: description for the System/auto option.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Match this device’s light or dark appearance."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"appearance_dark_mode": {
|
||
"comment": "Settings > Appearance: label for the dark theme option.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Dark mode"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"appearance_light_mode": {
|
||
"comment": "Settings > Appearance: label for the light theme option.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Light mode"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"appearance_system_mode": {
|
||
"comment": "Settings > Appearance: label for the follow-system option.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "System"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"appearance_title": {
|
||
"comment": "Settings > Appearance: section title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Appearance"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"approval_connection_request": {
|
||
"comment": "Approval prompt: title when a receiver requests to download a transfer.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Receive request"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"approval_endpoint_id": {
|
||
"comment": "Approval prompt: shows the requesting device's ID. {arg1} = device/endpoint identifier.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Device ID: %1$@"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"approval_nearby_device": {
|
||
"comment": "Approval prompt: fallback label for a requester with no display name.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "A nearby device"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"approval_pending_count": {
|
||
"comment": "Send/transfer list: badge showing how many receive requests are awaiting approval. {count} = pending requests.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "%1$d requests waiting"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"approval_request_body": {
|
||
"comment": "Approval prompt body: '{arg1} wants to receive \"{arg2}\".' {arg1} = requester name, {arg2} = transfer name.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "%1$@ wants to receive “%2$@”."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"battery_level_title": {
|
||
"comment": "Device information row: battery level label.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Battery level"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_contact_hint": {
|
||
"comment": "Bug report form: placeholder text in the contact email field.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "name@example.com"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_contact_label": {
|
||
"comment": "Bug report form: label for the optional contact email field.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Contact email (optional)"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_description": {
|
||
"comment": "Bug report form: intro text explaining what gets attached.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Tell us what went wrong. We attach device info and optional recent logs (with sensitive values redacted)."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_device_section": {
|
||
"comment": "Bug report form: heading for the attached device information section.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Device information"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_expected_hint": {
|
||
"comment": "Bug report form: placeholder in the 'what did you expect' field.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Describe what you expected to happen"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_expected_label": {
|
||
"comment": "Bug report form: label for the expected-behavior field.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "What did you expect?"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_include_logs": {
|
||
"comment": "Bug report form: toggle label to attach recent logs.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Include recent logs"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_include_logs_description": {
|
||
"comment": "Bug report form: explanation under the include-logs toggle.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Helps us diagnose the issue. Sensitive values are redacted before sending."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_logs_size": {
|
||
"comment": "Bug report form: label showing the size of the log attachment.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Log attachment size"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_missing_expected": {
|
||
"comment": "Bug report form: validation error when the expected-behavior field is empty.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Please describe what you expected."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_missing_what": {
|
||
"comment": "Bug report form: validation error when the what-happened field is empty.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Please describe what happened."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_steps_hint": {
|
||
"comment": "Bug report form: placeholder in the steps-to-reproduce field.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "List the steps to reproduce the issue"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_steps_label": {
|
||
"comment": "Bug report form: label for the optional steps-to-reproduce field.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Steps to reproduce (optional)"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_submit": {
|
||
"comment": "Bug report form: submit button.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Submit report"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_submit_failed": {
|
||
"comment": "Bug report form: error message when submission fails.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Could not submit the bug report. Try again later."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_submitted": {
|
||
"comment": "Bug report form: confirmation message after a successful submission.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Thanks — your bug report was recorded."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_submitting": {
|
||
"comment": "Bug report form: progress label while the report is being sent.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Submitting…"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_what_hint": {
|
||
"comment": "Bug report form: placeholder in the what-happened field.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Describe what happened"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"bug_report_what_label": {
|
||
"comment": "Bug report form: label for the what-happened field.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "What happened?"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_approve": {
|
||
"comment": "Button: approve a receiver's request.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Approve"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_back": {
|
||
"comment": "Button: go back to the previous step/screen.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Back"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_cancel": {
|
||
"comment": "Button: cancel the current action or dialog.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Cancel"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_cancel_receive": {
|
||
"comment": "Button: cancel an in-progress receive.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Cancel"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_change_files": {
|
||
"comment": "Button: change the selected files in the send flow.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Change files"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_choose_files": {
|
||
"comment": "Button: open the file picker to choose files to send.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Choose files"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_choose_folder": {
|
||
"comment": "Button: open the folder picker (send selection or receive folder).",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Choose folder"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_clear": {
|
||
"comment": "Button: clear the current input or selection.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Clear"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_close": {
|
||
"comment": "Button: close the current sheet/dialog.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Close"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_create_new_transfer": {
|
||
"comment": "Button: start creating a new transfer (Send tab).",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "New transfer"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_delete_transfer": {
|
||
"comment": "Button: delete a transfer.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Delete transfer"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_download_invitation": {
|
||
"comment": "Button: save the invitation as a .vnd file.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Save .vnd file"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_native_share": {
|
||
"comment": "Button: open the OS share sheet to share the invitation.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Share invitation"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_open_settings": {
|
||
"comment": "Button: open the OS Settings app (e.g. for permissions).",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Open Settings"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_receive": {
|
||
"comment": "Button: receive label (Receive action).",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Receive"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_receive_files": {
|
||
"comment": "Button: start receiving a transfer.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Start receiving"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_refuse": {
|
||
"comment": "Button: refuse a receiver's request.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Refuse"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_remove_file": {
|
||
"comment": "Button: remove a single file from the send selection.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Remove file"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_reset_default": {
|
||
"comment": "Button: reset a setting to its default value.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Use default"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_retry": {
|
||
"comment": "Button: retry after a failed operation.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Retry"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_share_file": {
|
||
"comment": "Button: start sharing the transfer (make it available).",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Start sharing"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_sharing_file": {
|
||
"comment": "Button: disabled/loading state while the transfer is being prepared.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Preparing transfer…"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_show_in_files": {
|
||
"comment": "Button: reveal a received file in the Files app.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Show in Files"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"button_write_nfc": {
|
||
"comment": "Button: write the invitation to an NFC tag.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Write to NFC tag"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"device_model_title": {
|
||
"comment": "Device information row: device model label.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Device model"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"device_name_title": {
|
||
"comment": "Device information row: device name label.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Device name"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"diagnostics_description": {
|
||
"comment": "Settings > Diagnostics: explanation of what anonymous diagnostics collect.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Send anonymous crash reports and usage events so we can improve VniDrop. You can turn this off anytime. Invitations, file paths, and transfer contents are never included."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"diagnostics_disabled_message": {
|
||
"comment": "Settings > Diagnostics: confirmation shown when diagnostics are turned off.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Diagnostics sharing is off."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"diagnostics_enabled_message": {
|
||
"comment": "Settings > Diagnostics: confirmation shown when diagnostics are turned on.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Diagnostics sharing is on."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"diagnostics_title": {
|
||
"comment": "Settings > Diagnostics: toggle title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Share diagnostics"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_camera": {
|
||
"comment": "Error: camera permission is needed to scan a QR code.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Camera access is required to scan a QR code."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_device_info": {
|
||
"comment": "Error: device information could not be loaded.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Could not load device information."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_filesystem": {
|
||
"comment": "Error: the selected files/folder could not be accessed.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "VniDrop could not access the selected files or folder. Check permissions and try again."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_generic": {
|
||
"comment": "Error: generic fallback message.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Something went wrong. Try again."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_initialization": {
|
||
"comment": "Error: the app failed to finish starting up.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "VniDrop could not finish starting up. Close the app and try again."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_invalid_ticket": {
|
||
"comment": "Error: the invitation/ticket could not be parsed.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "This invitation could not be read. Ask the sender for a new one."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_invitation_empty": {
|
||
"comment": "Error: the opened invitation contained no data.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "That invitation is empty. Try opening it again."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_missing_native_library": {
|
||
"comment": "Error: the native library is missing from the build.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "The native VniDrop library is missing from this build."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_nfc": {
|
||
"comment": "Error: the NFC tag could not be read/used.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "This NFC tag could not be used. Try another tag."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_permission": {
|
||
"comment": "Error: the transfer was not approved or was refused by the sender.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "The sender has not approved this transfer, or it was refused."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_repository": {
|
||
"comment": "Error: transfer data could not be saved locally.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "VniDrop could not save transfer data on this device."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_selection_failed": {
|
||
"comment": "Error: the selected item could not be opened.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Could not open the selected item. Try choosing it again."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_share_empty": {
|
||
"comment": "Error: attempted to share with nothing selected.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Select at least one item to share."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_socket_bind": {
|
||
"comment": "Error: the app could not open its network sockets.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "VniDrop could not open its network sockets on this device."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_starting_up": {
|
||
"comment": "Error: an invitation was opened before startup finished.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "VniDrop is still starting. Open the invitation again in a moment."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"error_transfer": {
|
||
"comment": "Error: the transfer could not be completed.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "The transfer could not be completed. Check your connection and try again."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"field_receiver_name": {
|
||
"comment": "Text field label: the receiver's display name.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Receiver name"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"field_sender_name": {
|
||
"comment": "Text field label: the sender's display name.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Sender name"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"field_transfer_name": {
|
||
"comment": "Text field label: the name given to a transfer.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Transfer name"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"field_username": {
|
||
"comment": "Settings text field label: this device's display name.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Display name"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"folder_status_permission_required": {
|
||
"comment": "Receive-folder status: permission is required to write to the chosen folder.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Permission needed"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"folder_status_unavailable": {
|
||
"comment": "Receive-folder status: the chosen folder is unavailable.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Unavailable"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"folder_status_validating": {
|
||
"comment": "Receive-folder status: the folder is being checked.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Checking folder…"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"folder_status_writable": {
|
||
"comment": "Receive-folder status: the folder is valid and writable.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Ready"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"metadata_files": {
|
||
"comment": "Transfer metadata label: number of files.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Files"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"metadata_size": {
|
||
"comment": "Transfer metadata label: total size.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Size"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"metadata_status": {
|
||
"comment": "Transfer metadata label: current status.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Status"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"nav_receive": {
|
||
"comment": "Bottom navigation: Receive tab label.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Receive"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"nav_send": {
|
||
"comment": "Bottom navigation: Send tab label.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Send"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"nav_settings": {
|
||
"comment": "Bottom navigation: Settings tab label.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Settings"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"network_title": {
|
||
"comment": "Device information row: network label.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Network"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"notifications_description": {
|
||
"comment": "Settings > Notifications: explanation of what notifications are used for.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Get notified about new receive requests while VniDrop is in the background."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"notifications_enabled_message": {
|
||
"comment": "Settings > Notifications: confirmation when notifications are enabled.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Notifications enabled."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"notifications_local_title": {
|
||
"comment": "Settings > Notifications: label for the allow-notifications action.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Allow notifications"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"notifications_permission_denied": {
|
||
"comment": "Settings > Notifications: message when the OS permission is denied.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Notifications are turned off for VniDrop. You can enable them in Settings."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"notifications_settings_open_failed": {
|
||
"comment": "Settings > Notifications: error when the OS notification settings can't be opened.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Could not open notification settings."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"notifications_title": {
|
||
"comment": "Settings > Notifications: section title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Notifications"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"notifications_unsupported": {
|
||
"comment": "Settings > Notifications: message when notifications aren't supported on the device.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Notifications are not available on this device."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"os_version_title": {
|
||
"comment": "Device information row: operating system version label.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Operating system"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"preferences_receive_folder_title": {
|
||
"comment": "Settings > Preferences: label for the received-files destination folder.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Save received transfers to"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"preferences_title": {
|
||
"comment": "Settings > Preferences: section title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Preferences"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_cancelled": {
|
||
"comment": "Transfer progress label: cancelled.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Cancelled"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_completed": {
|
||
"comment": "Transfer progress label: completed.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Completed"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_connected": {
|
||
"comment": "Transfer progress label: connected.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Connected"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_connecting": {
|
||
"comment": "Transfer progress label: connecting.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Connecting"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_downloading": {
|
||
"comment": "Transfer progress label: downloading.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Downloading"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_failed": {
|
||
"comment": "Transfer progress label: failed.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Failed"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_getting_ready": {
|
||
"comment": "Transfer progress label: getting ready.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Getting ready"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_interrupted": {
|
||
"comment": "Transfer progress label: the transfer was interrupted.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Transfer interrupted"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_preparing": {
|
||
"comment": "Transfer progress label: preparing.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Preparing"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_ready": {
|
||
"comment": "Transfer progress label: ready.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Ready"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_receiving": {
|
||
"comment": "Transfer progress label: receiving.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Receiving"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_requesting_access": {
|
||
"comment": "Transfer progress label: requesting access from the sender.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Requesting access"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_saving": {
|
||
"comment": "Transfer progress label: saving received files.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Saving"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_sending": {
|
||
"comment": "Transfer progress label: sending.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Sending"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_sending_to_count": {
|
||
"comment": "Transfer progress label: sending to N receivers. %lld = receiver count.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Sending to %lld"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_share_ready": {
|
||
"comment": "Transfer progress label: the share is ready.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Ready to share"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"progress_working": {
|
||
"comment": "Transfer progress label: generic working/in-progress state.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Working…"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_choose_method_body": {
|
||
"comment": "Receive flow: body text prompting the user to pick an invitation method.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Choose the invitation method available to you."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_choose_method_title": {
|
||
"comment": "Receive flow: title of the connect-method chooser.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "How would you like to connect?"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_clear_history": {
|
||
"comment": "Receive history: action to clear all history.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Clear history"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_clear_history_description": {
|
||
"comment": "Receive history: confirmation dialog body for clearing all history.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "All completed, failed, and cancelled receives will be removed from VniDrop’s history. Downloaded files will remain on this device."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_clear_history_title": {
|
||
"comment": "Receive history: confirmation dialog title for clearing all history.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Clear receive history?"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_completed": {
|
||
"comment": "Receive flow: toast/message when a transfer finishes downloading.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Transfer received."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_delete_history_description": {
|
||
"comment": "Receive history: confirmation body for removing one item. {arg1} = transfer name.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "“%1$@” will be removed from VniDrop’s history. The downloaded file will remain on this device."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_delete_history_item": {
|
||
"comment": "Receive history: swipe/menu action to delete a single history item.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Delete from receive history"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_delete_history_title": {
|
||
"comment": "Receive history: confirmation title for removing one item.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Remove from history?"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_empty_body": {
|
||
"comment": "Receive tab empty state: instructions on how to receive.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Open a VniDrop invitation, scan a QR code, or hold near an NFC tag."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_empty_title": {
|
||
"comment": "Receive tab empty state: title when nothing has been received.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Nothing received yet"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_history_cleared": {
|
||
"comment": "Receive history: toast confirming history was cleared.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Receive history cleared."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_history_title": {
|
||
"comment": "Receive tab: History section title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "History"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_method_file": {
|
||
"comment": "Receive method: open a .vnd invitation file.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Open a .vnd invitation"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_method_file_description": {
|
||
"comment": "Receive method description: open a saved/shared invitation file.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Choose an invitation saved or shared to this device."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_method_nfc": {
|
||
"comment": "Receive method: read an NFC tag.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Read NFC tag"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_method_nfc_description": {
|
||
"comment": "Receive method description: hold near the sender's NFC tag.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Hold this device near the sender’s invitation tag."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_method_scan": {
|
||
"comment": "Receive method: scan a QR code.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Scan QR code"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_method_scan_description": {
|
||
"comment": "Receive method description: use the camera to scan the sender's code.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Use the camera to scan the sender’s VniDrop code."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_new_subtitle": {
|
||
"comment": "Receive tab: subtitle under the title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Transfers you’ve received on this device."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_nfc_waiting": {
|
||
"comment": "Receive flow: prompt while waiting to read an NFC tag.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Hold near the NFC tag…"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_open_files_failed": {
|
||
"comment": "Receive flow: error when opening VniDrop's folder in Files fails.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Couldn’t open VniDrop in Files."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_review_title": {
|
||
"comment": "Receive flow: title of the review screen before accepting a transfer.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Review transfer"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_title": {
|
||
"comment": "Receive tab: screen title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Receive"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"receive_unknown_transfer": {
|
||
"comment": "Receive flow: fallback name for a transfer with no title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "VniDrop transfer"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_access_anyone": {
|
||
"comment": "Send access option: anyone with the invitation can receive.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Anyone with this transfer"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_access_anyone_description": {
|
||
"comment": "Send access option description: no approval required.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "No approval is required. Only use this for items you are comfortable sharing."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_access_anyone_warning": {
|
||
"comment": "Send access option warning: caution about open access.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Anyone with the invitation can download until you stop sharing. Do not use this for private or sensitive items."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_access_approval": {
|
||
"comment": "Send access option: approve each receiver.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Ask before each download"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_access_approval_description": {
|
||
"comment": "Send access option description: you approve/refuse each receiver.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "You approve or refuse every new receiver."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_access_title": {
|
||
"comment": "Send flow: heading for the who-can-receive access chooser.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Who can receive it?"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_choose_file_body": {
|
||
"comment": "Send flow: body text for the choose-what-to-share step.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Select files or a folder from this device. You can review the selection before creating the transfer."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_choose_file_title": {
|
||
"comment": "Send flow: title of the choose-what-to-share step.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Choose what to share"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_empty_body": {
|
||
"comment": "Send tab empty state: instructions on how to create a transfer.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Create a transfer, decide who can receive it, then invite them with a QR code, NFC tag, or invitation file."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_empty_title": {
|
||
"comment": "Send tab empty state: title when nothing has been shared.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Nothing shared yet"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_file_size_unknown": {
|
||
"comment": "Send flow: shown when a selected file's size can't be determined.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Size unavailable"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_folder_label": {
|
||
"comment": "Send flow: label indicating a selected item is a folder.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Folder"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_new_transfer_description": {
|
||
"comment": "Send flow: description for the create-new-transfer entry.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Create a new transfer"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_new_transfer_title": {
|
||
"comment": "Send flow: title for the new-transfer step.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "New transfer"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_review_title": {
|
||
"comment": "Send flow: title of the review-transfer step before creating it.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Review transfer"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"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": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "%1$d files selected"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_stop_sharing": {
|
||
"comment": "Transfer details: action to stop sharing a transfer.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Stop sharing"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_stop_sharing_description": {
|
||
"comment": "Transfer details: confirmation body for stopping sharing.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "This stops the transfer and interrupts anyone currently downloading it. It stays in your history as Stopped."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_subtitle": {
|
||
"comment": "Send tab: subtitle under the title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Transfers you’re sharing from this device."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_title": {
|
||
"comment": "Send tab: screen title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Send"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_transfer_created": {
|
||
"comment": "Send flow: toast confirming a transfer was created.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Transfer created."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_transfer_details_title": {
|
||
"comment": "Send flow: title of the transfer details screen.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Transfer details"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"send_transfers_title": {
|
||
"comment": "Send tab: 'Your transfers' list heading.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Your transfers"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"settings_subtitle": {
|
||
"comment": "Settings screen: subtitle summarizing what's configurable.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Your name, where transfers are saved, appearance, and notifications."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"settings_title": {
|
||
"comment": "Settings screen: title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Settings"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"snackbar_dismiss": {
|
||
"comment": "Snackbar: accessibility label / action to dismiss the snackbar.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Dismiss"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"status_available": {
|
||
"comment": "Transfer status: available (actively shared).",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Available"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"status_cancelled": {
|
||
"comment": "Transfer status: cancelled.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Cancelled"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"status_completed": {
|
||
"comment": "Transfer status: completed.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Completed"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"status_failed": {
|
||
"comment": "Transfer status: failed.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Failed"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"status_preparing": {
|
||
"comment": "Transfer status: preparing.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Preparing"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"status_receiving": {
|
||
"comment": "Transfer status: receiving.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Receiving"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"status_stopped": {
|
||
"comment": "Transfer status: stopped.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Stopped"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"storage_calculating": {
|
||
"comment": "Settings > Storage: placeholder while a size is being calculated.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Calculating…"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"storage_delete_transfers": {
|
||
"comment": "Settings > Storage: button to delete all transfer records.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Delete all transfers"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"storage_delete_transfers_description": {
|
||
"comment": "Settings > Storage: confirmation body for deleting all transfer records.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "This clears all sent and received transfer records from your history. Your received files are not deleted. Note: the transfer engine keeps its stored content, so Transfer data may not decrease. This can’t be undone."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"storage_deleting": {
|
||
"comment": "Settings > Storage: progress label while transfers are being deleted.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Deleting…"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"storage_footer": {
|
||
"comment": "Settings > Storage: footer explaining how storage is managed.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Transfer data is managed by the transfer engine — your history plus the content of files you’ve shared. The button below clears your transfer records; the engine keeps its stored content, so this value may not drop. Received files are your downloaded files and are never deleted here."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"storage_received_files": {
|
||
"comment": "Settings > Storage: label for the received-files size row.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Received files"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"storage_temporary": {
|
||
"comment": "Settings > Storage: label for the temporary-files size row.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Temporary files"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"storage_title": {
|
||
"comment": "Settings > Storage: section title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Storage"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"storage_total": {
|
||
"comment": "Settings > Storage: label for the total-size row.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Total"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"storage_transfer_data": {
|
||
"comment": "Settings > Storage: label for the transfer-engine data size row.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Transfer data"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"storage_transfers_deleted": {
|
||
"comment": "Settings > Storage: toast confirming all transfers were deleted.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "All transfers deleted"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_activity_description": {
|
||
"comment": "Transfer details: description under the Activity section.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "See important updates for this transfer"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_activity_title": {
|
||
"comment": "Transfer details: Activity section title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Activity"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_delete_description": {
|
||
"comment": "Transfer details: confirmation body for deleting a transfer. {arg1} = transfer name.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "“%1$@” will stop being shared and its transfer history will be removed from this device."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_delete_title": {
|
||
"comment": "Transfer details: confirmation title for deleting a transfer.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Delete transfer?"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_deleted": {
|
||
"comment": "Transfer details: toast confirming a transfer was deleted.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Transfer deleted."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_deleting": {
|
||
"comment": "Transfer details: progress label while a transfer is being deleted.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Deleting…"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_details_title": {
|
||
"comment": "Transfer details: screen title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Transfer details"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_event_approved": {
|
||
"comment": "Transfer activity event: a receiver's access was approved.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Receiver access approved"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_event_completed": {
|
||
"comment": "Transfer activity event: a receiver completed the transfer.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "A receiver completed the transfer"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_event_connecting": {
|
||
"comment": "Transfer activity event: connecting to the sender.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Connecting to sender"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_event_downloading": {
|
||
"comment": "Transfer activity event: downloading.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Downloading"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_event_failed": {
|
||
"comment": "Transfer activity event: the transfer hit a problem.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "The transfer encountered a problem"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_event_preparing": {
|
||
"comment": "Transfer activity event: preparing the transfer.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Preparing your transfer"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_event_ready": {
|
||
"comment": "Transfer activity event: ready to share.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Ready to share"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_event_refused": {
|
||
"comment": "Transfer activity event: a receiver's access was refused.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Receiver access refused"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_event_requested": {
|
||
"comment": "Transfer activity event: a receiver requested access.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "A receiver requested access"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_event_saving": {
|
||
"comment": "Transfer activity event: saving received files.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Saving"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_event_stopped": {
|
||
"comment": "Transfer activity event: sharing was stopped.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Sharing stopped"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_event_updated": {
|
||
"comment": "Transfer activity event: the transfer was updated.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Transfer updated"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_file_count": {
|
||
"comment": "Transfer subtitle: file count with pluralization. {count} = number of files.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"variations": {
|
||
"plural": {
|
||
"one": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "%1$d file"
|
||
}
|
||
},
|
||
"other": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "%1$d files"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_invitation_saved": {
|
||
"comment": "Transfer share: toast confirming the invitation file was saved.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Invitation saved."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_nearby_device": {
|
||
"comment": "Transfer share/receivers: label for a nearby device.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Nearby device"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_nfc_unavailable": {
|
||
"comment": "Transfer share: message when NFC writing isn't available on the device.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "NFC tag writing is not available on this device."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_nfc_waiting": {
|
||
"comment": "Transfer share: prompt while waiting to write an NFC tag.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Hold your device near a writable NFC tag."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_nfc_written": {
|
||
"comment": "Transfer share: confirmation the invitation was written to the NFC tag.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Invitation written to the NFC tag."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_no_activity": {
|
||
"comment": "Transfer details: empty state for the Activity section.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "There is no activity to show yet."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_no_receivers": {
|
||
"comment": "Transfer details: empty state for the Receivers section.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Nobody has requested this transfer yet."
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_receiver_accepted": {
|
||
"comment": "Receiver status: approved, waiting for the download to complete.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Approved — waiting for completion"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_receiver_completed": {
|
||
"comment": "Receiver status: received successfully.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Received successfully"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_receiver_expired": {
|
||
"comment": "Receiver status: the request expired.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Request expired"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_receiver_refused": {
|
||
"comment": "Receiver status: the request was refused.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Request refused"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_receiver_requested": {
|
||
"comment": "Receiver status: waiting for the sender's approval.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Waiting for your approval"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_receiver_unknown": {
|
||
"comment": "Receiver status: status unavailable/unknown.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Status unavailable"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_receivers_completed_count": {
|
||
"comment": "Receivers summary: how many receivers completed. {count} = completed receivers.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "%1$d completed"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_receivers_description": {
|
||
"comment": "Transfer details: description under the Receivers section.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Requests, approvals, and completed deliveries"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_receivers_pending": {
|
||
"comment": "Receivers summary: how many requests are waiting. {count} = pending receivers.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "%1$d waiting"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_receivers_title": {
|
||
"comment": "Transfer details: Receivers section title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Receivers"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_scan_qr": {
|
||
"comment": "Transfer share: caption under the QR code.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Scan with VniDrop to receive this transfer"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_share_description": {
|
||
"comment": "Transfer details: description under the Share section.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "QR code, invitation file, and nearby options"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"transfer_share_title": {
|
||
"comment": "Transfer details: Share section title.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Share"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"value_unavailable": {
|
||
"comment": "Placeholder shown when a device-info or metadata value can't be read.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "Not available"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"version_title": {
|
||
"comment": "Device information / Settings row: app version label.",
|
||
"extractionState": "manual",
|
||
"localizations": {
|
||
"en": {
|
||
"stringUnit": {
|
||
"state": "translated",
|
||
"value": "App version"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"version": "1.0"
|
||
}
|