mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 10:20:42 +00:00
feat(i18n): align docs and ui locales
This commit is contained in:
@@ -49,7 +49,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
all_locales_json='["zh-CN","zh-TW","pt-BR","de","es","ja-JP","ko","fr","tr","uk","id","pl","th"]'
|
all_locales_json='["zh-CN","zh-TW","pt-BR","de","es","ja-JP","ko","fr","ar","it","tr","uk","id","pl","th","vi","nl","fa"]'
|
||||||
|
|
||||||
if [ "$EVENT_NAME" != "push" ]; then
|
if [ "$EVENT_NAME" != "push" ]; then
|
||||||
echo "has_locales=true" >> "$GITHUB_OUTPUT"
|
echo "has_locales=true" >> "$GITHUB_OUTPUT"
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ jobs:
|
|||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
for event_type in \
|
for event_type in \
|
||||||
translate-zh-cn-release \
|
translate-zh-cn-release \
|
||||||
|
translate-zh-tw-release \
|
||||||
translate-ja-jp-release \
|
translate-ja-jp-release \
|
||||||
translate-es-release \
|
translate-es-release \
|
||||||
translate-pt-br-release \
|
translate-pt-br-release \
|
||||||
@@ -28,6 +29,9 @@ jobs:
|
|||||||
translate-fr-release \
|
translate-fr-release \
|
||||||
translate-ar-release \
|
translate-ar-release \
|
||||||
translate-it-release \
|
translate-it-release \
|
||||||
|
translate-vi-release \
|
||||||
|
translate-nl-release \
|
||||||
|
translate-fa-release \
|
||||||
translate-tr-release \
|
translate-tr-release \
|
||||||
translate-uk-release \
|
translate-uk-release \
|
||||||
translate-id-release \
|
translate-id-release \
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ Generated locale trees and live translation memory now live in the publish repo:
|
|||||||
|
|
||||||
- English docs are authored in `openclaw/openclaw`.
|
- English docs are authored in `openclaw/openclaw`.
|
||||||
- The source docs tree lives under `docs/`.
|
- The source docs tree lives under `docs/`.
|
||||||
- The source repo no longer keeps committed generated locale trees such as `docs/zh-CN/**`, `docs/ja-JP/**`, `docs/es/**`, `docs/pt-BR/**`, `docs/ko/**`, `docs/de/**`, `docs/fr/**`, `docs/ar/**`, `docs/it/**`, `docs/tr/**`, `docs/uk/**`, `docs/id/**`, or `docs/pl/**`.
|
- The source repo no longer keeps committed generated locale trees such as `docs/zh-CN/**`, `docs/zh-TW/**`, `docs/ja-JP/**`, `docs/es/**`, `docs/pt-BR/**`, `docs/ko/**`, `docs/de/**`, `docs/fr/**`, `docs/ar/**`, `docs/it/**`, `docs/vi/**`, `docs/nl/**`, `docs/fa/**`, `docs/tr/**`, `docs/uk/**`, `docs/id/**`, `docs/pl/**`, or `docs/th/**`.
|
||||||
|
|
||||||
## End-to-end flow
|
## End-to-end flow
|
||||||
|
|
||||||
@@ -20,8 +20,8 @@ Generated locale trees and live translation memory now live in the publish repo:
|
|||||||
3. `openclaw/openclaw/.github/workflows/docs-sync-publish.yml` mirrors the docs tree into `openclaw/docs`.
|
3. `openclaw/openclaw/.github/workflows/docs-sync-publish.yml` mirrors the docs tree into `openclaw/docs`.
|
||||||
4. The sync script rewrites the publish `docs/docs.json` so the generated locale picker blocks exist there even though they are no longer committed in the source repo.
|
4. The sync script rewrites the publish `docs/docs.json` so the generated locale picker blocks exist there even though they are no longer committed in the source repo.
|
||||||
5. `openclaw/docs/.github/workflows/translate-zh-cn.yml` refreshes `docs/zh-CN/**` once a day, on demand, and after source-repo release dispatches.
|
5. `openclaw/docs/.github/workflows/translate-zh-cn.yml` refreshes `docs/zh-CN/**` once a day, on demand, and after source-repo release dispatches.
|
||||||
6. `openclaw/docs/.github/workflows/translate-ja-jp.yml` does the same for `docs/ja-JP/**`.
|
6. `openclaw/docs/.github/workflows/translate-zh-tw.yml` and `translate-ja-jp.yml` do the same for `docs/zh-TW/**` and `docs/ja-JP/**`.
|
||||||
7. `openclaw/docs/.github/workflows/translate-es.yml`, `translate-pt-br.yml`, `translate-ko.yml`, `translate-de.yml`, `translate-fr.yml`, `translate-ar.yml`, `translate-it.yml`, `translate-tr.yml`, `translate-uk.yml`, `translate-id.yml`, and `translate-pl.yml` do the same for `docs/es/**`, `docs/pt-BR/**`, `docs/ko/**`, `docs/de/**`, `docs/fr/**`, `docs/ar/**`, `docs/it/**`, `docs/tr/**`, `docs/uk/**`, `docs/id/**`, and `docs/pl/**`.
|
7. `openclaw/docs/.github/workflows/translate-es.yml`, `translate-pt-br.yml`, `translate-ko.yml`, `translate-de.yml`, `translate-fr.yml`, `translate-ar.yml`, `translate-it.yml`, `translate-vi.yml`, `translate-nl.yml`, `translate-fa.yml`, `translate-tr.yml`, `translate-uk.yml`, `translate-id.yml`, `translate-pl.yml`, and `translate-th.yml` do the same for `docs/es/**`, `docs/pt-BR/**`, `docs/ko/**`, `docs/de/**`, `docs/fr/**`, `docs/ar/**`, `docs/it/**`, `docs/vi/**`, `docs/nl/**`, `docs/fa/**`, `docs/tr/**`, `docs/uk/**`, `docs/id/**`, `docs/pl/**`, and `docs/th/**`.
|
||||||
|
|
||||||
## Why the split exists
|
## Why the split exists
|
||||||
|
|
||||||
@@ -33,10 +33,10 @@ Generated locale trees and live translation memory now live in the publish repo:
|
|||||||
|
|
||||||
- `glossary.<lang>.json` — preferred term mappings used as prompt guidance.
|
- `glossary.<lang>.json` — preferred term mappings used as prompt guidance.
|
||||||
- `zh-Hans-navigation.json` — curated zh-Hans Mintlify locale navigation reinserted into the publish repo during sync.
|
- `zh-Hans-navigation.json` — curated zh-Hans Mintlify locale navigation reinserted into the publish repo during sync.
|
||||||
- `ar-navigation.json`, `de-navigation.json`, `es-navigation.json`, `fr-navigation.json`, `id-navigation.json`, `it-navigation.json`, `ja-navigation.json`, `ko-navigation.json`, `pl-navigation.json`, `pt-BR-navigation.json`, `tr-navigation.json` — starter locale metadata kept alongside the source repo, but the publish sync now clones the full English nav tree for these locales so translated pages are visible in Mintlify without hand-maintaining per-locale nav JSON.
|
- `ar-navigation.json`, `de-navigation.json`, `es-navigation.json`, `fr-navigation.json`, `id-navigation.json`, `it-navigation.json`, `ja-navigation.json`, `ko-navigation.json`, `pl-navigation.json`, `pt-BR-navigation.json`, and `tr-navigation.json` — starter locale metadata kept alongside the source repo, but the publish sync now clones the full English nav tree for clone-en locales so translated pages are visible in Mintlify without hand-maintaining per-locale nav JSON.
|
||||||
- `<lang>.tm.jsonl` — translation memory keyed by workflow + model + text hash.
|
- `<lang>.tm.jsonl` — translation memory keyed by workflow + model + text hash.
|
||||||
|
|
||||||
In this repo, generated locale TM files such as `docs/.i18n/zh-CN.tm.jsonl`, `docs/.i18n/ja-JP.tm.jsonl`, `docs/.i18n/es.tm.jsonl`, `docs/.i18n/pt-BR.tm.jsonl`, `docs/.i18n/ko.tm.jsonl`, `docs/.i18n/de.tm.jsonl`, `docs/.i18n/fr.tm.jsonl`, `docs/.i18n/ar.tm.jsonl`, `docs/.i18n/it.tm.jsonl`, `docs/.i18n/tr.tm.jsonl`, `docs/.i18n/uk.tm.jsonl`, `docs/.i18n/id.tm.jsonl`, and `docs/.i18n/pl.tm.jsonl` are intentionally no longer committed.
|
In this repo, generated locale TM files such as `docs/.i18n/zh-CN.tm.jsonl`, `docs/.i18n/zh-TW.tm.jsonl`, `docs/.i18n/ja-JP.tm.jsonl`, `docs/.i18n/es.tm.jsonl`, `docs/.i18n/pt-BR.tm.jsonl`, `docs/.i18n/ko.tm.jsonl`, `docs/.i18n/de.tm.jsonl`, `docs/.i18n/fr.tm.jsonl`, `docs/.i18n/ar.tm.jsonl`, `docs/.i18n/it.tm.jsonl`, `docs/.i18n/vi.tm.jsonl`, `docs/.i18n/nl.tm.jsonl`, `docs/.i18n/fa.tm.jsonl`, `docs/.i18n/tr.tm.jsonl`, `docs/.i18n/uk.tm.jsonl`, `docs/.i18n/id.tm.jsonl`, `docs/.i18n/pl.tm.jsonl`, and `docs/.i18n/th.tm.jsonl` are intentionally no longer committed.
|
||||||
|
|
||||||
## Glossary format
|
## Glossary format
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@ Fields:
|
|||||||
- If the pending count is `0`, the expensive translation step is skipped entirely.
|
- If the pending count is `0`, the expensive translation step is skipped entirely.
|
||||||
- If there are pending files, the workflow translates only those files.
|
- If there are pending files, the workflow translates only those files.
|
||||||
- The publish workflow retries transient model-format failures, but unchanged files stay skipped because the same hash check runs on each retry.
|
- The publish workflow retries transient model-format failures, but unchanged files stay skipped because the same hash check runs on each retry.
|
||||||
- The source repo also dispatches zh-CN, ja-JP, es, pt-BR, ko, de, fr, ar, it, tr, uk, id, and pl refreshes after published GitHub releases so release docs can catch up without waiting for the daily cron.
|
- The source repo also dispatches zh-CN, zh-TW, ja-JP, es, pt-BR, ko, de, fr, ar, it, vi, nl, fa, tr, uk, id, pl, and th refreshes after published GitHub releases so release docs can catch up without waiting for the daily cron.
|
||||||
|
|
||||||
## Operational notes
|
## Operational notes
|
||||||
|
|
||||||
|
|||||||
78
docs/.i18n/glossary.fa.json
Normal file
78
docs/.i18n/glossary.fa.json
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"source": "ACP",
|
||||||
|
"target": "ACP"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Active Memory",
|
||||||
|
"target": "Active Memory"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ClawHub",
|
||||||
|
"target": "ClawHub"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "CLI",
|
||||||
|
"target": "CLI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Compaction",
|
||||||
|
"target": "Compaction"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Cron",
|
||||||
|
"target": "Cron"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Dreaming",
|
||||||
|
"target": "Dreaming"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Gateway",
|
||||||
|
"target": "Gateway"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Heartbeat",
|
||||||
|
"target": "Heartbeat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Mintlify",
|
||||||
|
"target": "Mintlify"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Node",
|
||||||
|
"target": "Node"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "OpenClaw",
|
||||||
|
"target": "OpenClaw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Pi",
|
||||||
|
"target": "Pi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Plugin",
|
||||||
|
"target": "Plugin"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Skills",
|
||||||
|
"target": "Skills"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Tailscale",
|
||||||
|
"target": "Tailscale"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "TaskFlow",
|
||||||
|
"target": "TaskFlow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "TUI",
|
||||||
|
"target": "TUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Webhook",
|
||||||
|
"target": "Webhook"
|
||||||
|
}
|
||||||
|
]
|
||||||
78
docs/.i18n/glossary.nl.json
Normal file
78
docs/.i18n/glossary.nl.json
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"source": "ACP",
|
||||||
|
"target": "ACP"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Active Memory",
|
||||||
|
"target": "Active Memory"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ClawHub",
|
||||||
|
"target": "ClawHub"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "CLI",
|
||||||
|
"target": "CLI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Compaction",
|
||||||
|
"target": "Compaction"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Cron",
|
||||||
|
"target": "Cron"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Dreaming",
|
||||||
|
"target": "Dreaming"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Gateway",
|
||||||
|
"target": "Gateway"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Heartbeat",
|
||||||
|
"target": "Heartbeat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Mintlify",
|
||||||
|
"target": "Mintlify"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Node",
|
||||||
|
"target": "Node"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "OpenClaw",
|
||||||
|
"target": "OpenClaw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Pi",
|
||||||
|
"target": "Pi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Plugin",
|
||||||
|
"target": "Plugin"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Skills",
|
||||||
|
"target": "Skills"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Tailscale",
|
||||||
|
"target": "Tailscale"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "TaskFlow",
|
||||||
|
"target": "TaskFlow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "TUI",
|
||||||
|
"target": "TUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Webhook",
|
||||||
|
"target": "Webhook"
|
||||||
|
}
|
||||||
|
]
|
||||||
78
docs/.i18n/glossary.vi.json
Normal file
78
docs/.i18n/glossary.vi.json
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"source": "ACP",
|
||||||
|
"target": "ACP"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Active Memory",
|
||||||
|
"target": "Active Memory"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ClawHub",
|
||||||
|
"target": "ClawHub"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "CLI",
|
||||||
|
"target": "CLI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Compaction",
|
||||||
|
"target": "Compaction"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Cron",
|
||||||
|
"target": "Cron"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Dreaming",
|
||||||
|
"target": "Dreaming"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Gateway",
|
||||||
|
"target": "Gateway"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Heartbeat",
|
||||||
|
"target": "Heartbeat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Mintlify",
|
||||||
|
"target": "Mintlify"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Node",
|
||||||
|
"target": "Node"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "OpenClaw",
|
||||||
|
"target": "OpenClaw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Pi",
|
||||||
|
"target": "Pi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Plugin",
|
||||||
|
"target": "Plugin"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Skills",
|
||||||
|
"target": "Skills"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Tailscale",
|
||||||
|
"target": "Tailscale"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "TaskFlow",
|
||||||
|
"target": "TaskFlow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "TUI",
|
||||||
|
"target": "TUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Webhook",
|
||||||
|
"target": "Webhook"
|
||||||
|
}
|
||||||
|
]
|
||||||
78
docs/.i18n/glossary.zh-TW.json
Normal file
78
docs/.i18n/glossary.zh-TW.json
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"source": "ACP",
|
||||||
|
"target": "ACP"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Active Memory",
|
||||||
|
"target": "Active Memory"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ClawHub",
|
||||||
|
"target": "ClawHub"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "CLI",
|
||||||
|
"target": "CLI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Compaction",
|
||||||
|
"target": "Compaction"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Cron",
|
||||||
|
"target": "Cron"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Dreaming",
|
||||||
|
"target": "Dreaming"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Gateway",
|
||||||
|
"target": "Gateway"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Heartbeat",
|
||||||
|
"target": "Heartbeat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Mintlify",
|
||||||
|
"target": "Mintlify"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Node",
|
||||||
|
"target": "Node"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "OpenClaw",
|
||||||
|
"target": "OpenClaw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Pi",
|
||||||
|
"target": "Pi"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Plugin",
|
||||||
|
"target": "Plugin"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Skills",
|
||||||
|
"target": "Skills"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Tailscale",
|
||||||
|
"target": "Tailscale"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "TaskFlow",
|
||||||
|
"target": "TaskFlow"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "TUI",
|
||||||
|
"target": "TUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Webhook",
|
||||||
|
"target": "Webhook"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -39,6 +39,7 @@ const MINTLIFY_LANGUAGE_CODES = new Set([
|
|||||||
"nl",
|
"nl",
|
||||||
"uk",
|
"uk",
|
||||||
"vi",
|
"vi",
|
||||||
|
"fa",
|
||||||
"pl",
|
"pl",
|
||||||
"uz",
|
"uz",
|
||||||
"he",
|
"he",
|
||||||
|
|||||||
@@ -92,11 +92,16 @@ const LOCALE_ENTRIES: readonly LocaleEntry[] = [
|
|||||||
{ locale: "ja-JP", fileName: "ja-JP.ts", exportName: "ja_JP", languageKey: "jaJP" },
|
{ locale: "ja-JP", fileName: "ja-JP.ts", exportName: "ja_JP", languageKey: "jaJP" },
|
||||||
{ locale: "ko", fileName: "ko.ts", exportName: "ko", languageKey: "ko" },
|
{ locale: "ko", fileName: "ko.ts", exportName: "ko", languageKey: "ko" },
|
||||||
{ locale: "fr", fileName: "fr.ts", exportName: "fr", languageKey: "fr" },
|
{ locale: "fr", fileName: "fr.ts", exportName: "fr", languageKey: "fr" },
|
||||||
|
{ locale: "ar", fileName: "ar.ts", exportName: "ar", languageKey: "ar" },
|
||||||
|
{ locale: "it", fileName: "it.ts", exportName: "it", languageKey: "it" },
|
||||||
{ locale: "tr", fileName: "tr.ts", exportName: "tr", languageKey: "tr" },
|
{ locale: "tr", fileName: "tr.ts", exportName: "tr", languageKey: "tr" },
|
||||||
{ locale: "uk", fileName: "uk.ts", exportName: "uk", languageKey: "uk" },
|
{ locale: "uk", fileName: "uk.ts", exportName: "uk", languageKey: "uk" },
|
||||||
{ locale: "id", fileName: "id.ts", exportName: "id", languageKey: "id" },
|
{ locale: "id", fileName: "id.ts", exportName: "id", languageKey: "id" },
|
||||||
{ locale: "pl", fileName: "pl.ts", exportName: "pl", languageKey: "pl" },
|
{ locale: "pl", fileName: "pl.ts", exportName: "pl", languageKey: "pl" },
|
||||||
{ locale: "th", fileName: "th.ts", exportName: "th", languageKey: "th" },
|
{ locale: "th", fileName: "th.ts", exportName: "th", languageKey: "th" },
|
||||||
|
{ locale: "vi", fileName: "vi.ts", exportName: "vi", languageKey: "vi" },
|
||||||
|
{ locale: "nl", fileName: "nl.ts", exportName: "nl", languageKey: "nl" },
|
||||||
|
{ locale: "fa", fileName: "fa.ts", exportName: "fa", languageKey: "fa" },
|
||||||
];
|
];
|
||||||
|
|
||||||
const DEFAULT_GLOSSARY: readonly GlossaryEntry[] = [
|
const DEFAULT_GLOSSARY: readonly GlossaryEntry[] = [
|
||||||
@@ -179,6 +184,10 @@ function prettyLanguageLabel(locale: string): string {
|
|||||||
return "Korean";
|
return "Korean";
|
||||||
case "fr":
|
case "fr":
|
||||||
return "French";
|
return "French";
|
||||||
|
case "ar":
|
||||||
|
return "Arabic";
|
||||||
|
case "it":
|
||||||
|
return "Italian";
|
||||||
case "tr":
|
case "tr":
|
||||||
return "Turkish";
|
return "Turkish";
|
||||||
case "uk":
|
case "uk":
|
||||||
@@ -189,6 +198,12 @@ function prettyLanguageLabel(locale: string): string {
|
|||||||
return "Polish";
|
return "Polish";
|
||||||
case "th":
|
case "th":
|
||||||
return "Thai";
|
return "Thai";
|
||||||
|
case "vi":
|
||||||
|
return "Vietnamese";
|
||||||
|
case "nl":
|
||||||
|
return "Dutch";
|
||||||
|
case "fa":
|
||||||
|
return "Persian";
|
||||||
case "de":
|
case "de":
|
||||||
return "German";
|
return "German";
|
||||||
case "es":
|
case "es":
|
||||||
|
|||||||
@@ -15,14 +15,40 @@ func prettyLanguageLabel(lang string) string {
|
|||||||
return "English"
|
return "English"
|
||||||
case strings.EqualFold(trimmed, "zh-CN"):
|
case strings.EqualFold(trimmed, "zh-CN"):
|
||||||
return "Simplified Chinese"
|
return "Simplified Chinese"
|
||||||
|
case strings.EqualFold(trimmed, "zh-TW"):
|
||||||
|
return "Traditional Chinese"
|
||||||
case strings.EqualFold(trimmed, "ja-JP"):
|
case strings.EqualFold(trimmed, "ja-JP"):
|
||||||
return "Japanese"
|
return "Japanese"
|
||||||
|
case strings.EqualFold(trimmed, "es"):
|
||||||
|
return "Spanish"
|
||||||
|
case strings.EqualFold(trimmed, "pt-BR"):
|
||||||
|
return "Brazilian Portuguese"
|
||||||
|
case strings.EqualFold(trimmed, "ko"):
|
||||||
|
return "Korean"
|
||||||
|
case strings.EqualFold(trimmed, "fr"):
|
||||||
|
return "French"
|
||||||
|
case strings.EqualFold(trimmed, "ar"):
|
||||||
|
return "Arabic"
|
||||||
|
case strings.EqualFold(trimmed, "it"):
|
||||||
|
return "Italian"
|
||||||
|
case strings.EqualFold(trimmed, "vi"):
|
||||||
|
return "Vietnamese"
|
||||||
|
case strings.EqualFold(trimmed, "nl"):
|
||||||
|
return "Dutch"
|
||||||
|
case strings.EqualFold(trimmed, "fa"):
|
||||||
|
return "Persian"
|
||||||
|
case strings.EqualFold(trimmed, "tr"):
|
||||||
|
return "Turkish"
|
||||||
case strings.EqualFold(trimmed, "de"):
|
case strings.EqualFold(trimmed, "de"):
|
||||||
return "German"
|
return "German"
|
||||||
case strings.EqualFold(trimmed, "th"):
|
case strings.EqualFold(trimmed, "th"):
|
||||||
return "Thai"
|
return "Thai"
|
||||||
case strings.EqualFold(trimmed, "uk"):
|
case strings.EqualFold(trimmed, "uk"):
|
||||||
return "Ukrainian"
|
return "Ukrainian"
|
||||||
|
case strings.EqualFold(trimmed, "id"):
|
||||||
|
return "Indonesian"
|
||||||
|
case strings.EqualFold(trimmed, "pl"):
|
||||||
|
return "Polish"
|
||||||
default:
|
default:
|
||||||
return trimmed
|
return trimmed
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,13 @@ const GENERATED_LOCALES = [
|
|||||||
tmFile: "zh-CN.tm.jsonl",
|
tmFile: "zh-CN.tm.jsonl",
|
||||||
navMode: "overlay",
|
navMode: "overlay",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
language: "zh-Hant",
|
||||||
|
dir: "zh-TW",
|
||||||
|
navFile: "zh-Hant-navigation.json",
|
||||||
|
tmFile: "zh-TW.tm.jsonl",
|
||||||
|
navMode: "clone-en",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
language: "ja",
|
language: "ja",
|
||||||
dir: "ja-JP",
|
dir: "ja-JP",
|
||||||
@@ -88,6 +95,27 @@ const GENERATED_LOCALES = [
|
|||||||
tmFile: "it.tm.jsonl",
|
tmFile: "it.tm.jsonl",
|
||||||
navMode: "clone-en",
|
navMode: "clone-en",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
language: "vi",
|
||||||
|
dir: "vi",
|
||||||
|
navFile: "vi-navigation.json",
|
||||||
|
tmFile: "vi.tm.jsonl",
|
||||||
|
navMode: "clone-en",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
language: "nl",
|
||||||
|
dir: "nl",
|
||||||
|
navFile: "nl-navigation.json",
|
||||||
|
tmFile: "nl.tm.jsonl",
|
||||||
|
navMode: "clone-en",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
language: "fa",
|
||||||
|
dir: "fa",
|
||||||
|
navFile: "fa-navigation.json",
|
||||||
|
tmFile: "fa.tm.jsonl",
|
||||||
|
navMode: "clone-en",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
language: "tr",
|
language: "tr",
|
||||||
dir: "tr",
|
dir: "tr",
|
||||||
@@ -122,7 +150,6 @@ const GENERATED_LOCALES = [
|
|||||||
navFile: "th-navigation.json",
|
navFile: "th-navigation.json",
|
||||||
tmFile: "th.tm.jsonl",
|
tmFile: "th.tm.jsonl",
|
||||||
navMode: "clone-en",
|
navMode: "clone-en",
|
||||||
navigation: false,
|
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
780
ui/src/i18n/.i18n/ar.meta.json
Normal file
780
ui/src/i18n/.i18n/ar.meta.json
Normal file
@@ -0,0 +1,780 @@
|
|||||||
|
{
|
||||||
|
"fallbackKeys": [
|
||||||
|
"agentTools.builtIn",
|
||||||
|
"agentTools.channel",
|
||||||
|
"agentTools.channelSource",
|
||||||
|
"agentTools.connected",
|
||||||
|
"agentTools.connectedSource",
|
||||||
|
"channels.gatewayUrlConfirmation.subtitle",
|
||||||
|
"channels.gatewayUrlConfirmation.title",
|
||||||
|
"channels.gatewayUrlConfirmation.warning",
|
||||||
|
"channels.generic.subtitle",
|
||||||
|
"channels.health.noSnapshotYet",
|
||||||
|
"channels.health.subtitle",
|
||||||
|
"channels.health.title",
|
||||||
|
"channels.nostr.about",
|
||||||
|
"channels.nostr.account",
|
||||||
|
"channels.nostr.advanced",
|
||||||
|
"channels.nostr.avatarHelp",
|
||||||
|
"channels.nostr.avatarUrl",
|
||||||
|
"channels.nostr.bannerHelp",
|
||||||
|
"channels.nostr.bannerUrl",
|
||||||
|
"channels.nostr.bio",
|
||||||
|
"channels.nostr.bioHelp",
|
||||||
|
"channels.nostr.bioPlaceholder",
|
||||||
|
"channels.nostr.displayName",
|
||||||
|
"channels.nostr.displayNameHelp",
|
||||||
|
"channels.nostr.editProfile",
|
||||||
|
"channels.nostr.lightningAddress",
|
||||||
|
"channels.nostr.lightningHelp",
|
||||||
|
"channels.nostr.name",
|
||||||
|
"channels.nostr.nip05Help",
|
||||||
|
"channels.nostr.nip05Identifier",
|
||||||
|
"channels.nostr.noProfile",
|
||||||
|
"channels.nostr.noProfileHint",
|
||||||
|
"channels.nostr.profile",
|
||||||
|
"channels.nostr.profilePicture",
|
||||||
|
"channels.nostr.profilePicturePreview",
|
||||||
|
"channels.nostr.username",
|
||||||
|
"channels.nostr.usernameHelp",
|
||||||
|
"channels.nostr.website",
|
||||||
|
"channels.nostr.websiteHelp",
|
||||||
|
"chat.disconnected",
|
||||||
|
"chat.focusToggle",
|
||||||
|
"chat.hideCronSessions",
|
||||||
|
"chat.onboardingDisabled",
|
||||||
|
"chat.refreshTitle",
|
||||||
|
"chat.showCronSessions",
|
||||||
|
"chat.showCronSessionsHidden",
|
||||||
|
"chat.thinkingToggle",
|
||||||
|
"chat.toolCallsToggle",
|
||||||
|
"common.active",
|
||||||
|
"common.audience",
|
||||||
|
"common.authAge",
|
||||||
|
"common.baseUrl",
|
||||||
|
"common.call",
|
||||||
|
"common.cancel",
|
||||||
|
"common.configured",
|
||||||
|
"common.confirm",
|
||||||
|
"common.connect",
|
||||||
|
"common.connected",
|
||||||
|
"common.credential",
|
||||||
|
"common.disabled",
|
||||||
|
"common.docs",
|
||||||
|
"common.enabled",
|
||||||
|
"common.health",
|
||||||
|
"common.hideAdvanced",
|
||||||
|
"common.importFromRelays",
|
||||||
|
"common.importing",
|
||||||
|
"common.lastConnect",
|
||||||
|
"common.lastInbound",
|
||||||
|
"common.lastMessage",
|
||||||
|
"common.lastProbe",
|
||||||
|
"common.lastStart",
|
||||||
|
"common.linked",
|
||||||
|
"common.loadApprovals",
|
||||||
|
"common.loadConfig",
|
||||||
|
"common.loading",
|
||||||
|
"common.logout",
|
||||||
|
"common.mode",
|
||||||
|
"common.na",
|
||||||
|
"common.no",
|
||||||
|
"common.offline",
|
||||||
|
"common.ok",
|
||||||
|
"common.online",
|
||||||
|
"common.probe",
|
||||||
|
"common.probeFailed",
|
||||||
|
"common.probeOk",
|
||||||
|
"common.publicKey",
|
||||||
|
"common.refresh",
|
||||||
|
"common.refreshing",
|
||||||
|
"common.relink",
|
||||||
|
"common.reload",
|
||||||
|
"common.reloadConfig",
|
||||||
|
"common.resources",
|
||||||
|
"common.running",
|
||||||
|
"common.save",
|
||||||
|
"common.saveAndPublish",
|
||||||
|
"common.saving",
|
||||||
|
"common.search",
|
||||||
|
"common.secondsAgo",
|
||||||
|
"common.settingsSections",
|
||||||
|
"common.showAdvanced",
|
||||||
|
"common.showQr",
|
||||||
|
"common.theme",
|
||||||
|
"common.unsavedChanges",
|
||||||
|
"common.unselect",
|
||||||
|
"common.version",
|
||||||
|
"common.waitForScan",
|
||||||
|
"common.working",
|
||||||
|
"common.yes",
|
||||||
|
"cron.errors.agentMessageRequired",
|
||||||
|
"cron.errors.agentMessageRequiredShort",
|
||||||
|
"cron.errors.cronExprRequired",
|
||||||
|
"cron.errors.cronExprRequiredShort",
|
||||||
|
"cron.errors.everyAmountInvalid",
|
||||||
|
"cron.errors.invalidIntervalAmount",
|
||||||
|
"cron.errors.invalidRunTime",
|
||||||
|
"cron.errors.invalidStaggerAmount",
|
||||||
|
"cron.errors.nameRequired",
|
||||||
|
"cron.errors.nameRequiredShort",
|
||||||
|
"cron.errors.scheduleAtInvalid",
|
||||||
|
"cron.errors.staggerAmountInvalid",
|
||||||
|
"cron.errors.systemEventTextRequired",
|
||||||
|
"cron.errors.systemTextRequired",
|
||||||
|
"cron.errors.timeoutInvalid",
|
||||||
|
"cron.errors.webhookUrlInvalid",
|
||||||
|
"cron.errors.webhookUrlRequired",
|
||||||
|
"cron.form.addJob",
|
||||||
|
"cron.form.advanced",
|
||||||
|
"cron.form.advancedHelp",
|
||||||
|
"cron.form.agentHelp",
|
||||||
|
"cron.form.agentId",
|
||||||
|
"cron.form.agentPlaceholder",
|
||||||
|
"cron.form.agentTurn",
|
||||||
|
"cron.form.agentTurnHelp",
|
||||||
|
"cron.form.announceDefault",
|
||||||
|
"cron.form.assistantTaskPrompt",
|
||||||
|
"cron.form.at",
|
||||||
|
"cron.form.basics",
|
||||||
|
"cron.form.basicsSub",
|
||||||
|
"cron.form.bestEffortDelivery",
|
||||||
|
"cron.form.bestEffortHelp",
|
||||||
|
"cron.form.cancel",
|
||||||
|
"cron.form.cantAddYet",
|
||||||
|
"cron.form.channel",
|
||||||
|
"cron.form.channelHelp",
|
||||||
|
"cron.form.clearAgentHelp",
|
||||||
|
"cron.form.clearAgentOverride",
|
||||||
|
"cron.form.createSubtitle",
|
||||||
|
"cron.form.cronOption",
|
||||||
|
"cron.form.days",
|
||||||
|
"cron.form.deleteAfterRun",
|
||||||
|
"cron.form.deleteAfterRunHelp",
|
||||||
|
"cron.form.deliveryHelp",
|
||||||
|
"cron.form.deliverySection",
|
||||||
|
"cron.form.deliverySub",
|
||||||
|
"cron.form.description",
|
||||||
|
"cron.form.descriptionPlaceholder",
|
||||||
|
"cron.form.editJob",
|
||||||
|
"cron.form.every",
|
||||||
|
"cron.form.everyAmountPlaceholder",
|
||||||
|
"cron.form.exactTiming",
|
||||||
|
"cron.form.exactTimingHelp",
|
||||||
|
"cron.form.execution",
|
||||||
|
"cron.form.executionSub",
|
||||||
|
"cron.form.expression",
|
||||||
|
"cron.form.expressionPlaceholder",
|
||||||
|
"cron.form.fieldName",
|
||||||
|
"cron.form.fillRequired",
|
||||||
|
"cron.form.fixFields",
|
||||||
|
"cron.form.fixFieldsPlural",
|
||||||
|
"cron.form.hours",
|
||||||
|
"cron.form.isolated",
|
||||||
|
"cron.form.jitterHelp",
|
||||||
|
"cron.form.main",
|
||||||
|
"cron.form.mainTimelineMessage",
|
||||||
|
"cron.form.minutes",
|
||||||
|
"cron.form.model",
|
||||||
|
"cron.form.modelHelp",
|
||||||
|
"cron.form.modelPlaceholder",
|
||||||
|
"cron.form.namePlaceholder",
|
||||||
|
"cron.form.newJob",
|
||||||
|
"cron.form.nextHeartbeat",
|
||||||
|
"cron.form.noneInternal",
|
||||||
|
"cron.form.now",
|
||||||
|
"cron.form.payloadKind",
|
||||||
|
"cron.form.required",
|
||||||
|
"cron.form.requiredSr",
|
||||||
|
"cron.form.resultDelivery",
|
||||||
|
"cron.form.runAt",
|
||||||
|
"cron.form.saveChanges",
|
||||||
|
"cron.form.saving",
|
||||||
|
"cron.form.schedule",
|
||||||
|
"cron.form.scheduleSub",
|
||||||
|
"cron.form.seconds",
|
||||||
|
"cron.form.session",
|
||||||
|
"cron.form.sessionHelp",
|
||||||
|
"cron.form.staggerPlaceholder",
|
||||||
|
"cron.form.staggerUnit",
|
||||||
|
"cron.form.staggerWindow",
|
||||||
|
"cron.form.systemEvent",
|
||||||
|
"cron.form.systemEventHelp",
|
||||||
|
"cron.form.thinking",
|
||||||
|
"cron.form.thinkingHelp",
|
||||||
|
"cron.form.thinkingPlaceholder",
|
||||||
|
"cron.form.timeoutHelp",
|
||||||
|
"cron.form.timeoutPlaceholder",
|
||||||
|
"cron.form.timeoutSeconds",
|
||||||
|
"cron.form.timezoneHelp",
|
||||||
|
"cron.form.timezoneOptional",
|
||||||
|
"cron.form.timezonePlaceholder",
|
||||||
|
"cron.form.to",
|
||||||
|
"cron.form.toHelp",
|
||||||
|
"cron.form.toPlaceholder",
|
||||||
|
"cron.form.unit",
|
||||||
|
"cron.form.updateSubtitle",
|
||||||
|
"cron.form.wakeMode",
|
||||||
|
"cron.form.wakeModeHelp",
|
||||||
|
"cron.form.webhookHelp",
|
||||||
|
"cron.form.webhookPlaceholder",
|
||||||
|
"cron.form.webhookPost",
|
||||||
|
"cron.form.webhookUrl",
|
||||||
|
"cron.jobDetail.agent",
|
||||||
|
"cron.jobDetail.delivery",
|
||||||
|
"cron.jobDetail.prompt",
|
||||||
|
"cron.jobDetail.system",
|
||||||
|
"cron.jobList.allJobs",
|
||||||
|
"cron.jobList.clone",
|
||||||
|
"cron.jobList.disable",
|
||||||
|
"cron.jobList.disabled",
|
||||||
|
"cron.jobList.edit",
|
||||||
|
"cron.jobList.enable",
|
||||||
|
"cron.jobList.enabled",
|
||||||
|
"cron.jobList.history",
|
||||||
|
"cron.jobList.remove",
|
||||||
|
"cron.jobList.run",
|
||||||
|
"cron.jobList.selectJob",
|
||||||
|
"cron.jobs.all",
|
||||||
|
"cron.jobs.ascending",
|
||||||
|
"cron.jobs.descending",
|
||||||
|
"cron.jobs.direction",
|
||||||
|
"cron.jobs.enabled",
|
||||||
|
"cron.jobs.lastRun",
|
||||||
|
"cron.jobs.loading",
|
||||||
|
"cron.jobs.loadMore",
|
||||||
|
"cron.jobs.name",
|
||||||
|
"cron.jobs.nextRun",
|
||||||
|
"cron.jobs.noMatching",
|
||||||
|
"cron.jobs.recentlyUpdated",
|
||||||
|
"cron.jobs.reset",
|
||||||
|
"cron.jobs.schedule",
|
||||||
|
"cron.jobs.searchJobs",
|
||||||
|
"cron.jobs.searchPlaceholder",
|
||||||
|
"cron.jobs.shownOf",
|
||||||
|
"cron.jobs.sort",
|
||||||
|
"cron.jobs.subtitle",
|
||||||
|
"cron.jobs.title",
|
||||||
|
"cron.jobState.last",
|
||||||
|
"cron.jobState.next",
|
||||||
|
"cron.jobState.status",
|
||||||
|
"cron.runEntry.due",
|
||||||
|
"cron.runEntry.next",
|
||||||
|
"cron.runEntry.noSummary",
|
||||||
|
"cron.runEntry.openRunChat",
|
||||||
|
"cron.runEntry.runAt",
|
||||||
|
"cron.runs.allDelivery",
|
||||||
|
"cron.runs.allJobs",
|
||||||
|
"cron.runs.allStatuses",
|
||||||
|
"cron.runs.clear",
|
||||||
|
"cron.runs.delivery",
|
||||||
|
"cron.runs.deliveryDelivered",
|
||||||
|
"cron.runs.deliveryNotDelivered",
|
||||||
|
"cron.runs.deliveryNotRequested",
|
||||||
|
"cron.runs.deliveryUnknown",
|
||||||
|
"cron.runs.loadMore",
|
||||||
|
"cron.runs.newestFirst",
|
||||||
|
"cron.runs.noMatching",
|
||||||
|
"cron.runs.oldestFirst",
|
||||||
|
"cron.runs.runStatusError",
|
||||||
|
"cron.runs.runStatusOk",
|
||||||
|
"cron.runs.runStatusSkipped",
|
||||||
|
"cron.runs.runStatusUnknown",
|
||||||
|
"cron.runs.scope",
|
||||||
|
"cron.runs.searchPlaceholder",
|
||||||
|
"cron.runs.searchRuns",
|
||||||
|
"cron.runs.selectedJob",
|
||||||
|
"cron.runs.selectJobHint",
|
||||||
|
"cron.runs.status",
|
||||||
|
"cron.runs.subtitleAll",
|
||||||
|
"cron.runs.subtitleJob",
|
||||||
|
"cron.runs.title",
|
||||||
|
"cron.summary.enabled",
|
||||||
|
"cron.summary.jobs",
|
||||||
|
"cron.summary.nextWake",
|
||||||
|
"cron.summary.no",
|
||||||
|
"cron.summary.refresh",
|
||||||
|
"cron.summary.refreshing",
|
||||||
|
"cron.summary.yes",
|
||||||
|
"dreaming.advanced.description",
|
||||||
|
"dreaming.advanced.emptyGrounded",
|
||||||
|
"dreaming.advanced.emptyPromoted",
|
||||||
|
"dreaming.advanced.emptyShortTerm",
|
||||||
|
"dreaming.advanced.eyebrow",
|
||||||
|
"dreaming.advanced.originDailyLog",
|
||||||
|
"dreaming.advanced.originLive",
|
||||||
|
"dreaming.advanced.originMixed",
|
||||||
|
"dreaming.advanced.promotedDescription",
|
||||||
|
"dreaming.advanced.promotedTitle",
|
||||||
|
"dreaming.advanced.shortTermDescription",
|
||||||
|
"dreaming.advanced.shortTermTitle",
|
||||||
|
"dreaming.advanced.sortRecent",
|
||||||
|
"dreaming.advanced.sortSignals",
|
||||||
|
"dreaming.advanced.stagedDescription",
|
||||||
|
"dreaming.advanced.stagedTitle",
|
||||||
|
"dreaming.advanced.summaryFromDailyLog",
|
||||||
|
"dreaming.advanced.summaryPromotedToday",
|
||||||
|
"dreaming.advanced.summaryWaiting",
|
||||||
|
"dreaming.advanced.title",
|
||||||
|
"dreaming.advanced.updatedPrefix",
|
||||||
|
"dreaming.diary.newer",
|
||||||
|
"dreaming.diary.noDreamsHint",
|
||||||
|
"dreaming.diary.noDreamsYet",
|
||||||
|
"dreaming.diary.older",
|
||||||
|
"dreaming.diary.reload",
|
||||||
|
"dreaming.diary.reloading",
|
||||||
|
"dreaming.diary.title",
|
||||||
|
"dreaming.diary.waitingHint",
|
||||||
|
"dreaming.diary.waitingTitle",
|
||||||
|
"dreaming.header.off",
|
||||||
|
"dreaming.header.on",
|
||||||
|
"dreaming.header.refresh",
|
||||||
|
"dreaming.header.refreshing",
|
||||||
|
"dreaming.phase.deep",
|
||||||
|
"dreaming.phase.light",
|
||||||
|
"dreaming.phase.off",
|
||||||
|
"dreaming.phase.rem",
|
||||||
|
"dreaming.phrases.alphabetizingSubconscious",
|
||||||
|
"dreaming.phrases.compostingContext",
|
||||||
|
"dreaming.phrases.connectingDots",
|
||||||
|
"dreaming.phrases.consolidatingMemories",
|
||||||
|
"dreaming.phrases.defragmentingMindPalace",
|
||||||
|
"dreaming.phrases.dreamingEmbeddings",
|
||||||
|
"dreaming.phrases.filingLooseThoughts",
|
||||||
|
"dreaming.phrases.forgettingNoise",
|
||||||
|
"dreaming.phrases.indexingDay",
|
||||||
|
"dreaming.phrases.nurturingInsights",
|
||||||
|
"dreaming.phrases.promotingHunches",
|
||||||
|
"dreaming.phrases.reorganizingAttic",
|
||||||
|
"dreaming.phrases.replayingConversations",
|
||||||
|
"dreaming.phrases.simmeringIdeas",
|
||||||
|
"dreaming.phrases.tidyingKnowledgeGraph",
|
||||||
|
"dreaming.phrases.weavingShortTerm",
|
||||||
|
"dreaming.phrases.whisperingVectorStore",
|
||||||
|
"dreaming.restartConfirmation.confirm",
|
||||||
|
"dreaming.restartConfirmation.failed",
|
||||||
|
"dreaming.restartConfirmation.restarting",
|
||||||
|
"dreaming.restartConfirmation.subtitle",
|
||||||
|
"dreaming.restartConfirmation.title",
|
||||||
|
"dreaming.restartConfirmation.warning",
|
||||||
|
"dreaming.scene.backfill",
|
||||||
|
"dreaming.scene.clearGrounded",
|
||||||
|
"dreaming.scene.dedupeDiary",
|
||||||
|
"dreaming.scene.repairCache",
|
||||||
|
"dreaming.scene.reset",
|
||||||
|
"dreaming.scene.working",
|
||||||
|
"dreaming.stats.grounded",
|
||||||
|
"dreaming.stats.phaseHits",
|
||||||
|
"dreaming.stats.promoted",
|
||||||
|
"dreaming.stats.shortTerm",
|
||||||
|
"dreaming.stats.signals",
|
||||||
|
"dreaming.status.active",
|
||||||
|
"dreaming.status.idle",
|
||||||
|
"dreaming.status.nextSweepPrefix",
|
||||||
|
"dreaming.status.promotedSuffix",
|
||||||
|
"dreaming.tabs.advanced",
|
||||||
|
"dreaming.tabs.diary",
|
||||||
|
"dreaming.tabs.scene",
|
||||||
|
"dreaming.trace.emptyGrounded",
|
||||||
|
"dreaming.trace.emptyPromoted",
|
||||||
|
"dreaming.trace.emptyShortTerm",
|
||||||
|
"dreaming.trace.emptySignals",
|
||||||
|
"dreaming.trace.grounded",
|
||||||
|
"dreaming.trace.groundedLed",
|
||||||
|
"dreaming.trace.promoted",
|
||||||
|
"dreaming.trace.shortTerm",
|
||||||
|
"dreaming.trace.signals",
|
||||||
|
"instances.hideHosts",
|
||||||
|
"instances.lastInput",
|
||||||
|
"instances.noInstances",
|
||||||
|
"instances.reason",
|
||||||
|
"instances.showHosts",
|
||||||
|
"instances.subtitle",
|
||||||
|
"instances.title",
|
||||||
|
"instances.toggleHostVisibility",
|
||||||
|
"languages.ar",
|
||||||
|
"languages.de",
|
||||||
|
"languages.en",
|
||||||
|
"languages.es",
|
||||||
|
"languages.fa",
|
||||||
|
"languages.fr",
|
||||||
|
"languages.id",
|
||||||
|
"languages.it",
|
||||||
|
"languages.jaJP",
|
||||||
|
"languages.ko",
|
||||||
|
"languages.nl",
|
||||||
|
"languages.pl",
|
||||||
|
"languages.ptBR",
|
||||||
|
"languages.th",
|
||||||
|
"languages.tr",
|
||||||
|
"languages.uk",
|
||||||
|
"languages.vi",
|
||||||
|
"languages.zhCN",
|
||||||
|
"languages.zhTW",
|
||||||
|
"lazyView.errorSubtitle",
|
||||||
|
"lazyView.errorTitle",
|
||||||
|
"lazyView.loadingTitle",
|
||||||
|
"lazyView.retry",
|
||||||
|
"lazyView.unknownError",
|
||||||
|
"login.hidePassword",
|
||||||
|
"login.hideToken",
|
||||||
|
"login.passwordPlaceholder",
|
||||||
|
"login.showPassword",
|
||||||
|
"login.showToken",
|
||||||
|
"login.subtitle",
|
||||||
|
"login.togglePasswordVisibility",
|
||||||
|
"login.toggleTokenVisibility",
|
||||||
|
"nav.agent",
|
||||||
|
"nav.chat",
|
||||||
|
"nav.collapse",
|
||||||
|
"nav.control",
|
||||||
|
"nav.expand",
|
||||||
|
"nav.resize",
|
||||||
|
"nav.settings",
|
||||||
|
"nodes.binding.defaultBinding",
|
||||||
|
"nodes.binding.defaultBindingHint",
|
||||||
|
"nodes.binding.execNodeBinding",
|
||||||
|
"nodes.binding.execNodeBindingSubtitle",
|
||||||
|
"nodes.binding.formModeHint",
|
||||||
|
"nodes.binding.loadConfigHint",
|
||||||
|
"nodes.binding.node",
|
||||||
|
"overview.access.connectHint",
|
||||||
|
"overview.access.hidePassword",
|
||||||
|
"overview.access.hideToken",
|
||||||
|
"overview.access.language",
|
||||||
|
"overview.access.password",
|
||||||
|
"overview.access.passwordPlaceholder",
|
||||||
|
"overview.access.sessionKey",
|
||||||
|
"overview.access.showPassword",
|
||||||
|
"overview.access.showToken",
|
||||||
|
"overview.access.subtitle",
|
||||||
|
"overview.access.title",
|
||||||
|
"overview.access.togglePasswordVisibility",
|
||||||
|
"overview.access.toggleTokenVisibility",
|
||||||
|
"overview.access.token",
|
||||||
|
"overview.access.trustedProxy",
|
||||||
|
"overview.access.wsUrl",
|
||||||
|
"overview.attention.title",
|
||||||
|
"overview.auth.failed",
|
||||||
|
"overview.auth.required",
|
||||||
|
"overview.cards.cost",
|
||||||
|
"overview.cards.modelAuth",
|
||||||
|
"overview.cards.modelAuthAttentionExpiredDesc",
|
||||||
|
"overview.cards.modelAuthAttentionExpiredTitle",
|
||||||
|
"overview.cards.modelAuthAttentionExpiringEntry",
|
||||||
|
"overview.cards.modelAuthAttentionExpiringTitle",
|
||||||
|
"overview.cards.modelAuthExpired",
|
||||||
|
"overview.cards.modelAuthExpiresIn",
|
||||||
|
"overview.cards.modelAuthExpiring",
|
||||||
|
"overview.cards.modelAuthOk",
|
||||||
|
"overview.cards.modelAuthProviders",
|
||||||
|
"overview.cards.modelAuthUsageLeft",
|
||||||
|
"overview.cards.recentSessions",
|
||||||
|
"overview.cards.skills",
|
||||||
|
"overview.connection.authDocsLink",
|
||||||
|
"overview.connection.authDocsTitle",
|
||||||
|
"overview.connection.copyCommand",
|
||||||
|
"overview.connection.copyCommandAria",
|
||||||
|
"overview.connection.docsHint",
|
||||||
|
"overview.connection.docsLink",
|
||||||
|
"overview.connection.insecureHttpDocsLink",
|
||||||
|
"overview.connection.insecureHttpDocsTitle",
|
||||||
|
"overview.connection.step1",
|
||||||
|
"overview.connection.step2",
|
||||||
|
"overview.connection.step3",
|
||||||
|
"overview.connection.step4",
|
||||||
|
"overview.connection.tailscaleDocsLink",
|
||||||
|
"overview.connection.tailscaleDocsTitle",
|
||||||
|
"overview.connection.title",
|
||||||
|
"overview.eventLog.title",
|
||||||
|
"overview.insecure.hint",
|
||||||
|
"overview.insecure.stayHttp",
|
||||||
|
"overview.logTail.title",
|
||||||
|
"overview.notes.cronText",
|
||||||
|
"overview.notes.cronTitle",
|
||||||
|
"overview.notes.sessionText",
|
||||||
|
"overview.notes.sessionTitle",
|
||||||
|
"overview.notes.subtitle",
|
||||||
|
"overview.notes.tailscaleText",
|
||||||
|
"overview.notes.tailscaleTitle",
|
||||||
|
"overview.notes.title",
|
||||||
|
"overview.pairing.docsLink",
|
||||||
|
"overview.pairing.docsTitle",
|
||||||
|
"overview.pairing.hint",
|
||||||
|
"overview.pairing.metadataUpgradeSummary",
|
||||||
|
"overview.pairing.metadataUpgradeTitle",
|
||||||
|
"overview.pairing.mobileHint",
|
||||||
|
"overview.pairing.roleUpgradeSummary",
|
||||||
|
"overview.pairing.roleUpgradeTitle",
|
||||||
|
"overview.pairing.scopeUpgradeSummary",
|
||||||
|
"overview.pairing.scopeUpgradeTitle",
|
||||||
|
"overview.palette.categories.navigation",
|
||||||
|
"overview.palette.categories.search",
|
||||||
|
"overview.palette.categories.skills",
|
||||||
|
"overview.palette.descriptions.debugMode",
|
||||||
|
"overview.palette.descriptions.shellCommand",
|
||||||
|
"overview.palette.footer.close",
|
||||||
|
"overview.palette.footer.navigate",
|
||||||
|
"overview.palette.footer.select",
|
||||||
|
"overview.palette.items.agents",
|
||||||
|
"overview.palette.items.debugMode",
|
||||||
|
"overview.palette.items.overview",
|
||||||
|
"overview.palette.items.scheduled",
|
||||||
|
"overview.palette.items.sessions",
|
||||||
|
"overview.palette.items.settings",
|
||||||
|
"overview.palette.items.shellCommand",
|
||||||
|
"overview.palette.items.skills",
|
||||||
|
"overview.palette.noResults",
|
||||||
|
"overview.palette.placeholder",
|
||||||
|
"overview.quickActions.automation",
|
||||||
|
"overview.quickActions.newSession",
|
||||||
|
"overview.quickActions.refreshAll",
|
||||||
|
"overview.quickActions.terminal",
|
||||||
|
"overview.snapshot.channelsHint",
|
||||||
|
"overview.snapshot.lastChannelsRefresh",
|
||||||
|
"overview.snapshot.status",
|
||||||
|
"overview.snapshot.subtitle",
|
||||||
|
"overview.snapshot.tickInterval",
|
||||||
|
"overview.snapshot.title",
|
||||||
|
"overview.snapshot.uptime",
|
||||||
|
"overview.stats.cron",
|
||||||
|
"overview.stats.cronNext",
|
||||||
|
"overview.stats.instances",
|
||||||
|
"overview.stats.instancesHint",
|
||||||
|
"overview.stats.sessions",
|
||||||
|
"overview.stats.sessionsHint",
|
||||||
|
"subtitles.agents",
|
||||||
|
"subtitles.aiAgents",
|
||||||
|
"subtitles.appearance",
|
||||||
|
"subtitles.automation",
|
||||||
|
"subtitles.channels",
|
||||||
|
"subtitles.chat",
|
||||||
|
"subtitles.communications",
|
||||||
|
"subtitles.config",
|
||||||
|
"subtitles.cron",
|
||||||
|
"subtitles.debug",
|
||||||
|
"subtitles.dreams",
|
||||||
|
"subtitles.infrastructure",
|
||||||
|
"subtitles.instances",
|
||||||
|
"subtitles.logs",
|
||||||
|
"subtitles.nodes",
|
||||||
|
"subtitles.overview",
|
||||||
|
"subtitles.sessions",
|
||||||
|
"subtitles.skills",
|
||||||
|
"subtitles.usage",
|
||||||
|
"tabs.agents",
|
||||||
|
"tabs.aiAgents",
|
||||||
|
"tabs.appearance",
|
||||||
|
"tabs.automation",
|
||||||
|
"tabs.channels",
|
||||||
|
"tabs.chat",
|
||||||
|
"tabs.communications",
|
||||||
|
"tabs.config",
|
||||||
|
"tabs.cron",
|
||||||
|
"tabs.debug",
|
||||||
|
"tabs.dreams",
|
||||||
|
"tabs.infrastructure",
|
||||||
|
"tabs.instances",
|
||||||
|
"tabs.logs",
|
||||||
|
"tabs.nodes",
|
||||||
|
"tabs.overview",
|
||||||
|
"tabs.sessions",
|
||||||
|
"tabs.skills",
|
||||||
|
"tabs.usage",
|
||||||
|
"usage.breakdown.cacheRead",
|
||||||
|
"usage.breakdown.cacheWrite",
|
||||||
|
"usage.breakdown.costByType",
|
||||||
|
"usage.breakdown.input",
|
||||||
|
"usage.breakdown.output",
|
||||||
|
"usage.breakdown.tokensByType",
|
||||||
|
"usage.breakdown.total",
|
||||||
|
"usage.common.emptyValue",
|
||||||
|
"usage.common.unknown",
|
||||||
|
"usage.daily.byType",
|
||||||
|
"usage.daily.costTitle",
|
||||||
|
"usage.daily.title",
|
||||||
|
"usage.daily.tokensTitle",
|
||||||
|
"usage.daily.total",
|
||||||
|
"usage.details.assistantOutputTokens",
|
||||||
|
"usage.details.baseContextPerMessage",
|
||||||
|
"usage.details.close",
|
||||||
|
"usage.details.collapse",
|
||||||
|
"usage.details.collapseAll",
|
||||||
|
"usage.details.conversation",
|
||||||
|
"usage.details.cumulative",
|
||||||
|
"usage.details.duration",
|
||||||
|
"usage.details.expandAll",
|
||||||
|
"usage.details.files",
|
||||||
|
"usage.details.filtered",
|
||||||
|
"usage.details.hasTools",
|
||||||
|
"usage.details.modelMix",
|
||||||
|
"usage.details.noContextData",
|
||||||
|
"usage.details.noDataInRange",
|
||||||
|
"usage.details.noMessages",
|
||||||
|
"usage.details.noMessagesMatch",
|
||||||
|
"usage.details.noTimeline",
|
||||||
|
"usage.details.noUsageData",
|
||||||
|
"usage.details.of",
|
||||||
|
"usage.details.ofInput",
|
||||||
|
"usage.details.perTurn",
|
||||||
|
"usage.details.reset",
|
||||||
|
"usage.details.searchConversation",
|
||||||
|
"usage.details.skills",
|
||||||
|
"usage.details.system",
|
||||||
|
"usage.details.systemPromptBreakdown",
|
||||||
|
"usage.details.systemShort",
|
||||||
|
"usage.details.timelineFiltered",
|
||||||
|
"usage.details.tokensReadFromCache",
|
||||||
|
"usage.details.tokensWrittenToCache",
|
||||||
|
"usage.details.tool",
|
||||||
|
"usage.details.toolResult",
|
||||||
|
"usage.details.tools",
|
||||||
|
"usage.details.turnRange",
|
||||||
|
"usage.details.usageOverTime",
|
||||||
|
"usage.details.userToolInputTokens",
|
||||||
|
"usage.details.you",
|
||||||
|
"usage.empty.featureOverview",
|
||||||
|
"usage.empty.featureSessions",
|
||||||
|
"usage.empty.featureTimeline",
|
||||||
|
"usage.empty.hint",
|
||||||
|
"usage.empty.noData",
|
||||||
|
"usage.empty.subtitle",
|
||||||
|
"usage.empty.title",
|
||||||
|
"usage.export.dailyCsv",
|
||||||
|
"usage.export.json",
|
||||||
|
"usage.export.label",
|
||||||
|
"usage.export.sessionsCsv",
|
||||||
|
"usage.filters.agent",
|
||||||
|
"usage.filters.all",
|
||||||
|
"usage.filters.channel",
|
||||||
|
"usage.filters.clear",
|
||||||
|
"usage.filters.clearAll",
|
||||||
|
"usage.filters.days",
|
||||||
|
"usage.filters.daysCount",
|
||||||
|
"usage.filters.endDate",
|
||||||
|
"usage.filters.hours",
|
||||||
|
"usage.filters.hoursCount",
|
||||||
|
"usage.filters.model",
|
||||||
|
"usage.filters.pin",
|
||||||
|
"usage.filters.pinned",
|
||||||
|
"usage.filters.provider",
|
||||||
|
"usage.filters.remove",
|
||||||
|
"usage.filters.selectAll",
|
||||||
|
"usage.filters.session",
|
||||||
|
"usage.filters.sessionsCount",
|
||||||
|
"usage.filters.startDate",
|
||||||
|
"usage.filters.timeZone",
|
||||||
|
"usage.filters.timeZoneLocal",
|
||||||
|
"usage.filters.timeZoneUtc",
|
||||||
|
"usage.filters.title",
|
||||||
|
"usage.filters.to",
|
||||||
|
"usage.filters.tool",
|
||||||
|
"usage.filters.unpin",
|
||||||
|
"usage.loading.badge",
|
||||||
|
"usage.loading.title",
|
||||||
|
"usage.metrics.cost",
|
||||||
|
"usage.metrics.session",
|
||||||
|
"usage.metrics.sessions",
|
||||||
|
"usage.metrics.tokens",
|
||||||
|
"usage.mosaic.dayOfWeek",
|
||||||
|
"usage.mosaic.eightAm",
|
||||||
|
"usage.mosaic.eightPm",
|
||||||
|
"usage.mosaic.fourAm",
|
||||||
|
"usage.mosaic.fourPm",
|
||||||
|
"usage.mosaic.fri",
|
||||||
|
"usage.mosaic.legend",
|
||||||
|
"usage.mosaic.midnight",
|
||||||
|
"usage.mosaic.mon",
|
||||||
|
"usage.mosaic.noon",
|
||||||
|
"usage.mosaic.noTimelineData",
|
||||||
|
"usage.mosaic.sat",
|
||||||
|
"usage.mosaic.subtitle",
|
||||||
|
"usage.mosaic.subtitleEmpty",
|
||||||
|
"usage.mosaic.sun",
|
||||||
|
"usage.mosaic.thu",
|
||||||
|
"usage.mosaic.title",
|
||||||
|
"usage.mosaic.tue",
|
||||||
|
"usage.mosaic.wed",
|
||||||
|
"usage.overview.acrossMessages",
|
||||||
|
"usage.overview.assistant",
|
||||||
|
"usage.overview.avgCost",
|
||||||
|
"usage.overview.avgCostHint",
|
||||||
|
"usage.overview.avgCostHintMissing",
|
||||||
|
"usage.overview.avgSession",
|
||||||
|
"usage.overview.avgTokens",
|
||||||
|
"usage.overview.avgTokensHint",
|
||||||
|
"usage.overview.cached",
|
||||||
|
"usage.overview.cacheHint",
|
||||||
|
"usage.overview.cacheHitRate",
|
||||||
|
"usage.overview.calls",
|
||||||
|
"usage.overview.errorHint",
|
||||||
|
"usage.overview.errorRate",
|
||||||
|
"usage.overview.errors",
|
||||||
|
"usage.overview.errorsHint",
|
||||||
|
"usage.overview.messages",
|
||||||
|
"usage.overview.messagesAbbrev",
|
||||||
|
"usage.overview.messagesHint",
|
||||||
|
"usage.overview.noAgentData",
|
||||||
|
"usage.overview.noChannelData",
|
||||||
|
"usage.overview.noErrorData",
|
||||||
|
"usage.overview.noModelData",
|
||||||
|
"usage.overview.noProviderData",
|
||||||
|
"usage.overview.noToolCalls",
|
||||||
|
"usage.overview.peakErrorDays",
|
||||||
|
"usage.overview.peakErrorHours",
|
||||||
|
"usage.overview.perMinute",
|
||||||
|
"usage.overview.prompt",
|
||||||
|
"usage.overview.sessions",
|
||||||
|
"usage.overview.sessionsHint",
|
||||||
|
"usage.overview.sessionsInRange",
|
||||||
|
"usage.overview.throughput",
|
||||||
|
"usage.overview.throughputHint",
|
||||||
|
"usage.overview.title",
|
||||||
|
"usage.overview.tokensPerMinute",
|
||||||
|
"usage.overview.toolCalls",
|
||||||
|
"usage.overview.toolCallsHint",
|
||||||
|
"usage.overview.toolResults",
|
||||||
|
"usage.overview.toolsUsed",
|
||||||
|
"usage.overview.topAgents",
|
||||||
|
"usage.overview.topChannels",
|
||||||
|
"usage.overview.topModels",
|
||||||
|
"usage.overview.topProviders",
|
||||||
|
"usage.overview.topTools",
|
||||||
|
"usage.overview.user",
|
||||||
|
"usage.page.subtitle",
|
||||||
|
"usage.presets.last30d",
|
||||||
|
"usage.presets.last7d",
|
||||||
|
"usage.presets.today",
|
||||||
|
"usage.query.apply",
|
||||||
|
"usage.query.inRange",
|
||||||
|
"usage.query.matching",
|
||||||
|
"usage.query.placeholder",
|
||||||
|
"usage.query.tip",
|
||||||
|
"usage.sessions.all",
|
||||||
|
"usage.sessions.ascending",
|
||||||
|
"usage.sessions.avg",
|
||||||
|
"usage.sessions.clearSelection",
|
||||||
|
"usage.sessions.copy",
|
||||||
|
"usage.sessions.copyName",
|
||||||
|
"usage.sessions.descending",
|
||||||
|
"usage.sessions.limitReached",
|
||||||
|
"usage.sessions.more",
|
||||||
|
"usage.sessions.noneInRange",
|
||||||
|
"usage.sessions.noRecent",
|
||||||
|
"usage.sessions.recent",
|
||||||
|
"usage.sessions.recentShort",
|
||||||
|
"usage.sessions.selected",
|
||||||
|
"usage.sessions.shown",
|
||||||
|
"usage.sessions.sort",
|
||||||
|
"usage.sessions.title",
|
||||||
|
"usage.sessions.total"
|
||||||
|
],
|
||||||
|
"generatedAt": "2026-04-29T13:38:10.208Z",
|
||||||
|
"locale": "ar",
|
||||||
|
"model": "",
|
||||||
|
"provider": "",
|
||||||
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
|
"totalKeys": 768,
|
||||||
|
"translatedKeys": 0,
|
||||||
|
"workflow": 1
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"fallbackKeys": [],
|
"fallbackKeys": ["languages.ar", "languages.fa", "languages.it", "languages.nl", "languages.vi"],
|
||||||
"generatedAt": "2026-04-27T12:10:47.426Z",
|
"generatedAt": "2026-04-29T17:07:49.950Z",
|
||||||
"locale": "de",
|
"locale": "de",
|
||||||
"model": "gpt-5.5",
|
"model": "gpt-5.5",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"sourceHash": "5e92fbfbb7e3026ea5f3a0835d933c9ce79369a85b1cf0628b1c86369f1c822d",
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
"totalKeys": 763,
|
"totalKeys": 768,
|
||||||
"translatedKeys": 763,
|
"translatedKeys": 763,
|
||||||
"workflow": 1
|
"workflow": 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"fallbackKeys": [],
|
"fallbackKeys": ["languages.ar", "languages.fa", "languages.it", "languages.nl", "languages.vi"],
|
||||||
"generatedAt": "2026-04-27T12:11:40.310Z",
|
"generatedAt": "2026-04-29T17:07:51.405Z",
|
||||||
"locale": "es",
|
"locale": "es",
|
||||||
"model": "gpt-5.5",
|
"model": "gpt-5.5",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"sourceHash": "5e92fbfbb7e3026ea5f3a0835d933c9ce79369a85b1cf0628b1c86369f1c822d",
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
"totalKeys": 763,
|
"totalKeys": 768,
|
||||||
"translatedKeys": 763,
|
"translatedKeys": 763,
|
||||||
"workflow": 1
|
"workflow": 1
|
||||||
}
|
}
|
||||||
|
|||||||
780
ui/src/i18n/.i18n/fa.meta.json
Normal file
780
ui/src/i18n/.i18n/fa.meta.json
Normal file
@@ -0,0 +1,780 @@
|
|||||||
|
{
|
||||||
|
"fallbackKeys": [
|
||||||
|
"agentTools.builtIn",
|
||||||
|
"agentTools.channel",
|
||||||
|
"agentTools.channelSource",
|
||||||
|
"agentTools.connected",
|
||||||
|
"agentTools.connectedSource",
|
||||||
|
"channels.gatewayUrlConfirmation.subtitle",
|
||||||
|
"channels.gatewayUrlConfirmation.title",
|
||||||
|
"channels.gatewayUrlConfirmation.warning",
|
||||||
|
"channels.generic.subtitle",
|
||||||
|
"channels.health.noSnapshotYet",
|
||||||
|
"channels.health.subtitle",
|
||||||
|
"channels.health.title",
|
||||||
|
"channels.nostr.about",
|
||||||
|
"channels.nostr.account",
|
||||||
|
"channels.nostr.advanced",
|
||||||
|
"channels.nostr.avatarHelp",
|
||||||
|
"channels.nostr.avatarUrl",
|
||||||
|
"channels.nostr.bannerHelp",
|
||||||
|
"channels.nostr.bannerUrl",
|
||||||
|
"channels.nostr.bio",
|
||||||
|
"channels.nostr.bioHelp",
|
||||||
|
"channels.nostr.bioPlaceholder",
|
||||||
|
"channels.nostr.displayName",
|
||||||
|
"channels.nostr.displayNameHelp",
|
||||||
|
"channels.nostr.editProfile",
|
||||||
|
"channels.nostr.lightningAddress",
|
||||||
|
"channels.nostr.lightningHelp",
|
||||||
|
"channels.nostr.name",
|
||||||
|
"channels.nostr.nip05Help",
|
||||||
|
"channels.nostr.nip05Identifier",
|
||||||
|
"channels.nostr.noProfile",
|
||||||
|
"channels.nostr.noProfileHint",
|
||||||
|
"channels.nostr.profile",
|
||||||
|
"channels.nostr.profilePicture",
|
||||||
|
"channels.nostr.profilePicturePreview",
|
||||||
|
"channels.nostr.username",
|
||||||
|
"channels.nostr.usernameHelp",
|
||||||
|
"channels.nostr.website",
|
||||||
|
"channels.nostr.websiteHelp",
|
||||||
|
"chat.disconnected",
|
||||||
|
"chat.focusToggle",
|
||||||
|
"chat.hideCronSessions",
|
||||||
|
"chat.onboardingDisabled",
|
||||||
|
"chat.refreshTitle",
|
||||||
|
"chat.showCronSessions",
|
||||||
|
"chat.showCronSessionsHidden",
|
||||||
|
"chat.thinkingToggle",
|
||||||
|
"chat.toolCallsToggle",
|
||||||
|
"common.active",
|
||||||
|
"common.audience",
|
||||||
|
"common.authAge",
|
||||||
|
"common.baseUrl",
|
||||||
|
"common.call",
|
||||||
|
"common.cancel",
|
||||||
|
"common.configured",
|
||||||
|
"common.confirm",
|
||||||
|
"common.connect",
|
||||||
|
"common.connected",
|
||||||
|
"common.credential",
|
||||||
|
"common.disabled",
|
||||||
|
"common.docs",
|
||||||
|
"common.enabled",
|
||||||
|
"common.health",
|
||||||
|
"common.hideAdvanced",
|
||||||
|
"common.importFromRelays",
|
||||||
|
"common.importing",
|
||||||
|
"common.lastConnect",
|
||||||
|
"common.lastInbound",
|
||||||
|
"common.lastMessage",
|
||||||
|
"common.lastProbe",
|
||||||
|
"common.lastStart",
|
||||||
|
"common.linked",
|
||||||
|
"common.loadApprovals",
|
||||||
|
"common.loadConfig",
|
||||||
|
"common.loading",
|
||||||
|
"common.logout",
|
||||||
|
"common.mode",
|
||||||
|
"common.na",
|
||||||
|
"common.no",
|
||||||
|
"common.offline",
|
||||||
|
"common.ok",
|
||||||
|
"common.online",
|
||||||
|
"common.probe",
|
||||||
|
"common.probeFailed",
|
||||||
|
"common.probeOk",
|
||||||
|
"common.publicKey",
|
||||||
|
"common.refresh",
|
||||||
|
"common.refreshing",
|
||||||
|
"common.relink",
|
||||||
|
"common.reload",
|
||||||
|
"common.reloadConfig",
|
||||||
|
"common.resources",
|
||||||
|
"common.running",
|
||||||
|
"common.save",
|
||||||
|
"common.saveAndPublish",
|
||||||
|
"common.saving",
|
||||||
|
"common.search",
|
||||||
|
"common.secondsAgo",
|
||||||
|
"common.settingsSections",
|
||||||
|
"common.showAdvanced",
|
||||||
|
"common.showQr",
|
||||||
|
"common.theme",
|
||||||
|
"common.unsavedChanges",
|
||||||
|
"common.unselect",
|
||||||
|
"common.version",
|
||||||
|
"common.waitForScan",
|
||||||
|
"common.working",
|
||||||
|
"common.yes",
|
||||||
|
"cron.errors.agentMessageRequired",
|
||||||
|
"cron.errors.agentMessageRequiredShort",
|
||||||
|
"cron.errors.cronExprRequired",
|
||||||
|
"cron.errors.cronExprRequiredShort",
|
||||||
|
"cron.errors.everyAmountInvalid",
|
||||||
|
"cron.errors.invalidIntervalAmount",
|
||||||
|
"cron.errors.invalidRunTime",
|
||||||
|
"cron.errors.invalidStaggerAmount",
|
||||||
|
"cron.errors.nameRequired",
|
||||||
|
"cron.errors.nameRequiredShort",
|
||||||
|
"cron.errors.scheduleAtInvalid",
|
||||||
|
"cron.errors.staggerAmountInvalid",
|
||||||
|
"cron.errors.systemEventTextRequired",
|
||||||
|
"cron.errors.systemTextRequired",
|
||||||
|
"cron.errors.timeoutInvalid",
|
||||||
|
"cron.errors.webhookUrlInvalid",
|
||||||
|
"cron.errors.webhookUrlRequired",
|
||||||
|
"cron.form.addJob",
|
||||||
|
"cron.form.advanced",
|
||||||
|
"cron.form.advancedHelp",
|
||||||
|
"cron.form.agentHelp",
|
||||||
|
"cron.form.agentId",
|
||||||
|
"cron.form.agentPlaceholder",
|
||||||
|
"cron.form.agentTurn",
|
||||||
|
"cron.form.agentTurnHelp",
|
||||||
|
"cron.form.announceDefault",
|
||||||
|
"cron.form.assistantTaskPrompt",
|
||||||
|
"cron.form.at",
|
||||||
|
"cron.form.basics",
|
||||||
|
"cron.form.basicsSub",
|
||||||
|
"cron.form.bestEffortDelivery",
|
||||||
|
"cron.form.bestEffortHelp",
|
||||||
|
"cron.form.cancel",
|
||||||
|
"cron.form.cantAddYet",
|
||||||
|
"cron.form.channel",
|
||||||
|
"cron.form.channelHelp",
|
||||||
|
"cron.form.clearAgentHelp",
|
||||||
|
"cron.form.clearAgentOverride",
|
||||||
|
"cron.form.createSubtitle",
|
||||||
|
"cron.form.cronOption",
|
||||||
|
"cron.form.days",
|
||||||
|
"cron.form.deleteAfterRun",
|
||||||
|
"cron.form.deleteAfterRunHelp",
|
||||||
|
"cron.form.deliveryHelp",
|
||||||
|
"cron.form.deliverySection",
|
||||||
|
"cron.form.deliverySub",
|
||||||
|
"cron.form.description",
|
||||||
|
"cron.form.descriptionPlaceholder",
|
||||||
|
"cron.form.editJob",
|
||||||
|
"cron.form.every",
|
||||||
|
"cron.form.everyAmountPlaceholder",
|
||||||
|
"cron.form.exactTiming",
|
||||||
|
"cron.form.exactTimingHelp",
|
||||||
|
"cron.form.execution",
|
||||||
|
"cron.form.executionSub",
|
||||||
|
"cron.form.expression",
|
||||||
|
"cron.form.expressionPlaceholder",
|
||||||
|
"cron.form.fieldName",
|
||||||
|
"cron.form.fillRequired",
|
||||||
|
"cron.form.fixFields",
|
||||||
|
"cron.form.fixFieldsPlural",
|
||||||
|
"cron.form.hours",
|
||||||
|
"cron.form.isolated",
|
||||||
|
"cron.form.jitterHelp",
|
||||||
|
"cron.form.main",
|
||||||
|
"cron.form.mainTimelineMessage",
|
||||||
|
"cron.form.minutes",
|
||||||
|
"cron.form.model",
|
||||||
|
"cron.form.modelHelp",
|
||||||
|
"cron.form.modelPlaceholder",
|
||||||
|
"cron.form.namePlaceholder",
|
||||||
|
"cron.form.newJob",
|
||||||
|
"cron.form.nextHeartbeat",
|
||||||
|
"cron.form.noneInternal",
|
||||||
|
"cron.form.now",
|
||||||
|
"cron.form.payloadKind",
|
||||||
|
"cron.form.required",
|
||||||
|
"cron.form.requiredSr",
|
||||||
|
"cron.form.resultDelivery",
|
||||||
|
"cron.form.runAt",
|
||||||
|
"cron.form.saveChanges",
|
||||||
|
"cron.form.saving",
|
||||||
|
"cron.form.schedule",
|
||||||
|
"cron.form.scheduleSub",
|
||||||
|
"cron.form.seconds",
|
||||||
|
"cron.form.session",
|
||||||
|
"cron.form.sessionHelp",
|
||||||
|
"cron.form.staggerPlaceholder",
|
||||||
|
"cron.form.staggerUnit",
|
||||||
|
"cron.form.staggerWindow",
|
||||||
|
"cron.form.systemEvent",
|
||||||
|
"cron.form.systemEventHelp",
|
||||||
|
"cron.form.thinking",
|
||||||
|
"cron.form.thinkingHelp",
|
||||||
|
"cron.form.thinkingPlaceholder",
|
||||||
|
"cron.form.timeoutHelp",
|
||||||
|
"cron.form.timeoutPlaceholder",
|
||||||
|
"cron.form.timeoutSeconds",
|
||||||
|
"cron.form.timezoneHelp",
|
||||||
|
"cron.form.timezoneOptional",
|
||||||
|
"cron.form.timezonePlaceholder",
|
||||||
|
"cron.form.to",
|
||||||
|
"cron.form.toHelp",
|
||||||
|
"cron.form.toPlaceholder",
|
||||||
|
"cron.form.unit",
|
||||||
|
"cron.form.updateSubtitle",
|
||||||
|
"cron.form.wakeMode",
|
||||||
|
"cron.form.wakeModeHelp",
|
||||||
|
"cron.form.webhookHelp",
|
||||||
|
"cron.form.webhookPlaceholder",
|
||||||
|
"cron.form.webhookPost",
|
||||||
|
"cron.form.webhookUrl",
|
||||||
|
"cron.jobDetail.agent",
|
||||||
|
"cron.jobDetail.delivery",
|
||||||
|
"cron.jobDetail.prompt",
|
||||||
|
"cron.jobDetail.system",
|
||||||
|
"cron.jobList.allJobs",
|
||||||
|
"cron.jobList.clone",
|
||||||
|
"cron.jobList.disable",
|
||||||
|
"cron.jobList.disabled",
|
||||||
|
"cron.jobList.edit",
|
||||||
|
"cron.jobList.enable",
|
||||||
|
"cron.jobList.enabled",
|
||||||
|
"cron.jobList.history",
|
||||||
|
"cron.jobList.remove",
|
||||||
|
"cron.jobList.run",
|
||||||
|
"cron.jobList.selectJob",
|
||||||
|
"cron.jobs.all",
|
||||||
|
"cron.jobs.ascending",
|
||||||
|
"cron.jobs.descending",
|
||||||
|
"cron.jobs.direction",
|
||||||
|
"cron.jobs.enabled",
|
||||||
|
"cron.jobs.lastRun",
|
||||||
|
"cron.jobs.loading",
|
||||||
|
"cron.jobs.loadMore",
|
||||||
|
"cron.jobs.name",
|
||||||
|
"cron.jobs.nextRun",
|
||||||
|
"cron.jobs.noMatching",
|
||||||
|
"cron.jobs.recentlyUpdated",
|
||||||
|
"cron.jobs.reset",
|
||||||
|
"cron.jobs.schedule",
|
||||||
|
"cron.jobs.searchJobs",
|
||||||
|
"cron.jobs.searchPlaceholder",
|
||||||
|
"cron.jobs.shownOf",
|
||||||
|
"cron.jobs.sort",
|
||||||
|
"cron.jobs.subtitle",
|
||||||
|
"cron.jobs.title",
|
||||||
|
"cron.jobState.last",
|
||||||
|
"cron.jobState.next",
|
||||||
|
"cron.jobState.status",
|
||||||
|
"cron.runEntry.due",
|
||||||
|
"cron.runEntry.next",
|
||||||
|
"cron.runEntry.noSummary",
|
||||||
|
"cron.runEntry.openRunChat",
|
||||||
|
"cron.runEntry.runAt",
|
||||||
|
"cron.runs.allDelivery",
|
||||||
|
"cron.runs.allJobs",
|
||||||
|
"cron.runs.allStatuses",
|
||||||
|
"cron.runs.clear",
|
||||||
|
"cron.runs.delivery",
|
||||||
|
"cron.runs.deliveryDelivered",
|
||||||
|
"cron.runs.deliveryNotDelivered",
|
||||||
|
"cron.runs.deliveryNotRequested",
|
||||||
|
"cron.runs.deliveryUnknown",
|
||||||
|
"cron.runs.loadMore",
|
||||||
|
"cron.runs.newestFirst",
|
||||||
|
"cron.runs.noMatching",
|
||||||
|
"cron.runs.oldestFirst",
|
||||||
|
"cron.runs.runStatusError",
|
||||||
|
"cron.runs.runStatusOk",
|
||||||
|
"cron.runs.runStatusSkipped",
|
||||||
|
"cron.runs.runStatusUnknown",
|
||||||
|
"cron.runs.scope",
|
||||||
|
"cron.runs.searchPlaceholder",
|
||||||
|
"cron.runs.searchRuns",
|
||||||
|
"cron.runs.selectedJob",
|
||||||
|
"cron.runs.selectJobHint",
|
||||||
|
"cron.runs.status",
|
||||||
|
"cron.runs.subtitleAll",
|
||||||
|
"cron.runs.subtitleJob",
|
||||||
|
"cron.runs.title",
|
||||||
|
"cron.summary.enabled",
|
||||||
|
"cron.summary.jobs",
|
||||||
|
"cron.summary.nextWake",
|
||||||
|
"cron.summary.no",
|
||||||
|
"cron.summary.refresh",
|
||||||
|
"cron.summary.refreshing",
|
||||||
|
"cron.summary.yes",
|
||||||
|
"dreaming.advanced.description",
|
||||||
|
"dreaming.advanced.emptyGrounded",
|
||||||
|
"dreaming.advanced.emptyPromoted",
|
||||||
|
"dreaming.advanced.emptyShortTerm",
|
||||||
|
"dreaming.advanced.eyebrow",
|
||||||
|
"dreaming.advanced.originDailyLog",
|
||||||
|
"dreaming.advanced.originLive",
|
||||||
|
"dreaming.advanced.originMixed",
|
||||||
|
"dreaming.advanced.promotedDescription",
|
||||||
|
"dreaming.advanced.promotedTitle",
|
||||||
|
"dreaming.advanced.shortTermDescription",
|
||||||
|
"dreaming.advanced.shortTermTitle",
|
||||||
|
"dreaming.advanced.sortRecent",
|
||||||
|
"dreaming.advanced.sortSignals",
|
||||||
|
"dreaming.advanced.stagedDescription",
|
||||||
|
"dreaming.advanced.stagedTitle",
|
||||||
|
"dreaming.advanced.summaryFromDailyLog",
|
||||||
|
"dreaming.advanced.summaryPromotedToday",
|
||||||
|
"dreaming.advanced.summaryWaiting",
|
||||||
|
"dreaming.advanced.title",
|
||||||
|
"dreaming.advanced.updatedPrefix",
|
||||||
|
"dreaming.diary.newer",
|
||||||
|
"dreaming.diary.noDreamsHint",
|
||||||
|
"dreaming.diary.noDreamsYet",
|
||||||
|
"dreaming.diary.older",
|
||||||
|
"dreaming.diary.reload",
|
||||||
|
"dreaming.diary.reloading",
|
||||||
|
"dreaming.diary.title",
|
||||||
|
"dreaming.diary.waitingHint",
|
||||||
|
"dreaming.diary.waitingTitle",
|
||||||
|
"dreaming.header.off",
|
||||||
|
"dreaming.header.on",
|
||||||
|
"dreaming.header.refresh",
|
||||||
|
"dreaming.header.refreshing",
|
||||||
|
"dreaming.phase.deep",
|
||||||
|
"dreaming.phase.light",
|
||||||
|
"dreaming.phase.off",
|
||||||
|
"dreaming.phase.rem",
|
||||||
|
"dreaming.phrases.alphabetizingSubconscious",
|
||||||
|
"dreaming.phrases.compostingContext",
|
||||||
|
"dreaming.phrases.connectingDots",
|
||||||
|
"dreaming.phrases.consolidatingMemories",
|
||||||
|
"dreaming.phrases.defragmentingMindPalace",
|
||||||
|
"dreaming.phrases.dreamingEmbeddings",
|
||||||
|
"dreaming.phrases.filingLooseThoughts",
|
||||||
|
"dreaming.phrases.forgettingNoise",
|
||||||
|
"dreaming.phrases.indexingDay",
|
||||||
|
"dreaming.phrases.nurturingInsights",
|
||||||
|
"dreaming.phrases.promotingHunches",
|
||||||
|
"dreaming.phrases.reorganizingAttic",
|
||||||
|
"dreaming.phrases.replayingConversations",
|
||||||
|
"dreaming.phrases.simmeringIdeas",
|
||||||
|
"dreaming.phrases.tidyingKnowledgeGraph",
|
||||||
|
"dreaming.phrases.weavingShortTerm",
|
||||||
|
"dreaming.phrases.whisperingVectorStore",
|
||||||
|
"dreaming.restartConfirmation.confirm",
|
||||||
|
"dreaming.restartConfirmation.failed",
|
||||||
|
"dreaming.restartConfirmation.restarting",
|
||||||
|
"dreaming.restartConfirmation.subtitle",
|
||||||
|
"dreaming.restartConfirmation.title",
|
||||||
|
"dreaming.restartConfirmation.warning",
|
||||||
|
"dreaming.scene.backfill",
|
||||||
|
"dreaming.scene.clearGrounded",
|
||||||
|
"dreaming.scene.dedupeDiary",
|
||||||
|
"dreaming.scene.repairCache",
|
||||||
|
"dreaming.scene.reset",
|
||||||
|
"dreaming.scene.working",
|
||||||
|
"dreaming.stats.grounded",
|
||||||
|
"dreaming.stats.phaseHits",
|
||||||
|
"dreaming.stats.promoted",
|
||||||
|
"dreaming.stats.shortTerm",
|
||||||
|
"dreaming.stats.signals",
|
||||||
|
"dreaming.status.active",
|
||||||
|
"dreaming.status.idle",
|
||||||
|
"dreaming.status.nextSweepPrefix",
|
||||||
|
"dreaming.status.promotedSuffix",
|
||||||
|
"dreaming.tabs.advanced",
|
||||||
|
"dreaming.tabs.diary",
|
||||||
|
"dreaming.tabs.scene",
|
||||||
|
"dreaming.trace.emptyGrounded",
|
||||||
|
"dreaming.trace.emptyPromoted",
|
||||||
|
"dreaming.trace.emptyShortTerm",
|
||||||
|
"dreaming.trace.emptySignals",
|
||||||
|
"dreaming.trace.grounded",
|
||||||
|
"dreaming.trace.groundedLed",
|
||||||
|
"dreaming.trace.promoted",
|
||||||
|
"dreaming.trace.shortTerm",
|
||||||
|
"dreaming.trace.signals",
|
||||||
|
"instances.hideHosts",
|
||||||
|
"instances.lastInput",
|
||||||
|
"instances.noInstances",
|
||||||
|
"instances.reason",
|
||||||
|
"instances.showHosts",
|
||||||
|
"instances.subtitle",
|
||||||
|
"instances.title",
|
||||||
|
"instances.toggleHostVisibility",
|
||||||
|
"languages.ar",
|
||||||
|
"languages.de",
|
||||||
|
"languages.en",
|
||||||
|
"languages.es",
|
||||||
|
"languages.fa",
|
||||||
|
"languages.fr",
|
||||||
|
"languages.id",
|
||||||
|
"languages.it",
|
||||||
|
"languages.jaJP",
|
||||||
|
"languages.ko",
|
||||||
|
"languages.nl",
|
||||||
|
"languages.pl",
|
||||||
|
"languages.ptBR",
|
||||||
|
"languages.th",
|
||||||
|
"languages.tr",
|
||||||
|
"languages.uk",
|
||||||
|
"languages.vi",
|
||||||
|
"languages.zhCN",
|
||||||
|
"languages.zhTW",
|
||||||
|
"lazyView.errorSubtitle",
|
||||||
|
"lazyView.errorTitle",
|
||||||
|
"lazyView.loadingTitle",
|
||||||
|
"lazyView.retry",
|
||||||
|
"lazyView.unknownError",
|
||||||
|
"login.hidePassword",
|
||||||
|
"login.hideToken",
|
||||||
|
"login.passwordPlaceholder",
|
||||||
|
"login.showPassword",
|
||||||
|
"login.showToken",
|
||||||
|
"login.subtitle",
|
||||||
|
"login.togglePasswordVisibility",
|
||||||
|
"login.toggleTokenVisibility",
|
||||||
|
"nav.agent",
|
||||||
|
"nav.chat",
|
||||||
|
"nav.collapse",
|
||||||
|
"nav.control",
|
||||||
|
"nav.expand",
|
||||||
|
"nav.resize",
|
||||||
|
"nav.settings",
|
||||||
|
"nodes.binding.defaultBinding",
|
||||||
|
"nodes.binding.defaultBindingHint",
|
||||||
|
"nodes.binding.execNodeBinding",
|
||||||
|
"nodes.binding.execNodeBindingSubtitle",
|
||||||
|
"nodes.binding.formModeHint",
|
||||||
|
"nodes.binding.loadConfigHint",
|
||||||
|
"nodes.binding.node",
|
||||||
|
"overview.access.connectHint",
|
||||||
|
"overview.access.hidePassword",
|
||||||
|
"overview.access.hideToken",
|
||||||
|
"overview.access.language",
|
||||||
|
"overview.access.password",
|
||||||
|
"overview.access.passwordPlaceholder",
|
||||||
|
"overview.access.sessionKey",
|
||||||
|
"overview.access.showPassword",
|
||||||
|
"overview.access.showToken",
|
||||||
|
"overview.access.subtitle",
|
||||||
|
"overview.access.title",
|
||||||
|
"overview.access.togglePasswordVisibility",
|
||||||
|
"overview.access.toggleTokenVisibility",
|
||||||
|
"overview.access.token",
|
||||||
|
"overview.access.trustedProxy",
|
||||||
|
"overview.access.wsUrl",
|
||||||
|
"overview.attention.title",
|
||||||
|
"overview.auth.failed",
|
||||||
|
"overview.auth.required",
|
||||||
|
"overview.cards.cost",
|
||||||
|
"overview.cards.modelAuth",
|
||||||
|
"overview.cards.modelAuthAttentionExpiredDesc",
|
||||||
|
"overview.cards.modelAuthAttentionExpiredTitle",
|
||||||
|
"overview.cards.modelAuthAttentionExpiringEntry",
|
||||||
|
"overview.cards.modelAuthAttentionExpiringTitle",
|
||||||
|
"overview.cards.modelAuthExpired",
|
||||||
|
"overview.cards.modelAuthExpiresIn",
|
||||||
|
"overview.cards.modelAuthExpiring",
|
||||||
|
"overview.cards.modelAuthOk",
|
||||||
|
"overview.cards.modelAuthProviders",
|
||||||
|
"overview.cards.modelAuthUsageLeft",
|
||||||
|
"overview.cards.recentSessions",
|
||||||
|
"overview.cards.skills",
|
||||||
|
"overview.connection.authDocsLink",
|
||||||
|
"overview.connection.authDocsTitle",
|
||||||
|
"overview.connection.copyCommand",
|
||||||
|
"overview.connection.copyCommandAria",
|
||||||
|
"overview.connection.docsHint",
|
||||||
|
"overview.connection.docsLink",
|
||||||
|
"overview.connection.insecureHttpDocsLink",
|
||||||
|
"overview.connection.insecureHttpDocsTitle",
|
||||||
|
"overview.connection.step1",
|
||||||
|
"overview.connection.step2",
|
||||||
|
"overview.connection.step3",
|
||||||
|
"overview.connection.step4",
|
||||||
|
"overview.connection.tailscaleDocsLink",
|
||||||
|
"overview.connection.tailscaleDocsTitle",
|
||||||
|
"overview.connection.title",
|
||||||
|
"overview.eventLog.title",
|
||||||
|
"overview.insecure.hint",
|
||||||
|
"overview.insecure.stayHttp",
|
||||||
|
"overview.logTail.title",
|
||||||
|
"overview.notes.cronText",
|
||||||
|
"overview.notes.cronTitle",
|
||||||
|
"overview.notes.sessionText",
|
||||||
|
"overview.notes.sessionTitle",
|
||||||
|
"overview.notes.subtitle",
|
||||||
|
"overview.notes.tailscaleText",
|
||||||
|
"overview.notes.tailscaleTitle",
|
||||||
|
"overview.notes.title",
|
||||||
|
"overview.pairing.docsLink",
|
||||||
|
"overview.pairing.docsTitle",
|
||||||
|
"overview.pairing.hint",
|
||||||
|
"overview.pairing.metadataUpgradeSummary",
|
||||||
|
"overview.pairing.metadataUpgradeTitle",
|
||||||
|
"overview.pairing.mobileHint",
|
||||||
|
"overview.pairing.roleUpgradeSummary",
|
||||||
|
"overview.pairing.roleUpgradeTitle",
|
||||||
|
"overview.pairing.scopeUpgradeSummary",
|
||||||
|
"overview.pairing.scopeUpgradeTitle",
|
||||||
|
"overview.palette.categories.navigation",
|
||||||
|
"overview.palette.categories.search",
|
||||||
|
"overview.palette.categories.skills",
|
||||||
|
"overview.palette.descriptions.debugMode",
|
||||||
|
"overview.palette.descriptions.shellCommand",
|
||||||
|
"overview.palette.footer.close",
|
||||||
|
"overview.palette.footer.navigate",
|
||||||
|
"overview.palette.footer.select",
|
||||||
|
"overview.palette.items.agents",
|
||||||
|
"overview.palette.items.debugMode",
|
||||||
|
"overview.palette.items.overview",
|
||||||
|
"overview.palette.items.scheduled",
|
||||||
|
"overview.palette.items.sessions",
|
||||||
|
"overview.palette.items.settings",
|
||||||
|
"overview.palette.items.shellCommand",
|
||||||
|
"overview.palette.items.skills",
|
||||||
|
"overview.palette.noResults",
|
||||||
|
"overview.palette.placeholder",
|
||||||
|
"overview.quickActions.automation",
|
||||||
|
"overview.quickActions.newSession",
|
||||||
|
"overview.quickActions.refreshAll",
|
||||||
|
"overview.quickActions.terminal",
|
||||||
|
"overview.snapshot.channelsHint",
|
||||||
|
"overview.snapshot.lastChannelsRefresh",
|
||||||
|
"overview.snapshot.status",
|
||||||
|
"overview.snapshot.subtitle",
|
||||||
|
"overview.snapshot.tickInterval",
|
||||||
|
"overview.snapshot.title",
|
||||||
|
"overview.snapshot.uptime",
|
||||||
|
"overview.stats.cron",
|
||||||
|
"overview.stats.cronNext",
|
||||||
|
"overview.stats.instances",
|
||||||
|
"overview.stats.instancesHint",
|
||||||
|
"overview.stats.sessions",
|
||||||
|
"overview.stats.sessionsHint",
|
||||||
|
"subtitles.agents",
|
||||||
|
"subtitles.aiAgents",
|
||||||
|
"subtitles.appearance",
|
||||||
|
"subtitles.automation",
|
||||||
|
"subtitles.channels",
|
||||||
|
"subtitles.chat",
|
||||||
|
"subtitles.communications",
|
||||||
|
"subtitles.config",
|
||||||
|
"subtitles.cron",
|
||||||
|
"subtitles.debug",
|
||||||
|
"subtitles.dreams",
|
||||||
|
"subtitles.infrastructure",
|
||||||
|
"subtitles.instances",
|
||||||
|
"subtitles.logs",
|
||||||
|
"subtitles.nodes",
|
||||||
|
"subtitles.overview",
|
||||||
|
"subtitles.sessions",
|
||||||
|
"subtitles.skills",
|
||||||
|
"subtitles.usage",
|
||||||
|
"tabs.agents",
|
||||||
|
"tabs.aiAgents",
|
||||||
|
"tabs.appearance",
|
||||||
|
"tabs.automation",
|
||||||
|
"tabs.channels",
|
||||||
|
"tabs.chat",
|
||||||
|
"tabs.communications",
|
||||||
|
"tabs.config",
|
||||||
|
"tabs.cron",
|
||||||
|
"tabs.debug",
|
||||||
|
"tabs.dreams",
|
||||||
|
"tabs.infrastructure",
|
||||||
|
"tabs.instances",
|
||||||
|
"tabs.logs",
|
||||||
|
"tabs.nodes",
|
||||||
|
"tabs.overview",
|
||||||
|
"tabs.sessions",
|
||||||
|
"tabs.skills",
|
||||||
|
"tabs.usage",
|
||||||
|
"usage.breakdown.cacheRead",
|
||||||
|
"usage.breakdown.cacheWrite",
|
||||||
|
"usage.breakdown.costByType",
|
||||||
|
"usage.breakdown.input",
|
||||||
|
"usage.breakdown.output",
|
||||||
|
"usage.breakdown.tokensByType",
|
||||||
|
"usage.breakdown.total",
|
||||||
|
"usage.common.emptyValue",
|
||||||
|
"usage.common.unknown",
|
||||||
|
"usage.daily.byType",
|
||||||
|
"usage.daily.costTitle",
|
||||||
|
"usage.daily.title",
|
||||||
|
"usage.daily.tokensTitle",
|
||||||
|
"usage.daily.total",
|
||||||
|
"usage.details.assistantOutputTokens",
|
||||||
|
"usage.details.baseContextPerMessage",
|
||||||
|
"usage.details.close",
|
||||||
|
"usage.details.collapse",
|
||||||
|
"usage.details.collapseAll",
|
||||||
|
"usage.details.conversation",
|
||||||
|
"usage.details.cumulative",
|
||||||
|
"usage.details.duration",
|
||||||
|
"usage.details.expandAll",
|
||||||
|
"usage.details.files",
|
||||||
|
"usage.details.filtered",
|
||||||
|
"usage.details.hasTools",
|
||||||
|
"usage.details.modelMix",
|
||||||
|
"usage.details.noContextData",
|
||||||
|
"usage.details.noDataInRange",
|
||||||
|
"usage.details.noMessages",
|
||||||
|
"usage.details.noMessagesMatch",
|
||||||
|
"usage.details.noTimeline",
|
||||||
|
"usage.details.noUsageData",
|
||||||
|
"usage.details.of",
|
||||||
|
"usage.details.ofInput",
|
||||||
|
"usage.details.perTurn",
|
||||||
|
"usage.details.reset",
|
||||||
|
"usage.details.searchConversation",
|
||||||
|
"usage.details.skills",
|
||||||
|
"usage.details.system",
|
||||||
|
"usage.details.systemPromptBreakdown",
|
||||||
|
"usage.details.systemShort",
|
||||||
|
"usage.details.timelineFiltered",
|
||||||
|
"usage.details.tokensReadFromCache",
|
||||||
|
"usage.details.tokensWrittenToCache",
|
||||||
|
"usage.details.tool",
|
||||||
|
"usage.details.toolResult",
|
||||||
|
"usage.details.tools",
|
||||||
|
"usage.details.turnRange",
|
||||||
|
"usage.details.usageOverTime",
|
||||||
|
"usage.details.userToolInputTokens",
|
||||||
|
"usage.details.you",
|
||||||
|
"usage.empty.featureOverview",
|
||||||
|
"usage.empty.featureSessions",
|
||||||
|
"usage.empty.featureTimeline",
|
||||||
|
"usage.empty.hint",
|
||||||
|
"usage.empty.noData",
|
||||||
|
"usage.empty.subtitle",
|
||||||
|
"usage.empty.title",
|
||||||
|
"usage.export.dailyCsv",
|
||||||
|
"usage.export.json",
|
||||||
|
"usage.export.label",
|
||||||
|
"usage.export.sessionsCsv",
|
||||||
|
"usage.filters.agent",
|
||||||
|
"usage.filters.all",
|
||||||
|
"usage.filters.channel",
|
||||||
|
"usage.filters.clear",
|
||||||
|
"usage.filters.clearAll",
|
||||||
|
"usage.filters.days",
|
||||||
|
"usage.filters.daysCount",
|
||||||
|
"usage.filters.endDate",
|
||||||
|
"usage.filters.hours",
|
||||||
|
"usage.filters.hoursCount",
|
||||||
|
"usage.filters.model",
|
||||||
|
"usage.filters.pin",
|
||||||
|
"usage.filters.pinned",
|
||||||
|
"usage.filters.provider",
|
||||||
|
"usage.filters.remove",
|
||||||
|
"usage.filters.selectAll",
|
||||||
|
"usage.filters.session",
|
||||||
|
"usage.filters.sessionsCount",
|
||||||
|
"usage.filters.startDate",
|
||||||
|
"usage.filters.timeZone",
|
||||||
|
"usage.filters.timeZoneLocal",
|
||||||
|
"usage.filters.timeZoneUtc",
|
||||||
|
"usage.filters.title",
|
||||||
|
"usage.filters.to",
|
||||||
|
"usage.filters.tool",
|
||||||
|
"usage.filters.unpin",
|
||||||
|
"usage.loading.badge",
|
||||||
|
"usage.loading.title",
|
||||||
|
"usage.metrics.cost",
|
||||||
|
"usage.metrics.session",
|
||||||
|
"usage.metrics.sessions",
|
||||||
|
"usage.metrics.tokens",
|
||||||
|
"usage.mosaic.dayOfWeek",
|
||||||
|
"usage.mosaic.eightAm",
|
||||||
|
"usage.mosaic.eightPm",
|
||||||
|
"usage.mosaic.fourAm",
|
||||||
|
"usage.mosaic.fourPm",
|
||||||
|
"usage.mosaic.fri",
|
||||||
|
"usage.mosaic.legend",
|
||||||
|
"usage.mosaic.midnight",
|
||||||
|
"usage.mosaic.mon",
|
||||||
|
"usage.mosaic.noon",
|
||||||
|
"usage.mosaic.noTimelineData",
|
||||||
|
"usage.mosaic.sat",
|
||||||
|
"usage.mosaic.subtitle",
|
||||||
|
"usage.mosaic.subtitleEmpty",
|
||||||
|
"usage.mosaic.sun",
|
||||||
|
"usage.mosaic.thu",
|
||||||
|
"usage.mosaic.title",
|
||||||
|
"usage.mosaic.tue",
|
||||||
|
"usage.mosaic.wed",
|
||||||
|
"usage.overview.acrossMessages",
|
||||||
|
"usage.overview.assistant",
|
||||||
|
"usage.overview.avgCost",
|
||||||
|
"usage.overview.avgCostHint",
|
||||||
|
"usage.overview.avgCostHintMissing",
|
||||||
|
"usage.overview.avgSession",
|
||||||
|
"usage.overview.avgTokens",
|
||||||
|
"usage.overview.avgTokensHint",
|
||||||
|
"usage.overview.cached",
|
||||||
|
"usage.overview.cacheHint",
|
||||||
|
"usage.overview.cacheHitRate",
|
||||||
|
"usage.overview.calls",
|
||||||
|
"usage.overview.errorHint",
|
||||||
|
"usage.overview.errorRate",
|
||||||
|
"usage.overview.errors",
|
||||||
|
"usage.overview.errorsHint",
|
||||||
|
"usage.overview.messages",
|
||||||
|
"usage.overview.messagesAbbrev",
|
||||||
|
"usage.overview.messagesHint",
|
||||||
|
"usage.overview.noAgentData",
|
||||||
|
"usage.overview.noChannelData",
|
||||||
|
"usage.overview.noErrorData",
|
||||||
|
"usage.overview.noModelData",
|
||||||
|
"usage.overview.noProviderData",
|
||||||
|
"usage.overview.noToolCalls",
|
||||||
|
"usage.overview.peakErrorDays",
|
||||||
|
"usage.overview.peakErrorHours",
|
||||||
|
"usage.overview.perMinute",
|
||||||
|
"usage.overview.prompt",
|
||||||
|
"usage.overview.sessions",
|
||||||
|
"usage.overview.sessionsHint",
|
||||||
|
"usage.overview.sessionsInRange",
|
||||||
|
"usage.overview.throughput",
|
||||||
|
"usage.overview.throughputHint",
|
||||||
|
"usage.overview.title",
|
||||||
|
"usage.overview.tokensPerMinute",
|
||||||
|
"usage.overview.toolCalls",
|
||||||
|
"usage.overview.toolCallsHint",
|
||||||
|
"usage.overview.toolResults",
|
||||||
|
"usage.overview.toolsUsed",
|
||||||
|
"usage.overview.topAgents",
|
||||||
|
"usage.overview.topChannels",
|
||||||
|
"usage.overview.topModels",
|
||||||
|
"usage.overview.topProviders",
|
||||||
|
"usage.overview.topTools",
|
||||||
|
"usage.overview.user",
|
||||||
|
"usage.page.subtitle",
|
||||||
|
"usage.presets.last30d",
|
||||||
|
"usage.presets.last7d",
|
||||||
|
"usage.presets.today",
|
||||||
|
"usage.query.apply",
|
||||||
|
"usage.query.inRange",
|
||||||
|
"usage.query.matching",
|
||||||
|
"usage.query.placeholder",
|
||||||
|
"usage.query.tip",
|
||||||
|
"usage.sessions.all",
|
||||||
|
"usage.sessions.ascending",
|
||||||
|
"usage.sessions.avg",
|
||||||
|
"usage.sessions.clearSelection",
|
||||||
|
"usage.sessions.copy",
|
||||||
|
"usage.sessions.copyName",
|
||||||
|
"usage.sessions.descending",
|
||||||
|
"usage.sessions.limitReached",
|
||||||
|
"usage.sessions.more",
|
||||||
|
"usage.sessions.noneInRange",
|
||||||
|
"usage.sessions.noRecent",
|
||||||
|
"usage.sessions.recent",
|
||||||
|
"usage.sessions.recentShort",
|
||||||
|
"usage.sessions.selected",
|
||||||
|
"usage.sessions.shown",
|
||||||
|
"usage.sessions.sort",
|
||||||
|
"usage.sessions.title",
|
||||||
|
"usage.sessions.total"
|
||||||
|
],
|
||||||
|
"generatedAt": "2026-04-29T14:18:04.097Z",
|
||||||
|
"locale": "fa",
|
||||||
|
"model": "",
|
||||||
|
"provider": "",
|
||||||
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
|
"totalKeys": 768,
|
||||||
|
"translatedKeys": 0,
|
||||||
|
"workflow": 1
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"fallbackKeys": [],
|
"fallbackKeys": ["languages.ar", "languages.fa", "languages.it", "languages.nl", "languages.vi"],
|
||||||
"generatedAt": "2026-04-27T12:11:54.218Z",
|
"generatedAt": "2026-04-29T17:07:57.193Z",
|
||||||
"locale": "fr",
|
"locale": "fr",
|
||||||
"model": "gpt-5.5",
|
"model": "gpt-5.5",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"sourceHash": "5e92fbfbb7e3026ea5f3a0835d933c9ce79369a85b1cf0628b1c86369f1c822d",
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
"totalKeys": 763,
|
"totalKeys": 768,
|
||||||
"translatedKeys": 763,
|
"translatedKeys": 763,
|
||||||
"workflow": 1
|
"workflow": 1
|
||||||
}
|
}
|
||||||
|
|||||||
42
ui/src/i18n/.i18n/glossary.ar.json
Normal file
42
ui/src/i18n/.i18n/glossary.ar.json
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"source": "OpenClaw",
|
||||||
|
"target": "OpenClaw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Gateway",
|
||||||
|
"target": "Gateway"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Control UI",
|
||||||
|
"target": "Control UI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Skills",
|
||||||
|
"target": "Skills"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Tailscale",
|
||||||
|
"target": "Tailscale"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "WhatsApp",
|
||||||
|
"target": "WhatsApp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Telegram",
|
||||||
|
"target": "Telegram"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Discord",
|
||||||
|
"target": "Discord"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Signal",
|
||||||
|
"target": "Signal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "iMessage",
|
||||||
|
"target": "iMessage"
|
||||||
|
}
|
||||||
|
]
|
||||||
42
ui/src/i18n/.i18n/glossary.fa.json
Normal file
42
ui/src/i18n/.i18n/glossary.fa.json
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"source": "OpenClaw",
|
||||||
|
"target": "OpenClaw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Gateway",
|
||||||
|
"target": "Gateway"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Control UI",
|
||||||
|
"target": "Control UI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Skills",
|
||||||
|
"target": "Skills"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Tailscale",
|
||||||
|
"target": "Tailscale"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "WhatsApp",
|
||||||
|
"target": "WhatsApp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Telegram",
|
||||||
|
"target": "Telegram"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Discord",
|
||||||
|
"target": "Discord"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Signal",
|
||||||
|
"target": "Signal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "iMessage",
|
||||||
|
"target": "iMessage"
|
||||||
|
}
|
||||||
|
]
|
||||||
42
ui/src/i18n/.i18n/glossary.it.json
Normal file
42
ui/src/i18n/.i18n/glossary.it.json
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"source": "OpenClaw",
|
||||||
|
"target": "OpenClaw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Gateway",
|
||||||
|
"target": "Gateway"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Control UI",
|
||||||
|
"target": "Control UI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Skills",
|
||||||
|
"target": "Skills"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Tailscale",
|
||||||
|
"target": "Tailscale"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "WhatsApp",
|
||||||
|
"target": "WhatsApp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Telegram",
|
||||||
|
"target": "Telegram"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Discord",
|
||||||
|
"target": "Discord"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Signal",
|
||||||
|
"target": "Signal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "iMessage",
|
||||||
|
"target": "iMessage"
|
||||||
|
}
|
||||||
|
]
|
||||||
42
ui/src/i18n/.i18n/glossary.nl.json
Normal file
42
ui/src/i18n/.i18n/glossary.nl.json
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"source": "OpenClaw",
|
||||||
|
"target": "OpenClaw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Gateway",
|
||||||
|
"target": "Gateway"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Control UI",
|
||||||
|
"target": "Control UI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Skills",
|
||||||
|
"target": "Skills"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Tailscale",
|
||||||
|
"target": "Tailscale"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "WhatsApp",
|
||||||
|
"target": "WhatsApp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Telegram",
|
||||||
|
"target": "Telegram"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Discord",
|
||||||
|
"target": "Discord"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Signal",
|
||||||
|
"target": "Signal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "iMessage",
|
||||||
|
"target": "iMessage"
|
||||||
|
}
|
||||||
|
]
|
||||||
42
ui/src/i18n/.i18n/glossary.vi.json
Normal file
42
ui/src/i18n/.i18n/glossary.vi.json
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"source": "OpenClaw",
|
||||||
|
"target": "OpenClaw"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Gateway",
|
||||||
|
"target": "Gateway"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Control UI",
|
||||||
|
"target": "Control UI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Skills",
|
||||||
|
"target": "Skills"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Tailscale",
|
||||||
|
"target": "Tailscale"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "WhatsApp",
|
||||||
|
"target": "WhatsApp"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Telegram",
|
||||||
|
"target": "Telegram"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Discord",
|
||||||
|
"target": "Discord"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "Signal",
|
||||||
|
"target": "Signal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "iMessage",
|
||||||
|
"target": "iMessage"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"fallbackKeys": [],
|
"fallbackKeys": ["languages.ar", "languages.fa", "languages.it", "languages.nl", "languages.vi"],
|
||||||
"generatedAt": "2026-04-27T12:12:51.726Z",
|
"generatedAt": "2026-04-29T17:08:05.845Z",
|
||||||
"locale": "id",
|
"locale": "id",
|
||||||
"model": "gpt-5.5",
|
"model": "gpt-5.5",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"sourceHash": "5e92fbfbb7e3026ea5f3a0835d933c9ce79369a85b1cf0628b1c86369f1c822d",
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
"totalKeys": 763,
|
"totalKeys": 768,
|
||||||
"translatedKeys": 763,
|
"translatedKeys": 763,
|
||||||
"workflow": 1
|
"workflow": 1
|
||||||
}
|
}
|
||||||
|
|||||||
780
ui/src/i18n/.i18n/it.meta.json
Normal file
780
ui/src/i18n/.i18n/it.meta.json
Normal file
@@ -0,0 +1,780 @@
|
|||||||
|
{
|
||||||
|
"fallbackKeys": [
|
||||||
|
"agentTools.builtIn",
|
||||||
|
"agentTools.channel",
|
||||||
|
"agentTools.channelSource",
|
||||||
|
"agentTools.connected",
|
||||||
|
"agentTools.connectedSource",
|
||||||
|
"channels.gatewayUrlConfirmation.subtitle",
|
||||||
|
"channels.gatewayUrlConfirmation.title",
|
||||||
|
"channels.gatewayUrlConfirmation.warning",
|
||||||
|
"channels.generic.subtitle",
|
||||||
|
"channels.health.noSnapshotYet",
|
||||||
|
"channels.health.subtitle",
|
||||||
|
"channels.health.title",
|
||||||
|
"channels.nostr.about",
|
||||||
|
"channels.nostr.account",
|
||||||
|
"channels.nostr.advanced",
|
||||||
|
"channels.nostr.avatarHelp",
|
||||||
|
"channels.nostr.avatarUrl",
|
||||||
|
"channels.nostr.bannerHelp",
|
||||||
|
"channels.nostr.bannerUrl",
|
||||||
|
"channels.nostr.bio",
|
||||||
|
"channels.nostr.bioHelp",
|
||||||
|
"channels.nostr.bioPlaceholder",
|
||||||
|
"channels.nostr.displayName",
|
||||||
|
"channels.nostr.displayNameHelp",
|
||||||
|
"channels.nostr.editProfile",
|
||||||
|
"channels.nostr.lightningAddress",
|
||||||
|
"channels.nostr.lightningHelp",
|
||||||
|
"channels.nostr.name",
|
||||||
|
"channels.nostr.nip05Help",
|
||||||
|
"channels.nostr.nip05Identifier",
|
||||||
|
"channels.nostr.noProfile",
|
||||||
|
"channels.nostr.noProfileHint",
|
||||||
|
"channels.nostr.profile",
|
||||||
|
"channels.nostr.profilePicture",
|
||||||
|
"channels.nostr.profilePicturePreview",
|
||||||
|
"channels.nostr.username",
|
||||||
|
"channels.nostr.usernameHelp",
|
||||||
|
"channels.nostr.website",
|
||||||
|
"channels.nostr.websiteHelp",
|
||||||
|
"chat.disconnected",
|
||||||
|
"chat.focusToggle",
|
||||||
|
"chat.hideCronSessions",
|
||||||
|
"chat.onboardingDisabled",
|
||||||
|
"chat.refreshTitle",
|
||||||
|
"chat.showCronSessions",
|
||||||
|
"chat.showCronSessionsHidden",
|
||||||
|
"chat.thinkingToggle",
|
||||||
|
"chat.toolCallsToggle",
|
||||||
|
"common.active",
|
||||||
|
"common.audience",
|
||||||
|
"common.authAge",
|
||||||
|
"common.baseUrl",
|
||||||
|
"common.call",
|
||||||
|
"common.cancel",
|
||||||
|
"common.configured",
|
||||||
|
"common.confirm",
|
||||||
|
"common.connect",
|
||||||
|
"common.connected",
|
||||||
|
"common.credential",
|
||||||
|
"common.disabled",
|
||||||
|
"common.docs",
|
||||||
|
"common.enabled",
|
||||||
|
"common.health",
|
||||||
|
"common.hideAdvanced",
|
||||||
|
"common.importFromRelays",
|
||||||
|
"common.importing",
|
||||||
|
"common.lastConnect",
|
||||||
|
"common.lastInbound",
|
||||||
|
"common.lastMessage",
|
||||||
|
"common.lastProbe",
|
||||||
|
"common.lastStart",
|
||||||
|
"common.linked",
|
||||||
|
"common.loadApprovals",
|
||||||
|
"common.loadConfig",
|
||||||
|
"common.loading",
|
||||||
|
"common.logout",
|
||||||
|
"common.mode",
|
||||||
|
"common.na",
|
||||||
|
"common.no",
|
||||||
|
"common.offline",
|
||||||
|
"common.ok",
|
||||||
|
"common.online",
|
||||||
|
"common.probe",
|
||||||
|
"common.probeFailed",
|
||||||
|
"common.probeOk",
|
||||||
|
"common.publicKey",
|
||||||
|
"common.refresh",
|
||||||
|
"common.refreshing",
|
||||||
|
"common.relink",
|
||||||
|
"common.reload",
|
||||||
|
"common.reloadConfig",
|
||||||
|
"common.resources",
|
||||||
|
"common.running",
|
||||||
|
"common.save",
|
||||||
|
"common.saveAndPublish",
|
||||||
|
"common.saving",
|
||||||
|
"common.search",
|
||||||
|
"common.secondsAgo",
|
||||||
|
"common.settingsSections",
|
||||||
|
"common.showAdvanced",
|
||||||
|
"common.showQr",
|
||||||
|
"common.theme",
|
||||||
|
"common.unsavedChanges",
|
||||||
|
"common.unselect",
|
||||||
|
"common.version",
|
||||||
|
"common.waitForScan",
|
||||||
|
"common.working",
|
||||||
|
"common.yes",
|
||||||
|
"cron.errors.agentMessageRequired",
|
||||||
|
"cron.errors.agentMessageRequiredShort",
|
||||||
|
"cron.errors.cronExprRequired",
|
||||||
|
"cron.errors.cronExprRequiredShort",
|
||||||
|
"cron.errors.everyAmountInvalid",
|
||||||
|
"cron.errors.invalidIntervalAmount",
|
||||||
|
"cron.errors.invalidRunTime",
|
||||||
|
"cron.errors.invalidStaggerAmount",
|
||||||
|
"cron.errors.nameRequired",
|
||||||
|
"cron.errors.nameRequiredShort",
|
||||||
|
"cron.errors.scheduleAtInvalid",
|
||||||
|
"cron.errors.staggerAmountInvalid",
|
||||||
|
"cron.errors.systemEventTextRequired",
|
||||||
|
"cron.errors.systemTextRequired",
|
||||||
|
"cron.errors.timeoutInvalid",
|
||||||
|
"cron.errors.webhookUrlInvalid",
|
||||||
|
"cron.errors.webhookUrlRequired",
|
||||||
|
"cron.form.addJob",
|
||||||
|
"cron.form.advanced",
|
||||||
|
"cron.form.advancedHelp",
|
||||||
|
"cron.form.agentHelp",
|
||||||
|
"cron.form.agentId",
|
||||||
|
"cron.form.agentPlaceholder",
|
||||||
|
"cron.form.agentTurn",
|
||||||
|
"cron.form.agentTurnHelp",
|
||||||
|
"cron.form.announceDefault",
|
||||||
|
"cron.form.assistantTaskPrompt",
|
||||||
|
"cron.form.at",
|
||||||
|
"cron.form.basics",
|
||||||
|
"cron.form.basicsSub",
|
||||||
|
"cron.form.bestEffortDelivery",
|
||||||
|
"cron.form.bestEffortHelp",
|
||||||
|
"cron.form.cancel",
|
||||||
|
"cron.form.cantAddYet",
|
||||||
|
"cron.form.channel",
|
||||||
|
"cron.form.channelHelp",
|
||||||
|
"cron.form.clearAgentHelp",
|
||||||
|
"cron.form.clearAgentOverride",
|
||||||
|
"cron.form.createSubtitle",
|
||||||
|
"cron.form.cronOption",
|
||||||
|
"cron.form.days",
|
||||||
|
"cron.form.deleteAfterRun",
|
||||||
|
"cron.form.deleteAfterRunHelp",
|
||||||
|
"cron.form.deliveryHelp",
|
||||||
|
"cron.form.deliverySection",
|
||||||
|
"cron.form.deliverySub",
|
||||||
|
"cron.form.description",
|
||||||
|
"cron.form.descriptionPlaceholder",
|
||||||
|
"cron.form.editJob",
|
||||||
|
"cron.form.every",
|
||||||
|
"cron.form.everyAmountPlaceholder",
|
||||||
|
"cron.form.exactTiming",
|
||||||
|
"cron.form.exactTimingHelp",
|
||||||
|
"cron.form.execution",
|
||||||
|
"cron.form.executionSub",
|
||||||
|
"cron.form.expression",
|
||||||
|
"cron.form.expressionPlaceholder",
|
||||||
|
"cron.form.fieldName",
|
||||||
|
"cron.form.fillRequired",
|
||||||
|
"cron.form.fixFields",
|
||||||
|
"cron.form.fixFieldsPlural",
|
||||||
|
"cron.form.hours",
|
||||||
|
"cron.form.isolated",
|
||||||
|
"cron.form.jitterHelp",
|
||||||
|
"cron.form.main",
|
||||||
|
"cron.form.mainTimelineMessage",
|
||||||
|
"cron.form.minutes",
|
||||||
|
"cron.form.model",
|
||||||
|
"cron.form.modelHelp",
|
||||||
|
"cron.form.modelPlaceholder",
|
||||||
|
"cron.form.namePlaceholder",
|
||||||
|
"cron.form.newJob",
|
||||||
|
"cron.form.nextHeartbeat",
|
||||||
|
"cron.form.noneInternal",
|
||||||
|
"cron.form.now",
|
||||||
|
"cron.form.payloadKind",
|
||||||
|
"cron.form.required",
|
||||||
|
"cron.form.requiredSr",
|
||||||
|
"cron.form.resultDelivery",
|
||||||
|
"cron.form.runAt",
|
||||||
|
"cron.form.saveChanges",
|
||||||
|
"cron.form.saving",
|
||||||
|
"cron.form.schedule",
|
||||||
|
"cron.form.scheduleSub",
|
||||||
|
"cron.form.seconds",
|
||||||
|
"cron.form.session",
|
||||||
|
"cron.form.sessionHelp",
|
||||||
|
"cron.form.staggerPlaceholder",
|
||||||
|
"cron.form.staggerUnit",
|
||||||
|
"cron.form.staggerWindow",
|
||||||
|
"cron.form.systemEvent",
|
||||||
|
"cron.form.systemEventHelp",
|
||||||
|
"cron.form.thinking",
|
||||||
|
"cron.form.thinkingHelp",
|
||||||
|
"cron.form.thinkingPlaceholder",
|
||||||
|
"cron.form.timeoutHelp",
|
||||||
|
"cron.form.timeoutPlaceholder",
|
||||||
|
"cron.form.timeoutSeconds",
|
||||||
|
"cron.form.timezoneHelp",
|
||||||
|
"cron.form.timezoneOptional",
|
||||||
|
"cron.form.timezonePlaceholder",
|
||||||
|
"cron.form.to",
|
||||||
|
"cron.form.toHelp",
|
||||||
|
"cron.form.toPlaceholder",
|
||||||
|
"cron.form.unit",
|
||||||
|
"cron.form.updateSubtitle",
|
||||||
|
"cron.form.wakeMode",
|
||||||
|
"cron.form.wakeModeHelp",
|
||||||
|
"cron.form.webhookHelp",
|
||||||
|
"cron.form.webhookPlaceholder",
|
||||||
|
"cron.form.webhookPost",
|
||||||
|
"cron.form.webhookUrl",
|
||||||
|
"cron.jobDetail.agent",
|
||||||
|
"cron.jobDetail.delivery",
|
||||||
|
"cron.jobDetail.prompt",
|
||||||
|
"cron.jobDetail.system",
|
||||||
|
"cron.jobList.allJobs",
|
||||||
|
"cron.jobList.clone",
|
||||||
|
"cron.jobList.disable",
|
||||||
|
"cron.jobList.disabled",
|
||||||
|
"cron.jobList.edit",
|
||||||
|
"cron.jobList.enable",
|
||||||
|
"cron.jobList.enabled",
|
||||||
|
"cron.jobList.history",
|
||||||
|
"cron.jobList.remove",
|
||||||
|
"cron.jobList.run",
|
||||||
|
"cron.jobList.selectJob",
|
||||||
|
"cron.jobs.all",
|
||||||
|
"cron.jobs.ascending",
|
||||||
|
"cron.jobs.descending",
|
||||||
|
"cron.jobs.direction",
|
||||||
|
"cron.jobs.enabled",
|
||||||
|
"cron.jobs.lastRun",
|
||||||
|
"cron.jobs.loading",
|
||||||
|
"cron.jobs.loadMore",
|
||||||
|
"cron.jobs.name",
|
||||||
|
"cron.jobs.nextRun",
|
||||||
|
"cron.jobs.noMatching",
|
||||||
|
"cron.jobs.recentlyUpdated",
|
||||||
|
"cron.jobs.reset",
|
||||||
|
"cron.jobs.schedule",
|
||||||
|
"cron.jobs.searchJobs",
|
||||||
|
"cron.jobs.searchPlaceholder",
|
||||||
|
"cron.jobs.shownOf",
|
||||||
|
"cron.jobs.sort",
|
||||||
|
"cron.jobs.subtitle",
|
||||||
|
"cron.jobs.title",
|
||||||
|
"cron.jobState.last",
|
||||||
|
"cron.jobState.next",
|
||||||
|
"cron.jobState.status",
|
||||||
|
"cron.runEntry.due",
|
||||||
|
"cron.runEntry.next",
|
||||||
|
"cron.runEntry.noSummary",
|
||||||
|
"cron.runEntry.openRunChat",
|
||||||
|
"cron.runEntry.runAt",
|
||||||
|
"cron.runs.allDelivery",
|
||||||
|
"cron.runs.allJobs",
|
||||||
|
"cron.runs.allStatuses",
|
||||||
|
"cron.runs.clear",
|
||||||
|
"cron.runs.delivery",
|
||||||
|
"cron.runs.deliveryDelivered",
|
||||||
|
"cron.runs.deliveryNotDelivered",
|
||||||
|
"cron.runs.deliveryNotRequested",
|
||||||
|
"cron.runs.deliveryUnknown",
|
||||||
|
"cron.runs.loadMore",
|
||||||
|
"cron.runs.newestFirst",
|
||||||
|
"cron.runs.noMatching",
|
||||||
|
"cron.runs.oldestFirst",
|
||||||
|
"cron.runs.runStatusError",
|
||||||
|
"cron.runs.runStatusOk",
|
||||||
|
"cron.runs.runStatusSkipped",
|
||||||
|
"cron.runs.runStatusUnknown",
|
||||||
|
"cron.runs.scope",
|
||||||
|
"cron.runs.searchPlaceholder",
|
||||||
|
"cron.runs.searchRuns",
|
||||||
|
"cron.runs.selectedJob",
|
||||||
|
"cron.runs.selectJobHint",
|
||||||
|
"cron.runs.status",
|
||||||
|
"cron.runs.subtitleAll",
|
||||||
|
"cron.runs.subtitleJob",
|
||||||
|
"cron.runs.title",
|
||||||
|
"cron.summary.enabled",
|
||||||
|
"cron.summary.jobs",
|
||||||
|
"cron.summary.nextWake",
|
||||||
|
"cron.summary.no",
|
||||||
|
"cron.summary.refresh",
|
||||||
|
"cron.summary.refreshing",
|
||||||
|
"cron.summary.yes",
|
||||||
|
"dreaming.advanced.description",
|
||||||
|
"dreaming.advanced.emptyGrounded",
|
||||||
|
"dreaming.advanced.emptyPromoted",
|
||||||
|
"dreaming.advanced.emptyShortTerm",
|
||||||
|
"dreaming.advanced.eyebrow",
|
||||||
|
"dreaming.advanced.originDailyLog",
|
||||||
|
"dreaming.advanced.originLive",
|
||||||
|
"dreaming.advanced.originMixed",
|
||||||
|
"dreaming.advanced.promotedDescription",
|
||||||
|
"dreaming.advanced.promotedTitle",
|
||||||
|
"dreaming.advanced.shortTermDescription",
|
||||||
|
"dreaming.advanced.shortTermTitle",
|
||||||
|
"dreaming.advanced.sortRecent",
|
||||||
|
"dreaming.advanced.sortSignals",
|
||||||
|
"dreaming.advanced.stagedDescription",
|
||||||
|
"dreaming.advanced.stagedTitle",
|
||||||
|
"dreaming.advanced.summaryFromDailyLog",
|
||||||
|
"dreaming.advanced.summaryPromotedToday",
|
||||||
|
"dreaming.advanced.summaryWaiting",
|
||||||
|
"dreaming.advanced.title",
|
||||||
|
"dreaming.advanced.updatedPrefix",
|
||||||
|
"dreaming.diary.newer",
|
||||||
|
"dreaming.diary.noDreamsHint",
|
||||||
|
"dreaming.diary.noDreamsYet",
|
||||||
|
"dreaming.diary.older",
|
||||||
|
"dreaming.diary.reload",
|
||||||
|
"dreaming.diary.reloading",
|
||||||
|
"dreaming.diary.title",
|
||||||
|
"dreaming.diary.waitingHint",
|
||||||
|
"dreaming.diary.waitingTitle",
|
||||||
|
"dreaming.header.off",
|
||||||
|
"dreaming.header.on",
|
||||||
|
"dreaming.header.refresh",
|
||||||
|
"dreaming.header.refreshing",
|
||||||
|
"dreaming.phase.deep",
|
||||||
|
"dreaming.phase.light",
|
||||||
|
"dreaming.phase.off",
|
||||||
|
"dreaming.phase.rem",
|
||||||
|
"dreaming.phrases.alphabetizingSubconscious",
|
||||||
|
"dreaming.phrases.compostingContext",
|
||||||
|
"dreaming.phrases.connectingDots",
|
||||||
|
"dreaming.phrases.consolidatingMemories",
|
||||||
|
"dreaming.phrases.defragmentingMindPalace",
|
||||||
|
"dreaming.phrases.dreamingEmbeddings",
|
||||||
|
"dreaming.phrases.filingLooseThoughts",
|
||||||
|
"dreaming.phrases.forgettingNoise",
|
||||||
|
"dreaming.phrases.indexingDay",
|
||||||
|
"dreaming.phrases.nurturingInsights",
|
||||||
|
"dreaming.phrases.promotingHunches",
|
||||||
|
"dreaming.phrases.reorganizingAttic",
|
||||||
|
"dreaming.phrases.replayingConversations",
|
||||||
|
"dreaming.phrases.simmeringIdeas",
|
||||||
|
"dreaming.phrases.tidyingKnowledgeGraph",
|
||||||
|
"dreaming.phrases.weavingShortTerm",
|
||||||
|
"dreaming.phrases.whisperingVectorStore",
|
||||||
|
"dreaming.restartConfirmation.confirm",
|
||||||
|
"dreaming.restartConfirmation.failed",
|
||||||
|
"dreaming.restartConfirmation.restarting",
|
||||||
|
"dreaming.restartConfirmation.subtitle",
|
||||||
|
"dreaming.restartConfirmation.title",
|
||||||
|
"dreaming.restartConfirmation.warning",
|
||||||
|
"dreaming.scene.backfill",
|
||||||
|
"dreaming.scene.clearGrounded",
|
||||||
|
"dreaming.scene.dedupeDiary",
|
||||||
|
"dreaming.scene.repairCache",
|
||||||
|
"dreaming.scene.reset",
|
||||||
|
"dreaming.scene.working",
|
||||||
|
"dreaming.stats.grounded",
|
||||||
|
"dreaming.stats.phaseHits",
|
||||||
|
"dreaming.stats.promoted",
|
||||||
|
"dreaming.stats.shortTerm",
|
||||||
|
"dreaming.stats.signals",
|
||||||
|
"dreaming.status.active",
|
||||||
|
"dreaming.status.idle",
|
||||||
|
"dreaming.status.nextSweepPrefix",
|
||||||
|
"dreaming.status.promotedSuffix",
|
||||||
|
"dreaming.tabs.advanced",
|
||||||
|
"dreaming.tabs.diary",
|
||||||
|
"dreaming.tabs.scene",
|
||||||
|
"dreaming.trace.emptyGrounded",
|
||||||
|
"dreaming.trace.emptyPromoted",
|
||||||
|
"dreaming.trace.emptyShortTerm",
|
||||||
|
"dreaming.trace.emptySignals",
|
||||||
|
"dreaming.trace.grounded",
|
||||||
|
"dreaming.trace.groundedLed",
|
||||||
|
"dreaming.trace.promoted",
|
||||||
|
"dreaming.trace.shortTerm",
|
||||||
|
"dreaming.trace.signals",
|
||||||
|
"instances.hideHosts",
|
||||||
|
"instances.lastInput",
|
||||||
|
"instances.noInstances",
|
||||||
|
"instances.reason",
|
||||||
|
"instances.showHosts",
|
||||||
|
"instances.subtitle",
|
||||||
|
"instances.title",
|
||||||
|
"instances.toggleHostVisibility",
|
||||||
|
"languages.ar",
|
||||||
|
"languages.de",
|
||||||
|
"languages.en",
|
||||||
|
"languages.es",
|
||||||
|
"languages.fa",
|
||||||
|
"languages.fr",
|
||||||
|
"languages.id",
|
||||||
|
"languages.it",
|
||||||
|
"languages.jaJP",
|
||||||
|
"languages.ko",
|
||||||
|
"languages.nl",
|
||||||
|
"languages.pl",
|
||||||
|
"languages.ptBR",
|
||||||
|
"languages.th",
|
||||||
|
"languages.tr",
|
||||||
|
"languages.uk",
|
||||||
|
"languages.vi",
|
||||||
|
"languages.zhCN",
|
||||||
|
"languages.zhTW",
|
||||||
|
"lazyView.errorSubtitle",
|
||||||
|
"lazyView.errorTitle",
|
||||||
|
"lazyView.loadingTitle",
|
||||||
|
"lazyView.retry",
|
||||||
|
"lazyView.unknownError",
|
||||||
|
"login.hidePassword",
|
||||||
|
"login.hideToken",
|
||||||
|
"login.passwordPlaceholder",
|
||||||
|
"login.showPassword",
|
||||||
|
"login.showToken",
|
||||||
|
"login.subtitle",
|
||||||
|
"login.togglePasswordVisibility",
|
||||||
|
"login.toggleTokenVisibility",
|
||||||
|
"nav.agent",
|
||||||
|
"nav.chat",
|
||||||
|
"nav.collapse",
|
||||||
|
"nav.control",
|
||||||
|
"nav.expand",
|
||||||
|
"nav.resize",
|
||||||
|
"nav.settings",
|
||||||
|
"nodes.binding.defaultBinding",
|
||||||
|
"nodes.binding.defaultBindingHint",
|
||||||
|
"nodes.binding.execNodeBinding",
|
||||||
|
"nodes.binding.execNodeBindingSubtitle",
|
||||||
|
"nodes.binding.formModeHint",
|
||||||
|
"nodes.binding.loadConfigHint",
|
||||||
|
"nodes.binding.node",
|
||||||
|
"overview.access.connectHint",
|
||||||
|
"overview.access.hidePassword",
|
||||||
|
"overview.access.hideToken",
|
||||||
|
"overview.access.language",
|
||||||
|
"overview.access.password",
|
||||||
|
"overview.access.passwordPlaceholder",
|
||||||
|
"overview.access.sessionKey",
|
||||||
|
"overview.access.showPassword",
|
||||||
|
"overview.access.showToken",
|
||||||
|
"overview.access.subtitle",
|
||||||
|
"overview.access.title",
|
||||||
|
"overview.access.togglePasswordVisibility",
|
||||||
|
"overview.access.toggleTokenVisibility",
|
||||||
|
"overview.access.token",
|
||||||
|
"overview.access.trustedProxy",
|
||||||
|
"overview.access.wsUrl",
|
||||||
|
"overview.attention.title",
|
||||||
|
"overview.auth.failed",
|
||||||
|
"overview.auth.required",
|
||||||
|
"overview.cards.cost",
|
||||||
|
"overview.cards.modelAuth",
|
||||||
|
"overview.cards.modelAuthAttentionExpiredDesc",
|
||||||
|
"overview.cards.modelAuthAttentionExpiredTitle",
|
||||||
|
"overview.cards.modelAuthAttentionExpiringEntry",
|
||||||
|
"overview.cards.modelAuthAttentionExpiringTitle",
|
||||||
|
"overview.cards.modelAuthExpired",
|
||||||
|
"overview.cards.modelAuthExpiresIn",
|
||||||
|
"overview.cards.modelAuthExpiring",
|
||||||
|
"overview.cards.modelAuthOk",
|
||||||
|
"overview.cards.modelAuthProviders",
|
||||||
|
"overview.cards.modelAuthUsageLeft",
|
||||||
|
"overview.cards.recentSessions",
|
||||||
|
"overview.cards.skills",
|
||||||
|
"overview.connection.authDocsLink",
|
||||||
|
"overview.connection.authDocsTitle",
|
||||||
|
"overview.connection.copyCommand",
|
||||||
|
"overview.connection.copyCommandAria",
|
||||||
|
"overview.connection.docsHint",
|
||||||
|
"overview.connection.docsLink",
|
||||||
|
"overview.connection.insecureHttpDocsLink",
|
||||||
|
"overview.connection.insecureHttpDocsTitle",
|
||||||
|
"overview.connection.step1",
|
||||||
|
"overview.connection.step2",
|
||||||
|
"overview.connection.step3",
|
||||||
|
"overview.connection.step4",
|
||||||
|
"overview.connection.tailscaleDocsLink",
|
||||||
|
"overview.connection.tailscaleDocsTitle",
|
||||||
|
"overview.connection.title",
|
||||||
|
"overview.eventLog.title",
|
||||||
|
"overview.insecure.hint",
|
||||||
|
"overview.insecure.stayHttp",
|
||||||
|
"overview.logTail.title",
|
||||||
|
"overview.notes.cronText",
|
||||||
|
"overview.notes.cronTitle",
|
||||||
|
"overview.notes.sessionText",
|
||||||
|
"overview.notes.sessionTitle",
|
||||||
|
"overview.notes.subtitle",
|
||||||
|
"overview.notes.tailscaleText",
|
||||||
|
"overview.notes.tailscaleTitle",
|
||||||
|
"overview.notes.title",
|
||||||
|
"overview.pairing.docsLink",
|
||||||
|
"overview.pairing.docsTitle",
|
||||||
|
"overview.pairing.hint",
|
||||||
|
"overview.pairing.metadataUpgradeSummary",
|
||||||
|
"overview.pairing.metadataUpgradeTitle",
|
||||||
|
"overview.pairing.mobileHint",
|
||||||
|
"overview.pairing.roleUpgradeSummary",
|
||||||
|
"overview.pairing.roleUpgradeTitle",
|
||||||
|
"overview.pairing.scopeUpgradeSummary",
|
||||||
|
"overview.pairing.scopeUpgradeTitle",
|
||||||
|
"overview.palette.categories.navigation",
|
||||||
|
"overview.palette.categories.search",
|
||||||
|
"overview.palette.categories.skills",
|
||||||
|
"overview.palette.descriptions.debugMode",
|
||||||
|
"overview.palette.descriptions.shellCommand",
|
||||||
|
"overview.palette.footer.close",
|
||||||
|
"overview.palette.footer.navigate",
|
||||||
|
"overview.palette.footer.select",
|
||||||
|
"overview.palette.items.agents",
|
||||||
|
"overview.palette.items.debugMode",
|
||||||
|
"overview.palette.items.overview",
|
||||||
|
"overview.palette.items.scheduled",
|
||||||
|
"overview.palette.items.sessions",
|
||||||
|
"overview.palette.items.settings",
|
||||||
|
"overview.palette.items.shellCommand",
|
||||||
|
"overview.palette.items.skills",
|
||||||
|
"overview.palette.noResults",
|
||||||
|
"overview.palette.placeholder",
|
||||||
|
"overview.quickActions.automation",
|
||||||
|
"overview.quickActions.newSession",
|
||||||
|
"overview.quickActions.refreshAll",
|
||||||
|
"overview.quickActions.terminal",
|
||||||
|
"overview.snapshot.channelsHint",
|
||||||
|
"overview.snapshot.lastChannelsRefresh",
|
||||||
|
"overview.snapshot.status",
|
||||||
|
"overview.snapshot.subtitle",
|
||||||
|
"overview.snapshot.tickInterval",
|
||||||
|
"overview.snapshot.title",
|
||||||
|
"overview.snapshot.uptime",
|
||||||
|
"overview.stats.cron",
|
||||||
|
"overview.stats.cronNext",
|
||||||
|
"overview.stats.instances",
|
||||||
|
"overview.stats.instancesHint",
|
||||||
|
"overview.stats.sessions",
|
||||||
|
"overview.stats.sessionsHint",
|
||||||
|
"subtitles.agents",
|
||||||
|
"subtitles.aiAgents",
|
||||||
|
"subtitles.appearance",
|
||||||
|
"subtitles.automation",
|
||||||
|
"subtitles.channels",
|
||||||
|
"subtitles.chat",
|
||||||
|
"subtitles.communications",
|
||||||
|
"subtitles.config",
|
||||||
|
"subtitles.cron",
|
||||||
|
"subtitles.debug",
|
||||||
|
"subtitles.dreams",
|
||||||
|
"subtitles.infrastructure",
|
||||||
|
"subtitles.instances",
|
||||||
|
"subtitles.logs",
|
||||||
|
"subtitles.nodes",
|
||||||
|
"subtitles.overview",
|
||||||
|
"subtitles.sessions",
|
||||||
|
"subtitles.skills",
|
||||||
|
"subtitles.usage",
|
||||||
|
"tabs.agents",
|
||||||
|
"tabs.aiAgents",
|
||||||
|
"tabs.appearance",
|
||||||
|
"tabs.automation",
|
||||||
|
"tabs.channels",
|
||||||
|
"tabs.chat",
|
||||||
|
"tabs.communications",
|
||||||
|
"tabs.config",
|
||||||
|
"tabs.cron",
|
||||||
|
"tabs.debug",
|
||||||
|
"tabs.dreams",
|
||||||
|
"tabs.infrastructure",
|
||||||
|
"tabs.instances",
|
||||||
|
"tabs.logs",
|
||||||
|
"tabs.nodes",
|
||||||
|
"tabs.overview",
|
||||||
|
"tabs.sessions",
|
||||||
|
"tabs.skills",
|
||||||
|
"tabs.usage",
|
||||||
|
"usage.breakdown.cacheRead",
|
||||||
|
"usage.breakdown.cacheWrite",
|
||||||
|
"usage.breakdown.costByType",
|
||||||
|
"usage.breakdown.input",
|
||||||
|
"usage.breakdown.output",
|
||||||
|
"usage.breakdown.tokensByType",
|
||||||
|
"usage.breakdown.total",
|
||||||
|
"usage.common.emptyValue",
|
||||||
|
"usage.common.unknown",
|
||||||
|
"usage.daily.byType",
|
||||||
|
"usage.daily.costTitle",
|
||||||
|
"usage.daily.title",
|
||||||
|
"usage.daily.tokensTitle",
|
||||||
|
"usage.daily.total",
|
||||||
|
"usage.details.assistantOutputTokens",
|
||||||
|
"usage.details.baseContextPerMessage",
|
||||||
|
"usage.details.close",
|
||||||
|
"usage.details.collapse",
|
||||||
|
"usage.details.collapseAll",
|
||||||
|
"usage.details.conversation",
|
||||||
|
"usage.details.cumulative",
|
||||||
|
"usage.details.duration",
|
||||||
|
"usage.details.expandAll",
|
||||||
|
"usage.details.files",
|
||||||
|
"usage.details.filtered",
|
||||||
|
"usage.details.hasTools",
|
||||||
|
"usage.details.modelMix",
|
||||||
|
"usage.details.noContextData",
|
||||||
|
"usage.details.noDataInRange",
|
||||||
|
"usage.details.noMessages",
|
||||||
|
"usage.details.noMessagesMatch",
|
||||||
|
"usage.details.noTimeline",
|
||||||
|
"usage.details.noUsageData",
|
||||||
|
"usage.details.of",
|
||||||
|
"usage.details.ofInput",
|
||||||
|
"usage.details.perTurn",
|
||||||
|
"usage.details.reset",
|
||||||
|
"usage.details.searchConversation",
|
||||||
|
"usage.details.skills",
|
||||||
|
"usage.details.system",
|
||||||
|
"usage.details.systemPromptBreakdown",
|
||||||
|
"usage.details.systemShort",
|
||||||
|
"usage.details.timelineFiltered",
|
||||||
|
"usage.details.tokensReadFromCache",
|
||||||
|
"usage.details.tokensWrittenToCache",
|
||||||
|
"usage.details.tool",
|
||||||
|
"usage.details.toolResult",
|
||||||
|
"usage.details.tools",
|
||||||
|
"usage.details.turnRange",
|
||||||
|
"usage.details.usageOverTime",
|
||||||
|
"usage.details.userToolInputTokens",
|
||||||
|
"usage.details.you",
|
||||||
|
"usage.empty.featureOverview",
|
||||||
|
"usage.empty.featureSessions",
|
||||||
|
"usage.empty.featureTimeline",
|
||||||
|
"usage.empty.hint",
|
||||||
|
"usage.empty.noData",
|
||||||
|
"usage.empty.subtitle",
|
||||||
|
"usage.empty.title",
|
||||||
|
"usage.export.dailyCsv",
|
||||||
|
"usage.export.json",
|
||||||
|
"usage.export.label",
|
||||||
|
"usage.export.sessionsCsv",
|
||||||
|
"usage.filters.agent",
|
||||||
|
"usage.filters.all",
|
||||||
|
"usage.filters.channel",
|
||||||
|
"usage.filters.clear",
|
||||||
|
"usage.filters.clearAll",
|
||||||
|
"usage.filters.days",
|
||||||
|
"usage.filters.daysCount",
|
||||||
|
"usage.filters.endDate",
|
||||||
|
"usage.filters.hours",
|
||||||
|
"usage.filters.hoursCount",
|
||||||
|
"usage.filters.model",
|
||||||
|
"usage.filters.pin",
|
||||||
|
"usage.filters.pinned",
|
||||||
|
"usage.filters.provider",
|
||||||
|
"usage.filters.remove",
|
||||||
|
"usage.filters.selectAll",
|
||||||
|
"usage.filters.session",
|
||||||
|
"usage.filters.sessionsCount",
|
||||||
|
"usage.filters.startDate",
|
||||||
|
"usage.filters.timeZone",
|
||||||
|
"usage.filters.timeZoneLocal",
|
||||||
|
"usage.filters.timeZoneUtc",
|
||||||
|
"usage.filters.title",
|
||||||
|
"usage.filters.to",
|
||||||
|
"usage.filters.tool",
|
||||||
|
"usage.filters.unpin",
|
||||||
|
"usage.loading.badge",
|
||||||
|
"usage.loading.title",
|
||||||
|
"usage.metrics.cost",
|
||||||
|
"usage.metrics.session",
|
||||||
|
"usage.metrics.sessions",
|
||||||
|
"usage.metrics.tokens",
|
||||||
|
"usage.mosaic.dayOfWeek",
|
||||||
|
"usage.mosaic.eightAm",
|
||||||
|
"usage.mosaic.eightPm",
|
||||||
|
"usage.mosaic.fourAm",
|
||||||
|
"usage.mosaic.fourPm",
|
||||||
|
"usage.mosaic.fri",
|
||||||
|
"usage.mosaic.legend",
|
||||||
|
"usage.mosaic.midnight",
|
||||||
|
"usage.mosaic.mon",
|
||||||
|
"usage.mosaic.noon",
|
||||||
|
"usage.mosaic.noTimelineData",
|
||||||
|
"usage.mosaic.sat",
|
||||||
|
"usage.mosaic.subtitle",
|
||||||
|
"usage.mosaic.subtitleEmpty",
|
||||||
|
"usage.mosaic.sun",
|
||||||
|
"usage.mosaic.thu",
|
||||||
|
"usage.mosaic.title",
|
||||||
|
"usage.mosaic.tue",
|
||||||
|
"usage.mosaic.wed",
|
||||||
|
"usage.overview.acrossMessages",
|
||||||
|
"usage.overview.assistant",
|
||||||
|
"usage.overview.avgCost",
|
||||||
|
"usage.overview.avgCostHint",
|
||||||
|
"usage.overview.avgCostHintMissing",
|
||||||
|
"usage.overview.avgSession",
|
||||||
|
"usage.overview.avgTokens",
|
||||||
|
"usage.overview.avgTokensHint",
|
||||||
|
"usage.overview.cached",
|
||||||
|
"usage.overview.cacheHint",
|
||||||
|
"usage.overview.cacheHitRate",
|
||||||
|
"usage.overview.calls",
|
||||||
|
"usage.overview.errorHint",
|
||||||
|
"usage.overview.errorRate",
|
||||||
|
"usage.overview.errors",
|
||||||
|
"usage.overview.errorsHint",
|
||||||
|
"usage.overview.messages",
|
||||||
|
"usage.overview.messagesAbbrev",
|
||||||
|
"usage.overview.messagesHint",
|
||||||
|
"usage.overview.noAgentData",
|
||||||
|
"usage.overview.noChannelData",
|
||||||
|
"usage.overview.noErrorData",
|
||||||
|
"usage.overview.noModelData",
|
||||||
|
"usage.overview.noProviderData",
|
||||||
|
"usage.overview.noToolCalls",
|
||||||
|
"usage.overview.peakErrorDays",
|
||||||
|
"usage.overview.peakErrorHours",
|
||||||
|
"usage.overview.perMinute",
|
||||||
|
"usage.overview.prompt",
|
||||||
|
"usage.overview.sessions",
|
||||||
|
"usage.overview.sessionsHint",
|
||||||
|
"usage.overview.sessionsInRange",
|
||||||
|
"usage.overview.throughput",
|
||||||
|
"usage.overview.throughputHint",
|
||||||
|
"usage.overview.title",
|
||||||
|
"usage.overview.tokensPerMinute",
|
||||||
|
"usage.overview.toolCalls",
|
||||||
|
"usage.overview.toolCallsHint",
|
||||||
|
"usage.overview.toolResults",
|
||||||
|
"usage.overview.toolsUsed",
|
||||||
|
"usage.overview.topAgents",
|
||||||
|
"usage.overview.topChannels",
|
||||||
|
"usage.overview.topModels",
|
||||||
|
"usage.overview.topProviders",
|
||||||
|
"usage.overview.topTools",
|
||||||
|
"usage.overview.user",
|
||||||
|
"usage.page.subtitle",
|
||||||
|
"usage.presets.last30d",
|
||||||
|
"usage.presets.last7d",
|
||||||
|
"usage.presets.today",
|
||||||
|
"usage.query.apply",
|
||||||
|
"usage.query.inRange",
|
||||||
|
"usage.query.matching",
|
||||||
|
"usage.query.placeholder",
|
||||||
|
"usage.query.tip",
|
||||||
|
"usage.sessions.all",
|
||||||
|
"usage.sessions.ascending",
|
||||||
|
"usage.sessions.avg",
|
||||||
|
"usage.sessions.clearSelection",
|
||||||
|
"usage.sessions.copy",
|
||||||
|
"usage.sessions.copyName",
|
||||||
|
"usage.sessions.descending",
|
||||||
|
"usage.sessions.limitReached",
|
||||||
|
"usage.sessions.more",
|
||||||
|
"usage.sessions.noneInRange",
|
||||||
|
"usage.sessions.noRecent",
|
||||||
|
"usage.sessions.recent",
|
||||||
|
"usage.sessions.recentShort",
|
||||||
|
"usage.sessions.selected",
|
||||||
|
"usage.sessions.shown",
|
||||||
|
"usage.sessions.sort",
|
||||||
|
"usage.sessions.title",
|
||||||
|
"usage.sessions.total"
|
||||||
|
],
|
||||||
|
"generatedAt": "2026-04-29T13:53:45.227Z",
|
||||||
|
"locale": "it",
|
||||||
|
"model": "",
|
||||||
|
"provider": "",
|
||||||
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
|
"totalKeys": 768,
|
||||||
|
"translatedKeys": 0,
|
||||||
|
"workflow": 1
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"fallbackKeys": [],
|
"fallbackKeys": ["languages.ar", "languages.fa", "languages.it", "languages.nl", "languages.vi"],
|
||||||
"generatedAt": "2026-04-27T12:11:44.551Z",
|
"generatedAt": "2026-04-29T17:07:52.933Z",
|
||||||
"locale": "ja-JP",
|
"locale": "ja-JP",
|
||||||
"model": "gpt-5.5",
|
"model": "gpt-5.5",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"sourceHash": "5e92fbfbb7e3026ea5f3a0835d933c9ce79369a85b1cf0628b1c86369f1c822d",
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
"totalKeys": 763,
|
"totalKeys": 768,
|
||||||
"translatedKeys": 763,
|
"translatedKeys": 763,
|
||||||
"workflow": 1
|
"workflow": 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"fallbackKeys": [],
|
"fallbackKeys": ["languages.ar", "languages.fa", "languages.it", "languages.nl", "languages.vi"],
|
||||||
"generatedAt": "2026-04-27T12:11:49.092Z",
|
"generatedAt": "2026-04-29T17:07:54.414Z",
|
||||||
"locale": "ko",
|
"locale": "ko",
|
||||||
"model": "gpt-5.5",
|
"model": "gpt-5.5",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"sourceHash": "5e92fbfbb7e3026ea5f3a0835d933c9ce79369a85b1cf0628b1c86369f1c822d",
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
"totalKeys": 763,
|
"totalKeys": 768,
|
||||||
"translatedKeys": 763,
|
"translatedKeys": 763,
|
||||||
"workflow": 1
|
"workflow": 1
|
||||||
}
|
}
|
||||||
|
|||||||
780
ui/src/i18n/.i18n/nl.meta.json
Normal file
780
ui/src/i18n/.i18n/nl.meta.json
Normal file
@@ -0,0 +1,780 @@
|
|||||||
|
{
|
||||||
|
"fallbackKeys": [
|
||||||
|
"agentTools.builtIn",
|
||||||
|
"agentTools.channel",
|
||||||
|
"agentTools.channelSource",
|
||||||
|
"agentTools.connected",
|
||||||
|
"agentTools.connectedSource",
|
||||||
|
"channels.gatewayUrlConfirmation.subtitle",
|
||||||
|
"channels.gatewayUrlConfirmation.title",
|
||||||
|
"channels.gatewayUrlConfirmation.warning",
|
||||||
|
"channels.generic.subtitle",
|
||||||
|
"channels.health.noSnapshotYet",
|
||||||
|
"channels.health.subtitle",
|
||||||
|
"channels.health.title",
|
||||||
|
"channels.nostr.about",
|
||||||
|
"channels.nostr.account",
|
||||||
|
"channels.nostr.advanced",
|
||||||
|
"channels.nostr.avatarHelp",
|
||||||
|
"channels.nostr.avatarUrl",
|
||||||
|
"channels.nostr.bannerHelp",
|
||||||
|
"channels.nostr.bannerUrl",
|
||||||
|
"channels.nostr.bio",
|
||||||
|
"channels.nostr.bioHelp",
|
||||||
|
"channels.nostr.bioPlaceholder",
|
||||||
|
"channels.nostr.displayName",
|
||||||
|
"channels.nostr.displayNameHelp",
|
||||||
|
"channels.nostr.editProfile",
|
||||||
|
"channels.nostr.lightningAddress",
|
||||||
|
"channels.nostr.lightningHelp",
|
||||||
|
"channels.nostr.name",
|
||||||
|
"channels.nostr.nip05Help",
|
||||||
|
"channels.nostr.nip05Identifier",
|
||||||
|
"channels.nostr.noProfile",
|
||||||
|
"channels.nostr.noProfileHint",
|
||||||
|
"channels.nostr.profile",
|
||||||
|
"channels.nostr.profilePicture",
|
||||||
|
"channels.nostr.profilePicturePreview",
|
||||||
|
"channels.nostr.username",
|
||||||
|
"channels.nostr.usernameHelp",
|
||||||
|
"channels.nostr.website",
|
||||||
|
"channels.nostr.websiteHelp",
|
||||||
|
"chat.disconnected",
|
||||||
|
"chat.focusToggle",
|
||||||
|
"chat.hideCronSessions",
|
||||||
|
"chat.onboardingDisabled",
|
||||||
|
"chat.refreshTitle",
|
||||||
|
"chat.showCronSessions",
|
||||||
|
"chat.showCronSessionsHidden",
|
||||||
|
"chat.thinkingToggle",
|
||||||
|
"chat.toolCallsToggle",
|
||||||
|
"common.active",
|
||||||
|
"common.audience",
|
||||||
|
"common.authAge",
|
||||||
|
"common.baseUrl",
|
||||||
|
"common.call",
|
||||||
|
"common.cancel",
|
||||||
|
"common.configured",
|
||||||
|
"common.confirm",
|
||||||
|
"common.connect",
|
||||||
|
"common.connected",
|
||||||
|
"common.credential",
|
||||||
|
"common.disabled",
|
||||||
|
"common.docs",
|
||||||
|
"common.enabled",
|
||||||
|
"common.health",
|
||||||
|
"common.hideAdvanced",
|
||||||
|
"common.importFromRelays",
|
||||||
|
"common.importing",
|
||||||
|
"common.lastConnect",
|
||||||
|
"common.lastInbound",
|
||||||
|
"common.lastMessage",
|
||||||
|
"common.lastProbe",
|
||||||
|
"common.lastStart",
|
||||||
|
"common.linked",
|
||||||
|
"common.loadApprovals",
|
||||||
|
"common.loadConfig",
|
||||||
|
"common.loading",
|
||||||
|
"common.logout",
|
||||||
|
"common.mode",
|
||||||
|
"common.na",
|
||||||
|
"common.no",
|
||||||
|
"common.offline",
|
||||||
|
"common.ok",
|
||||||
|
"common.online",
|
||||||
|
"common.probe",
|
||||||
|
"common.probeFailed",
|
||||||
|
"common.probeOk",
|
||||||
|
"common.publicKey",
|
||||||
|
"common.refresh",
|
||||||
|
"common.refreshing",
|
||||||
|
"common.relink",
|
||||||
|
"common.reload",
|
||||||
|
"common.reloadConfig",
|
||||||
|
"common.resources",
|
||||||
|
"common.running",
|
||||||
|
"common.save",
|
||||||
|
"common.saveAndPublish",
|
||||||
|
"common.saving",
|
||||||
|
"common.search",
|
||||||
|
"common.secondsAgo",
|
||||||
|
"common.settingsSections",
|
||||||
|
"common.showAdvanced",
|
||||||
|
"common.showQr",
|
||||||
|
"common.theme",
|
||||||
|
"common.unsavedChanges",
|
||||||
|
"common.unselect",
|
||||||
|
"common.version",
|
||||||
|
"common.waitForScan",
|
||||||
|
"common.working",
|
||||||
|
"common.yes",
|
||||||
|
"cron.errors.agentMessageRequired",
|
||||||
|
"cron.errors.agentMessageRequiredShort",
|
||||||
|
"cron.errors.cronExprRequired",
|
||||||
|
"cron.errors.cronExprRequiredShort",
|
||||||
|
"cron.errors.everyAmountInvalid",
|
||||||
|
"cron.errors.invalidIntervalAmount",
|
||||||
|
"cron.errors.invalidRunTime",
|
||||||
|
"cron.errors.invalidStaggerAmount",
|
||||||
|
"cron.errors.nameRequired",
|
||||||
|
"cron.errors.nameRequiredShort",
|
||||||
|
"cron.errors.scheduleAtInvalid",
|
||||||
|
"cron.errors.staggerAmountInvalid",
|
||||||
|
"cron.errors.systemEventTextRequired",
|
||||||
|
"cron.errors.systemTextRequired",
|
||||||
|
"cron.errors.timeoutInvalid",
|
||||||
|
"cron.errors.webhookUrlInvalid",
|
||||||
|
"cron.errors.webhookUrlRequired",
|
||||||
|
"cron.form.addJob",
|
||||||
|
"cron.form.advanced",
|
||||||
|
"cron.form.advancedHelp",
|
||||||
|
"cron.form.agentHelp",
|
||||||
|
"cron.form.agentId",
|
||||||
|
"cron.form.agentPlaceholder",
|
||||||
|
"cron.form.agentTurn",
|
||||||
|
"cron.form.agentTurnHelp",
|
||||||
|
"cron.form.announceDefault",
|
||||||
|
"cron.form.assistantTaskPrompt",
|
||||||
|
"cron.form.at",
|
||||||
|
"cron.form.basics",
|
||||||
|
"cron.form.basicsSub",
|
||||||
|
"cron.form.bestEffortDelivery",
|
||||||
|
"cron.form.bestEffortHelp",
|
||||||
|
"cron.form.cancel",
|
||||||
|
"cron.form.cantAddYet",
|
||||||
|
"cron.form.channel",
|
||||||
|
"cron.form.channelHelp",
|
||||||
|
"cron.form.clearAgentHelp",
|
||||||
|
"cron.form.clearAgentOverride",
|
||||||
|
"cron.form.createSubtitle",
|
||||||
|
"cron.form.cronOption",
|
||||||
|
"cron.form.days",
|
||||||
|
"cron.form.deleteAfterRun",
|
||||||
|
"cron.form.deleteAfterRunHelp",
|
||||||
|
"cron.form.deliveryHelp",
|
||||||
|
"cron.form.deliverySection",
|
||||||
|
"cron.form.deliverySub",
|
||||||
|
"cron.form.description",
|
||||||
|
"cron.form.descriptionPlaceholder",
|
||||||
|
"cron.form.editJob",
|
||||||
|
"cron.form.every",
|
||||||
|
"cron.form.everyAmountPlaceholder",
|
||||||
|
"cron.form.exactTiming",
|
||||||
|
"cron.form.exactTimingHelp",
|
||||||
|
"cron.form.execution",
|
||||||
|
"cron.form.executionSub",
|
||||||
|
"cron.form.expression",
|
||||||
|
"cron.form.expressionPlaceholder",
|
||||||
|
"cron.form.fieldName",
|
||||||
|
"cron.form.fillRequired",
|
||||||
|
"cron.form.fixFields",
|
||||||
|
"cron.form.fixFieldsPlural",
|
||||||
|
"cron.form.hours",
|
||||||
|
"cron.form.isolated",
|
||||||
|
"cron.form.jitterHelp",
|
||||||
|
"cron.form.main",
|
||||||
|
"cron.form.mainTimelineMessage",
|
||||||
|
"cron.form.minutes",
|
||||||
|
"cron.form.model",
|
||||||
|
"cron.form.modelHelp",
|
||||||
|
"cron.form.modelPlaceholder",
|
||||||
|
"cron.form.namePlaceholder",
|
||||||
|
"cron.form.newJob",
|
||||||
|
"cron.form.nextHeartbeat",
|
||||||
|
"cron.form.noneInternal",
|
||||||
|
"cron.form.now",
|
||||||
|
"cron.form.payloadKind",
|
||||||
|
"cron.form.required",
|
||||||
|
"cron.form.requiredSr",
|
||||||
|
"cron.form.resultDelivery",
|
||||||
|
"cron.form.runAt",
|
||||||
|
"cron.form.saveChanges",
|
||||||
|
"cron.form.saving",
|
||||||
|
"cron.form.schedule",
|
||||||
|
"cron.form.scheduleSub",
|
||||||
|
"cron.form.seconds",
|
||||||
|
"cron.form.session",
|
||||||
|
"cron.form.sessionHelp",
|
||||||
|
"cron.form.staggerPlaceholder",
|
||||||
|
"cron.form.staggerUnit",
|
||||||
|
"cron.form.staggerWindow",
|
||||||
|
"cron.form.systemEvent",
|
||||||
|
"cron.form.systemEventHelp",
|
||||||
|
"cron.form.thinking",
|
||||||
|
"cron.form.thinkingHelp",
|
||||||
|
"cron.form.thinkingPlaceholder",
|
||||||
|
"cron.form.timeoutHelp",
|
||||||
|
"cron.form.timeoutPlaceholder",
|
||||||
|
"cron.form.timeoutSeconds",
|
||||||
|
"cron.form.timezoneHelp",
|
||||||
|
"cron.form.timezoneOptional",
|
||||||
|
"cron.form.timezonePlaceholder",
|
||||||
|
"cron.form.to",
|
||||||
|
"cron.form.toHelp",
|
||||||
|
"cron.form.toPlaceholder",
|
||||||
|
"cron.form.unit",
|
||||||
|
"cron.form.updateSubtitle",
|
||||||
|
"cron.form.wakeMode",
|
||||||
|
"cron.form.wakeModeHelp",
|
||||||
|
"cron.form.webhookHelp",
|
||||||
|
"cron.form.webhookPlaceholder",
|
||||||
|
"cron.form.webhookPost",
|
||||||
|
"cron.form.webhookUrl",
|
||||||
|
"cron.jobDetail.agent",
|
||||||
|
"cron.jobDetail.delivery",
|
||||||
|
"cron.jobDetail.prompt",
|
||||||
|
"cron.jobDetail.system",
|
||||||
|
"cron.jobList.allJobs",
|
||||||
|
"cron.jobList.clone",
|
||||||
|
"cron.jobList.disable",
|
||||||
|
"cron.jobList.disabled",
|
||||||
|
"cron.jobList.edit",
|
||||||
|
"cron.jobList.enable",
|
||||||
|
"cron.jobList.enabled",
|
||||||
|
"cron.jobList.history",
|
||||||
|
"cron.jobList.remove",
|
||||||
|
"cron.jobList.run",
|
||||||
|
"cron.jobList.selectJob",
|
||||||
|
"cron.jobs.all",
|
||||||
|
"cron.jobs.ascending",
|
||||||
|
"cron.jobs.descending",
|
||||||
|
"cron.jobs.direction",
|
||||||
|
"cron.jobs.enabled",
|
||||||
|
"cron.jobs.lastRun",
|
||||||
|
"cron.jobs.loading",
|
||||||
|
"cron.jobs.loadMore",
|
||||||
|
"cron.jobs.name",
|
||||||
|
"cron.jobs.nextRun",
|
||||||
|
"cron.jobs.noMatching",
|
||||||
|
"cron.jobs.recentlyUpdated",
|
||||||
|
"cron.jobs.reset",
|
||||||
|
"cron.jobs.schedule",
|
||||||
|
"cron.jobs.searchJobs",
|
||||||
|
"cron.jobs.searchPlaceholder",
|
||||||
|
"cron.jobs.shownOf",
|
||||||
|
"cron.jobs.sort",
|
||||||
|
"cron.jobs.subtitle",
|
||||||
|
"cron.jobs.title",
|
||||||
|
"cron.jobState.last",
|
||||||
|
"cron.jobState.next",
|
||||||
|
"cron.jobState.status",
|
||||||
|
"cron.runEntry.due",
|
||||||
|
"cron.runEntry.next",
|
||||||
|
"cron.runEntry.noSummary",
|
||||||
|
"cron.runEntry.openRunChat",
|
||||||
|
"cron.runEntry.runAt",
|
||||||
|
"cron.runs.allDelivery",
|
||||||
|
"cron.runs.allJobs",
|
||||||
|
"cron.runs.allStatuses",
|
||||||
|
"cron.runs.clear",
|
||||||
|
"cron.runs.delivery",
|
||||||
|
"cron.runs.deliveryDelivered",
|
||||||
|
"cron.runs.deliveryNotDelivered",
|
||||||
|
"cron.runs.deliveryNotRequested",
|
||||||
|
"cron.runs.deliveryUnknown",
|
||||||
|
"cron.runs.loadMore",
|
||||||
|
"cron.runs.newestFirst",
|
||||||
|
"cron.runs.noMatching",
|
||||||
|
"cron.runs.oldestFirst",
|
||||||
|
"cron.runs.runStatusError",
|
||||||
|
"cron.runs.runStatusOk",
|
||||||
|
"cron.runs.runStatusSkipped",
|
||||||
|
"cron.runs.runStatusUnknown",
|
||||||
|
"cron.runs.scope",
|
||||||
|
"cron.runs.searchPlaceholder",
|
||||||
|
"cron.runs.searchRuns",
|
||||||
|
"cron.runs.selectedJob",
|
||||||
|
"cron.runs.selectJobHint",
|
||||||
|
"cron.runs.status",
|
||||||
|
"cron.runs.subtitleAll",
|
||||||
|
"cron.runs.subtitleJob",
|
||||||
|
"cron.runs.title",
|
||||||
|
"cron.summary.enabled",
|
||||||
|
"cron.summary.jobs",
|
||||||
|
"cron.summary.nextWake",
|
||||||
|
"cron.summary.no",
|
||||||
|
"cron.summary.refresh",
|
||||||
|
"cron.summary.refreshing",
|
||||||
|
"cron.summary.yes",
|
||||||
|
"dreaming.advanced.description",
|
||||||
|
"dreaming.advanced.emptyGrounded",
|
||||||
|
"dreaming.advanced.emptyPromoted",
|
||||||
|
"dreaming.advanced.emptyShortTerm",
|
||||||
|
"dreaming.advanced.eyebrow",
|
||||||
|
"dreaming.advanced.originDailyLog",
|
||||||
|
"dreaming.advanced.originLive",
|
||||||
|
"dreaming.advanced.originMixed",
|
||||||
|
"dreaming.advanced.promotedDescription",
|
||||||
|
"dreaming.advanced.promotedTitle",
|
||||||
|
"dreaming.advanced.shortTermDescription",
|
||||||
|
"dreaming.advanced.shortTermTitle",
|
||||||
|
"dreaming.advanced.sortRecent",
|
||||||
|
"dreaming.advanced.sortSignals",
|
||||||
|
"dreaming.advanced.stagedDescription",
|
||||||
|
"dreaming.advanced.stagedTitle",
|
||||||
|
"dreaming.advanced.summaryFromDailyLog",
|
||||||
|
"dreaming.advanced.summaryPromotedToday",
|
||||||
|
"dreaming.advanced.summaryWaiting",
|
||||||
|
"dreaming.advanced.title",
|
||||||
|
"dreaming.advanced.updatedPrefix",
|
||||||
|
"dreaming.diary.newer",
|
||||||
|
"dreaming.diary.noDreamsHint",
|
||||||
|
"dreaming.diary.noDreamsYet",
|
||||||
|
"dreaming.diary.older",
|
||||||
|
"dreaming.diary.reload",
|
||||||
|
"dreaming.diary.reloading",
|
||||||
|
"dreaming.diary.title",
|
||||||
|
"dreaming.diary.waitingHint",
|
||||||
|
"dreaming.diary.waitingTitle",
|
||||||
|
"dreaming.header.off",
|
||||||
|
"dreaming.header.on",
|
||||||
|
"dreaming.header.refresh",
|
||||||
|
"dreaming.header.refreshing",
|
||||||
|
"dreaming.phase.deep",
|
||||||
|
"dreaming.phase.light",
|
||||||
|
"dreaming.phase.off",
|
||||||
|
"dreaming.phase.rem",
|
||||||
|
"dreaming.phrases.alphabetizingSubconscious",
|
||||||
|
"dreaming.phrases.compostingContext",
|
||||||
|
"dreaming.phrases.connectingDots",
|
||||||
|
"dreaming.phrases.consolidatingMemories",
|
||||||
|
"dreaming.phrases.defragmentingMindPalace",
|
||||||
|
"dreaming.phrases.dreamingEmbeddings",
|
||||||
|
"dreaming.phrases.filingLooseThoughts",
|
||||||
|
"dreaming.phrases.forgettingNoise",
|
||||||
|
"dreaming.phrases.indexingDay",
|
||||||
|
"dreaming.phrases.nurturingInsights",
|
||||||
|
"dreaming.phrases.promotingHunches",
|
||||||
|
"dreaming.phrases.reorganizingAttic",
|
||||||
|
"dreaming.phrases.replayingConversations",
|
||||||
|
"dreaming.phrases.simmeringIdeas",
|
||||||
|
"dreaming.phrases.tidyingKnowledgeGraph",
|
||||||
|
"dreaming.phrases.weavingShortTerm",
|
||||||
|
"dreaming.phrases.whisperingVectorStore",
|
||||||
|
"dreaming.restartConfirmation.confirm",
|
||||||
|
"dreaming.restartConfirmation.failed",
|
||||||
|
"dreaming.restartConfirmation.restarting",
|
||||||
|
"dreaming.restartConfirmation.subtitle",
|
||||||
|
"dreaming.restartConfirmation.title",
|
||||||
|
"dreaming.restartConfirmation.warning",
|
||||||
|
"dreaming.scene.backfill",
|
||||||
|
"dreaming.scene.clearGrounded",
|
||||||
|
"dreaming.scene.dedupeDiary",
|
||||||
|
"dreaming.scene.repairCache",
|
||||||
|
"dreaming.scene.reset",
|
||||||
|
"dreaming.scene.working",
|
||||||
|
"dreaming.stats.grounded",
|
||||||
|
"dreaming.stats.phaseHits",
|
||||||
|
"dreaming.stats.promoted",
|
||||||
|
"dreaming.stats.shortTerm",
|
||||||
|
"dreaming.stats.signals",
|
||||||
|
"dreaming.status.active",
|
||||||
|
"dreaming.status.idle",
|
||||||
|
"dreaming.status.nextSweepPrefix",
|
||||||
|
"dreaming.status.promotedSuffix",
|
||||||
|
"dreaming.tabs.advanced",
|
||||||
|
"dreaming.tabs.diary",
|
||||||
|
"dreaming.tabs.scene",
|
||||||
|
"dreaming.trace.emptyGrounded",
|
||||||
|
"dreaming.trace.emptyPromoted",
|
||||||
|
"dreaming.trace.emptyShortTerm",
|
||||||
|
"dreaming.trace.emptySignals",
|
||||||
|
"dreaming.trace.grounded",
|
||||||
|
"dreaming.trace.groundedLed",
|
||||||
|
"dreaming.trace.promoted",
|
||||||
|
"dreaming.trace.shortTerm",
|
||||||
|
"dreaming.trace.signals",
|
||||||
|
"instances.hideHosts",
|
||||||
|
"instances.lastInput",
|
||||||
|
"instances.noInstances",
|
||||||
|
"instances.reason",
|
||||||
|
"instances.showHosts",
|
||||||
|
"instances.subtitle",
|
||||||
|
"instances.title",
|
||||||
|
"instances.toggleHostVisibility",
|
||||||
|
"languages.ar",
|
||||||
|
"languages.de",
|
||||||
|
"languages.en",
|
||||||
|
"languages.es",
|
||||||
|
"languages.fa",
|
||||||
|
"languages.fr",
|
||||||
|
"languages.id",
|
||||||
|
"languages.it",
|
||||||
|
"languages.jaJP",
|
||||||
|
"languages.ko",
|
||||||
|
"languages.nl",
|
||||||
|
"languages.pl",
|
||||||
|
"languages.ptBR",
|
||||||
|
"languages.th",
|
||||||
|
"languages.tr",
|
||||||
|
"languages.uk",
|
||||||
|
"languages.vi",
|
||||||
|
"languages.zhCN",
|
||||||
|
"languages.zhTW",
|
||||||
|
"lazyView.errorSubtitle",
|
||||||
|
"lazyView.errorTitle",
|
||||||
|
"lazyView.loadingTitle",
|
||||||
|
"lazyView.retry",
|
||||||
|
"lazyView.unknownError",
|
||||||
|
"login.hidePassword",
|
||||||
|
"login.hideToken",
|
||||||
|
"login.passwordPlaceholder",
|
||||||
|
"login.showPassword",
|
||||||
|
"login.showToken",
|
||||||
|
"login.subtitle",
|
||||||
|
"login.togglePasswordVisibility",
|
||||||
|
"login.toggleTokenVisibility",
|
||||||
|
"nav.agent",
|
||||||
|
"nav.chat",
|
||||||
|
"nav.collapse",
|
||||||
|
"nav.control",
|
||||||
|
"nav.expand",
|
||||||
|
"nav.resize",
|
||||||
|
"nav.settings",
|
||||||
|
"nodes.binding.defaultBinding",
|
||||||
|
"nodes.binding.defaultBindingHint",
|
||||||
|
"nodes.binding.execNodeBinding",
|
||||||
|
"nodes.binding.execNodeBindingSubtitle",
|
||||||
|
"nodes.binding.formModeHint",
|
||||||
|
"nodes.binding.loadConfigHint",
|
||||||
|
"nodes.binding.node",
|
||||||
|
"overview.access.connectHint",
|
||||||
|
"overview.access.hidePassword",
|
||||||
|
"overview.access.hideToken",
|
||||||
|
"overview.access.language",
|
||||||
|
"overview.access.password",
|
||||||
|
"overview.access.passwordPlaceholder",
|
||||||
|
"overview.access.sessionKey",
|
||||||
|
"overview.access.showPassword",
|
||||||
|
"overview.access.showToken",
|
||||||
|
"overview.access.subtitle",
|
||||||
|
"overview.access.title",
|
||||||
|
"overview.access.togglePasswordVisibility",
|
||||||
|
"overview.access.toggleTokenVisibility",
|
||||||
|
"overview.access.token",
|
||||||
|
"overview.access.trustedProxy",
|
||||||
|
"overview.access.wsUrl",
|
||||||
|
"overview.attention.title",
|
||||||
|
"overview.auth.failed",
|
||||||
|
"overview.auth.required",
|
||||||
|
"overview.cards.cost",
|
||||||
|
"overview.cards.modelAuth",
|
||||||
|
"overview.cards.modelAuthAttentionExpiredDesc",
|
||||||
|
"overview.cards.modelAuthAttentionExpiredTitle",
|
||||||
|
"overview.cards.modelAuthAttentionExpiringEntry",
|
||||||
|
"overview.cards.modelAuthAttentionExpiringTitle",
|
||||||
|
"overview.cards.modelAuthExpired",
|
||||||
|
"overview.cards.modelAuthExpiresIn",
|
||||||
|
"overview.cards.modelAuthExpiring",
|
||||||
|
"overview.cards.modelAuthOk",
|
||||||
|
"overview.cards.modelAuthProviders",
|
||||||
|
"overview.cards.modelAuthUsageLeft",
|
||||||
|
"overview.cards.recentSessions",
|
||||||
|
"overview.cards.skills",
|
||||||
|
"overview.connection.authDocsLink",
|
||||||
|
"overview.connection.authDocsTitle",
|
||||||
|
"overview.connection.copyCommand",
|
||||||
|
"overview.connection.copyCommandAria",
|
||||||
|
"overview.connection.docsHint",
|
||||||
|
"overview.connection.docsLink",
|
||||||
|
"overview.connection.insecureHttpDocsLink",
|
||||||
|
"overview.connection.insecureHttpDocsTitle",
|
||||||
|
"overview.connection.step1",
|
||||||
|
"overview.connection.step2",
|
||||||
|
"overview.connection.step3",
|
||||||
|
"overview.connection.step4",
|
||||||
|
"overview.connection.tailscaleDocsLink",
|
||||||
|
"overview.connection.tailscaleDocsTitle",
|
||||||
|
"overview.connection.title",
|
||||||
|
"overview.eventLog.title",
|
||||||
|
"overview.insecure.hint",
|
||||||
|
"overview.insecure.stayHttp",
|
||||||
|
"overview.logTail.title",
|
||||||
|
"overview.notes.cronText",
|
||||||
|
"overview.notes.cronTitle",
|
||||||
|
"overview.notes.sessionText",
|
||||||
|
"overview.notes.sessionTitle",
|
||||||
|
"overview.notes.subtitle",
|
||||||
|
"overview.notes.tailscaleText",
|
||||||
|
"overview.notes.tailscaleTitle",
|
||||||
|
"overview.notes.title",
|
||||||
|
"overview.pairing.docsLink",
|
||||||
|
"overview.pairing.docsTitle",
|
||||||
|
"overview.pairing.hint",
|
||||||
|
"overview.pairing.metadataUpgradeSummary",
|
||||||
|
"overview.pairing.metadataUpgradeTitle",
|
||||||
|
"overview.pairing.mobileHint",
|
||||||
|
"overview.pairing.roleUpgradeSummary",
|
||||||
|
"overview.pairing.roleUpgradeTitle",
|
||||||
|
"overview.pairing.scopeUpgradeSummary",
|
||||||
|
"overview.pairing.scopeUpgradeTitle",
|
||||||
|
"overview.palette.categories.navigation",
|
||||||
|
"overview.palette.categories.search",
|
||||||
|
"overview.palette.categories.skills",
|
||||||
|
"overview.palette.descriptions.debugMode",
|
||||||
|
"overview.palette.descriptions.shellCommand",
|
||||||
|
"overview.palette.footer.close",
|
||||||
|
"overview.palette.footer.navigate",
|
||||||
|
"overview.palette.footer.select",
|
||||||
|
"overview.palette.items.agents",
|
||||||
|
"overview.palette.items.debugMode",
|
||||||
|
"overview.palette.items.overview",
|
||||||
|
"overview.palette.items.scheduled",
|
||||||
|
"overview.palette.items.sessions",
|
||||||
|
"overview.palette.items.settings",
|
||||||
|
"overview.palette.items.shellCommand",
|
||||||
|
"overview.palette.items.skills",
|
||||||
|
"overview.palette.noResults",
|
||||||
|
"overview.palette.placeholder",
|
||||||
|
"overview.quickActions.automation",
|
||||||
|
"overview.quickActions.newSession",
|
||||||
|
"overview.quickActions.refreshAll",
|
||||||
|
"overview.quickActions.terminal",
|
||||||
|
"overview.snapshot.channelsHint",
|
||||||
|
"overview.snapshot.lastChannelsRefresh",
|
||||||
|
"overview.snapshot.status",
|
||||||
|
"overview.snapshot.subtitle",
|
||||||
|
"overview.snapshot.tickInterval",
|
||||||
|
"overview.snapshot.title",
|
||||||
|
"overview.snapshot.uptime",
|
||||||
|
"overview.stats.cron",
|
||||||
|
"overview.stats.cronNext",
|
||||||
|
"overview.stats.instances",
|
||||||
|
"overview.stats.instancesHint",
|
||||||
|
"overview.stats.sessions",
|
||||||
|
"overview.stats.sessionsHint",
|
||||||
|
"subtitles.agents",
|
||||||
|
"subtitles.aiAgents",
|
||||||
|
"subtitles.appearance",
|
||||||
|
"subtitles.automation",
|
||||||
|
"subtitles.channels",
|
||||||
|
"subtitles.chat",
|
||||||
|
"subtitles.communications",
|
||||||
|
"subtitles.config",
|
||||||
|
"subtitles.cron",
|
||||||
|
"subtitles.debug",
|
||||||
|
"subtitles.dreams",
|
||||||
|
"subtitles.infrastructure",
|
||||||
|
"subtitles.instances",
|
||||||
|
"subtitles.logs",
|
||||||
|
"subtitles.nodes",
|
||||||
|
"subtitles.overview",
|
||||||
|
"subtitles.sessions",
|
||||||
|
"subtitles.skills",
|
||||||
|
"subtitles.usage",
|
||||||
|
"tabs.agents",
|
||||||
|
"tabs.aiAgents",
|
||||||
|
"tabs.appearance",
|
||||||
|
"tabs.automation",
|
||||||
|
"tabs.channels",
|
||||||
|
"tabs.chat",
|
||||||
|
"tabs.communications",
|
||||||
|
"tabs.config",
|
||||||
|
"tabs.cron",
|
||||||
|
"tabs.debug",
|
||||||
|
"tabs.dreams",
|
||||||
|
"tabs.infrastructure",
|
||||||
|
"tabs.instances",
|
||||||
|
"tabs.logs",
|
||||||
|
"tabs.nodes",
|
||||||
|
"tabs.overview",
|
||||||
|
"tabs.sessions",
|
||||||
|
"tabs.skills",
|
||||||
|
"tabs.usage",
|
||||||
|
"usage.breakdown.cacheRead",
|
||||||
|
"usage.breakdown.cacheWrite",
|
||||||
|
"usage.breakdown.costByType",
|
||||||
|
"usage.breakdown.input",
|
||||||
|
"usage.breakdown.output",
|
||||||
|
"usage.breakdown.tokensByType",
|
||||||
|
"usage.breakdown.total",
|
||||||
|
"usage.common.emptyValue",
|
||||||
|
"usage.common.unknown",
|
||||||
|
"usage.daily.byType",
|
||||||
|
"usage.daily.costTitle",
|
||||||
|
"usage.daily.title",
|
||||||
|
"usage.daily.tokensTitle",
|
||||||
|
"usage.daily.total",
|
||||||
|
"usage.details.assistantOutputTokens",
|
||||||
|
"usage.details.baseContextPerMessage",
|
||||||
|
"usage.details.close",
|
||||||
|
"usage.details.collapse",
|
||||||
|
"usage.details.collapseAll",
|
||||||
|
"usage.details.conversation",
|
||||||
|
"usage.details.cumulative",
|
||||||
|
"usage.details.duration",
|
||||||
|
"usage.details.expandAll",
|
||||||
|
"usage.details.files",
|
||||||
|
"usage.details.filtered",
|
||||||
|
"usage.details.hasTools",
|
||||||
|
"usage.details.modelMix",
|
||||||
|
"usage.details.noContextData",
|
||||||
|
"usage.details.noDataInRange",
|
||||||
|
"usage.details.noMessages",
|
||||||
|
"usage.details.noMessagesMatch",
|
||||||
|
"usage.details.noTimeline",
|
||||||
|
"usage.details.noUsageData",
|
||||||
|
"usage.details.of",
|
||||||
|
"usage.details.ofInput",
|
||||||
|
"usage.details.perTurn",
|
||||||
|
"usage.details.reset",
|
||||||
|
"usage.details.searchConversation",
|
||||||
|
"usage.details.skills",
|
||||||
|
"usage.details.system",
|
||||||
|
"usage.details.systemPromptBreakdown",
|
||||||
|
"usage.details.systemShort",
|
||||||
|
"usage.details.timelineFiltered",
|
||||||
|
"usage.details.tokensReadFromCache",
|
||||||
|
"usage.details.tokensWrittenToCache",
|
||||||
|
"usage.details.tool",
|
||||||
|
"usage.details.toolResult",
|
||||||
|
"usage.details.tools",
|
||||||
|
"usage.details.turnRange",
|
||||||
|
"usage.details.usageOverTime",
|
||||||
|
"usage.details.userToolInputTokens",
|
||||||
|
"usage.details.you",
|
||||||
|
"usage.empty.featureOverview",
|
||||||
|
"usage.empty.featureSessions",
|
||||||
|
"usage.empty.featureTimeline",
|
||||||
|
"usage.empty.hint",
|
||||||
|
"usage.empty.noData",
|
||||||
|
"usage.empty.subtitle",
|
||||||
|
"usage.empty.title",
|
||||||
|
"usage.export.dailyCsv",
|
||||||
|
"usage.export.json",
|
||||||
|
"usage.export.label",
|
||||||
|
"usage.export.sessionsCsv",
|
||||||
|
"usage.filters.agent",
|
||||||
|
"usage.filters.all",
|
||||||
|
"usage.filters.channel",
|
||||||
|
"usage.filters.clear",
|
||||||
|
"usage.filters.clearAll",
|
||||||
|
"usage.filters.days",
|
||||||
|
"usage.filters.daysCount",
|
||||||
|
"usage.filters.endDate",
|
||||||
|
"usage.filters.hours",
|
||||||
|
"usage.filters.hoursCount",
|
||||||
|
"usage.filters.model",
|
||||||
|
"usage.filters.pin",
|
||||||
|
"usage.filters.pinned",
|
||||||
|
"usage.filters.provider",
|
||||||
|
"usage.filters.remove",
|
||||||
|
"usage.filters.selectAll",
|
||||||
|
"usage.filters.session",
|
||||||
|
"usage.filters.sessionsCount",
|
||||||
|
"usage.filters.startDate",
|
||||||
|
"usage.filters.timeZone",
|
||||||
|
"usage.filters.timeZoneLocal",
|
||||||
|
"usage.filters.timeZoneUtc",
|
||||||
|
"usage.filters.title",
|
||||||
|
"usage.filters.to",
|
||||||
|
"usage.filters.tool",
|
||||||
|
"usage.filters.unpin",
|
||||||
|
"usage.loading.badge",
|
||||||
|
"usage.loading.title",
|
||||||
|
"usage.metrics.cost",
|
||||||
|
"usage.metrics.session",
|
||||||
|
"usage.metrics.sessions",
|
||||||
|
"usage.metrics.tokens",
|
||||||
|
"usage.mosaic.dayOfWeek",
|
||||||
|
"usage.mosaic.eightAm",
|
||||||
|
"usage.mosaic.eightPm",
|
||||||
|
"usage.mosaic.fourAm",
|
||||||
|
"usage.mosaic.fourPm",
|
||||||
|
"usage.mosaic.fri",
|
||||||
|
"usage.mosaic.legend",
|
||||||
|
"usage.mosaic.midnight",
|
||||||
|
"usage.mosaic.mon",
|
||||||
|
"usage.mosaic.noon",
|
||||||
|
"usage.mosaic.noTimelineData",
|
||||||
|
"usage.mosaic.sat",
|
||||||
|
"usage.mosaic.subtitle",
|
||||||
|
"usage.mosaic.subtitleEmpty",
|
||||||
|
"usage.mosaic.sun",
|
||||||
|
"usage.mosaic.thu",
|
||||||
|
"usage.mosaic.title",
|
||||||
|
"usage.mosaic.tue",
|
||||||
|
"usage.mosaic.wed",
|
||||||
|
"usage.overview.acrossMessages",
|
||||||
|
"usage.overview.assistant",
|
||||||
|
"usage.overview.avgCost",
|
||||||
|
"usage.overview.avgCostHint",
|
||||||
|
"usage.overview.avgCostHintMissing",
|
||||||
|
"usage.overview.avgSession",
|
||||||
|
"usage.overview.avgTokens",
|
||||||
|
"usage.overview.avgTokensHint",
|
||||||
|
"usage.overview.cached",
|
||||||
|
"usage.overview.cacheHint",
|
||||||
|
"usage.overview.cacheHitRate",
|
||||||
|
"usage.overview.calls",
|
||||||
|
"usage.overview.errorHint",
|
||||||
|
"usage.overview.errorRate",
|
||||||
|
"usage.overview.errors",
|
||||||
|
"usage.overview.errorsHint",
|
||||||
|
"usage.overview.messages",
|
||||||
|
"usage.overview.messagesAbbrev",
|
||||||
|
"usage.overview.messagesHint",
|
||||||
|
"usage.overview.noAgentData",
|
||||||
|
"usage.overview.noChannelData",
|
||||||
|
"usage.overview.noErrorData",
|
||||||
|
"usage.overview.noModelData",
|
||||||
|
"usage.overview.noProviderData",
|
||||||
|
"usage.overview.noToolCalls",
|
||||||
|
"usage.overview.peakErrorDays",
|
||||||
|
"usage.overview.peakErrorHours",
|
||||||
|
"usage.overview.perMinute",
|
||||||
|
"usage.overview.prompt",
|
||||||
|
"usage.overview.sessions",
|
||||||
|
"usage.overview.sessionsHint",
|
||||||
|
"usage.overview.sessionsInRange",
|
||||||
|
"usage.overview.throughput",
|
||||||
|
"usage.overview.throughputHint",
|
||||||
|
"usage.overview.title",
|
||||||
|
"usage.overview.tokensPerMinute",
|
||||||
|
"usage.overview.toolCalls",
|
||||||
|
"usage.overview.toolCallsHint",
|
||||||
|
"usage.overview.toolResults",
|
||||||
|
"usage.overview.toolsUsed",
|
||||||
|
"usage.overview.topAgents",
|
||||||
|
"usage.overview.topChannels",
|
||||||
|
"usage.overview.topModels",
|
||||||
|
"usage.overview.topProviders",
|
||||||
|
"usage.overview.topTools",
|
||||||
|
"usage.overview.user",
|
||||||
|
"usage.page.subtitle",
|
||||||
|
"usage.presets.last30d",
|
||||||
|
"usage.presets.last7d",
|
||||||
|
"usage.presets.today",
|
||||||
|
"usage.query.apply",
|
||||||
|
"usage.query.inRange",
|
||||||
|
"usage.query.matching",
|
||||||
|
"usage.query.placeholder",
|
||||||
|
"usage.query.tip",
|
||||||
|
"usage.sessions.all",
|
||||||
|
"usage.sessions.ascending",
|
||||||
|
"usage.sessions.avg",
|
||||||
|
"usage.sessions.clearSelection",
|
||||||
|
"usage.sessions.copy",
|
||||||
|
"usage.sessions.copyName",
|
||||||
|
"usage.sessions.descending",
|
||||||
|
"usage.sessions.limitReached",
|
||||||
|
"usage.sessions.more",
|
||||||
|
"usage.sessions.noneInRange",
|
||||||
|
"usage.sessions.noRecent",
|
||||||
|
"usage.sessions.recent",
|
||||||
|
"usage.sessions.recentShort",
|
||||||
|
"usage.sessions.selected",
|
||||||
|
"usage.sessions.shown",
|
||||||
|
"usage.sessions.sort",
|
||||||
|
"usage.sessions.title",
|
||||||
|
"usage.sessions.total"
|
||||||
|
],
|
||||||
|
"generatedAt": "2026-04-29T14:17:54.734Z",
|
||||||
|
"locale": "nl",
|
||||||
|
"model": "",
|
||||||
|
"provider": "",
|
||||||
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
|
"totalKeys": 768,
|
||||||
|
"translatedKeys": 0,
|
||||||
|
"workflow": 1
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"fallbackKeys": [],
|
"fallbackKeys": ["languages.ar", "languages.fa", "languages.it", "languages.nl", "languages.vi"],
|
||||||
"generatedAt": "2026-04-27T12:12:49.607Z",
|
"generatedAt": "2026-04-29T17:08:07.501Z",
|
||||||
"locale": "pl",
|
"locale": "pl",
|
||||||
"model": "gpt-5.5",
|
"model": "gpt-5.5",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"sourceHash": "5e92fbfbb7e3026ea5f3a0835d933c9ce79369a85b1cf0628b1c86369f1c822d",
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
"totalKeys": 763,
|
"totalKeys": 768,
|
||||||
"translatedKeys": 763,
|
"translatedKeys": 763,
|
||||||
"workflow": 1
|
"workflow": 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"fallbackKeys": [],
|
"fallbackKeys": ["languages.ar", "languages.fa", "languages.it", "languages.nl", "languages.vi"],
|
||||||
"generatedAt": "2026-04-27T12:10:49.972Z",
|
"generatedAt": "2026-04-29T17:07:48.486Z",
|
||||||
"locale": "pt-BR",
|
"locale": "pt-BR",
|
||||||
"model": "gpt-5.5",
|
"model": "gpt-5.5",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"sourceHash": "5e92fbfbb7e3026ea5f3a0835d933c9ce79369a85b1cf0628b1c86369f1c822d",
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
"totalKeys": 763,
|
"totalKeys": 768,
|
||||||
"translatedKeys": 763,
|
"translatedKeys": 763,
|
||||||
"workflow": 1
|
"workflow": 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"fallbackKeys": [],
|
"fallbackKeys": ["languages.ar", "languages.fa", "languages.it", "languages.nl", "languages.vi"],
|
||||||
"generatedAt": "2026-04-27T12:13:28.699Z",
|
"generatedAt": "2026-04-29T17:08:09.056Z",
|
||||||
"locale": "th",
|
"locale": "th",
|
||||||
"model": "gpt-5.5",
|
"model": "gpt-5.5",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"sourceHash": "5e92fbfbb7e3026ea5f3a0835d933c9ce79369a85b1cf0628b1c86369f1c822d",
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
"totalKeys": 763,
|
"totalKeys": 768,
|
||||||
"translatedKeys": 763,
|
"translatedKeys": 763,
|
||||||
"workflow": 1
|
"workflow": 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"fallbackKeys": [],
|
"fallbackKeys": ["languages.ar", "languages.fa", "languages.it", "languages.nl", "languages.vi"],
|
||||||
"generatedAt": "2026-04-27T12:12:31.141Z",
|
"generatedAt": "2026-04-29T17:08:02.822Z",
|
||||||
"locale": "tr",
|
"locale": "tr",
|
||||||
"model": "gpt-5.5",
|
"model": "gpt-5.5",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"sourceHash": "5e92fbfbb7e3026ea5f3a0835d933c9ce79369a85b1cf0628b1c86369f1c822d",
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
"totalKeys": 763,
|
"totalKeys": 768,
|
||||||
"translatedKeys": 763,
|
"translatedKeys": 763,
|
||||||
"workflow": 1
|
"workflow": 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"fallbackKeys": [],
|
"fallbackKeys": ["languages.ar", "languages.fa", "languages.it", "languages.nl", "languages.vi"],
|
||||||
"generatedAt": "2026-04-27T12:12:37.957Z",
|
"generatedAt": "2026-04-29T17:08:04.234Z",
|
||||||
"locale": "uk",
|
"locale": "uk",
|
||||||
"model": "gpt-5.5",
|
"model": "gpt-5.5",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"sourceHash": "5e92fbfbb7e3026ea5f3a0835d933c9ce79369a85b1cf0628b1c86369f1c822d",
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
"totalKeys": 763,
|
"totalKeys": 768,
|
||||||
"translatedKeys": 763,
|
"translatedKeys": 763,
|
||||||
"workflow": 1
|
"workflow": 1
|
||||||
}
|
}
|
||||||
|
|||||||
780
ui/src/i18n/.i18n/vi.meta.json
Normal file
780
ui/src/i18n/.i18n/vi.meta.json
Normal file
@@ -0,0 +1,780 @@
|
|||||||
|
{
|
||||||
|
"fallbackKeys": [
|
||||||
|
"agentTools.builtIn",
|
||||||
|
"agentTools.channel",
|
||||||
|
"agentTools.channelSource",
|
||||||
|
"agentTools.connected",
|
||||||
|
"agentTools.connectedSource",
|
||||||
|
"channels.gatewayUrlConfirmation.subtitle",
|
||||||
|
"channels.gatewayUrlConfirmation.title",
|
||||||
|
"channels.gatewayUrlConfirmation.warning",
|
||||||
|
"channels.generic.subtitle",
|
||||||
|
"channels.health.noSnapshotYet",
|
||||||
|
"channels.health.subtitle",
|
||||||
|
"channels.health.title",
|
||||||
|
"channels.nostr.about",
|
||||||
|
"channels.nostr.account",
|
||||||
|
"channels.nostr.advanced",
|
||||||
|
"channels.nostr.avatarHelp",
|
||||||
|
"channels.nostr.avatarUrl",
|
||||||
|
"channels.nostr.bannerHelp",
|
||||||
|
"channels.nostr.bannerUrl",
|
||||||
|
"channels.nostr.bio",
|
||||||
|
"channels.nostr.bioHelp",
|
||||||
|
"channels.nostr.bioPlaceholder",
|
||||||
|
"channels.nostr.displayName",
|
||||||
|
"channels.nostr.displayNameHelp",
|
||||||
|
"channels.nostr.editProfile",
|
||||||
|
"channels.nostr.lightningAddress",
|
||||||
|
"channels.nostr.lightningHelp",
|
||||||
|
"channels.nostr.name",
|
||||||
|
"channels.nostr.nip05Help",
|
||||||
|
"channels.nostr.nip05Identifier",
|
||||||
|
"channels.nostr.noProfile",
|
||||||
|
"channels.nostr.noProfileHint",
|
||||||
|
"channels.nostr.profile",
|
||||||
|
"channels.nostr.profilePicture",
|
||||||
|
"channels.nostr.profilePicturePreview",
|
||||||
|
"channels.nostr.username",
|
||||||
|
"channels.nostr.usernameHelp",
|
||||||
|
"channels.nostr.website",
|
||||||
|
"channels.nostr.websiteHelp",
|
||||||
|
"chat.disconnected",
|
||||||
|
"chat.focusToggle",
|
||||||
|
"chat.hideCronSessions",
|
||||||
|
"chat.onboardingDisabled",
|
||||||
|
"chat.refreshTitle",
|
||||||
|
"chat.showCronSessions",
|
||||||
|
"chat.showCronSessionsHidden",
|
||||||
|
"chat.thinkingToggle",
|
||||||
|
"chat.toolCallsToggle",
|
||||||
|
"common.active",
|
||||||
|
"common.audience",
|
||||||
|
"common.authAge",
|
||||||
|
"common.baseUrl",
|
||||||
|
"common.call",
|
||||||
|
"common.cancel",
|
||||||
|
"common.configured",
|
||||||
|
"common.confirm",
|
||||||
|
"common.connect",
|
||||||
|
"common.connected",
|
||||||
|
"common.credential",
|
||||||
|
"common.disabled",
|
||||||
|
"common.docs",
|
||||||
|
"common.enabled",
|
||||||
|
"common.health",
|
||||||
|
"common.hideAdvanced",
|
||||||
|
"common.importFromRelays",
|
||||||
|
"common.importing",
|
||||||
|
"common.lastConnect",
|
||||||
|
"common.lastInbound",
|
||||||
|
"common.lastMessage",
|
||||||
|
"common.lastProbe",
|
||||||
|
"common.lastStart",
|
||||||
|
"common.linked",
|
||||||
|
"common.loadApprovals",
|
||||||
|
"common.loadConfig",
|
||||||
|
"common.loading",
|
||||||
|
"common.logout",
|
||||||
|
"common.mode",
|
||||||
|
"common.na",
|
||||||
|
"common.no",
|
||||||
|
"common.offline",
|
||||||
|
"common.ok",
|
||||||
|
"common.online",
|
||||||
|
"common.probe",
|
||||||
|
"common.probeFailed",
|
||||||
|
"common.probeOk",
|
||||||
|
"common.publicKey",
|
||||||
|
"common.refresh",
|
||||||
|
"common.refreshing",
|
||||||
|
"common.relink",
|
||||||
|
"common.reload",
|
||||||
|
"common.reloadConfig",
|
||||||
|
"common.resources",
|
||||||
|
"common.running",
|
||||||
|
"common.save",
|
||||||
|
"common.saveAndPublish",
|
||||||
|
"common.saving",
|
||||||
|
"common.search",
|
||||||
|
"common.secondsAgo",
|
||||||
|
"common.settingsSections",
|
||||||
|
"common.showAdvanced",
|
||||||
|
"common.showQr",
|
||||||
|
"common.theme",
|
||||||
|
"common.unsavedChanges",
|
||||||
|
"common.unselect",
|
||||||
|
"common.version",
|
||||||
|
"common.waitForScan",
|
||||||
|
"common.working",
|
||||||
|
"common.yes",
|
||||||
|
"cron.errors.agentMessageRequired",
|
||||||
|
"cron.errors.agentMessageRequiredShort",
|
||||||
|
"cron.errors.cronExprRequired",
|
||||||
|
"cron.errors.cronExprRequiredShort",
|
||||||
|
"cron.errors.everyAmountInvalid",
|
||||||
|
"cron.errors.invalidIntervalAmount",
|
||||||
|
"cron.errors.invalidRunTime",
|
||||||
|
"cron.errors.invalidStaggerAmount",
|
||||||
|
"cron.errors.nameRequired",
|
||||||
|
"cron.errors.nameRequiredShort",
|
||||||
|
"cron.errors.scheduleAtInvalid",
|
||||||
|
"cron.errors.staggerAmountInvalid",
|
||||||
|
"cron.errors.systemEventTextRequired",
|
||||||
|
"cron.errors.systemTextRequired",
|
||||||
|
"cron.errors.timeoutInvalid",
|
||||||
|
"cron.errors.webhookUrlInvalid",
|
||||||
|
"cron.errors.webhookUrlRequired",
|
||||||
|
"cron.form.addJob",
|
||||||
|
"cron.form.advanced",
|
||||||
|
"cron.form.advancedHelp",
|
||||||
|
"cron.form.agentHelp",
|
||||||
|
"cron.form.agentId",
|
||||||
|
"cron.form.agentPlaceholder",
|
||||||
|
"cron.form.agentTurn",
|
||||||
|
"cron.form.agentTurnHelp",
|
||||||
|
"cron.form.announceDefault",
|
||||||
|
"cron.form.assistantTaskPrompt",
|
||||||
|
"cron.form.at",
|
||||||
|
"cron.form.basics",
|
||||||
|
"cron.form.basicsSub",
|
||||||
|
"cron.form.bestEffortDelivery",
|
||||||
|
"cron.form.bestEffortHelp",
|
||||||
|
"cron.form.cancel",
|
||||||
|
"cron.form.cantAddYet",
|
||||||
|
"cron.form.channel",
|
||||||
|
"cron.form.channelHelp",
|
||||||
|
"cron.form.clearAgentHelp",
|
||||||
|
"cron.form.clearAgentOverride",
|
||||||
|
"cron.form.createSubtitle",
|
||||||
|
"cron.form.cronOption",
|
||||||
|
"cron.form.days",
|
||||||
|
"cron.form.deleteAfterRun",
|
||||||
|
"cron.form.deleteAfterRunHelp",
|
||||||
|
"cron.form.deliveryHelp",
|
||||||
|
"cron.form.deliverySection",
|
||||||
|
"cron.form.deliverySub",
|
||||||
|
"cron.form.description",
|
||||||
|
"cron.form.descriptionPlaceholder",
|
||||||
|
"cron.form.editJob",
|
||||||
|
"cron.form.every",
|
||||||
|
"cron.form.everyAmountPlaceholder",
|
||||||
|
"cron.form.exactTiming",
|
||||||
|
"cron.form.exactTimingHelp",
|
||||||
|
"cron.form.execution",
|
||||||
|
"cron.form.executionSub",
|
||||||
|
"cron.form.expression",
|
||||||
|
"cron.form.expressionPlaceholder",
|
||||||
|
"cron.form.fieldName",
|
||||||
|
"cron.form.fillRequired",
|
||||||
|
"cron.form.fixFields",
|
||||||
|
"cron.form.fixFieldsPlural",
|
||||||
|
"cron.form.hours",
|
||||||
|
"cron.form.isolated",
|
||||||
|
"cron.form.jitterHelp",
|
||||||
|
"cron.form.main",
|
||||||
|
"cron.form.mainTimelineMessage",
|
||||||
|
"cron.form.minutes",
|
||||||
|
"cron.form.model",
|
||||||
|
"cron.form.modelHelp",
|
||||||
|
"cron.form.modelPlaceholder",
|
||||||
|
"cron.form.namePlaceholder",
|
||||||
|
"cron.form.newJob",
|
||||||
|
"cron.form.nextHeartbeat",
|
||||||
|
"cron.form.noneInternal",
|
||||||
|
"cron.form.now",
|
||||||
|
"cron.form.payloadKind",
|
||||||
|
"cron.form.required",
|
||||||
|
"cron.form.requiredSr",
|
||||||
|
"cron.form.resultDelivery",
|
||||||
|
"cron.form.runAt",
|
||||||
|
"cron.form.saveChanges",
|
||||||
|
"cron.form.saving",
|
||||||
|
"cron.form.schedule",
|
||||||
|
"cron.form.scheduleSub",
|
||||||
|
"cron.form.seconds",
|
||||||
|
"cron.form.session",
|
||||||
|
"cron.form.sessionHelp",
|
||||||
|
"cron.form.staggerPlaceholder",
|
||||||
|
"cron.form.staggerUnit",
|
||||||
|
"cron.form.staggerWindow",
|
||||||
|
"cron.form.systemEvent",
|
||||||
|
"cron.form.systemEventHelp",
|
||||||
|
"cron.form.thinking",
|
||||||
|
"cron.form.thinkingHelp",
|
||||||
|
"cron.form.thinkingPlaceholder",
|
||||||
|
"cron.form.timeoutHelp",
|
||||||
|
"cron.form.timeoutPlaceholder",
|
||||||
|
"cron.form.timeoutSeconds",
|
||||||
|
"cron.form.timezoneHelp",
|
||||||
|
"cron.form.timezoneOptional",
|
||||||
|
"cron.form.timezonePlaceholder",
|
||||||
|
"cron.form.to",
|
||||||
|
"cron.form.toHelp",
|
||||||
|
"cron.form.toPlaceholder",
|
||||||
|
"cron.form.unit",
|
||||||
|
"cron.form.updateSubtitle",
|
||||||
|
"cron.form.wakeMode",
|
||||||
|
"cron.form.wakeModeHelp",
|
||||||
|
"cron.form.webhookHelp",
|
||||||
|
"cron.form.webhookPlaceholder",
|
||||||
|
"cron.form.webhookPost",
|
||||||
|
"cron.form.webhookUrl",
|
||||||
|
"cron.jobDetail.agent",
|
||||||
|
"cron.jobDetail.delivery",
|
||||||
|
"cron.jobDetail.prompt",
|
||||||
|
"cron.jobDetail.system",
|
||||||
|
"cron.jobList.allJobs",
|
||||||
|
"cron.jobList.clone",
|
||||||
|
"cron.jobList.disable",
|
||||||
|
"cron.jobList.disabled",
|
||||||
|
"cron.jobList.edit",
|
||||||
|
"cron.jobList.enable",
|
||||||
|
"cron.jobList.enabled",
|
||||||
|
"cron.jobList.history",
|
||||||
|
"cron.jobList.remove",
|
||||||
|
"cron.jobList.run",
|
||||||
|
"cron.jobList.selectJob",
|
||||||
|
"cron.jobs.all",
|
||||||
|
"cron.jobs.ascending",
|
||||||
|
"cron.jobs.descending",
|
||||||
|
"cron.jobs.direction",
|
||||||
|
"cron.jobs.enabled",
|
||||||
|
"cron.jobs.lastRun",
|
||||||
|
"cron.jobs.loading",
|
||||||
|
"cron.jobs.loadMore",
|
||||||
|
"cron.jobs.name",
|
||||||
|
"cron.jobs.nextRun",
|
||||||
|
"cron.jobs.noMatching",
|
||||||
|
"cron.jobs.recentlyUpdated",
|
||||||
|
"cron.jobs.reset",
|
||||||
|
"cron.jobs.schedule",
|
||||||
|
"cron.jobs.searchJobs",
|
||||||
|
"cron.jobs.searchPlaceholder",
|
||||||
|
"cron.jobs.shownOf",
|
||||||
|
"cron.jobs.sort",
|
||||||
|
"cron.jobs.subtitle",
|
||||||
|
"cron.jobs.title",
|
||||||
|
"cron.jobState.last",
|
||||||
|
"cron.jobState.next",
|
||||||
|
"cron.jobState.status",
|
||||||
|
"cron.runEntry.due",
|
||||||
|
"cron.runEntry.next",
|
||||||
|
"cron.runEntry.noSummary",
|
||||||
|
"cron.runEntry.openRunChat",
|
||||||
|
"cron.runEntry.runAt",
|
||||||
|
"cron.runs.allDelivery",
|
||||||
|
"cron.runs.allJobs",
|
||||||
|
"cron.runs.allStatuses",
|
||||||
|
"cron.runs.clear",
|
||||||
|
"cron.runs.delivery",
|
||||||
|
"cron.runs.deliveryDelivered",
|
||||||
|
"cron.runs.deliveryNotDelivered",
|
||||||
|
"cron.runs.deliveryNotRequested",
|
||||||
|
"cron.runs.deliveryUnknown",
|
||||||
|
"cron.runs.loadMore",
|
||||||
|
"cron.runs.newestFirst",
|
||||||
|
"cron.runs.noMatching",
|
||||||
|
"cron.runs.oldestFirst",
|
||||||
|
"cron.runs.runStatusError",
|
||||||
|
"cron.runs.runStatusOk",
|
||||||
|
"cron.runs.runStatusSkipped",
|
||||||
|
"cron.runs.runStatusUnknown",
|
||||||
|
"cron.runs.scope",
|
||||||
|
"cron.runs.searchPlaceholder",
|
||||||
|
"cron.runs.searchRuns",
|
||||||
|
"cron.runs.selectedJob",
|
||||||
|
"cron.runs.selectJobHint",
|
||||||
|
"cron.runs.status",
|
||||||
|
"cron.runs.subtitleAll",
|
||||||
|
"cron.runs.subtitleJob",
|
||||||
|
"cron.runs.title",
|
||||||
|
"cron.summary.enabled",
|
||||||
|
"cron.summary.jobs",
|
||||||
|
"cron.summary.nextWake",
|
||||||
|
"cron.summary.no",
|
||||||
|
"cron.summary.refresh",
|
||||||
|
"cron.summary.refreshing",
|
||||||
|
"cron.summary.yes",
|
||||||
|
"dreaming.advanced.description",
|
||||||
|
"dreaming.advanced.emptyGrounded",
|
||||||
|
"dreaming.advanced.emptyPromoted",
|
||||||
|
"dreaming.advanced.emptyShortTerm",
|
||||||
|
"dreaming.advanced.eyebrow",
|
||||||
|
"dreaming.advanced.originDailyLog",
|
||||||
|
"dreaming.advanced.originLive",
|
||||||
|
"dreaming.advanced.originMixed",
|
||||||
|
"dreaming.advanced.promotedDescription",
|
||||||
|
"dreaming.advanced.promotedTitle",
|
||||||
|
"dreaming.advanced.shortTermDescription",
|
||||||
|
"dreaming.advanced.shortTermTitle",
|
||||||
|
"dreaming.advanced.sortRecent",
|
||||||
|
"dreaming.advanced.sortSignals",
|
||||||
|
"dreaming.advanced.stagedDescription",
|
||||||
|
"dreaming.advanced.stagedTitle",
|
||||||
|
"dreaming.advanced.summaryFromDailyLog",
|
||||||
|
"dreaming.advanced.summaryPromotedToday",
|
||||||
|
"dreaming.advanced.summaryWaiting",
|
||||||
|
"dreaming.advanced.title",
|
||||||
|
"dreaming.advanced.updatedPrefix",
|
||||||
|
"dreaming.diary.newer",
|
||||||
|
"dreaming.diary.noDreamsHint",
|
||||||
|
"dreaming.diary.noDreamsYet",
|
||||||
|
"dreaming.diary.older",
|
||||||
|
"dreaming.diary.reload",
|
||||||
|
"dreaming.diary.reloading",
|
||||||
|
"dreaming.diary.title",
|
||||||
|
"dreaming.diary.waitingHint",
|
||||||
|
"dreaming.diary.waitingTitle",
|
||||||
|
"dreaming.header.off",
|
||||||
|
"dreaming.header.on",
|
||||||
|
"dreaming.header.refresh",
|
||||||
|
"dreaming.header.refreshing",
|
||||||
|
"dreaming.phase.deep",
|
||||||
|
"dreaming.phase.light",
|
||||||
|
"dreaming.phase.off",
|
||||||
|
"dreaming.phase.rem",
|
||||||
|
"dreaming.phrases.alphabetizingSubconscious",
|
||||||
|
"dreaming.phrases.compostingContext",
|
||||||
|
"dreaming.phrases.connectingDots",
|
||||||
|
"dreaming.phrases.consolidatingMemories",
|
||||||
|
"dreaming.phrases.defragmentingMindPalace",
|
||||||
|
"dreaming.phrases.dreamingEmbeddings",
|
||||||
|
"dreaming.phrases.filingLooseThoughts",
|
||||||
|
"dreaming.phrases.forgettingNoise",
|
||||||
|
"dreaming.phrases.indexingDay",
|
||||||
|
"dreaming.phrases.nurturingInsights",
|
||||||
|
"dreaming.phrases.promotingHunches",
|
||||||
|
"dreaming.phrases.reorganizingAttic",
|
||||||
|
"dreaming.phrases.replayingConversations",
|
||||||
|
"dreaming.phrases.simmeringIdeas",
|
||||||
|
"dreaming.phrases.tidyingKnowledgeGraph",
|
||||||
|
"dreaming.phrases.weavingShortTerm",
|
||||||
|
"dreaming.phrases.whisperingVectorStore",
|
||||||
|
"dreaming.restartConfirmation.confirm",
|
||||||
|
"dreaming.restartConfirmation.failed",
|
||||||
|
"dreaming.restartConfirmation.restarting",
|
||||||
|
"dreaming.restartConfirmation.subtitle",
|
||||||
|
"dreaming.restartConfirmation.title",
|
||||||
|
"dreaming.restartConfirmation.warning",
|
||||||
|
"dreaming.scene.backfill",
|
||||||
|
"dreaming.scene.clearGrounded",
|
||||||
|
"dreaming.scene.dedupeDiary",
|
||||||
|
"dreaming.scene.repairCache",
|
||||||
|
"dreaming.scene.reset",
|
||||||
|
"dreaming.scene.working",
|
||||||
|
"dreaming.stats.grounded",
|
||||||
|
"dreaming.stats.phaseHits",
|
||||||
|
"dreaming.stats.promoted",
|
||||||
|
"dreaming.stats.shortTerm",
|
||||||
|
"dreaming.stats.signals",
|
||||||
|
"dreaming.status.active",
|
||||||
|
"dreaming.status.idle",
|
||||||
|
"dreaming.status.nextSweepPrefix",
|
||||||
|
"dreaming.status.promotedSuffix",
|
||||||
|
"dreaming.tabs.advanced",
|
||||||
|
"dreaming.tabs.diary",
|
||||||
|
"dreaming.tabs.scene",
|
||||||
|
"dreaming.trace.emptyGrounded",
|
||||||
|
"dreaming.trace.emptyPromoted",
|
||||||
|
"dreaming.trace.emptyShortTerm",
|
||||||
|
"dreaming.trace.emptySignals",
|
||||||
|
"dreaming.trace.grounded",
|
||||||
|
"dreaming.trace.groundedLed",
|
||||||
|
"dreaming.trace.promoted",
|
||||||
|
"dreaming.trace.shortTerm",
|
||||||
|
"dreaming.trace.signals",
|
||||||
|
"instances.hideHosts",
|
||||||
|
"instances.lastInput",
|
||||||
|
"instances.noInstances",
|
||||||
|
"instances.reason",
|
||||||
|
"instances.showHosts",
|
||||||
|
"instances.subtitle",
|
||||||
|
"instances.title",
|
||||||
|
"instances.toggleHostVisibility",
|
||||||
|
"languages.ar",
|
||||||
|
"languages.de",
|
||||||
|
"languages.en",
|
||||||
|
"languages.es",
|
||||||
|
"languages.fa",
|
||||||
|
"languages.fr",
|
||||||
|
"languages.id",
|
||||||
|
"languages.it",
|
||||||
|
"languages.jaJP",
|
||||||
|
"languages.ko",
|
||||||
|
"languages.nl",
|
||||||
|
"languages.pl",
|
||||||
|
"languages.ptBR",
|
||||||
|
"languages.th",
|
||||||
|
"languages.tr",
|
||||||
|
"languages.uk",
|
||||||
|
"languages.vi",
|
||||||
|
"languages.zhCN",
|
||||||
|
"languages.zhTW",
|
||||||
|
"lazyView.errorSubtitle",
|
||||||
|
"lazyView.errorTitle",
|
||||||
|
"lazyView.loadingTitle",
|
||||||
|
"lazyView.retry",
|
||||||
|
"lazyView.unknownError",
|
||||||
|
"login.hidePassword",
|
||||||
|
"login.hideToken",
|
||||||
|
"login.passwordPlaceholder",
|
||||||
|
"login.showPassword",
|
||||||
|
"login.showToken",
|
||||||
|
"login.subtitle",
|
||||||
|
"login.togglePasswordVisibility",
|
||||||
|
"login.toggleTokenVisibility",
|
||||||
|
"nav.agent",
|
||||||
|
"nav.chat",
|
||||||
|
"nav.collapse",
|
||||||
|
"nav.control",
|
||||||
|
"nav.expand",
|
||||||
|
"nav.resize",
|
||||||
|
"nav.settings",
|
||||||
|
"nodes.binding.defaultBinding",
|
||||||
|
"nodes.binding.defaultBindingHint",
|
||||||
|
"nodes.binding.execNodeBinding",
|
||||||
|
"nodes.binding.execNodeBindingSubtitle",
|
||||||
|
"nodes.binding.formModeHint",
|
||||||
|
"nodes.binding.loadConfigHint",
|
||||||
|
"nodes.binding.node",
|
||||||
|
"overview.access.connectHint",
|
||||||
|
"overview.access.hidePassword",
|
||||||
|
"overview.access.hideToken",
|
||||||
|
"overview.access.language",
|
||||||
|
"overview.access.password",
|
||||||
|
"overview.access.passwordPlaceholder",
|
||||||
|
"overview.access.sessionKey",
|
||||||
|
"overview.access.showPassword",
|
||||||
|
"overview.access.showToken",
|
||||||
|
"overview.access.subtitle",
|
||||||
|
"overview.access.title",
|
||||||
|
"overview.access.togglePasswordVisibility",
|
||||||
|
"overview.access.toggleTokenVisibility",
|
||||||
|
"overview.access.token",
|
||||||
|
"overview.access.trustedProxy",
|
||||||
|
"overview.access.wsUrl",
|
||||||
|
"overview.attention.title",
|
||||||
|
"overview.auth.failed",
|
||||||
|
"overview.auth.required",
|
||||||
|
"overview.cards.cost",
|
||||||
|
"overview.cards.modelAuth",
|
||||||
|
"overview.cards.modelAuthAttentionExpiredDesc",
|
||||||
|
"overview.cards.modelAuthAttentionExpiredTitle",
|
||||||
|
"overview.cards.modelAuthAttentionExpiringEntry",
|
||||||
|
"overview.cards.modelAuthAttentionExpiringTitle",
|
||||||
|
"overview.cards.modelAuthExpired",
|
||||||
|
"overview.cards.modelAuthExpiresIn",
|
||||||
|
"overview.cards.modelAuthExpiring",
|
||||||
|
"overview.cards.modelAuthOk",
|
||||||
|
"overview.cards.modelAuthProviders",
|
||||||
|
"overview.cards.modelAuthUsageLeft",
|
||||||
|
"overview.cards.recentSessions",
|
||||||
|
"overview.cards.skills",
|
||||||
|
"overview.connection.authDocsLink",
|
||||||
|
"overview.connection.authDocsTitle",
|
||||||
|
"overview.connection.copyCommand",
|
||||||
|
"overview.connection.copyCommandAria",
|
||||||
|
"overview.connection.docsHint",
|
||||||
|
"overview.connection.docsLink",
|
||||||
|
"overview.connection.insecureHttpDocsLink",
|
||||||
|
"overview.connection.insecureHttpDocsTitle",
|
||||||
|
"overview.connection.step1",
|
||||||
|
"overview.connection.step2",
|
||||||
|
"overview.connection.step3",
|
||||||
|
"overview.connection.step4",
|
||||||
|
"overview.connection.tailscaleDocsLink",
|
||||||
|
"overview.connection.tailscaleDocsTitle",
|
||||||
|
"overview.connection.title",
|
||||||
|
"overview.eventLog.title",
|
||||||
|
"overview.insecure.hint",
|
||||||
|
"overview.insecure.stayHttp",
|
||||||
|
"overview.logTail.title",
|
||||||
|
"overview.notes.cronText",
|
||||||
|
"overview.notes.cronTitle",
|
||||||
|
"overview.notes.sessionText",
|
||||||
|
"overview.notes.sessionTitle",
|
||||||
|
"overview.notes.subtitle",
|
||||||
|
"overview.notes.tailscaleText",
|
||||||
|
"overview.notes.tailscaleTitle",
|
||||||
|
"overview.notes.title",
|
||||||
|
"overview.pairing.docsLink",
|
||||||
|
"overview.pairing.docsTitle",
|
||||||
|
"overview.pairing.hint",
|
||||||
|
"overview.pairing.metadataUpgradeSummary",
|
||||||
|
"overview.pairing.metadataUpgradeTitle",
|
||||||
|
"overview.pairing.mobileHint",
|
||||||
|
"overview.pairing.roleUpgradeSummary",
|
||||||
|
"overview.pairing.roleUpgradeTitle",
|
||||||
|
"overview.pairing.scopeUpgradeSummary",
|
||||||
|
"overview.pairing.scopeUpgradeTitle",
|
||||||
|
"overview.palette.categories.navigation",
|
||||||
|
"overview.palette.categories.search",
|
||||||
|
"overview.palette.categories.skills",
|
||||||
|
"overview.palette.descriptions.debugMode",
|
||||||
|
"overview.palette.descriptions.shellCommand",
|
||||||
|
"overview.palette.footer.close",
|
||||||
|
"overview.palette.footer.navigate",
|
||||||
|
"overview.palette.footer.select",
|
||||||
|
"overview.palette.items.agents",
|
||||||
|
"overview.palette.items.debugMode",
|
||||||
|
"overview.palette.items.overview",
|
||||||
|
"overview.palette.items.scheduled",
|
||||||
|
"overview.palette.items.sessions",
|
||||||
|
"overview.palette.items.settings",
|
||||||
|
"overview.palette.items.shellCommand",
|
||||||
|
"overview.palette.items.skills",
|
||||||
|
"overview.palette.noResults",
|
||||||
|
"overview.palette.placeholder",
|
||||||
|
"overview.quickActions.automation",
|
||||||
|
"overview.quickActions.newSession",
|
||||||
|
"overview.quickActions.refreshAll",
|
||||||
|
"overview.quickActions.terminal",
|
||||||
|
"overview.snapshot.channelsHint",
|
||||||
|
"overview.snapshot.lastChannelsRefresh",
|
||||||
|
"overview.snapshot.status",
|
||||||
|
"overview.snapshot.subtitle",
|
||||||
|
"overview.snapshot.tickInterval",
|
||||||
|
"overview.snapshot.title",
|
||||||
|
"overview.snapshot.uptime",
|
||||||
|
"overview.stats.cron",
|
||||||
|
"overview.stats.cronNext",
|
||||||
|
"overview.stats.instances",
|
||||||
|
"overview.stats.instancesHint",
|
||||||
|
"overview.stats.sessions",
|
||||||
|
"overview.stats.sessionsHint",
|
||||||
|
"subtitles.agents",
|
||||||
|
"subtitles.aiAgents",
|
||||||
|
"subtitles.appearance",
|
||||||
|
"subtitles.automation",
|
||||||
|
"subtitles.channels",
|
||||||
|
"subtitles.chat",
|
||||||
|
"subtitles.communications",
|
||||||
|
"subtitles.config",
|
||||||
|
"subtitles.cron",
|
||||||
|
"subtitles.debug",
|
||||||
|
"subtitles.dreams",
|
||||||
|
"subtitles.infrastructure",
|
||||||
|
"subtitles.instances",
|
||||||
|
"subtitles.logs",
|
||||||
|
"subtitles.nodes",
|
||||||
|
"subtitles.overview",
|
||||||
|
"subtitles.sessions",
|
||||||
|
"subtitles.skills",
|
||||||
|
"subtitles.usage",
|
||||||
|
"tabs.agents",
|
||||||
|
"tabs.aiAgents",
|
||||||
|
"tabs.appearance",
|
||||||
|
"tabs.automation",
|
||||||
|
"tabs.channels",
|
||||||
|
"tabs.chat",
|
||||||
|
"tabs.communications",
|
||||||
|
"tabs.config",
|
||||||
|
"tabs.cron",
|
||||||
|
"tabs.debug",
|
||||||
|
"tabs.dreams",
|
||||||
|
"tabs.infrastructure",
|
||||||
|
"tabs.instances",
|
||||||
|
"tabs.logs",
|
||||||
|
"tabs.nodes",
|
||||||
|
"tabs.overview",
|
||||||
|
"tabs.sessions",
|
||||||
|
"tabs.skills",
|
||||||
|
"tabs.usage",
|
||||||
|
"usage.breakdown.cacheRead",
|
||||||
|
"usage.breakdown.cacheWrite",
|
||||||
|
"usage.breakdown.costByType",
|
||||||
|
"usage.breakdown.input",
|
||||||
|
"usage.breakdown.output",
|
||||||
|
"usage.breakdown.tokensByType",
|
||||||
|
"usage.breakdown.total",
|
||||||
|
"usage.common.emptyValue",
|
||||||
|
"usage.common.unknown",
|
||||||
|
"usage.daily.byType",
|
||||||
|
"usage.daily.costTitle",
|
||||||
|
"usage.daily.title",
|
||||||
|
"usage.daily.tokensTitle",
|
||||||
|
"usage.daily.total",
|
||||||
|
"usage.details.assistantOutputTokens",
|
||||||
|
"usage.details.baseContextPerMessage",
|
||||||
|
"usage.details.close",
|
||||||
|
"usage.details.collapse",
|
||||||
|
"usage.details.collapseAll",
|
||||||
|
"usage.details.conversation",
|
||||||
|
"usage.details.cumulative",
|
||||||
|
"usage.details.duration",
|
||||||
|
"usage.details.expandAll",
|
||||||
|
"usage.details.files",
|
||||||
|
"usage.details.filtered",
|
||||||
|
"usage.details.hasTools",
|
||||||
|
"usage.details.modelMix",
|
||||||
|
"usage.details.noContextData",
|
||||||
|
"usage.details.noDataInRange",
|
||||||
|
"usage.details.noMessages",
|
||||||
|
"usage.details.noMessagesMatch",
|
||||||
|
"usage.details.noTimeline",
|
||||||
|
"usage.details.noUsageData",
|
||||||
|
"usage.details.of",
|
||||||
|
"usage.details.ofInput",
|
||||||
|
"usage.details.perTurn",
|
||||||
|
"usage.details.reset",
|
||||||
|
"usage.details.searchConversation",
|
||||||
|
"usage.details.skills",
|
||||||
|
"usage.details.system",
|
||||||
|
"usage.details.systemPromptBreakdown",
|
||||||
|
"usage.details.systemShort",
|
||||||
|
"usage.details.timelineFiltered",
|
||||||
|
"usage.details.tokensReadFromCache",
|
||||||
|
"usage.details.tokensWrittenToCache",
|
||||||
|
"usage.details.tool",
|
||||||
|
"usage.details.toolResult",
|
||||||
|
"usage.details.tools",
|
||||||
|
"usage.details.turnRange",
|
||||||
|
"usage.details.usageOverTime",
|
||||||
|
"usage.details.userToolInputTokens",
|
||||||
|
"usage.details.you",
|
||||||
|
"usage.empty.featureOverview",
|
||||||
|
"usage.empty.featureSessions",
|
||||||
|
"usage.empty.featureTimeline",
|
||||||
|
"usage.empty.hint",
|
||||||
|
"usage.empty.noData",
|
||||||
|
"usage.empty.subtitle",
|
||||||
|
"usage.empty.title",
|
||||||
|
"usage.export.dailyCsv",
|
||||||
|
"usage.export.json",
|
||||||
|
"usage.export.label",
|
||||||
|
"usage.export.sessionsCsv",
|
||||||
|
"usage.filters.agent",
|
||||||
|
"usage.filters.all",
|
||||||
|
"usage.filters.channel",
|
||||||
|
"usage.filters.clear",
|
||||||
|
"usage.filters.clearAll",
|
||||||
|
"usage.filters.days",
|
||||||
|
"usage.filters.daysCount",
|
||||||
|
"usage.filters.endDate",
|
||||||
|
"usage.filters.hours",
|
||||||
|
"usage.filters.hoursCount",
|
||||||
|
"usage.filters.model",
|
||||||
|
"usage.filters.pin",
|
||||||
|
"usage.filters.pinned",
|
||||||
|
"usage.filters.provider",
|
||||||
|
"usage.filters.remove",
|
||||||
|
"usage.filters.selectAll",
|
||||||
|
"usage.filters.session",
|
||||||
|
"usage.filters.sessionsCount",
|
||||||
|
"usage.filters.startDate",
|
||||||
|
"usage.filters.timeZone",
|
||||||
|
"usage.filters.timeZoneLocal",
|
||||||
|
"usage.filters.timeZoneUtc",
|
||||||
|
"usage.filters.title",
|
||||||
|
"usage.filters.to",
|
||||||
|
"usage.filters.tool",
|
||||||
|
"usage.filters.unpin",
|
||||||
|
"usage.loading.badge",
|
||||||
|
"usage.loading.title",
|
||||||
|
"usage.metrics.cost",
|
||||||
|
"usage.metrics.session",
|
||||||
|
"usage.metrics.sessions",
|
||||||
|
"usage.metrics.tokens",
|
||||||
|
"usage.mosaic.dayOfWeek",
|
||||||
|
"usage.mosaic.eightAm",
|
||||||
|
"usage.mosaic.eightPm",
|
||||||
|
"usage.mosaic.fourAm",
|
||||||
|
"usage.mosaic.fourPm",
|
||||||
|
"usage.mosaic.fri",
|
||||||
|
"usage.mosaic.legend",
|
||||||
|
"usage.mosaic.midnight",
|
||||||
|
"usage.mosaic.mon",
|
||||||
|
"usage.mosaic.noon",
|
||||||
|
"usage.mosaic.noTimelineData",
|
||||||
|
"usage.mosaic.sat",
|
||||||
|
"usage.mosaic.subtitle",
|
||||||
|
"usage.mosaic.subtitleEmpty",
|
||||||
|
"usage.mosaic.sun",
|
||||||
|
"usage.mosaic.thu",
|
||||||
|
"usage.mosaic.title",
|
||||||
|
"usage.mosaic.tue",
|
||||||
|
"usage.mosaic.wed",
|
||||||
|
"usage.overview.acrossMessages",
|
||||||
|
"usage.overview.assistant",
|
||||||
|
"usage.overview.avgCost",
|
||||||
|
"usage.overview.avgCostHint",
|
||||||
|
"usage.overview.avgCostHintMissing",
|
||||||
|
"usage.overview.avgSession",
|
||||||
|
"usage.overview.avgTokens",
|
||||||
|
"usage.overview.avgTokensHint",
|
||||||
|
"usage.overview.cached",
|
||||||
|
"usage.overview.cacheHint",
|
||||||
|
"usage.overview.cacheHitRate",
|
||||||
|
"usage.overview.calls",
|
||||||
|
"usage.overview.errorHint",
|
||||||
|
"usage.overview.errorRate",
|
||||||
|
"usage.overview.errors",
|
||||||
|
"usage.overview.errorsHint",
|
||||||
|
"usage.overview.messages",
|
||||||
|
"usage.overview.messagesAbbrev",
|
||||||
|
"usage.overview.messagesHint",
|
||||||
|
"usage.overview.noAgentData",
|
||||||
|
"usage.overview.noChannelData",
|
||||||
|
"usage.overview.noErrorData",
|
||||||
|
"usage.overview.noModelData",
|
||||||
|
"usage.overview.noProviderData",
|
||||||
|
"usage.overview.noToolCalls",
|
||||||
|
"usage.overview.peakErrorDays",
|
||||||
|
"usage.overview.peakErrorHours",
|
||||||
|
"usage.overview.perMinute",
|
||||||
|
"usage.overview.prompt",
|
||||||
|
"usage.overview.sessions",
|
||||||
|
"usage.overview.sessionsHint",
|
||||||
|
"usage.overview.sessionsInRange",
|
||||||
|
"usage.overview.throughput",
|
||||||
|
"usage.overview.throughputHint",
|
||||||
|
"usage.overview.title",
|
||||||
|
"usage.overview.tokensPerMinute",
|
||||||
|
"usage.overview.toolCalls",
|
||||||
|
"usage.overview.toolCallsHint",
|
||||||
|
"usage.overview.toolResults",
|
||||||
|
"usage.overview.toolsUsed",
|
||||||
|
"usage.overview.topAgents",
|
||||||
|
"usage.overview.topChannels",
|
||||||
|
"usage.overview.topModels",
|
||||||
|
"usage.overview.topProviders",
|
||||||
|
"usage.overview.topTools",
|
||||||
|
"usage.overview.user",
|
||||||
|
"usage.page.subtitle",
|
||||||
|
"usage.presets.last30d",
|
||||||
|
"usage.presets.last7d",
|
||||||
|
"usage.presets.today",
|
||||||
|
"usage.query.apply",
|
||||||
|
"usage.query.inRange",
|
||||||
|
"usage.query.matching",
|
||||||
|
"usage.query.placeholder",
|
||||||
|
"usage.query.tip",
|
||||||
|
"usage.sessions.all",
|
||||||
|
"usage.sessions.ascending",
|
||||||
|
"usage.sessions.avg",
|
||||||
|
"usage.sessions.clearSelection",
|
||||||
|
"usage.sessions.copy",
|
||||||
|
"usage.sessions.copyName",
|
||||||
|
"usage.sessions.descending",
|
||||||
|
"usage.sessions.limitReached",
|
||||||
|
"usage.sessions.more",
|
||||||
|
"usage.sessions.noneInRange",
|
||||||
|
"usage.sessions.noRecent",
|
||||||
|
"usage.sessions.recent",
|
||||||
|
"usage.sessions.recentShort",
|
||||||
|
"usage.sessions.selected",
|
||||||
|
"usage.sessions.shown",
|
||||||
|
"usage.sessions.sort",
|
||||||
|
"usage.sessions.title",
|
||||||
|
"usage.sessions.total"
|
||||||
|
],
|
||||||
|
"generatedAt": "2026-04-29T14:00:04.888Z",
|
||||||
|
"locale": "vi",
|
||||||
|
"model": "",
|
||||||
|
"provider": "",
|
||||||
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
|
"totalKeys": 768,
|
||||||
|
"translatedKeys": 0,
|
||||||
|
"workflow": 1
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"fallbackKeys": [],
|
"fallbackKeys": ["languages.ar", "languages.fa", "languages.it", "languages.nl", "languages.vi"],
|
||||||
"generatedAt": "2026-04-27T12:10:49.836Z",
|
"generatedAt": "2026-04-29T17:07:45.268Z",
|
||||||
"locale": "zh-CN",
|
"locale": "zh-CN",
|
||||||
"model": "gpt-5.5",
|
"model": "gpt-5.5",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"sourceHash": "5e92fbfbb7e3026ea5f3a0835d933c9ce79369a85b1cf0628b1c86369f1c822d",
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
"totalKeys": 763,
|
"totalKeys": 768,
|
||||||
"translatedKeys": 763,
|
"translatedKeys": 763,
|
||||||
"workflow": 1
|
"workflow": 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"fallbackKeys": [],
|
"fallbackKeys": ["languages.ar", "languages.fa", "languages.it", "languages.nl", "languages.vi"],
|
||||||
"generatedAt": "2026-04-27T12:10:53.535Z",
|
"generatedAt": "2026-04-29T17:07:46.953Z",
|
||||||
"locale": "zh-TW",
|
"locale": "zh-TW",
|
||||||
"model": "gpt-5.5",
|
"model": "gpt-5.5",
|
||||||
"provider": "openai",
|
"provider": "openai",
|
||||||
"sourceHash": "5e92fbfbb7e3026ea5f3a0835d933c9ce79369a85b1cf0628b1c86369f1c822d",
|
"sourceHash": "e2d2b3df6a5e614401e887d4c49d24c633ac3435956040c48672ec8b289abdd4",
|
||||||
"totalKeys": 763,
|
"totalKeys": 768,
|
||||||
"translatedKeys": 763,
|
"translatedKeys": 763,
|
||||||
"workflow": 1
|
"workflow": 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,11 +19,16 @@ const LAZY_LOCALES: readonly LazyLocale[] = [
|
|||||||
"ja-JP",
|
"ja-JP",
|
||||||
"ko",
|
"ko",
|
||||||
"fr",
|
"fr",
|
||||||
|
"ar",
|
||||||
|
"it",
|
||||||
"tr",
|
"tr",
|
||||||
"uk",
|
"uk",
|
||||||
"id",
|
"id",
|
||||||
"pl",
|
"pl",
|
||||||
"th",
|
"th",
|
||||||
|
"vi",
|
||||||
|
"nl",
|
||||||
|
"fa",
|
||||||
];
|
];
|
||||||
|
|
||||||
const LAZY_LOCALE_REGISTRY: Record<LazyLocale, LazyLocaleRegistration> = {
|
const LAZY_LOCALE_REGISTRY: Record<LazyLocale, LazyLocaleRegistration> = {
|
||||||
@@ -59,6 +64,14 @@ const LAZY_LOCALE_REGISTRY: Record<LazyLocale, LazyLocaleRegistration> = {
|
|||||||
exportName: "fr",
|
exportName: "fr",
|
||||||
loader: () => import("../locales/fr.ts"),
|
loader: () => import("../locales/fr.ts"),
|
||||||
},
|
},
|
||||||
|
ar: {
|
||||||
|
exportName: "ar",
|
||||||
|
loader: () => import("../locales/ar.ts"),
|
||||||
|
},
|
||||||
|
it: {
|
||||||
|
exportName: "it",
|
||||||
|
loader: () => import("../locales/it.ts"),
|
||||||
|
},
|
||||||
tr: {
|
tr: {
|
||||||
exportName: "tr",
|
exportName: "tr",
|
||||||
loader: () => import("../locales/tr.ts"),
|
loader: () => import("../locales/tr.ts"),
|
||||||
@@ -79,6 +92,18 @@ const LAZY_LOCALE_REGISTRY: Record<LazyLocale, LazyLocaleRegistration> = {
|
|||||||
exportName: "th",
|
exportName: "th",
|
||||||
loader: () => import("../locales/th.ts"),
|
loader: () => import("../locales/th.ts"),
|
||||||
},
|
},
|
||||||
|
vi: {
|
||||||
|
exportName: "vi",
|
||||||
|
loader: () => import("../locales/vi.ts"),
|
||||||
|
},
|
||||||
|
nl: {
|
||||||
|
exportName: "nl",
|
||||||
|
loader: () => import("../locales/nl.ts"),
|
||||||
|
},
|
||||||
|
fa: {
|
||||||
|
exportName: "fa",
|
||||||
|
loader: () => import("../locales/fa.ts"),
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export const SUPPORTED_LOCALES: ReadonlyArray<Locale> = [DEFAULT_LOCALE, ...LAZY_LOCALES];
|
export const SUPPORTED_LOCALES: ReadonlyArray<Locale> = [DEFAULT_LOCALE, ...LAZY_LOCALES];
|
||||||
@@ -113,6 +138,12 @@ export function resolveNavigatorLocale(navLang: string): Locale {
|
|||||||
if (navLang.startsWith("fr")) {
|
if (navLang.startsWith("fr")) {
|
||||||
return "fr";
|
return "fr";
|
||||||
}
|
}
|
||||||
|
if (navLang.startsWith("ar")) {
|
||||||
|
return "ar";
|
||||||
|
}
|
||||||
|
if (navLang.startsWith("it")) {
|
||||||
|
return "it";
|
||||||
|
}
|
||||||
if (navLang.startsWith("tr")) {
|
if (navLang.startsWith("tr")) {
|
||||||
return "tr";
|
return "tr";
|
||||||
}
|
}
|
||||||
@@ -128,6 +159,15 @@ export function resolveNavigatorLocale(navLang: string): Locale {
|
|||||||
if (navLang.startsWith("th")) {
|
if (navLang.startsWith("th")) {
|
||||||
return "th";
|
return "th";
|
||||||
}
|
}
|
||||||
|
if (navLang.startsWith("vi")) {
|
||||||
|
return "vi";
|
||||||
|
}
|
||||||
|
if (navLang.startsWith("nl")) {
|
||||||
|
return "nl";
|
||||||
|
}
|
||||||
|
if (navLang.startsWith("fa")) {
|
||||||
|
return "fa";
|
||||||
|
}
|
||||||
return DEFAULT_LOCALE;
|
return DEFAULT_LOCALE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,11 +10,16 @@ export type Locale =
|
|||||||
| "ja-JP"
|
| "ja-JP"
|
||||||
| "ko"
|
| "ko"
|
||||||
| "fr"
|
| "fr"
|
||||||
|
| "ar"
|
||||||
|
| "it"
|
||||||
| "tr"
|
| "tr"
|
||||||
| "uk"
|
| "uk"
|
||||||
| "id"
|
| "id"
|
||||||
| "pl"
|
| "pl"
|
||||||
| "th";
|
| "th"
|
||||||
|
| "vi"
|
||||||
|
| "nl"
|
||||||
|
| "fa";
|
||||||
|
|
||||||
export interface I18nConfig {
|
export interface I18nConfig {
|
||||||
locale: Locale;
|
locale: Locale;
|
||||||
|
|||||||
936
ui/src/i18n/locales/ar.ts
Normal file
936
ui/src/i18n/locales/ar.ts
Normal file
@@ -0,0 +1,936 @@
|
|||||||
|
import type { TranslationMap } from "../lib/types.ts";
|
||||||
|
|
||||||
|
// Generated by scripts/control-ui-i18n.ts.
|
||||||
|
export const ar: TranslationMap = {
|
||||||
|
common: {
|
||||||
|
health: "Health",
|
||||||
|
ok: "OK",
|
||||||
|
yes: "Yes",
|
||||||
|
no: "No",
|
||||||
|
active: "Active",
|
||||||
|
loading: "Loading…",
|
||||||
|
refreshing: "Refreshing…",
|
||||||
|
online: "Online",
|
||||||
|
offline: "Offline",
|
||||||
|
connect: "Connect",
|
||||||
|
connected: "Connected",
|
||||||
|
refresh: "Refresh",
|
||||||
|
reload: "Reload",
|
||||||
|
probe: "Probe",
|
||||||
|
call: "Call",
|
||||||
|
confirm: "Confirm",
|
||||||
|
cancel: "Cancel",
|
||||||
|
unselect: "Unselect",
|
||||||
|
enabled: "Enabled",
|
||||||
|
disabled: "Disabled",
|
||||||
|
na: "n/a",
|
||||||
|
configured: "Configured",
|
||||||
|
running: "Running",
|
||||||
|
linked: "Linked",
|
||||||
|
mode: "Mode",
|
||||||
|
baseUrl: "Base URL",
|
||||||
|
lastStart: "Last start",
|
||||||
|
lastProbe: "Last probe",
|
||||||
|
lastInbound: "Last inbound",
|
||||||
|
lastConnect: "Last connect",
|
||||||
|
lastMessage: "Last message",
|
||||||
|
authAge: "Auth age",
|
||||||
|
credential: "Credential",
|
||||||
|
audience: "Audience",
|
||||||
|
publicKey: "Public Key",
|
||||||
|
probeOk: "Probe ok",
|
||||||
|
probeFailed: "Probe failed",
|
||||||
|
reloadConfig: "Reload Config",
|
||||||
|
loadConfig: "Load config",
|
||||||
|
loadApprovals: "Load approvals",
|
||||||
|
settingsSections: "Settings sections",
|
||||||
|
version: "Version",
|
||||||
|
docs: "Docs",
|
||||||
|
theme: "Theme",
|
||||||
|
resources: "Resources",
|
||||||
|
search: "Search",
|
||||||
|
save: "Save",
|
||||||
|
saving: "Saving…",
|
||||||
|
saveAndPublish: "Save & Publish",
|
||||||
|
importing: "Importing…",
|
||||||
|
importFromRelays: "Import from Relays",
|
||||||
|
showAdvanced: "Show Advanced",
|
||||||
|
hideAdvanced: "Hide Advanced",
|
||||||
|
unsavedChanges: "You have unsaved changes",
|
||||||
|
secondsAgo: "{count}s ago",
|
||||||
|
working: "Working…",
|
||||||
|
showQr: "Show QR",
|
||||||
|
relink: "Relink",
|
||||||
|
waitForScan: "Wait for scan",
|
||||||
|
logout: "Logout",
|
||||||
|
},
|
||||||
|
channels: {
|
||||||
|
health: {
|
||||||
|
title: "Channel health",
|
||||||
|
subtitle: "Channel status snapshots from the gateway.",
|
||||||
|
noSnapshotYet: "No snapshot yet.",
|
||||||
|
},
|
||||||
|
generic: {
|
||||||
|
subtitle: "Channel status and configuration.",
|
||||||
|
},
|
||||||
|
gatewayUrlConfirmation: {
|
||||||
|
title: "Change Gateway URL",
|
||||||
|
subtitle: "This will reconnect to a different gateway server",
|
||||||
|
warning: "Only confirm if you trust this URL. Malicious URLs can compromise your system.",
|
||||||
|
},
|
||||||
|
nostr: {
|
||||||
|
profile: "Profile",
|
||||||
|
editProfile: "Edit Profile",
|
||||||
|
profilePicture: "Profile picture",
|
||||||
|
noProfile: "No profile set.",
|
||||||
|
noProfileHint: 'Click "Edit Profile" to add your name, bio, and avatar.',
|
||||||
|
name: "Name",
|
||||||
|
displayName: "Display Name",
|
||||||
|
about: "About",
|
||||||
|
advanced: "Advanced",
|
||||||
|
profilePicturePreview: "Profile picture preview",
|
||||||
|
account: "Account",
|
||||||
|
username: "Username",
|
||||||
|
usernameHelp: "Short username (e.g., satoshi)",
|
||||||
|
bio: "Bio",
|
||||||
|
bioPlaceholder: "Tell people about yourself...",
|
||||||
|
bioHelp: "A brief bio or description",
|
||||||
|
displayNameHelp: "Your full display name",
|
||||||
|
avatarUrl: "Avatar URL",
|
||||||
|
avatarHelp: "HTTPS URL to your profile picture",
|
||||||
|
bannerUrl: "Banner URL",
|
||||||
|
bannerHelp: "HTTPS URL to a banner image",
|
||||||
|
website: "Website",
|
||||||
|
websiteHelp: "Your personal website",
|
||||||
|
nip05Identifier: "NIP-05 Identifier",
|
||||||
|
nip05Help: "Verifiable identifier (e.g., you@domain.com)",
|
||||||
|
lightningAddress: "Lightning Address",
|
||||||
|
lightningHelp: "Lightning address for tips (LUD-16)",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lazyView: {
|
||||||
|
loadingTitle: "Loading panel",
|
||||||
|
errorTitle: "Panel failed to load",
|
||||||
|
errorSubtitle:
|
||||||
|
"Reload the page to load the latest Control UI bundle, or retry if the network request failed.",
|
||||||
|
retry: "Retry",
|
||||||
|
unknownError: "Unknown module load error.",
|
||||||
|
},
|
||||||
|
nodes: {
|
||||||
|
binding: {
|
||||||
|
loadConfigHint: "Load config to edit bindings.",
|
||||||
|
formModeHint: "Switch the Config tab to Form mode to edit bindings here.",
|
||||||
|
execNodeBinding: "Exec node binding",
|
||||||
|
execNodeBindingSubtitle: "Pin agents to a specific node when using exec host=node.",
|
||||||
|
defaultBinding: "Default binding",
|
||||||
|
defaultBindingHint: "Used when agents do not override a node binding.",
|
||||||
|
node: "Node",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
instances: {
|
||||||
|
title: "Connected Instances",
|
||||||
|
subtitle: "Presence beacons from the gateway and clients.",
|
||||||
|
showHosts: "Show hosts and IPs",
|
||||||
|
hideHosts: "Hide hosts and IPs",
|
||||||
|
toggleHostVisibility: "Toggle host visibility",
|
||||||
|
noInstances: "No instances reported yet.",
|
||||||
|
lastInput: "Last input {time}",
|
||||||
|
reason: "Reason {reason}",
|
||||||
|
},
|
||||||
|
agentTools: {
|
||||||
|
connectedSource: "Connected: {id}",
|
||||||
|
connected: "Connected",
|
||||||
|
channelSource: "Channel: {id}",
|
||||||
|
channel: "Channel",
|
||||||
|
builtIn: "Built-in",
|
||||||
|
},
|
||||||
|
nav: {
|
||||||
|
chat: "Chat",
|
||||||
|
control: "Control",
|
||||||
|
agent: "Agent",
|
||||||
|
settings: "Settings",
|
||||||
|
expand: "Expand sidebar",
|
||||||
|
collapse: "Collapse sidebar",
|
||||||
|
resize: "Resize sidebar",
|
||||||
|
},
|
||||||
|
tabs: {
|
||||||
|
agents: "Agents",
|
||||||
|
overview: "Overview",
|
||||||
|
channels: "Channels",
|
||||||
|
instances: "Instances",
|
||||||
|
sessions: "Sessions",
|
||||||
|
usage: "Usage",
|
||||||
|
cron: "Cron Jobs",
|
||||||
|
skills: "Skills",
|
||||||
|
nodes: "Nodes",
|
||||||
|
chat: "Chat",
|
||||||
|
config: "Config",
|
||||||
|
communications: "Communications",
|
||||||
|
appearance: "Appearance",
|
||||||
|
automation: "Automation",
|
||||||
|
infrastructure: "Infrastructure",
|
||||||
|
aiAgents: "AI & Agents",
|
||||||
|
debug: "Debug",
|
||||||
|
logs: "Logs",
|
||||||
|
dreams: "Dreaming",
|
||||||
|
},
|
||||||
|
subtitles: {
|
||||||
|
agents: "Workspaces, tools, identities.",
|
||||||
|
overview: "Status, entry points, health.",
|
||||||
|
channels: "Channels and settings.",
|
||||||
|
instances: "Connected clients and nodes.",
|
||||||
|
sessions: "Active sessions and defaults.",
|
||||||
|
usage: "API usage and costs.",
|
||||||
|
cron: "Wakeups and recurring runs.",
|
||||||
|
skills: "Skills and API keys.",
|
||||||
|
nodes: "Paired devices and commands.",
|
||||||
|
chat: "Gateway chat for quick interventions.",
|
||||||
|
config: "Edit openclaw.json.",
|
||||||
|
communications: "Channels, messages, and audio settings.",
|
||||||
|
appearance: "Theme, UI, and setup wizard settings.",
|
||||||
|
automation: "Commands, hooks, cron, and plugins.",
|
||||||
|
infrastructure: "Gateway, web, browser, and media settings.",
|
||||||
|
aiAgents: "Agents, models, skills, tools, memory, session.",
|
||||||
|
debug: "Snapshots, events, RPC.",
|
||||||
|
logs: "Live gateway logs.",
|
||||||
|
dreams: "Memory dreaming, consolidation, and reflection.",
|
||||||
|
},
|
||||||
|
overview: {
|
||||||
|
access: {
|
||||||
|
title: "Gateway Access",
|
||||||
|
subtitle: "Where the dashboard connects and how it authenticates.",
|
||||||
|
wsUrl: "WebSocket URL",
|
||||||
|
token: "Gateway Token",
|
||||||
|
password: "Password (not stored)",
|
||||||
|
passwordPlaceholder: "system or shared password",
|
||||||
|
sessionKey: "Default Session Key",
|
||||||
|
language: "Language",
|
||||||
|
connectHint: "Click Connect to apply connection changes.",
|
||||||
|
trustedProxy: "Authenticated via trusted proxy.",
|
||||||
|
showToken: "Show token",
|
||||||
|
hideToken: "Hide token",
|
||||||
|
toggleTokenVisibility: "Toggle token visibility",
|
||||||
|
showPassword: "Show password",
|
||||||
|
hidePassword: "Hide password",
|
||||||
|
togglePasswordVisibility: "Toggle password visibility",
|
||||||
|
},
|
||||||
|
snapshot: {
|
||||||
|
title: "Snapshot",
|
||||||
|
subtitle: "Latest gateway handshake information.",
|
||||||
|
status: "Status",
|
||||||
|
uptime: "Uptime",
|
||||||
|
tickInterval: "Tick Interval",
|
||||||
|
lastChannelsRefresh: "Last Channels Refresh",
|
||||||
|
channelsHint: "Use Channels to link WhatsApp, Telegram, Discord, Signal, or iMessage.",
|
||||||
|
},
|
||||||
|
stats: {
|
||||||
|
instances: "Instances",
|
||||||
|
instancesHint: "Presence beacons in the last 5 minutes.",
|
||||||
|
sessions: "Sessions",
|
||||||
|
sessionsHint: "Recent session keys tracked by the gateway.",
|
||||||
|
cron: "Cron",
|
||||||
|
cronNext: "Next wake {time}",
|
||||||
|
},
|
||||||
|
notes: {
|
||||||
|
title: "Notes",
|
||||||
|
subtitle: "Quick reminders for remote control setups.",
|
||||||
|
tailscaleTitle: "Tailscale serve",
|
||||||
|
tailscaleText: "Prefer serve mode to keep the gateway on loopback with tailnet auth.",
|
||||||
|
sessionTitle: "Session hygiene",
|
||||||
|
sessionText: "Use /new or sessions.patch to reset context.",
|
||||||
|
cronTitle: "Cron reminders",
|
||||||
|
cronText: "Use isolated sessions for recurring runs.",
|
||||||
|
},
|
||||||
|
auth: {
|
||||||
|
required: "This gateway requires auth. Add a token or password, then click Connect.",
|
||||||
|
failed:
|
||||||
|
"Auth failed. Re-copy a tokenized URL with {command}, or update the token, then click Connect.",
|
||||||
|
},
|
||||||
|
pairing: {
|
||||||
|
hint: "This device needs pairing approval from the gateway host.",
|
||||||
|
scopeUpgradeTitle: "Scope upgrade pending approval.",
|
||||||
|
scopeUpgradeSummary:
|
||||||
|
"This device is already paired, but the requested wider scope is waiting for approval.",
|
||||||
|
roleUpgradeTitle: "Role upgrade pending approval.",
|
||||||
|
roleUpgradeSummary:
|
||||||
|
"This device is already paired, but the requested role change is waiting for approval.",
|
||||||
|
metadataUpgradeTitle: "Device metadata change pending approval.",
|
||||||
|
metadataUpgradeSummary:
|
||||||
|
"This device is already paired, but the metadata change is waiting for approval.",
|
||||||
|
mobileHint:
|
||||||
|
"On mobile? Copy the full URL (including #token=...) from openclaw dashboard --no-open on your desktop.",
|
||||||
|
docsTitle: "Device pairing docs (opens in new tab)",
|
||||||
|
docsLink: "Docs: Device pairing",
|
||||||
|
},
|
||||||
|
insecure: {
|
||||||
|
hint: "This page is HTTP, so the browser blocks device identity. Use HTTPS (Tailscale Serve) or open {url} on the gateway host.",
|
||||||
|
stayHttp: "If you must stay on HTTP, set {config} (token-only).",
|
||||||
|
},
|
||||||
|
connection: {
|
||||||
|
title: "How to connect",
|
||||||
|
step1: "Start the gateway on your host machine:",
|
||||||
|
step2: "Get a tokenized dashboard URL:",
|
||||||
|
step3: "Paste the WebSocket URL and token above, or open the tokenized URL directly.",
|
||||||
|
step4: "Or generate a reusable token:",
|
||||||
|
docsHint: "For remote access, Tailscale Serve is recommended. ",
|
||||||
|
docsLink: "Read the docs →",
|
||||||
|
authDocsTitle: "Control UI auth docs (opens in new tab)",
|
||||||
|
authDocsLink: "Docs: Control UI auth",
|
||||||
|
tailscaleDocsTitle: "Tailscale Serve docs (opens in new tab)",
|
||||||
|
tailscaleDocsLink: "Docs: Tailscale Serve",
|
||||||
|
insecureHttpDocsTitle: "Insecure HTTP docs (opens in new tab)",
|
||||||
|
insecureHttpDocsLink: "Docs: Insecure HTTP",
|
||||||
|
copyCommand: "Copy command",
|
||||||
|
copyCommandAria: "Copy command: {command}",
|
||||||
|
},
|
||||||
|
cards: {
|
||||||
|
cost: "Cost",
|
||||||
|
skills: "Skills",
|
||||||
|
recentSessions: "Recent Sessions",
|
||||||
|
modelAuth: "Model Auth",
|
||||||
|
modelAuthOk: "{count} ok",
|
||||||
|
modelAuthExpired: "{count} expired",
|
||||||
|
modelAuthExpiring: "{count} expiring",
|
||||||
|
modelAuthProviders: "{count} providers",
|
||||||
|
modelAuthUsageLeft: "{pct}% left",
|
||||||
|
modelAuthExpiresIn: "expires {when}",
|
||||||
|
modelAuthAttentionExpiredTitle: "Model auth expired",
|
||||||
|
modelAuthAttentionExpiringTitle: "Model auth expiring soon",
|
||||||
|
modelAuthAttentionExpiredDesc: "{providers} — re-authenticate with openclaw models auth",
|
||||||
|
modelAuthAttentionExpiringEntry: "{provider} ({when})",
|
||||||
|
},
|
||||||
|
attention: {
|
||||||
|
title: "Attention",
|
||||||
|
},
|
||||||
|
eventLog: {
|
||||||
|
title: "Event Log",
|
||||||
|
},
|
||||||
|
logTail: {
|
||||||
|
title: "Gateway Logs",
|
||||||
|
},
|
||||||
|
quickActions: {
|
||||||
|
newSession: "New Session",
|
||||||
|
automation: "Automation",
|
||||||
|
refreshAll: "Refresh All",
|
||||||
|
terminal: "Terminal",
|
||||||
|
},
|
||||||
|
palette: {
|
||||||
|
placeholder: "Type a command…",
|
||||||
|
noResults: "No results",
|
||||||
|
categories: {
|
||||||
|
search: "Search",
|
||||||
|
navigation: "Navigation",
|
||||||
|
skills: "Skills",
|
||||||
|
},
|
||||||
|
items: {
|
||||||
|
overview: "Overview",
|
||||||
|
sessions: "Sessions",
|
||||||
|
scheduled: "Scheduled",
|
||||||
|
skills: "Skills",
|
||||||
|
settings: "Settings",
|
||||||
|
agents: "Agents",
|
||||||
|
shellCommand: "Shell Command",
|
||||||
|
debugMode: "Debug Mode",
|
||||||
|
},
|
||||||
|
descriptions: {
|
||||||
|
shellCommand: "Run shell",
|
||||||
|
debugMode: "Toggle debug",
|
||||||
|
},
|
||||||
|
footer: {
|
||||||
|
navigate: "navigate",
|
||||||
|
select: "select",
|
||||||
|
close: "close",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
dreaming: {
|
||||||
|
tabs: {
|
||||||
|
scene: "Scene",
|
||||||
|
diary: "Diary",
|
||||||
|
advanced: "Advanced",
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
refresh: "Refresh",
|
||||||
|
refreshing: "Refreshing…",
|
||||||
|
on: "Dreaming On",
|
||||||
|
off: "Dreaming Off",
|
||||||
|
},
|
||||||
|
restartConfirmation: {
|
||||||
|
title: "Restart Gateway to Apply Change",
|
||||||
|
subtitle: "Changing Dreaming mode restarts the gateway.",
|
||||||
|
warning:
|
||||||
|
"This action will restart the Gateway and may temporarily interrupt chats, automations, and connected channels.",
|
||||||
|
confirm: "Confirm Restart",
|
||||||
|
restarting: "Restarting…",
|
||||||
|
failed: "Could not apply change. Check your connection and try again.",
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
active: "Dreaming Active",
|
||||||
|
idle: "Dreaming Idle",
|
||||||
|
promotedSuffix: "promoted",
|
||||||
|
nextSweepPrefix: "next sweep",
|
||||||
|
},
|
||||||
|
scene: {
|
||||||
|
backfill: "Backfill",
|
||||||
|
dedupeDiary: "Dedupe Diary",
|
||||||
|
reset: "Reset",
|
||||||
|
clearGrounded: "Clear Replayed",
|
||||||
|
repairCache: "Repair Dream Cache",
|
||||||
|
working: "Working…",
|
||||||
|
},
|
||||||
|
phase: {
|
||||||
|
light: "Light",
|
||||||
|
deep: "Deep",
|
||||||
|
rem: "Rem",
|
||||||
|
off: "off",
|
||||||
|
},
|
||||||
|
advanced: {
|
||||||
|
eyebrow: "Review",
|
||||||
|
title: "Daily Log Review",
|
||||||
|
description:
|
||||||
|
"Review what came from the daily log, what is waiting for promotion, and what was promoted recently.",
|
||||||
|
summaryFromDailyLog: "from daily log",
|
||||||
|
summaryWaiting: "waiting",
|
||||||
|
summaryPromotedToday: "promoted today",
|
||||||
|
stagedTitle: "From the Daily Log",
|
||||||
|
stagedDescription: "Replay candidates pulled from older daily log entries.",
|
||||||
|
shortTermTitle: "Waiting for Promotion",
|
||||||
|
shortTermDescription: "Current short-term candidates waiting to graduate into real memory.",
|
||||||
|
sortRecent: "Most recent",
|
||||||
|
sortSignals: "Strongest support",
|
||||||
|
originDailyLog: "replayed",
|
||||||
|
originLive: "live",
|
||||||
|
originMixed: "mixed",
|
||||||
|
promotedTitle: "Recent Promotions",
|
||||||
|
promotedDescription: "Items that already made it through promotion.",
|
||||||
|
emptyGrounded: "No staged grounded replay entries right now.",
|
||||||
|
emptyShortTerm: "No short-term entries to inspect.",
|
||||||
|
emptyPromoted: "No recent promotions to inspect.",
|
||||||
|
updatedPrefix: "updated",
|
||||||
|
},
|
||||||
|
stats: {
|
||||||
|
shortTerm: "Short-term",
|
||||||
|
grounded: "Grounded",
|
||||||
|
signals: "Signals",
|
||||||
|
promoted: "Promoted",
|
||||||
|
phaseHits: "Phase Hits",
|
||||||
|
},
|
||||||
|
trace: {
|
||||||
|
shortTerm: "Short-term",
|
||||||
|
grounded: "Grounded",
|
||||||
|
signals: "Signals",
|
||||||
|
promoted: "Promoted",
|
||||||
|
groundedLed: "grounded-led",
|
||||||
|
emptyShortTerm: "No active short-term items.",
|
||||||
|
emptyGrounded: "No staged grounded items.",
|
||||||
|
emptySignals: "No active signals.",
|
||||||
|
emptyPromoted: "Nothing promoted yet today.",
|
||||||
|
},
|
||||||
|
diary: {
|
||||||
|
title: "Dream Diary",
|
||||||
|
noDreamsYet: "No dreams yet",
|
||||||
|
noDreamsHint: "Dreams will appear here after the first dreaming cycle runs.",
|
||||||
|
waitingTitle: "The diary is waiting",
|
||||||
|
waitingHint: "Narrative entries will appear after the next dreaming cycle.",
|
||||||
|
older: "Older",
|
||||||
|
newer: "Newer",
|
||||||
|
reload: "Reload",
|
||||||
|
reloading: "Reloading…",
|
||||||
|
},
|
||||||
|
phrases: {
|
||||||
|
consolidatingMemories: "consolidating memories…",
|
||||||
|
tidyingKnowledgeGraph: "tidying the knowledge graph…",
|
||||||
|
replayingConversations: "replaying today's conversations…",
|
||||||
|
weavingShortTerm: "weaving short-term into long-term…",
|
||||||
|
defragmentingMindPalace: "defragmenting the mind palace…",
|
||||||
|
filingLooseThoughts: "filing away loose thoughts…",
|
||||||
|
connectingDots: "connecting distant dots…",
|
||||||
|
compostingContext: "composting old context windows…",
|
||||||
|
alphabetizingSubconscious: "alphabetizing the subconscious…",
|
||||||
|
promotingHunches: "promoting promising hunches…",
|
||||||
|
forgettingNoise: "forgetting what doesn't matter…",
|
||||||
|
dreamingEmbeddings: "dreaming in embeddings…",
|
||||||
|
reorganizingAttic: "reorganizing the memory attic…",
|
||||||
|
indexingDay: "softly indexing the day…",
|
||||||
|
nurturingInsights: "nurturing fledgling insights…",
|
||||||
|
simmeringIdeas: "simmering half-formed ideas…",
|
||||||
|
whisperingVectorStore: "whispering to the vector store…",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
usage: {
|
||||||
|
page: {
|
||||||
|
subtitle: "See where tokens go, when sessions spike, and what drives cost.",
|
||||||
|
},
|
||||||
|
common: {
|
||||||
|
emptyValue: "—",
|
||||||
|
unknown: "unknown",
|
||||||
|
},
|
||||||
|
loading: {
|
||||||
|
title: "Usage Overview",
|
||||||
|
badge: "Loading",
|
||||||
|
},
|
||||||
|
metrics: {
|
||||||
|
tokens: "Tokens",
|
||||||
|
cost: "Cost",
|
||||||
|
session: "session",
|
||||||
|
sessions: "sessions",
|
||||||
|
},
|
||||||
|
presets: {
|
||||||
|
today: "Today",
|
||||||
|
last7d: "7d",
|
||||||
|
last30d: "30d",
|
||||||
|
},
|
||||||
|
filters: {
|
||||||
|
title: "Filters",
|
||||||
|
to: "to",
|
||||||
|
startDate: "Start date",
|
||||||
|
endDate: "End date",
|
||||||
|
timeZone: "Time zone",
|
||||||
|
timeZoneLocal: "Local",
|
||||||
|
timeZoneUtc: "UTC",
|
||||||
|
pin: "Pin",
|
||||||
|
pinned: "Pinned",
|
||||||
|
unpin: "Unpin filters",
|
||||||
|
selectAll: "Select All",
|
||||||
|
clear: "Clear",
|
||||||
|
clearAll: "Clear All",
|
||||||
|
remove: "Remove filter",
|
||||||
|
all: "All",
|
||||||
|
days: "Days",
|
||||||
|
hours: "Hours",
|
||||||
|
session: "Session",
|
||||||
|
agent: "Agent",
|
||||||
|
channel: "Channel",
|
||||||
|
provider: "Provider",
|
||||||
|
model: "Model",
|
||||||
|
tool: "Tool",
|
||||||
|
daysCount: "{count} days",
|
||||||
|
hoursCount: "{count} hours",
|
||||||
|
sessionsCount: "{count} sessions",
|
||||||
|
},
|
||||||
|
query: {
|
||||||
|
placeholder:
|
||||||
|
"Filter sessions (e.g. key:agent:main:cron* model:gpt-4o has:errors minTokens:2000)",
|
||||||
|
apply: "Filter (client-side)",
|
||||||
|
matching: "{shown} of {total} sessions match",
|
||||||
|
inRange: "{total} sessions in range",
|
||||||
|
tip: "Tip: use filters or click bars to refine days.",
|
||||||
|
},
|
||||||
|
export: {
|
||||||
|
label: "Export",
|
||||||
|
sessionsCsv: "Sessions CSV",
|
||||||
|
dailyCsv: "Daily CSV",
|
||||||
|
json: "JSON",
|
||||||
|
},
|
||||||
|
empty: {
|
||||||
|
title: "Start with a date range",
|
||||||
|
subtitle:
|
||||||
|
"Load usage data to compare costs, inspect sessions, and drill into timelines without leaving the dashboard.",
|
||||||
|
hint: "Select a date range and click Refresh to load usage.",
|
||||||
|
noData: "No data",
|
||||||
|
featureOverview: "Overview cards",
|
||||||
|
featureSessions: "Session ranking",
|
||||||
|
featureTimeline: "Timeline drilldown",
|
||||||
|
},
|
||||||
|
daily: {
|
||||||
|
title: "Daily Usage",
|
||||||
|
total: "Total",
|
||||||
|
byType: "By Type",
|
||||||
|
tokensTitle: "Daily Token Usage",
|
||||||
|
costTitle: "Daily Cost",
|
||||||
|
},
|
||||||
|
breakdown: {
|
||||||
|
output: "Output",
|
||||||
|
input: "Input",
|
||||||
|
cacheWrite: "Cache Write",
|
||||||
|
cacheRead: "Cache Read",
|
||||||
|
total: "Total",
|
||||||
|
tokensByType: "Tokens by Type",
|
||||||
|
costByType: "Cost by Type",
|
||||||
|
},
|
||||||
|
overview: {
|
||||||
|
title: "Usage Overview",
|
||||||
|
messages: "Messages",
|
||||||
|
messagesHint: "Total user and assistant messages in range.",
|
||||||
|
messagesAbbrev: "msgs",
|
||||||
|
user: "user",
|
||||||
|
assistant: "assistant",
|
||||||
|
toolCalls: "Tool Calls",
|
||||||
|
toolCallsHint: "Total tool call count across sessions.",
|
||||||
|
toolsUsed: "tools used",
|
||||||
|
errors: "Errors",
|
||||||
|
errorsHint: "Total message and tool errors in range.",
|
||||||
|
toolResults: "tool results",
|
||||||
|
avgTokens: "Avg Tokens / Msg",
|
||||||
|
avgTokensHint: "Average tokens per message in this range.",
|
||||||
|
avgCost: "Avg Cost / Msg",
|
||||||
|
avgCostHint: "Average cost per message when providers report costs.",
|
||||||
|
avgCostHintMissing:
|
||||||
|
"Average cost per message when providers report costs. Cost data is missing for some or all sessions in this range.",
|
||||||
|
acrossMessages: "Across {count} messages",
|
||||||
|
sessions: "Sessions",
|
||||||
|
sessionsHint: "Distinct sessions in the range.",
|
||||||
|
sessionsInRange: "of {count} in range",
|
||||||
|
throughput: "Throughput",
|
||||||
|
throughputHint: "Throughput shows tokens per minute over active time. Higher is better.",
|
||||||
|
tokensPerMinute: "tok/min",
|
||||||
|
perMinute: "/ min",
|
||||||
|
errorRate: "Error Rate",
|
||||||
|
errorHint: "Error rate = errors / total messages. Lower is better.",
|
||||||
|
avgSession: "avg session",
|
||||||
|
cacheHitRate: "Cache Hit Rate",
|
||||||
|
cacheHint:
|
||||||
|
"Cache hit rate = cache read / (input + cache read + cache write). Higher is better.",
|
||||||
|
cached: "cached",
|
||||||
|
prompt: "prompt",
|
||||||
|
calls: "calls",
|
||||||
|
topModels: "Top Models",
|
||||||
|
topProviders: "Top Providers",
|
||||||
|
topTools: "Top Tools",
|
||||||
|
topAgents: "Top Agents",
|
||||||
|
topChannels: "Top Channels",
|
||||||
|
peakErrorDays: "Peak Error Days",
|
||||||
|
peakErrorHours: "Peak Error Hours",
|
||||||
|
noModelData: "No model data",
|
||||||
|
noProviderData: "No provider data",
|
||||||
|
noToolCalls: "No tool calls",
|
||||||
|
noAgentData: "No agent data",
|
||||||
|
noChannelData: "No channel data",
|
||||||
|
noErrorData: "No error data",
|
||||||
|
},
|
||||||
|
sessions: {
|
||||||
|
title: "Sessions",
|
||||||
|
shown: "{count} shown",
|
||||||
|
total: "{count} total",
|
||||||
|
avg: "avg",
|
||||||
|
all: "All",
|
||||||
|
recent: "Recently viewed",
|
||||||
|
recentShort: "Recent",
|
||||||
|
sort: "Sort",
|
||||||
|
ascending: "Ascending",
|
||||||
|
descending: "Descending",
|
||||||
|
clearSelection: "Clear Selection",
|
||||||
|
noRecent: "No recent sessions",
|
||||||
|
noneInRange: "No sessions in range",
|
||||||
|
more: "+{count} more",
|
||||||
|
selected: "Selected ({count})",
|
||||||
|
copy: "Copy",
|
||||||
|
copyName: "Copy session name",
|
||||||
|
limitReached: "Showing first 1,000 sessions. Narrow date range for complete results.",
|
||||||
|
},
|
||||||
|
details: {
|
||||||
|
noUsageData: "No usage data for this session.",
|
||||||
|
duration: "Duration",
|
||||||
|
modelMix: "Model Mix",
|
||||||
|
filtered: "(filtered)",
|
||||||
|
close: "Close session details",
|
||||||
|
noTimeline: "No timeline data",
|
||||||
|
noDataInRange: "No data in range",
|
||||||
|
usageOverTime: "Usage Over Time",
|
||||||
|
reset: "Reset",
|
||||||
|
perTurn: "Per Turn",
|
||||||
|
cumulative: "Cumulative",
|
||||||
|
turnRange: "Turns {start}–{end} of {total}",
|
||||||
|
assistantOutputTokens: "Assistant output tokens",
|
||||||
|
userToolInputTokens: "User + tool input tokens",
|
||||||
|
tokensWrittenToCache: "Tokens written to cache",
|
||||||
|
tokensReadFromCache: "Tokens read from cache",
|
||||||
|
noContextData: "No context data",
|
||||||
|
systemPromptBreakdown: "System Prompt Breakdown",
|
||||||
|
collapse: "Collapse",
|
||||||
|
collapseAll: "Collapse All",
|
||||||
|
expandAll: "Expand All",
|
||||||
|
baseContextPerMessage: "Base context per message",
|
||||||
|
system: "System",
|
||||||
|
systemShort: "Sys",
|
||||||
|
skills: "Skills",
|
||||||
|
tools: "Tools",
|
||||||
|
files: "Files",
|
||||||
|
ofInput: "of input",
|
||||||
|
of: "of",
|
||||||
|
timelineFiltered: "timeline filtered",
|
||||||
|
conversation: "Conversation",
|
||||||
|
noMessages: "No messages",
|
||||||
|
tool: "Tool",
|
||||||
|
toolResult: "Tool result",
|
||||||
|
hasTools: "Has tools",
|
||||||
|
searchConversation: "Search conversation",
|
||||||
|
you: "You",
|
||||||
|
noMessagesMatch: "No messages match the filters.",
|
||||||
|
},
|
||||||
|
mosaic: {
|
||||||
|
title: "Activity by Time",
|
||||||
|
subtitleEmpty: "Estimates require session timestamps.",
|
||||||
|
subtitle: "Estimated from session spans (first/last activity). Time zone: {zone}.",
|
||||||
|
noTimelineData: "No timeline data yet.",
|
||||||
|
dayOfWeek: "Day of Week",
|
||||||
|
midnight: "Midnight",
|
||||||
|
fourAm: "4am",
|
||||||
|
eightAm: "8am",
|
||||||
|
noon: "Noon",
|
||||||
|
fourPm: "4pm",
|
||||||
|
eightPm: "8pm",
|
||||||
|
legend: "Low → High token density",
|
||||||
|
sun: "Sun",
|
||||||
|
mon: "Mon",
|
||||||
|
tue: "Tue",
|
||||||
|
wed: "Wed",
|
||||||
|
thu: "Thu",
|
||||||
|
fri: "Fri",
|
||||||
|
sat: "Sat",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
login: {
|
||||||
|
subtitle: "Gateway Dashboard",
|
||||||
|
passwordPlaceholder: "optional",
|
||||||
|
showToken: "Show token",
|
||||||
|
hideToken: "Hide token",
|
||||||
|
toggleTokenVisibility: "Toggle token visibility",
|
||||||
|
showPassword: "Show password",
|
||||||
|
hidePassword: "Hide password",
|
||||||
|
togglePasswordVisibility: "Toggle password visibility",
|
||||||
|
},
|
||||||
|
chat: {
|
||||||
|
disconnected: "Disconnected from gateway.",
|
||||||
|
refreshTitle: "Refresh chat data",
|
||||||
|
thinkingToggle: "Toggle assistant thinking/working output",
|
||||||
|
toolCallsToggle: "Toggle tool calls and tool results",
|
||||||
|
focusToggle: "Toggle focus mode (hide sidebar + page header)",
|
||||||
|
hideCronSessions: "Hide cron sessions",
|
||||||
|
showCronSessions: "Show cron sessions",
|
||||||
|
showCronSessionsHidden: "Show cron sessions ({count} hidden)",
|
||||||
|
onboardingDisabled: "Disabled during setup",
|
||||||
|
},
|
||||||
|
languages: {
|
||||||
|
en: "English",
|
||||||
|
zhCN: "简体中文 (Simplified Chinese)",
|
||||||
|
zhTW: "繁體中文 (Traditional Chinese)",
|
||||||
|
ptBR: "Português (Brazilian Portuguese)",
|
||||||
|
de: "Deutsch (German)",
|
||||||
|
es: "Español (Spanish)",
|
||||||
|
jaJP: "日本語 (Japanese)",
|
||||||
|
ko: "한국어 (Korean)",
|
||||||
|
fr: "Français (French)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
|
tr: "Türkçe (Turkish)",
|
||||||
|
uk: "Українська (Ukrainian)",
|
||||||
|
id: "Bahasa Indonesia (Indonesian)",
|
||||||
|
pl: "Polski (Polish)",
|
||||||
|
th: "ไทย (Thai)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
|
},
|
||||||
|
cron: {
|
||||||
|
summary: {
|
||||||
|
enabled: "Enabled",
|
||||||
|
yes: "Yes",
|
||||||
|
no: "No",
|
||||||
|
jobs: "Jobs",
|
||||||
|
nextWake: "Next wake",
|
||||||
|
refreshing: "Refreshing...",
|
||||||
|
refresh: "Refresh",
|
||||||
|
},
|
||||||
|
jobs: {
|
||||||
|
title: "Jobs",
|
||||||
|
subtitle: "All scheduled jobs stored in the gateway.",
|
||||||
|
shownOf: "{shown} shown of {total}",
|
||||||
|
searchJobs: "Search jobs",
|
||||||
|
searchPlaceholder: "Name, description, or agent",
|
||||||
|
enabled: "Enabled",
|
||||||
|
schedule: "Schedule",
|
||||||
|
lastRun: "Last run",
|
||||||
|
all: "All",
|
||||||
|
sort: "Sort",
|
||||||
|
nextRun: "Next run",
|
||||||
|
recentlyUpdated: "Recently updated",
|
||||||
|
name: "Name",
|
||||||
|
direction: "Direction",
|
||||||
|
ascending: "Ascending",
|
||||||
|
descending: "Descending",
|
||||||
|
reset: "Reset",
|
||||||
|
noMatching: "No matching jobs.",
|
||||||
|
loading: "Loading...",
|
||||||
|
loadMore: "Load more jobs",
|
||||||
|
},
|
||||||
|
runs: {
|
||||||
|
title: "Run history",
|
||||||
|
subtitleAll: "Latest runs across all jobs.",
|
||||||
|
subtitleJob: "Latest runs for {title}.",
|
||||||
|
scope: "Scope",
|
||||||
|
allJobs: "All jobs",
|
||||||
|
selectedJob: "Selected job",
|
||||||
|
searchRuns: "Search runs",
|
||||||
|
searchPlaceholder: "Summary, error, or job",
|
||||||
|
newestFirst: "Newest first",
|
||||||
|
oldestFirst: "Oldest first",
|
||||||
|
status: "Status",
|
||||||
|
delivery: "Delivery",
|
||||||
|
clear: "Clear",
|
||||||
|
allStatuses: "All statuses",
|
||||||
|
allDelivery: "All delivery",
|
||||||
|
selectJobHint: "Select a job to inspect run history.",
|
||||||
|
noMatching: "No matching runs.",
|
||||||
|
loadMore: "Load more runs",
|
||||||
|
runStatusOk: "OK",
|
||||||
|
runStatusError: "Error",
|
||||||
|
runStatusSkipped: "Skipped",
|
||||||
|
runStatusUnknown: "Unknown",
|
||||||
|
deliveryDelivered: "Delivered",
|
||||||
|
deliveryNotDelivered: "Not delivered",
|
||||||
|
deliveryUnknown: "Unknown",
|
||||||
|
deliveryNotRequested: "Not requested",
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
editJob: "Edit Job",
|
||||||
|
newJob: "New Job",
|
||||||
|
updateSubtitle: "Update the selected scheduled job.",
|
||||||
|
createSubtitle: "Create a scheduled wakeup or agent run.",
|
||||||
|
required: "Required",
|
||||||
|
requiredSr: "required",
|
||||||
|
basics: "Basics",
|
||||||
|
basicsSub: "Name it, choose the assistant, and set enabled state.",
|
||||||
|
fieldName: "Name",
|
||||||
|
description: "Description",
|
||||||
|
agentId: "Agent ID",
|
||||||
|
namePlaceholder: "Morning brief",
|
||||||
|
descriptionPlaceholder: "Optional context for this job",
|
||||||
|
agentPlaceholder: "main or ops",
|
||||||
|
agentHelp: "Start typing to pick a known agent, or enter a custom one.",
|
||||||
|
schedule: "Schedule",
|
||||||
|
scheduleSub: "Control when this job runs.",
|
||||||
|
every: "Every",
|
||||||
|
at: "At",
|
||||||
|
cronOption: "Cron",
|
||||||
|
runAt: "Run at",
|
||||||
|
unit: "Unit",
|
||||||
|
minutes: "Minutes",
|
||||||
|
hours: "Hours",
|
||||||
|
days: "Days",
|
||||||
|
expression: "Expression",
|
||||||
|
expressionPlaceholder: "0 7 * * *",
|
||||||
|
everyAmountPlaceholder: "30",
|
||||||
|
timezoneOptional: "Timezone (optional)",
|
||||||
|
timezonePlaceholder: "America/Los_Angeles",
|
||||||
|
timezoneHelp: "Pick a common timezone or enter any valid IANA timezone.",
|
||||||
|
jitterHelp: "Need jitter? Use Advanced → Stagger window / Stagger unit.",
|
||||||
|
execution: "Execution",
|
||||||
|
executionSub: "Choose when to wake, and what this job should do.",
|
||||||
|
session: "Session",
|
||||||
|
main: "Main",
|
||||||
|
isolated: "Isolated",
|
||||||
|
sessionHelp: "Main posts a system event. Isolated runs a dedicated agent turn.",
|
||||||
|
wakeMode: "Wake mode",
|
||||||
|
now: "Now",
|
||||||
|
nextHeartbeat: "Next heartbeat",
|
||||||
|
wakeModeHelp: "Now triggers immediately. Next heartbeat waits for the next cycle.",
|
||||||
|
payloadKind: "What should run?",
|
||||||
|
systemEvent: "Post message to main timeline",
|
||||||
|
agentTurn: "Run assistant task (isolated)",
|
||||||
|
systemEventHelp:
|
||||||
|
"Sends your text to the gateway main timeline (good for reminders/triggers).",
|
||||||
|
agentTurnHelp: "Starts an assistant run in its own session using your prompt.",
|
||||||
|
timeoutSeconds: "Timeout (seconds)",
|
||||||
|
timeoutPlaceholder: "Optional, e.g. 90",
|
||||||
|
timeoutHelp:
|
||||||
|
"Optional. Leave blank to use the gateway default timeout behavior for this run.",
|
||||||
|
mainTimelineMessage: "Main timeline message",
|
||||||
|
assistantTaskPrompt: "Assistant task prompt",
|
||||||
|
deliverySection: "Delivery",
|
||||||
|
deliverySub: "Choose where run summaries are sent.",
|
||||||
|
resultDelivery: "Result delivery",
|
||||||
|
announceDefault: "Announce summary (default)",
|
||||||
|
webhookPost: "Webhook POST",
|
||||||
|
noneInternal: "None (internal)",
|
||||||
|
deliveryHelp: "Announce posts a summary to chat. None keeps execution internal.",
|
||||||
|
webhookUrl: "Webhook URL",
|
||||||
|
channel: "Channel",
|
||||||
|
webhookPlaceholder: "https://example.com/cron",
|
||||||
|
channelHelp: "Choose which connected channel receives the summary.",
|
||||||
|
webhookHelp: "Send run summaries to a webhook endpoint.",
|
||||||
|
to: "To",
|
||||||
|
toPlaceholder: "+1555... or chat id",
|
||||||
|
toHelp: "Optional recipient override (chat id, phone, or user id).",
|
||||||
|
advanced: "Advanced",
|
||||||
|
advancedHelp:
|
||||||
|
"Optional overrides for delivery guarantees, schedule jitter, and model controls.",
|
||||||
|
deleteAfterRun: "Delete after run",
|
||||||
|
deleteAfterRunHelp: "Best for one-shot reminders that should auto-clean up.",
|
||||||
|
clearAgentOverride: "Clear agent override",
|
||||||
|
clearAgentHelp: "Force this job to use the gateway default assistant.",
|
||||||
|
exactTiming: "Exact timing (no stagger)",
|
||||||
|
exactTimingHelp: "Run on exact cron boundaries with no spread.",
|
||||||
|
staggerWindow: "Stagger window",
|
||||||
|
staggerUnit: "Stagger unit",
|
||||||
|
staggerPlaceholder: "30",
|
||||||
|
seconds: "Seconds",
|
||||||
|
model: "Model",
|
||||||
|
modelPlaceholder: "openai/gpt-5.2",
|
||||||
|
modelHelp: "Start typing to pick a known model, or enter a custom one.",
|
||||||
|
thinking: "Thinking",
|
||||||
|
thinkingPlaceholder: "low",
|
||||||
|
thinkingHelp: "Use a suggested level or enter a provider-specific value.",
|
||||||
|
bestEffortDelivery: "Best effort delivery",
|
||||||
|
bestEffortHelp: "Do not fail the job if delivery itself fails.",
|
||||||
|
cantAddYet: "Can't add job yet",
|
||||||
|
fillRequired: "Fill the required fields below to enable submit.",
|
||||||
|
fixFields: "Fix {count} field to continue.",
|
||||||
|
fixFieldsPlural: "Fix {count} fields to continue.",
|
||||||
|
saving: "Saving...",
|
||||||
|
saveChanges: "Save changes",
|
||||||
|
addJob: "Add job",
|
||||||
|
cancel: "Cancel",
|
||||||
|
},
|
||||||
|
jobList: {
|
||||||
|
allJobs: "all jobs",
|
||||||
|
selectJob: "(select a job)",
|
||||||
|
enabled: "enabled",
|
||||||
|
disabled: "disabled",
|
||||||
|
edit: "Edit",
|
||||||
|
clone: "Clone",
|
||||||
|
disable: "Disable",
|
||||||
|
enable: "Enable",
|
||||||
|
run: "Run",
|
||||||
|
history: "History",
|
||||||
|
remove: "Remove",
|
||||||
|
},
|
||||||
|
jobDetail: {
|
||||||
|
system: "System",
|
||||||
|
prompt: "Prompt",
|
||||||
|
delivery: "Delivery",
|
||||||
|
agent: "Agent",
|
||||||
|
},
|
||||||
|
jobState: {
|
||||||
|
status: "Status",
|
||||||
|
next: "Next",
|
||||||
|
last: "Last",
|
||||||
|
},
|
||||||
|
runEntry: {
|
||||||
|
noSummary: "No summary.",
|
||||||
|
runAt: "Run at",
|
||||||
|
openRunChat: "Open run chat",
|
||||||
|
next: "Next {rel}",
|
||||||
|
due: "Due {rel}",
|
||||||
|
},
|
||||||
|
errors: {
|
||||||
|
nameRequired: "Name is required.",
|
||||||
|
scheduleAtInvalid: "Enter a valid date/time.",
|
||||||
|
everyAmountInvalid: "Interval must be greater than 0.",
|
||||||
|
cronExprRequired: "Cron expression is required.",
|
||||||
|
staggerAmountInvalid: "Stagger must be greater than 0.",
|
||||||
|
systemTextRequired: "System text is required.",
|
||||||
|
agentMessageRequired: "Agent message is required.",
|
||||||
|
timeoutInvalid: "If set, timeout must be greater than 0 seconds.",
|
||||||
|
webhookUrlRequired: "Webhook URL is required.",
|
||||||
|
webhookUrlInvalid: "Webhook URL must start with http:// or https://.",
|
||||||
|
invalidRunTime: "Invalid run time.",
|
||||||
|
invalidIntervalAmount: "Invalid interval amount.",
|
||||||
|
cronExprRequiredShort: "Cron expression required.",
|
||||||
|
invalidStaggerAmount: "Invalid stagger amount.",
|
||||||
|
systemEventTextRequired: "System event text required.",
|
||||||
|
agentMessageRequiredShort: "Agent message required.",
|
||||||
|
nameRequiredShort: "Name required.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -722,11 +722,16 @@ export const de: TranslationMap = {
|
|||||||
jaJP: "日本語 (Japanisch)",
|
jaJP: "日本語 (Japanisch)",
|
||||||
ko: "한국어 (Koreanisch)",
|
ko: "한국어 (Koreanisch)",
|
||||||
fr: "Français (Französisch)",
|
fr: "Français (Französisch)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe (Türkisch)",
|
tr: "Türkçe (Türkisch)",
|
||||||
uk: "Українська (Ukrainisch)",
|
uk: "Українська (Ukrainisch)",
|
||||||
id: "Bahasa Indonesia (Indonesisch)",
|
id: "Bahasa Indonesia (Indonesisch)",
|
||||||
pl: "Polski (Polnisch)",
|
pl: "Polski (Polnisch)",
|
||||||
th: "ไทย (Thailändisch)",
|
th: "ไทย (Thailändisch)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
@@ -710,11 +710,16 @@ export const en: TranslationMap = {
|
|||||||
jaJP: "日本語 (Japanese)",
|
jaJP: "日本語 (Japanese)",
|
||||||
ko: "한국어 (Korean)",
|
ko: "한국어 (Korean)",
|
||||||
fr: "Français (French)",
|
fr: "Français (French)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe (Turkish)",
|
tr: "Türkçe (Turkish)",
|
||||||
uk: "Українська (Ukrainian)",
|
uk: "Українська (Ukrainian)",
|
||||||
id: "Bahasa Indonesia (Indonesian)",
|
id: "Bahasa Indonesia (Indonesian)",
|
||||||
pl: "Polski (Polish)",
|
pl: "Polski (Polish)",
|
||||||
th: "ไทย (Thai)",
|
th: "ไทย (Thai)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
@@ -721,11 +721,16 @@ export const es: TranslationMap = {
|
|||||||
jaJP: "日本語 (japonés)",
|
jaJP: "日本語 (japonés)",
|
||||||
ko: "한국어 (coreano)",
|
ko: "한국어 (coreano)",
|
||||||
fr: "Français (francés)",
|
fr: "Français (francés)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe (turco)",
|
tr: "Türkçe (turco)",
|
||||||
uk: "Українська (ucraniano)",
|
uk: "Українська (ucraniano)",
|
||||||
id: "Bahasa Indonesia (indonesio)",
|
id: "Bahasa Indonesia (indonesio)",
|
||||||
pl: "Polski (polaco)",
|
pl: "Polski (polaco)",
|
||||||
th: "ไทย (tailandés)",
|
th: "ไทย (tailandés)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
936
ui/src/i18n/locales/fa.ts
Normal file
936
ui/src/i18n/locales/fa.ts
Normal file
@@ -0,0 +1,936 @@
|
|||||||
|
import type { TranslationMap } from "../lib/types.ts";
|
||||||
|
|
||||||
|
// Generated by scripts/control-ui-i18n.ts.
|
||||||
|
export const fa: TranslationMap = {
|
||||||
|
common: {
|
||||||
|
health: "Health",
|
||||||
|
ok: "OK",
|
||||||
|
yes: "Yes",
|
||||||
|
no: "No",
|
||||||
|
active: "Active",
|
||||||
|
loading: "Loading…",
|
||||||
|
refreshing: "Refreshing…",
|
||||||
|
online: "Online",
|
||||||
|
offline: "Offline",
|
||||||
|
connect: "Connect",
|
||||||
|
connected: "Connected",
|
||||||
|
refresh: "Refresh",
|
||||||
|
reload: "Reload",
|
||||||
|
probe: "Probe",
|
||||||
|
call: "Call",
|
||||||
|
confirm: "Confirm",
|
||||||
|
cancel: "Cancel",
|
||||||
|
unselect: "Unselect",
|
||||||
|
enabled: "Enabled",
|
||||||
|
disabled: "Disabled",
|
||||||
|
na: "n/a",
|
||||||
|
configured: "Configured",
|
||||||
|
running: "Running",
|
||||||
|
linked: "Linked",
|
||||||
|
mode: "Mode",
|
||||||
|
baseUrl: "Base URL",
|
||||||
|
lastStart: "Last start",
|
||||||
|
lastProbe: "Last probe",
|
||||||
|
lastInbound: "Last inbound",
|
||||||
|
lastConnect: "Last connect",
|
||||||
|
lastMessage: "Last message",
|
||||||
|
authAge: "Auth age",
|
||||||
|
credential: "Credential",
|
||||||
|
audience: "Audience",
|
||||||
|
publicKey: "Public Key",
|
||||||
|
probeOk: "Probe ok",
|
||||||
|
probeFailed: "Probe failed",
|
||||||
|
reloadConfig: "Reload Config",
|
||||||
|
loadConfig: "Load config",
|
||||||
|
loadApprovals: "Load approvals",
|
||||||
|
settingsSections: "Settings sections",
|
||||||
|
version: "Version",
|
||||||
|
docs: "Docs",
|
||||||
|
theme: "Theme",
|
||||||
|
resources: "Resources",
|
||||||
|
search: "Search",
|
||||||
|
save: "Save",
|
||||||
|
saving: "Saving…",
|
||||||
|
saveAndPublish: "Save & Publish",
|
||||||
|
importing: "Importing…",
|
||||||
|
importFromRelays: "Import from Relays",
|
||||||
|
showAdvanced: "Show Advanced",
|
||||||
|
hideAdvanced: "Hide Advanced",
|
||||||
|
unsavedChanges: "You have unsaved changes",
|
||||||
|
secondsAgo: "{count}s ago",
|
||||||
|
working: "Working…",
|
||||||
|
showQr: "Show QR",
|
||||||
|
relink: "Relink",
|
||||||
|
waitForScan: "Wait for scan",
|
||||||
|
logout: "Logout",
|
||||||
|
},
|
||||||
|
channels: {
|
||||||
|
health: {
|
||||||
|
title: "Channel health",
|
||||||
|
subtitle: "Channel status snapshots from the gateway.",
|
||||||
|
noSnapshotYet: "No snapshot yet.",
|
||||||
|
},
|
||||||
|
generic: {
|
||||||
|
subtitle: "Channel status and configuration.",
|
||||||
|
},
|
||||||
|
gatewayUrlConfirmation: {
|
||||||
|
title: "Change Gateway URL",
|
||||||
|
subtitle: "This will reconnect to a different gateway server",
|
||||||
|
warning: "Only confirm if you trust this URL. Malicious URLs can compromise your system.",
|
||||||
|
},
|
||||||
|
nostr: {
|
||||||
|
profile: "Profile",
|
||||||
|
editProfile: "Edit Profile",
|
||||||
|
profilePicture: "Profile picture",
|
||||||
|
noProfile: "No profile set.",
|
||||||
|
noProfileHint: 'Click "Edit Profile" to add your name, bio, and avatar.',
|
||||||
|
name: "Name",
|
||||||
|
displayName: "Display Name",
|
||||||
|
about: "About",
|
||||||
|
advanced: "Advanced",
|
||||||
|
profilePicturePreview: "Profile picture preview",
|
||||||
|
account: "Account",
|
||||||
|
username: "Username",
|
||||||
|
usernameHelp: "Short username (e.g., satoshi)",
|
||||||
|
bio: "Bio",
|
||||||
|
bioPlaceholder: "Tell people about yourself...",
|
||||||
|
bioHelp: "A brief bio or description",
|
||||||
|
displayNameHelp: "Your full display name",
|
||||||
|
avatarUrl: "Avatar URL",
|
||||||
|
avatarHelp: "HTTPS URL to your profile picture",
|
||||||
|
bannerUrl: "Banner URL",
|
||||||
|
bannerHelp: "HTTPS URL to a banner image",
|
||||||
|
website: "Website",
|
||||||
|
websiteHelp: "Your personal website",
|
||||||
|
nip05Identifier: "NIP-05 Identifier",
|
||||||
|
nip05Help: "Verifiable identifier (e.g., you@domain.com)",
|
||||||
|
lightningAddress: "Lightning Address",
|
||||||
|
lightningHelp: "Lightning address for tips (LUD-16)",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lazyView: {
|
||||||
|
loadingTitle: "Loading panel",
|
||||||
|
errorTitle: "Panel failed to load",
|
||||||
|
errorSubtitle:
|
||||||
|
"Reload the page to load the latest Control UI bundle, or retry if the network request failed.",
|
||||||
|
retry: "Retry",
|
||||||
|
unknownError: "Unknown module load error.",
|
||||||
|
},
|
||||||
|
nodes: {
|
||||||
|
binding: {
|
||||||
|
loadConfigHint: "Load config to edit bindings.",
|
||||||
|
formModeHint: "Switch the Config tab to Form mode to edit bindings here.",
|
||||||
|
execNodeBinding: "Exec node binding",
|
||||||
|
execNodeBindingSubtitle: "Pin agents to a specific node when using exec host=node.",
|
||||||
|
defaultBinding: "Default binding",
|
||||||
|
defaultBindingHint: "Used when agents do not override a node binding.",
|
||||||
|
node: "Node",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
instances: {
|
||||||
|
title: "Connected Instances",
|
||||||
|
subtitle: "Presence beacons from the gateway and clients.",
|
||||||
|
showHosts: "Show hosts and IPs",
|
||||||
|
hideHosts: "Hide hosts and IPs",
|
||||||
|
toggleHostVisibility: "Toggle host visibility",
|
||||||
|
noInstances: "No instances reported yet.",
|
||||||
|
lastInput: "Last input {time}",
|
||||||
|
reason: "Reason {reason}",
|
||||||
|
},
|
||||||
|
agentTools: {
|
||||||
|
connectedSource: "Connected: {id}",
|
||||||
|
connected: "Connected",
|
||||||
|
channelSource: "Channel: {id}",
|
||||||
|
channel: "Channel",
|
||||||
|
builtIn: "Built-in",
|
||||||
|
},
|
||||||
|
nav: {
|
||||||
|
chat: "Chat",
|
||||||
|
control: "Control",
|
||||||
|
agent: "Agent",
|
||||||
|
settings: "Settings",
|
||||||
|
expand: "Expand sidebar",
|
||||||
|
collapse: "Collapse sidebar",
|
||||||
|
resize: "Resize sidebar",
|
||||||
|
},
|
||||||
|
tabs: {
|
||||||
|
agents: "Agents",
|
||||||
|
overview: "Overview",
|
||||||
|
channels: "Channels",
|
||||||
|
instances: "Instances",
|
||||||
|
sessions: "Sessions",
|
||||||
|
usage: "Usage",
|
||||||
|
cron: "Cron Jobs",
|
||||||
|
skills: "Skills",
|
||||||
|
nodes: "Nodes",
|
||||||
|
chat: "Chat",
|
||||||
|
config: "Config",
|
||||||
|
communications: "Communications",
|
||||||
|
appearance: "Appearance",
|
||||||
|
automation: "Automation",
|
||||||
|
infrastructure: "Infrastructure",
|
||||||
|
aiAgents: "AI & Agents",
|
||||||
|
debug: "Debug",
|
||||||
|
logs: "Logs",
|
||||||
|
dreams: "Dreaming",
|
||||||
|
},
|
||||||
|
subtitles: {
|
||||||
|
agents: "Workspaces, tools, identities.",
|
||||||
|
overview: "Status, entry points, health.",
|
||||||
|
channels: "Channels and settings.",
|
||||||
|
instances: "Connected clients and nodes.",
|
||||||
|
sessions: "Active sessions and defaults.",
|
||||||
|
usage: "API usage and costs.",
|
||||||
|
cron: "Wakeups and recurring runs.",
|
||||||
|
skills: "Skills and API keys.",
|
||||||
|
nodes: "Paired devices and commands.",
|
||||||
|
chat: "Gateway chat for quick interventions.",
|
||||||
|
config: "Edit openclaw.json.",
|
||||||
|
communications: "Channels, messages, and audio settings.",
|
||||||
|
appearance: "Theme, UI, and setup wizard settings.",
|
||||||
|
automation: "Commands, hooks, cron, and plugins.",
|
||||||
|
infrastructure: "Gateway, web, browser, and media settings.",
|
||||||
|
aiAgents: "Agents, models, skills, tools, memory, session.",
|
||||||
|
debug: "Snapshots, events, RPC.",
|
||||||
|
logs: "Live gateway logs.",
|
||||||
|
dreams: "Memory dreaming, consolidation, and reflection.",
|
||||||
|
},
|
||||||
|
overview: {
|
||||||
|
access: {
|
||||||
|
title: "Gateway Access",
|
||||||
|
subtitle: "Where the dashboard connects and how it authenticates.",
|
||||||
|
wsUrl: "WebSocket URL",
|
||||||
|
token: "Gateway Token",
|
||||||
|
password: "Password (not stored)",
|
||||||
|
passwordPlaceholder: "system or shared password",
|
||||||
|
sessionKey: "Default Session Key",
|
||||||
|
language: "Language",
|
||||||
|
connectHint: "Click Connect to apply connection changes.",
|
||||||
|
trustedProxy: "Authenticated via trusted proxy.",
|
||||||
|
showToken: "Show token",
|
||||||
|
hideToken: "Hide token",
|
||||||
|
toggleTokenVisibility: "Toggle token visibility",
|
||||||
|
showPassword: "Show password",
|
||||||
|
hidePassword: "Hide password",
|
||||||
|
togglePasswordVisibility: "Toggle password visibility",
|
||||||
|
},
|
||||||
|
snapshot: {
|
||||||
|
title: "Snapshot",
|
||||||
|
subtitle: "Latest gateway handshake information.",
|
||||||
|
status: "Status",
|
||||||
|
uptime: "Uptime",
|
||||||
|
tickInterval: "Tick Interval",
|
||||||
|
lastChannelsRefresh: "Last Channels Refresh",
|
||||||
|
channelsHint: "Use Channels to link WhatsApp, Telegram, Discord, Signal, or iMessage.",
|
||||||
|
},
|
||||||
|
stats: {
|
||||||
|
instances: "Instances",
|
||||||
|
instancesHint: "Presence beacons in the last 5 minutes.",
|
||||||
|
sessions: "Sessions",
|
||||||
|
sessionsHint: "Recent session keys tracked by the gateway.",
|
||||||
|
cron: "Cron",
|
||||||
|
cronNext: "Next wake {time}",
|
||||||
|
},
|
||||||
|
notes: {
|
||||||
|
title: "Notes",
|
||||||
|
subtitle: "Quick reminders for remote control setups.",
|
||||||
|
tailscaleTitle: "Tailscale serve",
|
||||||
|
tailscaleText: "Prefer serve mode to keep the gateway on loopback with tailnet auth.",
|
||||||
|
sessionTitle: "Session hygiene",
|
||||||
|
sessionText: "Use /new or sessions.patch to reset context.",
|
||||||
|
cronTitle: "Cron reminders",
|
||||||
|
cronText: "Use isolated sessions for recurring runs.",
|
||||||
|
},
|
||||||
|
auth: {
|
||||||
|
required: "This gateway requires auth. Add a token or password, then click Connect.",
|
||||||
|
failed:
|
||||||
|
"Auth failed. Re-copy a tokenized URL with {command}, or update the token, then click Connect.",
|
||||||
|
},
|
||||||
|
pairing: {
|
||||||
|
hint: "This device needs pairing approval from the gateway host.",
|
||||||
|
scopeUpgradeTitle: "Scope upgrade pending approval.",
|
||||||
|
scopeUpgradeSummary:
|
||||||
|
"This device is already paired, but the requested wider scope is waiting for approval.",
|
||||||
|
roleUpgradeTitle: "Role upgrade pending approval.",
|
||||||
|
roleUpgradeSummary:
|
||||||
|
"This device is already paired, but the requested role change is waiting for approval.",
|
||||||
|
metadataUpgradeTitle: "Device metadata change pending approval.",
|
||||||
|
metadataUpgradeSummary:
|
||||||
|
"This device is already paired, but the metadata change is waiting for approval.",
|
||||||
|
mobileHint:
|
||||||
|
"On mobile? Copy the full URL (including #token=...) from openclaw dashboard --no-open on your desktop.",
|
||||||
|
docsTitle: "Device pairing docs (opens in new tab)",
|
||||||
|
docsLink: "Docs: Device pairing",
|
||||||
|
},
|
||||||
|
insecure: {
|
||||||
|
hint: "This page is HTTP, so the browser blocks device identity. Use HTTPS (Tailscale Serve) or open {url} on the gateway host.",
|
||||||
|
stayHttp: "If you must stay on HTTP, set {config} (token-only).",
|
||||||
|
},
|
||||||
|
connection: {
|
||||||
|
title: "How to connect",
|
||||||
|
step1: "Start the gateway on your host machine:",
|
||||||
|
step2: "Get a tokenized dashboard URL:",
|
||||||
|
step3: "Paste the WebSocket URL and token above, or open the tokenized URL directly.",
|
||||||
|
step4: "Or generate a reusable token:",
|
||||||
|
docsHint: "For remote access, Tailscale Serve is recommended. ",
|
||||||
|
docsLink: "Read the docs →",
|
||||||
|
authDocsTitle: "Control UI auth docs (opens in new tab)",
|
||||||
|
authDocsLink: "Docs: Control UI auth",
|
||||||
|
tailscaleDocsTitle: "Tailscale Serve docs (opens in new tab)",
|
||||||
|
tailscaleDocsLink: "Docs: Tailscale Serve",
|
||||||
|
insecureHttpDocsTitle: "Insecure HTTP docs (opens in new tab)",
|
||||||
|
insecureHttpDocsLink: "Docs: Insecure HTTP",
|
||||||
|
copyCommand: "Copy command",
|
||||||
|
copyCommandAria: "Copy command: {command}",
|
||||||
|
},
|
||||||
|
cards: {
|
||||||
|
cost: "Cost",
|
||||||
|
skills: "Skills",
|
||||||
|
recentSessions: "Recent Sessions",
|
||||||
|
modelAuth: "Model Auth",
|
||||||
|
modelAuthOk: "{count} ok",
|
||||||
|
modelAuthExpired: "{count} expired",
|
||||||
|
modelAuthExpiring: "{count} expiring",
|
||||||
|
modelAuthProviders: "{count} providers",
|
||||||
|
modelAuthUsageLeft: "{pct}% left",
|
||||||
|
modelAuthExpiresIn: "expires {when}",
|
||||||
|
modelAuthAttentionExpiredTitle: "Model auth expired",
|
||||||
|
modelAuthAttentionExpiringTitle: "Model auth expiring soon",
|
||||||
|
modelAuthAttentionExpiredDesc: "{providers} — re-authenticate with openclaw models auth",
|
||||||
|
modelAuthAttentionExpiringEntry: "{provider} ({when})",
|
||||||
|
},
|
||||||
|
attention: {
|
||||||
|
title: "Attention",
|
||||||
|
},
|
||||||
|
eventLog: {
|
||||||
|
title: "Event Log",
|
||||||
|
},
|
||||||
|
logTail: {
|
||||||
|
title: "Gateway Logs",
|
||||||
|
},
|
||||||
|
quickActions: {
|
||||||
|
newSession: "New Session",
|
||||||
|
automation: "Automation",
|
||||||
|
refreshAll: "Refresh All",
|
||||||
|
terminal: "Terminal",
|
||||||
|
},
|
||||||
|
palette: {
|
||||||
|
placeholder: "Type a command…",
|
||||||
|
noResults: "No results",
|
||||||
|
categories: {
|
||||||
|
search: "Search",
|
||||||
|
navigation: "Navigation",
|
||||||
|
skills: "Skills",
|
||||||
|
},
|
||||||
|
items: {
|
||||||
|
overview: "Overview",
|
||||||
|
sessions: "Sessions",
|
||||||
|
scheduled: "Scheduled",
|
||||||
|
skills: "Skills",
|
||||||
|
settings: "Settings",
|
||||||
|
agents: "Agents",
|
||||||
|
shellCommand: "Shell Command",
|
||||||
|
debugMode: "Debug Mode",
|
||||||
|
},
|
||||||
|
descriptions: {
|
||||||
|
shellCommand: "Run shell",
|
||||||
|
debugMode: "Toggle debug",
|
||||||
|
},
|
||||||
|
footer: {
|
||||||
|
navigate: "navigate",
|
||||||
|
select: "select",
|
||||||
|
close: "close",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
dreaming: {
|
||||||
|
tabs: {
|
||||||
|
scene: "Scene",
|
||||||
|
diary: "Diary",
|
||||||
|
advanced: "Advanced",
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
refresh: "Refresh",
|
||||||
|
refreshing: "Refreshing…",
|
||||||
|
on: "Dreaming On",
|
||||||
|
off: "Dreaming Off",
|
||||||
|
},
|
||||||
|
restartConfirmation: {
|
||||||
|
title: "Restart Gateway to Apply Change",
|
||||||
|
subtitle: "Changing Dreaming mode restarts the gateway.",
|
||||||
|
warning:
|
||||||
|
"This action will restart the Gateway and may temporarily interrupt chats, automations, and connected channels.",
|
||||||
|
confirm: "Confirm Restart",
|
||||||
|
restarting: "Restarting…",
|
||||||
|
failed: "Could not apply change. Check your connection and try again.",
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
active: "Dreaming Active",
|
||||||
|
idle: "Dreaming Idle",
|
||||||
|
promotedSuffix: "promoted",
|
||||||
|
nextSweepPrefix: "next sweep",
|
||||||
|
},
|
||||||
|
scene: {
|
||||||
|
backfill: "Backfill",
|
||||||
|
dedupeDiary: "Dedupe Diary",
|
||||||
|
reset: "Reset",
|
||||||
|
clearGrounded: "Clear Replayed",
|
||||||
|
repairCache: "Repair Dream Cache",
|
||||||
|
working: "Working…",
|
||||||
|
},
|
||||||
|
phase: {
|
||||||
|
light: "Light",
|
||||||
|
deep: "Deep",
|
||||||
|
rem: "Rem",
|
||||||
|
off: "off",
|
||||||
|
},
|
||||||
|
advanced: {
|
||||||
|
eyebrow: "Review",
|
||||||
|
title: "Daily Log Review",
|
||||||
|
description:
|
||||||
|
"Review what came from the daily log, what is waiting for promotion, and what was promoted recently.",
|
||||||
|
summaryFromDailyLog: "from daily log",
|
||||||
|
summaryWaiting: "waiting",
|
||||||
|
summaryPromotedToday: "promoted today",
|
||||||
|
stagedTitle: "From the Daily Log",
|
||||||
|
stagedDescription: "Replay candidates pulled from older daily log entries.",
|
||||||
|
shortTermTitle: "Waiting for Promotion",
|
||||||
|
shortTermDescription: "Current short-term candidates waiting to graduate into real memory.",
|
||||||
|
sortRecent: "Most recent",
|
||||||
|
sortSignals: "Strongest support",
|
||||||
|
originDailyLog: "replayed",
|
||||||
|
originLive: "live",
|
||||||
|
originMixed: "mixed",
|
||||||
|
promotedTitle: "Recent Promotions",
|
||||||
|
promotedDescription: "Items that already made it through promotion.",
|
||||||
|
emptyGrounded: "No staged grounded replay entries right now.",
|
||||||
|
emptyShortTerm: "No short-term entries to inspect.",
|
||||||
|
emptyPromoted: "No recent promotions to inspect.",
|
||||||
|
updatedPrefix: "updated",
|
||||||
|
},
|
||||||
|
stats: {
|
||||||
|
shortTerm: "Short-term",
|
||||||
|
grounded: "Grounded",
|
||||||
|
signals: "Signals",
|
||||||
|
promoted: "Promoted",
|
||||||
|
phaseHits: "Phase Hits",
|
||||||
|
},
|
||||||
|
trace: {
|
||||||
|
shortTerm: "Short-term",
|
||||||
|
grounded: "Grounded",
|
||||||
|
signals: "Signals",
|
||||||
|
promoted: "Promoted",
|
||||||
|
groundedLed: "grounded-led",
|
||||||
|
emptyShortTerm: "No active short-term items.",
|
||||||
|
emptyGrounded: "No staged grounded items.",
|
||||||
|
emptySignals: "No active signals.",
|
||||||
|
emptyPromoted: "Nothing promoted yet today.",
|
||||||
|
},
|
||||||
|
diary: {
|
||||||
|
title: "Dream Diary",
|
||||||
|
noDreamsYet: "No dreams yet",
|
||||||
|
noDreamsHint: "Dreams will appear here after the first dreaming cycle runs.",
|
||||||
|
waitingTitle: "The diary is waiting",
|
||||||
|
waitingHint: "Narrative entries will appear after the next dreaming cycle.",
|
||||||
|
older: "Older",
|
||||||
|
newer: "Newer",
|
||||||
|
reload: "Reload",
|
||||||
|
reloading: "Reloading…",
|
||||||
|
},
|
||||||
|
phrases: {
|
||||||
|
consolidatingMemories: "consolidating memories…",
|
||||||
|
tidyingKnowledgeGraph: "tidying the knowledge graph…",
|
||||||
|
replayingConversations: "replaying today's conversations…",
|
||||||
|
weavingShortTerm: "weaving short-term into long-term…",
|
||||||
|
defragmentingMindPalace: "defragmenting the mind palace…",
|
||||||
|
filingLooseThoughts: "filing away loose thoughts…",
|
||||||
|
connectingDots: "connecting distant dots…",
|
||||||
|
compostingContext: "composting old context windows…",
|
||||||
|
alphabetizingSubconscious: "alphabetizing the subconscious…",
|
||||||
|
promotingHunches: "promoting promising hunches…",
|
||||||
|
forgettingNoise: "forgetting what doesn't matter…",
|
||||||
|
dreamingEmbeddings: "dreaming in embeddings…",
|
||||||
|
reorganizingAttic: "reorganizing the memory attic…",
|
||||||
|
indexingDay: "softly indexing the day…",
|
||||||
|
nurturingInsights: "nurturing fledgling insights…",
|
||||||
|
simmeringIdeas: "simmering half-formed ideas…",
|
||||||
|
whisperingVectorStore: "whispering to the vector store…",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
usage: {
|
||||||
|
page: {
|
||||||
|
subtitle: "See where tokens go, when sessions spike, and what drives cost.",
|
||||||
|
},
|
||||||
|
common: {
|
||||||
|
emptyValue: "—",
|
||||||
|
unknown: "unknown",
|
||||||
|
},
|
||||||
|
loading: {
|
||||||
|
title: "Usage Overview",
|
||||||
|
badge: "Loading",
|
||||||
|
},
|
||||||
|
metrics: {
|
||||||
|
tokens: "Tokens",
|
||||||
|
cost: "Cost",
|
||||||
|
session: "session",
|
||||||
|
sessions: "sessions",
|
||||||
|
},
|
||||||
|
presets: {
|
||||||
|
today: "Today",
|
||||||
|
last7d: "7d",
|
||||||
|
last30d: "30d",
|
||||||
|
},
|
||||||
|
filters: {
|
||||||
|
title: "Filters",
|
||||||
|
to: "to",
|
||||||
|
startDate: "Start date",
|
||||||
|
endDate: "End date",
|
||||||
|
timeZone: "Time zone",
|
||||||
|
timeZoneLocal: "Local",
|
||||||
|
timeZoneUtc: "UTC",
|
||||||
|
pin: "Pin",
|
||||||
|
pinned: "Pinned",
|
||||||
|
unpin: "Unpin filters",
|
||||||
|
selectAll: "Select All",
|
||||||
|
clear: "Clear",
|
||||||
|
clearAll: "Clear All",
|
||||||
|
remove: "Remove filter",
|
||||||
|
all: "All",
|
||||||
|
days: "Days",
|
||||||
|
hours: "Hours",
|
||||||
|
session: "Session",
|
||||||
|
agent: "Agent",
|
||||||
|
channel: "Channel",
|
||||||
|
provider: "Provider",
|
||||||
|
model: "Model",
|
||||||
|
tool: "Tool",
|
||||||
|
daysCount: "{count} days",
|
||||||
|
hoursCount: "{count} hours",
|
||||||
|
sessionsCount: "{count} sessions",
|
||||||
|
},
|
||||||
|
query: {
|
||||||
|
placeholder:
|
||||||
|
"Filter sessions (e.g. key:agent:main:cron* model:gpt-4o has:errors minTokens:2000)",
|
||||||
|
apply: "Filter (client-side)",
|
||||||
|
matching: "{shown} of {total} sessions match",
|
||||||
|
inRange: "{total} sessions in range",
|
||||||
|
tip: "Tip: use filters or click bars to refine days.",
|
||||||
|
},
|
||||||
|
export: {
|
||||||
|
label: "Export",
|
||||||
|
sessionsCsv: "Sessions CSV",
|
||||||
|
dailyCsv: "Daily CSV",
|
||||||
|
json: "JSON",
|
||||||
|
},
|
||||||
|
empty: {
|
||||||
|
title: "Start with a date range",
|
||||||
|
subtitle:
|
||||||
|
"Load usage data to compare costs, inspect sessions, and drill into timelines without leaving the dashboard.",
|
||||||
|
hint: "Select a date range and click Refresh to load usage.",
|
||||||
|
noData: "No data",
|
||||||
|
featureOverview: "Overview cards",
|
||||||
|
featureSessions: "Session ranking",
|
||||||
|
featureTimeline: "Timeline drilldown",
|
||||||
|
},
|
||||||
|
daily: {
|
||||||
|
title: "Daily Usage",
|
||||||
|
total: "Total",
|
||||||
|
byType: "By Type",
|
||||||
|
tokensTitle: "Daily Token Usage",
|
||||||
|
costTitle: "Daily Cost",
|
||||||
|
},
|
||||||
|
breakdown: {
|
||||||
|
output: "Output",
|
||||||
|
input: "Input",
|
||||||
|
cacheWrite: "Cache Write",
|
||||||
|
cacheRead: "Cache Read",
|
||||||
|
total: "Total",
|
||||||
|
tokensByType: "Tokens by Type",
|
||||||
|
costByType: "Cost by Type",
|
||||||
|
},
|
||||||
|
overview: {
|
||||||
|
title: "Usage Overview",
|
||||||
|
messages: "Messages",
|
||||||
|
messagesHint: "Total user and assistant messages in range.",
|
||||||
|
messagesAbbrev: "msgs",
|
||||||
|
user: "user",
|
||||||
|
assistant: "assistant",
|
||||||
|
toolCalls: "Tool Calls",
|
||||||
|
toolCallsHint: "Total tool call count across sessions.",
|
||||||
|
toolsUsed: "tools used",
|
||||||
|
errors: "Errors",
|
||||||
|
errorsHint: "Total message and tool errors in range.",
|
||||||
|
toolResults: "tool results",
|
||||||
|
avgTokens: "Avg Tokens / Msg",
|
||||||
|
avgTokensHint: "Average tokens per message in this range.",
|
||||||
|
avgCost: "Avg Cost / Msg",
|
||||||
|
avgCostHint: "Average cost per message when providers report costs.",
|
||||||
|
avgCostHintMissing:
|
||||||
|
"Average cost per message when providers report costs. Cost data is missing for some or all sessions in this range.",
|
||||||
|
acrossMessages: "Across {count} messages",
|
||||||
|
sessions: "Sessions",
|
||||||
|
sessionsHint: "Distinct sessions in the range.",
|
||||||
|
sessionsInRange: "of {count} in range",
|
||||||
|
throughput: "Throughput",
|
||||||
|
throughputHint: "Throughput shows tokens per minute over active time. Higher is better.",
|
||||||
|
tokensPerMinute: "tok/min",
|
||||||
|
perMinute: "/ min",
|
||||||
|
errorRate: "Error Rate",
|
||||||
|
errorHint: "Error rate = errors / total messages. Lower is better.",
|
||||||
|
avgSession: "avg session",
|
||||||
|
cacheHitRate: "Cache Hit Rate",
|
||||||
|
cacheHint:
|
||||||
|
"Cache hit rate = cache read / (input + cache read + cache write). Higher is better.",
|
||||||
|
cached: "cached",
|
||||||
|
prompt: "prompt",
|
||||||
|
calls: "calls",
|
||||||
|
topModels: "Top Models",
|
||||||
|
topProviders: "Top Providers",
|
||||||
|
topTools: "Top Tools",
|
||||||
|
topAgents: "Top Agents",
|
||||||
|
topChannels: "Top Channels",
|
||||||
|
peakErrorDays: "Peak Error Days",
|
||||||
|
peakErrorHours: "Peak Error Hours",
|
||||||
|
noModelData: "No model data",
|
||||||
|
noProviderData: "No provider data",
|
||||||
|
noToolCalls: "No tool calls",
|
||||||
|
noAgentData: "No agent data",
|
||||||
|
noChannelData: "No channel data",
|
||||||
|
noErrorData: "No error data",
|
||||||
|
},
|
||||||
|
sessions: {
|
||||||
|
title: "Sessions",
|
||||||
|
shown: "{count} shown",
|
||||||
|
total: "{count} total",
|
||||||
|
avg: "avg",
|
||||||
|
all: "All",
|
||||||
|
recent: "Recently viewed",
|
||||||
|
recentShort: "Recent",
|
||||||
|
sort: "Sort",
|
||||||
|
ascending: "Ascending",
|
||||||
|
descending: "Descending",
|
||||||
|
clearSelection: "Clear Selection",
|
||||||
|
noRecent: "No recent sessions",
|
||||||
|
noneInRange: "No sessions in range",
|
||||||
|
more: "+{count} more",
|
||||||
|
selected: "Selected ({count})",
|
||||||
|
copy: "Copy",
|
||||||
|
copyName: "Copy session name",
|
||||||
|
limitReached: "Showing first 1,000 sessions. Narrow date range for complete results.",
|
||||||
|
},
|
||||||
|
details: {
|
||||||
|
noUsageData: "No usage data for this session.",
|
||||||
|
duration: "Duration",
|
||||||
|
modelMix: "Model Mix",
|
||||||
|
filtered: "(filtered)",
|
||||||
|
close: "Close session details",
|
||||||
|
noTimeline: "No timeline data",
|
||||||
|
noDataInRange: "No data in range",
|
||||||
|
usageOverTime: "Usage Over Time",
|
||||||
|
reset: "Reset",
|
||||||
|
perTurn: "Per Turn",
|
||||||
|
cumulative: "Cumulative",
|
||||||
|
turnRange: "Turns {start}–{end} of {total}",
|
||||||
|
assistantOutputTokens: "Assistant output tokens",
|
||||||
|
userToolInputTokens: "User + tool input tokens",
|
||||||
|
tokensWrittenToCache: "Tokens written to cache",
|
||||||
|
tokensReadFromCache: "Tokens read from cache",
|
||||||
|
noContextData: "No context data",
|
||||||
|
systemPromptBreakdown: "System Prompt Breakdown",
|
||||||
|
collapse: "Collapse",
|
||||||
|
collapseAll: "Collapse All",
|
||||||
|
expandAll: "Expand All",
|
||||||
|
baseContextPerMessage: "Base context per message",
|
||||||
|
system: "System",
|
||||||
|
systemShort: "Sys",
|
||||||
|
skills: "Skills",
|
||||||
|
tools: "Tools",
|
||||||
|
files: "Files",
|
||||||
|
ofInput: "of input",
|
||||||
|
of: "of",
|
||||||
|
timelineFiltered: "timeline filtered",
|
||||||
|
conversation: "Conversation",
|
||||||
|
noMessages: "No messages",
|
||||||
|
tool: "Tool",
|
||||||
|
toolResult: "Tool result",
|
||||||
|
hasTools: "Has tools",
|
||||||
|
searchConversation: "Search conversation",
|
||||||
|
you: "You",
|
||||||
|
noMessagesMatch: "No messages match the filters.",
|
||||||
|
},
|
||||||
|
mosaic: {
|
||||||
|
title: "Activity by Time",
|
||||||
|
subtitleEmpty: "Estimates require session timestamps.",
|
||||||
|
subtitle: "Estimated from session spans (first/last activity). Time zone: {zone}.",
|
||||||
|
noTimelineData: "No timeline data yet.",
|
||||||
|
dayOfWeek: "Day of Week",
|
||||||
|
midnight: "Midnight",
|
||||||
|
fourAm: "4am",
|
||||||
|
eightAm: "8am",
|
||||||
|
noon: "Noon",
|
||||||
|
fourPm: "4pm",
|
||||||
|
eightPm: "8pm",
|
||||||
|
legend: "Low → High token density",
|
||||||
|
sun: "Sun",
|
||||||
|
mon: "Mon",
|
||||||
|
tue: "Tue",
|
||||||
|
wed: "Wed",
|
||||||
|
thu: "Thu",
|
||||||
|
fri: "Fri",
|
||||||
|
sat: "Sat",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
login: {
|
||||||
|
subtitle: "Gateway Dashboard",
|
||||||
|
passwordPlaceholder: "optional",
|
||||||
|
showToken: "Show token",
|
||||||
|
hideToken: "Hide token",
|
||||||
|
toggleTokenVisibility: "Toggle token visibility",
|
||||||
|
showPassword: "Show password",
|
||||||
|
hidePassword: "Hide password",
|
||||||
|
togglePasswordVisibility: "Toggle password visibility",
|
||||||
|
},
|
||||||
|
chat: {
|
||||||
|
disconnected: "Disconnected from gateway.",
|
||||||
|
refreshTitle: "Refresh chat data",
|
||||||
|
thinkingToggle: "Toggle assistant thinking/working output",
|
||||||
|
toolCallsToggle: "Toggle tool calls and tool results",
|
||||||
|
focusToggle: "Toggle focus mode (hide sidebar + page header)",
|
||||||
|
hideCronSessions: "Hide cron sessions",
|
||||||
|
showCronSessions: "Show cron sessions",
|
||||||
|
showCronSessionsHidden: "Show cron sessions ({count} hidden)",
|
||||||
|
onboardingDisabled: "Disabled during setup",
|
||||||
|
},
|
||||||
|
languages: {
|
||||||
|
en: "English",
|
||||||
|
zhCN: "简体中文 (Simplified Chinese)",
|
||||||
|
zhTW: "繁體中文 (Traditional Chinese)",
|
||||||
|
ptBR: "Português (Brazilian Portuguese)",
|
||||||
|
de: "Deutsch (German)",
|
||||||
|
es: "Español (Spanish)",
|
||||||
|
jaJP: "日本語 (Japanese)",
|
||||||
|
ko: "한국어 (Korean)",
|
||||||
|
fr: "Français (French)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
|
tr: "Türkçe (Turkish)",
|
||||||
|
uk: "Українська (Ukrainian)",
|
||||||
|
id: "Bahasa Indonesia (Indonesian)",
|
||||||
|
pl: "Polski (Polish)",
|
||||||
|
th: "ไทย (Thai)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
|
},
|
||||||
|
cron: {
|
||||||
|
summary: {
|
||||||
|
enabled: "Enabled",
|
||||||
|
yes: "Yes",
|
||||||
|
no: "No",
|
||||||
|
jobs: "Jobs",
|
||||||
|
nextWake: "Next wake",
|
||||||
|
refreshing: "Refreshing...",
|
||||||
|
refresh: "Refresh",
|
||||||
|
},
|
||||||
|
jobs: {
|
||||||
|
title: "Jobs",
|
||||||
|
subtitle: "All scheduled jobs stored in the gateway.",
|
||||||
|
shownOf: "{shown} shown of {total}",
|
||||||
|
searchJobs: "Search jobs",
|
||||||
|
searchPlaceholder: "Name, description, or agent",
|
||||||
|
enabled: "Enabled",
|
||||||
|
schedule: "Schedule",
|
||||||
|
lastRun: "Last run",
|
||||||
|
all: "All",
|
||||||
|
sort: "Sort",
|
||||||
|
nextRun: "Next run",
|
||||||
|
recentlyUpdated: "Recently updated",
|
||||||
|
name: "Name",
|
||||||
|
direction: "Direction",
|
||||||
|
ascending: "Ascending",
|
||||||
|
descending: "Descending",
|
||||||
|
reset: "Reset",
|
||||||
|
noMatching: "No matching jobs.",
|
||||||
|
loading: "Loading...",
|
||||||
|
loadMore: "Load more jobs",
|
||||||
|
},
|
||||||
|
runs: {
|
||||||
|
title: "Run history",
|
||||||
|
subtitleAll: "Latest runs across all jobs.",
|
||||||
|
subtitleJob: "Latest runs for {title}.",
|
||||||
|
scope: "Scope",
|
||||||
|
allJobs: "All jobs",
|
||||||
|
selectedJob: "Selected job",
|
||||||
|
searchRuns: "Search runs",
|
||||||
|
searchPlaceholder: "Summary, error, or job",
|
||||||
|
newestFirst: "Newest first",
|
||||||
|
oldestFirst: "Oldest first",
|
||||||
|
status: "Status",
|
||||||
|
delivery: "Delivery",
|
||||||
|
clear: "Clear",
|
||||||
|
allStatuses: "All statuses",
|
||||||
|
allDelivery: "All delivery",
|
||||||
|
selectJobHint: "Select a job to inspect run history.",
|
||||||
|
noMatching: "No matching runs.",
|
||||||
|
loadMore: "Load more runs",
|
||||||
|
runStatusOk: "OK",
|
||||||
|
runStatusError: "Error",
|
||||||
|
runStatusSkipped: "Skipped",
|
||||||
|
runStatusUnknown: "Unknown",
|
||||||
|
deliveryDelivered: "Delivered",
|
||||||
|
deliveryNotDelivered: "Not delivered",
|
||||||
|
deliveryUnknown: "Unknown",
|
||||||
|
deliveryNotRequested: "Not requested",
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
editJob: "Edit Job",
|
||||||
|
newJob: "New Job",
|
||||||
|
updateSubtitle: "Update the selected scheduled job.",
|
||||||
|
createSubtitle: "Create a scheduled wakeup or agent run.",
|
||||||
|
required: "Required",
|
||||||
|
requiredSr: "required",
|
||||||
|
basics: "Basics",
|
||||||
|
basicsSub: "Name it, choose the assistant, and set enabled state.",
|
||||||
|
fieldName: "Name",
|
||||||
|
description: "Description",
|
||||||
|
agentId: "Agent ID",
|
||||||
|
namePlaceholder: "Morning brief",
|
||||||
|
descriptionPlaceholder: "Optional context for this job",
|
||||||
|
agentPlaceholder: "main or ops",
|
||||||
|
agentHelp: "Start typing to pick a known agent, or enter a custom one.",
|
||||||
|
schedule: "Schedule",
|
||||||
|
scheduleSub: "Control when this job runs.",
|
||||||
|
every: "Every",
|
||||||
|
at: "At",
|
||||||
|
cronOption: "Cron",
|
||||||
|
runAt: "Run at",
|
||||||
|
unit: "Unit",
|
||||||
|
minutes: "Minutes",
|
||||||
|
hours: "Hours",
|
||||||
|
days: "Days",
|
||||||
|
expression: "Expression",
|
||||||
|
expressionPlaceholder: "0 7 * * *",
|
||||||
|
everyAmountPlaceholder: "30",
|
||||||
|
timezoneOptional: "Timezone (optional)",
|
||||||
|
timezonePlaceholder: "America/Los_Angeles",
|
||||||
|
timezoneHelp: "Pick a common timezone or enter any valid IANA timezone.",
|
||||||
|
jitterHelp: "Need jitter? Use Advanced → Stagger window / Stagger unit.",
|
||||||
|
execution: "Execution",
|
||||||
|
executionSub: "Choose when to wake, and what this job should do.",
|
||||||
|
session: "Session",
|
||||||
|
main: "Main",
|
||||||
|
isolated: "Isolated",
|
||||||
|
sessionHelp: "Main posts a system event. Isolated runs a dedicated agent turn.",
|
||||||
|
wakeMode: "Wake mode",
|
||||||
|
now: "Now",
|
||||||
|
nextHeartbeat: "Next heartbeat",
|
||||||
|
wakeModeHelp: "Now triggers immediately. Next heartbeat waits for the next cycle.",
|
||||||
|
payloadKind: "What should run?",
|
||||||
|
systemEvent: "Post message to main timeline",
|
||||||
|
agentTurn: "Run assistant task (isolated)",
|
||||||
|
systemEventHelp:
|
||||||
|
"Sends your text to the gateway main timeline (good for reminders/triggers).",
|
||||||
|
agentTurnHelp: "Starts an assistant run in its own session using your prompt.",
|
||||||
|
timeoutSeconds: "Timeout (seconds)",
|
||||||
|
timeoutPlaceholder: "Optional, e.g. 90",
|
||||||
|
timeoutHelp:
|
||||||
|
"Optional. Leave blank to use the gateway default timeout behavior for this run.",
|
||||||
|
mainTimelineMessage: "Main timeline message",
|
||||||
|
assistantTaskPrompt: "Assistant task prompt",
|
||||||
|
deliverySection: "Delivery",
|
||||||
|
deliverySub: "Choose where run summaries are sent.",
|
||||||
|
resultDelivery: "Result delivery",
|
||||||
|
announceDefault: "Announce summary (default)",
|
||||||
|
webhookPost: "Webhook POST",
|
||||||
|
noneInternal: "None (internal)",
|
||||||
|
deliveryHelp: "Announce posts a summary to chat. None keeps execution internal.",
|
||||||
|
webhookUrl: "Webhook URL",
|
||||||
|
channel: "Channel",
|
||||||
|
webhookPlaceholder: "https://example.com/cron",
|
||||||
|
channelHelp: "Choose which connected channel receives the summary.",
|
||||||
|
webhookHelp: "Send run summaries to a webhook endpoint.",
|
||||||
|
to: "To",
|
||||||
|
toPlaceholder: "+1555... or chat id",
|
||||||
|
toHelp: "Optional recipient override (chat id, phone, or user id).",
|
||||||
|
advanced: "Advanced",
|
||||||
|
advancedHelp:
|
||||||
|
"Optional overrides for delivery guarantees, schedule jitter, and model controls.",
|
||||||
|
deleteAfterRun: "Delete after run",
|
||||||
|
deleteAfterRunHelp: "Best for one-shot reminders that should auto-clean up.",
|
||||||
|
clearAgentOverride: "Clear agent override",
|
||||||
|
clearAgentHelp: "Force this job to use the gateway default assistant.",
|
||||||
|
exactTiming: "Exact timing (no stagger)",
|
||||||
|
exactTimingHelp: "Run on exact cron boundaries with no spread.",
|
||||||
|
staggerWindow: "Stagger window",
|
||||||
|
staggerUnit: "Stagger unit",
|
||||||
|
staggerPlaceholder: "30",
|
||||||
|
seconds: "Seconds",
|
||||||
|
model: "Model",
|
||||||
|
modelPlaceholder: "openai/gpt-5.2",
|
||||||
|
modelHelp: "Start typing to pick a known model, or enter a custom one.",
|
||||||
|
thinking: "Thinking",
|
||||||
|
thinkingPlaceholder: "low",
|
||||||
|
thinkingHelp: "Use a suggested level or enter a provider-specific value.",
|
||||||
|
bestEffortDelivery: "Best effort delivery",
|
||||||
|
bestEffortHelp: "Do not fail the job if delivery itself fails.",
|
||||||
|
cantAddYet: "Can't add job yet",
|
||||||
|
fillRequired: "Fill the required fields below to enable submit.",
|
||||||
|
fixFields: "Fix {count} field to continue.",
|
||||||
|
fixFieldsPlural: "Fix {count} fields to continue.",
|
||||||
|
saving: "Saving...",
|
||||||
|
saveChanges: "Save changes",
|
||||||
|
addJob: "Add job",
|
||||||
|
cancel: "Cancel",
|
||||||
|
},
|
||||||
|
jobList: {
|
||||||
|
allJobs: "all jobs",
|
||||||
|
selectJob: "(select a job)",
|
||||||
|
enabled: "enabled",
|
||||||
|
disabled: "disabled",
|
||||||
|
edit: "Edit",
|
||||||
|
clone: "Clone",
|
||||||
|
disable: "Disable",
|
||||||
|
enable: "Enable",
|
||||||
|
run: "Run",
|
||||||
|
history: "History",
|
||||||
|
remove: "Remove",
|
||||||
|
},
|
||||||
|
jobDetail: {
|
||||||
|
system: "System",
|
||||||
|
prompt: "Prompt",
|
||||||
|
delivery: "Delivery",
|
||||||
|
agent: "Agent",
|
||||||
|
},
|
||||||
|
jobState: {
|
||||||
|
status: "Status",
|
||||||
|
next: "Next",
|
||||||
|
last: "Last",
|
||||||
|
},
|
||||||
|
runEntry: {
|
||||||
|
noSummary: "No summary.",
|
||||||
|
runAt: "Run at",
|
||||||
|
openRunChat: "Open run chat",
|
||||||
|
next: "Next {rel}",
|
||||||
|
due: "Due {rel}",
|
||||||
|
},
|
||||||
|
errors: {
|
||||||
|
nameRequired: "Name is required.",
|
||||||
|
scheduleAtInvalid: "Enter a valid date/time.",
|
||||||
|
everyAmountInvalid: "Interval must be greater than 0.",
|
||||||
|
cronExprRequired: "Cron expression is required.",
|
||||||
|
staggerAmountInvalid: "Stagger must be greater than 0.",
|
||||||
|
systemTextRequired: "System text is required.",
|
||||||
|
agentMessageRequired: "Agent message is required.",
|
||||||
|
timeoutInvalid: "If set, timeout must be greater than 0 seconds.",
|
||||||
|
webhookUrlRequired: "Webhook URL is required.",
|
||||||
|
webhookUrlInvalid: "Webhook URL must start with http:// or https://.",
|
||||||
|
invalidRunTime: "Invalid run time.",
|
||||||
|
invalidIntervalAmount: "Invalid interval amount.",
|
||||||
|
cronExprRequiredShort: "Cron expression required.",
|
||||||
|
invalidStaggerAmount: "Invalid stagger amount.",
|
||||||
|
systemEventTextRequired: "System event text required.",
|
||||||
|
agentMessageRequiredShort: "Agent message required.",
|
||||||
|
nameRequiredShort: "Name required.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -723,11 +723,16 @@ export const fr: TranslationMap = {
|
|||||||
jaJP: "日本語 (japonais)",
|
jaJP: "日本語 (japonais)",
|
||||||
ko: "한국어 (coréen)",
|
ko: "한국어 (coréen)",
|
||||||
fr: "Français (français)",
|
fr: "Français (français)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe (turc)",
|
tr: "Türkçe (turc)",
|
||||||
uk: "Українська (ukrainien)",
|
uk: "Українська (ukrainien)",
|
||||||
id: "Bahasa Indonesia (indonésien)",
|
id: "Bahasa Indonesia (indonésien)",
|
||||||
pl: "Polski (polonais)",
|
pl: "Polski (polonais)",
|
||||||
th: "ไทย (thaï)",
|
th: "ไทย (thaï)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
@@ -716,11 +716,16 @@ export const id: TranslationMap = {
|
|||||||
jaJP: "日本語 (Jepang)",
|
jaJP: "日本語 (Jepang)",
|
||||||
ko: "한국어 (Korea)",
|
ko: "한국어 (Korea)",
|
||||||
fr: "Français (Prancis)",
|
fr: "Français (Prancis)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe (Turki)",
|
tr: "Türkçe (Turki)",
|
||||||
uk: "Українська (Ukraina)",
|
uk: "Українська (Ukraina)",
|
||||||
id: "Bahasa Indonesia (Indonesia)",
|
id: "Bahasa Indonesia (Indonesia)",
|
||||||
pl: "Polski (Polandia)",
|
pl: "Polski (Polandia)",
|
||||||
th: "ไทย (Thai)",
|
th: "ไทย (Thai)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
936
ui/src/i18n/locales/it.ts
Normal file
936
ui/src/i18n/locales/it.ts
Normal file
@@ -0,0 +1,936 @@
|
|||||||
|
import type { TranslationMap } from "../lib/types.ts";
|
||||||
|
|
||||||
|
// Generated by scripts/control-ui-i18n.ts.
|
||||||
|
export const it: TranslationMap = {
|
||||||
|
common: {
|
||||||
|
health: "Health",
|
||||||
|
ok: "OK",
|
||||||
|
yes: "Yes",
|
||||||
|
no: "No",
|
||||||
|
active: "Active",
|
||||||
|
loading: "Loading…",
|
||||||
|
refreshing: "Refreshing…",
|
||||||
|
online: "Online",
|
||||||
|
offline: "Offline",
|
||||||
|
connect: "Connect",
|
||||||
|
connected: "Connected",
|
||||||
|
refresh: "Refresh",
|
||||||
|
reload: "Reload",
|
||||||
|
probe: "Probe",
|
||||||
|
call: "Call",
|
||||||
|
confirm: "Confirm",
|
||||||
|
cancel: "Cancel",
|
||||||
|
unselect: "Unselect",
|
||||||
|
enabled: "Enabled",
|
||||||
|
disabled: "Disabled",
|
||||||
|
na: "n/a",
|
||||||
|
configured: "Configured",
|
||||||
|
running: "Running",
|
||||||
|
linked: "Linked",
|
||||||
|
mode: "Mode",
|
||||||
|
baseUrl: "Base URL",
|
||||||
|
lastStart: "Last start",
|
||||||
|
lastProbe: "Last probe",
|
||||||
|
lastInbound: "Last inbound",
|
||||||
|
lastConnect: "Last connect",
|
||||||
|
lastMessage: "Last message",
|
||||||
|
authAge: "Auth age",
|
||||||
|
credential: "Credential",
|
||||||
|
audience: "Audience",
|
||||||
|
publicKey: "Public Key",
|
||||||
|
probeOk: "Probe ok",
|
||||||
|
probeFailed: "Probe failed",
|
||||||
|
reloadConfig: "Reload Config",
|
||||||
|
loadConfig: "Load config",
|
||||||
|
loadApprovals: "Load approvals",
|
||||||
|
settingsSections: "Settings sections",
|
||||||
|
version: "Version",
|
||||||
|
docs: "Docs",
|
||||||
|
theme: "Theme",
|
||||||
|
resources: "Resources",
|
||||||
|
search: "Search",
|
||||||
|
save: "Save",
|
||||||
|
saving: "Saving…",
|
||||||
|
saveAndPublish: "Save & Publish",
|
||||||
|
importing: "Importing…",
|
||||||
|
importFromRelays: "Import from Relays",
|
||||||
|
showAdvanced: "Show Advanced",
|
||||||
|
hideAdvanced: "Hide Advanced",
|
||||||
|
unsavedChanges: "You have unsaved changes",
|
||||||
|
secondsAgo: "{count}s ago",
|
||||||
|
working: "Working…",
|
||||||
|
showQr: "Show QR",
|
||||||
|
relink: "Relink",
|
||||||
|
waitForScan: "Wait for scan",
|
||||||
|
logout: "Logout",
|
||||||
|
},
|
||||||
|
channels: {
|
||||||
|
health: {
|
||||||
|
title: "Channel health",
|
||||||
|
subtitle: "Channel status snapshots from the gateway.",
|
||||||
|
noSnapshotYet: "No snapshot yet.",
|
||||||
|
},
|
||||||
|
generic: {
|
||||||
|
subtitle: "Channel status and configuration.",
|
||||||
|
},
|
||||||
|
gatewayUrlConfirmation: {
|
||||||
|
title: "Change Gateway URL",
|
||||||
|
subtitle: "This will reconnect to a different gateway server",
|
||||||
|
warning: "Only confirm if you trust this URL. Malicious URLs can compromise your system.",
|
||||||
|
},
|
||||||
|
nostr: {
|
||||||
|
profile: "Profile",
|
||||||
|
editProfile: "Edit Profile",
|
||||||
|
profilePicture: "Profile picture",
|
||||||
|
noProfile: "No profile set.",
|
||||||
|
noProfileHint: 'Click "Edit Profile" to add your name, bio, and avatar.',
|
||||||
|
name: "Name",
|
||||||
|
displayName: "Display Name",
|
||||||
|
about: "About",
|
||||||
|
advanced: "Advanced",
|
||||||
|
profilePicturePreview: "Profile picture preview",
|
||||||
|
account: "Account",
|
||||||
|
username: "Username",
|
||||||
|
usernameHelp: "Short username (e.g., satoshi)",
|
||||||
|
bio: "Bio",
|
||||||
|
bioPlaceholder: "Tell people about yourself...",
|
||||||
|
bioHelp: "A brief bio or description",
|
||||||
|
displayNameHelp: "Your full display name",
|
||||||
|
avatarUrl: "Avatar URL",
|
||||||
|
avatarHelp: "HTTPS URL to your profile picture",
|
||||||
|
bannerUrl: "Banner URL",
|
||||||
|
bannerHelp: "HTTPS URL to a banner image",
|
||||||
|
website: "Website",
|
||||||
|
websiteHelp: "Your personal website",
|
||||||
|
nip05Identifier: "NIP-05 Identifier",
|
||||||
|
nip05Help: "Verifiable identifier (e.g., you@domain.com)",
|
||||||
|
lightningAddress: "Lightning Address",
|
||||||
|
lightningHelp: "Lightning address for tips (LUD-16)",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lazyView: {
|
||||||
|
loadingTitle: "Loading panel",
|
||||||
|
errorTitle: "Panel failed to load",
|
||||||
|
errorSubtitle:
|
||||||
|
"Reload the page to load the latest Control UI bundle, or retry if the network request failed.",
|
||||||
|
retry: "Retry",
|
||||||
|
unknownError: "Unknown module load error.",
|
||||||
|
},
|
||||||
|
nodes: {
|
||||||
|
binding: {
|
||||||
|
loadConfigHint: "Load config to edit bindings.",
|
||||||
|
formModeHint: "Switch the Config tab to Form mode to edit bindings here.",
|
||||||
|
execNodeBinding: "Exec node binding",
|
||||||
|
execNodeBindingSubtitle: "Pin agents to a specific node when using exec host=node.",
|
||||||
|
defaultBinding: "Default binding",
|
||||||
|
defaultBindingHint: "Used when agents do not override a node binding.",
|
||||||
|
node: "Node",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
instances: {
|
||||||
|
title: "Connected Instances",
|
||||||
|
subtitle: "Presence beacons from the gateway and clients.",
|
||||||
|
showHosts: "Show hosts and IPs",
|
||||||
|
hideHosts: "Hide hosts and IPs",
|
||||||
|
toggleHostVisibility: "Toggle host visibility",
|
||||||
|
noInstances: "No instances reported yet.",
|
||||||
|
lastInput: "Last input {time}",
|
||||||
|
reason: "Reason {reason}",
|
||||||
|
},
|
||||||
|
agentTools: {
|
||||||
|
connectedSource: "Connected: {id}",
|
||||||
|
connected: "Connected",
|
||||||
|
channelSource: "Channel: {id}",
|
||||||
|
channel: "Channel",
|
||||||
|
builtIn: "Built-in",
|
||||||
|
},
|
||||||
|
nav: {
|
||||||
|
chat: "Chat",
|
||||||
|
control: "Control",
|
||||||
|
agent: "Agent",
|
||||||
|
settings: "Settings",
|
||||||
|
expand: "Expand sidebar",
|
||||||
|
collapse: "Collapse sidebar",
|
||||||
|
resize: "Resize sidebar",
|
||||||
|
},
|
||||||
|
tabs: {
|
||||||
|
agents: "Agents",
|
||||||
|
overview: "Overview",
|
||||||
|
channels: "Channels",
|
||||||
|
instances: "Instances",
|
||||||
|
sessions: "Sessions",
|
||||||
|
usage: "Usage",
|
||||||
|
cron: "Cron Jobs",
|
||||||
|
skills: "Skills",
|
||||||
|
nodes: "Nodes",
|
||||||
|
chat: "Chat",
|
||||||
|
config: "Config",
|
||||||
|
communications: "Communications",
|
||||||
|
appearance: "Appearance",
|
||||||
|
automation: "Automation",
|
||||||
|
infrastructure: "Infrastructure",
|
||||||
|
aiAgents: "AI & Agents",
|
||||||
|
debug: "Debug",
|
||||||
|
logs: "Logs",
|
||||||
|
dreams: "Dreaming",
|
||||||
|
},
|
||||||
|
subtitles: {
|
||||||
|
agents: "Workspaces, tools, identities.",
|
||||||
|
overview: "Status, entry points, health.",
|
||||||
|
channels: "Channels and settings.",
|
||||||
|
instances: "Connected clients and nodes.",
|
||||||
|
sessions: "Active sessions and defaults.",
|
||||||
|
usage: "API usage and costs.",
|
||||||
|
cron: "Wakeups and recurring runs.",
|
||||||
|
skills: "Skills and API keys.",
|
||||||
|
nodes: "Paired devices and commands.",
|
||||||
|
chat: "Gateway chat for quick interventions.",
|
||||||
|
config: "Edit openclaw.json.",
|
||||||
|
communications: "Channels, messages, and audio settings.",
|
||||||
|
appearance: "Theme, UI, and setup wizard settings.",
|
||||||
|
automation: "Commands, hooks, cron, and plugins.",
|
||||||
|
infrastructure: "Gateway, web, browser, and media settings.",
|
||||||
|
aiAgents: "Agents, models, skills, tools, memory, session.",
|
||||||
|
debug: "Snapshots, events, RPC.",
|
||||||
|
logs: "Live gateway logs.",
|
||||||
|
dreams: "Memory dreaming, consolidation, and reflection.",
|
||||||
|
},
|
||||||
|
overview: {
|
||||||
|
access: {
|
||||||
|
title: "Gateway Access",
|
||||||
|
subtitle: "Where the dashboard connects and how it authenticates.",
|
||||||
|
wsUrl: "WebSocket URL",
|
||||||
|
token: "Gateway Token",
|
||||||
|
password: "Password (not stored)",
|
||||||
|
passwordPlaceholder: "system or shared password",
|
||||||
|
sessionKey: "Default Session Key",
|
||||||
|
language: "Language",
|
||||||
|
connectHint: "Click Connect to apply connection changes.",
|
||||||
|
trustedProxy: "Authenticated via trusted proxy.",
|
||||||
|
showToken: "Show token",
|
||||||
|
hideToken: "Hide token",
|
||||||
|
toggleTokenVisibility: "Toggle token visibility",
|
||||||
|
showPassword: "Show password",
|
||||||
|
hidePassword: "Hide password",
|
||||||
|
togglePasswordVisibility: "Toggle password visibility",
|
||||||
|
},
|
||||||
|
snapshot: {
|
||||||
|
title: "Snapshot",
|
||||||
|
subtitle: "Latest gateway handshake information.",
|
||||||
|
status: "Status",
|
||||||
|
uptime: "Uptime",
|
||||||
|
tickInterval: "Tick Interval",
|
||||||
|
lastChannelsRefresh: "Last Channels Refresh",
|
||||||
|
channelsHint: "Use Channels to link WhatsApp, Telegram, Discord, Signal, or iMessage.",
|
||||||
|
},
|
||||||
|
stats: {
|
||||||
|
instances: "Instances",
|
||||||
|
instancesHint: "Presence beacons in the last 5 minutes.",
|
||||||
|
sessions: "Sessions",
|
||||||
|
sessionsHint: "Recent session keys tracked by the gateway.",
|
||||||
|
cron: "Cron",
|
||||||
|
cronNext: "Next wake {time}",
|
||||||
|
},
|
||||||
|
notes: {
|
||||||
|
title: "Notes",
|
||||||
|
subtitle: "Quick reminders for remote control setups.",
|
||||||
|
tailscaleTitle: "Tailscale serve",
|
||||||
|
tailscaleText: "Prefer serve mode to keep the gateway on loopback with tailnet auth.",
|
||||||
|
sessionTitle: "Session hygiene",
|
||||||
|
sessionText: "Use /new or sessions.patch to reset context.",
|
||||||
|
cronTitle: "Cron reminders",
|
||||||
|
cronText: "Use isolated sessions for recurring runs.",
|
||||||
|
},
|
||||||
|
auth: {
|
||||||
|
required: "This gateway requires auth. Add a token or password, then click Connect.",
|
||||||
|
failed:
|
||||||
|
"Auth failed. Re-copy a tokenized URL with {command}, or update the token, then click Connect.",
|
||||||
|
},
|
||||||
|
pairing: {
|
||||||
|
hint: "This device needs pairing approval from the gateway host.",
|
||||||
|
scopeUpgradeTitle: "Scope upgrade pending approval.",
|
||||||
|
scopeUpgradeSummary:
|
||||||
|
"This device is already paired, but the requested wider scope is waiting for approval.",
|
||||||
|
roleUpgradeTitle: "Role upgrade pending approval.",
|
||||||
|
roleUpgradeSummary:
|
||||||
|
"This device is already paired, but the requested role change is waiting for approval.",
|
||||||
|
metadataUpgradeTitle: "Device metadata change pending approval.",
|
||||||
|
metadataUpgradeSummary:
|
||||||
|
"This device is already paired, but the metadata change is waiting for approval.",
|
||||||
|
mobileHint:
|
||||||
|
"On mobile? Copy the full URL (including #token=...) from openclaw dashboard --no-open on your desktop.",
|
||||||
|
docsTitle: "Device pairing docs (opens in new tab)",
|
||||||
|
docsLink: "Docs: Device pairing",
|
||||||
|
},
|
||||||
|
insecure: {
|
||||||
|
hint: "This page is HTTP, so the browser blocks device identity. Use HTTPS (Tailscale Serve) or open {url} on the gateway host.",
|
||||||
|
stayHttp: "If you must stay on HTTP, set {config} (token-only).",
|
||||||
|
},
|
||||||
|
connection: {
|
||||||
|
title: "How to connect",
|
||||||
|
step1: "Start the gateway on your host machine:",
|
||||||
|
step2: "Get a tokenized dashboard URL:",
|
||||||
|
step3: "Paste the WebSocket URL and token above, or open the tokenized URL directly.",
|
||||||
|
step4: "Or generate a reusable token:",
|
||||||
|
docsHint: "For remote access, Tailscale Serve is recommended. ",
|
||||||
|
docsLink: "Read the docs →",
|
||||||
|
authDocsTitle: "Control UI auth docs (opens in new tab)",
|
||||||
|
authDocsLink: "Docs: Control UI auth",
|
||||||
|
tailscaleDocsTitle: "Tailscale Serve docs (opens in new tab)",
|
||||||
|
tailscaleDocsLink: "Docs: Tailscale Serve",
|
||||||
|
insecureHttpDocsTitle: "Insecure HTTP docs (opens in new tab)",
|
||||||
|
insecureHttpDocsLink: "Docs: Insecure HTTP",
|
||||||
|
copyCommand: "Copy command",
|
||||||
|
copyCommandAria: "Copy command: {command}",
|
||||||
|
},
|
||||||
|
cards: {
|
||||||
|
cost: "Cost",
|
||||||
|
skills: "Skills",
|
||||||
|
recentSessions: "Recent Sessions",
|
||||||
|
modelAuth: "Model Auth",
|
||||||
|
modelAuthOk: "{count} ok",
|
||||||
|
modelAuthExpired: "{count} expired",
|
||||||
|
modelAuthExpiring: "{count} expiring",
|
||||||
|
modelAuthProviders: "{count} providers",
|
||||||
|
modelAuthUsageLeft: "{pct}% left",
|
||||||
|
modelAuthExpiresIn: "expires {when}",
|
||||||
|
modelAuthAttentionExpiredTitle: "Model auth expired",
|
||||||
|
modelAuthAttentionExpiringTitle: "Model auth expiring soon",
|
||||||
|
modelAuthAttentionExpiredDesc: "{providers} — re-authenticate with openclaw models auth",
|
||||||
|
modelAuthAttentionExpiringEntry: "{provider} ({when})",
|
||||||
|
},
|
||||||
|
attention: {
|
||||||
|
title: "Attention",
|
||||||
|
},
|
||||||
|
eventLog: {
|
||||||
|
title: "Event Log",
|
||||||
|
},
|
||||||
|
logTail: {
|
||||||
|
title: "Gateway Logs",
|
||||||
|
},
|
||||||
|
quickActions: {
|
||||||
|
newSession: "New Session",
|
||||||
|
automation: "Automation",
|
||||||
|
refreshAll: "Refresh All",
|
||||||
|
terminal: "Terminal",
|
||||||
|
},
|
||||||
|
palette: {
|
||||||
|
placeholder: "Type a command…",
|
||||||
|
noResults: "No results",
|
||||||
|
categories: {
|
||||||
|
search: "Search",
|
||||||
|
navigation: "Navigation",
|
||||||
|
skills: "Skills",
|
||||||
|
},
|
||||||
|
items: {
|
||||||
|
overview: "Overview",
|
||||||
|
sessions: "Sessions",
|
||||||
|
scheduled: "Scheduled",
|
||||||
|
skills: "Skills",
|
||||||
|
settings: "Settings",
|
||||||
|
agents: "Agents",
|
||||||
|
shellCommand: "Shell Command",
|
||||||
|
debugMode: "Debug Mode",
|
||||||
|
},
|
||||||
|
descriptions: {
|
||||||
|
shellCommand: "Run shell",
|
||||||
|
debugMode: "Toggle debug",
|
||||||
|
},
|
||||||
|
footer: {
|
||||||
|
navigate: "navigate",
|
||||||
|
select: "select",
|
||||||
|
close: "close",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
dreaming: {
|
||||||
|
tabs: {
|
||||||
|
scene: "Scene",
|
||||||
|
diary: "Diary",
|
||||||
|
advanced: "Advanced",
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
refresh: "Refresh",
|
||||||
|
refreshing: "Refreshing…",
|
||||||
|
on: "Dreaming On",
|
||||||
|
off: "Dreaming Off",
|
||||||
|
},
|
||||||
|
restartConfirmation: {
|
||||||
|
title: "Restart Gateway to Apply Change",
|
||||||
|
subtitle: "Changing Dreaming mode restarts the gateway.",
|
||||||
|
warning:
|
||||||
|
"This action will restart the Gateway and may temporarily interrupt chats, automations, and connected channels.",
|
||||||
|
confirm: "Confirm Restart",
|
||||||
|
restarting: "Restarting…",
|
||||||
|
failed: "Could not apply change. Check your connection and try again.",
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
active: "Dreaming Active",
|
||||||
|
idle: "Dreaming Idle",
|
||||||
|
promotedSuffix: "promoted",
|
||||||
|
nextSweepPrefix: "next sweep",
|
||||||
|
},
|
||||||
|
scene: {
|
||||||
|
backfill: "Backfill",
|
||||||
|
dedupeDiary: "Dedupe Diary",
|
||||||
|
reset: "Reset",
|
||||||
|
clearGrounded: "Clear Replayed",
|
||||||
|
repairCache: "Repair Dream Cache",
|
||||||
|
working: "Working…",
|
||||||
|
},
|
||||||
|
phase: {
|
||||||
|
light: "Light",
|
||||||
|
deep: "Deep",
|
||||||
|
rem: "Rem",
|
||||||
|
off: "off",
|
||||||
|
},
|
||||||
|
advanced: {
|
||||||
|
eyebrow: "Review",
|
||||||
|
title: "Daily Log Review",
|
||||||
|
description:
|
||||||
|
"Review what came from the daily log, what is waiting for promotion, and what was promoted recently.",
|
||||||
|
summaryFromDailyLog: "from daily log",
|
||||||
|
summaryWaiting: "waiting",
|
||||||
|
summaryPromotedToday: "promoted today",
|
||||||
|
stagedTitle: "From the Daily Log",
|
||||||
|
stagedDescription: "Replay candidates pulled from older daily log entries.",
|
||||||
|
shortTermTitle: "Waiting for Promotion",
|
||||||
|
shortTermDescription: "Current short-term candidates waiting to graduate into real memory.",
|
||||||
|
sortRecent: "Most recent",
|
||||||
|
sortSignals: "Strongest support",
|
||||||
|
originDailyLog: "replayed",
|
||||||
|
originLive: "live",
|
||||||
|
originMixed: "mixed",
|
||||||
|
promotedTitle: "Recent Promotions",
|
||||||
|
promotedDescription: "Items that already made it through promotion.",
|
||||||
|
emptyGrounded: "No staged grounded replay entries right now.",
|
||||||
|
emptyShortTerm: "No short-term entries to inspect.",
|
||||||
|
emptyPromoted: "No recent promotions to inspect.",
|
||||||
|
updatedPrefix: "updated",
|
||||||
|
},
|
||||||
|
stats: {
|
||||||
|
shortTerm: "Short-term",
|
||||||
|
grounded: "Grounded",
|
||||||
|
signals: "Signals",
|
||||||
|
promoted: "Promoted",
|
||||||
|
phaseHits: "Phase Hits",
|
||||||
|
},
|
||||||
|
trace: {
|
||||||
|
shortTerm: "Short-term",
|
||||||
|
grounded: "Grounded",
|
||||||
|
signals: "Signals",
|
||||||
|
promoted: "Promoted",
|
||||||
|
groundedLed: "grounded-led",
|
||||||
|
emptyShortTerm: "No active short-term items.",
|
||||||
|
emptyGrounded: "No staged grounded items.",
|
||||||
|
emptySignals: "No active signals.",
|
||||||
|
emptyPromoted: "Nothing promoted yet today.",
|
||||||
|
},
|
||||||
|
diary: {
|
||||||
|
title: "Dream Diary",
|
||||||
|
noDreamsYet: "No dreams yet",
|
||||||
|
noDreamsHint: "Dreams will appear here after the first dreaming cycle runs.",
|
||||||
|
waitingTitle: "The diary is waiting",
|
||||||
|
waitingHint: "Narrative entries will appear after the next dreaming cycle.",
|
||||||
|
older: "Older",
|
||||||
|
newer: "Newer",
|
||||||
|
reload: "Reload",
|
||||||
|
reloading: "Reloading…",
|
||||||
|
},
|
||||||
|
phrases: {
|
||||||
|
consolidatingMemories: "consolidating memories…",
|
||||||
|
tidyingKnowledgeGraph: "tidying the knowledge graph…",
|
||||||
|
replayingConversations: "replaying today's conversations…",
|
||||||
|
weavingShortTerm: "weaving short-term into long-term…",
|
||||||
|
defragmentingMindPalace: "defragmenting the mind palace…",
|
||||||
|
filingLooseThoughts: "filing away loose thoughts…",
|
||||||
|
connectingDots: "connecting distant dots…",
|
||||||
|
compostingContext: "composting old context windows…",
|
||||||
|
alphabetizingSubconscious: "alphabetizing the subconscious…",
|
||||||
|
promotingHunches: "promoting promising hunches…",
|
||||||
|
forgettingNoise: "forgetting what doesn't matter…",
|
||||||
|
dreamingEmbeddings: "dreaming in embeddings…",
|
||||||
|
reorganizingAttic: "reorganizing the memory attic…",
|
||||||
|
indexingDay: "softly indexing the day…",
|
||||||
|
nurturingInsights: "nurturing fledgling insights…",
|
||||||
|
simmeringIdeas: "simmering half-formed ideas…",
|
||||||
|
whisperingVectorStore: "whispering to the vector store…",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
usage: {
|
||||||
|
page: {
|
||||||
|
subtitle: "See where tokens go, when sessions spike, and what drives cost.",
|
||||||
|
},
|
||||||
|
common: {
|
||||||
|
emptyValue: "—",
|
||||||
|
unknown: "unknown",
|
||||||
|
},
|
||||||
|
loading: {
|
||||||
|
title: "Usage Overview",
|
||||||
|
badge: "Loading",
|
||||||
|
},
|
||||||
|
metrics: {
|
||||||
|
tokens: "Tokens",
|
||||||
|
cost: "Cost",
|
||||||
|
session: "session",
|
||||||
|
sessions: "sessions",
|
||||||
|
},
|
||||||
|
presets: {
|
||||||
|
today: "Today",
|
||||||
|
last7d: "7d",
|
||||||
|
last30d: "30d",
|
||||||
|
},
|
||||||
|
filters: {
|
||||||
|
title: "Filters",
|
||||||
|
to: "to",
|
||||||
|
startDate: "Start date",
|
||||||
|
endDate: "End date",
|
||||||
|
timeZone: "Time zone",
|
||||||
|
timeZoneLocal: "Local",
|
||||||
|
timeZoneUtc: "UTC",
|
||||||
|
pin: "Pin",
|
||||||
|
pinned: "Pinned",
|
||||||
|
unpin: "Unpin filters",
|
||||||
|
selectAll: "Select All",
|
||||||
|
clear: "Clear",
|
||||||
|
clearAll: "Clear All",
|
||||||
|
remove: "Remove filter",
|
||||||
|
all: "All",
|
||||||
|
days: "Days",
|
||||||
|
hours: "Hours",
|
||||||
|
session: "Session",
|
||||||
|
agent: "Agent",
|
||||||
|
channel: "Channel",
|
||||||
|
provider: "Provider",
|
||||||
|
model: "Model",
|
||||||
|
tool: "Tool",
|
||||||
|
daysCount: "{count} days",
|
||||||
|
hoursCount: "{count} hours",
|
||||||
|
sessionsCount: "{count} sessions",
|
||||||
|
},
|
||||||
|
query: {
|
||||||
|
placeholder:
|
||||||
|
"Filter sessions (e.g. key:agent:main:cron* model:gpt-4o has:errors minTokens:2000)",
|
||||||
|
apply: "Filter (client-side)",
|
||||||
|
matching: "{shown} of {total} sessions match",
|
||||||
|
inRange: "{total} sessions in range",
|
||||||
|
tip: "Tip: use filters or click bars to refine days.",
|
||||||
|
},
|
||||||
|
export: {
|
||||||
|
label: "Export",
|
||||||
|
sessionsCsv: "Sessions CSV",
|
||||||
|
dailyCsv: "Daily CSV",
|
||||||
|
json: "JSON",
|
||||||
|
},
|
||||||
|
empty: {
|
||||||
|
title: "Start with a date range",
|
||||||
|
subtitle:
|
||||||
|
"Load usage data to compare costs, inspect sessions, and drill into timelines without leaving the dashboard.",
|
||||||
|
hint: "Select a date range and click Refresh to load usage.",
|
||||||
|
noData: "No data",
|
||||||
|
featureOverview: "Overview cards",
|
||||||
|
featureSessions: "Session ranking",
|
||||||
|
featureTimeline: "Timeline drilldown",
|
||||||
|
},
|
||||||
|
daily: {
|
||||||
|
title: "Daily Usage",
|
||||||
|
total: "Total",
|
||||||
|
byType: "By Type",
|
||||||
|
tokensTitle: "Daily Token Usage",
|
||||||
|
costTitle: "Daily Cost",
|
||||||
|
},
|
||||||
|
breakdown: {
|
||||||
|
output: "Output",
|
||||||
|
input: "Input",
|
||||||
|
cacheWrite: "Cache Write",
|
||||||
|
cacheRead: "Cache Read",
|
||||||
|
total: "Total",
|
||||||
|
tokensByType: "Tokens by Type",
|
||||||
|
costByType: "Cost by Type",
|
||||||
|
},
|
||||||
|
overview: {
|
||||||
|
title: "Usage Overview",
|
||||||
|
messages: "Messages",
|
||||||
|
messagesHint: "Total user and assistant messages in range.",
|
||||||
|
messagesAbbrev: "msgs",
|
||||||
|
user: "user",
|
||||||
|
assistant: "assistant",
|
||||||
|
toolCalls: "Tool Calls",
|
||||||
|
toolCallsHint: "Total tool call count across sessions.",
|
||||||
|
toolsUsed: "tools used",
|
||||||
|
errors: "Errors",
|
||||||
|
errorsHint: "Total message and tool errors in range.",
|
||||||
|
toolResults: "tool results",
|
||||||
|
avgTokens: "Avg Tokens / Msg",
|
||||||
|
avgTokensHint: "Average tokens per message in this range.",
|
||||||
|
avgCost: "Avg Cost / Msg",
|
||||||
|
avgCostHint: "Average cost per message when providers report costs.",
|
||||||
|
avgCostHintMissing:
|
||||||
|
"Average cost per message when providers report costs. Cost data is missing for some or all sessions in this range.",
|
||||||
|
acrossMessages: "Across {count} messages",
|
||||||
|
sessions: "Sessions",
|
||||||
|
sessionsHint: "Distinct sessions in the range.",
|
||||||
|
sessionsInRange: "of {count} in range",
|
||||||
|
throughput: "Throughput",
|
||||||
|
throughputHint: "Throughput shows tokens per minute over active time. Higher is better.",
|
||||||
|
tokensPerMinute: "tok/min",
|
||||||
|
perMinute: "/ min",
|
||||||
|
errorRate: "Error Rate",
|
||||||
|
errorHint: "Error rate = errors / total messages. Lower is better.",
|
||||||
|
avgSession: "avg session",
|
||||||
|
cacheHitRate: "Cache Hit Rate",
|
||||||
|
cacheHint:
|
||||||
|
"Cache hit rate = cache read / (input + cache read + cache write). Higher is better.",
|
||||||
|
cached: "cached",
|
||||||
|
prompt: "prompt",
|
||||||
|
calls: "calls",
|
||||||
|
topModels: "Top Models",
|
||||||
|
topProviders: "Top Providers",
|
||||||
|
topTools: "Top Tools",
|
||||||
|
topAgents: "Top Agents",
|
||||||
|
topChannels: "Top Channels",
|
||||||
|
peakErrorDays: "Peak Error Days",
|
||||||
|
peakErrorHours: "Peak Error Hours",
|
||||||
|
noModelData: "No model data",
|
||||||
|
noProviderData: "No provider data",
|
||||||
|
noToolCalls: "No tool calls",
|
||||||
|
noAgentData: "No agent data",
|
||||||
|
noChannelData: "No channel data",
|
||||||
|
noErrorData: "No error data",
|
||||||
|
},
|
||||||
|
sessions: {
|
||||||
|
title: "Sessions",
|
||||||
|
shown: "{count} shown",
|
||||||
|
total: "{count} total",
|
||||||
|
avg: "avg",
|
||||||
|
all: "All",
|
||||||
|
recent: "Recently viewed",
|
||||||
|
recentShort: "Recent",
|
||||||
|
sort: "Sort",
|
||||||
|
ascending: "Ascending",
|
||||||
|
descending: "Descending",
|
||||||
|
clearSelection: "Clear Selection",
|
||||||
|
noRecent: "No recent sessions",
|
||||||
|
noneInRange: "No sessions in range",
|
||||||
|
more: "+{count} more",
|
||||||
|
selected: "Selected ({count})",
|
||||||
|
copy: "Copy",
|
||||||
|
copyName: "Copy session name",
|
||||||
|
limitReached: "Showing first 1,000 sessions. Narrow date range for complete results.",
|
||||||
|
},
|
||||||
|
details: {
|
||||||
|
noUsageData: "No usage data for this session.",
|
||||||
|
duration: "Duration",
|
||||||
|
modelMix: "Model Mix",
|
||||||
|
filtered: "(filtered)",
|
||||||
|
close: "Close session details",
|
||||||
|
noTimeline: "No timeline data",
|
||||||
|
noDataInRange: "No data in range",
|
||||||
|
usageOverTime: "Usage Over Time",
|
||||||
|
reset: "Reset",
|
||||||
|
perTurn: "Per Turn",
|
||||||
|
cumulative: "Cumulative",
|
||||||
|
turnRange: "Turns {start}–{end} of {total}",
|
||||||
|
assistantOutputTokens: "Assistant output tokens",
|
||||||
|
userToolInputTokens: "User + tool input tokens",
|
||||||
|
tokensWrittenToCache: "Tokens written to cache",
|
||||||
|
tokensReadFromCache: "Tokens read from cache",
|
||||||
|
noContextData: "No context data",
|
||||||
|
systemPromptBreakdown: "System Prompt Breakdown",
|
||||||
|
collapse: "Collapse",
|
||||||
|
collapseAll: "Collapse All",
|
||||||
|
expandAll: "Expand All",
|
||||||
|
baseContextPerMessage: "Base context per message",
|
||||||
|
system: "System",
|
||||||
|
systemShort: "Sys",
|
||||||
|
skills: "Skills",
|
||||||
|
tools: "Tools",
|
||||||
|
files: "Files",
|
||||||
|
ofInput: "of input",
|
||||||
|
of: "of",
|
||||||
|
timelineFiltered: "timeline filtered",
|
||||||
|
conversation: "Conversation",
|
||||||
|
noMessages: "No messages",
|
||||||
|
tool: "Tool",
|
||||||
|
toolResult: "Tool result",
|
||||||
|
hasTools: "Has tools",
|
||||||
|
searchConversation: "Search conversation",
|
||||||
|
you: "You",
|
||||||
|
noMessagesMatch: "No messages match the filters.",
|
||||||
|
},
|
||||||
|
mosaic: {
|
||||||
|
title: "Activity by Time",
|
||||||
|
subtitleEmpty: "Estimates require session timestamps.",
|
||||||
|
subtitle: "Estimated from session spans (first/last activity). Time zone: {zone}.",
|
||||||
|
noTimelineData: "No timeline data yet.",
|
||||||
|
dayOfWeek: "Day of Week",
|
||||||
|
midnight: "Midnight",
|
||||||
|
fourAm: "4am",
|
||||||
|
eightAm: "8am",
|
||||||
|
noon: "Noon",
|
||||||
|
fourPm: "4pm",
|
||||||
|
eightPm: "8pm",
|
||||||
|
legend: "Low → High token density",
|
||||||
|
sun: "Sun",
|
||||||
|
mon: "Mon",
|
||||||
|
tue: "Tue",
|
||||||
|
wed: "Wed",
|
||||||
|
thu: "Thu",
|
||||||
|
fri: "Fri",
|
||||||
|
sat: "Sat",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
login: {
|
||||||
|
subtitle: "Gateway Dashboard",
|
||||||
|
passwordPlaceholder: "optional",
|
||||||
|
showToken: "Show token",
|
||||||
|
hideToken: "Hide token",
|
||||||
|
toggleTokenVisibility: "Toggle token visibility",
|
||||||
|
showPassword: "Show password",
|
||||||
|
hidePassword: "Hide password",
|
||||||
|
togglePasswordVisibility: "Toggle password visibility",
|
||||||
|
},
|
||||||
|
chat: {
|
||||||
|
disconnected: "Disconnected from gateway.",
|
||||||
|
refreshTitle: "Refresh chat data",
|
||||||
|
thinkingToggle: "Toggle assistant thinking/working output",
|
||||||
|
toolCallsToggle: "Toggle tool calls and tool results",
|
||||||
|
focusToggle: "Toggle focus mode (hide sidebar + page header)",
|
||||||
|
hideCronSessions: "Hide cron sessions",
|
||||||
|
showCronSessions: "Show cron sessions",
|
||||||
|
showCronSessionsHidden: "Show cron sessions ({count} hidden)",
|
||||||
|
onboardingDisabled: "Disabled during setup",
|
||||||
|
},
|
||||||
|
languages: {
|
||||||
|
en: "English",
|
||||||
|
zhCN: "简体中文 (Simplified Chinese)",
|
||||||
|
zhTW: "繁體中文 (Traditional Chinese)",
|
||||||
|
ptBR: "Português (Brazilian Portuguese)",
|
||||||
|
de: "Deutsch (German)",
|
||||||
|
es: "Español (Spanish)",
|
||||||
|
jaJP: "日本語 (Japanese)",
|
||||||
|
ko: "한국어 (Korean)",
|
||||||
|
fr: "Français (French)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
|
tr: "Türkçe (Turkish)",
|
||||||
|
uk: "Українська (Ukrainian)",
|
||||||
|
id: "Bahasa Indonesia (Indonesian)",
|
||||||
|
pl: "Polski (Polish)",
|
||||||
|
th: "ไทย (Thai)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
|
},
|
||||||
|
cron: {
|
||||||
|
summary: {
|
||||||
|
enabled: "Enabled",
|
||||||
|
yes: "Yes",
|
||||||
|
no: "No",
|
||||||
|
jobs: "Jobs",
|
||||||
|
nextWake: "Next wake",
|
||||||
|
refreshing: "Refreshing...",
|
||||||
|
refresh: "Refresh",
|
||||||
|
},
|
||||||
|
jobs: {
|
||||||
|
title: "Jobs",
|
||||||
|
subtitle: "All scheduled jobs stored in the gateway.",
|
||||||
|
shownOf: "{shown} shown of {total}",
|
||||||
|
searchJobs: "Search jobs",
|
||||||
|
searchPlaceholder: "Name, description, or agent",
|
||||||
|
enabled: "Enabled",
|
||||||
|
schedule: "Schedule",
|
||||||
|
lastRun: "Last run",
|
||||||
|
all: "All",
|
||||||
|
sort: "Sort",
|
||||||
|
nextRun: "Next run",
|
||||||
|
recentlyUpdated: "Recently updated",
|
||||||
|
name: "Name",
|
||||||
|
direction: "Direction",
|
||||||
|
ascending: "Ascending",
|
||||||
|
descending: "Descending",
|
||||||
|
reset: "Reset",
|
||||||
|
noMatching: "No matching jobs.",
|
||||||
|
loading: "Loading...",
|
||||||
|
loadMore: "Load more jobs",
|
||||||
|
},
|
||||||
|
runs: {
|
||||||
|
title: "Run history",
|
||||||
|
subtitleAll: "Latest runs across all jobs.",
|
||||||
|
subtitleJob: "Latest runs for {title}.",
|
||||||
|
scope: "Scope",
|
||||||
|
allJobs: "All jobs",
|
||||||
|
selectedJob: "Selected job",
|
||||||
|
searchRuns: "Search runs",
|
||||||
|
searchPlaceholder: "Summary, error, or job",
|
||||||
|
newestFirst: "Newest first",
|
||||||
|
oldestFirst: "Oldest first",
|
||||||
|
status: "Status",
|
||||||
|
delivery: "Delivery",
|
||||||
|
clear: "Clear",
|
||||||
|
allStatuses: "All statuses",
|
||||||
|
allDelivery: "All delivery",
|
||||||
|
selectJobHint: "Select a job to inspect run history.",
|
||||||
|
noMatching: "No matching runs.",
|
||||||
|
loadMore: "Load more runs",
|
||||||
|
runStatusOk: "OK",
|
||||||
|
runStatusError: "Error",
|
||||||
|
runStatusSkipped: "Skipped",
|
||||||
|
runStatusUnknown: "Unknown",
|
||||||
|
deliveryDelivered: "Delivered",
|
||||||
|
deliveryNotDelivered: "Not delivered",
|
||||||
|
deliveryUnknown: "Unknown",
|
||||||
|
deliveryNotRequested: "Not requested",
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
editJob: "Edit Job",
|
||||||
|
newJob: "New Job",
|
||||||
|
updateSubtitle: "Update the selected scheduled job.",
|
||||||
|
createSubtitle: "Create a scheduled wakeup or agent run.",
|
||||||
|
required: "Required",
|
||||||
|
requiredSr: "required",
|
||||||
|
basics: "Basics",
|
||||||
|
basicsSub: "Name it, choose the assistant, and set enabled state.",
|
||||||
|
fieldName: "Name",
|
||||||
|
description: "Description",
|
||||||
|
agentId: "Agent ID",
|
||||||
|
namePlaceholder: "Morning brief",
|
||||||
|
descriptionPlaceholder: "Optional context for this job",
|
||||||
|
agentPlaceholder: "main or ops",
|
||||||
|
agentHelp: "Start typing to pick a known agent, or enter a custom one.",
|
||||||
|
schedule: "Schedule",
|
||||||
|
scheduleSub: "Control when this job runs.",
|
||||||
|
every: "Every",
|
||||||
|
at: "At",
|
||||||
|
cronOption: "Cron",
|
||||||
|
runAt: "Run at",
|
||||||
|
unit: "Unit",
|
||||||
|
minutes: "Minutes",
|
||||||
|
hours: "Hours",
|
||||||
|
days: "Days",
|
||||||
|
expression: "Expression",
|
||||||
|
expressionPlaceholder: "0 7 * * *",
|
||||||
|
everyAmountPlaceholder: "30",
|
||||||
|
timezoneOptional: "Timezone (optional)",
|
||||||
|
timezonePlaceholder: "America/Los_Angeles",
|
||||||
|
timezoneHelp: "Pick a common timezone or enter any valid IANA timezone.",
|
||||||
|
jitterHelp: "Need jitter? Use Advanced → Stagger window / Stagger unit.",
|
||||||
|
execution: "Execution",
|
||||||
|
executionSub: "Choose when to wake, and what this job should do.",
|
||||||
|
session: "Session",
|
||||||
|
main: "Main",
|
||||||
|
isolated: "Isolated",
|
||||||
|
sessionHelp: "Main posts a system event. Isolated runs a dedicated agent turn.",
|
||||||
|
wakeMode: "Wake mode",
|
||||||
|
now: "Now",
|
||||||
|
nextHeartbeat: "Next heartbeat",
|
||||||
|
wakeModeHelp: "Now triggers immediately. Next heartbeat waits for the next cycle.",
|
||||||
|
payloadKind: "What should run?",
|
||||||
|
systemEvent: "Post message to main timeline",
|
||||||
|
agentTurn: "Run assistant task (isolated)",
|
||||||
|
systemEventHelp:
|
||||||
|
"Sends your text to the gateway main timeline (good for reminders/triggers).",
|
||||||
|
agentTurnHelp: "Starts an assistant run in its own session using your prompt.",
|
||||||
|
timeoutSeconds: "Timeout (seconds)",
|
||||||
|
timeoutPlaceholder: "Optional, e.g. 90",
|
||||||
|
timeoutHelp:
|
||||||
|
"Optional. Leave blank to use the gateway default timeout behavior for this run.",
|
||||||
|
mainTimelineMessage: "Main timeline message",
|
||||||
|
assistantTaskPrompt: "Assistant task prompt",
|
||||||
|
deliverySection: "Delivery",
|
||||||
|
deliverySub: "Choose where run summaries are sent.",
|
||||||
|
resultDelivery: "Result delivery",
|
||||||
|
announceDefault: "Announce summary (default)",
|
||||||
|
webhookPost: "Webhook POST",
|
||||||
|
noneInternal: "None (internal)",
|
||||||
|
deliveryHelp: "Announce posts a summary to chat. None keeps execution internal.",
|
||||||
|
webhookUrl: "Webhook URL",
|
||||||
|
channel: "Channel",
|
||||||
|
webhookPlaceholder: "https://example.com/cron",
|
||||||
|
channelHelp: "Choose which connected channel receives the summary.",
|
||||||
|
webhookHelp: "Send run summaries to a webhook endpoint.",
|
||||||
|
to: "To",
|
||||||
|
toPlaceholder: "+1555... or chat id",
|
||||||
|
toHelp: "Optional recipient override (chat id, phone, or user id).",
|
||||||
|
advanced: "Advanced",
|
||||||
|
advancedHelp:
|
||||||
|
"Optional overrides for delivery guarantees, schedule jitter, and model controls.",
|
||||||
|
deleteAfterRun: "Delete after run",
|
||||||
|
deleteAfterRunHelp: "Best for one-shot reminders that should auto-clean up.",
|
||||||
|
clearAgentOverride: "Clear agent override",
|
||||||
|
clearAgentHelp: "Force this job to use the gateway default assistant.",
|
||||||
|
exactTiming: "Exact timing (no stagger)",
|
||||||
|
exactTimingHelp: "Run on exact cron boundaries with no spread.",
|
||||||
|
staggerWindow: "Stagger window",
|
||||||
|
staggerUnit: "Stagger unit",
|
||||||
|
staggerPlaceholder: "30",
|
||||||
|
seconds: "Seconds",
|
||||||
|
model: "Model",
|
||||||
|
modelPlaceholder: "openai/gpt-5.2",
|
||||||
|
modelHelp: "Start typing to pick a known model, or enter a custom one.",
|
||||||
|
thinking: "Thinking",
|
||||||
|
thinkingPlaceholder: "low",
|
||||||
|
thinkingHelp: "Use a suggested level or enter a provider-specific value.",
|
||||||
|
bestEffortDelivery: "Best effort delivery",
|
||||||
|
bestEffortHelp: "Do not fail the job if delivery itself fails.",
|
||||||
|
cantAddYet: "Can't add job yet",
|
||||||
|
fillRequired: "Fill the required fields below to enable submit.",
|
||||||
|
fixFields: "Fix {count} field to continue.",
|
||||||
|
fixFieldsPlural: "Fix {count} fields to continue.",
|
||||||
|
saving: "Saving...",
|
||||||
|
saveChanges: "Save changes",
|
||||||
|
addJob: "Add job",
|
||||||
|
cancel: "Cancel",
|
||||||
|
},
|
||||||
|
jobList: {
|
||||||
|
allJobs: "all jobs",
|
||||||
|
selectJob: "(select a job)",
|
||||||
|
enabled: "enabled",
|
||||||
|
disabled: "disabled",
|
||||||
|
edit: "Edit",
|
||||||
|
clone: "Clone",
|
||||||
|
disable: "Disable",
|
||||||
|
enable: "Enable",
|
||||||
|
run: "Run",
|
||||||
|
history: "History",
|
||||||
|
remove: "Remove",
|
||||||
|
},
|
||||||
|
jobDetail: {
|
||||||
|
system: "System",
|
||||||
|
prompt: "Prompt",
|
||||||
|
delivery: "Delivery",
|
||||||
|
agent: "Agent",
|
||||||
|
},
|
||||||
|
jobState: {
|
||||||
|
status: "Status",
|
||||||
|
next: "Next",
|
||||||
|
last: "Last",
|
||||||
|
},
|
||||||
|
runEntry: {
|
||||||
|
noSummary: "No summary.",
|
||||||
|
runAt: "Run at",
|
||||||
|
openRunChat: "Open run chat",
|
||||||
|
next: "Next {rel}",
|
||||||
|
due: "Due {rel}",
|
||||||
|
},
|
||||||
|
errors: {
|
||||||
|
nameRequired: "Name is required.",
|
||||||
|
scheduleAtInvalid: "Enter a valid date/time.",
|
||||||
|
everyAmountInvalid: "Interval must be greater than 0.",
|
||||||
|
cronExprRequired: "Cron expression is required.",
|
||||||
|
staggerAmountInvalid: "Stagger must be greater than 0.",
|
||||||
|
systemTextRequired: "System text is required.",
|
||||||
|
agentMessageRequired: "Agent message is required.",
|
||||||
|
timeoutInvalid: "If set, timeout must be greater than 0 seconds.",
|
||||||
|
webhookUrlRequired: "Webhook URL is required.",
|
||||||
|
webhookUrlInvalid: "Webhook URL must start with http:// or https://.",
|
||||||
|
invalidRunTime: "Invalid run time.",
|
||||||
|
invalidIntervalAmount: "Invalid interval amount.",
|
||||||
|
cronExprRequiredShort: "Cron expression required.",
|
||||||
|
invalidStaggerAmount: "Invalid stagger amount.",
|
||||||
|
systemEventTextRequired: "System event text required.",
|
||||||
|
agentMessageRequiredShort: "Agent message required.",
|
||||||
|
nameRequiredShort: "Name required.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -719,11 +719,16 @@ export const ja_JP: TranslationMap = {
|
|||||||
jaJP: "日本語(Japanese)",
|
jaJP: "日本語(Japanese)",
|
||||||
ko: "한국어(Korean)",
|
ko: "한국어(Korean)",
|
||||||
fr: "Français(French)",
|
fr: "Français(French)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe(Turkish)",
|
tr: "Türkçe(Turkish)",
|
||||||
uk: "Українська(ウクライナ語)",
|
uk: "Українська(ウクライナ語)",
|
||||||
id: "Bahasa Indonesia(Indonesian)",
|
id: "Bahasa Indonesia(Indonesian)",
|
||||||
pl: "Polski(Polish)",
|
pl: "Polski(Polish)",
|
||||||
th: "ไทย (Thai)",
|
th: "ไทย (Thai)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
@@ -712,11 +712,16 @@ export const ko: TranslationMap = {
|
|||||||
jaJP: "日本語 (일본어)",
|
jaJP: "日本語 (일본어)",
|
||||||
ko: "한국어 (한국어)",
|
ko: "한국어 (한국어)",
|
||||||
fr: "Français (프랑스어)",
|
fr: "Français (프랑스어)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe (터키어)",
|
tr: "Türkçe (터키어)",
|
||||||
uk: "우크라이나어 (Ukrainian)",
|
uk: "우크라이나어 (Ukrainian)",
|
||||||
id: "Bahasa Indonesia (인도네시아어)",
|
id: "Bahasa Indonesia (인도네시아어)",
|
||||||
pl: "Polski (폴란드어)",
|
pl: "Polski (폴란드어)",
|
||||||
th: "ไทย (태국어)",
|
th: "ไทย (태국어)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
936
ui/src/i18n/locales/nl.ts
Normal file
936
ui/src/i18n/locales/nl.ts
Normal file
@@ -0,0 +1,936 @@
|
|||||||
|
import type { TranslationMap } from "../lib/types.ts";
|
||||||
|
|
||||||
|
// Generated by scripts/control-ui-i18n.ts.
|
||||||
|
export const nl: TranslationMap = {
|
||||||
|
common: {
|
||||||
|
health: "Health",
|
||||||
|
ok: "OK",
|
||||||
|
yes: "Yes",
|
||||||
|
no: "No",
|
||||||
|
active: "Active",
|
||||||
|
loading: "Loading…",
|
||||||
|
refreshing: "Refreshing…",
|
||||||
|
online: "Online",
|
||||||
|
offline: "Offline",
|
||||||
|
connect: "Connect",
|
||||||
|
connected: "Connected",
|
||||||
|
refresh: "Refresh",
|
||||||
|
reload: "Reload",
|
||||||
|
probe: "Probe",
|
||||||
|
call: "Call",
|
||||||
|
confirm: "Confirm",
|
||||||
|
cancel: "Cancel",
|
||||||
|
unselect: "Unselect",
|
||||||
|
enabled: "Enabled",
|
||||||
|
disabled: "Disabled",
|
||||||
|
na: "n/a",
|
||||||
|
configured: "Configured",
|
||||||
|
running: "Running",
|
||||||
|
linked: "Linked",
|
||||||
|
mode: "Mode",
|
||||||
|
baseUrl: "Base URL",
|
||||||
|
lastStart: "Last start",
|
||||||
|
lastProbe: "Last probe",
|
||||||
|
lastInbound: "Last inbound",
|
||||||
|
lastConnect: "Last connect",
|
||||||
|
lastMessage: "Last message",
|
||||||
|
authAge: "Auth age",
|
||||||
|
credential: "Credential",
|
||||||
|
audience: "Audience",
|
||||||
|
publicKey: "Public Key",
|
||||||
|
probeOk: "Probe ok",
|
||||||
|
probeFailed: "Probe failed",
|
||||||
|
reloadConfig: "Reload Config",
|
||||||
|
loadConfig: "Load config",
|
||||||
|
loadApprovals: "Load approvals",
|
||||||
|
settingsSections: "Settings sections",
|
||||||
|
version: "Version",
|
||||||
|
docs: "Docs",
|
||||||
|
theme: "Theme",
|
||||||
|
resources: "Resources",
|
||||||
|
search: "Search",
|
||||||
|
save: "Save",
|
||||||
|
saving: "Saving…",
|
||||||
|
saveAndPublish: "Save & Publish",
|
||||||
|
importing: "Importing…",
|
||||||
|
importFromRelays: "Import from Relays",
|
||||||
|
showAdvanced: "Show Advanced",
|
||||||
|
hideAdvanced: "Hide Advanced",
|
||||||
|
unsavedChanges: "You have unsaved changes",
|
||||||
|
secondsAgo: "{count}s ago",
|
||||||
|
working: "Working…",
|
||||||
|
showQr: "Show QR",
|
||||||
|
relink: "Relink",
|
||||||
|
waitForScan: "Wait for scan",
|
||||||
|
logout: "Logout",
|
||||||
|
},
|
||||||
|
channels: {
|
||||||
|
health: {
|
||||||
|
title: "Channel health",
|
||||||
|
subtitle: "Channel status snapshots from the gateway.",
|
||||||
|
noSnapshotYet: "No snapshot yet.",
|
||||||
|
},
|
||||||
|
generic: {
|
||||||
|
subtitle: "Channel status and configuration.",
|
||||||
|
},
|
||||||
|
gatewayUrlConfirmation: {
|
||||||
|
title: "Change Gateway URL",
|
||||||
|
subtitle: "This will reconnect to a different gateway server",
|
||||||
|
warning: "Only confirm if you trust this URL. Malicious URLs can compromise your system.",
|
||||||
|
},
|
||||||
|
nostr: {
|
||||||
|
profile: "Profile",
|
||||||
|
editProfile: "Edit Profile",
|
||||||
|
profilePicture: "Profile picture",
|
||||||
|
noProfile: "No profile set.",
|
||||||
|
noProfileHint: 'Click "Edit Profile" to add your name, bio, and avatar.',
|
||||||
|
name: "Name",
|
||||||
|
displayName: "Display Name",
|
||||||
|
about: "About",
|
||||||
|
advanced: "Advanced",
|
||||||
|
profilePicturePreview: "Profile picture preview",
|
||||||
|
account: "Account",
|
||||||
|
username: "Username",
|
||||||
|
usernameHelp: "Short username (e.g., satoshi)",
|
||||||
|
bio: "Bio",
|
||||||
|
bioPlaceholder: "Tell people about yourself...",
|
||||||
|
bioHelp: "A brief bio or description",
|
||||||
|
displayNameHelp: "Your full display name",
|
||||||
|
avatarUrl: "Avatar URL",
|
||||||
|
avatarHelp: "HTTPS URL to your profile picture",
|
||||||
|
bannerUrl: "Banner URL",
|
||||||
|
bannerHelp: "HTTPS URL to a banner image",
|
||||||
|
website: "Website",
|
||||||
|
websiteHelp: "Your personal website",
|
||||||
|
nip05Identifier: "NIP-05 Identifier",
|
||||||
|
nip05Help: "Verifiable identifier (e.g., you@domain.com)",
|
||||||
|
lightningAddress: "Lightning Address",
|
||||||
|
lightningHelp: "Lightning address for tips (LUD-16)",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lazyView: {
|
||||||
|
loadingTitle: "Loading panel",
|
||||||
|
errorTitle: "Panel failed to load",
|
||||||
|
errorSubtitle:
|
||||||
|
"Reload the page to load the latest Control UI bundle, or retry if the network request failed.",
|
||||||
|
retry: "Retry",
|
||||||
|
unknownError: "Unknown module load error.",
|
||||||
|
},
|
||||||
|
nodes: {
|
||||||
|
binding: {
|
||||||
|
loadConfigHint: "Load config to edit bindings.",
|
||||||
|
formModeHint: "Switch the Config tab to Form mode to edit bindings here.",
|
||||||
|
execNodeBinding: "Exec node binding",
|
||||||
|
execNodeBindingSubtitle: "Pin agents to a specific node when using exec host=node.",
|
||||||
|
defaultBinding: "Default binding",
|
||||||
|
defaultBindingHint: "Used when agents do not override a node binding.",
|
||||||
|
node: "Node",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
instances: {
|
||||||
|
title: "Connected Instances",
|
||||||
|
subtitle: "Presence beacons from the gateway and clients.",
|
||||||
|
showHosts: "Show hosts and IPs",
|
||||||
|
hideHosts: "Hide hosts and IPs",
|
||||||
|
toggleHostVisibility: "Toggle host visibility",
|
||||||
|
noInstances: "No instances reported yet.",
|
||||||
|
lastInput: "Last input {time}",
|
||||||
|
reason: "Reason {reason}",
|
||||||
|
},
|
||||||
|
agentTools: {
|
||||||
|
connectedSource: "Connected: {id}",
|
||||||
|
connected: "Connected",
|
||||||
|
channelSource: "Channel: {id}",
|
||||||
|
channel: "Channel",
|
||||||
|
builtIn: "Built-in",
|
||||||
|
},
|
||||||
|
nav: {
|
||||||
|
chat: "Chat",
|
||||||
|
control: "Control",
|
||||||
|
agent: "Agent",
|
||||||
|
settings: "Settings",
|
||||||
|
expand: "Expand sidebar",
|
||||||
|
collapse: "Collapse sidebar",
|
||||||
|
resize: "Resize sidebar",
|
||||||
|
},
|
||||||
|
tabs: {
|
||||||
|
agents: "Agents",
|
||||||
|
overview: "Overview",
|
||||||
|
channels: "Channels",
|
||||||
|
instances: "Instances",
|
||||||
|
sessions: "Sessions",
|
||||||
|
usage: "Usage",
|
||||||
|
cron: "Cron Jobs",
|
||||||
|
skills: "Skills",
|
||||||
|
nodes: "Nodes",
|
||||||
|
chat: "Chat",
|
||||||
|
config: "Config",
|
||||||
|
communications: "Communications",
|
||||||
|
appearance: "Appearance",
|
||||||
|
automation: "Automation",
|
||||||
|
infrastructure: "Infrastructure",
|
||||||
|
aiAgents: "AI & Agents",
|
||||||
|
debug: "Debug",
|
||||||
|
logs: "Logs",
|
||||||
|
dreams: "Dreaming",
|
||||||
|
},
|
||||||
|
subtitles: {
|
||||||
|
agents: "Workspaces, tools, identities.",
|
||||||
|
overview: "Status, entry points, health.",
|
||||||
|
channels: "Channels and settings.",
|
||||||
|
instances: "Connected clients and nodes.",
|
||||||
|
sessions: "Active sessions and defaults.",
|
||||||
|
usage: "API usage and costs.",
|
||||||
|
cron: "Wakeups and recurring runs.",
|
||||||
|
skills: "Skills and API keys.",
|
||||||
|
nodes: "Paired devices and commands.",
|
||||||
|
chat: "Gateway chat for quick interventions.",
|
||||||
|
config: "Edit openclaw.json.",
|
||||||
|
communications: "Channels, messages, and audio settings.",
|
||||||
|
appearance: "Theme, UI, and setup wizard settings.",
|
||||||
|
automation: "Commands, hooks, cron, and plugins.",
|
||||||
|
infrastructure: "Gateway, web, browser, and media settings.",
|
||||||
|
aiAgents: "Agents, models, skills, tools, memory, session.",
|
||||||
|
debug: "Snapshots, events, RPC.",
|
||||||
|
logs: "Live gateway logs.",
|
||||||
|
dreams: "Memory dreaming, consolidation, and reflection.",
|
||||||
|
},
|
||||||
|
overview: {
|
||||||
|
access: {
|
||||||
|
title: "Gateway Access",
|
||||||
|
subtitle: "Where the dashboard connects and how it authenticates.",
|
||||||
|
wsUrl: "WebSocket URL",
|
||||||
|
token: "Gateway Token",
|
||||||
|
password: "Password (not stored)",
|
||||||
|
passwordPlaceholder: "system or shared password",
|
||||||
|
sessionKey: "Default Session Key",
|
||||||
|
language: "Language",
|
||||||
|
connectHint: "Click Connect to apply connection changes.",
|
||||||
|
trustedProxy: "Authenticated via trusted proxy.",
|
||||||
|
showToken: "Show token",
|
||||||
|
hideToken: "Hide token",
|
||||||
|
toggleTokenVisibility: "Toggle token visibility",
|
||||||
|
showPassword: "Show password",
|
||||||
|
hidePassword: "Hide password",
|
||||||
|
togglePasswordVisibility: "Toggle password visibility",
|
||||||
|
},
|
||||||
|
snapshot: {
|
||||||
|
title: "Snapshot",
|
||||||
|
subtitle: "Latest gateway handshake information.",
|
||||||
|
status: "Status",
|
||||||
|
uptime: "Uptime",
|
||||||
|
tickInterval: "Tick Interval",
|
||||||
|
lastChannelsRefresh: "Last Channels Refresh",
|
||||||
|
channelsHint: "Use Channels to link WhatsApp, Telegram, Discord, Signal, or iMessage.",
|
||||||
|
},
|
||||||
|
stats: {
|
||||||
|
instances: "Instances",
|
||||||
|
instancesHint: "Presence beacons in the last 5 minutes.",
|
||||||
|
sessions: "Sessions",
|
||||||
|
sessionsHint: "Recent session keys tracked by the gateway.",
|
||||||
|
cron: "Cron",
|
||||||
|
cronNext: "Next wake {time}",
|
||||||
|
},
|
||||||
|
notes: {
|
||||||
|
title: "Notes",
|
||||||
|
subtitle: "Quick reminders for remote control setups.",
|
||||||
|
tailscaleTitle: "Tailscale serve",
|
||||||
|
tailscaleText: "Prefer serve mode to keep the gateway on loopback with tailnet auth.",
|
||||||
|
sessionTitle: "Session hygiene",
|
||||||
|
sessionText: "Use /new or sessions.patch to reset context.",
|
||||||
|
cronTitle: "Cron reminders",
|
||||||
|
cronText: "Use isolated sessions for recurring runs.",
|
||||||
|
},
|
||||||
|
auth: {
|
||||||
|
required: "This gateway requires auth. Add a token or password, then click Connect.",
|
||||||
|
failed:
|
||||||
|
"Auth failed. Re-copy a tokenized URL with {command}, or update the token, then click Connect.",
|
||||||
|
},
|
||||||
|
pairing: {
|
||||||
|
hint: "This device needs pairing approval from the gateway host.",
|
||||||
|
scopeUpgradeTitle: "Scope upgrade pending approval.",
|
||||||
|
scopeUpgradeSummary:
|
||||||
|
"This device is already paired, but the requested wider scope is waiting for approval.",
|
||||||
|
roleUpgradeTitle: "Role upgrade pending approval.",
|
||||||
|
roleUpgradeSummary:
|
||||||
|
"This device is already paired, but the requested role change is waiting for approval.",
|
||||||
|
metadataUpgradeTitle: "Device metadata change pending approval.",
|
||||||
|
metadataUpgradeSummary:
|
||||||
|
"This device is already paired, but the metadata change is waiting for approval.",
|
||||||
|
mobileHint:
|
||||||
|
"On mobile? Copy the full URL (including #token=...) from openclaw dashboard --no-open on your desktop.",
|
||||||
|
docsTitle: "Device pairing docs (opens in new tab)",
|
||||||
|
docsLink: "Docs: Device pairing",
|
||||||
|
},
|
||||||
|
insecure: {
|
||||||
|
hint: "This page is HTTP, so the browser blocks device identity. Use HTTPS (Tailscale Serve) or open {url} on the gateway host.",
|
||||||
|
stayHttp: "If you must stay on HTTP, set {config} (token-only).",
|
||||||
|
},
|
||||||
|
connection: {
|
||||||
|
title: "How to connect",
|
||||||
|
step1: "Start the gateway on your host machine:",
|
||||||
|
step2: "Get a tokenized dashboard URL:",
|
||||||
|
step3: "Paste the WebSocket URL and token above, or open the tokenized URL directly.",
|
||||||
|
step4: "Or generate a reusable token:",
|
||||||
|
docsHint: "For remote access, Tailscale Serve is recommended. ",
|
||||||
|
docsLink: "Read the docs →",
|
||||||
|
authDocsTitle: "Control UI auth docs (opens in new tab)",
|
||||||
|
authDocsLink: "Docs: Control UI auth",
|
||||||
|
tailscaleDocsTitle: "Tailscale Serve docs (opens in new tab)",
|
||||||
|
tailscaleDocsLink: "Docs: Tailscale Serve",
|
||||||
|
insecureHttpDocsTitle: "Insecure HTTP docs (opens in new tab)",
|
||||||
|
insecureHttpDocsLink: "Docs: Insecure HTTP",
|
||||||
|
copyCommand: "Copy command",
|
||||||
|
copyCommandAria: "Copy command: {command}",
|
||||||
|
},
|
||||||
|
cards: {
|
||||||
|
cost: "Cost",
|
||||||
|
skills: "Skills",
|
||||||
|
recentSessions: "Recent Sessions",
|
||||||
|
modelAuth: "Model Auth",
|
||||||
|
modelAuthOk: "{count} ok",
|
||||||
|
modelAuthExpired: "{count} expired",
|
||||||
|
modelAuthExpiring: "{count} expiring",
|
||||||
|
modelAuthProviders: "{count} providers",
|
||||||
|
modelAuthUsageLeft: "{pct}% left",
|
||||||
|
modelAuthExpiresIn: "expires {when}",
|
||||||
|
modelAuthAttentionExpiredTitle: "Model auth expired",
|
||||||
|
modelAuthAttentionExpiringTitle: "Model auth expiring soon",
|
||||||
|
modelAuthAttentionExpiredDesc: "{providers} — re-authenticate with openclaw models auth",
|
||||||
|
modelAuthAttentionExpiringEntry: "{provider} ({when})",
|
||||||
|
},
|
||||||
|
attention: {
|
||||||
|
title: "Attention",
|
||||||
|
},
|
||||||
|
eventLog: {
|
||||||
|
title: "Event Log",
|
||||||
|
},
|
||||||
|
logTail: {
|
||||||
|
title: "Gateway Logs",
|
||||||
|
},
|
||||||
|
quickActions: {
|
||||||
|
newSession: "New Session",
|
||||||
|
automation: "Automation",
|
||||||
|
refreshAll: "Refresh All",
|
||||||
|
terminal: "Terminal",
|
||||||
|
},
|
||||||
|
palette: {
|
||||||
|
placeholder: "Type a command…",
|
||||||
|
noResults: "No results",
|
||||||
|
categories: {
|
||||||
|
search: "Search",
|
||||||
|
navigation: "Navigation",
|
||||||
|
skills: "Skills",
|
||||||
|
},
|
||||||
|
items: {
|
||||||
|
overview: "Overview",
|
||||||
|
sessions: "Sessions",
|
||||||
|
scheduled: "Scheduled",
|
||||||
|
skills: "Skills",
|
||||||
|
settings: "Settings",
|
||||||
|
agents: "Agents",
|
||||||
|
shellCommand: "Shell Command",
|
||||||
|
debugMode: "Debug Mode",
|
||||||
|
},
|
||||||
|
descriptions: {
|
||||||
|
shellCommand: "Run shell",
|
||||||
|
debugMode: "Toggle debug",
|
||||||
|
},
|
||||||
|
footer: {
|
||||||
|
navigate: "navigate",
|
||||||
|
select: "select",
|
||||||
|
close: "close",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
dreaming: {
|
||||||
|
tabs: {
|
||||||
|
scene: "Scene",
|
||||||
|
diary: "Diary",
|
||||||
|
advanced: "Advanced",
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
refresh: "Refresh",
|
||||||
|
refreshing: "Refreshing…",
|
||||||
|
on: "Dreaming On",
|
||||||
|
off: "Dreaming Off",
|
||||||
|
},
|
||||||
|
restartConfirmation: {
|
||||||
|
title: "Restart Gateway to Apply Change",
|
||||||
|
subtitle: "Changing Dreaming mode restarts the gateway.",
|
||||||
|
warning:
|
||||||
|
"This action will restart the Gateway and may temporarily interrupt chats, automations, and connected channels.",
|
||||||
|
confirm: "Confirm Restart",
|
||||||
|
restarting: "Restarting…",
|
||||||
|
failed: "Could not apply change. Check your connection and try again.",
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
active: "Dreaming Active",
|
||||||
|
idle: "Dreaming Idle",
|
||||||
|
promotedSuffix: "promoted",
|
||||||
|
nextSweepPrefix: "next sweep",
|
||||||
|
},
|
||||||
|
scene: {
|
||||||
|
backfill: "Backfill",
|
||||||
|
dedupeDiary: "Dedupe Diary",
|
||||||
|
reset: "Reset",
|
||||||
|
clearGrounded: "Clear Replayed",
|
||||||
|
repairCache: "Repair Dream Cache",
|
||||||
|
working: "Working…",
|
||||||
|
},
|
||||||
|
phase: {
|
||||||
|
light: "Light",
|
||||||
|
deep: "Deep",
|
||||||
|
rem: "Rem",
|
||||||
|
off: "off",
|
||||||
|
},
|
||||||
|
advanced: {
|
||||||
|
eyebrow: "Review",
|
||||||
|
title: "Daily Log Review",
|
||||||
|
description:
|
||||||
|
"Review what came from the daily log, what is waiting for promotion, and what was promoted recently.",
|
||||||
|
summaryFromDailyLog: "from daily log",
|
||||||
|
summaryWaiting: "waiting",
|
||||||
|
summaryPromotedToday: "promoted today",
|
||||||
|
stagedTitle: "From the Daily Log",
|
||||||
|
stagedDescription: "Replay candidates pulled from older daily log entries.",
|
||||||
|
shortTermTitle: "Waiting for Promotion",
|
||||||
|
shortTermDescription: "Current short-term candidates waiting to graduate into real memory.",
|
||||||
|
sortRecent: "Most recent",
|
||||||
|
sortSignals: "Strongest support",
|
||||||
|
originDailyLog: "replayed",
|
||||||
|
originLive: "live",
|
||||||
|
originMixed: "mixed",
|
||||||
|
promotedTitle: "Recent Promotions",
|
||||||
|
promotedDescription: "Items that already made it through promotion.",
|
||||||
|
emptyGrounded: "No staged grounded replay entries right now.",
|
||||||
|
emptyShortTerm: "No short-term entries to inspect.",
|
||||||
|
emptyPromoted: "No recent promotions to inspect.",
|
||||||
|
updatedPrefix: "updated",
|
||||||
|
},
|
||||||
|
stats: {
|
||||||
|
shortTerm: "Short-term",
|
||||||
|
grounded: "Grounded",
|
||||||
|
signals: "Signals",
|
||||||
|
promoted: "Promoted",
|
||||||
|
phaseHits: "Phase Hits",
|
||||||
|
},
|
||||||
|
trace: {
|
||||||
|
shortTerm: "Short-term",
|
||||||
|
grounded: "Grounded",
|
||||||
|
signals: "Signals",
|
||||||
|
promoted: "Promoted",
|
||||||
|
groundedLed: "grounded-led",
|
||||||
|
emptyShortTerm: "No active short-term items.",
|
||||||
|
emptyGrounded: "No staged grounded items.",
|
||||||
|
emptySignals: "No active signals.",
|
||||||
|
emptyPromoted: "Nothing promoted yet today.",
|
||||||
|
},
|
||||||
|
diary: {
|
||||||
|
title: "Dream Diary",
|
||||||
|
noDreamsYet: "No dreams yet",
|
||||||
|
noDreamsHint: "Dreams will appear here after the first dreaming cycle runs.",
|
||||||
|
waitingTitle: "The diary is waiting",
|
||||||
|
waitingHint: "Narrative entries will appear after the next dreaming cycle.",
|
||||||
|
older: "Older",
|
||||||
|
newer: "Newer",
|
||||||
|
reload: "Reload",
|
||||||
|
reloading: "Reloading…",
|
||||||
|
},
|
||||||
|
phrases: {
|
||||||
|
consolidatingMemories: "consolidating memories…",
|
||||||
|
tidyingKnowledgeGraph: "tidying the knowledge graph…",
|
||||||
|
replayingConversations: "replaying today's conversations…",
|
||||||
|
weavingShortTerm: "weaving short-term into long-term…",
|
||||||
|
defragmentingMindPalace: "defragmenting the mind palace…",
|
||||||
|
filingLooseThoughts: "filing away loose thoughts…",
|
||||||
|
connectingDots: "connecting distant dots…",
|
||||||
|
compostingContext: "composting old context windows…",
|
||||||
|
alphabetizingSubconscious: "alphabetizing the subconscious…",
|
||||||
|
promotingHunches: "promoting promising hunches…",
|
||||||
|
forgettingNoise: "forgetting what doesn't matter…",
|
||||||
|
dreamingEmbeddings: "dreaming in embeddings…",
|
||||||
|
reorganizingAttic: "reorganizing the memory attic…",
|
||||||
|
indexingDay: "softly indexing the day…",
|
||||||
|
nurturingInsights: "nurturing fledgling insights…",
|
||||||
|
simmeringIdeas: "simmering half-formed ideas…",
|
||||||
|
whisperingVectorStore: "whispering to the vector store…",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
usage: {
|
||||||
|
page: {
|
||||||
|
subtitle: "See where tokens go, when sessions spike, and what drives cost.",
|
||||||
|
},
|
||||||
|
common: {
|
||||||
|
emptyValue: "—",
|
||||||
|
unknown: "unknown",
|
||||||
|
},
|
||||||
|
loading: {
|
||||||
|
title: "Usage Overview",
|
||||||
|
badge: "Loading",
|
||||||
|
},
|
||||||
|
metrics: {
|
||||||
|
tokens: "Tokens",
|
||||||
|
cost: "Cost",
|
||||||
|
session: "session",
|
||||||
|
sessions: "sessions",
|
||||||
|
},
|
||||||
|
presets: {
|
||||||
|
today: "Today",
|
||||||
|
last7d: "7d",
|
||||||
|
last30d: "30d",
|
||||||
|
},
|
||||||
|
filters: {
|
||||||
|
title: "Filters",
|
||||||
|
to: "to",
|
||||||
|
startDate: "Start date",
|
||||||
|
endDate: "End date",
|
||||||
|
timeZone: "Time zone",
|
||||||
|
timeZoneLocal: "Local",
|
||||||
|
timeZoneUtc: "UTC",
|
||||||
|
pin: "Pin",
|
||||||
|
pinned: "Pinned",
|
||||||
|
unpin: "Unpin filters",
|
||||||
|
selectAll: "Select All",
|
||||||
|
clear: "Clear",
|
||||||
|
clearAll: "Clear All",
|
||||||
|
remove: "Remove filter",
|
||||||
|
all: "All",
|
||||||
|
days: "Days",
|
||||||
|
hours: "Hours",
|
||||||
|
session: "Session",
|
||||||
|
agent: "Agent",
|
||||||
|
channel: "Channel",
|
||||||
|
provider: "Provider",
|
||||||
|
model: "Model",
|
||||||
|
tool: "Tool",
|
||||||
|
daysCount: "{count} days",
|
||||||
|
hoursCount: "{count} hours",
|
||||||
|
sessionsCount: "{count} sessions",
|
||||||
|
},
|
||||||
|
query: {
|
||||||
|
placeholder:
|
||||||
|
"Filter sessions (e.g. key:agent:main:cron* model:gpt-4o has:errors minTokens:2000)",
|
||||||
|
apply: "Filter (client-side)",
|
||||||
|
matching: "{shown} of {total} sessions match",
|
||||||
|
inRange: "{total} sessions in range",
|
||||||
|
tip: "Tip: use filters or click bars to refine days.",
|
||||||
|
},
|
||||||
|
export: {
|
||||||
|
label: "Export",
|
||||||
|
sessionsCsv: "Sessions CSV",
|
||||||
|
dailyCsv: "Daily CSV",
|
||||||
|
json: "JSON",
|
||||||
|
},
|
||||||
|
empty: {
|
||||||
|
title: "Start with a date range",
|
||||||
|
subtitle:
|
||||||
|
"Load usage data to compare costs, inspect sessions, and drill into timelines without leaving the dashboard.",
|
||||||
|
hint: "Select a date range and click Refresh to load usage.",
|
||||||
|
noData: "No data",
|
||||||
|
featureOverview: "Overview cards",
|
||||||
|
featureSessions: "Session ranking",
|
||||||
|
featureTimeline: "Timeline drilldown",
|
||||||
|
},
|
||||||
|
daily: {
|
||||||
|
title: "Daily Usage",
|
||||||
|
total: "Total",
|
||||||
|
byType: "By Type",
|
||||||
|
tokensTitle: "Daily Token Usage",
|
||||||
|
costTitle: "Daily Cost",
|
||||||
|
},
|
||||||
|
breakdown: {
|
||||||
|
output: "Output",
|
||||||
|
input: "Input",
|
||||||
|
cacheWrite: "Cache Write",
|
||||||
|
cacheRead: "Cache Read",
|
||||||
|
total: "Total",
|
||||||
|
tokensByType: "Tokens by Type",
|
||||||
|
costByType: "Cost by Type",
|
||||||
|
},
|
||||||
|
overview: {
|
||||||
|
title: "Usage Overview",
|
||||||
|
messages: "Messages",
|
||||||
|
messagesHint: "Total user and assistant messages in range.",
|
||||||
|
messagesAbbrev: "msgs",
|
||||||
|
user: "user",
|
||||||
|
assistant: "assistant",
|
||||||
|
toolCalls: "Tool Calls",
|
||||||
|
toolCallsHint: "Total tool call count across sessions.",
|
||||||
|
toolsUsed: "tools used",
|
||||||
|
errors: "Errors",
|
||||||
|
errorsHint: "Total message and tool errors in range.",
|
||||||
|
toolResults: "tool results",
|
||||||
|
avgTokens: "Avg Tokens / Msg",
|
||||||
|
avgTokensHint: "Average tokens per message in this range.",
|
||||||
|
avgCost: "Avg Cost / Msg",
|
||||||
|
avgCostHint: "Average cost per message when providers report costs.",
|
||||||
|
avgCostHintMissing:
|
||||||
|
"Average cost per message when providers report costs. Cost data is missing for some or all sessions in this range.",
|
||||||
|
acrossMessages: "Across {count} messages",
|
||||||
|
sessions: "Sessions",
|
||||||
|
sessionsHint: "Distinct sessions in the range.",
|
||||||
|
sessionsInRange: "of {count} in range",
|
||||||
|
throughput: "Throughput",
|
||||||
|
throughputHint: "Throughput shows tokens per minute over active time. Higher is better.",
|
||||||
|
tokensPerMinute: "tok/min",
|
||||||
|
perMinute: "/ min",
|
||||||
|
errorRate: "Error Rate",
|
||||||
|
errorHint: "Error rate = errors / total messages. Lower is better.",
|
||||||
|
avgSession: "avg session",
|
||||||
|
cacheHitRate: "Cache Hit Rate",
|
||||||
|
cacheHint:
|
||||||
|
"Cache hit rate = cache read / (input + cache read + cache write). Higher is better.",
|
||||||
|
cached: "cached",
|
||||||
|
prompt: "prompt",
|
||||||
|
calls: "calls",
|
||||||
|
topModels: "Top Models",
|
||||||
|
topProviders: "Top Providers",
|
||||||
|
topTools: "Top Tools",
|
||||||
|
topAgents: "Top Agents",
|
||||||
|
topChannels: "Top Channels",
|
||||||
|
peakErrorDays: "Peak Error Days",
|
||||||
|
peakErrorHours: "Peak Error Hours",
|
||||||
|
noModelData: "No model data",
|
||||||
|
noProviderData: "No provider data",
|
||||||
|
noToolCalls: "No tool calls",
|
||||||
|
noAgentData: "No agent data",
|
||||||
|
noChannelData: "No channel data",
|
||||||
|
noErrorData: "No error data",
|
||||||
|
},
|
||||||
|
sessions: {
|
||||||
|
title: "Sessions",
|
||||||
|
shown: "{count} shown",
|
||||||
|
total: "{count} total",
|
||||||
|
avg: "avg",
|
||||||
|
all: "All",
|
||||||
|
recent: "Recently viewed",
|
||||||
|
recentShort: "Recent",
|
||||||
|
sort: "Sort",
|
||||||
|
ascending: "Ascending",
|
||||||
|
descending: "Descending",
|
||||||
|
clearSelection: "Clear Selection",
|
||||||
|
noRecent: "No recent sessions",
|
||||||
|
noneInRange: "No sessions in range",
|
||||||
|
more: "+{count} more",
|
||||||
|
selected: "Selected ({count})",
|
||||||
|
copy: "Copy",
|
||||||
|
copyName: "Copy session name",
|
||||||
|
limitReached: "Showing first 1,000 sessions. Narrow date range for complete results.",
|
||||||
|
},
|
||||||
|
details: {
|
||||||
|
noUsageData: "No usage data for this session.",
|
||||||
|
duration: "Duration",
|
||||||
|
modelMix: "Model Mix",
|
||||||
|
filtered: "(filtered)",
|
||||||
|
close: "Close session details",
|
||||||
|
noTimeline: "No timeline data",
|
||||||
|
noDataInRange: "No data in range",
|
||||||
|
usageOverTime: "Usage Over Time",
|
||||||
|
reset: "Reset",
|
||||||
|
perTurn: "Per Turn",
|
||||||
|
cumulative: "Cumulative",
|
||||||
|
turnRange: "Turns {start}–{end} of {total}",
|
||||||
|
assistantOutputTokens: "Assistant output tokens",
|
||||||
|
userToolInputTokens: "User + tool input tokens",
|
||||||
|
tokensWrittenToCache: "Tokens written to cache",
|
||||||
|
tokensReadFromCache: "Tokens read from cache",
|
||||||
|
noContextData: "No context data",
|
||||||
|
systemPromptBreakdown: "System Prompt Breakdown",
|
||||||
|
collapse: "Collapse",
|
||||||
|
collapseAll: "Collapse All",
|
||||||
|
expandAll: "Expand All",
|
||||||
|
baseContextPerMessage: "Base context per message",
|
||||||
|
system: "System",
|
||||||
|
systemShort: "Sys",
|
||||||
|
skills: "Skills",
|
||||||
|
tools: "Tools",
|
||||||
|
files: "Files",
|
||||||
|
ofInput: "of input",
|
||||||
|
of: "of",
|
||||||
|
timelineFiltered: "timeline filtered",
|
||||||
|
conversation: "Conversation",
|
||||||
|
noMessages: "No messages",
|
||||||
|
tool: "Tool",
|
||||||
|
toolResult: "Tool result",
|
||||||
|
hasTools: "Has tools",
|
||||||
|
searchConversation: "Search conversation",
|
||||||
|
you: "You",
|
||||||
|
noMessagesMatch: "No messages match the filters.",
|
||||||
|
},
|
||||||
|
mosaic: {
|
||||||
|
title: "Activity by Time",
|
||||||
|
subtitleEmpty: "Estimates require session timestamps.",
|
||||||
|
subtitle: "Estimated from session spans (first/last activity). Time zone: {zone}.",
|
||||||
|
noTimelineData: "No timeline data yet.",
|
||||||
|
dayOfWeek: "Day of Week",
|
||||||
|
midnight: "Midnight",
|
||||||
|
fourAm: "4am",
|
||||||
|
eightAm: "8am",
|
||||||
|
noon: "Noon",
|
||||||
|
fourPm: "4pm",
|
||||||
|
eightPm: "8pm",
|
||||||
|
legend: "Low → High token density",
|
||||||
|
sun: "Sun",
|
||||||
|
mon: "Mon",
|
||||||
|
tue: "Tue",
|
||||||
|
wed: "Wed",
|
||||||
|
thu: "Thu",
|
||||||
|
fri: "Fri",
|
||||||
|
sat: "Sat",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
login: {
|
||||||
|
subtitle: "Gateway Dashboard",
|
||||||
|
passwordPlaceholder: "optional",
|
||||||
|
showToken: "Show token",
|
||||||
|
hideToken: "Hide token",
|
||||||
|
toggleTokenVisibility: "Toggle token visibility",
|
||||||
|
showPassword: "Show password",
|
||||||
|
hidePassword: "Hide password",
|
||||||
|
togglePasswordVisibility: "Toggle password visibility",
|
||||||
|
},
|
||||||
|
chat: {
|
||||||
|
disconnected: "Disconnected from gateway.",
|
||||||
|
refreshTitle: "Refresh chat data",
|
||||||
|
thinkingToggle: "Toggle assistant thinking/working output",
|
||||||
|
toolCallsToggle: "Toggle tool calls and tool results",
|
||||||
|
focusToggle: "Toggle focus mode (hide sidebar + page header)",
|
||||||
|
hideCronSessions: "Hide cron sessions",
|
||||||
|
showCronSessions: "Show cron sessions",
|
||||||
|
showCronSessionsHidden: "Show cron sessions ({count} hidden)",
|
||||||
|
onboardingDisabled: "Disabled during setup",
|
||||||
|
},
|
||||||
|
languages: {
|
||||||
|
en: "English",
|
||||||
|
zhCN: "简体中文 (Simplified Chinese)",
|
||||||
|
zhTW: "繁體中文 (Traditional Chinese)",
|
||||||
|
ptBR: "Português (Brazilian Portuguese)",
|
||||||
|
de: "Deutsch (German)",
|
||||||
|
es: "Español (Spanish)",
|
||||||
|
jaJP: "日本語 (Japanese)",
|
||||||
|
ko: "한국어 (Korean)",
|
||||||
|
fr: "Français (French)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
|
tr: "Türkçe (Turkish)",
|
||||||
|
uk: "Українська (Ukrainian)",
|
||||||
|
id: "Bahasa Indonesia (Indonesian)",
|
||||||
|
pl: "Polski (Polish)",
|
||||||
|
th: "ไทย (Thai)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
|
},
|
||||||
|
cron: {
|
||||||
|
summary: {
|
||||||
|
enabled: "Enabled",
|
||||||
|
yes: "Yes",
|
||||||
|
no: "No",
|
||||||
|
jobs: "Jobs",
|
||||||
|
nextWake: "Next wake",
|
||||||
|
refreshing: "Refreshing...",
|
||||||
|
refresh: "Refresh",
|
||||||
|
},
|
||||||
|
jobs: {
|
||||||
|
title: "Jobs",
|
||||||
|
subtitle: "All scheduled jobs stored in the gateway.",
|
||||||
|
shownOf: "{shown} shown of {total}",
|
||||||
|
searchJobs: "Search jobs",
|
||||||
|
searchPlaceholder: "Name, description, or agent",
|
||||||
|
enabled: "Enabled",
|
||||||
|
schedule: "Schedule",
|
||||||
|
lastRun: "Last run",
|
||||||
|
all: "All",
|
||||||
|
sort: "Sort",
|
||||||
|
nextRun: "Next run",
|
||||||
|
recentlyUpdated: "Recently updated",
|
||||||
|
name: "Name",
|
||||||
|
direction: "Direction",
|
||||||
|
ascending: "Ascending",
|
||||||
|
descending: "Descending",
|
||||||
|
reset: "Reset",
|
||||||
|
noMatching: "No matching jobs.",
|
||||||
|
loading: "Loading...",
|
||||||
|
loadMore: "Load more jobs",
|
||||||
|
},
|
||||||
|
runs: {
|
||||||
|
title: "Run history",
|
||||||
|
subtitleAll: "Latest runs across all jobs.",
|
||||||
|
subtitleJob: "Latest runs for {title}.",
|
||||||
|
scope: "Scope",
|
||||||
|
allJobs: "All jobs",
|
||||||
|
selectedJob: "Selected job",
|
||||||
|
searchRuns: "Search runs",
|
||||||
|
searchPlaceholder: "Summary, error, or job",
|
||||||
|
newestFirst: "Newest first",
|
||||||
|
oldestFirst: "Oldest first",
|
||||||
|
status: "Status",
|
||||||
|
delivery: "Delivery",
|
||||||
|
clear: "Clear",
|
||||||
|
allStatuses: "All statuses",
|
||||||
|
allDelivery: "All delivery",
|
||||||
|
selectJobHint: "Select a job to inspect run history.",
|
||||||
|
noMatching: "No matching runs.",
|
||||||
|
loadMore: "Load more runs",
|
||||||
|
runStatusOk: "OK",
|
||||||
|
runStatusError: "Error",
|
||||||
|
runStatusSkipped: "Skipped",
|
||||||
|
runStatusUnknown: "Unknown",
|
||||||
|
deliveryDelivered: "Delivered",
|
||||||
|
deliveryNotDelivered: "Not delivered",
|
||||||
|
deliveryUnknown: "Unknown",
|
||||||
|
deliveryNotRequested: "Not requested",
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
editJob: "Edit Job",
|
||||||
|
newJob: "New Job",
|
||||||
|
updateSubtitle: "Update the selected scheduled job.",
|
||||||
|
createSubtitle: "Create a scheduled wakeup or agent run.",
|
||||||
|
required: "Required",
|
||||||
|
requiredSr: "required",
|
||||||
|
basics: "Basics",
|
||||||
|
basicsSub: "Name it, choose the assistant, and set enabled state.",
|
||||||
|
fieldName: "Name",
|
||||||
|
description: "Description",
|
||||||
|
agentId: "Agent ID",
|
||||||
|
namePlaceholder: "Morning brief",
|
||||||
|
descriptionPlaceholder: "Optional context for this job",
|
||||||
|
agentPlaceholder: "main or ops",
|
||||||
|
agentHelp: "Start typing to pick a known agent, or enter a custom one.",
|
||||||
|
schedule: "Schedule",
|
||||||
|
scheduleSub: "Control when this job runs.",
|
||||||
|
every: "Every",
|
||||||
|
at: "At",
|
||||||
|
cronOption: "Cron",
|
||||||
|
runAt: "Run at",
|
||||||
|
unit: "Unit",
|
||||||
|
minutes: "Minutes",
|
||||||
|
hours: "Hours",
|
||||||
|
days: "Days",
|
||||||
|
expression: "Expression",
|
||||||
|
expressionPlaceholder: "0 7 * * *",
|
||||||
|
everyAmountPlaceholder: "30",
|
||||||
|
timezoneOptional: "Timezone (optional)",
|
||||||
|
timezonePlaceholder: "America/Los_Angeles",
|
||||||
|
timezoneHelp: "Pick a common timezone or enter any valid IANA timezone.",
|
||||||
|
jitterHelp: "Need jitter? Use Advanced → Stagger window / Stagger unit.",
|
||||||
|
execution: "Execution",
|
||||||
|
executionSub: "Choose when to wake, and what this job should do.",
|
||||||
|
session: "Session",
|
||||||
|
main: "Main",
|
||||||
|
isolated: "Isolated",
|
||||||
|
sessionHelp: "Main posts a system event. Isolated runs a dedicated agent turn.",
|
||||||
|
wakeMode: "Wake mode",
|
||||||
|
now: "Now",
|
||||||
|
nextHeartbeat: "Next heartbeat",
|
||||||
|
wakeModeHelp: "Now triggers immediately. Next heartbeat waits for the next cycle.",
|
||||||
|
payloadKind: "What should run?",
|
||||||
|
systemEvent: "Post message to main timeline",
|
||||||
|
agentTurn: "Run assistant task (isolated)",
|
||||||
|
systemEventHelp:
|
||||||
|
"Sends your text to the gateway main timeline (good for reminders/triggers).",
|
||||||
|
agentTurnHelp: "Starts an assistant run in its own session using your prompt.",
|
||||||
|
timeoutSeconds: "Timeout (seconds)",
|
||||||
|
timeoutPlaceholder: "Optional, e.g. 90",
|
||||||
|
timeoutHelp:
|
||||||
|
"Optional. Leave blank to use the gateway default timeout behavior for this run.",
|
||||||
|
mainTimelineMessage: "Main timeline message",
|
||||||
|
assistantTaskPrompt: "Assistant task prompt",
|
||||||
|
deliverySection: "Delivery",
|
||||||
|
deliverySub: "Choose where run summaries are sent.",
|
||||||
|
resultDelivery: "Result delivery",
|
||||||
|
announceDefault: "Announce summary (default)",
|
||||||
|
webhookPost: "Webhook POST",
|
||||||
|
noneInternal: "None (internal)",
|
||||||
|
deliveryHelp: "Announce posts a summary to chat. None keeps execution internal.",
|
||||||
|
webhookUrl: "Webhook URL",
|
||||||
|
channel: "Channel",
|
||||||
|
webhookPlaceholder: "https://example.com/cron",
|
||||||
|
channelHelp: "Choose which connected channel receives the summary.",
|
||||||
|
webhookHelp: "Send run summaries to a webhook endpoint.",
|
||||||
|
to: "To",
|
||||||
|
toPlaceholder: "+1555... or chat id",
|
||||||
|
toHelp: "Optional recipient override (chat id, phone, or user id).",
|
||||||
|
advanced: "Advanced",
|
||||||
|
advancedHelp:
|
||||||
|
"Optional overrides for delivery guarantees, schedule jitter, and model controls.",
|
||||||
|
deleteAfterRun: "Delete after run",
|
||||||
|
deleteAfterRunHelp: "Best for one-shot reminders that should auto-clean up.",
|
||||||
|
clearAgentOverride: "Clear agent override",
|
||||||
|
clearAgentHelp: "Force this job to use the gateway default assistant.",
|
||||||
|
exactTiming: "Exact timing (no stagger)",
|
||||||
|
exactTimingHelp: "Run on exact cron boundaries with no spread.",
|
||||||
|
staggerWindow: "Stagger window",
|
||||||
|
staggerUnit: "Stagger unit",
|
||||||
|
staggerPlaceholder: "30",
|
||||||
|
seconds: "Seconds",
|
||||||
|
model: "Model",
|
||||||
|
modelPlaceholder: "openai/gpt-5.2",
|
||||||
|
modelHelp: "Start typing to pick a known model, or enter a custom one.",
|
||||||
|
thinking: "Thinking",
|
||||||
|
thinkingPlaceholder: "low",
|
||||||
|
thinkingHelp: "Use a suggested level or enter a provider-specific value.",
|
||||||
|
bestEffortDelivery: "Best effort delivery",
|
||||||
|
bestEffortHelp: "Do not fail the job if delivery itself fails.",
|
||||||
|
cantAddYet: "Can't add job yet",
|
||||||
|
fillRequired: "Fill the required fields below to enable submit.",
|
||||||
|
fixFields: "Fix {count} field to continue.",
|
||||||
|
fixFieldsPlural: "Fix {count} fields to continue.",
|
||||||
|
saving: "Saving...",
|
||||||
|
saveChanges: "Save changes",
|
||||||
|
addJob: "Add job",
|
||||||
|
cancel: "Cancel",
|
||||||
|
},
|
||||||
|
jobList: {
|
||||||
|
allJobs: "all jobs",
|
||||||
|
selectJob: "(select a job)",
|
||||||
|
enabled: "enabled",
|
||||||
|
disabled: "disabled",
|
||||||
|
edit: "Edit",
|
||||||
|
clone: "Clone",
|
||||||
|
disable: "Disable",
|
||||||
|
enable: "Enable",
|
||||||
|
run: "Run",
|
||||||
|
history: "History",
|
||||||
|
remove: "Remove",
|
||||||
|
},
|
||||||
|
jobDetail: {
|
||||||
|
system: "System",
|
||||||
|
prompt: "Prompt",
|
||||||
|
delivery: "Delivery",
|
||||||
|
agent: "Agent",
|
||||||
|
},
|
||||||
|
jobState: {
|
||||||
|
status: "Status",
|
||||||
|
next: "Next",
|
||||||
|
last: "Last",
|
||||||
|
},
|
||||||
|
runEntry: {
|
||||||
|
noSummary: "No summary.",
|
||||||
|
runAt: "Run at",
|
||||||
|
openRunChat: "Open run chat",
|
||||||
|
next: "Next {rel}",
|
||||||
|
due: "Due {rel}",
|
||||||
|
},
|
||||||
|
errors: {
|
||||||
|
nameRequired: "Name is required.",
|
||||||
|
scheduleAtInvalid: "Enter a valid date/time.",
|
||||||
|
everyAmountInvalid: "Interval must be greater than 0.",
|
||||||
|
cronExprRequired: "Cron expression is required.",
|
||||||
|
staggerAmountInvalid: "Stagger must be greater than 0.",
|
||||||
|
systemTextRequired: "System text is required.",
|
||||||
|
agentMessageRequired: "Agent message is required.",
|
||||||
|
timeoutInvalid: "If set, timeout must be greater than 0 seconds.",
|
||||||
|
webhookUrlRequired: "Webhook URL is required.",
|
||||||
|
webhookUrlInvalid: "Webhook URL must start with http:// or https://.",
|
||||||
|
invalidRunTime: "Invalid run time.",
|
||||||
|
invalidIntervalAmount: "Invalid interval amount.",
|
||||||
|
cronExprRequiredShort: "Cron expression required.",
|
||||||
|
invalidStaggerAmount: "Invalid stagger amount.",
|
||||||
|
systemEventTextRequired: "System event text required.",
|
||||||
|
agentMessageRequiredShort: "Agent message required.",
|
||||||
|
nameRequiredShort: "Name required.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -721,11 +721,16 @@ export const pl: TranslationMap = {
|
|||||||
jaJP: "日本語 (japoński)",
|
jaJP: "日本語 (japoński)",
|
||||||
ko: "한국어 (koreański)",
|
ko: "한국어 (koreański)",
|
||||||
fr: "Français (francuski)",
|
fr: "Français (francuski)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe (turecki)",
|
tr: "Türkçe (turecki)",
|
||||||
uk: "Українська (ukraiński)",
|
uk: "Українська (ukraiński)",
|
||||||
id: "Bahasa Indonesia (indonezyjski)",
|
id: "Bahasa Indonesia (indonezyjski)",
|
||||||
pl: "Polski (polski)",
|
pl: "Polski (polski)",
|
||||||
th: "ไทย (tajski)",
|
th: "ไทย (tajski)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
@@ -718,11 +718,16 @@ export const pt_BR: TranslationMap = {
|
|||||||
jaJP: "日本語 (Japonês)",
|
jaJP: "日本語 (Japonês)",
|
||||||
ko: "한국어 (Coreano)",
|
ko: "한국어 (Coreano)",
|
||||||
fr: "Français (Francês)",
|
fr: "Français (Francês)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe (Turco)",
|
tr: "Türkçe (Turco)",
|
||||||
uk: "Українська (ucraniano)",
|
uk: "Українська (ucraniano)",
|
||||||
id: "Bahasa Indonesia (Indonésio)",
|
id: "Bahasa Indonesia (Indonésio)",
|
||||||
pl: "Polski (Polonês)",
|
pl: "Polski (Polonês)",
|
||||||
th: "ไทย (tailandês)",
|
th: "ไทย (tailandês)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
@@ -703,11 +703,16 @@ export const th: TranslationMap = {
|
|||||||
jaJP: "日本語 (ญี่ปุ่น)",
|
jaJP: "日本語 (ญี่ปุ่น)",
|
||||||
ko: "한국어 (เกาหลี)",
|
ko: "한국어 (เกาหลี)",
|
||||||
fr: "Français (ฝรั่งเศส)",
|
fr: "Français (ฝรั่งเศส)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe (ตุรกี)",
|
tr: "Türkçe (ตุรกี)",
|
||||||
uk: "Українська (ยูเครน)",
|
uk: "Українська (ยูเครน)",
|
||||||
id: "Bahasa Indonesia (อินโดนีเซีย)",
|
id: "Bahasa Indonesia (อินโดนีเซีย)",
|
||||||
pl: "Polski (โปแลนด์)",
|
pl: "Polski (โปแลนด์)",
|
||||||
th: "ไทย (ไทย)",
|
th: "ไทย (ไทย)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
@@ -721,11 +721,16 @@ export const tr: TranslationMap = {
|
|||||||
jaJP: "日本語 (Japonca)",
|
jaJP: "日本語 (Japonca)",
|
||||||
ko: "한국어 (Korece)",
|
ko: "한국어 (Korece)",
|
||||||
fr: "Français (Fransızca)",
|
fr: "Français (Fransızca)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe (Türkçe)",
|
tr: "Türkçe (Türkçe)",
|
||||||
uk: "Українська (Ukraynaca)",
|
uk: "Українська (Ukraynaca)",
|
||||||
id: "Bahasa Indonesia (Endonezce)",
|
id: "Bahasa Indonesia (Endonezce)",
|
||||||
pl: "Polski (Lehçe)",
|
pl: "Polski (Lehçe)",
|
||||||
th: "ไทย (Tayca)",
|
th: "ไทย (Tayca)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
@@ -720,11 +720,16 @@ export const uk: TranslationMap = {
|
|||||||
jaJP: "日本語 (японська)",
|
jaJP: "日本語 (японська)",
|
||||||
ko: "한국어 (корейська)",
|
ko: "한국어 (корейська)",
|
||||||
fr: "Français (французька)",
|
fr: "Français (французька)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe (турецька)",
|
tr: "Türkçe (турецька)",
|
||||||
uk: "Українська (українська)",
|
uk: "Українська (українська)",
|
||||||
id: "Bahasa Indonesia (індонезійська)",
|
id: "Bahasa Indonesia (індонезійська)",
|
||||||
pl: "Polski (польська)",
|
pl: "Polski (польська)",
|
||||||
th: "ไทย (тайська)",
|
th: "ไทย (тайська)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
936
ui/src/i18n/locales/vi.ts
Normal file
936
ui/src/i18n/locales/vi.ts
Normal file
@@ -0,0 +1,936 @@
|
|||||||
|
import type { TranslationMap } from "../lib/types.ts";
|
||||||
|
|
||||||
|
// Generated by scripts/control-ui-i18n.ts.
|
||||||
|
export const vi: TranslationMap = {
|
||||||
|
common: {
|
||||||
|
health: "Health",
|
||||||
|
ok: "OK",
|
||||||
|
yes: "Yes",
|
||||||
|
no: "No",
|
||||||
|
active: "Active",
|
||||||
|
loading: "Loading…",
|
||||||
|
refreshing: "Refreshing…",
|
||||||
|
online: "Online",
|
||||||
|
offline: "Offline",
|
||||||
|
connect: "Connect",
|
||||||
|
connected: "Connected",
|
||||||
|
refresh: "Refresh",
|
||||||
|
reload: "Reload",
|
||||||
|
probe: "Probe",
|
||||||
|
call: "Call",
|
||||||
|
confirm: "Confirm",
|
||||||
|
cancel: "Cancel",
|
||||||
|
unselect: "Unselect",
|
||||||
|
enabled: "Enabled",
|
||||||
|
disabled: "Disabled",
|
||||||
|
na: "n/a",
|
||||||
|
configured: "Configured",
|
||||||
|
running: "Running",
|
||||||
|
linked: "Linked",
|
||||||
|
mode: "Mode",
|
||||||
|
baseUrl: "Base URL",
|
||||||
|
lastStart: "Last start",
|
||||||
|
lastProbe: "Last probe",
|
||||||
|
lastInbound: "Last inbound",
|
||||||
|
lastConnect: "Last connect",
|
||||||
|
lastMessage: "Last message",
|
||||||
|
authAge: "Auth age",
|
||||||
|
credential: "Credential",
|
||||||
|
audience: "Audience",
|
||||||
|
publicKey: "Public Key",
|
||||||
|
probeOk: "Probe ok",
|
||||||
|
probeFailed: "Probe failed",
|
||||||
|
reloadConfig: "Reload Config",
|
||||||
|
loadConfig: "Load config",
|
||||||
|
loadApprovals: "Load approvals",
|
||||||
|
settingsSections: "Settings sections",
|
||||||
|
version: "Version",
|
||||||
|
docs: "Docs",
|
||||||
|
theme: "Theme",
|
||||||
|
resources: "Resources",
|
||||||
|
search: "Search",
|
||||||
|
save: "Save",
|
||||||
|
saving: "Saving…",
|
||||||
|
saveAndPublish: "Save & Publish",
|
||||||
|
importing: "Importing…",
|
||||||
|
importFromRelays: "Import from Relays",
|
||||||
|
showAdvanced: "Show Advanced",
|
||||||
|
hideAdvanced: "Hide Advanced",
|
||||||
|
unsavedChanges: "You have unsaved changes",
|
||||||
|
secondsAgo: "{count}s ago",
|
||||||
|
working: "Working…",
|
||||||
|
showQr: "Show QR",
|
||||||
|
relink: "Relink",
|
||||||
|
waitForScan: "Wait for scan",
|
||||||
|
logout: "Logout",
|
||||||
|
},
|
||||||
|
channels: {
|
||||||
|
health: {
|
||||||
|
title: "Channel health",
|
||||||
|
subtitle: "Channel status snapshots from the gateway.",
|
||||||
|
noSnapshotYet: "No snapshot yet.",
|
||||||
|
},
|
||||||
|
generic: {
|
||||||
|
subtitle: "Channel status and configuration.",
|
||||||
|
},
|
||||||
|
gatewayUrlConfirmation: {
|
||||||
|
title: "Change Gateway URL",
|
||||||
|
subtitle: "This will reconnect to a different gateway server",
|
||||||
|
warning: "Only confirm if you trust this URL. Malicious URLs can compromise your system.",
|
||||||
|
},
|
||||||
|
nostr: {
|
||||||
|
profile: "Profile",
|
||||||
|
editProfile: "Edit Profile",
|
||||||
|
profilePicture: "Profile picture",
|
||||||
|
noProfile: "No profile set.",
|
||||||
|
noProfileHint: 'Click "Edit Profile" to add your name, bio, and avatar.',
|
||||||
|
name: "Name",
|
||||||
|
displayName: "Display Name",
|
||||||
|
about: "About",
|
||||||
|
advanced: "Advanced",
|
||||||
|
profilePicturePreview: "Profile picture preview",
|
||||||
|
account: "Account",
|
||||||
|
username: "Username",
|
||||||
|
usernameHelp: "Short username (e.g., satoshi)",
|
||||||
|
bio: "Bio",
|
||||||
|
bioPlaceholder: "Tell people about yourself...",
|
||||||
|
bioHelp: "A brief bio or description",
|
||||||
|
displayNameHelp: "Your full display name",
|
||||||
|
avatarUrl: "Avatar URL",
|
||||||
|
avatarHelp: "HTTPS URL to your profile picture",
|
||||||
|
bannerUrl: "Banner URL",
|
||||||
|
bannerHelp: "HTTPS URL to a banner image",
|
||||||
|
website: "Website",
|
||||||
|
websiteHelp: "Your personal website",
|
||||||
|
nip05Identifier: "NIP-05 Identifier",
|
||||||
|
nip05Help: "Verifiable identifier (e.g., you@domain.com)",
|
||||||
|
lightningAddress: "Lightning Address",
|
||||||
|
lightningHelp: "Lightning address for tips (LUD-16)",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
lazyView: {
|
||||||
|
loadingTitle: "Loading panel",
|
||||||
|
errorTitle: "Panel failed to load",
|
||||||
|
errorSubtitle:
|
||||||
|
"Reload the page to load the latest Control UI bundle, or retry if the network request failed.",
|
||||||
|
retry: "Retry",
|
||||||
|
unknownError: "Unknown module load error.",
|
||||||
|
},
|
||||||
|
nodes: {
|
||||||
|
binding: {
|
||||||
|
loadConfigHint: "Load config to edit bindings.",
|
||||||
|
formModeHint: "Switch the Config tab to Form mode to edit bindings here.",
|
||||||
|
execNodeBinding: "Exec node binding",
|
||||||
|
execNodeBindingSubtitle: "Pin agents to a specific node when using exec host=node.",
|
||||||
|
defaultBinding: "Default binding",
|
||||||
|
defaultBindingHint: "Used when agents do not override a node binding.",
|
||||||
|
node: "Node",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
instances: {
|
||||||
|
title: "Connected Instances",
|
||||||
|
subtitle: "Presence beacons from the gateway and clients.",
|
||||||
|
showHosts: "Show hosts and IPs",
|
||||||
|
hideHosts: "Hide hosts and IPs",
|
||||||
|
toggleHostVisibility: "Toggle host visibility",
|
||||||
|
noInstances: "No instances reported yet.",
|
||||||
|
lastInput: "Last input {time}",
|
||||||
|
reason: "Reason {reason}",
|
||||||
|
},
|
||||||
|
agentTools: {
|
||||||
|
connectedSource: "Connected: {id}",
|
||||||
|
connected: "Connected",
|
||||||
|
channelSource: "Channel: {id}",
|
||||||
|
channel: "Channel",
|
||||||
|
builtIn: "Built-in",
|
||||||
|
},
|
||||||
|
nav: {
|
||||||
|
chat: "Chat",
|
||||||
|
control: "Control",
|
||||||
|
agent: "Agent",
|
||||||
|
settings: "Settings",
|
||||||
|
expand: "Expand sidebar",
|
||||||
|
collapse: "Collapse sidebar",
|
||||||
|
resize: "Resize sidebar",
|
||||||
|
},
|
||||||
|
tabs: {
|
||||||
|
agents: "Agents",
|
||||||
|
overview: "Overview",
|
||||||
|
channels: "Channels",
|
||||||
|
instances: "Instances",
|
||||||
|
sessions: "Sessions",
|
||||||
|
usage: "Usage",
|
||||||
|
cron: "Cron Jobs",
|
||||||
|
skills: "Skills",
|
||||||
|
nodes: "Nodes",
|
||||||
|
chat: "Chat",
|
||||||
|
config: "Config",
|
||||||
|
communications: "Communications",
|
||||||
|
appearance: "Appearance",
|
||||||
|
automation: "Automation",
|
||||||
|
infrastructure: "Infrastructure",
|
||||||
|
aiAgents: "AI & Agents",
|
||||||
|
debug: "Debug",
|
||||||
|
logs: "Logs",
|
||||||
|
dreams: "Dreaming",
|
||||||
|
},
|
||||||
|
subtitles: {
|
||||||
|
agents: "Workspaces, tools, identities.",
|
||||||
|
overview: "Status, entry points, health.",
|
||||||
|
channels: "Channels and settings.",
|
||||||
|
instances: "Connected clients and nodes.",
|
||||||
|
sessions: "Active sessions and defaults.",
|
||||||
|
usage: "API usage and costs.",
|
||||||
|
cron: "Wakeups and recurring runs.",
|
||||||
|
skills: "Skills and API keys.",
|
||||||
|
nodes: "Paired devices and commands.",
|
||||||
|
chat: "Gateway chat for quick interventions.",
|
||||||
|
config: "Edit openclaw.json.",
|
||||||
|
communications: "Channels, messages, and audio settings.",
|
||||||
|
appearance: "Theme, UI, and setup wizard settings.",
|
||||||
|
automation: "Commands, hooks, cron, and plugins.",
|
||||||
|
infrastructure: "Gateway, web, browser, and media settings.",
|
||||||
|
aiAgents: "Agents, models, skills, tools, memory, session.",
|
||||||
|
debug: "Snapshots, events, RPC.",
|
||||||
|
logs: "Live gateway logs.",
|
||||||
|
dreams: "Memory dreaming, consolidation, and reflection.",
|
||||||
|
},
|
||||||
|
overview: {
|
||||||
|
access: {
|
||||||
|
title: "Gateway Access",
|
||||||
|
subtitle: "Where the dashboard connects and how it authenticates.",
|
||||||
|
wsUrl: "WebSocket URL",
|
||||||
|
token: "Gateway Token",
|
||||||
|
password: "Password (not stored)",
|
||||||
|
passwordPlaceholder: "system or shared password",
|
||||||
|
sessionKey: "Default Session Key",
|
||||||
|
language: "Language",
|
||||||
|
connectHint: "Click Connect to apply connection changes.",
|
||||||
|
trustedProxy: "Authenticated via trusted proxy.",
|
||||||
|
showToken: "Show token",
|
||||||
|
hideToken: "Hide token",
|
||||||
|
toggleTokenVisibility: "Toggle token visibility",
|
||||||
|
showPassword: "Show password",
|
||||||
|
hidePassword: "Hide password",
|
||||||
|
togglePasswordVisibility: "Toggle password visibility",
|
||||||
|
},
|
||||||
|
snapshot: {
|
||||||
|
title: "Snapshot",
|
||||||
|
subtitle: "Latest gateway handshake information.",
|
||||||
|
status: "Status",
|
||||||
|
uptime: "Uptime",
|
||||||
|
tickInterval: "Tick Interval",
|
||||||
|
lastChannelsRefresh: "Last Channels Refresh",
|
||||||
|
channelsHint: "Use Channels to link WhatsApp, Telegram, Discord, Signal, or iMessage.",
|
||||||
|
},
|
||||||
|
stats: {
|
||||||
|
instances: "Instances",
|
||||||
|
instancesHint: "Presence beacons in the last 5 minutes.",
|
||||||
|
sessions: "Sessions",
|
||||||
|
sessionsHint: "Recent session keys tracked by the gateway.",
|
||||||
|
cron: "Cron",
|
||||||
|
cronNext: "Next wake {time}",
|
||||||
|
},
|
||||||
|
notes: {
|
||||||
|
title: "Notes",
|
||||||
|
subtitle: "Quick reminders for remote control setups.",
|
||||||
|
tailscaleTitle: "Tailscale serve",
|
||||||
|
tailscaleText: "Prefer serve mode to keep the gateway on loopback with tailnet auth.",
|
||||||
|
sessionTitle: "Session hygiene",
|
||||||
|
sessionText: "Use /new or sessions.patch to reset context.",
|
||||||
|
cronTitle: "Cron reminders",
|
||||||
|
cronText: "Use isolated sessions for recurring runs.",
|
||||||
|
},
|
||||||
|
auth: {
|
||||||
|
required: "This gateway requires auth. Add a token or password, then click Connect.",
|
||||||
|
failed:
|
||||||
|
"Auth failed. Re-copy a tokenized URL with {command}, or update the token, then click Connect.",
|
||||||
|
},
|
||||||
|
pairing: {
|
||||||
|
hint: "This device needs pairing approval from the gateway host.",
|
||||||
|
scopeUpgradeTitle: "Scope upgrade pending approval.",
|
||||||
|
scopeUpgradeSummary:
|
||||||
|
"This device is already paired, but the requested wider scope is waiting for approval.",
|
||||||
|
roleUpgradeTitle: "Role upgrade pending approval.",
|
||||||
|
roleUpgradeSummary:
|
||||||
|
"This device is already paired, but the requested role change is waiting for approval.",
|
||||||
|
metadataUpgradeTitle: "Device metadata change pending approval.",
|
||||||
|
metadataUpgradeSummary:
|
||||||
|
"This device is already paired, but the metadata change is waiting for approval.",
|
||||||
|
mobileHint:
|
||||||
|
"On mobile? Copy the full URL (including #token=...) from openclaw dashboard --no-open on your desktop.",
|
||||||
|
docsTitle: "Device pairing docs (opens in new tab)",
|
||||||
|
docsLink: "Docs: Device pairing",
|
||||||
|
},
|
||||||
|
insecure: {
|
||||||
|
hint: "This page is HTTP, so the browser blocks device identity. Use HTTPS (Tailscale Serve) or open {url} on the gateway host.",
|
||||||
|
stayHttp: "If you must stay on HTTP, set {config} (token-only).",
|
||||||
|
},
|
||||||
|
connection: {
|
||||||
|
title: "How to connect",
|
||||||
|
step1: "Start the gateway on your host machine:",
|
||||||
|
step2: "Get a tokenized dashboard URL:",
|
||||||
|
step3: "Paste the WebSocket URL and token above, or open the tokenized URL directly.",
|
||||||
|
step4: "Or generate a reusable token:",
|
||||||
|
docsHint: "For remote access, Tailscale Serve is recommended. ",
|
||||||
|
docsLink: "Read the docs →",
|
||||||
|
authDocsTitle: "Control UI auth docs (opens in new tab)",
|
||||||
|
authDocsLink: "Docs: Control UI auth",
|
||||||
|
tailscaleDocsTitle: "Tailscale Serve docs (opens in new tab)",
|
||||||
|
tailscaleDocsLink: "Docs: Tailscale Serve",
|
||||||
|
insecureHttpDocsTitle: "Insecure HTTP docs (opens in new tab)",
|
||||||
|
insecureHttpDocsLink: "Docs: Insecure HTTP",
|
||||||
|
copyCommand: "Copy command",
|
||||||
|
copyCommandAria: "Copy command: {command}",
|
||||||
|
},
|
||||||
|
cards: {
|
||||||
|
cost: "Cost",
|
||||||
|
skills: "Skills",
|
||||||
|
recentSessions: "Recent Sessions",
|
||||||
|
modelAuth: "Model Auth",
|
||||||
|
modelAuthOk: "{count} ok",
|
||||||
|
modelAuthExpired: "{count} expired",
|
||||||
|
modelAuthExpiring: "{count} expiring",
|
||||||
|
modelAuthProviders: "{count} providers",
|
||||||
|
modelAuthUsageLeft: "{pct}% left",
|
||||||
|
modelAuthExpiresIn: "expires {when}",
|
||||||
|
modelAuthAttentionExpiredTitle: "Model auth expired",
|
||||||
|
modelAuthAttentionExpiringTitle: "Model auth expiring soon",
|
||||||
|
modelAuthAttentionExpiredDesc: "{providers} — re-authenticate with openclaw models auth",
|
||||||
|
modelAuthAttentionExpiringEntry: "{provider} ({when})",
|
||||||
|
},
|
||||||
|
attention: {
|
||||||
|
title: "Attention",
|
||||||
|
},
|
||||||
|
eventLog: {
|
||||||
|
title: "Event Log",
|
||||||
|
},
|
||||||
|
logTail: {
|
||||||
|
title: "Gateway Logs",
|
||||||
|
},
|
||||||
|
quickActions: {
|
||||||
|
newSession: "New Session",
|
||||||
|
automation: "Automation",
|
||||||
|
refreshAll: "Refresh All",
|
||||||
|
terminal: "Terminal",
|
||||||
|
},
|
||||||
|
palette: {
|
||||||
|
placeholder: "Type a command…",
|
||||||
|
noResults: "No results",
|
||||||
|
categories: {
|
||||||
|
search: "Search",
|
||||||
|
navigation: "Navigation",
|
||||||
|
skills: "Skills",
|
||||||
|
},
|
||||||
|
items: {
|
||||||
|
overview: "Overview",
|
||||||
|
sessions: "Sessions",
|
||||||
|
scheduled: "Scheduled",
|
||||||
|
skills: "Skills",
|
||||||
|
settings: "Settings",
|
||||||
|
agents: "Agents",
|
||||||
|
shellCommand: "Shell Command",
|
||||||
|
debugMode: "Debug Mode",
|
||||||
|
},
|
||||||
|
descriptions: {
|
||||||
|
shellCommand: "Run shell",
|
||||||
|
debugMode: "Toggle debug",
|
||||||
|
},
|
||||||
|
footer: {
|
||||||
|
navigate: "navigate",
|
||||||
|
select: "select",
|
||||||
|
close: "close",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
dreaming: {
|
||||||
|
tabs: {
|
||||||
|
scene: "Scene",
|
||||||
|
diary: "Diary",
|
||||||
|
advanced: "Advanced",
|
||||||
|
},
|
||||||
|
header: {
|
||||||
|
refresh: "Refresh",
|
||||||
|
refreshing: "Refreshing…",
|
||||||
|
on: "Dreaming On",
|
||||||
|
off: "Dreaming Off",
|
||||||
|
},
|
||||||
|
restartConfirmation: {
|
||||||
|
title: "Restart Gateway to Apply Change",
|
||||||
|
subtitle: "Changing Dreaming mode restarts the gateway.",
|
||||||
|
warning:
|
||||||
|
"This action will restart the Gateway and may temporarily interrupt chats, automations, and connected channels.",
|
||||||
|
confirm: "Confirm Restart",
|
||||||
|
restarting: "Restarting…",
|
||||||
|
failed: "Could not apply change. Check your connection and try again.",
|
||||||
|
},
|
||||||
|
status: {
|
||||||
|
active: "Dreaming Active",
|
||||||
|
idle: "Dreaming Idle",
|
||||||
|
promotedSuffix: "promoted",
|
||||||
|
nextSweepPrefix: "next sweep",
|
||||||
|
},
|
||||||
|
scene: {
|
||||||
|
backfill: "Backfill",
|
||||||
|
dedupeDiary: "Dedupe Diary",
|
||||||
|
reset: "Reset",
|
||||||
|
clearGrounded: "Clear Replayed",
|
||||||
|
repairCache: "Repair Dream Cache",
|
||||||
|
working: "Working…",
|
||||||
|
},
|
||||||
|
phase: {
|
||||||
|
light: "Light",
|
||||||
|
deep: "Deep",
|
||||||
|
rem: "Rem",
|
||||||
|
off: "off",
|
||||||
|
},
|
||||||
|
advanced: {
|
||||||
|
eyebrow: "Review",
|
||||||
|
title: "Daily Log Review",
|
||||||
|
description:
|
||||||
|
"Review what came from the daily log, what is waiting for promotion, and what was promoted recently.",
|
||||||
|
summaryFromDailyLog: "from daily log",
|
||||||
|
summaryWaiting: "waiting",
|
||||||
|
summaryPromotedToday: "promoted today",
|
||||||
|
stagedTitle: "From the Daily Log",
|
||||||
|
stagedDescription: "Replay candidates pulled from older daily log entries.",
|
||||||
|
shortTermTitle: "Waiting for Promotion",
|
||||||
|
shortTermDescription: "Current short-term candidates waiting to graduate into real memory.",
|
||||||
|
sortRecent: "Most recent",
|
||||||
|
sortSignals: "Strongest support",
|
||||||
|
originDailyLog: "replayed",
|
||||||
|
originLive: "live",
|
||||||
|
originMixed: "mixed",
|
||||||
|
promotedTitle: "Recent Promotions",
|
||||||
|
promotedDescription: "Items that already made it through promotion.",
|
||||||
|
emptyGrounded: "No staged grounded replay entries right now.",
|
||||||
|
emptyShortTerm: "No short-term entries to inspect.",
|
||||||
|
emptyPromoted: "No recent promotions to inspect.",
|
||||||
|
updatedPrefix: "updated",
|
||||||
|
},
|
||||||
|
stats: {
|
||||||
|
shortTerm: "Short-term",
|
||||||
|
grounded: "Grounded",
|
||||||
|
signals: "Signals",
|
||||||
|
promoted: "Promoted",
|
||||||
|
phaseHits: "Phase Hits",
|
||||||
|
},
|
||||||
|
trace: {
|
||||||
|
shortTerm: "Short-term",
|
||||||
|
grounded: "Grounded",
|
||||||
|
signals: "Signals",
|
||||||
|
promoted: "Promoted",
|
||||||
|
groundedLed: "grounded-led",
|
||||||
|
emptyShortTerm: "No active short-term items.",
|
||||||
|
emptyGrounded: "No staged grounded items.",
|
||||||
|
emptySignals: "No active signals.",
|
||||||
|
emptyPromoted: "Nothing promoted yet today.",
|
||||||
|
},
|
||||||
|
diary: {
|
||||||
|
title: "Dream Diary",
|
||||||
|
noDreamsYet: "No dreams yet",
|
||||||
|
noDreamsHint: "Dreams will appear here after the first dreaming cycle runs.",
|
||||||
|
waitingTitle: "The diary is waiting",
|
||||||
|
waitingHint: "Narrative entries will appear after the next dreaming cycle.",
|
||||||
|
older: "Older",
|
||||||
|
newer: "Newer",
|
||||||
|
reload: "Reload",
|
||||||
|
reloading: "Reloading…",
|
||||||
|
},
|
||||||
|
phrases: {
|
||||||
|
consolidatingMemories: "consolidating memories…",
|
||||||
|
tidyingKnowledgeGraph: "tidying the knowledge graph…",
|
||||||
|
replayingConversations: "replaying today's conversations…",
|
||||||
|
weavingShortTerm: "weaving short-term into long-term…",
|
||||||
|
defragmentingMindPalace: "defragmenting the mind palace…",
|
||||||
|
filingLooseThoughts: "filing away loose thoughts…",
|
||||||
|
connectingDots: "connecting distant dots…",
|
||||||
|
compostingContext: "composting old context windows…",
|
||||||
|
alphabetizingSubconscious: "alphabetizing the subconscious…",
|
||||||
|
promotingHunches: "promoting promising hunches…",
|
||||||
|
forgettingNoise: "forgetting what doesn't matter…",
|
||||||
|
dreamingEmbeddings: "dreaming in embeddings…",
|
||||||
|
reorganizingAttic: "reorganizing the memory attic…",
|
||||||
|
indexingDay: "softly indexing the day…",
|
||||||
|
nurturingInsights: "nurturing fledgling insights…",
|
||||||
|
simmeringIdeas: "simmering half-formed ideas…",
|
||||||
|
whisperingVectorStore: "whispering to the vector store…",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
usage: {
|
||||||
|
page: {
|
||||||
|
subtitle: "See where tokens go, when sessions spike, and what drives cost.",
|
||||||
|
},
|
||||||
|
common: {
|
||||||
|
emptyValue: "—",
|
||||||
|
unknown: "unknown",
|
||||||
|
},
|
||||||
|
loading: {
|
||||||
|
title: "Usage Overview",
|
||||||
|
badge: "Loading",
|
||||||
|
},
|
||||||
|
metrics: {
|
||||||
|
tokens: "Tokens",
|
||||||
|
cost: "Cost",
|
||||||
|
session: "session",
|
||||||
|
sessions: "sessions",
|
||||||
|
},
|
||||||
|
presets: {
|
||||||
|
today: "Today",
|
||||||
|
last7d: "7d",
|
||||||
|
last30d: "30d",
|
||||||
|
},
|
||||||
|
filters: {
|
||||||
|
title: "Filters",
|
||||||
|
to: "to",
|
||||||
|
startDate: "Start date",
|
||||||
|
endDate: "End date",
|
||||||
|
timeZone: "Time zone",
|
||||||
|
timeZoneLocal: "Local",
|
||||||
|
timeZoneUtc: "UTC",
|
||||||
|
pin: "Pin",
|
||||||
|
pinned: "Pinned",
|
||||||
|
unpin: "Unpin filters",
|
||||||
|
selectAll: "Select All",
|
||||||
|
clear: "Clear",
|
||||||
|
clearAll: "Clear All",
|
||||||
|
remove: "Remove filter",
|
||||||
|
all: "All",
|
||||||
|
days: "Days",
|
||||||
|
hours: "Hours",
|
||||||
|
session: "Session",
|
||||||
|
agent: "Agent",
|
||||||
|
channel: "Channel",
|
||||||
|
provider: "Provider",
|
||||||
|
model: "Model",
|
||||||
|
tool: "Tool",
|
||||||
|
daysCount: "{count} days",
|
||||||
|
hoursCount: "{count} hours",
|
||||||
|
sessionsCount: "{count} sessions",
|
||||||
|
},
|
||||||
|
query: {
|
||||||
|
placeholder:
|
||||||
|
"Filter sessions (e.g. key:agent:main:cron* model:gpt-4o has:errors minTokens:2000)",
|
||||||
|
apply: "Filter (client-side)",
|
||||||
|
matching: "{shown} of {total} sessions match",
|
||||||
|
inRange: "{total} sessions in range",
|
||||||
|
tip: "Tip: use filters or click bars to refine days.",
|
||||||
|
},
|
||||||
|
export: {
|
||||||
|
label: "Export",
|
||||||
|
sessionsCsv: "Sessions CSV",
|
||||||
|
dailyCsv: "Daily CSV",
|
||||||
|
json: "JSON",
|
||||||
|
},
|
||||||
|
empty: {
|
||||||
|
title: "Start with a date range",
|
||||||
|
subtitle:
|
||||||
|
"Load usage data to compare costs, inspect sessions, and drill into timelines without leaving the dashboard.",
|
||||||
|
hint: "Select a date range and click Refresh to load usage.",
|
||||||
|
noData: "No data",
|
||||||
|
featureOverview: "Overview cards",
|
||||||
|
featureSessions: "Session ranking",
|
||||||
|
featureTimeline: "Timeline drilldown",
|
||||||
|
},
|
||||||
|
daily: {
|
||||||
|
title: "Daily Usage",
|
||||||
|
total: "Total",
|
||||||
|
byType: "By Type",
|
||||||
|
tokensTitle: "Daily Token Usage",
|
||||||
|
costTitle: "Daily Cost",
|
||||||
|
},
|
||||||
|
breakdown: {
|
||||||
|
output: "Output",
|
||||||
|
input: "Input",
|
||||||
|
cacheWrite: "Cache Write",
|
||||||
|
cacheRead: "Cache Read",
|
||||||
|
total: "Total",
|
||||||
|
tokensByType: "Tokens by Type",
|
||||||
|
costByType: "Cost by Type",
|
||||||
|
},
|
||||||
|
overview: {
|
||||||
|
title: "Usage Overview",
|
||||||
|
messages: "Messages",
|
||||||
|
messagesHint: "Total user and assistant messages in range.",
|
||||||
|
messagesAbbrev: "msgs",
|
||||||
|
user: "user",
|
||||||
|
assistant: "assistant",
|
||||||
|
toolCalls: "Tool Calls",
|
||||||
|
toolCallsHint: "Total tool call count across sessions.",
|
||||||
|
toolsUsed: "tools used",
|
||||||
|
errors: "Errors",
|
||||||
|
errorsHint: "Total message and tool errors in range.",
|
||||||
|
toolResults: "tool results",
|
||||||
|
avgTokens: "Avg Tokens / Msg",
|
||||||
|
avgTokensHint: "Average tokens per message in this range.",
|
||||||
|
avgCost: "Avg Cost / Msg",
|
||||||
|
avgCostHint: "Average cost per message when providers report costs.",
|
||||||
|
avgCostHintMissing:
|
||||||
|
"Average cost per message when providers report costs. Cost data is missing for some or all sessions in this range.",
|
||||||
|
acrossMessages: "Across {count} messages",
|
||||||
|
sessions: "Sessions",
|
||||||
|
sessionsHint: "Distinct sessions in the range.",
|
||||||
|
sessionsInRange: "of {count} in range",
|
||||||
|
throughput: "Throughput",
|
||||||
|
throughputHint: "Throughput shows tokens per minute over active time. Higher is better.",
|
||||||
|
tokensPerMinute: "tok/min",
|
||||||
|
perMinute: "/ min",
|
||||||
|
errorRate: "Error Rate",
|
||||||
|
errorHint: "Error rate = errors / total messages. Lower is better.",
|
||||||
|
avgSession: "avg session",
|
||||||
|
cacheHitRate: "Cache Hit Rate",
|
||||||
|
cacheHint:
|
||||||
|
"Cache hit rate = cache read / (input + cache read + cache write). Higher is better.",
|
||||||
|
cached: "cached",
|
||||||
|
prompt: "prompt",
|
||||||
|
calls: "calls",
|
||||||
|
topModels: "Top Models",
|
||||||
|
topProviders: "Top Providers",
|
||||||
|
topTools: "Top Tools",
|
||||||
|
topAgents: "Top Agents",
|
||||||
|
topChannels: "Top Channels",
|
||||||
|
peakErrorDays: "Peak Error Days",
|
||||||
|
peakErrorHours: "Peak Error Hours",
|
||||||
|
noModelData: "No model data",
|
||||||
|
noProviderData: "No provider data",
|
||||||
|
noToolCalls: "No tool calls",
|
||||||
|
noAgentData: "No agent data",
|
||||||
|
noChannelData: "No channel data",
|
||||||
|
noErrorData: "No error data",
|
||||||
|
},
|
||||||
|
sessions: {
|
||||||
|
title: "Sessions",
|
||||||
|
shown: "{count} shown",
|
||||||
|
total: "{count} total",
|
||||||
|
avg: "avg",
|
||||||
|
all: "All",
|
||||||
|
recent: "Recently viewed",
|
||||||
|
recentShort: "Recent",
|
||||||
|
sort: "Sort",
|
||||||
|
ascending: "Ascending",
|
||||||
|
descending: "Descending",
|
||||||
|
clearSelection: "Clear Selection",
|
||||||
|
noRecent: "No recent sessions",
|
||||||
|
noneInRange: "No sessions in range",
|
||||||
|
more: "+{count} more",
|
||||||
|
selected: "Selected ({count})",
|
||||||
|
copy: "Copy",
|
||||||
|
copyName: "Copy session name",
|
||||||
|
limitReached: "Showing first 1,000 sessions. Narrow date range for complete results.",
|
||||||
|
},
|
||||||
|
details: {
|
||||||
|
noUsageData: "No usage data for this session.",
|
||||||
|
duration: "Duration",
|
||||||
|
modelMix: "Model Mix",
|
||||||
|
filtered: "(filtered)",
|
||||||
|
close: "Close session details",
|
||||||
|
noTimeline: "No timeline data",
|
||||||
|
noDataInRange: "No data in range",
|
||||||
|
usageOverTime: "Usage Over Time",
|
||||||
|
reset: "Reset",
|
||||||
|
perTurn: "Per Turn",
|
||||||
|
cumulative: "Cumulative",
|
||||||
|
turnRange: "Turns {start}–{end} of {total}",
|
||||||
|
assistantOutputTokens: "Assistant output tokens",
|
||||||
|
userToolInputTokens: "User + tool input tokens",
|
||||||
|
tokensWrittenToCache: "Tokens written to cache",
|
||||||
|
tokensReadFromCache: "Tokens read from cache",
|
||||||
|
noContextData: "No context data",
|
||||||
|
systemPromptBreakdown: "System Prompt Breakdown",
|
||||||
|
collapse: "Collapse",
|
||||||
|
collapseAll: "Collapse All",
|
||||||
|
expandAll: "Expand All",
|
||||||
|
baseContextPerMessage: "Base context per message",
|
||||||
|
system: "System",
|
||||||
|
systemShort: "Sys",
|
||||||
|
skills: "Skills",
|
||||||
|
tools: "Tools",
|
||||||
|
files: "Files",
|
||||||
|
ofInput: "of input",
|
||||||
|
of: "of",
|
||||||
|
timelineFiltered: "timeline filtered",
|
||||||
|
conversation: "Conversation",
|
||||||
|
noMessages: "No messages",
|
||||||
|
tool: "Tool",
|
||||||
|
toolResult: "Tool result",
|
||||||
|
hasTools: "Has tools",
|
||||||
|
searchConversation: "Search conversation",
|
||||||
|
you: "You",
|
||||||
|
noMessagesMatch: "No messages match the filters.",
|
||||||
|
},
|
||||||
|
mosaic: {
|
||||||
|
title: "Activity by Time",
|
||||||
|
subtitleEmpty: "Estimates require session timestamps.",
|
||||||
|
subtitle: "Estimated from session spans (first/last activity). Time zone: {zone}.",
|
||||||
|
noTimelineData: "No timeline data yet.",
|
||||||
|
dayOfWeek: "Day of Week",
|
||||||
|
midnight: "Midnight",
|
||||||
|
fourAm: "4am",
|
||||||
|
eightAm: "8am",
|
||||||
|
noon: "Noon",
|
||||||
|
fourPm: "4pm",
|
||||||
|
eightPm: "8pm",
|
||||||
|
legend: "Low → High token density",
|
||||||
|
sun: "Sun",
|
||||||
|
mon: "Mon",
|
||||||
|
tue: "Tue",
|
||||||
|
wed: "Wed",
|
||||||
|
thu: "Thu",
|
||||||
|
fri: "Fri",
|
||||||
|
sat: "Sat",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
login: {
|
||||||
|
subtitle: "Gateway Dashboard",
|
||||||
|
passwordPlaceholder: "optional",
|
||||||
|
showToken: "Show token",
|
||||||
|
hideToken: "Hide token",
|
||||||
|
toggleTokenVisibility: "Toggle token visibility",
|
||||||
|
showPassword: "Show password",
|
||||||
|
hidePassword: "Hide password",
|
||||||
|
togglePasswordVisibility: "Toggle password visibility",
|
||||||
|
},
|
||||||
|
chat: {
|
||||||
|
disconnected: "Disconnected from gateway.",
|
||||||
|
refreshTitle: "Refresh chat data",
|
||||||
|
thinkingToggle: "Toggle assistant thinking/working output",
|
||||||
|
toolCallsToggle: "Toggle tool calls and tool results",
|
||||||
|
focusToggle: "Toggle focus mode (hide sidebar + page header)",
|
||||||
|
hideCronSessions: "Hide cron sessions",
|
||||||
|
showCronSessions: "Show cron sessions",
|
||||||
|
showCronSessionsHidden: "Show cron sessions ({count} hidden)",
|
||||||
|
onboardingDisabled: "Disabled during setup",
|
||||||
|
},
|
||||||
|
languages: {
|
||||||
|
en: "English",
|
||||||
|
zhCN: "简体中文 (Simplified Chinese)",
|
||||||
|
zhTW: "繁體中文 (Traditional Chinese)",
|
||||||
|
ptBR: "Português (Brazilian Portuguese)",
|
||||||
|
de: "Deutsch (German)",
|
||||||
|
es: "Español (Spanish)",
|
||||||
|
jaJP: "日本語 (Japanese)",
|
||||||
|
ko: "한국어 (Korean)",
|
||||||
|
fr: "Français (French)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
|
tr: "Türkçe (Turkish)",
|
||||||
|
uk: "Українська (Ukrainian)",
|
||||||
|
id: "Bahasa Indonesia (Indonesian)",
|
||||||
|
pl: "Polski (Polish)",
|
||||||
|
th: "ไทย (Thai)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
|
},
|
||||||
|
cron: {
|
||||||
|
summary: {
|
||||||
|
enabled: "Enabled",
|
||||||
|
yes: "Yes",
|
||||||
|
no: "No",
|
||||||
|
jobs: "Jobs",
|
||||||
|
nextWake: "Next wake",
|
||||||
|
refreshing: "Refreshing...",
|
||||||
|
refresh: "Refresh",
|
||||||
|
},
|
||||||
|
jobs: {
|
||||||
|
title: "Jobs",
|
||||||
|
subtitle: "All scheduled jobs stored in the gateway.",
|
||||||
|
shownOf: "{shown} shown of {total}",
|
||||||
|
searchJobs: "Search jobs",
|
||||||
|
searchPlaceholder: "Name, description, or agent",
|
||||||
|
enabled: "Enabled",
|
||||||
|
schedule: "Schedule",
|
||||||
|
lastRun: "Last run",
|
||||||
|
all: "All",
|
||||||
|
sort: "Sort",
|
||||||
|
nextRun: "Next run",
|
||||||
|
recentlyUpdated: "Recently updated",
|
||||||
|
name: "Name",
|
||||||
|
direction: "Direction",
|
||||||
|
ascending: "Ascending",
|
||||||
|
descending: "Descending",
|
||||||
|
reset: "Reset",
|
||||||
|
noMatching: "No matching jobs.",
|
||||||
|
loading: "Loading...",
|
||||||
|
loadMore: "Load more jobs",
|
||||||
|
},
|
||||||
|
runs: {
|
||||||
|
title: "Run history",
|
||||||
|
subtitleAll: "Latest runs across all jobs.",
|
||||||
|
subtitleJob: "Latest runs for {title}.",
|
||||||
|
scope: "Scope",
|
||||||
|
allJobs: "All jobs",
|
||||||
|
selectedJob: "Selected job",
|
||||||
|
searchRuns: "Search runs",
|
||||||
|
searchPlaceholder: "Summary, error, or job",
|
||||||
|
newestFirst: "Newest first",
|
||||||
|
oldestFirst: "Oldest first",
|
||||||
|
status: "Status",
|
||||||
|
delivery: "Delivery",
|
||||||
|
clear: "Clear",
|
||||||
|
allStatuses: "All statuses",
|
||||||
|
allDelivery: "All delivery",
|
||||||
|
selectJobHint: "Select a job to inspect run history.",
|
||||||
|
noMatching: "No matching runs.",
|
||||||
|
loadMore: "Load more runs",
|
||||||
|
runStatusOk: "OK",
|
||||||
|
runStatusError: "Error",
|
||||||
|
runStatusSkipped: "Skipped",
|
||||||
|
runStatusUnknown: "Unknown",
|
||||||
|
deliveryDelivered: "Delivered",
|
||||||
|
deliveryNotDelivered: "Not delivered",
|
||||||
|
deliveryUnknown: "Unknown",
|
||||||
|
deliveryNotRequested: "Not requested",
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
editJob: "Edit Job",
|
||||||
|
newJob: "New Job",
|
||||||
|
updateSubtitle: "Update the selected scheduled job.",
|
||||||
|
createSubtitle: "Create a scheduled wakeup or agent run.",
|
||||||
|
required: "Required",
|
||||||
|
requiredSr: "required",
|
||||||
|
basics: "Basics",
|
||||||
|
basicsSub: "Name it, choose the assistant, and set enabled state.",
|
||||||
|
fieldName: "Name",
|
||||||
|
description: "Description",
|
||||||
|
agentId: "Agent ID",
|
||||||
|
namePlaceholder: "Morning brief",
|
||||||
|
descriptionPlaceholder: "Optional context for this job",
|
||||||
|
agentPlaceholder: "main or ops",
|
||||||
|
agentHelp: "Start typing to pick a known agent, or enter a custom one.",
|
||||||
|
schedule: "Schedule",
|
||||||
|
scheduleSub: "Control when this job runs.",
|
||||||
|
every: "Every",
|
||||||
|
at: "At",
|
||||||
|
cronOption: "Cron",
|
||||||
|
runAt: "Run at",
|
||||||
|
unit: "Unit",
|
||||||
|
minutes: "Minutes",
|
||||||
|
hours: "Hours",
|
||||||
|
days: "Days",
|
||||||
|
expression: "Expression",
|
||||||
|
expressionPlaceholder: "0 7 * * *",
|
||||||
|
everyAmountPlaceholder: "30",
|
||||||
|
timezoneOptional: "Timezone (optional)",
|
||||||
|
timezonePlaceholder: "America/Los_Angeles",
|
||||||
|
timezoneHelp: "Pick a common timezone or enter any valid IANA timezone.",
|
||||||
|
jitterHelp: "Need jitter? Use Advanced → Stagger window / Stagger unit.",
|
||||||
|
execution: "Execution",
|
||||||
|
executionSub: "Choose when to wake, and what this job should do.",
|
||||||
|
session: "Session",
|
||||||
|
main: "Main",
|
||||||
|
isolated: "Isolated",
|
||||||
|
sessionHelp: "Main posts a system event. Isolated runs a dedicated agent turn.",
|
||||||
|
wakeMode: "Wake mode",
|
||||||
|
now: "Now",
|
||||||
|
nextHeartbeat: "Next heartbeat",
|
||||||
|
wakeModeHelp: "Now triggers immediately. Next heartbeat waits for the next cycle.",
|
||||||
|
payloadKind: "What should run?",
|
||||||
|
systemEvent: "Post message to main timeline",
|
||||||
|
agentTurn: "Run assistant task (isolated)",
|
||||||
|
systemEventHelp:
|
||||||
|
"Sends your text to the gateway main timeline (good for reminders/triggers).",
|
||||||
|
agentTurnHelp: "Starts an assistant run in its own session using your prompt.",
|
||||||
|
timeoutSeconds: "Timeout (seconds)",
|
||||||
|
timeoutPlaceholder: "Optional, e.g. 90",
|
||||||
|
timeoutHelp:
|
||||||
|
"Optional. Leave blank to use the gateway default timeout behavior for this run.",
|
||||||
|
mainTimelineMessage: "Main timeline message",
|
||||||
|
assistantTaskPrompt: "Assistant task prompt",
|
||||||
|
deliverySection: "Delivery",
|
||||||
|
deliverySub: "Choose where run summaries are sent.",
|
||||||
|
resultDelivery: "Result delivery",
|
||||||
|
announceDefault: "Announce summary (default)",
|
||||||
|
webhookPost: "Webhook POST",
|
||||||
|
noneInternal: "None (internal)",
|
||||||
|
deliveryHelp: "Announce posts a summary to chat. None keeps execution internal.",
|
||||||
|
webhookUrl: "Webhook URL",
|
||||||
|
channel: "Channel",
|
||||||
|
webhookPlaceholder: "https://example.com/cron",
|
||||||
|
channelHelp: "Choose which connected channel receives the summary.",
|
||||||
|
webhookHelp: "Send run summaries to a webhook endpoint.",
|
||||||
|
to: "To",
|
||||||
|
toPlaceholder: "+1555... or chat id",
|
||||||
|
toHelp: "Optional recipient override (chat id, phone, or user id).",
|
||||||
|
advanced: "Advanced",
|
||||||
|
advancedHelp:
|
||||||
|
"Optional overrides for delivery guarantees, schedule jitter, and model controls.",
|
||||||
|
deleteAfterRun: "Delete after run",
|
||||||
|
deleteAfterRunHelp: "Best for one-shot reminders that should auto-clean up.",
|
||||||
|
clearAgentOverride: "Clear agent override",
|
||||||
|
clearAgentHelp: "Force this job to use the gateway default assistant.",
|
||||||
|
exactTiming: "Exact timing (no stagger)",
|
||||||
|
exactTimingHelp: "Run on exact cron boundaries with no spread.",
|
||||||
|
staggerWindow: "Stagger window",
|
||||||
|
staggerUnit: "Stagger unit",
|
||||||
|
staggerPlaceholder: "30",
|
||||||
|
seconds: "Seconds",
|
||||||
|
model: "Model",
|
||||||
|
modelPlaceholder: "openai/gpt-5.2",
|
||||||
|
modelHelp: "Start typing to pick a known model, or enter a custom one.",
|
||||||
|
thinking: "Thinking",
|
||||||
|
thinkingPlaceholder: "low",
|
||||||
|
thinkingHelp: "Use a suggested level or enter a provider-specific value.",
|
||||||
|
bestEffortDelivery: "Best effort delivery",
|
||||||
|
bestEffortHelp: "Do not fail the job if delivery itself fails.",
|
||||||
|
cantAddYet: "Can't add job yet",
|
||||||
|
fillRequired: "Fill the required fields below to enable submit.",
|
||||||
|
fixFields: "Fix {count} field to continue.",
|
||||||
|
fixFieldsPlural: "Fix {count} fields to continue.",
|
||||||
|
saving: "Saving...",
|
||||||
|
saveChanges: "Save changes",
|
||||||
|
addJob: "Add job",
|
||||||
|
cancel: "Cancel",
|
||||||
|
},
|
||||||
|
jobList: {
|
||||||
|
allJobs: "all jobs",
|
||||||
|
selectJob: "(select a job)",
|
||||||
|
enabled: "enabled",
|
||||||
|
disabled: "disabled",
|
||||||
|
edit: "Edit",
|
||||||
|
clone: "Clone",
|
||||||
|
disable: "Disable",
|
||||||
|
enable: "Enable",
|
||||||
|
run: "Run",
|
||||||
|
history: "History",
|
||||||
|
remove: "Remove",
|
||||||
|
},
|
||||||
|
jobDetail: {
|
||||||
|
system: "System",
|
||||||
|
prompt: "Prompt",
|
||||||
|
delivery: "Delivery",
|
||||||
|
agent: "Agent",
|
||||||
|
},
|
||||||
|
jobState: {
|
||||||
|
status: "Status",
|
||||||
|
next: "Next",
|
||||||
|
last: "Last",
|
||||||
|
},
|
||||||
|
runEntry: {
|
||||||
|
noSummary: "No summary.",
|
||||||
|
runAt: "Run at",
|
||||||
|
openRunChat: "Open run chat",
|
||||||
|
next: "Next {rel}",
|
||||||
|
due: "Due {rel}",
|
||||||
|
},
|
||||||
|
errors: {
|
||||||
|
nameRequired: "Name is required.",
|
||||||
|
scheduleAtInvalid: "Enter a valid date/time.",
|
||||||
|
everyAmountInvalid: "Interval must be greater than 0.",
|
||||||
|
cronExprRequired: "Cron expression is required.",
|
||||||
|
staggerAmountInvalid: "Stagger must be greater than 0.",
|
||||||
|
systemTextRequired: "System text is required.",
|
||||||
|
agentMessageRequired: "Agent message is required.",
|
||||||
|
timeoutInvalid: "If set, timeout must be greater than 0 seconds.",
|
||||||
|
webhookUrlRequired: "Webhook URL is required.",
|
||||||
|
webhookUrlInvalid: "Webhook URL must start with http:// or https://.",
|
||||||
|
invalidRunTime: "Invalid run time.",
|
||||||
|
invalidIntervalAmount: "Invalid interval amount.",
|
||||||
|
cronExprRequiredShort: "Cron expression required.",
|
||||||
|
invalidStaggerAmount: "Invalid stagger amount.",
|
||||||
|
systemEventTextRequired: "System event text required.",
|
||||||
|
agentMessageRequiredShort: "Agent message required.",
|
||||||
|
nameRequiredShort: "Name required.",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
@@ -702,11 +702,16 @@ export const zh_CN: TranslationMap = {
|
|||||||
jaJP: "日本語(Japanese)",
|
jaJP: "日本語(Japanese)",
|
||||||
ko: "한국어(Korean)",
|
ko: "한국어(Korean)",
|
||||||
fr: "Français(French)",
|
fr: "Français(French)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe(Turkish)",
|
tr: "Türkçe(Turkish)",
|
||||||
uk: "乌克兰语(Ukrainian)",
|
uk: "乌克兰语(Ukrainian)",
|
||||||
id: "Bahasa Indonesia(Indonesian)",
|
id: "Bahasa Indonesia(Indonesian)",
|
||||||
pl: "Polski(Polish)",
|
pl: "Polski(Polish)",
|
||||||
th: "ไทย (泰语)",
|
th: "ไทย (泰语)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
@@ -703,11 +703,16 @@ export const zh_TW: TranslationMap = {
|
|||||||
jaJP: "日本語(Japanese)",
|
jaJP: "日本語(Japanese)",
|
||||||
ko: "한국어(Korean)",
|
ko: "한국어(Korean)",
|
||||||
fr: "Français(French)",
|
fr: "Français(French)",
|
||||||
|
ar: "العربية (Arabic)",
|
||||||
|
it: "Italiano (Italian)",
|
||||||
tr: "Türkçe(Turkish)",
|
tr: "Türkçe(Turkish)",
|
||||||
uk: "Українська (烏克蘭語)",
|
uk: "Українська (烏克蘭語)",
|
||||||
id: "Bahasa Indonesia(Indonesian)",
|
id: "Bahasa Indonesia(Indonesian)",
|
||||||
pl: "Polski(Polish)",
|
pl: "Polski(Polish)",
|
||||||
th: "ไทย(泰文)",
|
th: "ไทย(泰文)",
|
||||||
|
vi: "Tiếng Việt (Vietnamese)",
|
||||||
|
nl: "Nederlands (Dutch)",
|
||||||
|
fa: "فارسی (Persian)",
|
||||||
},
|
},
|
||||||
cron: {
|
cron: {
|
||||||
summary: {
|
summary: {
|
||||||
|
|||||||
@@ -1,18 +1,23 @@
|
|||||||
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
import { createStorageMock } from "../../test-helpers/storage.ts";
|
import { createStorageMock } from "../../test-helpers/storage.ts";
|
||||||
import * as translate from "../lib/translate.ts";
|
import * as translate from "../lib/translate.ts";
|
||||||
|
import { ar } from "../locales/ar.ts";
|
||||||
import { de } from "../locales/de.ts";
|
import { de } from "../locales/de.ts";
|
||||||
import { en } from "../locales/en.ts";
|
import { en } from "../locales/en.ts";
|
||||||
import { es } from "../locales/es.ts";
|
import { es } from "../locales/es.ts";
|
||||||
|
import { fa } from "../locales/fa.ts";
|
||||||
import { fr } from "../locales/fr.ts";
|
import { fr } from "../locales/fr.ts";
|
||||||
import { id } from "../locales/id.ts";
|
import { id } from "../locales/id.ts";
|
||||||
|
import { it } from "../locales/it.ts";
|
||||||
import { ja_JP } from "../locales/ja-JP.ts";
|
import { ja_JP } from "../locales/ja-JP.ts";
|
||||||
import { ko } from "../locales/ko.ts";
|
import { ko } from "../locales/ko.ts";
|
||||||
|
import { nl } from "../locales/nl.ts";
|
||||||
import { pl } from "../locales/pl.ts";
|
import { pl } from "../locales/pl.ts";
|
||||||
import { pt_BR } from "../locales/pt-BR.ts";
|
import { pt_BR } from "../locales/pt-BR.ts";
|
||||||
import { th } from "../locales/th.ts";
|
import { th } from "../locales/th.ts";
|
||||||
import { tr } from "../locales/tr.ts";
|
import { tr } from "../locales/tr.ts";
|
||||||
import { uk } from "../locales/uk.ts";
|
import { uk } from "../locales/uk.ts";
|
||||||
|
import { vi } from "../locales/vi.ts";
|
||||||
import { zh_CN } from "../locales/zh-CN.ts";
|
import { zh_CN } from "../locales/zh-CN.ts";
|
||||||
import { zh_TW } from "../locales/zh-TW.ts";
|
import { zh_TW } from "../locales/zh-TW.ts";
|
||||||
|
|
||||||
@@ -101,17 +106,22 @@ describe("i18n", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("keeps the version label available in shipped locales", () => {
|
it("keeps the version label available in shipped locales", () => {
|
||||||
|
expect((ar.common as { version?: string }).version).toBeTruthy();
|
||||||
expect((de.common as { version?: string }).version).toBeTruthy();
|
expect((de.common as { version?: string }).version).toBeTruthy();
|
||||||
expect((es.common as { version?: string }).version).toBeTruthy();
|
expect((es.common as { version?: string }).version).toBeTruthy();
|
||||||
|
expect((fa.common as { version?: string }).version).toBeTruthy();
|
||||||
expect((fr.common as { version?: string }).version).toBeTruthy();
|
expect((fr.common as { version?: string }).version).toBeTruthy();
|
||||||
expect((id.common as { version?: string }).version).toBeTruthy();
|
expect((id.common as { version?: string }).version).toBeTruthy();
|
||||||
|
expect((it.common as { version?: string }).version).toBeTruthy();
|
||||||
expect((ja_JP.common as { version?: string }).version).toBeTruthy();
|
expect((ja_JP.common as { version?: string }).version).toBeTruthy();
|
||||||
expect((ko.common as { version?: string }).version).toBeTruthy();
|
expect((ko.common as { version?: string }).version).toBeTruthy();
|
||||||
|
expect((nl.common as { version?: string }).version).toBeTruthy();
|
||||||
expect((pl.common as { version?: string }).version).toBeTruthy();
|
expect((pl.common as { version?: string }).version).toBeTruthy();
|
||||||
expect((pt_BR.common as { version?: string }).version).toBeTruthy();
|
expect((pt_BR.common as { version?: string }).version).toBeTruthy();
|
||||||
expect((th.common as { version?: string }).version).toBeTruthy();
|
expect((th.common as { version?: string }).version).toBeTruthy();
|
||||||
expect((tr.common as { version?: string }).version).toBeTruthy();
|
expect((tr.common as { version?: string }).version).toBeTruthy();
|
||||||
expect((uk.common as { version?: string }).version).toBeTruthy();
|
expect((uk.common as { version?: string }).version).toBeTruthy();
|
||||||
|
expect((vi.common as { version?: string }).version).toBeTruthy();
|
||||||
expect((zh_CN.common as { version?: string }).version).toBeTruthy();
|
expect((zh_CN.common as { version?: string }).version).toBeTruthy();
|
||||||
expect((zh_TW.common as { version?: string }).version).toBeTruthy();
|
expect((zh_TW.common as { version?: string }).version).toBeTruthy();
|
||||||
});
|
});
|
||||||
@@ -119,17 +129,22 @@ describe("i18n", () => {
|
|||||||
it("keeps shipped locales structurally aligned with English", () => {
|
it("keeps shipped locales structurally aligned with English", () => {
|
||||||
const englishKeys = flatten(en);
|
const englishKeys = flatten(en);
|
||||||
for (const [locale, value] of Object.entries({
|
for (const [locale, value] of Object.entries({
|
||||||
|
ar,
|
||||||
de,
|
de,
|
||||||
es,
|
es,
|
||||||
|
fa,
|
||||||
fr,
|
fr,
|
||||||
id,
|
id,
|
||||||
|
it,
|
||||||
ja_JP,
|
ja_JP,
|
||||||
ko,
|
ko,
|
||||||
|
nl,
|
||||||
pl,
|
pl,
|
||||||
pt_BR,
|
pt_BR,
|
||||||
th,
|
th,
|
||||||
tr,
|
tr,
|
||||||
uk,
|
uk,
|
||||||
|
vi,
|
||||||
zh_CN,
|
zh_CN,
|
||||||
zh_TW,
|
zh_TW,
|
||||||
})) {
|
})) {
|
||||||
|
|||||||
Reference in New Issue
Block a user