Интеграция с React Router / Remix

Lingo.dev Compiler безупречно работает с React Router и последней версией Remix (которая теперь является React Router v7), обеспечивая локализацию на этапе сборки.

Следуйте этим шагам, чтобы добавить поддержку нескольких языков в ваше приложение на React Router или Remix.

Или изучите демо-проект React Router / Remix, чтобы увидеть Compiler в действии.

Предварительные требования

  • React Router v6+ или Remix
  • Vite в качестве инструмента сборки
  • React 18+
  • Node.js 18 или выше

Шаг 1. Установите пакет

Установите пакет lingo.dev:

bash npm install lingo.dev


## Шаг 2. Настройте Vite

Импортируйте и настройте компилятор в вашем `vite.config.ts`:

```ts
import { defineConfig } from "vite";
import lingoCompiler from "lingo.dev/compiler";

const viteConfig = {
  // Ваша существующая конфигурация Vite
};

export default defineConfig(() =>
  lingoCompiler.vite({
    sourceRoot: "app",
    targetLocales: ["es", "fr", "de"],
    models: {
      "*:*": "groq:mistral-saba-24b",
    },
  })(viteConfig),
);
```

## Шаг 3. Настройте аутентификацию

Создайте бесплатный аккаунт на [groq.com](https://groq.com/) и добавьте ваш API-ключ:

```bash

# .env

GROQ_API_KEY=gsk_...
```

## Шаг 4. Добавьте провайдер

### Для React Router

Импортируйте провайдер в ваш корневой компонент (`app/root.tsx`):

```tsx
import { LingoProvider } from "lingo.dev/react/client";
import { loadDictionary } from "lingo.dev/react/react-router";
import type { LoaderFunctionArgs } from "react-router";
import { useLoaderData } from "react-router";

// Для React Router с загрузчиками данных
export async function loader(args: LoaderFunctionArgs) {
  return {
    lingoDictionary: await loadDictionary(args.request),
  };
}

export default function Root() {
  const { lingoDictionary } = useLoaderData<typeof loader>();

  return (
    <LingoProvider dictionary={lingoDictionary}>
      <html>
        <body>
          <Outlet />
        </body>
      </html>
    </LingoProvider>
  );
}
```

### Для Remix

Импортируйте провайдер в ваш корневой маршрут (`app/root.tsx`):

```tsx
import { LingoProvider } from "lingo.dev/react/client";
import { loadDictionary } from "lingo.dev/react/react-router";
import type { LoaderFunctionArgs } from "react-router";
import { useLoaderData } from "react-router";

export async function loader(args: LoaderFunctionArgs) {
  return json({
    lingoDictionary: await loadDictionary(args.request),
  });
}

export default function App() {
  const { lingoDictionary } = useLoaderData<typeof loader>();

  return (
    <LingoProvider dictionary={lingoDictionary}>
      <html>
        <head>
          <Meta />
          <Links />
        </head>
        <body>
          <Outlet />
          <ScrollRestoration />
          <Scripts />
        </body>
      </html>
    </LingoProvider>
  );
}
```

## Шаг 5. Необязательно: добавьте переключатель локалей

Создайте компонент переключателя языков:

```tsx
import { LocaleSwitcher } from "lingo.dev/react/client";

export function Header() {
  return (
    <header>
      <nav>
        <LocaleSwitcher locales={["en", "es", "fr", "de"]} />
      </nav>
    </header>
  );
}
```

## Шаг 6. Сборка и тестирование

Запустите сервер разработки:

```bash
npm run dev
```

Компилятор автоматически выполнит следующие действия:

1. Сканирует ваши React-компоненты на наличие переводимого контента
2. Извлечет ключи переводов
3. Сгенерирует переводы с помощью ИИ
4. Создаст оптимизированные файлы переводов в директории `lingo/`

Перейдите по адресу `http://localhost:5173`, чтобы увидеть ваше многоязычное приложение в действии.

## Настройки конфигурации

Вы можете настроить поведение компилятора:

```ts
export default defineConfig(() =>
  lingoCompiler.vite({
    sourceRoot: "src",
    sourceLocale: "en",
    targetLocales: ["es", "fr", "de", "ja"],
    lingoDir: "lingo",
    debug: false,
  })(viteConfig),
);
```

## Серверный рендеринг

Компилятор работает как с клиентским, так и с серверным рендерингом:

### Клиентские компоненты

```tsx
// src/components/Welcome.tsx
export function Welcome() {
  return (
    <div>
      <h1>Добро пожаловать в наше приложение</h1>
      <p>Этот контент переводится автоматически</p>
    </div>
  );
}
```

### Компоненты маршрутов

```tsx
// app/routes/about.tsx
export default function About() {
  return (
    <div>
      <h1>О нас</h1>
      <p>Узнайте больше о нашей компании</p>
    </div>
  );
}
```

## Развертывание в продакшн

1. **Соберите ваше приложение**:

   ```bash
   npm run build
   ```

2. **Закоммитьте файлы переводов**:

   ```bash
   git add lingo/
   git commit -m "Добавить переводы"
   ```

3. **Разверните** на вашей предпочтительной платформе

Ваше приложение на React Router или Remix будет автоматически предоставлять локализованный контент на основе предпочтений пользователя или шаблонов URL.

## Следующие шаги

- **Расширенная конфигурация**: [Варианты настройки](../configuration/advanced)
- **Часто задаваемые вопросы**: [Общие вопросы и устранение неполадок](../guides/faq)
- **Как это работает**: [Понимание процесса сборки](../how-it-works)