[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F3N7FT7Y41AWDQDXJT5PWR":3,"skill-same:01M6F3N7FT7Y41AWDQDXJT5PWR":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":53,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":55,"updatedAt":56,"install":57,"resources":70},"01M6F3N7FT7Y41AWDQDXJT5PWR","i18n-expert",null,"This skill should be used when setting up, auditing, or enforcing internationalization\u002Flocalization in UI codebases (React\u002FTS, i18next or similar, JSON locales), including installing\u002Fconfiguring the i18n framework, replacing hard-coded strings, ensuring en-US\u002Fzh-CN coverage, mapping error codes to localized messages, and validating key parity, pluralization, and formatting.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fdaymade\u002Fclaude-code-skills\u002Fi18n-expert\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"expert","i18n expert","i18n","messages","json","coverage","up","en","zh","react","i18next","ui","internationalization","formatting","localization","mapping","error","codes","framework","2026-11-10 10:12:30",false,"---\nname: i18n-expert\ndescription: This skill should be used when setting up, auditing, or enforcing internationalization\u002Flocalization in UI codebases (React\u002FTS, i18next or similar, JSON locales), including installing\u002Fconfiguring the i18n framework, replacing hard-coded strings, ensuring en-US\u002Fzh-CN coverage, mapping error codes to localized messages, and validating key parity, pluralization, and formatting.\n---\n\n# I18n Expert\n\n## Overview\n\nDeliver a complete i18n setup + audit pass: configure the i18n framework, replace user-facing strings with keys, ensure locale parity, and validate pluralization\u002Fformatting for en-US and zh-CN.\n\n## Core Capabilities\n\n- Library selection and setup (React, Next.js, Vue).\n- Key architecture and locale file organization.\n- Translation generation and quality strategy (AI, professional, manual).\n- Routing and language detection\u002Fswitching.\n- SEO and metadata localization (when applicable).\n- RTL support (only if RTL locales are in scope).\n\n## Scope Inputs (ask if unclear)\n\n- Framework and routing style.\n- Existing i18n state (none, partial, legacy).\n- Target locales (default: en-US + zh-CN).\n- Translation quality needs (AI vs professional vs manual).\n- Locale formats in use (JSON, YAML, PO, XLIFF).\n- Formality\u002Fcultural requirements (if any).\n\n## Workflow (Audit -> Fix -> Validate)\n\n1) Confirm scope and locale targets\n- Identify the i18n framework and locale locations.\n- Confirm locales; default to en-US + zh-CN when specified.\n\n2) Setup i18n baseline (if missing)\n- Choose a framework-appropriate library (e.g., React: react-i18next; Next.js: next-intl; Vue: vue-i18n).\n- Install packages and create the i18n entry\u002Fconfig file.\n- Wire the provider at the app root and load locale resources.\n- Add a language switcher and persistence (route\u002Fparam\u002FlocalStorage) as appropriate.\n- Establish locale file layout and key namespaces.\n- If routing is locale-aware, define the locale segment strategy early (subpath, subdomain, query param).\n - If metadata is user-facing, include translation for titles\u002Fdescriptions.\n\n3) Audit key usage and locale parity\n- Run:\n  ```bash\n  python scripts\u002Fi18n_audit.py --src \u003Csrc-root> --locale \u003Cpath\u002Fto\u002Fen-US.json> --locale \u003Cpath\u002Fto\u002Fzh-CN.json>\n  ```\n- Treat missing keys\u002Fparity gaps as blockers.\n- Manually verify dynamic keys (`t(var)`).\n\n4) Find raw user-facing strings\n- Search:\n  ```bash\n  rg -n --glob '\u003Csrc>\u002F**\u002F*.{ts,tsx,js,jsx}' \"\u003C[^>]+>[^\u003C{]*[A-Za-z][^\u003C{]*\u003C\"\n  rg -n --glob '\u003Csrc>\u002F**\u002F*.{ts,tsx,js,jsx}' \"aria-label=\\\"[^\\\"]+\\\"|title=\\\"[^\\\"]+\\\"|placeholder=\\\"[^\\\"]+\\\"\"\n  ```\n- Localize accessibility labels.\n\n5) Replace strings with keys\n- Use `t('namespace.key')` for UI text.\n- For plurals use `t('key', { count })` + `_one\u002F_other` keys.\n- Use Intl\u002Fapp formatters for time\u002Fdate\u002Fnumber.\n\n6) Localize error handling (critical)\n- Map error codes to localized keys; show localized UI only.\n- Log raw error details only.\n- Provide localized fallback for unknown codes.\n\n7) Update locale files\n- Add missing keys in both locales.\n- Keep placeholders consistent; avoid renames unless requested.\n- Generate translations using the agreed method; preserve placeholders and plural rules.\n\n8) Validate\n- Re-run the audit until missing\u002Fparity issues are zero.\n- Validate JSON (e.g., `python -m json.tool \u003Cfile>`).\n- Update tests asserting visible text.\n\n## Guardrails\n\n- Never expose raw `error.message` to UI; show localized strings only.\n- Do not add extra locales unless explicitly requested.\n- Prefer structured namespaces (e.g., `errors.*`, `buttons.*`, `workspace.*`).\n- Keep translations concise and consistent.\n- Some technical\u002Fbrand terms should remain untranslated (e.g., product name, API, MCP, Bash).\n\n## Deliverables (expected outputs)\n\n- i18n config\u002Fprovider wiring.\n- Locale files for each target language.\n- Replaced UI strings with stable keys.\n- Language switcher and persistence (if applicable).\n- Updated tests for visible text.\n\n## Architecture Guidance (keep concise)\n\n- Key structure: prefer nested namespaces by area (e.g., `common.buttons.save`, `pricing.tier.pro`).\n- File layout: one file per locale or per-locale namespaces; keep keys in sync across locales.\n- Placeholders: preserve `{name}`\u002F`{{name}}` exactly; validate plurals by locale rules.\n- Formatting: use Intl\u002Fapp helpers for date, time, number, and list formatting.\n- SEO\u002Fmetadata: localize titles and descriptions if the app exposes them.\n- RTL: only needed for RTL locales; use logical CSS properties and test layout.\n- Non-web surfaces (Electron main-process dialogs, CLI prompts, native menus) need localization too.\n\n## Performance Notes (short)\n\n- Lazy-load locale bundles when the app supports it.\n- Split large locale files by namespace.\n\n## Failure Modes (watchlist)\n\n- Missing translations: fall back to default locale and log warnings.\n- RTL layout issues: verify logical CSS and test pages.\n- SEO missing: ensure alternates and metadata are localized when applicable.\n\n## Validation Checklist (short)\n\n- No missing keys and no raw UI strings.\n- Locale switching works and persists.\n- Plurals and formatting verified in both locales.\n - Fallback locale configured.\n\n## Resources\n\n### scripts\u002F\n- `scripts\u002Fi18n_audit.py`: Extracts `t('key')` usage and compares against locale JSON files.\n\n","# I18n Expert\n\n## Overview\n\nDeliver a complete i18n setup + audit pass: configure the i18n framework, replace user-facing strings with keys, ensure locale parity, and validate pluralization\u002Fformatting for en-US and zh-CN.\n\n## Core Capabilities\n\n- Library selection and setup (React, Next.js, Vue).\n- Key architecture and locale file organization.\n- Translation generation and quality strategy (AI, professional, manual).\n- Routing and language detection\u002Fswitching.\n- SEO and metadata localization (when applicable).\n- RTL support (only if RTL locales are in scope).\n\n## Scope Inputs (ask if unclear)\n\n- Framework and routing style.\n- Existing i18n state (none, partial, legacy).\n- Target locales (default: en-US + zh-CN).\n- Translation quality needs (AI vs professional vs manual).\n- Locale formats in use (JSON, YAML, PO, XLIFF).\n- Formality\u002Fcultural requirements (if any).\n\n## Workflow (Audit -> Fix -> Validate)\n\n1) Confirm scope and locale targets\n- Identify the i18n framework and locale locations.\n- Confirm locales; default to en-US + zh-CN when specified.\n\n2) Setup i18n baseline (if missing)\n- Choose a framework-appropriate library (e.g., React: react-i18next; Next.js: next-intl; Vue: vue-i18n).\n- Install packages and create the i18n entry\u002Fconfig file.\n- Wire the provider at the app root and load locale resources.\n- Add a language switcher and persistence (route\u002Fparam\u002FlocalStorage) as appropriate.\n- Establish locale file layout and key namespaces.\n- If routing is locale-aware, define the locale segment strategy early (subpath, subdomain, query param).\n - If metadata is user-facing, include translation for titles\u002Fdescriptions.\n\n3) Audit key usage and locale parity\n- Run:\n  ```bash\n  python scripts\u002Fi18n_audit.py --src \u003Csrc-root> --locale \u003Cpath\u002Fto\u002Fen-US.json> --locale \u003Cpath\u002Fto\u002Fzh-CN.json>\n  ```\n- Treat missing keys\u002Fparity gaps as blockers.\n- Manually verify dynamic keys (`t(var)`).\n\n4) Find raw user-facing strings\n- Search:\n  ```bash\n  rg -n --glob '\u003Csrc>\u002F**\u002F*.{ts,tsx,js,jsx}' \"\u003C[^>]+>[^\u003C{]*[A-Za-z][^\u003C{]*\u003C\"\n  rg -n --glob '\u003Csrc>\u002F**\u002F*.{ts,tsx,js,jsx}' \"aria-label=\\\"[^\\\"]+\\\"|title=\\\"[^\\\"]+\\\"|placeholder=\\\"[^\\\"]+\\\"\"\n  ```\n- Localize accessibility labels.\n\n5) Replace strings with keys\n- Use `t('namespace.key')` for UI text.\n- For plurals use `t('key', { count })` + `_one\u002F_other` keys.\n- Use Intl\u002Fapp formatters for time\u002Fdate\u002Fnumber.\n\n6) Localize error handling (critical)\n- Map error codes to localized keys; show localized UI only.\n- Log raw error details only.\n- Provide localized fallback for unknown codes.\n\n7) Update locale files\n- Add missing keys in both locales.\n- Keep placeholders consistent; avoid renames unless requested.\n- Generate translations using the agreed method; preserve placeholders and plural rules.\n\n8) Validate\n- Re-run the audit until missing\u002Fparity issues are zero.\n- Validate JSON (e.g., `python -m json.tool \u003Cfile>`).\n- Update tests asserting visible text.\n\n## Guardrails\n\n- Never expose raw `error.message` to UI; show localized strings only.\n- Do not add extra locales unless explicitly requested.\n- Prefer structured namespaces (e.g., `errors.*`, `buttons.*`, `workspace.*`).\n- Keep translations concise and consistent.\n- Some technical\u002Fbrand terms should remain untranslated (e.g., product name, API, MCP, Bash).\n\n## Deliverables (expected outputs)\n\n- i18n config\u002Fprovider wiring.\n- Locale files for each target language.\n- Replaced UI strings with stable keys.\n- Language switcher and persistence (if applicable).\n- Updated tests for visible text.\n\n## Architecture Guidance (keep concise)\n\n- Key structure: prefer nested namespaces by area (e.g., `common.buttons.save`, `pricing.tier.pro`).\n- File layout: one file per locale or per-locale namespaces; keep keys in sync across locales.\n- Placeholders: preserve `{name}`\u002F`{{name}}` exactly; validate plurals by locale rules.\n- Formatting: use Intl\u002Fapp helpers for date, time, number, and list formatting.\n- SEO\u002Fmetadata: localize titles and descriptions if the app exposes them.\n- RTL: only needed for RTL locales; use logical CSS properties and test layout.\n- Non-web surfaces (Electron main-process dialogs, CLI prompts, native menus) need localization too.\n\n## Performance Notes (short)\n\n- Lazy-load locale bundles when the app supports it.\n- Split large locale files by namespace.\n\n## Failure Modes (watchlist)\n\n- Missing translations: fall back to default locale and log warnings.\n- RTL layout issues: verify logical CSS and test pages.\n- SEO missing: ensure alternates and metadata are localized when applicable.\n\n## Validation Checklist (short)\n\n- No missing keys and no raw UI strings.\n- Locale switching works and persists.\n- Plurals and formatting verified in both locales.\n - Fallback locale configured.\n\n## Resources\n\n### scripts\u002F\n- `scripts\u002Fi18n_audit.py`: Extracts `t('key')` usage and compares against locale JSON files.\n\n",{"name":5,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fdaymade\u002Fclaude-code-skills\u002Fi18n-expert",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill i18n-expert",{"tool":63,"command":64},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill i18n-expert",{"tool":66,"command":67},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill i18n-expert","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fdaymade\u002Fclaude-code-skills\u002Fi18n-expert\u002FSKILL.md",true,[],[72,82,92,101,107,114],{"skillNo":73,"name":74,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":78,"publishedAt":43},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[77],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[79,80,81],"model","model hierarchy","model hierarchy skill",{"skillNo":83,"name":84,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":88,"publishedAt":43},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[87],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[89,90,91],"MCP","zoom","zoom mcp",{"skillNo":93,"name":94,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":43},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[98,99,100,90],"sdk","zoom apps sdk","apps",{"skillNo":102,"name":103,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":43},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[103],{"skillNo":108,"name":109,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":113,"publishedAt":43},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[112],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[109],{"skillNo":115,"name":116,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":43},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[116]]