{"id":"c469f1aa-537a-4097-a59a-d7085e72499c","shortId":"bLKXXz","kind":"skill","title":"i18n","tagline":"Audit internationalization coverage and find hardcoded strings. Use when user asks to \"check i18n\", \"/i18n\", \"find hardcoded strings\", \"check translations\", or wants to verify translation coverage. Don't use for backend string extraction, non-frontend code, or projects without an","description":"# i18n Audit\n\n## Detection\n\nRead `package.json` for i18n library:\n- `react-i18next` / `i18next`\n- `next-intl`\n- `vue-i18n`\n- `react-intl` (FormatJS)\n\nRead locale files to understand key structure (e.g. `src/locales/en.json`).\n\n## Workflow\n\n1. Detect i18n library and locale file locations\n2. Search JSX/TSX/Vue files for hardcoded user-facing strings (see [patterns.md](references/patterns.md)):\n   - String literals in JSX: `<p>Hello world</p>`\n   - String props: `placeholder=\"Search...\"`, `label=\"Submit\"`\n   - `aria-label=\"Close menu\"`\n3. Compare locale files — find missing keys between locales:\n   ```bash\n   # keys in en.json but missing in pt.json\n   ```\n4. Report findings\n\n## Output format\n\n**Hardcoded strings** (`file:line`):\n```\nsrc/components/Header.tsx:12  \"Welcome back\"  → suggest key: header.welcomeBack\nsrc/components/Form.tsx:34    placeholder=\"Search...\"  → suggest key: form.searchPlaceholder\n```\n\n**Missing translations** (key present in base locale but absent in others):\n```\nKey: dashboard.emptyState  missing in: pt-BR, es\nKey: errors.networkTimeout  missing in: pt-BR\n```\n\n## Rules\n\n- Only flag user-visible strings (skip internal IDs, CSS classes, URLs, enum values)\n- Suggest translation key names in camelCase matching project convention\n- Never auto-modify locale files — report only\n\n## Error Handling\n\n- If no i18n library detected → report project may not use i18n; still list any hardcoded strings found\n- If no locale files found → skip missing-key comparison; only report hardcoded strings\n- If locale files are not JSON (e.g. `.po`, `.yaml`) → read them anyway and adapt key comparison logic","tags":["i18n","agent","skills","helderberto","agent-skills","ai-tools","antigravity","claude-code","cursor","developer-tools","gemini-cli","markdown"],"capabilities":["skill","source-helderberto","skill-i18n","topic-agent-skills","topic-ai-tools","topic-antigravity","topic-claude-code","topic-cursor","topic-developer-tools","topic-gemini-cli","topic-markdown","topic-plugin","topic-sdlc","topic-skills","topic-tracer-bullet"],"categories":["agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/helderberto/agent-skills/i18n","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add helderberto/agent-skills","source_repo":"https://github.com/helderberto/agent-skills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (1,629 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-05-18T19:09:13.688Z","embedding":null,"createdAt":"2026-05-18T13:14:53.861Z","updatedAt":"2026-05-18T19:09:13.688Z","lastSeenAt":"2026-05-18T19:09:13.688Z","tsv":"'/i18n':16 '1':75 '12':140 '2':83 '3':113 '34':147 '4':130 'absent':161 'adapt':257 'anyway':255 'aria':109 'aria-label':108 'ask':12 'audit':2,44 'auto':205 'auto-modifi':204 'back':142 'backend':32 'base':158 'bash':122 'br':170,178 'camelcas':199 'check':14,20 'class':190 'close':111 'code':38 'compar':114 'comparison':239,259 'convent':202 'coverag':4,27 'css':189 'dashboard.emptystate':165 'detect':45,76,217 'e.g':72,250 'en.json':125 'enum':192 'error':211 'errors.networktimeout':173 'es':171 'extract':34 'face':91 'file':67,81,86,116,137,208,233,246 'find':6,17,117,132 'flag':181 'form.searchplaceholder':152 'format':134 'formatj':64 'found':229,234 'frontend':37 'handl':212 'hardcod':7,18,88,135,227,242 'header.welcomeback':145 'hello':100 'i18n':1,15,43,49,60,77,215,223 'i18next':53,54 'id':188 'intern':187 'internation':3 'intl':57,63 'json':249 'jsx':99 'jsx/tsx/vue':85 'key':70,119,123,144,151,155,164,172,196,238,258 'label':106,110 'librari':50,78,216 'line':138 'list':225 'liter':97 'local':66,80,115,121,159,207,232,245 'locat':82 'logic':260 'match':200 'may':220 'menu':112 'miss':118,127,153,166,174,237 'missing-key':236 'modifi':206 'name':197 'never':203 'next':56 'next-intl':55 'non':36 'non-frontend':35 'other':163 'output':133 'package.json':47 'patterns.md':94 'placehold':104,148 'po':251 'present':156 'project':40,201,219 'prop':103 'pt':169,177 'pt-br':168,176 'pt.json':129 'react':52,62 'react-i18next':51 'react-intl':61 'read':46,65,253 'references/patterns.md':95 'report':131,209,218,241 'rule':179 'search':84,105,149 'see':93 'skill' 'skill-i18n' 'skip':186,235 'source-helderberto' 'src/components/form.tsx':146 'src/components/header.tsx':139 'src/locales/en.json':73 'still':224 'string':8,19,33,92,96,102,136,185,228,243 'structur':71 'submit':107 'suggest':143,150,194 'topic-agent-skills' 'topic-ai-tools' 'topic-antigravity' 'topic-claude-code' 'topic-cursor' 'topic-developer-tools' 'topic-gemini-cli' 'topic-markdown' 'topic-plugin' 'topic-sdlc' 'topic-skills' 'topic-tracer-bullet' 'translat':21,26,154,195 'understand':69 'url':191 'use':9,30,222 'user':11,90,183 'user-fac':89 'user-vis':182 'valu':193 'verifi':25 'visibl':184 'vue':59 'vue-i18n':58 'want':23 'welcom':141 'without':41 'workflow':74 'world':101 'yaml':252","prices":[{"id":"6803d6eb-1ecf-48b7-9705-c7dd38628a03","listingId":"c469f1aa-537a-4097-a59a-d7085e72499c","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"helderberto","category":"agent-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:14:53.861Z"}],"sources":[{"listingId":"c469f1aa-537a-4097-a59a-d7085e72499c","source":"github","sourceId":"helderberto/agent-skills/i18n","sourceUrl":"https://github.com/helderberto/agent-skills/tree/main/skills/i18n","isPrimary":false,"firstSeenAt":"2026-05-18T13:14:53.861Z","lastSeenAt":"2026-05-18T19:09:13.688Z"}],"details":{"listingId":"c469f1aa-537a-4097-a59a-d7085e72499c","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"helderberto","slug":"i18n","github":{"repo":"helderberto/agent-skills","stars":8,"topics":["agent-skills","ai","ai-tools","antigravity","claude-code","cursor","developer-tools","gemini-cli","markdown","plugin","sdlc","skills","tracer-bullet"],"license":"mit","html_url":"https://github.com/helderberto/agent-skills","pushed_at":"2026-05-14T11:37:47Z","description":"My personal SDLC toolbelt for AI coding agents — PRD to ship.","skill_md_sha":"d293cfe0074016e0efe414cb8ba12010cbc5f68c","skill_md_path":"skills/i18n/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/helderberto/agent-skills/tree/main/skills/i18n"},"layout":"multi","source":"github","category":"agent-skills","frontmatter":{"name":"i18n","description":"Audit internationalization coverage and find hardcoded strings. Use when user asks to \"check i18n\", \"/i18n\", \"find hardcoded strings\", \"check translations\", or wants to verify translation coverage. Don't use for backend string extraction, non-frontend code, or projects without an i18n library."},"skills_sh_url":"https://skills.sh/helderberto/agent-skills/i18n"},"updatedAt":"2026-05-18T19:09:13.688Z"}}