mirror of
https://github.com/Termix-SSH/Termix.git
synced 2026-10-30 15:15:24 +00:00
* fix(sso): send the PKCE verifier for GitHub login (#1534) * fix(remote-desktop): clip cursor overflow without disabling zoom (#1535) * test(remote-desktop): preserve sessions beyond one hour (#1536) * fix(hosts): expose controls for overflowing editor tabs (#1537) * fix(hosts): expose controls for overflowing editor tabs * test(hosts): mock resize observation in admin panel tests * fix(status): skip TCP probes while host sessions are active (#1538) * fix(database): batch session activity persistence (#1539) * docs(api): describe cookie and API key authentication (#1540) * fix(snippets): repair missing note column on SQLite upgrades (#1541) * fix(docker): retain stored SSH credential association (#1543) * fix(file-manager): render transfer toasts without plugin hooks (#1546) * feat(hosts): keep compact row actions inline (#1547) * fix(auth): allow retrying unavailable second-factor interfaces (#1549) * fix(auth): reject unresolved legacy identity provisioning (#1550) * fix(desktop): ship the plugin SDK inside Mac App Store builds (#1551) * fix(tmux): pass full session info to the terminal's session picker (#1552) The tmux.sessions service reduced detected sessions to bare names, but the picker reads session.name, so every entry rendered blank and selecting one sent an empty name, which created a new session instead of attaching. * fix(ssh): read force keyboard-interactive as a boolean when resolving hosts (#1553) The column holds the text "true"/"false", and the resolver passed it through as-is. The string "false" is truthy, so the password provider treated every saved host as forced keyboard-interactive and left the password out. Jump hops are built straight from the resolved host, so a password hop whose server doesn't offer keyboard-interactive failed with "All configured authentication methods failed". * fix(database): batch database saves for bulk host writes (#1554) * fix(database): yield to the event loop between database saves Each SQLite save serializes and encrypts the whole database into new buffers, which V8 only releases once the event loop turns. Boot migrations and bulk host import write plugin settings per host and per key in an awaited loop, so hundreds of full copies piled up and the container ran out of memory. * fix(database): save once per bulk host write instead of once per row On SQLite every repository write force-saves the whole database. Boot plugin data migrations, host defaults materialization and the bulk host routes write one row per host per setting, so they serialized and encrypted the full database hundreds of times in a row. DatabaseSaveTrigger.batched wraps a function so force saves made while it runs collapse into a single save when it finishes. Nested scopes fold into the outer one, and work that outlives its scope saves normally. * feat(hosts): add instance-wide predefined tag suggestions (#1548) * feat(hosts): add shared predefined tag suggestions * style(hosts): format tag catalog routes * test(database): advance fake timers past the save yield (#1555) * fix(i18n): complete Simplified Chinese core and plugin translations (#1542) * fix(i18n): complete Chinese onboarding and navigation labels * fix(i18n): translate remaining Chinese core and plugin interfaces * fix(i18n): translate host editor tab overflow controls * fix(i18n): use consistent Chinese fleet terminology * fix(i18n): localize hardcoded controls and plugin views * fix(i18n): translate built-in homepage widget catalog * test(homepage): follow translated timezone placeholder * fix(i18n): translate plugin-provided homepage widgets * fix(i18n): localize feature settings section titles * fix: 2.8 oidc accounts unable to sign in after upgrading (#1381) * fix: plugins losing the saved ssh login when copying a host (#1391) * fix: fleets, proxmox and automations not getting the host sudo password * fix: host imports running a defaults pass and metrics restart per host (#1384) * fix: high cpu from status probes and full database saves on every sample (#1300) * fix: user data export freezing the server (#1393) * fix: op:// secret references rejected as ssh keys on credentials (#1394) * fix: slow file deletes from the trash lookups on every delete (#1390) * fix: add openapi docs and error handling to host tag routes * test: compare download stream buffers directly so it stops timing out * chore: drop em dash from host row comment * chore: update release notes for 2.9.1 * fix: restore space to add host tags and redesign predefined tags editor * fix: host key silently accepted when the host is missing from the database (#1397) * fix: clearer host login failed status label and fix its translations (#1396) * chore: add host key and status label fixes to release notes * fix: sso and ldap provider dialogs overflowing the screen and using mismatched toggles * chore: increment ver * fix(audit): store plugin entries with no acting user as a null user_id (#1556) Plugin audit entries written outside a request used the literal "system" as user_id. That column references users.id, so the insert was refused (Postgres logs it as an FK violation) and the entry was silently dropped. Write null instead and keep "system" / plugin:<id> in username. * chore: add sso/ldap dialog and audit log fixes to release notes * fix: tunnels and host settings missing from shared hosts on desktop * fix: remote desktop logins missing from shared hosts on desktop * fix: simplify host status to online/offline and keep it live without a refresh * chore: sync Crowdin translations for 2.9.1 --------- Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
226 lines
10 KiB
JSON
226 lines
10 KiB
JSON
{
|
||
"permissions": {
|
||
"view": {
|
||
"title": "自動化を表示する",
|
||
"description": "自動化処理とその履歴をご覧ください。"
|
||
},
|
||
"create": {
|
||
"title": "自動化を作成する",
|
||
"description": "新しい自動化機能を追加します。"
|
||
},
|
||
"edit": {
|
||
"title": "自動化を編集する",
|
||
"description": "既存の自動化プロセスを変更します。"
|
||
},
|
||
"delete": {
|
||
"title": "自動化を削除する",
|
||
"description": "自動化機能を削除してください。"
|
||
},
|
||
"run": {
|
||
"title": "自動化を実行する",
|
||
"description": "自動化処理を手動で起動する。"
|
||
}
|
||
},
|
||
"newUi": {
|
||
"sidebar": {
|
||
"automations": {
|
||
"title": "自動化",
|
||
"tabAutomations": "自動化",
|
||
"tabRuns": "走る",
|
||
"tabChannels": "チャンネル",
|
||
"createAutomation": "新しい自動化",
|
||
"backToAutomations": "自動化に戻る",
|
||
"createTitle": "新しい自動化",
|
||
"editTitle": "編集自動化",
|
||
"empty": "自動化はまだ設定されていません。指標、スケジュール、またはイベントに応じて自動化を設定してください。",
|
||
"emptyRuns": "まだ得点はありません。",
|
||
"channelsHint": "アラートでチャンネルを設定します",
|
||
"noChannelsHint": "アラートは常に受信トレイに届きます。アラート設定でチャネルを追加すれば、他の場所にも送信できます。",
|
||
"nameLabel": "名前",
|
||
"namePlaceholder": "例:/data がいっぱいになったらクリーンアップする",
|
||
"nameRequired": "名前は必須です",
|
||
"descriptionLabel": "説明",
|
||
"descriptionPlaceholder": "任意の説明",
|
||
"enabledLabel": "有効",
|
||
"concurrencyLabel": "既に実行中の場合",
|
||
"concurrencyHint": "前回の実行が終了する前に、これが再び発生した場合の対処法。",
|
||
"concurrency": {
|
||
"skip": "新しいランをスキップ",
|
||
"queue": "待ってから追いかける",
|
||
"allow": "両方を同時に実行する"
|
||
},
|
||
"save": "保存",
|
||
"created": "自動化によって作成されました",
|
||
"updated": "自動化が保存されました",
|
||
"deleted": "自動化が削除されました",
|
||
"deleteConfirm": "この自動化を削除すると、実行履歴も削除されます。",
|
||
"runNow": "今すぐ実行",
|
||
"testRun": "試運転",
|
||
"testRunHint": "すべてのステップを実行しますが、Termix以外のものには一切触れません。",
|
||
"runStarted": "ランニング開始",
|
||
"runFinished": "実行完了: {{status}}",
|
||
"trigger": "トリガー",
|
||
"steps": "手順",
|
||
"addStep": "ステップを追加する",
|
||
"removeStep": "削除手順",
|
||
"moveUp": "上へ進む",
|
||
"moveDown": "下へ移動",
|
||
"noSteps": "まだ手順がありません。何が起こるべきかを記述する手順を追加してください。",
|
||
"webhookTokenTitle": "Webhook URL",
|
||
"webhookTokenDescription": "これは一度しか表示されません。今すぐ保存してください。後で取り出すことはできません。",
|
||
"copy": "コピー",
|
||
"copied": "コピーしました",
|
||
"viewJson": "JSON",
|
||
"viewBuilder": "ビルダー",
|
||
"viewGraph": "グラフ",
|
||
"lastRun": "最後の走行",
|
||
"never": "なし",
|
||
"duration": "{{seconds}}s",
|
||
"stepOutput": "出力",
|
||
"stepError": "エラー",
|
||
"dryRunBadge": "試運転",
|
||
"hostSelector": {
|
||
"trigger": "トリガーホスト",
|
||
"host": "特定の宿主",
|
||
"fleet": "艦隊",
|
||
"all": "すべてのホスト"
|
||
},
|
||
"triggerKinds": {
|
||
"metric_threshold": "メトリックしきい値",
|
||
"host_status": "ホストが起動または停止する",
|
||
"health_check": "健康チェックの変更点",
|
||
"schedule": "スケジュール通りに",
|
||
"docker_event": "コンテナイベント",
|
||
"internal_event": "ターミックスイベント",
|
||
"webhook": "受信ウェブフック"
|
||
},
|
||
"stepTypes": {
|
||
"notify": "アラートを送信する",
|
||
"http": "URLを呼び出す",
|
||
"run_snippet": "スニペットを実行する",
|
||
"run_command": "コマンドを実行する",
|
||
"docker": "コンテナを制御する",
|
||
"tunnel": "トンネルを制御する",
|
||
"wol": "ホストを起こす",
|
||
"wait": "待って",
|
||
"set_var": "変数を設定する",
|
||
"if": "もし/そうでなければ",
|
||
"run_automation": "別の自動化を実行する",
|
||
"stop": "ストップ"
|
||
},
|
||
"statuses": {
|
||
"running": "実行中",
|
||
"success": "成功",
|
||
"failed": "失敗",
|
||
"timeout": "タイムアウト",
|
||
"skipped": "スキップしました",
|
||
"cancelled": "キャンセル"
|
||
},
|
||
"fields": {
|
||
"host": "ホスト",
|
||
"metric": "メトリック",
|
||
"mount": "取り付けポイント",
|
||
"operator": "は",
|
||
"value": "価値",
|
||
"forSeconds": "(秒)の間持続",
|
||
"cooldown": "クールダウン(分)",
|
||
"cron": "Cron発現",
|
||
"intervalSeconds": "(秒)ごとに",
|
||
"timezone": "タイムゾーン",
|
||
"timezoneServer": "サーバー時間",
|
||
"timezoneHint": "このゾーンでは、cronの実行時間が読み取られます。インターバルスケジュールには適用されません。",
|
||
"container": "容器",
|
||
"command": "コマンド",
|
||
"url": "URL",
|
||
"method": "方法",
|
||
"body": "体",
|
||
"channels": "また、以下へも送信してください。",
|
||
"title": "タイトル",
|
||
"message": "メッセージ",
|
||
"snippet": "抜粋",
|
||
"seconds": "秒",
|
||
"conditionLeftPlaceholder": "チェックすべき値",
|
||
"conditionRightPlaceholder": "比較対象",
|
||
"variableName": "変数名",
|
||
"variableValue": "価値",
|
||
"elevated": "sudo を付けて実行",
|
||
"onError": "これが失敗した場合",
|
||
"allowPrivateNetwork": "ローカルネットワークアドレスを許可する",
|
||
"allowPrivateNetworkHint": "LAN上でセルフホスト型サービスを実行する場合に必要です。内部アドレスへのリクエストを防ぐため、デフォルトでは無効になっています。"
|
||
},
|
||
"onError": {
|
||
"stop": "走るのをやめろ",
|
||
"continue": "続ける"
|
||
},
|
||
"needsPlugin": "必要数 {{plugin}}",
|
||
"needsPluginHint": "この自動化処理は、必要な機能が再び利用可能になるまでスキップされます。",
|
||
"offBadge": "オフ",
|
||
"docsLink": "ドキュメントを見る",
|
||
"ago": {
|
||
"seconds": "{{count}}秒前",
|
||
"minutes": "{{count}}分前",
|
||
"hours": "{{count}}時間前",
|
||
"days": "{{count}}日前"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"nav": {
|
||
"automations": "自動化"
|
||
},
|
||
"onboarding": {
|
||
"feature_automations": "自動化",
|
||
"feature_automations_desc": "何かが発生した際に自動的に手順を実行し、通知を受け取ります。"
|
||
},
|
||
"maintenance": {
|
||
"title": "メンテナンス",
|
||
"description": "作業中は、ホストの状態、健全性、メトリック、コンテナ、トンネル切断に関する自動化処理を一時停止します。監視、手動実行、およびスケジュールされた自動化処理は継続されます。",
|
||
"denied": "メンテナンス情報を閲覧する権限がありません。",
|
||
"sharedReadOnly": "このホストはあなたと共有されています。メンテナンス設定を変更できるのは所有者のみです。",
|
||
"failed": "メンテナンスの更新ができませんでした。",
|
||
"active": "メンテナンスが有効です",
|
||
"estimated": "完成予定",
|
||
"noAutoEnd": "見積もりはメンテナンスの終了を意味するものではありません。作業が完了した時点で、明示的に終了してください。",
|
||
"endConfirm": "このホストのメンテナンスを終了し、イベントトリガーによる自動化を再開しますか?",
|
||
"confirmEnd": "終了を確認する",
|
||
"cancel": "キャンセル",
|
||
"end": "最終メンテナンス",
|
||
"action": "アクション",
|
||
"startNow": "今すぐ始めましょう",
|
||
"schedule": "後でスケジュールする",
|
||
"reason": "理由",
|
||
"startUtc": "最初の開始時刻(UTC)",
|
||
"repeat": "繰り返す",
|
||
"once": "一度",
|
||
"weekly": "毎週",
|
||
"monthly": "月刊",
|
||
"utcHelp": "年間を通してスケジュールはUTCを使用します。月間スケジュールでは、選択した日がない月はスキップされます。計画された作業期間は重複できません。作業期間が超過した場合、その超過作業は後の作業期間にも引き継がれます。",
|
||
"duration": "所要時間の目安(分)",
|
||
"grace": "猶予期間(分)",
|
||
"notify": "推定期間と猶予期間を過ぎてもオフライン状態が続く場合は、一度通知してください。",
|
||
"addSchedule": "スケジュールを追加",
|
||
"schedules": "スケジュール",
|
||
"noSchedules": "メンテナンススケジュールはありません。",
|
||
"completed": "既に開始済み",
|
||
"minutes_one": "{{count}} 分",
|
||
"minutes_other": "{{count}} 分",
|
||
"remove": "スケジュールを削除",
|
||
"loadFailed": "メンテナンス状況を更新できませんでした。読み込みが完了するまで、変更は無効になっています。",
|
||
"loading": "メンテナンスステータスをロード中…"
|
||
},
|
||
"ui": {
|
||
"sidebar": {
|
||
"automations": {
|
||
"options": {
|
||
"connect": "connect",
|
||
"disconnect": "disconnect",
|
||
"offline": "offline",
|
||
"online": "online",
|
||
"failing": "failing",
|
||
"recovered": "recovered"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|