Смена языка
Как настроить и переключать языки в приложении Next.js
Переключение языка позволяет пользователям выбирать предпочитаемую локаль для контента вашего приложения. GT Next предлагает несколько подходов — от простого программного переключения до полноценной маршрутизации на основе URL с использованием middleware.
Доступные методы
- Программно: хук
useSetLocaleдля кастомных элементов управления - Готовый UI: компонент
<LocaleSelector>с выпадающим списком - Пользовательский UI: хук
useLocaleSelectorдля создания собственных селекторов - Через URL: маршрутизация с помощью Middleware для локали в путях URL
Использование хука useSetLocale
Хук useSetLocale — это клиентский хук, который позволяет менять язык вашего приложения:
import { useSetLocale } from 'gt-next/client';
export default function MyComponent() {
const setLocale = useSetLocale();
return <button onClick={() => setLocale('en')}>Установить язык</button>;
}Просто передайте нужную локаль в качестве аргумента функции, которую возвращает хук.
Использование компонента <LocaleSelector>
Компонент <LocaleSelector> — это готовый выпадающий список, который автоматически отображает все настроенные локали:
import { LocaleSelector } from 'gt-next/client';
export default function MyComponent() {
return <LocaleSelector />;
}Этот компонент автоматически:
- Показывает все настроенные локали вашего проекта
- Отображает локали на их родных языках
- Обрабатывает переключение
- Сохраняет текущий выбор
Использование хука useLocaleSelector
Если вы хотите создать собственный компонент выбора локали, используйте useLocaleSelector:
import { useLocaleSelector } from 'gt-next/client';
function CustomLocaleSelector() {
const {
locale, // Текущая активная локаль (напр., 'en', 'es')
locales, // Массив локалей, поддерживаемых проектом ['en', 'es', 'fr']
setLocale, // Функция для смены локали: setLocale('es')
getLocaleProperties // Функция для получения отображаемой информации о локали
} = useLocaleSelector();
if (!locales?.length) return null;
return (
<select
value={locale || ''}
onChange={(e) => setLocale(e.target.value)}
>
{locales.map((loc) => {
const props = getLocaleProperties(loc);
return (
<option key={loc} value={loc}>
{props.nativeNameWithRegionCode} {/* напр., "English (US)", "Español (ES)" */}
</option>
);
})}
</select>
);
}Переключение языка на основе URL
Для улучшения SEO и UX вы можете включать локаль в URL с помощью middleware‑маршрутизации. Подробнее об этом подходе — в руководстве по middleware:
/en/products → страница товаров на английском
/es/products → страница товаров на испанском
/fr/products → страница товаров на французскомЭтот подход даёт преимущества для SEO, прямые ссылки на языковые версии и локализованные ссылки, которыми можно делиться.
Важные замечания
Только клиентские компоненты
Все хуки и компоненты для переключения языка должны использоваться в клиентских компонентах, помеченных директивой «use client»:
'use client';
import { useSetLocale } from 'gt-next/client';
function LanguageSwitcher() {
const setLocale = useSetLocale();
// ... логика компонента
}Требование к GTProvider
Компоненты переключения языка должны использоваться внутри <GTProvider>:
// ✅ Правильно
<GTProvider>
<LanguageSwitcher />
</GTProvider>
// ❌ Неправильно - за пределами провайдера
<LanguageSwitcher />Дальнейшие шаги
- Руководство по middleware — маршрутизация языка по URL
- Руководство по динамическому контенту — перевод контента на этапе выполнения
- Справка по API:
Насколько полезно это руководство?