|Labs
Заказать демоПлатформа
React (Lingo Compiler)
Альфа
React (MCP)React (i18n)CLI прежней версии (v0)
Устаревшее

Lingo.dev Compiler

  • Как это работает
  • Настройка
  • Быстрый старт Compiler

Фреймворки

  • Интеграция с Next.js
  • Vite + React

Руководства

  • Переключение локали
  • Автоматическая обработка множественного числа
  • Ручные переопределения
  • Режимы сборки
  • Структура проекта
  • Провайдеры перевода
  • Пользовательские резолверы локали
  • Инструменты для разработки

Справочник

  • Лучшие практики
  • Справочник по конфигурации
  • Устранение неполадок
  • Руководство по миграции
  • Оптимизация
  • Форматы вывода

Пользовательские резолверы локали

Альфа

Lingo.dev Compiler находится в альфа-версии. Он нестабилен, не рекомендуется для production, а API могут меняться от релиза к релизу.

Пользовательские резолверы локали позволяют переопределить то, как Lingo.dev Compiler определяет и сохраняет локаль пользователя. По умолчанию Compiler использует сохранение через cookie, настроенное с помощью опции localePersistence. Если вам нужен более гибкий контроль — маршрутизация по URL, определение по заголовкам, localStorage или любая другая логика — создайте файлы резолвера в каталоге .lingo/.

Файлы резолвера#

Compiler ищет два необязательных файла:

ФайлСредаЭкспортируемые значения
.lingo/locale-resolver.server.tsНа сервере (SSR, RSC)resolveLocale(request: Request): string
.lingo/locale-resolver.client.tsНа клиенте (браузер)resolveLocale(): string and persistLocale(locale: string): void

Если файл резолвера существует, Compiler использует его вместо стандартного поведения на основе cookie. Если существует только один файл, во второй среде будет использоваться стандартное поведение.

Серверный резолвер#

Серверный резолвер получает входящий объект Request и возвращает строку с кодом локали:

ts
// .lingo/locale-resolver.server.ts

export function resolveLocale(request: Request): string {
  const url = new URL(request.url);

  // Check URL path prefix: /es/about -> "es"
  const pathLocale = url.pathname.split("/")[1];
  const supportedLocales = ["en", "es", "de", "fr", "ja"];

  if (supportedLocales.includes(pathLocale)) {
    return pathLocale;
  }

  // Fall back to Accept-Language header
  const acceptLanguage = request.headers.get("Accept-Language");
  if (acceptLanguage) {
    const preferred = acceptLanguage.split(",")[0].split("-")[0];
    if (supportedLocales.includes(preferred)) {
      return preferred;
    }
  }

  return "en";
}

Клиентский резолвер#

Клиентский резолвер состоит из двух функций: одна считывает текущую локаль, вторая сохраняет её изменение:

ts
// .lingo/locale-resolver.client.ts

export function resolveLocale(): string {
  // Check URL path prefix
  const pathLocale = window.location.pathname.split("/")[1];
  const supportedLocales = ["en", "es", "de", "fr", "ja"];

  if (supportedLocales.includes(pathLocale)) {
    return pathLocale;
  }

  // Fall back to localStorage
  const stored = localStorage.getItem("locale");
  if (stored && supportedLocales.includes(stored)) {
    return stored;
  }

  return "en";
}

export function persistLocale(locale: string): void {
  localStorage.setItem("locale", locale);

  // Navigate to the locale-prefixed URL
  const path = window.location.pathname.replace(/^\/[a-z]{2}/, "");
  window.location.href = `/${locale}${path}`;
}

Частые сценарии для резолверов#

Маршрутизация по префиксу в URL-пути (/es/about, /de/pricing):

ts
// .lingo/locale-resolver.server.ts
export function resolveLocale(request: Request): string {
  const url = new URL(request.url);
  const locale = url.pathname.split("/")[1];
  const supported = ["en", "es", "de", "fr"];
  return supported.includes(locale) ? locale : "en";
}
ts
// .lingo/locale-resolver.client.ts
export function resolveLocale(): string {
  const locale = window.location.pathname.split("/")[1];
  const supported = ["en", "es", "de", "fr"];
  return supported.includes(locale) ? locale : "en";
}

export function persistLocale(locale: string): void {
  const path = window.location.pathname.replace(/^\/[a-z]{2}/, "");
  window.location.href = `/${locale}${path}`;
}

Функция resolveLocale должна возвращать код локали, который соответствует одной из настроенных targetLocales или sourceLocale. Если вернуть неподдерживаемый код локали, Compiler переключится на исходную локаль.

Что дальше#

Переключение локали
Создайте компонент для переключения языка
Конфигурация Справочник
Параметры localePersistence
Структура проекта
Структура каталога .lingo/
Интеграция с Next.js
Определение локали на сервере в Next.js

Эта страница была полезной?

Max PrilutskiyMax Prilutskiy·Обновлено 4 месяца назад·3 минуты чтения