Overview
The i18n & Localization skill teaches internationalization (i18n) and localization (L10n) best practices. It covers making applications translatable, managing translations, locale files, RTL support, and detecting hardcoded strings.What This Skill Provides
- Core concepts: i18n vs L10n, locales, and RTL languages
- Implementation patterns: React (react-i18next), Next.js (next-intl), Python (gettext)
- File structure: Organizing translation files by language and feature
- Best practices: Translation keys, namespacing, pluralization, date/number formatting
- RTL support: CSS logical properties and right-to-left layout
- Common issues: Missing translations, hardcoded strings, date/number formats
- Automated detection: i18n checker script for hardcoded strings
Use Cases
- Building multi-language web applications
- Supporting international markets with proper localization
- Implementing RTL language support (Arabic, Hebrew)
- Managing translation files and workflows
- Detecting and fixing hardcoded user-facing strings
- Formatting dates, numbers, and currency per locale
Related Skills
- Frontend Design - UI considerations for i18n
- API Patterns - Locale-aware APIs
- Testing Patterns - Testing translations
Which Agents Use This Skill
This skill is commonly used by:- Frontend developers building international applications
- Product managers planning multi-market expansion
- UX designers considering RTL and translation expansion
- QA engineers testing localized versions
Key Principles
i18n vs L10n
- i18n (Internationalization): Making the app translatable (code changes)
- L10n (Localization): Actual translations (content changes)
- Locale: Language + Region format (en-US, tr-TR, ar-SA)
- RTL: Right-to-left languages requiring layout changes
When to Use i18n
| Project Type | i18n Needed? |
|---|---|
| Public web app | ✅ Yes |
| SaaS product | ✅ Yes |
| Internal tool | ⚠️ Maybe |
| Single-region app | ⚠️ Consider future |
| Personal project | ❌ Optional |
Implementation Patterns
React (react-i18next)
Next.js (next-intl)
Python (gettext)
File Structure
Best Practices
DO ✅
- Use translation keys, not raw text
- Namespace translations by feature
- Support pluralization
- Handle date/number formats per locale
- Plan for RTL from the start
- Use ICU message format for complex strings
DON’T ❌
- Hardcode strings in components
- Concatenate translated strings
- Assume text length (German is 30% longer)
- Forget about RTL layout
- Mix languages in same file
RTL Support
Use CSS logical properties for automatic RTL support:Common Issues
| Issue | Solution |
|---|---|
| Missing translation | Fallback to default language |
| Hardcoded strings | Use linter/checker script |
| Date format | Use Intl.DateTimeFormat |
| Number format | Use Intl.NumberFormat |
| Pluralization | Use ICU message format |
Pre-Ship Checklist
- All user-facing strings use translation keys
- Locale files exist for all supported languages
- Date/number formatting uses Intl API
- RTL layout tested (if applicable)
- Fallback language configured
- No hardcoded strings in components
Tools
The skill includes ani18n_checker.py script for detecting hardcoded strings:
