feat: add Russian localization and independent STT languages
CI / Typecheck, tests, lint (push) Canceled after 0s
CI / Standalone (mac-arm64) (push) Canceled after 0s
CI / Standalone (linux-x64) (push) Canceled after 0s
CI / Standalone (windows-x64) (push) Canceled after 0s

This commit is contained in:
2026-10-25 17:18:44 +03:00
parent b277ee3e0f
commit a50ca4b867
93 changed files with 3261 additions and 904 deletions
+7 -5
View File
@@ -1,4 +1,6 @@
"use client";
import { useI18n } from "@/components/i18n";
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import { useRouter } from "next/navigation";
@@ -30,6 +32,7 @@ export function Home({
* changing the setting applies on the next visit home. */
rendering?: boolean;
}) {
const { t } = useI18n();
const router = useRouter();
const [topic, setTopic] = useState("");
/* The topic MIRROR ("nothing gets lost" round, 2026-10-01 — same
@@ -236,8 +239,7 @@ export function Home({
onClick={() => setSetupOpen(true)}
className="rounded-sm border border-border bg-card px-3 py-1.5 font-ui text-xs text-foreground transition-colors hover:border-muted-foreground/50 hover:bg-accent cursor-pointer"
>
Set up your models
</button>
{t("Set up your models")}</button>
)
)}
/>
@@ -270,7 +272,7 @@ export function Home({
void start();
}
}}
placeholder={mode === "practice" ? "What do you want to practice?" : "What do you want to learn?"}
placeholder={mode === "practice" ? t("What do you want to practice?") : t("What do you want to learn?")}
autoFocus
rows={1}
className="field-sizing-content lh-input max-h-48 min-h-10 flex-1 resize-none bg-transparent px-2.5 py-2 outline-none placeholder:text-muted-foreground"
@@ -279,7 +281,7 @@ export function Home({
affordance (owner, subtlety round 2026-09-25). */}
<button
type="submit"
aria-label="Start session"
aria-label={t("Start session")}
disabled={(!topic.trim() && !dictation.active) || busy}
className="flex size-10 shrink-0 items-center justify-center rounded-[10px] bg-primary text-primary-foreground transition-colors hover:opacity-90 disabled:opacity-40"
>
@@ -309,7 +311,7 @@ export function Home({
}
>
{m === "practice" ? <DumbbellIcon aria-hidden="true" className="size-3" /> : null}
{m === "teach" ? "Teach" : "Practice"}
{m === "teach" ? t("Teach") : t("Practice")}
</button>
))}
</div>