feat(i18n): add multi-language support (ja/ko/vi/ru/zh-TW) with system auto-detection
- Extend AppLanguage to 7 locales: zh-CN, zh-TW, en, ja, ko, vi, ru - Auto-detect system language via navigator.languages; fallback to English - Add BCP47 locale mapping for date formatting and sorting - Create 50 translation JSON files (5 languages × 10 namespaces, 1137 keys each) - Update language selector with native language names - Extend locale key parity test to cover all 7 languages (70 assertions) - Add VNC/RDP desktop, serial terminal, AI agent, port forwarding, and SFTP features - Add credential encryption, host metrics, session backup crypto, and zmodem bridge - Update Rust backend: desktop services, host metrics, SSH/SFTP enhancements
This commit is contained in:
1 parent
fea6d8db04
commit
b0d0e3a5f3
301 files changed
+28002
-2705
No files matched your search
@@ -0,0 +1,237 @@
|
||||
{
|
||||
"sidebar": {
|
||||
"quickConnect": "クイック接続",
|
||||
"quickConnectShort": "接続",
|
||||
"newSession": "新規セッション",
|
||||
"newSessionShort": "新規",
|
||||
"searchPlaceholder": "セッションを検索...",
|
||||
"batchMode": "一括操作",
|
||||
"exitBatchMode": "一括モードを終了",
|
||||
"batchSelected": "{{count}} 件の SSH を選択",
|
||||
"batchExcludedDesktop": " · RDP/VNC は除外",
|
||||
"selectAllVisible": "表示中をすべて選択",
|
||||
"deselectAllVisible": "表示中の選択を解除",
|
||||
"batchExec": "一括実行",
|
||||
"settings": "設定",
|
||||
"resizeHint": "ドラッグでリサイズ · ダブルクリックで折りたたみ"
|
||||
},
|
||||
"tree": {
|
||||
"selectSession": "セッションを選択",
|
||||
"noMatchTitle": "一致するセッションはありません",
|
||||
"noMatchDesc": "別のキーワードをお試しください",
|
||||
"emptyTitle": "セッションはまだありません",
|
||||
"emptyDesc": "クイック接続またはセッションを作成 · ダブルクリックでターミナルを開く",
|
||||
"emptyAction": "新規セッション"
|
||||
},
|
||||
"contextMenu": {
|
||||
"blank": {
|
||||
"newGroup": "新規グループ",
|
||||
"newSession": "新規セッション"
|
||||
},
|
||||
"group": {
|
||||
"newSessionHere": "ここに新規セッション",
|
||||
"newGroup": "新規グループ",
|
||||
"renameGroup": "グループ名を変更",
|
||||
"deleteEmptyGroup": "空のグループを削除"
|
||||
},
|
||||
"session": {
|
||||
"open": "開く",
|
||||
"edit": "編集",
|
||||
"duplicate": "複製",
|
||||
"delete": "削除"
|
||||
}
|
||||
},
|
||||
"groups": {
|
||||
"default": "デフォルト",
|
||||
"new": {
|
||||
"title": "新規グループ",
|
||||
"message": "グループ名を入力",
|
||||
"placeholder": "例: Production",
|
||||
"confirm": "作成"
|
||||
},
|
||||
"rename": {
|
||||
"title": "グループ名を変更",
|
||||
"message": "「{{name}}」の変更後の名前",
|
||||
"placeholder": "グループ名",
|
||||
"confirm": "保存"
|
||||
},
|
||||
"deleteBlocked": {
|
||||
"title": "削除できません",
|
||||
"message": "グループ「{{name}}」にはまだセッションがあります。先に移動または削除してください。",
|
||||
"confirm": "了解"
|
||||
},
|
||||
"newOption": "新規グループ…",
|
||||
"hint": "別のグループを選択・作成しない限りデフォルトグループが使用されます"
|
||||
},
|
||||
"deleteSession": {
|
||||
"title": "セッションを削除",
|
||||
"message": "セッション「{{name}}」を削除しますか?",
|
||||
"confirm": "削除"
|
||||
},
|
||||
"welcome": {
|
||||
"tagline": "リモートターミナル · SFTP · ポート転送",
|
||||
"sectionStart": "はじめる",
|
||||
"sectionDesktop": "リモートデスクトップ",
|
||||
"sectionRecent": "最近のセッション",
|
||||
"quickConnect": {
|
||||
"title": "クイック接続",
|
||||
"desc": "単発の SSH · ライブラリに保存しない"
|
||||
},
|
||||
"newSession": {
|
||||
"title": "新規セッション",
|
||||
"desc": "ホストを保存 · サイドバーでダブルクリックして接続"
|
||||
},
|
||||
"localShell": {
|
||||
"title": "ローカルシェル",
|
||||
"selectShell": "シェルを選択",
|
||||
"default": "デフォルト"
|
||||
},
|
||||
"rdp": {
|
||||
"title": "RDP リモートデスクトップ",
|
||||
"desc": "Windows · NLA / CredSSP"
|
||||
},
|
||||
"vnc": {
|
||||
"title": "VNC リモートデスクトップ",
|
||||
"desc": "RFB · クロスプラットフォームのグラフィカルセッション"
|
||||
},
|
||||
"recentEmpty": {
|
||||
"title": "保存済みセッションはありません",
|
||||
"desc": "クイック接続を試すか、後で再利用するためのセッションを作成"
|
||||
}
|
||||
},
|
||||
"launcher": {
|
||||
"searchPlaceholder": "ホスト、グループ、タブを検索"
|
||||
},
|
||||
"quickConnect": {
|
||||
"title": "クイック接続",
|
||||
"target": "ターゲット",
|
||||
"targetPlaceholder": "root@192.168.1.10:22",
|
||||
"targetHint": "host、user@host、user@host:port に対応",
|
||||
"password": "パスワード",
|
||||
"passwordOptional": "任意 · キー使用時は空欄",
|
||||
"connect": "接続",
|
||||
"errorInvalidTarget": "ホストを入力してください (例: root@192.168.1.10 または opsbase.cn:5555)",
|
||||
"errorConnectFailed": "接続失敗"
|
||||
},
|
||||
"dialog": {
|
||||
"create": "新規セッション",
|
||||
"edit": "セッションを編集",
|
||||
"subtitle": "1 行ターゲット · 詳細オプションは折りたたみ",
|
||||
"saving": "保存中…",
|
||||
"save": "保存",
|
||||
"createAndSave": "作成して保存",
|
||||
"basic": "基本",
|
||||
"login": "ログイン",
|
||||
"advanced": "詳細",
|
||||
"advancedCollapsed": "プロキシ · ジャンプホスト · タグ",
|
||||
"collapse": "折りたたむ",
|
||||
"protocol": "プロトコル",
|
||||
"displayName": "表示名 (任意)",
|
||||
"displayNamePlaceholder": "デフォルトは user@host または vnc:host",
|
||||
"host": "ホスト",
|
||||
"hostPlaceholder": "192.168.1.10",
|
||||
"hostHint": "IP またはホスト名 · host:port も可",
|
||||
"port": "ポート",
|
||||
"username": "ユーザー名",
|
||||
"usernamePlaceholderRdp": "Administrator",
|
||||
"usernamePlaceholderSsh": "root",
|
||||
"width": "幅",
|
||||
"height": "高さ",
|
||||
"group": "グループ",
|
||||
"authPassword": "パスワード",
|
||||
"authKey": "キー",
|
||||
"password": "パスワード",
|
||||
"domain": "ドメイン (任意)",
|
||||
"domainPlaceholder": "ドメインアカウントを使用する場合を除き不要",
|
||||
"keySource": "キーの取得元",
|
||||
"keyFile": "ファイル",
|
||||
"keyText": "テキスト",
|
||||
"privateKeyPath": "秘密鍵のパス",
|
||||
"privateKeyText": "秘密鍵のテキスト",
|
||||
"privateKeyTextHint": "貼り付けた鍵はパスワードと同様にディスク上で暗号化",
|
||||
"pickKeyFile": "参照…",
|
||||
"pickKeyDialogTitle": "秘密鍵ファイルを選択",
|
||||
"allFilesFilter": "すべてのファイル",
|
||||
"passphrase": "キーパスフレーズ (任意)",
|
||||
"passphrasePlaceholder": "任意",
|
||||
"tags": "タグ",
|
||||
"tagsPlaceholder": "prod, web",
|
||||
"startupCommand": "起動コマンド (任意)",
|
||||
"startupCommandPlaceholder": "接続後に実行、例: cd /var/log",
|
||||
"proxy": "プロキシ",
|
||||
"proxyNone": "なし",
|
||||
"proxyHostPlaceholder": "プロキシホスト",
|
||||
"proxyPortPlaceholder": "ポート",
|
||||
"proxyUserPlaceholder": "ユーザー名 (任意)",
|
||||
"proxyPasswordPlaceholder": "パスワード (任意)",
|
||||
"jumpHost": "ジャンプホスト (任意)",
|
||||
"jumpNone": "ジャンプホストなし",
|
||||
"jumpNoneAlt": "ジャンプホストなし",
|
||||
"jumpHint": "保存済みセッションをジャンプホストとして使用可能"
|
||||
},
|
||||
"batch": {
|
||||
"title": "一括実行",
|
||||
"subtitle": "{{selected}} 件選択 · 同時実行 {{concurrency}} · タブを閉じると結果は破棄",
|
||||
"dialogTitle": "一括コマンド",
|
||||
"dialogDesc": "{{selected}}/{{total}} ホスト選択 · 最大同時実行 {{concurrency}}",
|
||||
"targetCount": "{{count}} ターゲット",
|
||||
"runningProgress": "実行中 {{completed}}/{{total}}",
|
||||
"execute": "{{count}} ホストで実行",
|
||||
"executeAgain": "再実行",
|
||||
"success": "{{count}} 件成功",
|
||||
"failed": "{{count}} 件失敗",
|
||||
"command": "リモートコマンド",
|
||||
"commandPlaceholder": "例: uptime",
|
||||
"targets": "ターゲットホスト",
|
||||
"filterPlaceholder": "名前、IP、グループ、タグ",
|
||||
"filterAria": "ホストを絞り込み",
|
||||
"noMatchHosts": "一致するホストはありません",
|
||||
"resultMatrix": "結果マトリクス",
|
||||
"resultMatrixHint": "ホスト × ステータス × 出力",
|
||||
"emptySelection": "左でターゲットを選択、またはサイドバーの一括モードから選択状態で開いてください",
|
||||
"noOutput": "(出力なし)",
|
||||
"errorReadConfig": "セッション設定を読み取れません",
|
||||
"errorConnectFailed": "接続失敗",
|
||||
"errorExecFailed": "コマンド実行失敗",
|
||||
"results": "結果",
|
||||
"resultsHint": "出力はこのダイアログ内にのみ保持",
|
||||
"ctrlEnterHint": "Ctrl/⌘ + Enter で実行",
|
||||
"executeTo": "{{count}} ホストで実行",
|
||||
"selectFromLeft": "左でターゲットを選択"
|
||||
},
|
||||
"importExport": {
|
||||
"exportTitle": "セッションをエクスポート",
|
||||
"exportDefaultPath": "opsxshell-sessions.bak",
|
||||
"exportFilterBak": "OpsXShell バックアップ",
|
||||
"exportFilterJson": "JSON",
|
||||
"exportSuccess": "{{count}} 件のセッションをエクスポート:\n{{path}}",
|
||||
"exportWriteFailed": "エクスポートファイルの書き込みに失敗",
|
||||
"exportFailed": "セッションのエクスポートに失敗",
|
||||
"exportFailedDetail": "セッションのエクスポートに失敗: {{message}}",
|
||||
"exportPasswordTitle": "バックアップパスワードを設定",
|
||||
"exportPasswordMessage": "エクスポートファイルはホストグループ、秘密鍵、パスワード、その他の秘密情報を暗号化します。バックアップパスワードを設定してください。",
|
||||
"exportPasswordPlaceholder": "バックアップパスワードを入力",
|
||||
"exportPasswordConfirmTitle": "バックアップパスワードを確認",
|
||||
"exportPasswordConfirmMessage": "確認のためバックアップパスワードを再度入力してください。",
|
||||
"exportPasswordConfirmPlaceholder": "バックアップパスワードを再入力",
|
||||
"exportPasswordMismatch": "パスワードが一致しません",
|
||||
"exportPasswordRequired": "エクスポートにはバックアップパスワードが必要です",
|
||||
"importTitle": "セッションをインポート",
|
||||
"importFilterBak": "OpsXShell バックアップ",
|
||||
"importFilterJson": "JSON",
|
||||
"importFilterSshConfig": "SSH Config",
|
||||
"importFilterAll": "すべてのファイル",
|
||||
"readFileFailed": "ファイルの読み取りに失敗",
|
||||
"readFileFailedDetail": "ファイルの読み取りに失敗: {{message}}",
|
||||
"importPasswordTitle": "バックアップパスワードを入力",
|
||||
"importPasswordMessage": "このファイルは暗号化されています。ホストグループと認証情報をインポートするには、エクスポート時に設定したパスワードを入力してください。",
|
||||
"importPasswordPlaceholder": "バックアップパスワードを入力",
|
||||
"importPasswordRequired": "暗号化バックアップのインポートにはパスワードが必要です",
|
||||
"importPasswordInvalid": "バックアップパスワードが正しくないか、ファイルが破損しています",
|
||||
"noSessionsFound": "インポート可能なセッションは見つかりませんでした",
|
||||
"noValidSessions": "ファイルに有効なセッションエントリがありません",
|
||||
"importSuccess": "{{created}}/{{total}} 件のセッションをインポート",
|
||||
"importFailed": "セッションのインポートに失敗",
|
||||
"importFailedDetail": "セッションのインポートに失敗: {{message}}"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user