diff --git a/frontend/src/lib/components/LoginScreen.svelte b/frontend/src/lib/components/LoginScreen.svelte index d37de4a..09ff7b4 100644 --- a/frontend/src/lib/components/LoginScreen.svelte +++ b/frontend/src/lib/components/LoginScreen.svelte @@ -1,6 +1,7 @@
-
Здесь пока нет сообщений
+
{t("track.empty")}

- {#if tracked} - {title} - отслеживается — новые сообщения и статистика собираются автоматически. - {:else} - Включите отслеживание, чтобы собирать сообщения, медиа и статистику по - этому чату. - {/if} + {tracked ? t("track.tracked", { title }) : t("track.hint")}

{#if tracked} {:else} {/if}
diff --git a/frontend/src/lib/components/annotations/AnnotationEditor.svelte b/frontend/src/lib/components/annotations/AnnotationEditor.svelte index bdadd9e..6962c9f 100644 --- a/frontend/src/lib/components/annotations/AnnotationEditor.svelte +++ b/frontend/src/lib/components/annotations/AnnotationEditor.svelte @@ -1,5 +1,6 @@ {#if chatId === null || messageId === null} - + {:else}
diff --git a/frontend/src/lib/components/bots/BotsPanel.svelte b/frontend/src/lib/components/bots/BotsPanel.svelte index 36153a8..c152c4a 100644 --- a/frontend/src/lib/components/bots/BotsPanel.svelte +++ b/frontend/src/lib/components/bots/BotsPanel.svelte @@ -8,6 +8,8 @@ import Button from "#lib/components/ui/Button.svelte"; import Icon from "#lib/components/ui/Icon.svelte"; import Spinner from "#lib/components/ui/Spinner.svelte"; + import { t } from "#lib/i18n/locale.svelte.js"; + import type { MessageKey } from "#lib/i18n/messages.js"; import { accounts } from "#lib/stores/accounts.svelte.js"; import { toasts } from "#lib/stores/toasts.svelte.js"; import { ui } from "#lib/stores/ui.svelte.js"; @@ -17,14 +19,19 @@ let token = $state(""); let adding = $state(false); - const statusLabels: Record = { - error: "ошибка", - ok: "слушает", - pending: "подключается", - removed: "отключён", - unauthorized: "токен отклонён", + const STATUS_KEYS: Record = { + error: "bots.status.error", + ok: "bots.status.ok", + pending: "bots.status.pending", + removed: "bots.status.removed", + unauthorized: "bots.status.unauthorized", }; + function statusLabel(status: string): string { + const key = STATUS_KEYS[status]; + return key ? t(key) : status; + } + async function load() { loading = true; try { @@ -49,7 +56,7 @@ await load(); await accounts.load(); } catch { - toasts.error("Не похоже на токен бота"); + toasts.error(t("bots.badToken")); } finally { adding = false; } @@ -81,7 +88,7 @@ {#if loading} {:else if bots.length === 0} -

Ботов пока нет.

+

{t("bots.empty")}

{:else}
    {#each bots as bot (bot.bot_id)} @@ -94,9 +101,9 @@ > {botName(bot)} - {statusLabels[bot.status] ?? bot.status} + {statusLabel(bot.status)} {#if bot.account_id !== null} - · аккаунт {bot.account_id} + · {t("bots.account", { id: bot.account_id })} {/if} {#if bot.status_detail} @@ -105,7 +112,7 @@ {#if bot.enabled} +
-

- Бот входит по MTProto отдельной авторизацией — это не отнимает getUpdates у - того, кто держит того же бота через Bot API, и не требует вебхука. Дальше он - становится обычным аккаунтом архива: чаты, сообщения, медиа и участники - групп видны там же, где переписка остальных аккаунтов. -

-

- Прошлое подтягивается из очереди недоставленных апдейтов, которую Telegram - держит для бота; история диалогов боту запрещена, глубже этой очереди - заглянуть нельзя. В личке бот видит каждого, кто ему написал; в группах всё - — только при выключенном privacy mode. Отключение убирает токен и сессию, - архив остаётся. -

+

{t("bots.login")}

+

{t("bots.history")}