Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Internationalization (i18n) guide for Next.js / Node.js web applications using the App Router. Covers translation file structure, locale routing, SEO metadat...
Internationalization (i18n) guide for Next.js / Node.js web applications using the App Router. Covers translation file structure, locale routing, SEO metadat...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
All user-facing features must implement i18n β no hardcoded strings in components. Translations must be natural and idiomatic β never use scripts or machine translation; treat quality the same as English copywriting. SEO metadata, JSON-LD structured data, and sitemaps must all be locale-aware. Default locale (English) uses clean URLs with no prefix (/products); other locales use a prefix (/es/products).
Locale list lives in src/lib/i18n/locales.ts. Keep the sitemap script's locales array in sync with this file. export const locales = ['en', 'es', 'fr', 'de', 'ja', 'zh-CN', /* ... add as needed */] export const defaultLocale = 'en' export type Locale = typeof locales[number]
src/app/[lang]/ βββ dictionaries/ β One JSON file per locale β βββ en.json β βββ es.json β βββ ... βββ dictionaries.ts β getDictionary(locale) server helper βββ layout.tsx β Root layout: generateMetadata + hreflang + JSON-LD βββ <page>/ βββ page.tsx β generateMetadata + page content
See references/translation-files.md for: JSON key hierarchy conventions (page.section.key) Server-side getDictionary() usage Client-side useDictionary() hook usage Template variable pattern ({count} substitution) Fallback pattern for missing keys
See references/routing.md for: src/middleware.ts β locale detection, redirect /en/* β /*, rewrite for default locale LocalizedLink component β automatically prefixes non-default locales useLocale() hook β reads locale from URL params β pathname β localStorage β default getLocalizedPath() / removeLocalePrefix() utilities
See references/seo-metadata.md for: generateMetadata() pattern in layout/page files generateAlternatesMetadata() from src/lib/i18n/seo.ts Full hreflang alternates.languages output (all locales + x-default) OpenGraph locale / alternateLocale fields html lang attribute and LangSetter client component
See references/structured-data.md for: WebApplication schema with translated featureList, description BlogPosting schema with inLanguage field FAQ schema with translated acceptedAnswer BreadcrumbList schema with localized URLs Rendering via <Script> or <script> tags
See references/sitemap.md for: Sitemap structure: one <url> entry per page with <xhtml:link> alternates for every locale <loc> uses the default-locale (clean) URL; x-default also points there Full XML example with static and dynamic pages Next.js App Router sitemap.ts implementation pattern What to include vs. exclude (admin/API routes excluded) Hreflang language code format rules
Add translation keys to all locale JSON files in src/app/[lang]/dictionaries/ Add English first, then translate to all other languages naturally Server components: const dict = await getDictionary(locale) β dict?.page?.section?.key || 'fallback' Client components: const dict = useDictionary() β same fallback pattern Add generateMetadata() to the page file, calling generateAlternatesMetadata() Add JSON-LD structured data script tag with translated fields and inLanguage Update sitemap if the page is new: add it to the sitemap source (see references/sitemap.md) Use <LocalizedLink> for internal links and getLocalizedPath() for programmatic navigation
Add locale code to locales array in src/lib/i18n/locales.ts Add locale entry to dictionaries/ as <code>.json (full translation of en.json) Add entry in src/app/[lang]/dictionaries.ts import map Add display name in LanguageSwitcher languageNames map Sync the sitemap locale list with the app's locales array Regenerate / redeploy the sitemap
Agent frameworks, memory systems, reasoning layers, and model-native orchestration.
Largest current source with strong distribution and engagement signals.