fix(shared): i18n coverage and contract updates

- keyPath field no longer tells users to enter a server-side path
- settings.highlight.builtin.* notes, timeout messages in four languages
- prototype-safe dictionary lookup; language as a render-time dependency
- Partial<AppSettings> saveSettings contract, update:stateGet channel
This commit is contained in:
Bill committed 2026-09-20 20:27:03 +08:00
1 parent 23fa566fa9
commit c0342db1e8
16 files changed
+100 -9

No files matched your search

+3 -1
View File
@@ -13,7 +13,7 @@ const main: Record<string, string> = {
'main.tray.closeDetail': 'Minimizing to tray keeps your terminal sessions running.',
'main.tray.rememberChoice': 'Remember my choice, never ask again',
'main.updater.feedFailed': 'Domestic feed: {gitea}; GitHub: {github}',
'main.updater.feedFailed': 'Gitea feed: {gitea}; GitHub: {github}',
'main.ssh.connectTimeout': 'Connection timed out ({host}:{port})',
'main.ssh.saveFingerprintFailed': 'Failed to save the host fingerprint: {detail}',
@@ -27,6 +27,7 @@ const main: Record<string, string> = {
'main.sftp.deleteFailed': 'Delete failed: {detail}',
'main.sftp.invalidMode': 'Invalid permission value: {mode}',
'main.sftp.invalidUidGid': 'Invalid uid/gid',
'main.sftp.commandTimeout': 'Command timed out',
'main.sftp.commandExitCode': 'Command exited with code {code}',
'main.sftp.cancelled': 'Cancelled',
@@ -47,6 +48,7 @@ const main: Record<string, string> = {
'main.sysinfo.sessionGone': 'SSH session is missing or disconnected',
'main.sysinfo.execFailed': 'SSH exec failed',
'main.sysinfo.pollTimeout': 'Monitoring command timed out',
'main.sysinfo.parseFailed': 'Parse failed: {message}',
'main.pty.serviceNotReady': 'SSH session service is not initialised yet',
'main.pty.missingConnectionId': 'SSH session is missing its connectionId',
+16
View File
@@ -98,6 +98,11 @@ const settings: Record<string, string> = {
'Together with the global key this shows or hides the window from anywhere; if registration fails (a conflict with another app) it simply has no effect and the app reports no error.',
'settings.system.shortcutRecording': 'Press the keys…',
'settings.system.shortcutPlaceholder': 'Click and press a shortcut, leave empty to disable',
'settings.system.shortcutConflict':
'This shortcut is already used by the app (Ctrl+= / Ctrl+- / Ctrl+0 / Ctrl+PgUp / Ctrl+PgDn). Please choose another.',
'settings.resetTerminal': 'Reset terminal settings',
'settings.resetTerminalTitle': 'Reset terminal settings?',
'settings.resetTerminalDesc': 'All terminal settings — font, cursor, rendering and theme — will be restored to defaults.',
'settings.highlight.alert':
'Custom highlighting improves readability at a small performance cost. Rules are applied in priority order. PS: colors are injected as text is written to the terminal, so existing scrollback is unaffected',
'settings.highlight.enabled': 'Enabled',
@@ -121,6 +126,17 @@ const settings: Record<string, string> = {
'settings.highlight.resetOk': 'Restore',
'settings.highlight.createTitle': 'New highlight rule',
'settings.highlight.editTitle': 'Edit highlight rule',
'settings.highlight.builtin.perm': 'Linux permissions and user/group',
'settings.highlight.builtin.path': 'Linux file paths',
'settings.highlight.builtin.shellkw': 'Shell keywords and control flow',
'settings.highlight.builtin.okstate': 'Success states',
'settings.highlight.builtin.badstate': 'Error/warning states',
'settings.highlight.builtin.quoted': 'Strings and quotes',
'settings.highlight.builtin.envvar': 'Environment variables and arguments',
'settings.highlight.builtin.ipv4': 'Network and IP addresses',
'settings.highlight.builtin.datetime': 'Time and date',
'settings.highlight.builtin.numbers': 'Numbers and counts',
'settings.highlight.builtin.url': 'Web links',
'settings.theme.accent': 'Tab accent color',
'settings.theme.accentDesc': 'Accent color for the active tab border, the sidebar indicator, and SSH badges',
'settings.theme.customBadge': 'Custom',
+3 -1
View File
@@ -13,7 +13,7 @@ const ssh: Record<string, string> = {
'ssh.fields.askPasswordHint':
'Prompts for the password on every connection instead of using the saved one',
'ssh.fields.passwordPlaceholder': 'Leave empty to keep the saved password',
'ssh.fields.keyPath': 'Private key path (path on the server, optional)',
'ssh.fields.keyPath': 'Private key file path (on this computer, optional)',
'ssh.fields.keyContent': 'Private key content',
'ssh.fields.keyContentPlaceholder':
'Paste the private key; leave empty to use the path above (leave empty while editing to keep the saved key)',
@@ -100,6 +100,8 @@ const ssh: Record<string, string> = {
'ssh.file.up': 'Parent folder',
'ssh.file.refresh': 'Refresh',
'ssh.file.uploadFile': 'Upload files',
'ssh.file.overwriteTitle': 'Overwrite existing file?',
'ssh.file.overwriteDesc': 'A file with the same name exists in the target directory; uploading will overwrite its contents.',
'ssh.file.downloadSelected': 'Download selection',
'ssh.file.permOwner': 'Permissions / owner',
'ssh.file.open': 'Open',