{"slug":"i18n-l10n-readiness-review","title":"i18n-l10n-readiness-review","summary":"Audit frontend code for internationalization readiness — externalized ICU MessageFormat strings, Intl-based date/number/currency/plural formatting, correct lang/dir attribute propagation, and RTL-safe CSS logical properties — before translation vendor engagement, with CLDR plural","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-10-05T21:52:14.621987Z","repo":{"url":"https://github.com/VincentChuWaiChow/vanguard-frontier-agentic","stars":24,"forks":3,"license":"Apache-2.0","updatedAt":"2026-10-05T13:00:24Z"},"bodyHtml":"<hr>\n<h2>name: i18n-l10n-readiness-review\ndescription: Audit frontend code for internationalization readiness — externalized ICU MessageFormat strings, Intl-based date/number/currency/plural formatting, correct lang/dir attribute propagation, and RTL-safe CSS logical properties — before translation vendor engagement, with CLDR plural-rule detail loaded only when auditing countable strings.\nallowed-tools: Read Grep Glob\nmetadata:\nauthor: \"github: VincentChuWaiChow\"\nversion: \"0.1.0\"\nupdated: \"2026-07-02\"\ncategory: compliance</h2>\n<h1>i18n/l10n Readiness Review</h1>\n<h2>Purpose</h2>\n<p>Teams routinely discover — after paying a translation vendor — that string concatenation\ncan't express another language's word order, pluralization breaks outside English's\none/other split, or RTL layouts mirror visually but not functionally. Fixing these after\ntranslation means re-engineering already-translated strings, re-running the vendor\npipeline, and eating the schedule slip. This skill audits pluralization architecture\n(ICU MessageFormat / CLDR plural categories), <code>Intl</code>-based formatting, <code>lang</code>/<code>dir</code>\nattribute propagation, and RTL-safe layout so the codebase is structurally\ntranslation-ready <em>before</em> any string reaches a translator. It does not translate\nanything itself.</p>\n<h2>When to use</h2>\n<p>Use this skill when the user asks to:</p>\n<ul>\n<li>audit a codebase for hardcoded/non-externalized user-facing strings,</li>\n<li>review pluralization logic against CLDR plural categories for target locales,</li>\n<li>review date/number/currency formatting for <code>Intl</code> API usage vs manual string-building,</li>\n<li>review layout/CSS for RTL-market readiness,</li>\n<li>assess overall i18n/l10n readiness before a new-market launch or vendor engagement.</li>\n</ul>\n<h2>Lean operating rules</h2>\n<ul>\n<li>First establish the target locale list, including at least one locale with more than\ntwo CLDR plural categories (e.g., Arabic: 6, Polish: 4, Russian: 4) if any countable\nstrings exist — English's one/other split hides most pluralization bugs. If the user\nhas not named target locales, ask; do not assume English-only is sufficient for a\n\"readiness\" review.</li>\n<li>Flag string concatenation for user-facing countable/orderable/gendered content as a\nstructural defect, not a style nit — <code>\"You have \" + count + \" items\"</code> cannot be\ncorrectly localized without ICU MessageFormat (<code>{count, plural, ...}</code>) or an\nequivalent, because plural-category counts and word order both vary by locale.</li>\n<li>Verify date/number/currency/plural values use <code>Intl.DateTimeFormat</code>,\n<code>Intl.NumberFormat</code>, or <code>Intl.PluralRules</code> (or a library wrapping them, e.g.\nFormatJS/<code>react-intl</code>, <code>next-intl</code>, <code>i18next</code> with ICU) rather than manual string\nbuilding, hardcoded separators, or naive <code>Math.round</code>/string concatenation for\ncurrency.</li>\n<li>Check that the <code>dir</code> attribute (and <code>lang</code>) actually reach the rendered document root\n(<code>&lt;html lang dir&gt;</code>) and stay in sync with the active locale, and that layout uses CSS\nlogical properties (<code>margin-inline-start</code>, <code>padding-inline-end</code>, <code>inset-inline-start</code>)\ninstead of physical properties (<code>margin-left</code>, <code>padding-right</code>, <code>left</code>) wherever an\nRTL-market launch is on the roadmap, even if RTL isn't shipped yet — retrofitting\nphysical properties across a whole codebase later is expensive.</li>\n<li>Do not treat the presence of a language switcher, an <code>i18next</code>/<code>next-intl</code>\ndependency, or a <code>locales/</code> translation-file structure as proof of readiness — a\nlibrary being installed does not mean it is used correctly everywhere. Verify the\nunderlying formatting/pluralization/layout mechanics independently, file by file.</li>\n<li>Never author, insert, or \"helpfully\" translate actual copy into another language;\nthat is the translation vendor's job. Only flag strings for extraction and hand off\nthe inventory to whoever owns translation.</li>\n<li>Verify icons/imagery conveying directionality (arrows, forward/back/next controls,\nprogress indicators) have a documented RTL-mirroring plan when RTL is in scope —\nlogical CSS properties fix layout flow but do not auto-flip iconography.</li>\n<li>Treat ICU plural-category coverage as version/library-sensitive: verify the exact\nsyntax and category set against current FormatJS/ECMA-402/CLDR references rather than\nassuming a fixed one/few/many split applies to every language.</li>\n</ul>\n<h2>Context7 Documentation Protocol</h2>\n<p>Before making any claim about ICU MessageFormat syntax, <code>Intl</code> API behavior, or a\nspecific i18n library's plural/formatting API, ground it via Context7:</p>\n<ol>\n<li>Call <code>resolve-library-id</code> for the library in scope (e.g., <code>formatjs</code>, <code>next-intl</code>,\n<code>react-intl</code>, <code>i18next</code>) or the runtime spec area (<code>ECMA-402</code>/<code>Intl</code>).</li>\n<li>Call <code>query-docs</code> for the specific syntax or API behavior before citing it (plural\ncategory names, <code>selectordinal</code> syntax, <code>Intl.PluralRules</code> options, locale-matching\nbehavior).</li>\n<li>Prefer official docs (FormatJS docs, TC39 ECMA-402 spec, MDN <code>Intl</code>, Unicode CLDR)\nover memory — plural rule sets and <code>Intl</code> option names are locale- and\nspec-version-sensitive.</li>\n<li>If Context7 has no coverage for a library in scope, fall back to the official docs\nlisted below and mark the claim <code>documentation-based (uncertain — no Context7 coverage)</code>.</li>\n<li>Never invent ICU syntax, <code>Intl</code> constructor options, or CLDR plural-category names.\nVerified from Context7 (FormatJS docs) for this skill: the canonical CLDR plural\ncategories are <code>zero</code>, <code>one</code>, <code>two</code>, <code>few</code>, <code>many</code>, <code>other</code> (not every language uses\nevery category — e.g. English uses only <code>one</code>/<code>other</code>; Arabic uses all six), and ICU\nMessageFormat also supports exact-value matches via <code>=N</code> (e.g. <code>=0 {No items}</code>)\nlayered alongside category matches.</li>\n</ol>\n<h2>References</h2>\n<p>Load these only when needed:</p>\n<ul>\n<li><a href=\"references/pluralization-icu-messageformat.md\">Pluralization and ICU MessageFormat audit</a>\n— use only when auditing countable/orderable strings against CLDR plural categories\nor reviewing ICU MessageFormat/<code>Intl.PluralRules</code> usage.</li>\n<li><a href=\"references/intl-formatting-audit.md\">Intl formatting audit</a> — use only when\nreviewing date, number, currency, or list formatting for manual-string-building\ndefects vs correct <code>Intl</code> API usage.</li>\n<li><a href=\"references/rtl-logical-properties-audit.md\">RTL and logical-property layout audit</a>\n— use only when reviewing <code>lang</code>/<code>dir</code> attribute propagation, CSS logical properties,\nor directional-iconography readiness for RTL markets.</li>\n</ul>\n<h2>Response minimum</h2>\n<p>Return, at minimum:</p>\n<ul>\n<li>the target locale list driving the review (including any RTL or\nmulti-plural-category locale considered),</li>\n<li>hardcoded-string inventory with file:line for user-facing countable/orderable/\nconcatenated content,</li>\n<li>pluralization audit against the actual CLDR categories required for the target\nlocale(s), not just one/other,</li>\n<li>RTL/logical-CSS-property findings if RTL is in scope or roadmapped, including\n<code>lang</code>/<code>dir</code> propagation status,</li>\n<li>explicit statement that translation itself was not performed by this skill and that\nfindings are a structural-readiness audit, not a translation deliverable.</li>\n</ul>\n","files":[{"path":"metadata.json","sizeBytes":1101,"isText":true},{"path":"references/intl-formatting-audit.md","sizeBytes":5586,"isText":true},{"path":"references/pluralization-icu-messageformat.md","sizeBytes":6994,"isText":true},{"path":"references/rtl-logical-properties-audit.md","sizeBytes":7324,"isText":true},{"path":"SKILL.md","sizeBytes":7036,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-10-05T21:58:31.612338Z","sha256":"8AE6507517CEEAE1D06A11F4A13EE3D8DF05C70D020855B625B5E71DB9E04515","sizeBytes":13010},"review":null,"source":{"repositoryUrl":"https://github.com/VincentChuWaiChow/vanguard-frontier-agentic","path":"skills/frontend/i18n-l10n-readiness-review","license":"Apache-2.0","commit":"febe32a08e78fd06b1e466187410d673f1958d87","subtreeSha":"3FDF2AD0E1641387880AC873C236B03D8D4868F64B8D42C1CEE149474FDDFCEA","lastSyncedAt":"2026-10-05T21:51:58.639905Z"},"reviewedAt":"2026-10-05T22:11:37.880598Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/VincentChuWaiChow/vanguard-frontier-agentic/tree/master/skills/frontend/i18n-l10n-readiness-review"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install vincentchuwaichow-vanguard-frontier-agentic@llmmart"},{"target":"git","command":"git clone https://github.com/VincentChuWaiChow/vanguard-frontier-agentic.git"}]}