Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Provides comprehensive guidelines for translating and localizing Roo Code extension strings. Use when tasks involve i18n, translation, localization, adding new languages, or updating existing translation files. This skill covers both core extension (src/i18n/locales/) and WebView UI (webview-ui/src/i18n/locales/) localization.
.claude/skills/bilal140202-roo-translation/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 26% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -6% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -27% | 0% |
| case-19 | ✗→✓ | ▲ Improved | 21% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 26% | 0% |
Use this skill when the task involves:
Do NOT use this skill when:
Localize all strings into the following locale files: ca, de, en, es, fr, hi, id, it, ja, ko, nl, pl, pt-BR, ru, tr, vi, zh-CN, zh-TW
The VSCode extension has two main areas that require localization:
| Component | Path | Purpose | |-----------|------|---------| | Core Extension | src/i18n/locales/ | Extension backend strings | | WebView UI | webview-ui/src/i18n/locales/ | User interface strings |
For detailed brand voice, tone, and word choice guidance, refer to the guidance file:
.roo/guidance/roo-translator.mdThis guidance file is loaded at runtime and should be consulted for the latest brand and style standards.
src/i18n/locales/t() function is used with namespaces like 'core:errors.missingToolParameter'formatResponse.ts are intentionally not internationalized since they're internalcore.json, maintain all existing interpolation variableswebview-ui/src/i18n/locales/useTranslation hookTrans component with named components for text with embedded componentsTranslation string:
json"changeSettings": "You can always change this at the bottom of the <settingsLink>settings</settingsLink>"
React component usage:
tsx<Trans i18nKey="welcome:telemetry.changeSettings" components={{ settingsLink: <VSCodeLink href="#" onClick={handleOpenSettings} /> }} />
{{variable}} syntaxdefaultValue. The en translations are the fallbackapply_diff instead of write_to_file when editing existing translation files (much faster and more reliable)apply_diff, carefully identify the exact JSON structure to edit to avoid syntax errors{{variable}}) must remain exactly identical to the English source to maintain code integration and prevent syntax errorssearch_files tool to find JSON keys that are near new keys in English translations but do not yet exist in the other language files for apply_diff SEARCH contextsearch_files result using apply_diff without reading every fileAlways validate your translation work by running the missing translations script:
bashnode scripts/find-missing-translations.js
Address any missing translations identified by the script to ensure complete coverage across all locales.
{{variable}} - these must remain identical| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 4,420 | 5,862 | +33% | 1 | 1 | 0% | 410 | 1,969 | +380% | 0 | 0 | — |
case-02 | fail→fail | 4,317 | 5,112 | +18% | 1 | 1 | 0% | 305 | 2,081 | +582% | 0 | 0 | — |
case-03 | fail→fail | 3,729 | 3,823 | +3% | 1 | 1 | 0% | 269 | 1,699 | +532% | 0 | 0 | — |
case-04 | pass→pass | 8,377 | 2,450 | -71% | 1 | 1 | 0% | 1,593 | 2,015 | +26% | 0 | 0 | — |
case-05 | pass→pass | 9,249 | 3,550 | -62% | 1 | 1 | 0% | 1,936 | 2,204 | +14% | 0 | 0 | — |
case-06 | pass→pass | 6,569 | 2,479 | -62% | 1 | 1 | 0% | 1,246 | 2,004 | +61% | 0 | 0 | — |
case-07 | pass→pass | 10,487 | 3,521 | -66% | 1 | 1 | 0% | 2,304 | 2,198 | -5% | 0 | 0 | — |
case-08 | pass→pass | 8,611 | 1,763 | -80% | 1 | 1 | 0% | 1,583 | 1,834 | +16% | 0 | 0 | — |
case-09 | fail→pass | 8,520 | 2,425 | -72% | 1 | 1 | 0% | 1,539 | 1,945 | +26% | 0 | 0 | — |
case-10 | pass→pass | 12,117 | 3,212 | -73% | 1 | 1 | 0% | 1,995 | 2,077 | +4% | 0 | 0 | — |
case-11 | fail→pass | 8,950 | 1,063 | -88% | 1 | 1 | 0% | 1,726 | 1,620 | -6% | 0 | 0 | — |
case-12 | pass→pass | 10,787 | 2,954 | -73% | 1 | 1 | 0% | 1,870 | 1,976 | +6% | 0 | 0 | — |
case-13 | fail→pass | 13,905 | 2,297 | -83% | 1 | 1 | 0% | 2,619 | 1,904 | -27% | 0 | 0 | — |
case-14 | pass→pass | 10,447 | 3,612 | -65% | 1 | 1 | 0% | 1,989 | 2,061 | +4% | 0 | 0 | — |
case-15 | pass→pass | 9,857 | 5,678 | -42% | 1 | 1 | 0% | 2,014 | 2,609 | +30% | 0 | 0 | — |
case-16 | pass→pass | 5,775 | 4,789 | -17% | 1 | 1 | 0% | 1,119 | 2,431 | +117% | 0 | 0 | — |
case-17 | pass→pass | 7,743 | 2,610 | -66% | 1 | 1 | 0% | 1,949 | 2,088 | +7% | 0 | 0 | — |
case-18 | pass→pass | 6,804 | 2,031 | -70% | 1 | 1 | 0% | 1,237 | 1,781 | +44% | 0 | 0 | — |
case-19 | fail→pass | 7,319 | 1,351 | -82% | 1 | 1 | 0% | 1,369 | 1,657 | +21% | 0 | 0 | — |
case-20 | pass→pass | 7,445 | 2,812 | -62% | 1 | 1 | 0% | 1,429 | 2,010 | +41% | 0 | 0 | — |
case-21 | pass→pass | 8,274 | 1,225 | -85% | 1 | 1 | 0% | 1,622 | 1,675 | +3% | 0 | 0 | — |
case-22 | pass→pass | 16,643 | 5,019 | -70% | 1 | 1 | 0% | 2,807 | 2,388 | -15% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +18 percentage points is the difference between those two pass rates over the 19 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.