|Labs
Rezervovat demoPlatforma
React (Lingo Compiler)
Alpha
React (MCP)React (i18n)Legacy CLI (v0)
Zastaralé

Lingo.dev Compiler

  • Jak to funguje
  • Nastavení
  • Compiler: rychlý start

Frameworky

  • Integrace s Next.js
  • Vite + React

Průvodci

  • Přepínání jazyků
  • Automatická pluralizace
  • Ruční přepsání
  • Režimy sestavení
  • Struktura projektu
  • Poskytovatelé překladu
  • Vlastní resolvery jazyka
  • Vývojové nástroje

Reference

  • Osvědčené postupy
  • Configuration Reference
  • Řešení problémů
  • Průvodce migrací
  • Optimalizace
  • Výstupní formáty

Vlastní resolvery jazyka

Alpha

Lingo.dev Compiler je ve fázi alpha. Je nestabilní, nedoporučuje se pro produkční nasazení a API se mohou mezi jednotlivými verzemi měnit.

Vlastní resolvery jazyka vám umožní přepsat způsob, jakým Lingo.dev Compiler zjišťuje a ukládá jazyk uživatele. Ve výchozím nastavení používá ukládání přes cookie nakonfigurované pomocí volby localePersistence. Pokud potřebujete větší kontrolu – směrování podle URL, detekci z hlaviček, localStorage nebo vlastní logiku – vytvořte soubory resolveru v adresáři .lingo/.

Soubory resolveru#

Compiler hledá dva nepovinné soubory:

SouborProstředíExporty
.lingo/locale-resolver.server.tsServer-side (SSR, RSC)resolveLocale(request: Request): string
.lingo/locale-resolver.client.tsClient-side (prohlížeč)resolveLocale(): string and persistLocale(locale: string): void

Pokud soubor resolveru existuje, Compiler ho použije místo výchozího chování založeného na cookie. Pokud existuje jen jeden soubor, v druhém prostředí se použije výchozí chování.

Resolver na straně serveru#

Serverový resolver přijímá příchozí objekt Request a vrací řetězec s kódem jazyka:

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";
}

Resolver na straně klienta#

Klientský resolver má dvě funkce: jednu pro načtení aktuálního jazyka a druhou pro uložení změny jazyka:

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}`;
}

Běžné vzory resolverů#

Směrování podle prefixu v URL cestě (/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}`;
}

Funkce resolveLocale musí vrátit kód jazyka, který odpovídá jednomu z nakonfigurovaných targetLocales nebo sourceLocale. Pokud vrátí nepodporovaný kód jazyka, Compiler se vrátí ke zdrojovému jazyku.

Další kroky#

Přepínání jazyků
Vytvořte komponentu pro přepínání jazyků
Reference konfigurace
Možnosti localePersistence
Struktura projektu
Struktura adresáře .lingo/
Integrace Next.js
Řešení jazyka na straně serveru v Next.js

Byla tato stránka užitečná?

Max PrilutskiyMax Prilutskiy·Aktualizováno před 4 dny·3 min čtení