|
265 | 265 | <string name="settings__localization__language_pack_extension_active_summary">{active}/{total} matching current keyboard languages; {kind} pack loads only for active matching subtypes.</string> |
266 | 266 | <string name="settings__localization__language_pack_extension_standby_summary">0/{total} matching current keyboard languages; {kind} pack stays unloaded until you add or switch to a matching subtype.</string> |
267 | 267 | <string name="settings__localization__language_pack_extension_unavailable_summary">{active}/{total} matching current keyboard languages, but the {kind} table data is unavailable. Candidates fail closed until you reinstall or replace this pack.</string> |
268 | | - <string name="settings__localization__language_pack_extension_metadata_summary">{total} component(s); generic pack is visible in Settings and ignored by Han shape-based startup loading.</string> |
| 268 | + <plurals name="settings__localization__language_pack_extension_metadata_summary"> |
| 269 | + <item quantity="one">{total} component; generic pack is visible in Settings and ignored by Han shape-based startup loading.</item> |
| 270 | + <item quantity="other">{total} components; generic pack is visible in Settings and ignored by Han shape-based startup loading.</item> |
| 271 | + </plurals> |
269 | 272 | <string name="settings__localization__language_pack_component_active_summary">{locale} — active for a current keyboard language</string> |
270 | 273 | <string name="settings__localization__language_pack_component_standby_summary">{locale} — installed, not active for current keyboard languages</string> |
271 | 274 | <string name="settings__localization__language_pack_delete_in_progress">Deleting language pack</string> |
|
1001 | 1004 | <string name="settings__privacy_posture__addons_summary" comment="Preference summary. Placeholders show granted consent surfaces, total surfaces, pinned cert count, and disabled daemon count.">Granted: {granted}/{surfaces}. Signing pins: {pins}. Disabled MCP daemons: {disabled}.</string> |
1002 | 1005 | <string name="settings__privacy_posture__voice_title" comment="Preference title">Voice provider</string> |
1003 | 1006 | <string name="settings__privacy_posture__voice_ready" comment="Preference summary. Placeholder shows provider label.">Ready: {provider}. SwiftFloris only hands off when you tap voice input.</string> |
1004 | | - <string name="settings__privacy_posture__voice_installed" comment="Preference summary. Placeholder shows installed provider count.">{count} external voice provider(s) installed, but setup is incomplete.</string> |
| 1007 | + <plurals name="settings__privacy_posture__voice_installed" comment="Preference summary. Placeholder shows installed provider count."> |
| 1008 | + <item quantity="one">{count} external voice provider installed, but setup is incomplete.</item> |
| 1009 | + <item quantity="other">{count} external voice providers installed, but setup is incomplete.</item> |
| 1010 | + </plurals> |
1005 | 1011 | <string name="settings__privacy_posture__voice_missing" comment="Preference summary when no known provider is installed">No supported external voice provider is ready.</string> |
1006 | 1012 | <string name="settings__privacy_posture__export_policy_title" comment="Preference title">Export policy</string> |
1007 | 1013 | <string name="settings__privacy_posture__export_policy_summary" comment="Preference summary">Backups, dictionaries, raw typing traces, and audit logs leave app-private storage only when you explicitly copy, share, or save them. Raw trace files are typed-content artifacts.</string> |
|
1515 | 1521 | <string name="backup_and_restore__restore__failure_recovery">Restore stopped before all selected data could be imported. Review the archive, select only the needed sections, or retry from a newer backup. Details: {error_message}</string> |
1516 | 1522 | <string name="backup_and_restore__restore__unknown_error">Unknown error</string> |
1517 | 1523 | <string name="backup_and_restore__restore__partial_failure_title">Restore finished with warnings</string> |
1518 | | - <string name="backup_and_restore__restore__partial_failure_summary">Restored {restored_count} section(s). {problem_count} selected section(s) were missing from the archive or could not be restored. Your recovery path is to review the selected archive and retry, or restore from a newer backup.</string> |
| 1524 | + <plurals name="backup_and_restore__restore__partial_restored_count"> |
| 1525 | + <item quantity="one">Restored 1 section</item> |
| 1526 | + <item quantity="other">Restored {restored_count} sections</item> |
| 1527 | + </plurals> |
| 1528 | + <plurals name="backup_and_restore__restore__partial_problem_count"> |
| 1529 | + <item quantity="one">1 selected section was missing from the archive or could not be restored</item> |
| 1530 | + <item quantity="other">{problem_count} selected sections were missing from the archive or could not be restored</item> |
| 1531 | + </plurals> |
| 1532 | + <string name="backup_and_restore__restore__partial_failure_recovery">Your recovery path is to review the selected archive and retry, or restore from a newer backup.</string> |
1519 | 1533 | <string name="backup_and_restore__restore__partial_failure_toast">Restore finished with warnings.</string> |
1520 | 1534 | <string name="backup_and_restore__restore__empty_title">Select a backup archive</string> |
1521 | 1535 | <string name="backup_and_restore__restore__empty_message">Choose a SwiftFloris backup ZIP to inspect its metadata and select what to restore.</string> |
|
1801 | 1815 | <string name="ext__import__review_title">Review before importing</string> |
1802 | 1816 | <string name="ext__import__review_message_all_ready">All selected files look ready. Review the details, then import when you are comfortable.</string> |
1803 | 1817 | <string name="ext__import__review_message_with_skips">Compatible files can be imported. Skipped files remain unchanged, so review them before continuing.</string> |
1804 | | - <string name="ext__import__review_message_with_actions">{new_count} new file(s), {update_count} update(s), and {skipped_count} skipped file(s) were found. Review the details, then import when you are comfortable.</string> |
| 1818 | + <plurals name="ext__import__review_new_files"> |
| 1819 | + <item quantity="one">1 new file</item> |
| 1820 | + <item quantity="other">{new_count} new files</item> |
| 1821 | + </plurals> |
| 1822 | + <plurals name="ext__import__review_updates"> |
| 1823 | + <item quantity="one">1 update</item> |
| 1824 | + <item quantity="other">{update_count} updates</item> |
| 1825 | + </plurals> |
| 1826 | + <plurals name="ext__import__review_skipped_files"> |
| 1827 | + <item quantity="one">1 skipped file</item> |
| 1828 | + <item quantity="other">{skipped_count} skipped files</item> |
| 1829 | + </plurals> |
| 1830 | + <string name="ext__import__review_message_with_actions_suffix">were found. Review the details, then import when you are comfortable.</string> |
1805 | 1831 | <string name="ext__import__none_ready_title">No importable files</string> |
1806 | 1832 | <string name="ext__import__none_ready_message">Choose a supported SwiftFloris extension archive and try again.</string> |
1807 | 1833 | <string name="ext__import__error_title">Could not prepare import</string> |
|
2252 | 2278 | <string name="settings__mcp__status_no_daemons" comment="MCP status row title when no daemons are installed">No MCP daemons installed</string> |
2253 | 2279 | <string name="settings__mcp__status_no_daemons_summary" comment="MCP status row summary when no daemons are installed">Install a sibling app that advertises an MCP service; SwiftFloris binds only co-signed or explicitly trusted daemons. The bridge is local-only and never opens a network connection.</string> |
2254 | 2280 | <string name="settings__mcp__status_bound_title" comment="MCP status row title when daemons are bound">MCP bridge active</string> |
2255 | | - <string name="settings__mcp__status_bound_summary" comment="MCP status row summary when daemons are bound; {count} = number">Currently bound to {count} daemon(s). The bridge is local-only and never opens a network connection.</string> |
| 2281 | + <plurals name="settings__mcp__status_bound_summary" comment="MCP status row summary when daemons are bound; {count} = active/total ratio"> |
| 2282 | + <item quantity="one">Currently bound to {count} daemon. The bridge is local-only and never opens a network connection.</item> |
| 2283 | + <item quantity="other">Currently bound to {count} daemons. The bridge is local-only and never opens a network connection.</item> |
| 2284 | + </plurals> |
2256 | 2285 | <string name="settings__mcp__daemon_protocol" comment="MCP daemon row protocol-version fragment; {version} = integer">Protocol v{version}</string> |
2257 | | - <string name="settings__mcp__daemon_tools_count" comment="MCP daemon row tools-count fragment; {count} = integer">{count} tool(s)</string> |
| 2286 | + <plurals name="settings__mcp__daemon_tools_count" comment="MCP daemon row tools-count fragment; {count} = integer"> |
| 2287 | + <item quantity="one">{count} tool</item> |
| 2288 | + <item quantity="other">{count} tools</item> |
| 2289 | + </plurals> |
2258 | 2290 | <string name="settings__mcp__rescan" comment="MCP settings action title">Scan MCP daemons</string> |
2259 | 2291 | <string name="settings__mcp__rescan_running" comment="MCP settings action title while scan is running">Scanning MCP daemons…</string> |
2260 | 2292 | <string name="settings__mcp__rescan_summary" comment="MCP settings action summary">Refresh installed daemon trust state. Newly trusted daemons bind the next time the keyboard service starts.</string> |
|
0 commit comments