Translate
tagspaces/tagspaces
Translate new or untranslated i18n strings from the English locale files (core.json + peri.json) into all other locales, maintaining consistency with each language's existing translations.
A skill your agent uses when implementing translations/i18n in Frappe v14-v16 apps.
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-core-translation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-core-translation --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/source/core/frappe-core-translation .claude/skills/frappe-core-translation && rm -rf skills-srcUse ~/.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/
Install the "frappe-core-translation" agent skill from https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/core/frappe-core-translation into .claude/skills/frappe-core-translation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frappe-core-translation", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/core/frappe-core-translationType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-core-translation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-core-translation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/source/core/frappe-core-translation .agents/skills/frappe-core-translation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "frappe-core-translation" agent skill from https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/core/frappe-core-translation into .agents/skills/frappe-core-translation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frappe-core-translation", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-core-translation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-core-translation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/source/core/frappe-core-translation .cursor/skills/frappe-core-translation && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "frappe-core-translation" agent skill from https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/core/frappe-core-translation into .cursor/skills/frappe-core-translation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frappe-core-translation", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git --path skills/source/core/frappe-core-translation--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-core-translation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-core-translation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/source/core/frappe-core-translation .gemini/skills/frappe-core-translation && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "frappe-core-translation" agent skill from https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/core/frappe-core-translation into .gemini/skills/frappe-core-translation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frappe-core-translation", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-core-translationInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-core-translation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/source/core/frappe-core-translation .github/skills/frappe-core-translation && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "frappe-core-translation" agent skill from https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/core/frappe-core-translation into .github/skills/frappe-core-translation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frappe-core-translation", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-core-translation -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Impertio-Studio/Frappe_Claude_Skill_Package frappe-core-translation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/source/core/frappe-core-translation .opencode/skills/frappe-core-translation && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "frappe-core-translation" agent skill from https://github.com/Impertio-Studio/Frappe_Claude_Skill_Package/tree/main/skills/source/core/frappe-core-translation into .opencode/skills/frappe-core-translation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "frappe-core-translation", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
frappe-core-translationA skill your agent uses when implementing translations/i18n in Frappe v14-v16 apps.
Frappe Core Translation is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package. Use when implementing translations/i18n in Frappe v14-v16 apps. Covers () in Python, () in JavaScript, CSV translation files, bench commands, string extraction rules, lazy translation lt(), PO/MO files [v15+], RTL support, and custom app translations. Prevents common mistakes with f-strings, concatenation, and template literals that break string extraction. Keywords: translation, i18n, (), (), lt(), CSV, PO, gettext,, translate my app, multi-language, text not translated, wrong language, how to add translation…
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/anti-patterns.md`, `references/api-reference.md` and `references/csv-and-bench.md`). Compatibility notes: Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16.
It sits in Writing & Content, covering Translation and Internationalization. It works with JavaScript and Python. The repository describes itself as: 60 deterministic Claude AI skills for Frappe Framework & ERPNext v14-v16 development and operations. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 36cfa80. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are csv, bash, python and javascript).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16.
From compatibility in the SKILL.md frontmatter.
Frappe Core Translation loads about 1.9k tokens when it runs, and up to ~7.8k if it reads all its reference files. Until then it costs about 148 tokens; SKILL.md has 536 words of instructions outside code blocks.
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.
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.
The full file from Impertio-Studio/Frappe_Claude_Skill_Package at commit 36cfa80, republished under its MIT licence (© Impertio-Studio). 536 words, ~1,930 tokens.
.claude/skills/frappe-core-translation/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Deterministic patterns for translating Frappe apps across v14, v15, and v16.
| Task | Python | JavaScript |
|---|---|---|
| Translate string | _("Hello") | __("Hello") |
| With substitution | _("Hello {0}").format(name) | __("Hello {0}", [name]) |
| With context | _("Change", context="Coins") | __("Change", null, "Coins") |
| Lazy (module-level) | _lt("Pending") [v15+] | N/A |
| Check RTL | frappe.utils.is_rtl() | frappe.utils.is_rtl() |
Need to translate a string?
├── In Python (.py)?
│ ├── Inside a function/method → _("text {0}").format(val)
│ ├── Module-level constant [v15+] → _lt("text")
│ └── Module-level constant [v14] → define inside function or use lazy
├── In JavaScript (.js)?
│ └── ALWAYS → __("text {0}", [val])
├── In Jinja template (.html)?
│ └── {{ _("text") }}
├── In Vue (.vue)?
│ └── __("text") in <script>, {{ __("text") }} in <template>
└── DocType label/description/option?
└── Auto-extracted — no _() needed
Where do translations live?
├── v14 → apps/{app}/{app}/translations/{lang}.csv
├── v15+ → apps/{app}/{app}/locale/{lang}/LC_MESSAGES/{app}.po
└── User overrides → Translation DocType (highest priority)
Need to extract untranslated strings?
├── v14 → bench --site {site} get-untranslated {lang} {output}
└── v15+ → bench generate-pot-file --app {app}| Priority | Source | Scope |
|---|---|---|
| 1 | Translation DocType (user overrides) | Per-site |
| 2 | MO files (locale/{lang}/.../{app}.mo) | Per-app [v15+] |
| 3 | CSV files (translations/{lang}.csv) | Per-app |
| 4 | Parent language (e.g., pt for pt-BR) | Fallback |
| Feature | v14 | v15 | v16 |
|---|---|---|---|
_() / __() | Yes | Yes | Yes |
_lt() lazy translation | No | Yes | Yes |
| CSV translations | Yes | Yes (legacy) | Yes (legacy) |
| PO/MO (gettext) | No | Yes | Yes |
bench generate-pot-file | No | Yes | Yes |
| Babel JS extractor | No | Yes | Yes |
Type hints on _() | No | No | Yes |
These are extracted automatically by the framework:
| File Type | Extractor | What It Finds |
|---|---|---|
.py | Babel (AST) | _("..."), _lt("...") calls |
.js | Babel tokenizer [v15+] / regex [v14] | __("...") calls |
.html | Regex | {{ _("...") }} in Jinja |
.vue | Same as JS | __("...") in script/template |
.json | DocType parser | Labels, descriptions, options |
CRITICAL: Extractors work on the AST/tokens. They CANNOT extract dynamically constructed strings. See Anti-Patterns.
| Pattern | Why It Breaks | Correct Form |
|---|---|---|
_(f"Hello {name}") | f-string not extractable | _("Hello {0}").format(name) |
_("Hello " + name) | Concatenation fragments | _("Hello {0}").format(name) |
_("Welcome %s") % name | Old-style not extractable | _("Welcome {0}").format(name) |
__(`Hello ${name}`) | Template literal not extractable | __("Hello {0}", [name]) |
_(" Hello ") | Leading/trailing spaces trimmed | _("Hello") |
_("item" if x else "items") | Ternary inside _() | _("item") if x else _("items") |
_(variable) | Variable not extractable | _("Known String") |
Full anti-pattern catalog with code examples: references/anti-patterns.md
Location: apps/{app}/{app}/translations/{lang}.csv
"source","translation","context"
"Hello","Hallo",""
"Change","Wisselgeld","Coins"
"Change","Wijziging","Amendment"translations/ directoryLocation: apps/{app}/{app}/locale/{lang}/LC_MESSAGES/{app}.po
# Generate POT template
bench generate-pot-file --app {app}
# Migrate existing CSV to PO
bench migrate-csv-to-po --app {app}
# Compile PO to MO (required for runtime)
bench compile-po-to-mo --app {app}PO files follow standard GNU gettext format. Use any PO editor (Poedit, Weblate, Transifex).
| Command | Version | Purpose |
|---|---|---|
bench --site {site} get-untranslated {lang} {output.csv} | All | Export untranslated strings |
bench update-translations {lang} {untranslated.csv} {translated.csv} | All | Import translations |
bench generate-pot-file --app {app} | v15+ | Generate .pot template |
bench migrate-csv-to-po --app {app} | v15+ | Convert CSV to PO format |
bench compile-po-to-mo --app {app} | v15+ | Compile PO to binary MO |
Hardcoded RTL languages: ar (Arabic), he (Hebrew), fa (Persian/Farsi), ps (Pashto)
# Python
if frappe.utils.is_rtl():
# Apply RTL-specific logic// JavaScript
if (frappe.utils.is_rtl()) {
// Apply RTL-specific logic
}dir="rtl" to the <html> elementmargin-inline-start not margin-left) for RTL compatibility_() / __() with positional placeholdersbench --site {site} get-untranslated {lang} untranslated.csvbench generate-pot-file --app {app}apps/{app}/{app}/translations/{lang}.csvapps/{app}/{app}/locale/{lang}/LC_MESSAGES/{app}.pobench compile-po-to-mo --app {app}bench --site {site} clear-cache| File | Contents |
|---|---|
| references/api-reference.md | Full Python _() and JS __() API with all signatures and edge cases |
| references/csv-and-bench.md | CSV format spec, bench commands, PO/MO workflow, custom app setup |
| references/anti-patterns.md | Complete anti-pattern catalog with failing and corrected examples |
© Impertio-Studio, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files (references) in skills/source/core/frappe-core-translation of Impertio-Studio/Frappe_Claude_Skill_Package.
Open the folder on GitHubat commit 36cfa80
Frappe Core Translation 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Frappe Core Translation this skillImpertio-Studio/Frappe_Claude_Skill_Package | 189 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Translatetagspaces/tagspaces | 5.3k | — | ~2.2k | Automated safety check: Pass | AGPL-3.0 | |
| Error Translatorlaolaoshiren/claude-code-skills-zh | 880 | — | ~609 | Automated safety check: Pass | MIT | |
| Module Level Code TranslatorArabelaTso/Skills-4-SE | 253 | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| Code TranslationArabelaTso/Skills-4-SE | 253 | — | ~3.1k | Automated safety check: Pass | Apache-2.0 | |
| Lingui Best PracticesB0und/WikiSpeedrun | 133 | 2 repos | ~4.2k | Automated safety check: Pass | MIT |
tagspaces/tagspaces
Translate new or untranslated i18n strings from the English locale files (core.json + peri.json) into all other locales, maintaining consistency with each language's existing translations.
laolaoshiren/claude-code-skills-zh
编程错误消息翻译专家 — 将英文错误消息翻译成中文,解释原因并提供修复方案
ArabelaTso/Skills-4-SE
Translate source code between programming languages at function, class, and module levels while preserving behavior and generating verification tests.
ArabelaTso/Skills-4-SE
Convert code between programming languages while preserving functionality and semantics.
B0und/WikiSpeedrun
Implement internationalization with Lingui in React and JavaScript applications.
AliceJump/ok-end-field
Maintain gettext translations for ok-script task UI and runtime messages.
Impertio-Studio/Frappe_Claude_Skill_Package
Deploy HTML/CSS websites to ERPNext/Frappe (v15/v16) as Web Pages via the REST API.
Impertio-Studio/Frappe_Claude_Skill_Package
A skill your agent uses when designing multi-app Frappe architectures, deciding whether to split functionality into separate apps, or implementing cross-app communication patterns.
Impertio-Studio/Frappe_Claude_Skill_Package
A skill your agent uses when debugging Frappe errors, using bench console for live inspection, analyzing tracebacks, or reading Frappe log files.
Impertio-Studio/Frappe_Claude_Skill_Package
A skill your agent uses when receiving vague or unclear ERPNext/Frappe development requests that need interpretation.
Impertio-Studio/Frappe_Claude_Skill_Package
A skill your agent uses when migrating a Frappe app between major versions, detecting breaking API changes, or resolving post-migration errors.
Impertio-Studio/Frappe_Claude_Skill_Package
A skill your agent uses when reviewing or validating Frappe/ERPNext code against best practices and common pitfalls.
Works with
Categories
A skill your agent uses when implementing translations/i18n in Frappe v14-v16 apps. Frappe Core Translation is an agent skill from Impertio-Studio/Frappe_Claude_Skill_Package. Use when implementing translations/i18n in Frappe v14-v16 apps.
Frappe Core Translation fits situations like: implementing translations/i18n in Frappe v14-v16 apps; tasks that involve Translation; tasks that involve Internationalization.
Run `npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-core-translation -a claude-code`. Or copy the skill folder (skills/source/core/frappe-core-translation in Impertio-Studio/Frappe_Claude_Skill_Package) into .claude/skills/frappe-core-translation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-core-translation -a codex`. Or copy the skill folder (skills/source/core/frappe-core-translation in Impertio-Studio/Frappe_Claude_Skill_Package) into .agents/skills/frappe-core-translation in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Impertio-Studio/Frappe_Claude_Skill_Package --skill frappe-core-translation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/frappe-core-translation, .gemini/skills/frappe-core-translation, .github/skills/frappe-core-translation and .opencode/skills/frappe-core-translation in your project.
SKILL.md names no scripts, command-line tools or credentials: Frappe Core Translation is instructions for the agent only. Our summary lists: Python 3. Compatibility (from SKILL.md): Claude Code, Claude.ai Projects, Claude API. Frappe v14-v16..
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.
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.
Frappe Core Translation is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5.9k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Frappe Core Translation: Translate (tagspaces/tagspaces, 5.3k stars), Error Translator (laolaoshiren/claude-code-skills-zh, 880 stars), Module Level Code Translator (ArabelaTso/Skills-4-SE, 253 stars) and Code Translation (ArabelaTso/Skills-4-SE, 253 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Impertio-Studio (a GitHub organization) maintains it in Impertio-Studio/Frappe_Claude_Skill_Package, which has 189 GitHub stars. The repository holds 61 skills in this directory. The repository was last updated on September 17, 2026.
Source: Impertio-Studio/Frappe_Claude_Skill_Package on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.