Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
oakoss avatar

Localization Engineer

  • 55 installs
  • 14 repo stars
  • Updated March 2, 2026
  • oakoss/agent-skills

Helps with ai & agent building tasks during AI-assisted development.

About

localization-engineer is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.

  • localization-engineer
  • AI & Agent Building
  • AI-coding skill

Localization Engineer by the numbers

  • 55 all-time installs (skills.sh)
  • +1 installs in the week ending Aug 4, 2026 (Skillselion tracking)
  • Ranked #6,763 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/oakoss/agent-skills --skill localization-engineer

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs55
repo stars14
Last updatedMarch 2, 2026
Repositoryoakoss/agent-skills

What it does

Helps with ai & agent building tasks during AI-assisted development.

Files

SKILL.mdMarkdownGitHub ↗

Localization Engineer

Overview

Provides framework-agnostic patterns for building multilingual applications, covering the full i18n pipeline from locale detection through translation rendering. Addresses universal concerns like ICU message formatting, CLDR plural rules, RTL support, and SEO.

When to use: Adding multi-language support, locale-aware formatting, RTL layouts, pluralization, translation management, locale negotiation, multilingual SEO.

When NOT to use: Single-language apps with no internationalization plans, content that never changes locale, purely server-rendered static sites with no dynamic content.

Key decision: Choose Paraglide for compile-time type safety and minimal bundles in new projects. Choose i18next for broad ecosystem support and incremental adoption in existing projects. See the Library Selection table below.

Library Selection

CriteriaParaglide JSi18next
ArchitectureCompile-time, tree-shakable functionsRuntime, plugin-based ecosystem
Type safetyFull (generated typed message functions)Partial (requires manual type setup)
Bundle sizeMinimal (only used messages shipped)Larger runtime (~40 kB base + plugins)
PluralizationVia message format pluginsBuilt-in with CLDR plural categories
Framework supportSvelteKit, TanStack Start, React Router, Astro, vanillaReact, Vue, Svelte, Angular, Node, vanilla
ICU supportVia inlang-icu-messageformat-1 pluginVia i18next-icu plugin
Translation toolsFink editor, Sherlock VS Code extensionLocize, i18next-parser, many integrations
Locale strategiesBuilt-in (cookie, URL, header, custom)Via i18next-browser-languagedetector plugin
SSR supportAsyncLocalStorage-based per-requestSeparate i18next instance per request
Learning curveLow (compiler generates simple functions)Medium (large API surface, many plugins)
Namespace supportFlat message files per localeMulti-namespace with lazy loading per route
Message formatInlang format or ICU via plugini18next JSON v4 or ICU via plugin
Community sizeGrowing (inlang ecosystem)Large (established since 2015)
Best forNew projects prioritizing bundle size and type safetyExisting projects needing broad ecosystem support

Quick Reference

PatternApproachKey Points
ICU pluralization{count, plural, one {# item} other {# items}}CLDR categories: zero, one, two, few, many, other
ICU select (gender){gender, select, male {He} female {She} other {They}}Covers gender-aware and variant-based messages
ICU selectordinal{rank, selectordinal, one {#st} two {#nd} other {#th}}Ordinal suffixes vary by language
Number formattingIntl.NumberFormat(locale, options)Currency, percent, unit formatting built into platform
Date formattingIntl.DateTimeFormat(locale, options)Avoid manual date string construction
Relative timeIntl.RelativeTimeFormat(locale, options)"3 hours ago", "in 2 days" with locale-aware output
List formattingIntl.ListFormat(locale, { type: 'conjunction' })"Alice, Bob, and Charlie" with locale-aware conjunctions
RTL layoutCSS logical properties (inline-start, inline-end)Replace left/right with logical equivalents
RTL detection<html dir="rtl" lang="ar">Set dir attribute based on locale
Locale from URL/en/about, /de/aboutMost SEO-friendly, clear to users
Locale from cookielocale=de cookiePersists preference across sessions
Locale from headerAccept-Language: de-DE,de;q=0.9,en;q=0.8Browser preference, use as fallback
Hreflang tags<link rel="alternate" hreflang="de" href="...">One per locale plus x-default
Namespace splittingGroup translations by feature or routeReduces bundle size via lazy loading
Message extractionAutomated tooling scans source for translation keysPrevents orphaned or missing translations
PseudolocalizationGenerate fake translations to test layoutCatches truncation, overflow, hardcoded strings

Common Mistakes

MistakeCorrect Pattern
Concatenating translated fragments into sentencesUse ICU message format with placeholders for proper grammar across locales
Using margin-left/padding-right with RTLUse CSS logical properties (margin-inline-start, padding-inline-end)
Hardcoding plural rules (count === 1)Use CLDR plural categories (some languages have zero, two, few, many forms)
Detecting locale only from IP geolocationUse Accept-Language header, then cookie, then geolocation as last resort
Missing x-default in hreflang tagsAlways include <link rel="alternate" hreflang="x-default"> for fallback
One massive translation file per localeSplit into namespaces by feature for lazy loading and maintainability
Creating new i18next instance per componentCreate once at app initialization, share across components
Formatting dates with string concatenationUse Intl.DateTimeFormat for locale-aware date rendering
Storing locale in component stateStore in URL path or cookie for SSR compatibility and shareability
Using different i18n keys in client and serverShare translation files and key structure between client and server
Assuming all languages expand equallyBudget 30-40% extra space for German/Finnish translations vs English
Embedding text in imagesUse CSS/SVG text overlays so translations can be applied dynamically
Using language codes without region variantsUse en-US vs en-GB when formatting differences matter (dates, currency)

Delegation

  • Audit codebase for hardcoded strings: Use Explore agent to scan components for untranslated user-facing text
  • Set up full i18n pipeline: Use Task agent to configure locale detection, translation loading, and rendering
  • Plan localization architecture: Use Plan agent to design namespace structure, locale strategy, and translation workflow
  • Review translation coverage: Use Task agent to compare translation files and identify missing keys across locales
  • Code review for i18n compliance: Delegate to code-reviewer agent
If the tanstack-start skill is available, delegate server middleware and SSR locale patterns to it.
If the tanstack-router skill is available, delegate URL-based locale routing patterns to it.
If the sveltekit skill is available, delegate SvelteKit-specific routing and hooks patterns to it.
If the seo skill is available, delegate advanced hreflang and sitemap patterns to it.

References

  • Paraglide JS patterns -- compile-time i18n with typed message functions, SvelteKit/TanStack Start/React Router integration, locale strategies
  • i18next patterns -- runtime i18n with plugin ecosystem, React/Vue/Svelte/vanilla integration, namespaces, language detection
  • ICU message format -- pluralization, select, number/date formatting, nested messages, RTL support, hreflang SEO

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.