agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…
How UI strings are translated with Lingui in apps/web - wrapping strings in Client and Server Components, the locale cookie, catalogs, and adding a language. Use when adding or changing user-facing text in a translated area, translating a page group, or touching apps/web/locales.
Claude Code
$ npx -y skills add elie222/inbox-zero --skill i18n --agent claude-code
Codex
$ npx skills add elie222/inbox-zero --skill i18n -a codex -y
Cursor
$ npx skills add elie222/inbox-zero --skill i18n -a cursor -y
Gemini CLI
$ npx skills add elie222/inbox-zero --skill i18n -a gemini-cli -y
GitHub Copilot
$ npx skills add elie222/inbox-zero --skill i18n -a github-copilot -y
OpenCode
$ npx skills add elie222/inbox-zero --skill i18n -a opencode -y
Windsurf
$ npx skills add elie222/inbox-zero --skill i18n -a windsurf -y
name: i18n description: How UI strings are translated with Lingui in apps/web - wrapping strings in Client and Server Components, the locale cookie, catalogs, and adding a language. Use when adding or changing user-facing text in a translated area, translating a page group, or touching apps/web/locales.
The source language is English. Catalogs live in `apps/web/locales/<locale>/messages.po`; `apps/web/lingui.config.ts` lists the locales. Macros compile with `@lingui/swc-plugin` (Next) and `@lingui/vite-plugin` (Vitest), and `.po` files load through `@lingui/loader`, so there is no compile step.
SWC plugins are tied to the `swc_core` version inside Next. If a Next upgrade fails to load `@lingui/swc-plugin`, move the plugin to a release built for that Next version (plugins.swc.rs lists the pairs).
Only components rendered under `app/(app)/layout.tsx` have a locale: that layout reads the `locale` cookie and wraps the app in `LinguiClientProvider`. Do not wrap strings in components that also render outside it (marketing, login, shared `components/ui`) until that route group gets a provider too, or `useLingui` throws there.
Client Components:
import { Trans, useLingui } from "@lingui/react/macro";
const { t } = useLingui();
<ItemTitle><Trans>Dark mode</Trans></ItemTitle>
<Switch aria-label={t`Toggle dark mode`} />
<Trans>Sign in with {data.email}.</Trans>Server Components and `generateMetadata` have no React context. Call `initLingui()` first in every page, layout, or metadata function that renders text, then use `t(i18n)`:
import { t } from "@lingui/core/macro";
import { initLingui } from "@/utils/i18n/server";
const i18n = await initLingui();
return <PageHeader title={t(i18n)`Settings`} />;`<Trans>` also works in Server Components after `initLingui()`.
A PR that adds or changes UI strings in a translated area also translates them: run `pnpm -F inbox-zero-ai intl:extract`, fill the new entries in every locale's `messages.po`, and commit the catalogs with the code. Every build runs `lingui extract-template` first, so a string that was missed still renders in English instead of breaking.
When translating, keep every placeholder (`{0}`, `{name}`), numbered tag (`<0>…</0>`), and plural `#`, match the catalog's existing terms and tone, and keep short labels short. Check that `pnpm -F inbox-zero-ai exec lingui extract` reports 0 missing for the locale.
Add it to `locales` in `lingui.config.ts`, to `LOCALES` and `LOCALE_LABELS` in `utils/i18n/locales.ts`, and to the catalog imports and `catalogs` map in `utils/i18n/server.ts`. Then run `intl:extract`, translate the new catalog, and commit it.
The `locale` cookie, set by the Language setting in Settings, picks the language; without it the app is English. The browser's language is not used.
The world's best AI personal assistant for email. Open source app to help you reach inbox zero fast.
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…
Cursor Cloud VM setup and service startup instructions for local development
Simplify and refine recently modified code for clarity, consistency, and maintainability while preserving exact behavior. Use…
Review the working tree, commit it safely, and open a GitHub pull request. Use when the user asks to create, open, raise, or…
Shape output for a reader with ADHD: lead with the next action, number multi-step work, restate state across turns, suppress…
Set up the owner profile so a personal agent knows who it works for (first-run setup, \"get to know me\"), or distill colleague,…