Přeskočit na obsah

Internacionalizace

Starter je z krabice jen v angličtině, ale i18n engine je plně zapojený, takže můžete přidávat jazyky bez toho, abyste cokoli přearchitektovávali.

i18n systém stojí na třech vrstvách:

  1. Vestavěné i18n Astra — locale routing nakonfigurovaný v astro.config.ts
  2. Pole locale u kolekcí obsahu — každý záznam obsahu deklaruje svůj locale
  3. Překladové soubory — UI řetězce žijí v src/i18n/<locale>.json

Jediný zdroj pravdy pro aktivní locale je src/config/i18n.config.ts (zrcadlený v src/lib/site-config.ts a astro.config.ts).

UI řetězce žijí v src/i18n/en.json a čtou se přes helper t():

---
import { t } from "../i18n/ui";
const locale = (Astro.currentLocale || "en") as "en";
---
<p>{t(locale, "nav.home")}</p>

t() spadne zpět na samotný klíč, když řetězec chybí, takže dev buildy selžou hlasitě, když překlad chybí.

  1. Rozšiřte typ v src/lib/site-config.ts:

    export type Locale = "en" | "id";
  2. Zaregistrujte locale v konfiguračních souborech:

    src/lib/site-config.ts
    locales: ["en", "id"] as const,
    localeLabels: { en: "English", id: "Indonesia" } as const,
    localePrefixes: { en: "en", id: "id" } as const,
    // src/config/i18n.config.ts → locales: ["en", "id"]
    // astro.config.ts → i18n.locales + sitemap.i18n.locales
  3. Přidejte překladový soubor src/i18n/id.json a zaregistrujte ho v src/i18n/ui.ts:

    import id from "./id.json";
    export const translations = { en, id };
  4. Přidejte lokalizovaný obsah nastavením frontmatteru locale na kopii každého záznamu (např. about.md pro en, about.id.md pro id) a rozšiřte enum locale v src/content.config.ts.

  5. Přidejte prefixované routy pod src/pages/[locale]/ pro non-výchozí locale (výchozí locale se servíruje v kořeni bez prefixu).

Jakmile je zaregistrovaný druhý locale, přepínač jazyků v hlavičce se objeví automaticky.