feat(frontend): storage, trash, policy, stories, shares, jobs, bots, media, login and notes speak russian and english

This commit is contained in:
hh committed 2026-10-19 03:53:08 +00:00
1 parent e5a5edcaae
commit 4a5c92f0e9
51 files changed
+1504 -588

No files matched your search

@@ -5,6 +5,7 @@
import EmptyState from "#lib/components/ui/EmptyState.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 { accounts } from "#lib/stores/accounts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { page } from "$app/state";
@@ -90,11 +91,11 @@
</script>
{#if chatId === null || messageId === null}
<EmptyState description="Сообщение не выбрано" title="Callback-данные" />
<EmptyState description={t("ui.noMessage")} title={t("social.callbacks")} />
{:else if loading && items.length === 0}
<div class="center"><Spinner /></div>
{:else if items.length === 0}
<EmptyState title="Нет callback-кнопок" />
<EmptyState title={t("social.callbacks.empty")} />
{:else}
<ul class="list">
{#each items as item (item.position)}
@@ -106,7 +107,7 @@
</div>
{#if value}
<button
aria-label="Скопировать"
aria-label={t("ui.copy")}
class="copy"
onclick={() => copy(item.position, value)}
type="button"
@@ -6,6 +6,7 @@
import Icon from "#lib/components/ui/Icon.svelte";
import Spinner from "#lib/components/ui/Spinner.svelte";
import { safeHref } from "#lib/format/url.js";
import { t } from "#lib/i18n/locale.svelte.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
import { page } from "$app/state";
@@ -56,11 +57,11 @@
</script>
{#if chatId === null || messageId === null}
<EmptyState description="Сообщение не выбрано" title="Ссылки" />
<EmptyState description={t("ui.noMessage")} title={t("social.links")} />
{:else if loading && items.length === 0}
<div class="center"><Spinner /></div>
{:else if items.length === 0}
<EmptyState title="Нет ссылок" />
<EmptyState title={t("social.links.empty")} />
{:else}
<ul class="list">
{#each items as item (item.position)}
@@ -8,6 +8,7 @@
import Spinner from "#lib/components/ui/Spinner.svelte";
import { formatFull } from "#lib/format/datetime.js";
import { peerColorIndex, peerName } from "#lib/format/peer.js";
import { t } from "#lib/i18n/locale.svelte.js";
import { accounts } from "#lib/stores/accounts.svelte.js";
import { peers } from "#lib/stores/peers.svelte.js";
import { ui } from "#lib/stores/ui.svelte.js";
@@ -65,11 +66,11 @@
</script>
{#if chatId === null || messageId === null}
<EmptyState description="Сообщение не выбрано" title="Реакции" />
<EmptyState description={t("ui.noMessage")} title={t("social.reactions")} />
{:else if loading && items.length === 0}
<div class="center"><Spinner /></div>
{:else if items.length === 0}
<EmptyState title="Нет реакций" />
<EmptyState title={t("social.reactions.empty")} />
{:else}
<div class="groups">
{#each groups as [reaction, reactors] (reaction)}
@@ -104,7 +105,9 @@
>
<span class="time">
{#if reactor.removed_at}
снято · {formatFull(reactor.removed_at)}
{t("social.reactions.removed", {
date: formatFull(reactor.removed_at),
})}
{:else}
{formatFull(reactor.added_at)}
{/if}