AS
AgSkills.dev
MARKETPLACE

i18n-localization

Internationalization and localization patterns. Detecting hardcoded strings, managing translations, locale files, RTL support.

19.9k
1.8k

Preview

SKILL.md
name
i18n-localization
description
Internationalization and localization patterns. Detecting hardcoded strings, managing translations, locale files, RTL support.
allowed-tools
Read, Glob, Grep

i18n & Localization

Internationalization (i18n) and Localization (L10n) best practices.


1. Core Concepts

TermMeaning
i18nInternationalization - making app translatable
L10nLocalization - actual translations
LocaleLanguage + Region (en-US, tr-TR)
RTLRight-to-left languages (Arabic, Hebrew)

2. When to Use i18n

Project Typei18n Needed?
Public web appβœ… Yes
SaaS productβœ… Yes
Internal tool⚠️ Maybe
Single-region app⚠️ Consider future
Personal project❌ Optional

3. Implementation Patterns

React (react-i18next)

import { useTranslation } from 'react-i18next'; function Welcome() { const { t } = useTranslation(); return <h1>{t('welcome.title')}</h1>; }

Next.js (next-intl)

import { useTranslations } from 'next-intl'; export default function Page() { const t = useTranslations('Home'); return <h1>{t('title')}</h1>; }

Python (gettext)

from gettext import gettext as _ print(_("Welcome to our app"))

4. File Structure

locales/
β”œβ”€β”€ en/
β”‚   β”œβ”€β”€ common.json
β”‚   β”œβ”€β”€ auth.json
β”‚   └── errors.json
β”œβ”€β”€ tr/
β”‚   β”œβ”€β”€ common.json
β”‚   β”œβ”€β”€ auth.json
β”‚   └── errors.json
└── ar/          # RTL
    └── ...

5. 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

6. Common Issues

IssueSolution
Missing translationFallback to default language
Hardcoded stringsUse linter/checker script
Date formatUse Intl.DateTimeFormat
Number formatUse Intl.NumberFormat
PluralizationUse ICU message format

7. RTL Support

/* CSS Logical Properties */ .container { margin-inline-start: 1rem; /* Not margin-left */ padding-inline-end: 1rem; /* Not padding-right */ } [dir="rtl"] .icon { transform: scaleX(-1); }

8. Checklist

Before shipping:

  • 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

Script

ScriptPurposeCommand
scripts/i18n_checker.pyDetect hardcoded strings & missing translationspython scripts/i18n_checker.py <project_path>
GitHub Repository
davila7/claude-code-templates
Stars
19,972
Forks
1,859
Open Repository
Install Skill
Download ZIP2 files