Astro: Getting Started
Install the packages
Section titled “Install the packages”vp add @lingui/core lingui-for-astrovp add -D @lingui/cli @lingui/conf unplugin-lingui-macronpm install @lingui/core lingui-for-astronpm install -D @lingui/cli @lingui/conf unplugin-lingui-macropnpm add @lingui/core lingui-for-astropnpm add -D @lingui/cli @lingui/conf unplugin-lingui-macroyarn add @lingui/core lingui-for-astroyarn add -D @lingui/cli @lingui/conf unplugin-lingui-macroConfigure Astro
Section titled “Configure Astro”import { defineConfig } from "astro/config";import linguiForAstro from "lingui-for-astro/integration";import linguiMacro from "unplugin-lingui-macro/vite";
export default defineConfig({ integrations: [linguiForAstro()], vite: { plugins: [linguiMacro()], },});Configure Lingui
Section titled “Configure Lingui”import babelExtractor from "@lingui/cli/api/extractors/babel";import { defineConfig } from "@lingui/conf";import { astroExtractor } from "lingui-for-astro/extractor";
export default defineConfig({ locales: ["en", "ja"], sourceLocale: "en", catalogs: [{ path: "src/lib/i18n/locales/{locale}" }], extractors: [astroExtractor, babelExtractor],});Initialize Lingui for your output mode
Section titled “Initialize Lingui for your output mode”For server and hybrid output, call setLinguiContext from middleware before any page renders.
This is where you load the compiled catalog for the current request.
import { defineMiddleware } from "astro:middleware";import { setupI18n } from "@lingui/core";import { setLinguiContext } from "lingui-for-astro";import { catalog } from "./lib/i18n/catalog";
export const onRequest = defineMiddleware((context, next) => { const locale = resolveLocale(context); // your locale resolution logic const i18n = setupI18n({ locale, messages: catalog }); setLinguiContext(context.locals, i18n); return next();});Use macros in .astro
Section titled “Use macros in .astro”---import { Trans, t } from "lingui-for-astro/macro";---
<h1>{t`Hello from Astro`}</h1><p><Trans>Macro-first translation in Astro</Trans></p>Next pages
Section titled “Next pages”- Read i18n Context for how
Astro.localscarries the i18n instance, how static and request-aware setup differ, and how to access it manually. - Read Using Islands if you have client framework islands that need translation.
- Read Astro caveats for server/runtime boundaries.