"use i18n";
Директива "use i18n" позволяет локализовать React-компоненты файл за файлом без необходимости рефакторинга существующего кода. Точно так же, как "use client"
или "use server"
, вы просто добавляете её в начало файла, чтобы автоматически локализовать весь переводимый контент в этом компоненте.
Этот подход идеально подходит для постепенного добавления поддержки нескольких языков в крупные кодовые базы с минимальным риском и максимальной гибкостью.
Как это работает
Когда вы добавляете "use i18n"
в начало React-файла, компилятор Lingo.dev автоматически:
- Сканирует весь файл на наличие переводимого контента
- Извлекает текст JSX и переводимые атрибуты
- Генерирует переводы с использованием настроенной AI-модели
- Встраивает локализованные версии на этапе сборки
- Сохраняет горячую замену модулей (Hot Module Replacement) для бесшовной разработки
Директива работает на уровне файла, обрабатывая всё в пределах границ компонента, оставляя остальную часть вашего приложения без изменений.
Включение директивы
Чтобы использовать директиву "use i18n"
, включите её в конфигурации компилятора:
{
sourceLocale: "en",
targetLocales: ["es", "fr", "de"],
useDirective: true, // Включить директиву "use i18n"
models: {
"*:*": "groq:mistral-saba-24b",
}
}
Примечание: Если useDirective
установлено в false
(значение по умолчанию), компилятор Lingo.dev обрабатывает все файлы так, как если бы в них была добавлена "use i18n"
. Установка useDirective: true
позволяет вам управлять локализацией файлов индивидуально.
Базовое использование
Добавьте директиву в начало любого файла React-компонента:
"use i18n";
import React from "react";
export function WelcomeCard() {
return (
<div className="card">
<h2>Добро пожаловать в наше приложение!</h2>
<p>
Начните с изучения наших функций и узнайте, что делает нашу платформу
особенной.
</p>
<button>Начать</button>
</div>
);
}
Вот и всё! Теперь компонент автоматически будет отображаться на выбранном пользователем языке без каких-либо изменений в коде.
Работает с существующими директивами
Директива "use i18n"
естественно работает вместе с другими директивами React, которые вы уже используете:
"use client";
"use i18n";
export function InteractiveComponent() {
const [count, setCount] = useState(0);
return (
<div>
<h1>Счётчик кликов</h1>
<p>Вы кликнули {count} раз(а)</p>
<button onClick={() => setCount(count + 1)}>Кликните меня!</button>
</div>
);
}
"use server";
"use i18n";
export async function ServerComponent() {
const data = await fetchData();
return (
<div>
<h1>Контент, отрендеренный на сервере</h1>
<p>Этот контент рендерится на сервере и локализуется на этапе сборки</p>
</div>
);
}
Компилятор интеллектуально обрабатывает все директивы вместе, сохраняя ожидаемое поведение ваших компонентов и добавляя локализацию.
Рабочий процесс разработки
1. Постепенная миграция
Начните с добавления директивы в отдельные компоненты:
// До: компонент только на английском
export function Header() {
return <h1>My Application</h1>;
}
// После: многоязычный компонент с одной строкой
("use i18n");
export function Header() {
return <h1>My Application</h1>;
}
2. Горячая замена модулей
Директива бесшовно работает с HMR. Когда вы изменяете текст в компоненте с "use i18n"
, переводы обновляются мгновенно в вашем браузере:
"use i18n";
export function StatusMessage() {
return (
<div>
{/* Измените этот текст, и он обновится на всех языках мгновенно */}
<p>Ваши изменения успешно сохранены!</p>
</div>
);
}
3. Пофайловый подход
Идеально подходит для больших кодовых баз, где вы хотите локализовать постепенно:
src/
├── components/
│ ├── Header.tsx // ✅ "use i18n" - локализовано
│ ├── Navigation.tsx // ✅ "use i18n" - локализовано
│ ├── ProductCard.tsx // ✅ "use i18n" - локализовано
│ ├── Footer.tsx // ⏳ Ещё не локализовано
│ └── Sidebar.tsx // ⏳ Ещё не локализовано
Преимущества
Директива "use i18n"
делает локализацию настолько простой, что достаточно добавить одну строку в ваши React-компоненты. Она разработана для зрелых проектов, которые требуют постепенной локализации.
Следующие шаги
- Быстрый старт: Начните с Lingo.dev Compiler
- Как это работает: Понимание обработки на этапе сборки
- Интеграция с фреймворками: Руководства для конкретных платформ
- Расширенная конфигурация: Варианты настройки