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

+17
View File
@@ -0,0 +1,17 @@
/** 名前空間: common(i18n 基盤、汎用ボタン・状態)。担当: i18n 基盤。 */
const common: Record<string, string> = {
'common.ok': 'OK',
'common.cancel': 'キャンセル',
'common.close': '閉じる',
'common.save': '保存',
'common.delete': '削除',
'common.edit': '編集',
'common.add': '追加',
'common.copy': 'コピー',
'common.paste': '貼り付け',
'common.reset': '既定値に戻す',
'common.language': '表示言語',
'common.languageDesc': '切り替えるとすぐに表示言語が反映され、保存後は永続化されます。'
}
export default common
+19
View File
@@ -0,0 +1,19 @@
import common from './common'
import settings from './settings'
import workspace from './workspace'
import terminal from './terminal'
import ssh from './ssh'
import panels from './panels'
import main from './main'
/** 日本語の文言。名前空間ファイルは領域ごとに分担して保守します。詳細は
* src/shared/i18n/index.ts の担当表を参照。 */
export default {
...common,
...settings,
...workspace,
...terminal,
...ssh,
...panels,
...main
}
+56
View File
@@ -0,0 +1,56 @@
/** 名前空間: main(メインプロセスの文言: トレイ、終了確認、アップデータ)。担当: メインプロセス。 */
const main: Record<string, string> = {
'main.tray.showWindow': 'メインウィンドウを表示',
'main.tray.closeAction': '閉じるボタンの動作',
'main.tray.askEveryTime': '毎回確認する',
'main.tray.minimizeToTray': 'トレイに最小化',
'main.tray.exitDirectly': '直接終了',
'main.tray.exit': '終了',
'main.tray.balloonTitle': 'トレイに最小化しました',
'main.tray.balloonContent': 'ターミナルセッションはバックグラウンドで実行中です。トレイアイコンをクリックするとウィンドウを復元できます。',
'main.tray.closeTitle': 'OpenTerminal を終了',
'main.tray.closeMessage': 'トレイに最小化しますか、それとも終了しますか?',
'main.tray.closeDetail': 'トレイに最小化すると、ターミナルセッションは実行を続けます。',
'main.tray.rememberChoice': '選択を記憶して今後確認しない',
'main.updater.feedFailed': '国内フィード: {gitea};GitHub: {github}',
'main.ssh.connectTimeout': '接続がタイムアウトしました ({host}:{port})',
'main.ssh.saveFingerprintFailed': 'ホスト鍵のフィンガープリントを保存できませんでした: {detail}',
'main.ssh.hostKeyRejected': 'ユーザーがホスト鍵を拒否しました',
'main.ssh.connectFailed': '接続に失敗しました {host}:{port}: {detail}',
'main.ssh.shellOpenFailed': 'SSH シェルを開けません ({host}:{port}): {detail}',
'main.ssh.initFailed': 'SSH 接続の初期化に失敗しました ({host}:{port}): {detail}',
'main.ssh.readKeyFailed': '秘密鍵ファイルを読み取れません {path}: {detail}',
'main.sftp.sessionGone': 'SSH セッションが存在しないか、切断されています',
'main.sftp.deleteFailed': '削除に失敗しました: {detail}',
'main.sftp.invalidMode': '不正なパーミッション値: {mode}',
'main.sftp.invalidUidGid': '不正な uid/gid',
'main.sftp.commandExitCode': 'コマンドの終了コード {code}',
'main.sftp.cancelled': 'キャンセルしました',
'main.zmodem.transferFailed': '転送に失敗しました',
'main.zmodem.transferTimeout': '転送がタイムアウトしました',
'main.zmodem.sendFailed': '送信に失敗しました',
'main.zmodem.uploadFailed': 'アップロードに失敗しました',
'main.zmodem.receiveFailed': '受信に失敗しました',
'main.zmodem.abnormal': 'ZMODEM 転送エラー',
'main.zmodem.cancelled': 'キャンセルしました',
'main.zmodem.offerTimedOut': 'ファイルが選択されなかったためキャンセルしました',
'main.zmodem.sessionInvalid': 'セッションが無効になりました',
'main.zmodem.sessionCreateFailed': 'ZMODEM セッションを確立できません',
'main.zmodem.noSaveDir': '保存先ディレクトリが指定されていません',
'main.zmodem.noFiles': 'ファイルが選択されていません',
'main.ipc.connectionMissing': '接続ブックマークが見つかりません ({id})',
'main.sysinfo.sessionGone': 'SSH セッションが存在しないか切断されています',
'main.sysinfo.execFailed': 'SSH exec に失敗しました',
'main.sysinfo.parseFailed': '解析に失敗しました: {message}',
'main.pty.serviceNotReady': 'SSH セッションサービスが未初期化です',
'main.pty.missingConnectionId': 'SSH セッションに connectionId がありません',
'main.log.tuiOmitted': '全画面 (TUI) 出力を省略しました'
}
export default main
+36
View File
@@ -0,0 +1,36 @@
/** 名前空間: panels(コマンドパネル、セッションログパネル、転送パネル)。担当: パネル。 */
const panels: Record<string, string> = {
// コマンドパネル
'panels.commands.sectionTitle': 'コマンド',
'panels.commands.target': '送信先',
'panels.commands.targetSsh': 'SSH サーバー',
'panels.commands.targetTerminal': 'ターミナル',
'panels.commands.tabHistory': '履歴',
'panels.commands.tabLibrary': 'コマンドライブラリ',
'panels.commands.historyTitle': '履歴コマンド',
'panels.commands.clearTitle': 'すべてのコマンド履歴を消去しますか?',
'panels.commands.clear': '消去',
'panels.commands.noHistory': 'コマンド履歴はありません',
'panels.commands.loading': '読み込み中…',
'panels.commands.libraryTitle': 'コマンドライブラリ',
'panels.commands.libraryEmpty': 'コマンドライブラリは空です',
'panels.commands.add': 'コマンドを追加',
'panels.commands.name': '名前',
'panels.commands.optional': '(任意)',
'panels.commands.command': 'コマンド',
'panels.commands.commandPlaceholder': '例:ls -la',
'panels.commands.note': 'メモ',
'panels.commands.deleteTitle': 'このコマンドを削除しますか?',
'panels.commands.deleteAria': 'コマンドを削除',
// 転送パネル
'panels.transfer.failed': '転送に失敗しました',
'panels.transfer.cancelled': 'キャンセル済み',
'panels.transfer.done': '転送が完了しました',
'panels.transfer.uploading': 'アップロード中',
'panels.transfer.downloading': 'ダウンロード中',
'panels.transfer.zmodemUploading': 'ZMODEM アップロード中',
'panels.transfer.zmodemDownloading': 'ZMODEM ダウンロード中'
}
export default panels
+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
+152
View File
@@ -0,0 +1,152 @@
/** 名前空間: ssh(SSH 接続管理、ホストキー、ファイルパネル、zmodem、システム監視)。担当: SSH。 */
const ssh: Record<string, string> = {
// 認証方式 / シークレットの種類
'ssh.auth.password': 'パスワード',
'ssh.auth.privateKey': '秘密鍵',
'ssh.auth.agent': 'Agent',
'ssh.secret.passphrase': 'パスフレーズ',
// 接続ダイアログ: 認証関連フィールド
'ssh.fields.agentDesc':
'ローカルの SSH Agent に読み込み済みの鍵で認証します。本アプリ内に鍵を保存する必要はありません。',
'ssh.fields.askPasswordLabel': '接続時にパスワードを確認',
'ssh.fields.askPasswordHint':
'オンにすると毎回の接続でパスワード入力ダイアログを表示し、保存済みのパスワードを使いません',
'ssh.fields.passwordPlaceholder': '編集時に空欄のままにすると保存済みのパスワードを保持します',
'ssh.fields.keyPath': '秘密鍵のパス(サーバー上の秘密鍵のパス、省略可)',
'ssh.fields.keyContent': '秘密鍵の内容',
'ssh.fields.keyContentPlaceholder':
'秘密鍵の内容を貼り付けます。空欄の場合は上のパスを使用します(編集時に空欄のままにすると保存済みの秘密鍵を保持します)',
'ssh.fields.askPassphraseLabel': '接続時にパスフレーズを確認',
'ssh.fields.askPassphraseHint': 'オンにすると毎回の接続で秘密鍵のパスフレーズ入力を求めます',
'ssh.fields.passphrase': '秘密鍵のパスフレーズ',
'ssh.fields.passphrasePlaceholder':
'編集時に空欄のままにすると保存済みのパスフレーズを保持します',
// 接続ダイアログ
'ssh.dialog.titleEdit': '接続を編集',
'ssh.dialog.titleNew': '新規接続',
'ssh.dialog.saveFailed': '保存に失敗しました。入力を確認して再試行してください',
'ssh.dialog.name': '名前',
'ssh.dialog.nameRequired': '接続名を入力してください',
'ssh.dialog.namePlaceholder': '例:本番サーバー',
'ssh.dialog.group': 'グループ',
'ssh.dialog.groupPlaceholder':
'グループを選択または入力してください。空欄の場合は「デフォルト」に入ります',
'ssh.dialog.host': 'ホスト',
'ssh.dialog.hostRequired': 'ホストアドレスを入力してください',
'ssh.dialog.hostPlaceholder': '192.168.1.10 または example.com',
'ssh.dialog.port': 'ポート',
'ssh.dialog.portRange': 'ポートは 1〜65535 の範囲で指定してください',
'ssh.dialog.username': 'ユーザー名',
'ssh.dialog.usernameRequired': 'ユーザー名を入力してください',
'ssh.dialog.authMethod': '認証方式',
'ssh.dialog.savedSecret': '{kind}は保存済みです。空欄のままにすると現在の値を使用します',
'ssh.dialog.keepalive': 'Keepalive 間隔(秒)',
'ssh.dialog.keepaliveTooltip': '0 で keepalive を無効にします',
'ssh.dialog.keepaliveMin': '負の値は指定できません',
// 接続サイドバー
'ssh.sidebar.defaultGroup': 'デフォルト',
'ssh.sidebar.timeJustNow': 'たった今',
'ssh.sidebar.timeMinutesAgo': '{n} 分前',
'ssh.sidebar.timeHoursAgo': '{n} 時間前',
'ssh.sidebar.timeDaysAgo': '{n} 日前',
'ssh.sidebar.modeTerminal': 'ターミナルワークスペース',
'ssh.sidebar.modeSsh': 'SSH ワークスペース',
'ssh.sidebar.title': '接続',
'ssh.sidebar.newConnection': '新規接続',
'ssh.sidebar.sectionTerminals': 'ターミナル',
'ssh.sidebar.noLocalTerminals': '開いているローカルターミナルはありません',
'ssh.sidebar.local': 'ローカル',
'ssh.sidebar.sectionServers': 'SSH サーバー',
'ssh.sidebar.empty': '接続がありません。+ をクリックして作成',
'ssh.sidebar.loading': '読み込み中…',
'ssh.sidebar.recent': '最近のセッション',
'ssh.sidebar.dblClickConnect': '{host} にダブルクリックで接続',
'ssh.sidebar.deleteTitle': 'この接続を削除しますか?',
'ssh.sidebar.deleteDesc':
'削除した接続は復元できません。保存済みの鍵データも同時に削除されます。',
// ホストキーの確認
'ssh.hostKey.changedTitle': 'ホストのフィンガープリントが変更されました!',
'ssh.hostKey.unknownHost': '未知のホスト',
'ssh.hostKey.accept': '承認して接続',
'ssh.hostKey.reject': '拒否',
'ssh.hostKey.mitmTitle': '中間者攻撃の可能性があります',
'ssh.hostKey.mitmDesc':
'リモートホストの鍵フィンガープリントが以前の記録と一致しません。ご自身でサーバー鍵を変更していない場合、誰かがこのホストになりすましている可能性があります。',
'ssh.hostKey.firstConnect':
'このホストへの初回接続です。フィンガープリントはまだ記録されていません。',
'ssh.hostKey.target': 'ホスト:{target}',
'ssh.hostKey.fingerprint': 'フィンガープリント:{fingerprint}',
// SSH ワークスペース: ファイルパネル、ホストバッジ
'ssh.bottomPanel.resize': 'ファイルパネルの高さを調整',
'ssh.hostBadge.aria': 'SSH ホスト {label}',
// ZMODEM
'ssh.zmodem.done': 'ZMODEM 転送が完了しました',
'ssh.zmodem.failed': 'ZMODEM 転送に失敗しました:{message}',
'ssh.zmodem.unknownError': '不明なエラー',
'ssh.zmodem.titleReceive': 'ローカルにダウンロード',
'ssh.zmodem.titleSend': 'サーバーへアップロード',
'ssh.zmodem.pickDir': '保存先フォルダを選択',
'ssh.zmodem.pickFiles': 'ファイルを選択',
'ssh.zmodem.receiveDesc':
'sz のダウンロード要求を検出しました(リモートがファイルを送信中)。ローカルの保存先フォルダを選択してください。',
'ssh.zmodem.sendDesc':
'rz のアップロード要求を検出しました(リモートがファイルを受信中)。アップロードするファイルを選択してください。',
// ファイルパネル(SFTP)
'ssh.file.up': '親フォルダへ',
'ssh.file.refresh': '更新',
'ssh.file.uploadFile': 'ファイルをアップロード',
'ssh.file.downloadSelected': '選択項目をダウンロード',
'ssh.file.permOwner': '権限 / 所有者',
'ssh.file.open': '開く',
'ssh.file.download': 'ダウンロード',
'ssh.file.upload': 'アップロード…',
'ssh.file.rename': '名前を変更',
'ssh.file.new': '新規作成',
'ssh.file.newFolder': '新しいフォルダ',
'ssh.file.copyPath': 'パスをコピー',
'ssh.file.copyPathFailed': 'パスのコピーに失敗しました',
'ssh.file.pathCopied': 'パスをコピーしました',
'ssh.file.permission': 'ファイル権限…',
'ssh.file.deleteTitle': '削除しますか?',
'ssh.file.loading': '読み込み中…',
'ssh.file.empty': '空のフォルダ',
'ssh.file.modeUnavailable': '権限を取得できません',
'ssh.file.folderName': 'フォルダ名',
'ssh.file.create': '作成',
'ssh.file.renameTitle': '{name} の名前を変更',
'ssh.file.permTitle': '権限 · {name}',
'ssh.file.permApplied': '権限を適用しました',
'ssh.file.octal': '8 進数',
'ssh.file.octalPlaceholder': '例:755',
'ssh.file.keepEmpty': '変更しない場合は空欄',
'ssh.file.ownerHint': 'UID/GID を空欄にすると所有者を変更しません',
'ssh.file.permRowOwner': '所有者',
'ssh.file.permRowGroup': 'グループ',
'ssh.file.permRowOther': 'その他',
'ssh.file.permColRead': '読み取り',
'ssh.file.permColWrite': '書き込み',
'ssh.file.permColExec': '実行',
// システム監視
'ssh.monitor.collecting': '取得中…',
'ssh.monitor.interrupted': '取得が中断されました:{error}',
'ssh.monitor.mem': 'メモリ',
'ssh.monitor.disks': 'ディスク',
'ssh.monitor.net': 'ネットワーク',
'ssh.monitor.cores': '{n} コア',
'ssh.monitor.loadavg': '負荷 {value}',
'ssh.monitor.uptime': '稼働時間',
'ssh.monitor.uptimeSeconds': '{n}秒',
'ssh.monitor.uptimeMinutes': '{n}分',
'ssh.monitor.uptimeHours': '{h}時間{m}分',
'ssh.monitor.uptimeDays': '{n}日'
}
export default ssh
+26
View File
@@ -0,0 +1,26 @@
/** 名前空間: terminal(ターミナル表示:コンテキストメニュー、検索、貼り付け確認、ツールバー、ヒント)。担当: ワークスペース/ターミナル。 */
const terminal: Record<string, string> = {
'terminal.menu.find': '検索',
'terminal.menu.selectAll': 'すべて選択',
'terminal.menu.clear': '画面クリア',
'terminal.search.placeholder': '検索',
'terminal.search.prev': '前へ',
'terminal.search.next': '次へ',
'terminal.search.found': '見つかりました',
'terminal.search.notFound': '見つかりません',
'terminal.suggest.hint': '↑/↓ 選択 · Tab で確定 · Esc で閉じる',
'terminal.rec.start': '記録開始',
'terminal.rec.stop': '記録停止',
'terminal.rec.startLog': 'セッションログの記録を開始',
'terminal.rec.stopLog': 'セッションログの記録を停止',
'terminal.rec.openLogs': 'ログフォルダーを開く',
'terminal.rec.openCwd': 'ワークスペースフォルダーを開く',
'terminal.paste.title': '貼り付けの確認',
'terminal.paste.message': '複数行または危険な可能性のあるコマンドを検出しました。ターミナルに貼り付けますか?',
'terminal.paste.noPrompt': 'このセッションでは表示しない',
'terminal.paste.disableDetection': '今後の貼り付けチェックを無効にする',
'terminal.paste.hint': '一般のターミナル設定で再度有効にするか、検出ポリシーを変更できます。',
'terminal.dead.message': 'プロセスが終了しました (コード {code})'
}
export default terminal
+62
View File
@@ -0,0 +1,62 @@
/** 名前空間: workspace(ワークスペース外装:サイドバー、タブ、レイアウトメニュー、分割、空状態)。担当: ワークスペース。 */
const workspace: Record<string, string> = {
'workspace.tab.terminalTitle': 'ターミナル {n}',
'workspace.tab.localTerminal': 'ローカルターミナル',
'workspace.tab.closeOthers': 'ほかを閉じる',
'workspace.tab.closeRight': '右側を閉じる',
'workspace.tab.broadcastTarget': 'ブロードキャスト対象',
'workspace.tab.broadcastBadge': '配',
'workspace.tab.addInSplit': 'この分割に新しいターミナル',
'workspace.newTerminal': '新規ターミナル',
'workspace.empty.terminalTitle': 'ターミナルがありません',
'workspace.empty.sshTitle': 'SSH セッションがありません',
'workspace.empty.sshHint': '左側のサーバー一覧から接続してください',
'workspace.rail.hideSidebar': 'サイドバーを折りたたむ',
'workspace.rail.showSidebar': 'サイドバーを展開',
'workspace.rail.layout': 'レイアウト',
'workspace.rail.settings': '設定',
'workspace.rail.connecting': '接続中…',
'workspace.rail.terminalWorkspace': 'ターミナルワークスペース',
'workspace.rail.sshWorkspace': 'SSH ワークスペース',
'workspace.panel.hideSidebar': 'サイドバーを折りたたむ',
'workspace.panel.showSidebar': 'サイドバーを展開',
'workspace.layout.splitRight': '水平分割',
'workspace.layout.splitBelow': '垂直分割',
'workspace.layout.saveTemplate': 'テンプレートとして保存',
'workspace.layout.applyTemplate': 'テンプレートを適用',
'workspace.template.saveTitle': 'レイアウトテンプレートを保存',
'workspace.template.namePlaceholder': 'テンプレート名',
'workspace.template.applyTitle': 'レイアウトテンプレートを適用',
'workspace.template.empty': '保存済みのテンプレートはありません',
'workspace.template.apply': '適用',
'workspace.template.deleteConfirm': 'このテンプレートを削除しますか?',
'workspace.broadcast.toggle': 'ブロードキャスト入力',
'workspace.broadcast.activeTitle': 'ブロードキャスト中({count} 件の対象)',
'workspace.broadcast.popoverTerminal': 'ブロードキャスト入力(ターミナル)',
'workspace.broadcast.popoverSsh': 'ブロードキャスト入力(SSH)',
'workspace.broadcast.switch': 'ブロードキャストスイッチ',
'workspace.broadcast.enabled': '有効({count})',
'workspace.broadcast.needTwo': '対象を 2 つ以上選択してください',
'workspace.broadcast.disabled': '無効',
'workspace.broadcast.emptySsh': 'SSH サーバーセッションがありません',
'workspace.broadcast.emptyTerminal': 'ターミナルがありません',
'workspace.broadcast.hint':
'ターミナルを 2 つ以上選ぶとブロードキャストが自動的に有効になり、対象が 2 つ未満になると自動的に解除されます。選択できるのは現在のモードのセッションだけです。',
'workspace.hint.sshFromList': 'SSH セッションはサーバー一覧から接続してください',
'workspace.hint.connectSshFirst': '先に SSH サーバーへ接続してください',
'workspace.hint.noActiveTerminal':
'有効なターミナルがありません。ローカルターミナルまたは SSH セッションを 1 つ以上開いてください',
'workspace.hint.noSessionInPanel': '現在アクティブなパネルに利用できるセッションがありません',
'workspace.connect.failed': 'SSH 接続に失敗しました',
'workspace.connect.passwordTitle': '接続パスワードを入力',
'workspace.connect.passwordPlaceholder': 'パスワード',
'workspace.connect.passphraseTitle': '秘密鍵のパスフレーズを入力',
'workspace.connect.passphrasePlaceholder': 'パスフレーズ',
'workspace.connect.connecting': '接続中…',
'workspace.connect.connectingNamed': '{name} に接続しています',
'workspace.connect.action': '接続',
'workspace.error.title': '画面でエラーが発生しました',
'workspace.error.reload': '再読み込み'
}
export default workspace