一键导入
translate
// Manage Vorta translations using AI. Commands - /translate missing (report untranslated counts), /translate review <lang> (generate translations), /translate compile (build .qm files).
// Manage Vorta translations using AI. Commands - /translate missing (report untranslated counts), /translate review <lang> (generate translations), /translate compile (build .qm files).
Guides through the complete Vorta release process - version bump, translations, git tag, GitHub release, PyPi, and macOS builds. Invoke with /release.
Triage and classify GitHub issues for the Vorta project. Use when reviewing issues, applying labels, deciding whether to close issues, or evaluating feature requests against project scope.
| name | translate |
| description | Manage Vorta translations using AI. Commands - /translate missing (report untranslated counts), /translate review <lang> (generate translations), /translate compile (build .qm files). |
Manage translations for the Vorta backup application. This skill replaces the previous Transifex-based workflow with AI-powered translations.
/translate missingReport the count of untranslated strings for each language.
/translate review <lang>Review and generate translations for a specific language (e.g., de, es, fr).
/translate compileCompile all .ts files to binary .qm format.
src/vorta/i18n/ts/vorta.<lang>.tssrc/vorta/i18n/qm/vorta.<lang>.qm| Code | Language |
|---|---|
| ar | Arabic (RTL) |
| cs | Czech |
| de | German |
| es | Spanish |
| fi | Finnish |
| fr | French |
| gl | Galician |
| it | Italian |
| nl | Dutch |
| ru | Russian |
| sk | Slovak |
| sv | Swedish |
/translate missingsrc/vorta/i18n/ts/<translation type="unfinished"/> (untranslated)<message> elementsLanguage Untranslated Total Completion
de 12 450 97.3%
es 45 450 90.0%
...
/translate translate <lang>Generate translations for a specific language.
Read src/vorta/i18n/ts/vorta.<lang>.ts and identify:
<translation type="unfinished"/>2a. Load glossary: Read .claude/skills/translate/glossaries/<lang>.md if it exists. All terms in the glossary are mandatory — use them consistently.
2b. Scan existing translations: Before translating new strings, grep for key domain terms in already-translated strings to identify established conventions. Flag any conflicts with the glossary (e.g., a glossary says "Passwort" but existing translations use "Kennwort").
2c. Resolve unknown terms: If a source string contains a term not covered by the glossary, and the term is ambiguous or has multiple valid translations, ask the user which translation to use (via AskUserQuestion). Add the decision to the glossary file and its Decision Log.
<context>
<name>AddProfileWindow</name> <!-- UI component name -->
<message>
<location filename="views/profile.py" line="25"/> <!-- Source location -->
<source>Save</source> <!-- English text to translate -->
<translation>Speichern</translation> <!-- Translated text -->
</message>
</context>
Special case - comment-based strings:
<message>
<source>messages</source>
<comment>Please unlock your system password manager</comment> <!-- THIS is the text to translate -->
<translation type="unfinished"/>
</message>
When <source> is messages, settings, or app, the actual translatable text is in <comment>.
For each untranslated string, consider:
UI Context (<name> element):
RepoTab, ArchiveTab, SourceTab = main tabsAddRepoWindow, AddProfileWindow = dialog windowsMainWindow = main application windowSource Location (<location> element):
views/ = UI textborg/ = backup operation messagesstore/ = settings descriptionsApplication Domain:
Style Guide:
{variable} and %s patterns exactlyBefore writing translations, cross-check all generated translations against the glossary. Verify that no inconsistent terms slipped through (e.g., using "Kennwort" when the glossary specifies "Passwort"). Fix any violations before proceeding.
Replace <translation type="unfinished"/> with <translation>Translated text</translation>
Important XML rules:
& → &, < → <, > → >type="unfinished" attribute only for strings you cannot confidently translateAfter making changes, display:
/translate compile to build .qm files/translate compileCompile .ts source files to binary .qm format:
make translations-to-qm
Or manually:
for f in src/vorta/i18n/ts/vorta.*.ts; do
lrelease "$f" -qm "src/vorta/i18n/qm/$(basename "$f" .ts).qm"
done
{0}, %s, %d, etc.)After updating translations:
make translations-to-qmuv run vorta# 1. Check translation status
/translate missing
# 2. Review and translate German
/translate review de
# 3. Compile translations
/translate compile
# 4. Test in app
uv run vorta
Maintain consistency with these translations:
| English | Context | Notes |
|---|---|---|
| Repository | Borg repo | Often kept as "Repository" in many languages |
| Archive | Backup snapshot | Time-based backup point |
| Backup | Action/noun | The backup operation |
| Prune | Delete old archives | Technical term |
| Mount | Make archive browsable | Filesystem operation |
| Extract | Restore files | Copy files from archive |
| Passphrase | Password to unlock the borg key | Security credential |
| Profile | Backup configuration | Group of settings |
| Schedule | Backup timing | When to run backups |
| Source | Files to back up | Folders/files to include |
| Exclude | Files to skip | Patterns to ignore |
Per-language glossaries live in .claude/skills/translate/glossaries/<lang>.md. These document agreed-upon translations for domain-specific and ambiguous terms. The terms in a glossary are mandatory — they must be used consistently in all translations for that language.
Each glossary contains:
Create a new glossary when a language is first reviewed. Update it whenever a new term decision is made.
Copy an existing .ts file as template:
cp src/vorta/i18n/ts/vorta.de.ts src/vorta/i18n/ts/vorta.XX.ts
Update the language attribute in the new file:
<TS version="2.1" language="XX">
Clear all translations (set to type="unfinished")
Run /translate review XX to generate translations
Compile with /translate compile
Test in the application