{"id":"75220949-6f82-41d7-a511-aaa2d464af06","shortId":"PSjGpV","kind":"skill","title":"i18n-localization","tagline":"Internationalization and localization patterns. Detecting hardcoded strings, managing translations, locale files, RTL support.","description":"# i18n & Localization\n\n> Internationalization (i18n) and Localization (L10n) best practices.\n\n---\n\n## 1. Core Concepts\n\n| Term | Meaning |\n|------|---------|\n| **i18n** | Internationalization - making app translatable |\n| **L10n** | Localization - actual translations |\n| **Locale** | Language + Region (en-US, tr-TR) |\n| **RTL** | Right-to-left languages (Arabic, Hebrew) |\n\n---\n\n## 2. When to Use i18n\n\n| Project Type | i18n Needed? |\n|--------------|--------------|\n| Public web app | ✅ Yes |\n| SaaS product | ✅ Yes |\n| Internal tool | ⚠️ Maybe |\n| Single-region app | ⚠️ Consider future |\n| Personal project | ❌ Optional |\n\n---\n\n## 3. Implementation Patterns\n\n### React (react-i18next)\n\n```tsx\nimport { useTranslation } from 'react-i18next';\n\nfunction Welcome() {\n  const { t } = useTranslation();\n  return <h1>{t('welcome.title')}</h1>;\n}\n```\n\n### Next.js (next-intl)\n\n```tsx\nimport { useTranslations } from 'next-intl';\n\nexport default function Page() {\n  const t = useTranslations('Home');\n  return <h1>{t('title')}</h1>;\n}\n```\n\n### Python (gettext)\n\n```python\nfrom gettext import gettext as _\n\nprint(_(\"Welcome to our app\"))\n```\n\n---\n\n## 4. File Structure\n\n```\nlocales/\n├── en/\n│   ├── common.json\n│   ├── auth.json\n│   └── errors.json\n├── tr/\n│   ├── common.json\n│   ├── auth.json\n│   └── errors.json\n└── ar/          # RTL\n    └── ...\n```\n\n---\n\n## 5. Best Practices\n\n### DO ✅\n\n- Use translation keys, not raw text\n- Namespace translations by feature\n- Support pluralization\n- Handle date/number formats per locale\n- Plan for RTL from the start\n- Use ICU message format for complex strings\n\n### DON'T ❌\n\n- Hardcode strings in components\n- Concatenate translated strings\n- Assume text length (German is 30% longer)\n- Forget about RTL layout\n- Mix languages in same file\n\n---\n\n## 6. Common Issues\n\n| Issue | Solution |\n|-------|----------|\n| Missing translation | Fallback to default language |\n| Hardcoded strings | Use linter/checker script |\n| Date format | Use Intl.DateTimeFormat |\n| Number format | Use Intl.NumberFormat |\n| Pluralization | Use ICU message format |\n\n---\n\n## 7. RTL Support\n\n```css\n/* CSS Logical Properties */\n.container {\n  margin-inline-start: 1rem;  /* Not margin-left */\n  padding-inline-end: 1rem;   /* Not padding-right */\n}\n\n[dir=\"rtl\"] .icon {\n  transform: scaleX(-1);\n}\n```\n\n---\n\n## 8. Checklist\n\nBefore shipping:\n\n- [ ] All user-facing strings use translation keys\n- [ ] Locale files exist for all supported languages\n- [ ] Date/number formatting uses Intl API\n- [ ] RTL layout tested (if applicable)\n- [ ] Fallback language configured\n- [ ] No hardcoded strings in components\n\n---\n\n## Script\n\n| Script | Purpose | Command |\n|--------|---------|---------|\n| `scripts/i18n_checker.py` | Detect hardcoded strings & missing translations | `python scripts/i18n_checker.py <project_path>` |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["i18n","localization","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-i18n-localization","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/i18n-localization","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 35034 github stars · SKILL.md body (3,247 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-25T12:50:55.133Z","embedding":null,"createdAt":"2026-04-18T20:30:23.040Z","updatedAt":"2026-04-25T12:50:55.133Z","lastSeenAt":"2026-04-25T12:50:55.133Z","tsv":"'-1':275 '1':26 '1rem':256,265 '2':57 '3':85 '30':204 '4':142 '5':156 '6':215 '7':244 '8':276 'action':337 'actual':38 'api':299 'app':34,68,79,141 'applic':304,331 'ar':154 'arab':55 'ask':375 'assum':199 'auth.json':148,152 'best':24,157 'boundari':383 'checklist':277 'clarif':377 'clear':350 'command':316 'common':216 'common.json':147,151 'complex':188 'compon':195,312 'concaten':196 'concept':28 'configur':307 'consid':80 'const':101,122 'contain':251 'core':27 'criteria':386 'css':247,248 'date':231 'date/number':173,295 'default':119,224 'describ':338,354 'detect':8,318 'dir':270 'en':44,146 'en-us':43 'end':264 'environ':366 'environment-specif':365 'errors.json':149,153 'execut':333 'exist':290 'expert':371 'export':118 'face':283 'fallback':222,305 'featur':169 'file':14,143,214,289 'forget':206 'format':174,186,232,236,243,296 'function':99,120 'futur':81 'german':202 'gettext':130,133,135 'handl':172 'hardcod':9,192,226,309,319 'hebrew':56 'home':125 'i18n':2,17,20,31,61,64 'i18n-localization':1 'i18next':91,98 'icon':272 'icu':184,241 'implement':86 'import':93,112,134 'inlin':254,263 'input':380 'intern':73 'internation':4,19,32 'intl':110,117,298 'intl.datetimeformat':234 'intl.numberformat':238 'issu':217,218 'key':162,287 'l10n':23,36 'languag':41,54,211,225,294,306 'layout':209,301 'left':53,260 'length':201 'limit':342 'linter/checker':229 'local':3,6,13,18,22,37,40,145,176,288 'logic':249 'longer':205 'make':33 'manag':11 'margin':253,259 'margin-inline-start':252 'margin-left':258 'match':351 'mayb':75 'mean':30 'messag':185,242 'miss':220,321,388 'mix':210 'namespac':166 'need':65 'next':109,116 'next-intl':108,115 'next.js':107 'number':235 'option':84 'output':360 'overview':341 'pad':262,268 'padding-inline-end':261 'padding-right':267 'page':121 'pattern':7,87 'per':175 'permiss':381 'person':82 'plan':177 'plural':171,239 'practic':25,158 'print':137 'product':71 'project':62,83 'properti':250 'public':66 'purpos':315 'python':129,131,323 'raw':164 'react':88,90,97 'react-i18next':89,96 'region':42,78 'requir':379 'return':104,126 'review':372 'right':51,269 'right-to-left':50 'rtl':15,49,155,179,208,245,271,300 'saa':70 'safeti':382 'scalex':274 'scope':353 'script':230,313,314 'scripts/i18n_checker.py':317,324 'ship':279 'singl':77 'single-region':76 'skill':329,345 'skill-i18n-localization' 'solut':219 'source-sickn33' 'specif':367 'start':182,255 'stop':373 'string':10,189,193,198,227,284,310,320 'structur':144 'substitut':363 'success':385 'support':16,170,246,293 'task':349 'term':29 'test':302,369 'text':165,200 'titl':128 'tool':74 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'tr':47,48,150 'tr-tr':46 'transform':273 'translat':12,35,39,161,167,197,221,286,322 'treat':358 'tsx':92,111 'type':63 'us':45 'use':60,160,183,228,233,237,240,285,297,327,343 'user':282 'user-fac':281 'usetransl':94,103,113,124 'valid':368 'web':67 'welcom':100,138 'welcome.title':106 'workflow':335 'yes':69,72","prices":[{"id":"82749a70-a843-4cc2-92c0-6de3d903cbac","listingId":"75220949-6f82-41d7-a511-aaa2d464af06","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:30:23.040Z"}],"sources":[{"listingId":"75220949-6f82-41d7-a511-aaa2d464af06","source":"github","sourceId":"sickn33/antigravity-awesome-skills/i18n-localization","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/i18n-localization","isPrimary":false,"firstSeenAt":"2026-04-18T21:38:55.098Z","lastSeenAt":"2026-04-25T12:50:55.133Z"},{"listingId":"75220949-6f82-41d7-a511-aaa2d464af06","source":"skills_sh","sourceId":"sickn33/antigravity-awesome-skills/i18n-localization","sourceUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/i18n-localization","isPrimary":true,"firstSeenAt":"2026-04-18T20:30:23.040Z","lastSeenAt":"2026-04-25T12:40:24.104Z"}],"details":{"listingId":"75220949-6f82-41d7-a511-aaa2d464af06","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"i18n-localization","github":{"repo":"sickn33/antigravity-awesome-skills","stars":35034,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-25T06:33:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"9623bfff97754452742549e2555971ff3b7cafe3","skill_md_path":"skills/i18n-localization/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/i18n-localization"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"i18n-localization","description":"Internationalization and localization patterns. Detecting hardcoded strings, managing translations, locale files, RTL support."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/i18n-localization"},"updatedAt":"2026-04-25T12:50:55.133Z"}}