mirror of
https://github.com/moltbot/moltbot.git
synced 2026-04-21 13:44:03 +00:00
fix(ui): localize more control ui strings
This commit is contained in:
@@ -233,8 +233,8 @@ Docs: https://docs.openclaw.ai
|
||||
- Plugins: suppress trust-warning noise during non-activating snapshot and CLI metadata loads. (#61427) Thanks @gumadeiras.
|
||||
- Agents/video generation: accept `agents.defaults.videoGenerationModel` in strict config validation and `openclaw config set/get`, so gateways using `video_generate` no longer fail to boot after enabling a video model.
|
||||
- Matrix/streaming: add a quiet preview mode for streamed Matrix replies, keep legacy `partial` preview-first behavior, and finalize quiet media captions correctly so previews stop notifying early without dropping final text semantics. (#61450) Thanks @gumadeiras.
|
||||
|
||||
- Gateway/shutdown: bound websocket-server shutdown even when no tracked clients remain, so gateway restarts stop hanging until the watchdog kills the process. (#61565) Thanks @mbelinky.
|
||||
- Control UI/multilingual: localize the remaining shared channel, instances, nodes, and gateway-confirmation strings so the dashboard stops mixing translated UI with hardcoded English labels. Thanks @vincentkoc.
|
||||
|
||||
## 2026.4.2
|
||||
|
||||
|
||||
@@ -1,17 +1,67 @@
|
||||
{
|
||||
"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",
|
||||
"common.active",
|
||||
"common.audience",
|
||||
"common.authAge",
|
||||
"common.baseUrl",
|
||||
"common.call",
|
||||
"common.cancel",
|
||||
"common.configured",
|
||||
"common.confirm",
|
||||
"common.connected",
|
||||
"common.credential",
|
||||
"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.no",
|
||||
"common.offline",
|
||||
@@ -22,12 +72,22 @@
|
||||
"common.probeOk",
|
||||
"common.publicKey",
|
||||
"common.refreshing",
|
||||
"common.relink",
|
||||
"common.reload",
|
||||
"common.reloadConfig",
|
||||
"common.running",
|
||||
"common.save",
|
||||
"common.saveAndPublish",
|
||||
"common.saving",
|
||||
"common.secondsAgo",
|
||||
"common.settingsSections",
|
||||
"common.showAdvanced",
|
||||
"common.showQr",
|
||||
"common.unsavedChanges",
|
||||
"common.unselect",
|
||||
"common.version",
|
||||
"common.waitForScan",
|
||||
"common.working",
|
||||
"common.yes",
|
||||
"cron.form.cronOption",
|
||||
"cron.form.everyAmountPlaceholder",
|
||||
@@ -88,9 +148,24 @@
|
||||
"dreaming.status.promotedSuffix",
|
||||
"dreaming.tabs.diary",
|
||||
"dreaming.tabs.scene",
|
||||
"instances.hideHosts",
|
||||
"instances.lastInput",
|
||||
"instances.noInstances",
|
||||
"instances.reason",
|
||||
"instances.showHosts",
|
||||
"instances.subtitle",
|
||||
"instances.title",
|
||||
"instances.toggleHostVisibility",
|
||||
"login.passwordPlaceholder",
|
||||
"nav.agent",
|
||||
"nav.chat",
|
||||
"nodes.binding.defaultBinding",
|
||||
"nodes.binding.defaultBindingHint",
|
||||
"nodes.binding.execNodeBinding",
|
||||
"nodes.binding.execNodeBindingSubtitle",
|
||||
"nodes.binding.formModeHint",
|
||||
"nodes.binding.loadConfigHint",
|
||||
"nodes.binding.node",
|
||||
"overview.cards.skills",
|
||||
"overview.quickActions.terminal",
|
||||
"overview.snapshot.status",
|
||||
@@ -114,12 +189,12 @@
|
||||
"usage.presets.last30d",
|
||||
"usage.presets.last7d"
|
||||
],
|
||||
"generatedAt": "2026-04-06T01:49:59.211Z",
|
||||
"generatedAt": "2026-04-06T02:05:57.570Z",
|
||||
"locale": "de",
|
||||
"model": "",
|
||||
"provider": "",
|
||||
"sourceHash": "a5a5f4f337bf840323582ead83e9abd0b64becd5be8d0ff93ef631af457dfac7",
|
||||
"totalKeys": 577,
|
||||
"sourceHash": "aa6728f46c7479ccfd4277a8d1614ba5f9d1d690c9052a5654c066e16218b768",
|
||||
"totalKeys": 652,
|
||||
"translatedKeys": 464,
|
||||
"workflow": 1
|
||||
}
|
||||
|
||||
@@ -1,17 +1,67 @@
|
||||
{
|
||||
"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",
|
||||
"common.active",
|
||||
"common.audience",
|
||||
"common.authAge",
|
||||
"common.baseUrl",
|
||||
"common.call",
|
||||
"common.cancel",
|
||||
"common.configured",
|
||||
"common.confirm",
|
||||
"common.connected",
|
||||
"common.credential",
|
||||
"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.no",
|
||||
"common.probe",
|
||||
@@ -19,11 +69,21 @@
|
||||
"common.probeOk",
|
||||
"common.publicKey",
|
||||
"common.refreshing",
|
||||
"common.relink",
|
||||
"common.reload",
|
||||
"common.reloadConfig",
|
||||
"common.running",
|
||||
"common.save",
|
||||
"common.saveAndPublish",
|
||||
"common.saving",
|
||||
"common.secondsAgo",
|
||||
"common.settingsSections",
|
||||
"common.showAdvanced",
|
||||
"common.showQr",
|
||||
"common.unsavedChanges",
|
||||
"common.unselect",
|
||||
"common.waitForScan",
|
||||
"common.working",
|
||||
"common.yes",
|
||||
"cron.form.cronOption",
|
||||
"cron.form.everyAmountPlaceholder",
|
||||
@@ -75,8 +135,23 @@
|
||||
"dreaming.status.promotedSuffix",
|
||||
"dreaming.tabs.diary",
|
||||
"dreaming.tabs.scene",
|
||||
"instances.hideHosts",
|
||||
"instances.lastInput",
|
||||
"instances.noInstances",
|
||||
"instances.reason",
|
||||
"instances.showHosts",
|
||||
"instances.subtitle",
|
||||
"instances.title",
|
||||
"instances.toggleHostVisibility",
|
||||
"nav.chat",
|
||||
"nav.control",
|
||||
"nodes.binding.defaultBinding",
|
||||
"nodes.binding.defaultBindingHint",
|
||||
"nodes.binding.execNodeBinding",
|
||||
"nodes.binding.execNodeBindingSubtitle",
|
||||
"nodes.binding.formModeHint",
|
||||
"nodes.binding.loadConfigHint",
|
||||
"nodes.binding.node",
|
||||
"overview.cards.skills",
|
||||
"overview.notes.tailscaleTitle",
|
||||
"overview.quickActions.terminal",
|
||||
@@ -97,12 +172,12 @@
|
||||
"usage.presets.last30d",
|
||||
"usage.presets.last7d"
|
||||
],
|
||||
"generatedAt": "2026-04-06T01:49:59.510Z",
|
||||
"generatedAt": "2026-04-06T02:05:57.828Z",
|
||||
"locale": "es",
|
||||
"model": "",
|
||||
"provider": "",
|
||||
"sourceHash": "a5a5f4f337bf840323582ead83e9abd0b64becd5be8d0ff93ef631af457dfac7",
|
||||
"totalKeys": 577,
|
||||
"sourceHash": "aa6728f46c7479ccfd4277a8d1614ba5f9d1d690c9052a5654c066e16218b768",
|
||||
"totalKeys": 652,
|
||||
"translatedKeys": 481,
|
||||
"workflow": 1
|
||||
}
|
||||
|
||||
@@ -1,17 +1,67 @@
|
||||
{
|
||||
"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",
|
||||
"common.active",
|
||||
"common.audience",
|
||||
"common.authAge",
|
||||
"common.baseUrl",
|
||||
"common.call",
|
||||
"common.cancel",
|
||||
"common.configured",
|
||||
"common.confirm",
|
||||
"common.connected",
|
||||
"common.credential",
|
||||
"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",
|
||||
@@ -21,12 +71,22 @@
|
||||
"common.probeOk",
|
||||
"common.publicKey",
|
||||
"common.refreshing",
|
||||
"common.relink",
|
||||
"common.reload",
|
||||
"common.reloadConfig",
|
||||
"common.running",
|
||||
"common.save",
|
||||
"common.saveAndPublish",
|
||||
"common.saving",
|
||||
"common.secondsAgo",
|
||||
"common.settingsSections",
|
||||
"common.showAdvanced",
|
||||
"common.showQr",
|
||||
"common.unsavedChanges",
|
||||
"common.unselect",
|
||||
"common.version",
|
||||
"common.waitForScan",
|
||||
"common.working",
|
||||
"common.yes",
|
||||
"cron.form.cronOption",
|
||||
"cron.form.description",
|
||||
@@ -84,8 +144,23 @@
|
||||
"dreaming.status.promotedSuffix",
|
||||
"dreaming.tabs.diary",
|
||||
"dreaming.tabs.scene",
|
||||
"instances.hideHosts",
|
||||
"instances.lastInput",
|
||||
"instances.noInstances",
|
||||
"instances.reason",
|
||||
"instances.showHosts",
|
||||
"instances.subtitle",
|
||||
"instances.title",
|
||||
"instances.toggleHostVisibility",
|
||||
"nav.agent",
|
||||
"nav.chat",
|
||||
"nodes.binding.defaultBinding",
|
||||
"nodes.binding.defaultBindingHint",
|
||||
"nodes.binding.execNodeBinding",
|
||||
"nodes.binding.execNodeBindingSubtitle",
|
||||
"nodes.binding.formModeHint",
|
||||
"nodes.binding.loadConfigHint",
|
||||
"nodes.binding.node",
|
||||
"overview.attention.title",
|
||||
"overview.cards.skills",
|
||||
"overview.notes.tailscaleTitle",
|
||||
@@ -124,12 +199,12 @@
|
||||
"usage.overview.sessions",
|
||||
"usage.sessions.title"
|
||||
],
|
||||
"generatedAt": "2026-04-06T01:50:00.328Z",
|
||||
"generatedAt": "2026-04-06T02:05:58.613Z",
|
||||
"locale": "fr",
|
||||
"model": "",
|
||||
"provider": "",
|
||||
"sourceHash": "a5a5f4f337bf840323582ead83e9abd0b64becd5be8d0ff93ef631af457dfac7",
|
||||
"totalKeys": 577,
|
||||
"sourceHash": "aa6728f46c7479ccfd4277a8d1614ba5f9d1d690c9052a5654c066e16218b768",
|
||||
"totalKeys": 652,
|
||||
"translatedKeys": 454,
|
||||
"workflow": 1
|
||||
}
|
||||
|
||||
@@ -1,17 +1,67 @@
|
||||
{
|
||||
"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",
|
||||
"common.active",
|
||||
"common.audience",
|
||||
"common.authAge",
|
||||
"common.baseUrl",
|
||||
"common.call",
|
||||
"common.cancel",
|
||||
"common.configured",
|
||||
"common.confirm",
|
||||
"common.connected",
|
||||
"common.credential",
|
||||
"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",
|
||||
@@ -23,11 +73,21 @@
|
||||
"common.probeOk",
|
||||
"common.publicKey",
|
||||
"common.refreshing",
|
||||
"common.relink",
|
||||
"common.reload",
|
||||
"common.reloadConfig",
|
||||
"common.running",
|
||||
"common.save",
|
||||
"common.saveAndPublish",
|
||||
"common.saving",
|
||||
"common.secondsAgo",
|
||||
"common.settingsSections",
|
||||
"common.showAdvanced",
|
||||
"common.showQr",
|
||||
"common.unsavedChanges",
|
||||
"common.unselect",
|
||||
"common.waitForScan",
|
||||
"common.working",
|
||||
"common.yes",
|
||||
"cron.form.cronOption",
|
||||
"cron.form.everyAmountPlaceholder",
|
||||
@@ -86,6 +146,14 @@
|
||||
"dreaming.status.promotedSuffix",
|
||||
"dreaming.tabs.diary",
|
||||
"dreaming.tabs.scene",
|
||||
"instances.hideHosts",
|
||||
"instances.lastInput",
|
||||
"instances.noInstances",
|
||||
"instances.reason",
|
||||
"instances.showHosts",
|
||||
"instances.subtitle",
|
||||
"instances.title",
|
||||
"instances.toggleHostVisibility",
|
||||
"languages.de",
|
||||
"languages.en",
|
||||
"languages.es",
|
||||
@@ -99,6 +167,13 @@
|
||||
"languages.zhCN",
|
||||
"languages.zhTW",
|
||||
"nav.chat",
|
||||
"nodes.binding.defaultBinding",
|
||||
"nodes.binding.defaultBindingHint",
|
||||
"nodes.binding.execNodeBinding",
|
||||
"nodes.binding.execNodeBindingSubtitle",
|
||||
"nodes.binding.formModeHint",
|
||||
"nodes.binding.loadConfigHint",
|
||||
"nodes.binding.node",
|
||||
"overview.cards.skills",
|
||||
"overview.notes.tailscaleTitle",
|
||||
"overview.quickActions.terminal",
|
||||
@@ -127,12 +202,12 @@
|
||||
"usage.overview.throughput",
|
||||
"usage.sessions.total"
|
||||
],
|
||||
"generatedAt": "2026-04-06T01:50:01.318Z",
|
||||
"generatedAt": "2026-04-06T02:05:59.429Z",
|
||||
"locale": "id",
|
||||
"model": "",
|
||||
"provider": "",
|
||||
"sourceHash": "a5a5f4f337bf840323582ead83e9abd0b64becd5be8d0ff93ef631af457dfac7",
|
||||
"totalKeys": 577,
|
||||
"sourceHash": "aa6728f46c7479ccfd4277a8d1614ba5f9d1d690c9052a5654c066e16218b768",
|
||||
"totalKeys": 652,
|
||||
"translatedKeys": 451,
|
||||
"workflow": 1
|
||||
}
|
||||
|
||||
@@ -1,17 +1,67 @@
|
||||
{
|
||||
"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",
|
||||
"common.active",
|
||||
"common.audience",
|
||||
"common.authAge",
|
||||
"common.baseUrl",
|
||||
"common.call",
|
||||
"common.cancel",
|
||||
"common.configured",
|
||||
"common.confirm",
|
||||
"common.connected",
|
||||
"common.credential",
|
||||
"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",
|
||||
@@ -21,11 +71,21 @@
|
||||
"common.probeOk",
|
||||
"common.publicKey",
|
||||
"common.refreshing",
|
||||
"common.relink",
|
||||
"common.reload",
|
||||
"common.reloadConfig",
|
||||
"common.running",
|
||||
"common.save",
|
||||
"common.saveAndPublish",
|
||||
"common.saving",
|
||||
"common.secondsAgo",
|
||||
"common.settingsSections",
|
||||
"common.showAdvanced",
|
||||
"common.showQr",
|
||||
"common.unsavedChanges",
|
||||
"common.unselect",
|
||||
"common.waitForScan",
|
||||
"common.working",
|
||||
"common.yes",
|
||||
"cron.form.cronOption",
|
||||
"cron.form.everyAmountPlaceholder",
|
||||
@@ -84,6 +144,14 @@
|
||||
"dreaming.status.promotedSuffix",
|
||||
"dreaming.tabs.diary",
|
||||
"dreaming.tabs.scene",
|
||||
"instances.hideHosts",
|
||||
"instances.lastInput",
|
||||
"instances.noInstances",
|
||||
"instances.reason",
|
||||
"instances.showHosts",
|
||||
"instances.subtitle",
|
||||
"instances.title",
|
||||
"instances.toggleHostVisibility",
|
||||
"languages.de",
|
||||
"languages.en",
|
||||
"languages.es",
|
||||
@@ -96,6 +164,13 @@
|
||||
"languages.tr",
|
||||
"languages.zhCN",
|
||||
"languages.zhTW",
|
||||
"nodes.binding.defaultBinding",
|
||||
"nodes.binding.defaultBindingHint",
|
||||
"nodes.binding.execNodeBinding",
|
||||
"nodes.binding.execNodeBindingSubtitle",
|
||||
"nodes.binding.formModeHint",
|
||||
"nodes.binding.loadConfigHint",
|
||||
"nodes.binding.node",
|
||||
"overview.access.wsUrl",
|
||||
"overview.cards.skills",
|
||||
"overview.notes.tailscaleTitle",
|
||||
@@ -111,12 +186,12 @@
|
||||
"usage.filters.timeZoneUtc",
|
||||
"usage.overview.tokensPerMinute"
|
||||
],
|
||||
"generatedAt": "2026-04-06T01:49:59.804Z",
|
||||
"generatedAt": "2026-04-06T02:05:58.089Z",
|
||||
"locale": "ja-JP",
|
||||
"model": "",
|
||||
"provider": "",
|
||||
"sourceHash": "a5a5f4f337bf840323582ead83e9abd0b64becd5be8d0ff93ef631af457dfac7",
|
||||
"totalKeys": 577,
|
||||
"sourceHash": "aa6728f46c7479ccfd4277a8d1614ba5f9d1d690c9052a5654c066e16218b768",
|
||||
"totalKeys": 652,
|
||||
"translatedKeys": 467,
|
||||
"workflow": 1
|
||||
}
|
||||
|
||||
@@ -1,17 +1,67 @@
|
||||
{
|
||||
"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",
|
||||
"common.active",
|
||||
"common.audience",
|
||||
"common.authAge",
|
||||
"common.baseUrl",
|
||||
"common.call",
|
||||
"common.cancel",
|
||||
"common.configured",
|
||||
"common.confirm",
|
||||
"common.connected",
|
||||
"common.credential",
|
||||
"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",
|
||||
@@ -20,11 +70,21 @@
|
||||
"common.probeOk",
|
||||
"common.publicKey",
|
||||
"common.refreshing",
|
||||
"common.relink",
|
||||
"common.reload",
|
||||
"common.reloadConfig",
|
||||
"common.running",
|
||||
"common.save",
|
||||
"common.saveAndPublish",
|
||||
"common.saving",
|
||||
"common.secondsAgo",
|
||||
"common.settingsSections",
|
||||
"common.showAdvanced",
|
||||
"common.showQr",
|
||||
"common.unsavedChanges",
|
||||
"common.unselect",
|
||||
"common.waitForScan",
|
||||
"common.working",
|
||||
"common.yes",
|
||||
"cron.form.cronOption",
|
||||
"cron.form.everyAmountPlaceholder",
|
||||
@@ -76,6 +136,14 @@
|
||||
"dreaming.status.promotedSuffix",
|
||||
"dreaming.tabs.diary",
|
||||
"dreaming.tabs.scene",
|
||||
"instances.hideHosts",
|
||||
"instances.lastInput",
|
||||
"instances.noInstances",
|
||||
"instances.reason",
|
||||
"instances.showHosts",
|
||||
"instances.subtitle",
|
||||
"instances.title",
|
||||
"instances.toggleHostVisibility",
|
||||
"languages.de",
|
||||
"languages.en",
|
||||
"languages.es",
|
||||
@@ -89,6 +157,13 @@
|
||||
"languages.zhCN",
|
||||
"languages.zhTW",
|
||||
"nav.control",
|
||||
"nodes.binding.defaultBinding",
|
||||
"nodes.binding.defaultBindingHint",
|
||||
"nodes.binding.execNodeBinding",
|
||||
"nodes.binding.execNodeBindingSubtitle",
|
||||
"nodes.binding.formModeHint",
|
||||
"nodes.binding.loadConfigHint",
|
||||
"nodes.binding.node",
|
||||
"overview.access.token",
|
||||
"overview.access.wsUrl",
|
||||
"overview.cards.skills",
|
||||
@@ -105,12 +180,12 @@
|
||||
"usage.overview.tokensPerMinute",
|
||||
"usage.overview.user"
|
||||
],
|
||||
"generatedAt": "2026-04-06T01:50:00.073Z",
|
||||
"generatedAt": "2026-04-06T02:05:58.349Z",
|
||||
"locale": "ko",
|
||||
"model": "",
|
||||
"provider": "",
|
||||
"sourceHash": "a5a5f4f337bf840323582ead83e9abd0b64becd5be8d0ff93ef631af457dfac7",
|
||||
"totalKeys": 577,
|
||||
"sourceHash": "aa6728f46c7479ccfd4277a8d1614ba5f9d1d690c9052a5654c066e16218b768",
|
||||
"totalKeys": 652,
|
||||
"translatedKeys": 473,
|
||||
"workflow": 1
|
||||
}
|
||||
|
||||
@@ -1,17 +1,67 @@
|
||||
{
|
||||
"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",
|
||||
"common.active",
|
||||
"common.audience",
|
||||
"common.authAge",
|
||||
"common.baseUrl",
|
||||
"common.call",
|
||||
"common.cancel",
|
||||
"common.configured",
|
||||
"common.confirm",
|
||||
"common.connected",
|
||||
"common.credential",
|
||||
"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.no",
|
||||
"common.offline",
|
||||
@@ -22,11 +72,21 @@
|
||||
"common.probeOk",
|
||||
"common.publicKey",
|
||||
"common.refreshing",
|
||||
"common.relink",
|
||||
"common.reload",
|
||||
"common.reloadConfig",
|
||||
"common.running",
|
||||
"common.save",
|
||||
"common.saveAndPublish",
|
||||
"common.saving",
|
||||
"common.secondsAgo",
|
||||
"common.settingsSections",
|
||||
"common.showAdvanced",
|
||||
"common.showQr",
|
||||
"common.unsavedChanges",
|
||||
"common.unselect",
|
||||
"common.waitForScan",
|
||||
"common.working",
|
||||
"common.yes",
|
||||
"cron.form.cronOption",
|
||||
"cron.form.everyAmountPlaceholder",
|
||||
@@ -83,6 +143,14 @@
|
||||
"dreaming.status.promotedSuffix",
|
||||
"dreaming.tabs.diary",
|
||||
"dreaming.tabs.scene",
|
||||
"instances.hideHosts",
|
||||
"instances.lastInput",
|
||||
"instances.noInstances",
|
||||
"instances.reason",
|
||||
"instances.showHosts",
|
||||
"instances.subtitle",
|
||||
"instances.title",
|
||||
"instances.toggleHostVisibility",
|
||||
"languages.de",
|
||||
"languages.en",
|
||||
"languages.es",
|
||||
@@ -96,6 +164,13 @@
|
||||
"languages.zhCN",
|
||||
"languages.zhTW",
|
||||
"nav.agent",
|
||||
"nodes.binding.defaultBinding",
|
||||
"nodes.binding.defaultBindingHint",
|
||||
"nodes.binding.execNodeBinding",
|
||||
"nodes.binding.execNodeBindingSubtitle",
|
||||
"nodes.binding.formModeHint",
|
||||
"nodes.binding.loadConfigHint",
|
||||
"nodes.binding.node",
|
||||
"overview.cards.skills",
|
||||
"overview.notes.tailscaleTitle",
|
||||
"overview.quickActions.terminal",
|
||||
@@ -117,12 +192,12 @@
|
||||
"usage.presets.last30d",
|
||||
"usage.presets.last7d"
|
||||
],
|
||||
"generatedAt": "2026-04-06T01:50:01.601Z",
|
||||
"generatedAt": "2026-04-06T02:05:59.759Z",
|
||||
"locale": "pl",
|
||||
"model": "",
|
||||
"provider": "",
|
||||
"sourceHash": "a5a5f4f337bf840323582ead83e9abd0b64becd5be8d0ff93ef631af457dfac7",
|
||||
"totalKeys": 577,
|
||||
"sourceHash": "aa6728f46c7479ccfd4277a8d1614ba5f9d1d690c9052a5654c066e16218b768",
|
||||
"totalKeys": 652,
|
||||
"translatedKeys": 461,
|
||||
"workflow": 1
|
||||
}
|
||||
|
||||
@@ -1,18 +1,68 @@
|
||||
{
|
||||
"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",
|
||||
"common.active",
|
||||
"common.audience",
|
||||
"common.authAge",
|
||||
"common.baseUrl",
|
||||
"common.call",
|
||||
"common.cancel",
|
||||
"common.configured",
|
||||
"common.confirm",
|
||||
"common.connected",
|
||||
"common.credential",
|
||||
"common.docs",
|
||||
"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.no",
|
||||
"common.offline",
|
||||
@@ -23,11 +73,21 @@
|
||||
"common.probeOk",
|
||||
"common.publicKey",
|
||||
"common.refreshing",
|
||||
"common.relink",
|
||||
"common.reload",
|
||||
"common.reloadConfig",
|
||||
"common.running",
|
||||
"common.save",
|
||||
"common.saveAndPublish",
|
||||
"common.saving",
|
||||
"common.secondsAgo",
|
||||
"common.settingsSections",
|
||||
"common.showAdvanced",
|
||||
"common.showQr",
|
||||
"common.unsavedChanges",
|
||||
"common.unselect",
|
||||
"common.waitForScan",
|
||||
"common.working",
|
||||
"common.yes",
|
||||
"cron.form.cronOption",
|
||||
"cron.form.everyAmountPlaceholder",
|
||||
@@ -81,6 +141,14 @@
|
||||
"dreaming.status.promotedSuffix",
|
||||
"dreaming.tabs.diary",
|
||||
"dreaming.tabs.scene",
|
||||
"instances.hideHosts",
|
||||
"instances.lastInput",
|
||||
"instances.noInstances",
|
||||
"instances.reason",
|
||||
"instances.showHosts",
|
||||
"instances.subtitle",
|
||||
"instances.title",
|
||||
"instances.toggleHostVisibility",
|
||||
"languages.en",
|
||||
"languages.fr",
|
||||
"languages.id",
|
||||
@@ -89,6 +157,13 @@
|
||||
"languages.pl",
|
||||
"languages.tr",
|
||||
"nav.chat",
|
||||
"nodes.binding.defaultBinding",
|
||||
"nodes.binding.defaultBindingHint",
|
||||
"nodes.binding.execNodeBinding",
|
||||
"nodes.binding.execNodeBindingSubtitle",
|
||||
"nodes.binding.formModeHint",
|
||||
"nodes.binding.loadConfigHint",
|
||||
"nodes.binding.node",
|
||||
"overview.notes.tailscaleTitle",
|
||||
"overview.quickActions.terminal",
|
||||
"overview.snapshot.status",
|
||||
@@ -110,12 +185,12 @@
|
||||
"usage.presets.last30d",
|
||||
"usage.presets.last7d"
|
||||
],
|
||||
"generatedAt": "2026-04-06T01:49:58.896Z",
|
||||
"generatedAt": "2026-04-06T02:05:57.310Z",
|
||||
"locale": "pt-BR",
|
||||
"model": "",
|
||||
"provider": "",
|
||||
"sourceHash": "a5a5f4f337bf840323582ead83e9abd0b64becd5be8d0ff93ef631af457dfac7",
|
||||
"totalKeys": 577,
|
||||
"sourceHash": "aa6728f46c7479ccfd4277a8d1614ba5f9d1d690c9052a5654c066e16218b768",
|
||||
"totalKeys": 652,
|
||||
"translatedKeys": 468,
|
||||
"workflow": 1
|
||||
}
|
||||
|
||||
@@ -1,17 +1,67 @@
|
||||
{
|
||||
"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",
|
||||
"common.active",
|
||||
"common.audience",
|
||||
"common.authAge",
|
||||
"common.baseUrl",
|
||||
"common.call",
|
||||
"common.cancel",
|
||||
"common.configured",
|
||||
"common.confirm",
|
||||
"common.connected",
|
||||
"common.credential",
|
||||
"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.no",
|
||||
"common.probe",
|
||||
@@ -19,11 +69,21 @@
|
||||
"common.probeOk",
|
||||
"common.publicKey",
|
||||
"common.refreshing",
|
||||
"common.relink",
|
||||
"common.reload",
|
||||
"common.reloadConfig",
|
||||
"common.running",
|
||||
"common.save",
|
||||
"common.saveAndPublish",
|
||||
"common.saving",
|
||||
"common.secondsAgo",
|
||||
"common.settingsSections",
|
||||
"common.showAdvanced",
|
||||
"common.showQr",
|
||||
"common.unsavedChanges",
|
||||
"common.unselect",
|
||||
"common.waitForScan",
|
||||
"common.working",
|
||||
"common.yes",
|
||||
"cron.form.cronOption",
|
||||
"cron.form.everyAmountPlaceholder",
|
||||
@@ -75,6 +135,21 @@
|
||||
"dreaming.status.promotedSuffix",
|
||||
"dreaming.tabs.diary",
|
||||
"dreaming.tabs.scene",
|
||||
"instances.hideHosts",
|
||||
"instances.lastInput",
|
||||
"instances.noInstances",
|
||||
"instances.reason",
|
||||
"instances.showHosts",
|
||||
"instances.subtitle",
|
||||
"instances.title",
|
||||
"instances.toggleHostVisibility",
|
||||
"nodes.binding.defaultBinding",
|
||||
"nodes.binding.defaultBindingHint",
|
||||
"nodes.binding.execNodeBinding",
|
||||
"nodes.binding.execNodeBindingSubtitle",
|
||||
"nodes.binding.formModeHint",
|
||||
"nodes.binding.loadConfigHint",
|
||||
"nodes.binding.node",
|
||||
"overview.access.token",
|
||||
"overview.access.wsUrl",
|
||||
"overview.cards.skills",
|
||||
@@ -88,12 +163,12 @@
|
||||
"usage.filters.model",
|
||||
"usage.filters.timeZoneUtc"
|
||||
],
|
||||
"generatedAt": "2026-04-06T01:50:00.704Z",
|
||||
"generatedAt": "2026-04-06T02:05:58.874Z",
|
||||
"locale": "tr",
|
||||
"model": "",
|
||||
"provider": "",
|
||||
"sourceHash": "a5a5f4f337bf840323582ead83e9abd0b64becd5be8d0ff93ef631af457dfac7",
|
||||
"totalKeys": 577,
|
||||
"sourceHash": "aa6728f46c7479ccfd4277a8d1614ba5f9d1d690c9052a5654c066e16218b768",
|
||||
"totalKeys": 652,
|
||||
"translatedKeys": 490,
|
||||
"workflow": 1
|
||||
}
|
||||
|
||||
@@ -1,17 +1,67 @@
|
||||
{
|
||||
"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",
|
||||
"common.active",
|
||||
"common.audience",
|
||||
"common.authAge",
|
||||
"common.baseUrl",
|
||||
"common.call",
|
||||
"common.cancel",
|
||||
"common.configured",
|
||||
"common.confirm",
|
||||
"common.connected",
|
||||
"common.credential",
|
||||
"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.no",
|
||||
"common.ok",
|
||||
@@ -20,11 +70,21 @@
|
||||
"common.probeOk",
|
||||
"common.publicKey",
|
||||
"common.refreshing",
|
||||
"common.relink",
|
||||
"common.reload",
|
||||
"common.reloadConfig",
|
||||
"common.running",
|
||||
"common.save",
|
||||
"common.saveAndPublish",
|
||||
"common.saving",
|
||||
"common.secondsAgo",
|
||||
"common.settingsSections",
|
||||
"common.showAdvanced",
|
||||
"common.showQr",
|
||||
"common.unsavedChanges",
|
||||
"common.unselect",
|
||||
"common.waitForScan",
|
||||
"common.working",
|
||||
"common.yes",
|
||||
"cron.form.cronOption",
|
||||
"cron.form.everyAmountPlaceholder",
|
||||
@@ -76,6 +136,14 @@
|
||||
"dreaming.status.promotedSuffix",
|
||||
"dreaming.tabs.diary",
|
||||
"dreaming.tabs.scene",
|
||||
"instances.hideHosts",
|
||||
"instances.lastInput",
|
||||
"instances.noInstances",
|
||||
"instances.reason",
|
||||
"instances.showHosts",
|
||||
"instances.subtitle",
|
||||
"instances.title",
|
||||
"instances.toggleHostVisibility",
|
||||
"languages.de",
|
||||
"languages.en",
|
||||
"languages.es",
|
||||
@@ -90,18 +158,25 @@
|
||||
"languages.zhCN",
|
||||
"languages.zhTW",
|
||||
"login.subtitle",
|
||||
"nodes.binding.defaultBinding",
|
||||
"nodes.binding.defaultBindingHint",
|
||||
"nodes.binding.execNodeBinding",
|
||||
"nodes.binding.execNodeBindingSubtitle",
|
||||
"nodes.binding.formModeHint",
|
||||
"nodes.binding.loadConfigHint",
|
||||
"nodes.binding.node",
|
||||
"overview.notes.tailscaleTitle",
|
||||
"overview.stats.cron",
|
||||
"usage.common.emptyValue",
|
||||
"usage.export.json",
|
||||
"usage.filters.timeZoneUtc"
|
||||
],
|
||||
"generatedAt": "2026-04-06T01:50:00.992Z",
|
||||
"generatedAt": "2026-04-06T02:05:59.135Z",
|
||||
"locale": "uk",
|
||||
"model": "",
|
||||
"provider": "",
|
||||
"sourceHash": "a5a5f4f337bf840323582ead83e9abd0b64becd5be8d0ff93ef631af457dfac7",
|
||||
"totalKeys": 577,
|
||||
"sourceHash": "aa6728f46c7479ccfd4277a8d1614ba5f9d1d690c9052a5654c066e16218b768",
|
||||
"totalKeys": 652,
|
||||
"translatedKeys": 482,
|
||||
"workflow": 1
|
||||
}
|
||||
|
||||
@@ -1,17 +1,67 @@
|
||||
{
|
||||
"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",
|
||||
"common.active",
|
||||
"common.audience",
|
||||
"common.authAge",
|
||||
"common.baseUrl",
|
||||
"common.call",
|
||||
"common.cancel",
|
||||
"common.configured",
|
||||
"common.confirm",
|
||||
"common.connected",
|
||||
"common.credential",
|
||||
"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.no",
|
||||
"common.probe",
|
||||
@@ -19,11 +69,21 @@
|
||||
"common.probeOk",
|
||||
"common.publicKey",
|
||||
"common.refreshing",
|
||||
"common.relink",
|
||||
"common.reload",
|
||||
"common.reloadConfig",
|
||||
"common.running",
|
||||
"common.save",
|
||||
"common.saveAndPublish",
|
||||
"common.saving",
|
||||
"common.secondsAgo",
|
||||
"common.settingsSections",
|
||||
"common.showAdvanced",
|
||||
"common.showQr",
|
||||
"common.unsavedChanges",
|
||||
"common.unselect",
|
||||
"common.waitForScan",
|
||||
"common.working",
|
||||
"common.yes",
|
||||
"cron.form.cronOption",
|
||||
"cron.form.everyAmountPlaceholder",
|
||||
@@ -74,7 +134,22 @@
|
||||
"dreaming.status.promotedSuffix",
|
||||
"dreaming.tabs.diary",
|
||||
"dreaming.tabs.scene",
|
||||
"instances.hideHosts",
|
||||
"instances.lastInput",
|
||||
"instances.noInstances",
|
||||
"instances.reason",
|
||||
"instances.showHosts",
|
||||
"instances.subtitle",
|
||||
"instances.title",
|
||||
"instances.toggleHostVisibility",
|
||||
"languages.en",
|
||||
"nodes.binding.defaultBinding",
|
||||
"nodes.binding.defaultBindingHint",
|
||||
"nodes.binding.execNodeBinding",
|
||||
"nodes.binding.execNodeBindingSubtitle",
|
||||
"nodes.binding.formModeHint",
|
||||
"nodes.binding.loadConfigHint",
|
||||
"nodes.binding.node",
|
||||
"overview.access.wsUrl",
|
||||
"overview.notes.tailscaleTitle",
|
||||
"usage.common.emptyValue",
|
||||
@@ -83,12 +158,12 @@
|
||||
"usage.filters.timeZoneUtc",
|
||||
"usage.overview.tokensPerMinute"
|
||||
],
|
||||
"generatedAt": "2026-04-06T01:49:58.244Z",
|
||||
"generatedAt": "2026-04-06T02:05:56.738Z",
|
||||
"locale": "zh-CN",
|
||||
"model": "",
|
||||
"provider": "",
|
||||
"sourceHash": "a5a5f4f337bf840323582ead83e9abd0b64becd5be8d0ff93ef631af457dfac7",
|
||||
"totalKeys": 577,
|
||||
"sourceHash": "aa6728f46c7479ccfd4277a8d1614ba5f9d1d690c9052a5654c066e16218b768",
|
||||
"totalKeys": 652,
|
||||
"translatedKeys": 495,
|
||||
"workflow": 1
|
||||
}
|
||||
|
||||
@@ -1,17 +1,67 @@
|
||||
{
|
||||
"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",
|
||||
"common.active",
|
||||
"common.audience",
|
||||
"common.authAge",
|
||||
"common.baseUrl",
|
||||
"common.call",
|
||||
"common.cancel",
|
||||
"common.configured",
|
||||
"common.confirm",
|
||||
"common.connected",
|
||||
"common.credential",
|
||||
"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.no",
|
||||
"common.probe",
|
||||
@@ -19,11 +69,21 @@
|
||||
"common.probeOk",
|
||||
"common.publicKey",
|
||||
"common.refreshing",
|
||||
"common.relink",
|
||||
"common.reload",
|
||||
"common.reloadConfig",
|
||||
"common.running",
|
||||
"common.save",
|
||||
"common.saveAndPublish",
|
||||
"common.saving",
|
||||
"common.secondsAgo",
|
||||
"common.settingsSections",
|
||||
"common.showAdvanced",
|
||||
"common.showQr",
|
||||
"common.unsavedChanges",
|
||||
"common.unselect",
|
||||
"common.waitForScan",
|
||||
"common.working",
|
||||
"common.yes",
|
||||
"cron.form.agentId",
|
||||
"cron.form.cronOption",
|
||||
@@ -78,7 +138,22 @@
|
||||
"dreaming.status.promotedSuffix",
|
||||
"dreaming.tabs.diary",
|
||||
"dreaming.tabs.scene",
|
||||
"instances.hideHosts",
|
||||
"instances.lastInput",
|
||||
"instances.noInstances",
|
||||
"instances.reason",
|
||||
"instances.showHosts",
|
||||
"instances.subtitle",
|
||||
"instances.title",
|
||||
"instances.toggleHostVisibility",
|
||||
"languages.en",
|
||||
"nodes.binding.defaultBinding",
|
||||
"nodes.binding.defaultBindingHint",
|
||||
"nodes.binding.execNodeBinding",
|
||||
"nodes.binding.execNodeBindingSubtitle",
|
||||
"nodes.binding.formModeHint",
|
||||
"nodes.binding.loadConfigHint",
|
||||
"nodes.binding.node",
|
||||
"overview.access.wsUrl",
|
||||
"overview.notes.tailscaleTitle",
|
||||
"usage.common.emptyValue",
|
||||
@@ -88,12 +163,12 @@
|
||||
"usage.filters.timeZoneUtc",
|
||||
"usage.overview.tokensPerMinute"
|
||||
],
|
||||
"generatedAt": "2026-04-06T01:49:58.556Z",
|
||||
"generatedAt": "2026-04-06T02:05:57.047Z",
|
||||
"locale": "zh-TW",
|
||||
"model": "",
|
||||
"provider": "",
|
||||
"sourceHash": "a5a5f4f337bf840323582ead83e9abd0b64becd5be8d0ff93ef631af457dfac7",
|
||||
"totalKeys": 577,
|
||||
"sourceHash": "aa6728f46c7479ccfd4277a8d1614ba5f9d1d690c9052a5654c066e16218b768",
|
||||
"totalKeys": 652,
|
||||
"translatedKeys": 490,
|
||||
"workflow": 1
|
||||
}
|
||||
|
||||
@@ -7,15 +7,18 @@ export const de: TranslationMap = {
|
||||
ok: "OK",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
active: "Active",
|
||||
loading: "Loading…",
|
||||
refreshing: "Refreshing…",
|
||||
online: "Online",
|
||||
offline: "Offline",
|
||||
connect: "Verbinden",
|
||||
connected: "Connected",
|
||||
refresh: "Aktualisieren",
|
||||
reload: "Reload",
|
||||
probe: "Probe",
|
||||
call: "Call",
|
||||
confirm: "Confirm",
|
||||
cancel: "Cancel",
|
||||
unselect: "Unselect",
|
||||
enabled: "Aktiviert",
|
||||
@@ -23,11 +26,15 @@ export const de: TranslationMap = {
|
||||
na: "k. 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",
|
||||
@@ -42,6 +49,92 @@ export const de: TranslationMap = {
|
||||
theme: "Design",
|
||||
resources: "Ressourcen",
|
||||
search: "Suchen",
|
||||
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)",
|
||||
},
|
||||
},
|
||||
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",
|
||||
|
||||
@@ -6,15 +6,18 @@ export const en: TranslationMap = {
|
||||
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",
|
||||
@@ -22,11 +25,15 @@ export const en: TranslationMap = {
|
||||
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",
|
||||
@@ -41,6 +48,92 @@ export const en: TranslationMap = {
|
||||
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)",
|
||||
},
|
||||
},
|
||||
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",
|
||||
|
||||
@@ -7,15 +7,18 @@ export const es: TranslationMap = {
|
||||
ok: "Correcto",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
active: "Active",
|
||||
loading: "Loading…",
|
||||
refreshing: "Refreshing…",
|
||||
online: "En línea",
|
||||
offline: "Desconectado",
|
||||
connect: "Conectar",
|
||||
connected: "Connected",
|
||||
refresh: "Actualizar",
|
||||
reload: "Reload",
|
||||
probe: "Probe",
|
||||
call: "Call",
|
||||
confirm: "Confirm",
|
||||
cancel: "Cancel",
|
||||
unselect: "Unselect",
|
||||
enabled: "Habilitado",
|
||||
@@ -23,11 +26,15 @@ export const es: TranslationMap = {
|
||||
na: "n/d",
|
||||
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",
|
||||
@@ -42,6 +49,92 @@ export const es: TranslationMap = {
|
||||
theme: "Tema",
|
||||
resources: "Recursos",
|
||||
search: "Buscar",
|
||||
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)",
|
||||
},
|
||||
},
|
||||
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",
|
||||
|
||||
@@ -7,15 +7,18 @@ export const fr: TranslationMap = {
|
||||
ok: "OK",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
active: "Active",
|
||||
loading: "Loading…",
|
||||
refreshing: "Refreshing…",
|
||||
online: "En ligne",
|
||||
offline: "Hors ligne",
|
||||
connect: "Connecter",
|
||||
connected: "Connected",
|
||||
refresh: "Actualiser",
|
||||
reload: "Reload",
|
||||
probe: "Probe",
|
||||
call: "Call",
|
||||
confirm: "Confirm",
|
||||
cancel: "Cancel",
|
||||
unselect: "Unselect",
|
||||
enabled: "Activé",
|
||||
@@ -23,11 +26,15 @@ export const fr: TranslationMap = {
|
||||
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",
|
||||
@@ -42,6 +49,92 @@ export const fr: TranslationMap = {
|
||||
theme: "Thème",
|
||||
resources: "Ressources",
|
||||
search: "Rechercher",
|
||||
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)",
|
||||
},
|
||||
},
|
||||
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",
|
||||
|
||||
@@ -7,15 +7,18 @@ export const id: TranslationMap = {
|
||||
ok: "OK",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
active: "Active",
|
||||
loading: "Loading…",
|
||||
refreshing: "Refreshing…",
|
||||
online: "Online",
|
||||
offline: "Offline",
|
||||
connect: "Hubungkan",
|
||||
connected: "Connected",
|
||||
refresh: "Muat ulang",
|
||||
reload: "Reload",
|
||||
probe: "Probe",
|
||||
call: "Call",
|
||||
confirm: "Confirm",
|
||||
cancel: "Cancel",
|
||||
unselect: "Unselect",
|
||||
enabled: "Diaktifkan",
|
||||
@@ -23,11 +26,15 @@ export const id: TranslationMap = {
|
||||
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",
|
||||
@@ -42,6 +49,92 @@ export const id: TranslationMap = {
|
||||
theme: "Tema",
|
||||
resources: "Sumber daya",
|
||||
search: "Cari",
|
||||
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)",
|
||||
},
|
||||
},
|
||||
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",
|
||||
|
||||
@@ -7,15 +7,18 @@ export const ja_JP: TranslationMap = {
|
||||
ok: "OK",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
active: "Active",
|
||||
loading: "Loading…",
|
||||
refreshing: "Refreshing…",
|
||||
online: "オンライン",
|
||||
offline: "オフライン",
|
||||
connect: "接続",
|
||||
connected: "Connected",
|
||||
refresh: "更新",
|
||||
reload: "Reload",
|
||||
probe: "Probe",
|
||||
call: "Call",
|
||||
confirm: "Confirm",
|
||||
cancel: "Cancel",
|
||||
unselect: "Unselect",
|
||||
enabled: "有効",
|
||||
@@ -23,11 +26,15 @@ export const ja_JP: TranslationMap = {
|
||||
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",
|
||||
@@ -42,6 +49,92 @@ export const ja_JP: TranslationMap = {
|
||||
theme: "テーマ",
|
||||
resources: "リソース",
|
||||
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)",
|
||||
},
|
||||
},
|
||||
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: "チャット",
|
||||
|
||||
@@ -7,15 +7,18 @@ export const ko: TranslationMap = {
|
||||
ok: "확인",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
active: "Active",
|
||||
loading: "Loading…",
|
||||
refreshing: "Refreshing…",
|
||||
online: "온라인",
|
||||
offline: "오프라인",
|
||||
connect: "연결",
|
||||
connected: "Connected",
|
||||
refresh: "새로고침",
|
||||
reload: "Reload",
|
||||
probe: "Probe",
|
||||
call: "Call",
|
||||
confirm: "Confirm",
|
||||
cancel: "Cancel",
|
||||
unselect: "Unselect",
|
||||
enabled: "사용",
|
||||
@@ -23,11 +26,15 @@ export const ko: TranslationMap = {
|
||||
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",
|
||||
@@ -42,6 +49,92 @@ export const ko: TranslationMap = {
|
||||
theme: "테마",
|
||||
resources: "리소스",
|
||||
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)",
|
||||
},
|
||||
},
|
||||
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: "채팅",
|
||||
|
||||
@@ -7,15 +7,18 @@ export const pl: TranslationMap = {
|
||||
ok: "OK",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
active: "Active",
|
||||
loading: "Loading…",
|
||||
refreshing: "Refreshing…",
|
||||
online: "Online",
|
||||
offline: "Offline",
|
||||
connect: "Połącz",
|
||||
connected: "Connected",
|
||||
refresh: "Odśwież",
|
||||
reload: "Reload",
|
||||
probe: "Probe",
|
||||
call: "Call",
|
||||
confirm: "Confirm",
|
||||
cancel: "Cancel",
|
||||
unselect: "Unselect",
|
||||
enabled: "Włączone",
|
||||
@@ -23,11 +26,15 @@ export const pl: TranslationMap = {
|
||||
na: "n/d",
|
||||
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",
|
||||
@@ -42,6 +49,92 @@ export const pl: TranslationMap = {
|
||||
theme: "Motyw",
|
||||
resources: "Zasoby",
|
||||
search: "Szukaj",
|
||||
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)",
|
||||
},
|
||||
},
|
||||
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: "Czat",
|
||||
|
||||
@@ -7,15 +7,18 @@ export const pt_BR: TranslationMap = {
|
||||
ok: "OK",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
active: "Active",
|
||||
loading: "Loading…",
|
||||
refreshing: "Refreshing…",
|
||||
online: "Online",
|
||||
offline: "Offline",
|
||||
connect: "Conectar",
|
||||
connected: "Connected",
|
||||
refresh: "Atualizar",
|
||||
reload: "Reload",
|
||||
probe: "Probe",
|
||||
call: "Call",
|
||||
confirm: "Confirm",
|
||||
cancel: "Cancel",
|
||||
unselect: "Unselect",
|
||||
enabled: "Ativado",
|
||||
@@ -23,11 +26,15 @@ export const pt_BR: TranslationMap = {
|
||||
na: "n/d",
|
||||
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",
|
||||
@@ -42,6 +49,92 @@ export const pt_BR: TranslationMap = {
|
||||
theme: "Tema",
|
||||
resources: "Recursos",
|
||||
search: "Pesquisar",
|
||||
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)",
|
||||
},
|
||||
},
|
||||
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",
|
||||
|
||||
@@ -7,15 +7,18 @@ export const tr: TranslationMap = {
|
||||
ok: "Tamam",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
active: "Active",
|
||||
loading: "Loading…",
|
||||
refreshing: "Refreshing…",
|
||||
online: "Çevrimiçi",
|
||||
offline: "Çevrimdışı",
|
||||
connect: "Bağlan",
|
||||
connected: "Connected",
|
||||
refresh: "Yenile",
|
||||
reload: "Reload",
|
||||
probe: "Probe",
|
||||
call: "Call",
|
||||
confirm: "Confirm",
|
||||
cancel: "Cancel",
|
||||
unselect: "Unselect",
|
||||
enabled: "Etkin",
|
||||
@@ -23,11 +26,15 @@ export const tr: TranslationMap = {
|
||||
na: "yok",
|
||||
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",
|
||||
@@ -42,6 +49,92 @@ export const tr: TranslationMap = {
|
||||
theme: "Tema",
|
||||
resources: "Kaynaklar",
|
||||
search: "Ara",
|
||||
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)",
|
||||
},
|
||||
},
|
||||
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: "Sohbet",
|
||||
|
||||
@@ -7,15 +7,18 @@ export const uk: TranslationMap = {
|
||||
ok: "OK",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
active: "Active",
|
||||
loading: "Loading…",
|
||||
refreshing: "Refreshing…",
|
||||
online: "Онлайн",
|
||||
offline: "Офлайн",
|
||||
connect: "Підключити",
|
||||
connected: "Connected",
|
||||
refresh: "Оновити",
|
||||
reload: "Reload",
|
||||
probe: "Probe",
|
||||
call: "Call",
|
||||
confirm: "Confirm",
|
||||
cancel: "Cancel",
|
||||
unselect: "Unselect",
|
||||
enabled: "Увімкнено",
|
||||
@@ -23,11 +26,15 @@ export const uk: TranslationMap = {
|
||||
na: "н/д",
|
||||
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",
|
||||
@@ -42,6 +49,92 @@ export const uk: TranslationMap = {
|
||||
theme: "Тема",
|
||||
resources: "Ресурси",
|
||||
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)",
|
||||
},
|
||||
},
|
||||
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: "Чат",
|
||||
|
||||
@@ -7,15 +7,18 @@ export const zh_CN: TranslationMap = {
|
||||
ok: "正常",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
active: "Active",
|
||||
loading: "Loading…",
|
||||
refreshing: "Refreshing…",
|
||||
online: "在线",
|
||||
offline: "离线",
|
||||
connect: "连接",
|
||||
connected: "Connected",
|
||||
refresh: "刷新",
|
||||
reload: "Reload",
|
||||
probe: "Probe",
|
||||
call: "Call",
|
||||
confirm: "Confirm",
|
||||
cancel: "Cancel",
|
||||
unselect: "Unselect",
|
||||
enabled: "已启用",
|
||||
@@ -23,11 +26,15 @@ export const zh_CN: TranslationMap = {
|
||||
na: "不适用",
|
||||
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",
|
||||
@@ -42,6 +49,92 @@ export const zh_CN: TranslationMap = {
|
||||
theme: "主题",
|
||||
resources: "资源",
|
||||
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)",
|
||||
},
|
||||
},
|
||||
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: "聊天",
|
||||
|
||||
@@ -7,15 +7,18 @@ export const zh_TW: TranslationMap = {
|
||||
ok: "正常",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
active: "Active",
|
||||
loading: "Loading…",
|
||||
refreshing: "Refreshing…",
|
||||
online: "在線",
|
||||
offline: "離線",
|
||||
connect: "連接",
|
||||
connected: "Connected",
|
||||
refresh: "刷新",
|
||||
reload: "Reload",
|
||||
probe: "Probe",
|
||||
call: "Call",
|
||||
confirm: "Confirm",
|
||||
cancel: "Cancel",
|
||||
unselect: "Unselect",
|
||||
enabled: "已啟用",
|
||||
@@ -23,11 +26,15 @@ export const zh_TW: TranslationMap = {
|
||||
na: "不適用",
|
||||
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",
|
||||
@@ -42,6 +49,92 @@ export const zh_TW: TranslationMap = {
|
||||
theme: "主題",
|
||||
resources: "資源",
|
||||
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)",
|
||||
},
|
||||
},
|
||||
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: "聊天",
|
||||
|
||||
@@ -276,14 +276,18 @@ export function renderAgentCron(params: {
|
||||
</div>
|
||||
<div class="stat-grid" style="margin-top: 16px;">
|
||||
<div class="stat">
|
||||
<div class="stat-label">Enabled</div>
|
||||
<div class="stat-label">${t("common.enabled")}</div>
|
||||
<div class="stat-value">
|
||||
${params.status ? (params.status.enabled ? "Yes" : "No") : "n/a"}
|
||||
${params.status
|
||||
? params.status.enabled
|
||||
? t("common.yes")
|
||||
: t("common.no")
|
||||
: t("common.na")}
|
||||
</div>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<div class="stat-label">Jobs</div>
|
||||
<div class="stat-value">${params.status?.jobs ?? "n/a"}</div>
|
||||
<div class="stat-value">${params.status?.jobs ?? t("common.na")}</div>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<div class="stat-label">Next wake</div>
|
||||
|
||||
@@ -53,12 +53,16 @@ function renderEffectiveToolBadge(tool: {
|
||||
channelId?: string;
|
||||
}) {
|
||||
if (tool.source === "plugin") {
|
||||
return tool.pluginId ? `Connected: ${tool.pluginId}` : "Connected";
|
||||
return tool.pluginId
|
||||
? t("agentTools.connectedSource", { id: tool.pluginId })
|
||||
: t("agentTools.connected");
|
||||
}
|
||||
if (tool.source === "channel") {
|
||||
return tool.channelId ? `Channel: ${tool.channelId}` : "Channel";
|
||||
return tool.channelId
|
||||
? t("agentTools.channelSource", { id: tool.channelId })
|
||||
: t("agentTools.channel");
|
||||
}
|
||||
return "Built-in";
|
||||
return t("agentTools.builtIn");
|
||||
}
|
||||
|
||||
export function renderAgentTools(params: {
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { t } from "../../i18n/index.ts";
|
||||
|
||||
export function resolveChannelConfigValue(
|
||||
configForm: Record<string, unknown> | null | undefined,
|
||||
channelId: string,
|
||||
@@ -19,7 +21,7 @@ export function resolveChannelConfigValue(
|
||||
|
||||
export function formatChannelExtraValue(raw: unknown): string {
|
||||
if (raw == null) {
|
||||
return "n/a";
|
||||
return t("common.na");
|
||||
}
|
||||
if (typeof raw === "string" || typeof raw === "number" || typeof raw === "boolean") {
|
||||
return String(raw);
|
||||
@@ -27,7 +29,7 @@ export function formatChannelExtraValue(raw: unknown): string {
|
||||
try {
|
||||
return JSON.stringify(raw);
|
||||
} catch {
|
||||
return "n/a";
|
||||
return t("common.na");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
|
||||
import { html, nothing, type TemplateResult } from "lit";
|
||||
import { t } from "../../i18n/index.ts";
|
||||
import type { NostrProfile as NostrProfileType } from "../types.ts";
|
||||
|
||||
// ============================================================================
|
||||
@@ -164,7 +165,7 @@ export function renderNostrProfileForm(params: {
|
||||
<div style="margin-bottom: 12px;">
|
||||
<img
|
||||
src=${picture}
|
||||
alt="Profile picture preview"
|
||||
alt=${t("channels.nostr.profilePicturePreview")}
|
||||
style="max-width: 80px; max-height: 80px; border-radius: 50%; object-fit: cover; border: 2px solid var(--border-color);"
|
||||
@error=${(e: Event) => {
|
||||
const img = e.target as HTMLImageElement;
|
||||
@@ -187,8 +188,10 @@ export function renderNostrProfileForm(params: {
|
||||
<div
|
||||
style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;"
|
||||
>
|
||||
<div style="font-weight: 600; font-size: 16px;">Edit Profile</div>
|
||||
<div style="font-size: 12px; color: var(--text-muted);">Account: ${accountId}</div>
|
||||
<div style="font-weight: 600; font-size: 16px;">${t("channels.nostr.editProfile")}</div>
|
||||
<div style="font-size: 12px; color: var(--text-muted);">
|
||||
${t("channels.nostr.account")}: ${accountId}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
${state.error
|
||||
@@ -198,26 +201,26 @@ export function renderNostrProfileForm(params: {
|
||||
? html`<div class="callout success" style="margin-bottom: 12px;">${state.success}</div>`
|
||||
: nothing}
|
||||
${renderPicturePreview()}
|
||||
${renderField("name", "Username", {
|
||||
${renderField("name", t("channels.nostr.username"), {
|
||||
placeholder: "satoshi",
|
||||
maxLength: 256,
|
||||
help: "Short username (e.g., satoshi)",
|
||||
help: t("channels.nostr.usernameHelp"),
|
||||
})}
|
||||
${renderField("displayName", "Display Name", {
|
||||
${renderField("displayName", t("channels.nostr.displayName"), {
|
||||
placeholder: "Satoshi Nakamoto",
|
||||
maxLength: 256,
|
||||
help: "Your full display name",
|
||||
help: t("channels.nostr.displayNameHelp"),
|
||||
})}
|
||||
${renderField("about", "Bio", {
|
||||
${renderField("about", t("channels.nostr.bio"), {
|
||||
type: "textarea",
|
||||
placeholder: "Tell people about yourself...",
|
||||
placeholder: t("channels.nostr.bioPlaceholder"),
|
||||
maxLength: 2000,
|
||||
help: "A brief bio or description",
|
||||
help: t("channels.nostr.bioHelp"),
|
||||
})}
|
||||
${renderField("picture", "Avatar URL", {
|
||||
${renderField("picture", t("channels.nostr.avatarUrl"), {
|
||||
type: "url",
|
||||
placeholder: "https://example.com/avatar.jpg",
|
||||
help: "HTTPS URL to your profile picture",
|
||||
help: t("channels.nostr.avatarHelp"),
|
||||
})}
|
||||
${state.showAdvanced
|
||||
? html`
|
||||
@@ -225,26 +228,26 @@ export function renderNostrProfileForm(params: {
|
||||
style="border-top: 1px solid var(--border-color); padding-top: 12px; margin-top: 12px;"
|
||||
>
|
||||
<div style="font-weight: 500; margin-bottom: 12px; color: var(--text-muted);">
|
||||
Advanced
|
||||
${t("channels.nostr.advanced")}
|
||||
</div>
|
||||
|
||||
${renderField("banner", "Banner URL", {
|
||||
${renderField("banner", t("channels.nostr.bannerUrl"), {
|
||||
type: "url",
|
||||
placeholder: "https://example.com/banner.jpg",
|
||||
help: "HTTPS URL to a banner image",
|
||||
help: t("channels.nostr.bannerHelp"),
|
||||
})}
|
||||
${renderField("website", "Website", {
|
||||
${renderField("website", t("channels.nostr.website"), {
|
||||
type: "url",
|
||||
placeholder: "https://example.com",
|
||||
help: "Your personal website",
|
||||
help: t("channels.nostr.websiteHelp"),
|
||||
})}
|
||||
${renderField("nip05", "NIP-05 Identifier", {
|
||||
${renderField("nip05", t("channels.nostr.nip05Identifier"), {
|
||||
placeholder: "you@example.com",
|
||||
help: "Verifiable identifier (e.g., you@domain.com)",
|
||||
help: t("channels.nostr.nip05Help"),
|
||||
})}
|
||||
${renderField("lud16", "Lightning Address", {
|
||||
${renderField("lud16", t("channels.nostr.lightningAddress"), {
|
||||
placeholder: "you@getalby.com",
|
||||
help: "Lightning address for tips (LUD-16)",
|
||||
help: t("channels.nostr.lightningHelp"),
|
||||
})}
|
||||
</div>
|
||||
`
|
||||
@@ -256,7 +259,7 @@ export function renderNostrProfileForm(params: {
|
||||
@click=${callbacks.onSave}
|
||||
?disabled=${state.saving || !isDirty}
|
||||
>
|
||||
${state.saving ? "Saving..." : "Save & Publish"}
|
||||
${state.saving ? t("common.saving") : t("common.saveAndPublish")}
|
||||
</button>
|
||||
|
||||
<button
|
||||
@@ -264,20 +267,22 @@ export function renderNostrProfileForm(params: {
|
||||
@click=${callbacks.onImport}
|
||||
?disabled=${state.importing || state.saving}
|
||||
>
|
||||
${state.importing ? "Importing..." : "Import from Relays"}
|
||||
${state.importing ? t("common.importing") : t("common.importFromRelays")}
|
||||
</button>
|
||||
|
||||
<button class="btn" @click=${callbacks.onToggleAdvanced}>
|
||||
${state.showAdvanced ? "Hide Advanced" : "Show Advanced"}
|
||||
${state.showAdvanced ? t("common.hideAdvanced") : t("common.showAdvanced")}
|
||||
</button>
|
||||
|
||||
<button class="btn" @click=${callbacks.onCancel} ?disabled=${state.saving}>Cancel</button>
|
||||
<button class="btn" @click=${callbacks.onCancel} ?disabled=${state.saving}>
|
||||
${t("common.cancel")}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
${isDirty
|
||||
? html`
|
||||
<div style="font-size: 12px; color: var(--warning-color); margin-top: 8px">
|
||||
You have unsaved changes
|
||||
${t("common.unsavedChanges")}
|
||||
</div>
|
||||
`
|
||||
: nothing}
|
||||
|
||||
@@ -15,7 +15,7 @@ import type { ChannelsProps } from "./channels.types.ts";
|
||||
*/
|
||||
function truncatePubkey(pubkey: string | null | undefined): string {
|
||||
if (!pubkey) {
|
||||
return "n/a";
|
||||
return t("common.na");
|
||||
}
|
||||
if (pubkey.length <= 20) {
|
||||
return pubkey;
|
||||
@@ -67,23 +67,23 @@ export function renderNostrCard(params: {
|
||||
</div>
|
||||
<div class="status-list account-card-status">
|
||||
<div>
|
||||
<span class="label">Running</span>
|
||||
<span>${account.running ? "Yes" : "No"}</span>
|
||||
<span class="label">${t("common.running")}</span>
|
||||
<span>${account.running ? t("common.yes") : t("common.no")}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="label">Configured</span>
|
||||
<span>${account.configured ? "Yes" : "No"}</span>
|
||||
<span class="label">${t("common.configured")}</span>
|
||||
<span>${account.configured ? t("common.yes") : t("common.no")}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="label">Public Key</span>
|
||||
<span class="label">${t("common.publicKey")}</span>
|
||||
<span class="monospace" title="${publicKey ?? ""}">${truncatePubkey(publicKey)}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="label">Last inbound</span>
|
||||
<span class="label">${t("common.lastInbound")}</span>
|
||||
<span
|
||||
>${account.lastInboundAt
|
||||
? formatRelativeTimestamp(account.lastInboundAt)
|
||||
: "n/a"}</span
|
||||
: t("common.na")}</span
|
||||
>
|
||||
</div>
|
||||
${account.lastError
|
||||
@@ -128,7 +128,7 @@ export function renderNostrCard(params: {
|
||||
<div
|
||||
style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px;"
|
||||
>
|
||||
<div style="font-weight: 500;">Profile</div>
|
||||
<div style="font-weight: 500;">${t("channels.nostr.profile")}</div>
|
||||
${summaryConfigured
|
||||
? html`
|
||||
<button
|
||||
@@ -136,7 +136,7 @@ export function renderNostrCard(params: {
|
||||
@click=${onEditProfile}
|
||||
style="font-size: 12px; padding: 4px 8px;"
|
||||
>
|
||||
Edit Profile
|
||||
${t("channels.nostr.editProfile")}
|
||||
</button>
|
||||
`
|
||||
: nothing}
|
||||
@@ -149,7 +149,7 @@ export function renderNostrCard(params: {
|
||||
<div style="margin-bottom: 8px;">
|
||||
<img
|
||||
src=${picture}
|
||||
alt="Profile picture"
|
||||
alt=${t("channels.nostr.profilePicture")}
|
||||
style="width: 48px; height: 48px; border-radius: 50%; object-fit: cover; border: 2px solid var(--border-color);"
|
||||
@error=${(e: Event) => {
|
||||
(e.target as HTMLImageElement).style.display = "none";
|
||||
@@ -159,16 +159,19 @@ export function renderNostrCard(params: {
|
||||
`
|
||||
: nothing}
|
||||
${name
|
||||
? html`<div><span class="label">Name</span><span>${name}</span></div>`
|
||||
? html`<div>
|
||||
<span class="label">${t("channels.nostr.name")}</span><span>${name}</span>
|
||||
</div>`
|
||||
: nothing}
|
||||
${displayName
|
||||
? html`<div>
|
||||
<span class="label">Display Name</span><span>${displayName}</span>
|
||||
<span class="label">${t("channels.nostr.displayName")}</span
|
||||
><span>${displayName}</span>
|
||||
</div>`
|
||||
: nothing}
|
||||
${about
|
||||
? html`<div>
|
||||
<span class="label">About</span
|
||||
<span class="label">${t("channels.nostr.about")}</span
|
||||
><span style="max-width: 300px; overflow: hidden; text-overflow: ellipsis;"
|
||||
>${about}</span
|
||||
>
|
||||
@@ -181,7 +184,7 @@ export function renderNostrCard(params: {
|
||||
`
|
||||
: html`
|
||||
<div style="color: var(--text-muted); font-size: 13px">
|
||||
No profile set. Click "Edit Profile" to add your name, bio, and avatar.
|
||||
${t("channels.nostr.noProfile")} ${t("channels.nostr.noProfileHint")}
|
||||
</div>
|
||||
`}
|
||||
</div>
|
||||
@@ -202,12 +205,12 @@ export function renderNostrCard(params: {
|
||||
: html`
|
||||
<div class="status-list" style="margin-top: 16px;">
|
||||
<div>
|
||||
<span class="label">Configured</span>
|
||||
<span>${summaryConfigured ? "Yes" : "No"}</span>
|
||||
<span class="label">${t("common.configured")}</span>
|
||||
<span>${summaryConfigured ? t("common.yes") : t("common.no")}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="label">Running</span>
|
||||
<span>${summaryRunning ? "Yes" : "No"}</span>
|
||||
<span class="label">${t("common.running")}</span>
|
||||
<span>${summaryRunning ? t("common.yes") : t("common.no")}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="label">${t("common.publicKey")}</span>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { html, nothing } from "lit";
|
||||
import { t } from "../../i18n/index.ts";
|
||||
import { formatRelativeTimestamp } from "../format.ts";
|
||||
import type {
|
||||
ChannelAccountSnapshot,
|
||||
@@ -75,18 +76,18 @@ export function renderChannels(props: ChannelsProps) {
|
||||
<section class="card" style="margin-top: 18px;">
|
||||
<div class="row" style="justify-content: space-between;">
|
||||
<div>
|
||||
<div class="card-title">Channel health</div>
|
||||
<div class="card-sub">Channel status snapshots from the gateway.</div>
|
||||
<div class="card-title">${t("channels.health.title")}</div>
|
||||
<div class="card-sub">${t("channels.health.subtitle")}</div>
|
||||
</div>
|
||||
<div class="muted">
|
||||
${props.lastSuccessAt ? formatRelativeTimestamp(props.lastSuccessAt) : "n/a"}
|
||||
${props.lastSuccessAt ? formatRelativeTimestamp(props.lastSuccessAt) : t("common.na")}
|
||||
</div>
|
||||
</div>
|
||||
${props.lastError
|
||||
? html`<div class="callout danger" style="margin-top: 12px;">${props.lastError}</div>`
|
||||
: nothing}
|
||||
<pre class="code-block" style="margin-top: 12px;">
|
||||
${props.snapshot ? JSON.stringify(props.snapshot, null, 2) : "No snapshot yet."}
|
||||
${props.snapshot ? JSON.stringify(props.snapshot, null, 2) : t("channels.health.noSnapshotYet")}
|
||||
</pre
|
||||
>
|
||||
</section>
|
||||
@@ -196,7 +197,7 @@ function renderGenericChannelCard(
|
||||
return html`
|
||||
<div class="card">
|
||||
<div class="card-title">${label}</div>
|
||||
<div class="card-sub">Channel status and configuration.</div>
|
||||
<div class="card-sub">${t("channels.generic.subtitle")}</div>
|
||||
${accountCountLabel}
|
||||
${accounts.length > 0
|
||||
? html`
|
||||
@@ -207,15 +208,15 @@ function renderGenericChannelCard(
|
||||
: html`
|
||||
<div class="status-list" style="margin-top: 16px;">
|
||||
<div>
|
||||
<span class="label">Configured</span>
|
||||
<span class="label">${t("common.configured")}</span>
|
||||
<span>${formatNullableBoolean(displayState.configured)}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="label">Running</span>
|
||||
<span class="label">${t("common.running")}</span>
|
||||
<span>${formatNullableBoolean(displayState.running)}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="label">Connected</span>
|
||||
<span class="label">${t("common.connected")}</span>
|
||||
<span>${formatNullableBoolean(displayState.connected)}</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -251,29 +252,29 @@ function hasRecentActivity(account: ChannelAccountSnapshot): boolean {
|
||||
return Date.now() - account.lastInboundAt < RECENT_ACTIVITY_THRESHOLD_MS;
|
||||
}
|
||||
|
||||
function deriveRunningStatus(account: ChannelAccountSnapshot): "Yes" | "No" | "Active" {
|
||||
function deriveRunningStatus(account: ChannelAccountSnapshot): string {
|
||||
if (account.running) {
|
||||
return "Yes";
|
||||
return t("common.yes");
|
||||
}
|
||||
// If we have recent inbound activity, the channel is effectively running
|
||||
if (hasRecentActivity(account)) {
|
||||
return "Active";
|
||||
return t("common.active");
|
||||
}
|
||||
return "No";
|
||||
return t("common.no");
|
||||
}
|
||||
|
||||
function deriveConnectedStatus(account: ChannelAccountSnapshot): "Yes" | "No" | "Active" | "n/a" {
|
||||
function deriveConnectedStatus(account: ChannelAccountSnapshot): string {
|
||||
if (account.connected === true) {
|
||||
return "Yes";
|
||||
return t("common.yes");
|
||||
}
|
||||
if (account.connected === false) {
|
||||
return "No";
|
||||
return t("common.no");
|
||||
}
|
||||
// If connected is null/undefined but we have recent activity, show as active
|
||||
if (hasRecentActivity(account)) {
|
||||
return "Active";
|
||||
return t("common.active");
|
||||
}
|
||||
return "n/a";
|
||||
return t("common.na");
|
||||
}
|
||||
|
||||
function renderGenericAccount(account: ChannelAccountSnapshot) {
|
||||
@@ -288,21 +289,23 @@ function renderGenericAccount(account: ChannelAccountSnapshot) {
|
||||
</div>
|
||||
<div class="status-list account-card-status">
|
||||
<div>
|
||||
<span class="label">Running</span>
|
||||
<span class="label">${t("common.running")}</span>
|
||||
<span>${runningStatus}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="label">Configured</span>
|
||||
<span>${account.configured ? "Yes" : "No"}</span>
|
||||
<span class="label">${t("common.configured")}</span>
|
||||
<span>${account.configured ? t("common.yes") : t("common.no")}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="label">Connected</span>
|
||||
<span class="label">${t("common.connected")}</span>
|
||||
<span>${connectedStatus}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="label">Last inbound</span>
|
||||
<span class="label">${t("common.lastInbound")}</span>
|
||||
<span
|
||||
>${account.lastInboundAt ? formatRelativeTimestamp(account.lastInboundAt) : "n/a"}</span
|
||||
>${account.lastInboundAt
|
||||
? formatRelativeTimestamp(account.lastInboundAt)
|
||||
: t("common.na")}</span
|
||||
>
|
||||
</div>
|
||||
${account.lastError
|
||||
|
||||
@@ -23,23 +23,29 @@ export function renderWhatsAppCard(params: {
|
||||
subtitle: "Link WhatsApp Web and monitor connection health.",
|
||||
accountCountLabel,
|
||||
statusRows: [
|
||||
{ label: "Configured", value: formatNullableBoolean(configured) },
|
||||
{ label: "Linked", value: whatsapp?.linked ? "Yes" : "No" },
|
||||
{ label: "Running", value: whatsapp?.running ? "Yes" : "No" },
|
||||
{ label: "Connected", value: whatsapp?.connected ? "Yes" : "No" },
|
||||
{ label: t("common.configured"), value: formatNullableBoolean(configured) },
|
||||
{ label: t("common.linked"), value: whatsapp?.linked ? t("common.yes") : t("common.no") },
|
||||
{ label: t("common.running"), value: whatsapp?.running ? t("common.yes") : t("common.no") },
|
||||
{
|
||||
label: "Last connect",
|
||||
label: t("common.connected"),
|
||||
value: whatsapp?.connected ? t("common.yes") : t("common.no"),
|
||||
},
|
||||
{
|
||||
label: t("common.lastConnect"),
|
||||
value: whatsapp?.lastConnectedAt
|
||||
? formatRelativeTimestamp(whatsapp.lastConnectedAt)
|
||||
: "n/a",
|
||||
: t("common.na"),
|
||||
},
|
||||
{
|
||||
label: "Last message",
|
||||
value: whatsapp?.lastMessageAt ? formatRelativeTimestamp(whatsapp.lastMessageAt) : "n/a",
|
||||
label: t("common.lastMessage"),
|
||||
value: whatsapp?.lastMessageAt
|
||||
? formatRelativeTimestamp(whatsapp.lastMessageAt)
|
||||
: t("common.na"),
|
||||
},
|
||||
{
|
||||
label: "Auth age",
|
||||
value: whatsapp?.authAgeMs != null ? formatDurationHuman(whatsapp.authAgeMs) : "n/a",
|
||||
label: t("common.authAge"),
|
||||
value:
|
||||
whatsapp?.authAgeMs != null ? formatDurationHuman(whatsapp.authAgeMs) : t("common.na"),
|
||||
},
|
||||
],
|
||||
lastError: whatsapp?.lastError,
|
||||
@@ -60,24 +66,24 @@ export function renderWhatsAppCard(params: {
|
||||
?disabled=${props.whatsappBusy}
|
||||
@click=${() => props.onWhatsAppStart(false)}
|
||||
>
|
||||
${props.whatsappBusy ? "Working…" : "Show QR"}
|
||||
${props.whatsappBusy ? t("common.working") : t("common.showQr")}
|
||||
</button>
|
||||
<button
|
||||
class="btn"
|
||||
?disabled=${props.whatsappBusy}
|
||||
@click=${() => props.onWhatsAppStart(true)}
|
||||
>
|
||||
Relink
|
||||
${t("common.relink")}
|
||||
</button>
|
||||
<button class="btn" ?disabled=${props.whatsappBusy} @click=${() => props.onWhatsAppWait()}>
|
||||
Wait for scan
|
||||
${t("common.waitForScan")}
|
||||
</button>
|
||||
<button
|
||||
class="btn danger"
|
||||
?disabled=${props.whatsappBusy}
|
||||
@click=${() => props.onWhatsAppLogout()}
|
||||
>
|
||||
Logout
|
||||
${t("common.logout")}
|
||||
</button>
|
||||
<button class="btn" @click=${() => props.onRefresh(true)}>${t("common.refresh")}</button>
|
||||
</div>`,
|
||||
|
||||
@@ -643,7 +643,7 @@ function renderAppearanceSection(props: ConfigProps) {
|
||||
<span
|
||||
class="settings-status-dot ${props.connected ? "settings-status-dot--ok" : ""}"
|
||||
></span>
|
||||
${props.connected ? "Connected" : "Offline"}
|
||||
${props.connected ? t("common.connected") : t("common.offline")}
|
||||
</span>
|
||||
</div>
|
||||
${props.assistantName
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { html, nothing } from "lit";
|
||||
import { t } from "../../i18n/index.ts";
|
||||
import type { AppViewState } from "../app-view-state.ts";
|
||||
|
||||
export function renderGatewayUrlConfirmation(state: AppViewState) {
|
||||
@@ -12,19 +13,21 @@ export function renderGatewayUrlConfirmation(state: AppViewState) {
|
||||
<div class="exec-approval-card">
|
||||
<div class="exec-approval-header">
|
||||
<div>
|
||||
<div class="exec-approval-title">Change Gateway URL</div>
|
||||
<div class="exec-approval-sub">This will reconnect to a different gateway server</div>
|
||||
<div class="exec-approval-title">${t("channels.gatewayUrlConfirmation.title")}</div>
|
||||
<div class="exec-approval-sub">${t("channels.gatewayUrlConfirmation.subtitle")}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="exec-approval-command mono">${pendingGatewayUrl}</div>
|
||||
<div class="callout danger" style="margin-top: 12px;">
|
||||
Only confirm if you trust this URL. Malicious URLs can compromise your system.
|
||||
${t("channels.gatewayUrlConfirmation.warning")}
|
||||
</div>
|
||||
<div class="exec-approval-actions">
|
||||
<button class="btn primary" @click=${() => state.handleGatewayUrlConfirm()}>
|
||||
Confirm
|
||||
${t("common.confirm")}
|
||||
</button>
|
||||
<button class="btn" @click=${() => state.handleGatewayUrlCancel()}>
|
||||
${t("common.cancel")}
|
||||
</button>
|
||||
<button class="btn" @click=${() => state.handleGatewayUrlCancel()}>Cancel</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -21,8 +21,8 @@ export function renderInstances(props: InstancesProps) {
|
||||
<section class="card">
|
||||
<div class="row" style="justify-content: space-between;">
|
||||
<div>
|
||||
<div class="card-title">Connected Instances</div>
|
||||
<div class="card-sub">Presence beacons from the gateway and clients.</div>
|
||||
<div class="card-title">${t("instances.title")}</div>
|
||||
<div class="card-sub">${t("instances.subtitle")}</div>
|
||||
</div>
|
||||
<div class="row" style="gap: 8px;">
|
||||
<button
|
||||
@@ -31,8 +31,8 @@ export function renderInstances(props: InstancesProps) {
|
||||
hostsRevealed = !hostsRevealed;
|
||||
props.onRefresh();
|
||||
}}
|
||||
title=${masked ? "Show hosts and IPs" : "Hide hosts and IPs"}
|
||||
aria-label="Toggle host visibility"
|
||||
title=${masked ? t("instances.showHosts") : t("instances.hideHosts")}
|
||||
aria-label=${t("instances.toggleHostVisibility")}
|
||||
aria-pressed=${!masked}
|
||||
style="width: 36px; height: 36px;"
|
||||
>
|
||||
@@ -51,7 +51,7 @@ export function renderInstances(props: InstancesProps) {
|
||||
: nothing}
|
||||
<div class="list" style="margin-top: 16px;">
|
||||
${props.entries.length === 0
|
||||
? html` <div class="muted">No instances reported yet.</div> `
|
||||
? html` <div class="muted">${t("instances.noInstances")}</div> `
|
||||
: props.entries.map((entry) => renderEntry(entry, masked))}
|
||||
</div>
|
||||
</section>
|
||||
@@ -59,7 +59,10 @@ export function renderInstances(props: InstancesProps) {
|
||||
}
|
||||
|
||||
function renderEntry(entry: PresenceEntry, masked: boolean) {
|
||||
const lastInput = entry.lastInputSeconds != null ? `${entry.lastInputSeconds}s ago` : "n/a";
|
||||
const lastInput =
|
||||
entry.lastInputSeconds != null
|
||||
? t("common.secondsAgo", { count: String(entry.lastInputSeconds) })
|
||||
: t("common.na");
|
||||
const mode = entry.mode ?? "unknown";
|
||||
const host = entry.host ?? "unknown host";
|
||||
const ip = entry.ip ?? null;
|
||||
@@ -95,8 +98,8 @@ function renderEntry(entry: PresenceEntry, masked: boolean) {
|
||||
</div>
|
||||
<div class="list-meta">
|
||||
<div>${formatPresenceAge(entry)}</div>
|
||||
<div class="muted">Last input ${lastInput}</div>
|
||||
<div class="muted">Reason ${entry.reason ?? ""}</div>
|
||||
<div class="muted">${t("instances.lastInput", { time: lastInput })}</div>
|
||||
<div class="muted">${t("instances.reason", { reason: entry.reason ?? "" })}</div>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
@@ -112,7 +112,7 @@ function renderDevices(props: NodesProps) {
|
||||
|
||||
function renderPendingDevice(req: PendingDevice, props: NodesProps) {
|
||||
const name = req.displayName?.trim() || req.deviceId;
|
||||
const age = typeof req.ts === "number" ? formatRelativeTimestamp(req.ts) : "n/a";
|
||||
const age = typeof req.ts === "number" ? formatRelativeTimestamp(req.ts) : t("common.na");
|
||||
const roleValue = req.role?.trim() || formatList(req.roles);
|
||||
const scopesValue = formatList(req.scopes);
|
||||
const repair = req.isRepair ? " · repair" : "";
|
||||
@@ -252,30 +252,28 @@ function renderBindings(state: BindingState) {
|
||||
<section class="card">
|
||||
<div class="row" style="justify-content: space-between; align-items: center;">
|
||||
<div>
|
||||
<div class="card-title">Exec node binding</div>
|
||||
<div class="card-sub">
|
||||
Pin agents to a specific node when using <span class="mono">exec host=node</span>.
|
||||
</div>
|
||||
<div class="card-title">${t("nodes.binding.execNodeBinding")}</div>
|
||||
<div class="card-sub">${t("nodes.binding.execNodeBindingSubtitle")}</div>
|
||||
</div>
|
||||
<button
|
||||
class="btn"
|
||||
?disabled=${state.disabled || !state.configDirty}
|
||||
@click=${state.onSave}
|
||||
>
|
||||
${state.configSaving ? "Saving…" : "Save"}
|
||||
${state.configSaving ? t("common.saving") : t("common.save")}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
${state.formMode === "raw"
|
||||
? html`
|
||||
<div class="callout warn" style="margin-top: 12px">
|
||||
Switch the Config tab to <strong>Form</strong> mode to edit bindings here.
|
||||
${t("nodes.binding.formModeHint")}
|
||||
</div>
|
||||
`
|
||||
: nothing}
|
||||
${!state.ready
|
||||
? html`<div class="row" style="margin-top: 12px; gap: 12px;">
|
||||
<div class="muted">Load config to edit bindings.</div>
|
||||
<div class="muted">${t("nodes.binding.loadConfigHint")}</div>
|
||||
<button class="btn" ?disabled=${state.configLoading} @click=${state.onLoadConfig}>
|
||||
${state.configLoading ? t("common.loading") : t("common.loadConfig")}
|
||||
</button>
|
||||
@@ -284,12 +282,12 @@ function renderBindings(state: BindingState) {
|
||||
<div class="list" style="margin-top: 16px;">
|
||||
<div class="list-item">
|
||||
<div class="list-main">
|
||||
<div class="list-title">Default binding</div>
|
||||
<div class="list-sub">Used when agents do not override a node binding.</div>
|
||||
<div class="list-title">${t("nodes.binding.defaultBinding")}</div>
|
||||
<div class="list-sub">${t("nodes.binding.defaultBindingHint")}</div>
|
||||
</div>
|
||||
<div class="list-meta">
|
||||
<label class="field">
|
||||
<span>Node</span>
|
||||
<span>${t("nodes.binding.node")}</span>
|
||||
<select
|
||||
?disabled=${state.disabled || !supportsBinding}
|
||||
@change=${(event: Event) => {
|
||||
|
||||
@@ -425,7 +425,7 @@ function renderRow(
|
||||
disabled: boolean,
|
||||
onNavigateToChat?: (sessionKey: string) => void,
|
||||
) {
|
||||
const updated = row.updatedAt ? formatRelativeTimestamp(row.updatedAt) : "n/a";
|
||||
const updated = row.updatedAt ? formatRelativeTimestamp(row.updatedAt) : t("common.na");
|
||||
const rawThinking = row.thinkingLevel ?? "";
|
||||
const isBinaryThinking = isBinaryThinkingProvider(row.modelProvider);
|
||||
const thinking = resolveThinkLevelDisplay(rawThinking, isBinaryThinking);
|
||||
|
||||
Reference in New Issue
Block a user