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
+9 -7
View File
@@ -1,4 +1,6 @@
"use client";
import { useI18n } from "@/components/i18n";
import { useEffect } from "react";
import { createPortal } from "react-dom";
@@ -60,13 +62,14 @@ export function AbortTurnBody({
* (owner, 2026-10-04): the line says so. */
busy?: boolean;
}) {
const { t } = useI18n();
const backdropDismiss = useBackdropDismiss(onClose);
const copy = COPY[mode];
return (
<div
role="dialog"
aria-modal="true"
aria-label={copy.title}
aria-label={t(copy.title)}
data-testid="abort-turn-dialog"
className="fixed inset-0 z-50 flex items-center justify-center bg-background/80 backdrop-blur-sm"
// A genuine click on the scrim cancels — the cautious default, like Esc.
@@ -77,11 +80,11 @@ export function AbortTurnBody({
onClick={(e) => e.stopPropagation()}
>
<h2 className="text-sm font-semibold text-card-foreground" data-testid="abort-turn-title">
{copy.title}
{t(copy.title)}
</h2>
<p className="mt-1.5 text-xs text-muted-foreground" data-testid="abort-turn-line">
{copy.line}
{busy && mode !== "turn" ? " The working turn stops too." : ""}
{t(copy.line)}
{busy && mode !== "turn" ? t(" The working turn stops too.") : ""}
</p>
<div className="mt-4 flex justify-end gap-2">
<button
@@ -90,8 +93,7 @@ export function AbortTurnBody({
onClick={onClose}
className="rounded-sm px-3 py-1.5 text-xs text-muted-foreground transition-colors hover:text-foreground"
>
Cancel
</button>
{t("Cancel")}</button>
<button
type="button"
data-testid="abort-turn-confirm"
@@ -99,7 +101,7 @@ export function AbortTurnBody({
// Destructive red — the app's established destructive pair.
className="rounded-sm border border-destructive/50 bg-destructive/10 px-3 py-1.5 text-xs text-destructive transition-colors hover:bg-destructive/20"
>
{copy.action}
{t(copy.action)}
</button>
</div>
</div>