Agent skill

Add Locale

by Swttch in Swttch/swttch

Add a new UI language/locale to the claude-code-gui webview i18n system, or extend/verify an existing one.

AGPL-3.0Auto-check passedFrontend & Design

Install Add Locale

skills CLI
$ npx skills add Swttch/swttch --skill add-locale -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Swttch/swttch add-locale --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Swttch/swttch.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/add-locale .claude/skills/add-locale && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
add-locale
GitHub stars
211
Token cost
~1.3k tokens
SKILL.md length
450 words
Files
1
Skills in repo
2
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Add a new UI language/locale to the claude-code-gui webview i18n system, or extend/verify an existing one.

  • Works in 4 steps: Pick the identifiers → Create the translation files → Register the locale (two spots) → …
  • Someone wants to translate the UI into a new language
  • SKILL.md covers 0. Pick the identifiers, 1. Create the translation files, 2. Register the locale (two… and 3. Verify, plus 1 more section
  • Calls bash and node

What it does

Add Locale is an agent skill from Swttch/swttch. Add a new UI language/locale to the claude-code-gui webview i18n system, or extend/verify an existing one. Walks a contributor (or agent) through creating the per-namespace translation JSON files, registering the locale, and verifying parity — consistently with how the shipped locales are structured. Use when someone wants to translate the UI into a new language, add a locale, or contribute translations. Trigger on: 언어 추가, 로케일 추가, 새 언어, 번역 추가, 번역 기여, add language, add locale, new language, translate the UI…

Its SKILL.md is about 1.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Frontend & Design, covering Internationalization and Translation. It works with JetBrains IDEs. The repository describes itself as: Claude Code GUI plugin for JetBrains IDEs. (ex - Claude Code with GUI). The licence is AGPL-3.0.

When your agent uses it

  • Someone wants to translate the UI into a new language
  • Contribute translations
  • Translate the UI
  • Contribute a translation

Example prompts

  • “/add-locale”

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Pick the identifiers
  2. Create the translation files
  3. Register the locale (two spots)
  4. Verify

What it can do on your machine

Read from SKILL.md and the folder at commit 5302f28. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • bash
    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Add Locale loads about 1.3k tokens when it runs. Until then it costs about 141 tokens; SKILL.md has 450 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~141
When it runs · the whole SKILL.md, loaded when a task matches
~1.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Swttch/swttch at commit 5302f28, republished under its AGPL-3.0 licence (© Swttch). 450 words, ~1,251 tokens.

Download SKILL.mdSave it as .claude/skills/add-locale/SKILL.md (or your agent's skills folder).
name
add-locale
description
Add a new UI language/locale to the claude-code-gui webview i18n system, or extend/verify an existing one. Walks a contributor (or agent) through creating the per-namespace translation JSON files, registering the locale, and verifying parity — consistently with how the shipped locales are structured. Use when someone wants to translate the UI into a new language, add a locale, or contribute translations. Trigger on: 언어 추가, 로케일 추가, 새 언어, 번역 추가, 번역 기여, add language, add locale, new language, translate the UI, contribute a translation, i18n locale.

Add a UI locale to the webview

The webview UI is internationalized with react-i18next. Every language is a folder of JSON catalogs under webview/src/i18n/locales/<locale>/, one file per namespace (page/area). English (en) is the source of truth and the fallback for any missing key.

Adding a language = (1) create that folder of translated JSON, (2) register the language in two small code spots. config.ts auto-loads locale files via a Vite glob, so you never edit config.ts.

0. Pick the identifiers

  • locale — a BCP-47 code and the folder name, e.g. it (Italian), pt-BR (Brazilian Portuguese), zh-TW (Traditional Chinese).
  • setting value — the value stored in settings, a lowercase English name, e.g. italian. For script/region variants use a - suffix, e.g. chinese-traditional.
  • endonym — the language's own name for the dropdown label, e.g. Italiano, 繁體中文. (Labels are endonym-only — no romanized prefix.)

1. Create the translation files

List the namespaces (these are the English source files):

ls webview/src/i18n/locales/en/
# chat chatTools commandPalette common notifications permissions
# projectSelector sessionPanel settings switchAccount

Create webview/src/i18n/locales/<locale>/<namespace>.json for every file in en/. Translate the string values; keep the key structure identical to the English file.

Rules — same as the shipped locales:

  • Mirror keys exactly. Same nesting, same key names as en/. Only values change.
  • Preserve interpolation placeholders verbatim: {{value}}, {{count}}, {{n}}, {{seconds}}, {{error}}, {{label}}, {{appName}}, … Keep whatever the English value uses, in place.
  • Plurals: if an English key uses i18next plural suffixes (foo_one/foo_other), produce the plural set your language needs. Languages with no plural distinction (ko/ja/zh) keep the same suffix keys with identical text. Languages with more categories (e.g. Russian: _one/_few/_many) may add those suffix keys — that is correct even though it means more keys than English for those entries.
  • Do NOT translate: the brand "Claude Code", ALL-CAPS env vars (CLAUDE_CONFIG_DIR), file paths, URLs, acronyms (CLI, MCP, IDE, OS, URL), code identifiers, model names/IDs, shell commands, keyboard tokens (Cmd+K).
  • Natural, concise UI phrasing. Match the tone of the existing locales.
  • Every file must be valid JSON.
Show full SKILL.md (140 more words)Show less

2. Register the locale (two spots)

a. webview/src/i18n/languageMap.ts

  • Add the locale to SUPPORTED_LOCALES.
  • Add '<setting value>': '<locale>' to LANGUAGE_TO_LOCALE.

b. webview/src/pages/SettingsPage/General/index.tsx

  • Add { value: '<setting value>', label: '<endonym>' } to LANGUAGE_OPTIONS.

config.ts picks up the new files automatically (glob) — do not edit it.

3. Verify

  • Key parity — every locale namespace must have the same leaf keys as en (plural suffix variants aside). Run:
node -e '
const fs=require("fs"),p=require("path");
const base="webview/src/i18n/locales", L=process.argv[1];
const NS=fs.readdirSync(base+"/en").map(f=>f.replace(".json",""));
const leaves=(o,pre="")=>Object.entries(o).flatMap(([k,v])=>v&&typeof v==="object"&&!Array.isArray(v)?leaves(v,pre+k+"."):[pre+k]);
const norm=k=>k.replace(/_(zero|one|two|few|many|other)$/,"");
let miss=0;
for(const ns of NS){
  const en=new Set(leaves(JSON.parse(fs.readFileSync(`${base}/en/${ns}.json`))).map(norm));
  let tr; try{tr=new Set(leaves(JSON.parse(fs.readFileSync(`${base}/${L}/${ns}.json`))).map(norm));}catch(e){console.log(`MISSING FILE ${L}/${ns}.json`);miss++;continue;}
  for(const k of en) if(!tr.has(k)){console.log(`${L}/${ns}: missing ${k}`);miss++;}
}
console.log(miss?`❌ ${miss} problems`:`✅ ${L} matches en`);
' <locale>
  • Type check — bash ./scripts/build.sh wv-lint (must be clean).
  • Tests — bash ./scripts/build.sh wv-test.
  • Eyeball it — run the standalone dev server, open Settings → General → Interface Language, pick the new language, and click through the app.

Notes

  • The Interface Language (this) is separate from the Claude response language (a free-text field). Adding a UI locale only affects the interface.
  • If you only ship some namespaces, untranslated keys fall back to English — the app still works. But aim for full parity per §3.

© Swttch, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/add-locale of Swttch/swttch.

Open the folder on GitHubat commit 5302f28

Compare with similar skills

Add Locale next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Add Locale compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Add Locale this skillSwttch/swttch211—~1.3kAutomated safety check: PassAGPL-3.0
Roo Translationzgsm-ai/costrict4.5k—~1.8kAutomated safety check: PassApache-2.0
Chatbox i18n Translatorchatboxai/chatbox42k—~508Automated safety check: PassGPL-3.0
Enforce Rules For I18nmoeru-ai/airi50k—~1.5kAutomated safety check: PassMIT
Translation ReviewDevolutions/UniGetUI26k—~1.3kAutomated safety check: PassMIT
Lingui Best PracticesB0und/WikiSpeedrun1332 repos~4.2kAutomated safety check: PassMIT

Similar skills

  • Roo Translation

    zgsm-ai/costrict

    Provides comprehensive guidelines for translating and localizing CoStrict extension strings.

    4.5k GitHub stars~1.8k tokensUpdated 10 days ago
    Writing & ContentAuto-check passed
  • Chatbox i18n Translator

    chatboxai/chatbox

    Translates new or changed i18n keys from a Chatbox Pro diff, staged changes or a commit range, writing the locale JSON files directly with a built-in glossary.

    42k GitHub stars~508 tokensUpdated 15 days ago
    Frontend & DesignAuto-check passed
  • Review pending AIRI translations on Crowdin in a batch, then sync them into the repository.

    50k GitHub stars~1.5k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Translation Review

    Devolutions/UniGetUI

    Reviews UniGetUI .json language files for localization quality, detects parity issues, English-equal entries, wrong-script content, and cross-language outliers, then generates a dataset for…

    26k GitHub stars~1.3k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Lingui Best Practices

    B0und/WikiSpeedrun

    Implement internationalization with Lingui in React and JavaScript applications.

    133 GitHub starsUsed in 2 repos~4.2k tokens
    Frontend & DesignAuto-check passed
  • Ok Script I18n

    AliceJump/ok-end-field

    Maintain gettext translations for ok-script task UI and runtime messages.

    555 GitHub stars~828 tokensUpdated today
    Frontend & DesignAuto-check passed

More from Swttch/swttch

  • PR Checklist

    Swttch/swttch

    Pre-PR review checklist for the claude-code-gui-jetbrains project.

    211 GitHub stars~1.8k tokensUpdated today
    Auto-check passed

Works with

Questions about Add Locale

What does Add Locale do?

Add a new UI language/locale to the claude-code-gui webview i18n system, or extend/verify an existing one. Add Locale is an agent skill from Swttch/swttch. Add a new UI language/locale to the claude-code-gui webview i18n system, or extend/verify an existing one.

When should I use Add Locale?

Add Locale fits situations like: someone wants to translate the UI into a new language; contribute translations; translate the UI; contribute a translation.

How do I install Add Locale in Claude Code?

Run `npx skills add Swttch/swttch --skill add-locale -a claude-code`. Or copy the skill folder (.claude/skills/add-locale in Swttch/swttch) into .claude/skills/add-locale in your project. Claude Code loads it when a task matches its description.

How do I install Add Locale in Codex?

Run `npx skills add Swttch/swttch --skill add-locale -a codex`. Or copy the skill folder (.claude/skills/add-locale in Swttch/swttch) into .agents/skills/add-locale in your project. Codex loads it when a task matches its description.

Can I use Add Locale in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Swttch/swttch --skill add-locale -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-locale, .gemini/skills/add-locale, .github/skills/add-locale and .opencode/skills/add-locale in your project.

What does Add Locale need to run?

Going by SKILL.md and its folder, Add Locale needs the command-line tools its instructions call (bash and node).

Does Add Locale access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Add Locale safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Add Locale use?

Add Locale is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Add Locale use?

About 1.3k tokens (SKILL.md is roughly 5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Add Locale?

Skills that share tags, products or a category with Add Locale: Roo Translation (zgsm-ai/costrict, 4.5k stars), Chatbox i18n Translator (chatboxai/chatbox, 42k stars), Enforce Rules For I18n (moeru-ai/airi, 50k stars) and Translation Review (Devolutions/UniGetUI, 26k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Add Locale?

Swttch (a GitHub organization) maintains it in Swttch/swttch, which has 211 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 9, 2026.

Source: Swttch/swttch on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.