- {#if tracked}
- {title}
- отслеживается — новые сообщения и статистика собираются автоматически.
- {:else}
- Включите отслеживание, чтобы собирать сообщения, медиа и статистику по
- этому чату.
- {/if}
+ {tracked ? t("track.tracked", { title }) : t("track.hint")}
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}
-
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}
remove(bot)}
round
smaller
@@ -121,25 +128,14 @@
- Токен бота от @BotFather
+ {t("bots.token")}
- Добавить
+ {t("bots.add")}
-
- Бот входит по MTProto отдельной авторизацией — это не отнимает getUpdates у
- того, кто держит того же бота через Bot API, и не требует вебхука. Дальше он
- становится обычным аккаунтом архива: чаты, сообщения, медиа и участники
- групп видны там же, где переписка остальных аккаунтов.
-
-
- Прошлое подтягивается из очереди недоставленных апдейтов, которую Telegram
- держит для бота; история диалогов боту запрещена, глубже этой очереди
- заглянуть нельзя. В личке бот видит каждого, кто ему написал; в группах всё
- — только при выключенном privacy mode. Отключение убирает токен и сессию,
- архив остаётся.
-
+ {t("bots.login")}
+ {t("bots.history")}