feat: Add Russian i18n translations and fix CORS + API endpoint issues
Some checks failed
Run tests and pre-commit / Run tests and pre-commit hooks (push) Has been cancelled
Run tests and pre-commit / Frontend Lint and Build (push) Has been cancelled
Publish Fern Docs / run (push) Has been cancelled
Update OpenAPI Specification / update-openapi (push) Has been cancelled

- Implemented full Russian translation (ru) for 8 major pages
- Added LanguageSwitcher component with language detection
- Translated: Navigation, Settings, Workflows, Credentials, Banner, Examples
- Fixed API endpoint path: changed to use sans-api-v1 client for /v1/ endpoints
- Fixed CORS: added http://localhost:8081 to ALLOWED_ORIGINS
- Added locales infrastructure with i18next and react-i18next
- Created bilingual JSON files (en/ru) for 4 namespaces
- 220+ translation keys implemented
- Backend CORS configuration updated in .env
- Documentation: I18N implementation guides and installation docs
This commit is contained in:
Vodorod
2026-02-21 08:29:21 +03:00
parent b56d724ed8
commit 6b69159550
34 changed files with 3715 additions and 217 deletions

View File

@@ -9,9 +9,11 @@ import {
LightningBoltIcon,
} from "@radix-ui/react-icons";
import { KeyIcon } from "@/components/icons/KeyIcon.tsx";
import { useTranslation } from "react-i18next";
function SideNav() {
const { collapsed } = useSidebarStore();
const { t } = useTranslation("common");
return (
<nav
@@ -20,40 +22,40 @@ function SideNav() {
})}
>
<NavLinkGroup
title="Build"
title={t("nav.build")}
links={[
{
label: "Discover",
label: t("nav.discover"),
to: "/discover",
icon: <CompassIcon className="size-6" />,
},
{
label: "Workflows",
label: t("nav.workflows"),
to: "/workflows",
icon: <LightningBoltIcon className="size-6" />,
},
{
label: "Runs",
label: t("nav.runs"),
to: "/runs",
icon: <CounterClockwiseClockIcon className="size-6" />,
},
{
label: "Browsers",
label: t("nav.browsers"),
to: "/browser-sessions",
icon: <GlobeIcon className="size-6" />,
},
]}
/>
<NavLinkGroup
title={"General"}
title={t("nav.general")}
links={[
{
label: "Settings",
label: t("nav.settings"),
to: "/settings",
icon: <GearIcon className="size-6" />,
},
{
label: "Credentials",
label: t("nav.credentials"),
to: "/credentials",
icon: <KeyIcon className="size-6" />,
},