feat: multi-language interface (zh-CN/zh-TW/en/ja), multilingual offline changelog, settings robustness

i18n
- shared/i18n: dependency-free t() with flat per-namespace dictionaries
  (common/settings/workspace/terminal/ssh/panels/main), zh-CN fallback
- language picker in Settings -> System; antd ConfigProvider locale follows it
- main process tracks the language too: tray menu, close prompt, ssh/sftp/
  zmodem errors and the log TUI marker are translated; tray rebuilds on change

changelog
- CHANGELOG.md (zh-CN canonical) + .zh-TW/.en/.ja, bundled via ?raw and read
  per interface language with per-version fallback to zh-CN (no network)
- sync-changelog.cjs merges RELEASE_NOTES[.<lang>].md per release; release.cjs
  refuses to publish without a zh-CN entry for the version

settings robustness
- closeAction 'ask' survives the sanitizer (was silently coerced to 'tray',
  which made the 'ask every time' option dead)
- highlight rules are repaired instead of dropped: string priority, 0/1
  enabled, missing fg colour; unknown fields preserved
- load-time warnings are written to settings-warnings.log (deduped, capped)

terminal/UI
- configurable terminal toolbar: open working directory (default on), session
  log recording (off), open logs folder (off)
- global shortcut field records key combos (modifier or F-key required)
- input suggestions + command history default to off, with a one-time reset
  migration for existing installs
- settings dialog scrolling fixed (antd v6 renamed the tabs container), theme
  gallery nested scrollbar removed, joined segmented pickers with readable
  selected-state text

tests: settings-store.mjs (15 checks) added; commands-store.mjs updated for
the new off-by-default history setting
This commit is contained in:
Bill committed 2026-09-20 14:22:29 +08:00
1 parent 34094d607b
commit 4c6a29ef28
82 files changed
+3342 -608

No files matched your search

+150
View File
@@ -0,0 +1,150 @@
/** 名前空間: settings(設定ダイアログ: フォント/カーソル/描画/ハイライト/テーマ/システム/情報)。担当: 設定画面。 */
const settings: Record<string, string> = {
'settings.title': '設定',
'settings.tabs.font': 'フォント',
'settings.tabs.cursor': 'カーソルとスクロール',
'settings.tabs.render': '描画と動作',
'settings.tabs.highlight': 'ハイライト',
'settings.tabs.theme': 'テーマ',
'settings.tabs.system': 'システム',
'settings.tabs.about': 'このアプリについて',
'settings.resizeHandle': 'ドラッグしてサイズ変更',
'settings.preview': 'プレビュー',
'settings.deleteConfirmDesc': '削除すると元に戻せません。続けますか?',
'settings.color.foreground': '前景',
'settings.color.background': '背景',
'settings.color.cursor': 'カーソル',
'settings.color.selection': '選択範囲',
'settings.font.label': 'フォント',
'settings.font.desc': '組み込みの既定フォント、またはシステムの等幅フォント',
'settings.font.placeholder': 'フォントを選択',
'settings.font.default': 'デフォルト',
'settings.font.size': '文字サイズ',
'settings.font.sizeDesc': 'ターミナル文字のピクセルサイズ',
'settings.font.weight': '文字の太さ',
'settings.font.weightDesc': '400 が標準、700 が太字',
'settings.font.boldWeight': '太字の太さ',
'settings.font.boldWeightDesc': '太字テキストに使う太さ',
'settings.font.letterSpacing': '文字間隔',
'settings.font.letterSpacingDesc': '文字どうしの水平方向の間隔',
'settings.font.lineHeight': '行の高さ',
'settings.font.lineHeightDesc': '隣り合う行の垂直方向の距離',
'settings.cursor.blink': 'カーソルの点滅',
'settings.cursor.blinkDesc': 'カーソルを定期的に点滅させるかどうか',
'settings.cursor.style': 'カーソルの形状',
'settings.cursor.styleDesc': 'カーソルの表示形状',
'settings.cursor.inactiveStyle': '非アクティブ時のカーソル形状',
'settings.cursor.inactiveStyleDesc': 'ウィンドウがフォーカスを失ったときのカーソル形状',
'settings.cursor.scrollback': 'スクロールバック',
'settings.cursor.scrollbackDesc': 'さかのぼって表示できる行数',
'settings.cursorStyle.bar': '縦線 (bar)',
'settings.cursorStyle.block': 'ブロック (block)',
'settings.cursorStyle.underline': '下線 (underline)',
'settings.cursorStyle.outline': '輪郭 (outline)',
'settings.cursorStyle.none': 'なし (none)',
'settings.rendererMode.auto': '自動',
'settings.rendererMode.autoHint': 'WebGL による高速化を優先し、失敗したら DOM 描画に自動で切り替えます',
'settings.rendererMode.webgl': '高性能 WebGL',
'settings.rendererMode.webglHint': 'GPU 描画を強制します。高リフレッシュレートや大量行のスクロールに適します',
'settings.rendererMode.dom': '互換 DOM',
'settings.rendererMode.domHint': 'CPU のみで描画し、互換性を最優先します。GPU がない環境やリモートデスクトップに適します',
'settings.render.modeLabel': '描画モード',
'settings.render.modeHint': 'ターミナルセルの描画を高速化する方式。変更はすべてのターミナルに適用されます',
'settings.render.autoWrap': '自動折り返し',
'settings.render.autoWrapDesc': '幅を超えた行を自動で折り返します',
'settings.render.copyOnSelect': '選択時にコピー',
'settings.render.copyOnSelectDesc': 'マウスで文字を選択すると自動でコピーします',
'settings.render.pasteRiskConfirm': '貼り付け前の確認',
'settings.render.pasteRiskConfirmDesc':
'複数行(または極端に長い 1 行)を貼り付ける前に確認します。1 行はそのまま貼り付けます',
'settings.render.suggest': '入力候補',
'settings.render.suggestDesc':
'入力中にコマンド候補を表示します。Tab で確定、Enter は常にそのまま実行します',
'settings.render.history': 'コマンド履歴を記録',
'settings.render.historyDesc': 'オフにすると新しいコマンドを記録しません。保存済みの履歴は残ります',
'settings.render.historyLimit': '履歴の上限件数',
'settings.render.historyLimitDesc': 'コマンド履歴の最大件数。重複したコマンドは 1 件として記録します',
'settings.render.recButton': 'ターミナルツールバー · 記録',
'settings.render.recButtonDesc': '右上に「セッションログを記録」ボタンを表示します',
'settings.render.openLogsButton': 'ターミナルツールバー · ログフォルダーを開く',
'settings.render.openLogsButtonDesc': '右上に「ログフォルダーを開く」ボタンを表示します',
'settings.render.openCwdButton': 'ターミナルツールバー · ワークスペースフォルダーを開く',
'settings.render.openCwdButtonDesc':
'右上に「現在のフォルダーを開く」ボタンを表示します(SSH セッションでは非表示。フォルダーは cd に追従するため、shell 統合を有効にするか cd コマンドを使ってください)',
'settings.system.launchAtLogin': 'スタートアップ時に起動',
'settings.system.launchAtLoginDesc': 'OS の起動時に自動で起動します(開発モードでは開発版が登録されます)',
'settings.system.preventSleep': 'スリープを防止',
'settings.system.preventSleepDesc':
'オンにすると OpenTerminal がシステムの自動スリープを防ぎます。オフにすると OS の設定どおりにスリープします',
'settings.system.restoreSession': '起動時に前回のセッションを復元',
'settings.system.restoreSessionDesc':
'次回の起動で分割レイアウトを復元し、各ターミナルを前回のディレクトリに戻します。オフにすると毎回 1 つのターミナルで起動します',
'settings.system.shellIntegration': 'Shell 統合',
'settings.system.shellIntegrationDesc':
'shell に作業ディレクトリを報告させ(OSC 7)、パスの記憶をより正確にします(スクリプト内の cd も含みます)。プロンプトをラップするため、プロンプトの表示が崩れる場合はオフにしてください',
'settings.system.closeAction': '閉じるボタンの動作',
'settings.system.closeActionDesc':
'ウィンドウの閉じるボタンを押したときの動作。タスクトレイに最小化した後は、トレイアイコンの右クリックメニューから終了できます',
'settings.system.closeActionTray': 'タスクトレイに最小化',
'settings.system.closeActionExit': 'そのまま終了',
'settings.system.closeActionAsk': '毎回確認する',
'settings.system.globalShortcut': 'グローバル呼び出しショートカット',
'settings.system.globalShortcutDesc':
'入力欄をクリックしてからキーの組み合わせを押します。Esc で取り消し、Backspace でクリアして無効化します',
'settings.system.globalShortcutHint':
'グローバルキーと組み合わせると、どの画面からでもウィンドウを呼び出し/非表示にできます。登録に失敗した場合(他のソフトとの競合)は効果がなく、アプリにエラーは表示されません。',
'settings.system.shortcutRecording': 'キーを押してください…',
'settings.system.shortcutPlaceholder': 'クリックしてショートカットを押す。空欄で無効',
'settings.highlight.alert':
'独自のハイライトは見やすさを高めますが、わずかに性能を消費します。ルールは優先順に適用されます。PS: ハイライトはターミナルへの書き込み時に色を注入するため、既存のスクロールバックには反映されません',
'settings.highlight.enabled': '有効',
'settings.highlight.pattern': '正規表現',
'settings.highlight.patternPlaceholder': '例: \\b(ERROR|FAILED)\\b',
'settings.highlight.invalidRegex': '正規表現が無効です',
'settings.highlight.priority': '優先度',
'settings.highlight.priorityHint': '値が小さいほど先に適用されます',
'settings.highlight.color': '色',
'settings.highlight.clearBg': 'クリア',
'settings.highlight.addBg': '追加',
'settings.highlight.palette': 'パレット',
'settings.highlight.note': 'メモ',
'settings.highlight.notePlaceholder': 'ルールの説明(任意)',
'settings.highlight.actions': '操作',
'settings.highlight.addRule': '+ ルールを追加',
'settings.highlight.empty': 'ハイライトルールがありません。「+ ルールを追加」から作成できます',
'settings.highlight.deleteTitle': 'ハイライトルールを削除',
'settings.highlight.resetTitle': '既定のハイライトルールに戻す',
'settings.highlight.resetDesc': '現在のすべてのルールを組み込みのプリセットに置き換えます。元に戻せません。',
'settings.highlight.resetOk': '元に戻す',
'settings.highlight.createTitle': 'ハイライトルールを作成',
'settings.highlight.editTitle': 'ハイライトルールを編集',
'settings.theme.accent': 'タブのアクセントカラー',
'settings.theme.accentDesc': 'アクティブなタブの枠線、サイドバーのインジケーター、SSH バッジのアクセントカラー',
'settings.theme.customBadge': 'カスタム',
'settings.theme.deleteTitle': 'カスタムテーマを削除',
'settings.theme.create': '新しいテーマ',
'settings.theme.editTitle': 'テーマを編集',
'settings.themeEditor.name': '名前',
'settings.themeEditor.namePlaceholder': 'テーマ名',
'settings.themeEditor.copySuffix': '(コピー)',
'settings.about.currentVersion': '現在のバージョン',
'settings.about.statusIdle': 'クリックして更新を確認',
'settings.about.statusChecking': '更新を確認しています…',
'settings.about.statusAvailable': '新しいバージョンがあります',
'settings.about.statusLatest': '最新バージョンです',
'settings.about.statusDownloading': 'ダウンロードしています…',
'settings.about.statusDownloaded': 'ダウンロード完了。再起動してインストールできます',
'settings.about.statusError': '確認に失敗しました',
'settings.about.statusDev': '開発モードでは更新を確認できません',
'settings.about.channelStable': '安定版チャンネル',
'settings.about.autoCheck': '起動時に自動で確認',
'settings.about.download': '更新をダウンロード',
'settings.about.downloadGithub': '(GitHub ソース)',
'settings.about.install': '再起動してインストール',
'settings.about.check': '更新を確認',
'settings.about.checkingButton': '確認中',
'settings.about.changelog': '更新履歴',
'settings.about.changelogEmpty': '更新履歴はありません'
}
export default settings