Skip to content

Migrate translations from Transifex to AI-based workflow#2395

Merged
m3nu merged 8 commits into
borgbase:masterfrom
mr-raj12:migrate-translations-to-ai
Mar 15, 2026
Merged

Migrate translations from Transifex to AI-based workflow#2395
m3nu merged 8 commits into
borgbase:masterfrom
mr-raj12:migrate-translations-to-ai

Conversation

@mr-raj12
Copy link
Copy Markdown
Contributor

@mr-raj12 mr-raj12 commented Feb 6, 2026

Description

This PR migrates Vorta's translation workflow from Transifex to an AI-based approach using Claude Code skills.

Changes:

  • Delete .tx/config (Transifex configuration)
  • Remove Transifex Makefile targets (translations-push, translations-pull, translations-update)
  • Remove Transifex URL from appdata.xml
  • Add new /translate skill with three commands:
    • /translate missing - Report untranslated string counts per language
    • /translate translate <lang> - Generate translations for a specific language
    • /translate compile - Compile .ts files to binary .qm format
  • Update CONTRIBUTORS.md to acknowledge Transifex contributors
  • Add src/vorta/i18n/richtext.py module to separate HTML formatting from translatable strings (@m3nu)
  • Add per-language glossary system (.claude/skills/translate/glossaries/) (@m3nu)
  • German translation cleanup: informal "du", consistent terminology (@m3nu)
  • Rename internal "Misc" references to "Settings" to match UI (@m3nu)

Related Issue

Closes #2359

Motivation and Context

Transifex has been a friction point for translations - external dependency, requires account setup, and translations often lag behind development. This change enables maintainers to:

  1. Quickly see translation status with /translate missing
  2. Generate high-quality translations directly with /translate translate <lang>
  3. Compile translations without external tooling with /translate compile

How Has This Been Tested?

Phase 1: Infrastructure removal - COMPLETE

  • .tx/config deleted
  • Makefile targets removed (verified with make help | grep translations)
  • appdata.xml Transifex URL removed
  • Linting passes (make lint)

Phase 2: Skill functionality - COMPLETE

  • /translate missing displays correct table of all 12 languages
  • /translate translate de successfully translated 34 German strings
  • /translate compile compiles all .ts → .qm files

Test commands to run locally:

1. Verify Transifex removal: `make help | grep translations`
   - Expected: translations-from-source, translations-to-qm (NO push/pull/update)

2. Verify .tx directory deleted: `ls -la .tx/`
   - Expected: No such file or directory

3. Run linting: `make lint`

4. Test translation skill (requires Claude Code CLI):
   - `/translate missing` - Shows translation status table
   - `/translate translate de` - Generates German translations (don't commit)
   - `/translate compile` - Compiles .ts to .qm (requires lrelease)

5. Test compilation directly: `make translations-to-qm`

Phase 3: Translation generation - German translations included (by @m3nu), other languages as follow-up PRs

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist

  • I have read the CONTRIBUTING guide.
  • My code follows the code style of this project.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have added tests to cover my changes.
  • All new and existing tests passed.

I provide my contribution under the terms of the license of this repository and I affirm the Developer Certificate of Origin.


Note: Documentation update for vorta.borgbase.com translation guide will be done as a follow-up after this PR is merged.

@mr-raj12
Copy link
Copy Markdown
Contributor Author

mr-raj12 commented Feb 6, 2026

Hi @m3nu ! So I've tested everything for phases 1 & 2 and it's all working. The Transifex stuff is removed and the new /translate skill does what it should. And I ran /translate review de to test it out and it generated German translations, but honestly I have no clue if they're actually good since I don't speak German lol. Need your help moving forward with the implementation

@m3nu
Copy link
Copy Markdown
Contributor

m3nu commented Feb 6, 2026

Cool. I'll try it locally and let you know.

@mr-raj12
Copy link
Copy Markdown
Contributor Author

mr-raj12 commented Feb 6, 2026

Sure, thanks! Let me know how it goes.

@m3nu
Copy link
Copy Markdown
Contributor

m3nu commented Feb 6, 2026

I worked with it a bit and made some related changes in German and added a glossary per-language to keep high level policies. And tried to rid translations of HTML chars. If you think some of my commits are too large, we can move them to another PR.

Can you also update the docs to reflect the new workflow? https://vorta.borgbase.com/contributing/translations/

I guess now you can review my changes. 😄

Comment thread .claude/skills/translate/glossaries/de.md
Comment thread .claude/skills/translate/SKILL.md Outdated
Comment thread .claude/skills/translate/SKILL.md
Comment thread .claude/skills/translate/SKILL.md Outdated
Comment thread src/vorta/assets/UI/archive_tab.ui
@m3nu
Copy link
Copy Markdown
Contributor

m3nu commented Feb 7, 2026

Can you look into the test failures, @mr-raj12 ?

@mr-raj12
Copy link
Copy Markdown
Contributor Author

mr-raj12 commented Feb 7, 2026

Hi @m3nu , CI is green now, test failure was caused by his "Remove HTML chars" commit (attribute ordering bug in ssh_dialog.py)

@m3nu
Copy link
Copy Markdown
Contributor

m3nu commented Feb 7, 2026

Great. Let me know what you think about the changes in general, the ones I added, and the final state—especially of the skill—so we can merge it.

@mr-raj12
Copy link
Copy Markdown
Contributor Author

mr-raj12 commented Feb 7, 2026

Hey @m3nu, reviewed your commits, all looks good to me. The glossary approach is smarter one, gives the AI clear rules to follow. Du and the Misc =>Settings rename both make sense. The richtext refactoring is the biggest piece - nice to have translations free of HTML clutter. The one bug it introduced (ssh_dialog.py) is already fixed on my end.
Also pushed a commit addressing @ThomasWaldmann comments, fixed the passphrase description and swapped osxfuse URL to macfuse.
Will update the docs as a follow-up. Anything else before we merge?

@mr-raj12
Copy link
Copy Markdown
Contributor Author

mr-raj12 commented Feb 7, 2026

@m3nu All feedback have been addressed, CI is all green, and docs update is up at borgbase/vorta.borgbase.com#57. Ready for your review when you get a chance! Thanking you!

Comment thread .claude/skills/translate/SKILL.md
mr-raj12 added a commit to mr-raj12/vorta that referenced this pull request Feb 7, 2026
- Split into /translate translate (generate) and /translate review (QA only)
- Fix inconsistent command naming throughout SKILL.md
- Add detailed issue reporting for review command
- Update workflow examples

Addresses @m3nu feedback in PR borgbase#2395
@mr-raj12
Copy link
Copy Markdown
Contributor Author

mr-raj12 commented Feb 7, 2026

Done! The /translate review command reports detailed issues with line numbers:

  • Glossary violations
  • Translation inconsistencies
  • Style issues (colons, placeholders, Title Case)
  • Technical validation (XML escaping, keyboard shortcuts)

Pushed in e3f24a8. Ready for review!

@mr-raj12
Copy link
Copy Markdown
Contributor Author

mr-raj12 commented Feb 9, 2026

Hi @m3nu , shall i update the docs before finalizing this PR?

@mr-raj12
Copy link
Copy Markdown
Contributor Author

@m3nu Apologies for the delayed follow-up — docs are now updated in borgbase/vorta.borgbase.com#58. It adds documentation for /translate review, per-language glossaries, quality guidelines, and the full workflow example.
Summary of where everything stands:

Both PRs are ready whenever you get a chance to review!

mr-raj12 and others added 8 commits March 15, 2026 07:31
- Remove .tx/config and Transifex Makefile targets
- Remove Transifex URL from appdata.xml
- Add AI translation skill (/translate commands)
- Update CONTRIBUTORS.md to acknowledge transition

Closes borgbase#2359
setupUi() calls retranslateUi() which accesses key_size_help_text
and key_size_help_link before they were initialized, causing
AttributeError in SSHAddWindow constructor.
- Correct passphrase glossary entry: unlocks the borg key, not for
  data encryption directly
- Update FUSE link from osxfuse to macfuse (project was renamed)
…TRIBUTORS wording

Replace sequential str.replace with reverse-order replacement (highest
%N first) to match Qt's QString::arg() behavior and prevent double-
substitution. Add logger.debug warning for unreplaced placeholders.
Specify "February 2026" in CONTRIBUTORS.md Transifex note.
@m3nu m3nu force-pushed the migrate-translations-to-ai branch from 9c8f366 to 6608203 Compare March 15, 2026 07:35
@m3nu m3nu merged commit 4c17fcd into borgbase:master Mar 15, 2026
5 checks passed
@adrianlopezgalera
Copy link
Copy Markdown

Hello. I can understand that the Vorta development team seeks the highest speed to get translations, especially for languages ​​​​with fewer speakers. However, it seems like a terrible idea that reveals a disturbing future for translators and linguists. Thinking that an AI can produce high-quality translations is currently an insult to translators.

English is a language that is especially dependent on context due to its polysemy and homonymy: the same word can be a noun, an adjective, a verb and even an adverb. And, furthermore, said verb may correspond to more than a verb tense, grammatical mood or subject depending on the target language.

No AI today is capable of understanding the context of a native speaker to recognize what they should insert in a string, in a simple gap. An AI works statistically and with that same statistic it will fail much more than a human translator.

Regards!

@ThomasWaldmann
Copy link
Copy Markdown
Collaborator

ThomasWaldmann commented Apr 30, 2026

@adrianlopezgalera In a perfect world, FOSS projects would have a lot of volunteer and good (human) translators keeping all the translations updated.

I didn't follow the translation situation for vorta, but I can say from some other projects that in the real world, there is often a lack of translators and they come and go, so as a project maintainer, you are often in the situation to deal with incomplete translations, chasing translators, etc.

As FOSS projects usually can't offer anything (except "fame" maybe), doing translations is often considered a not-so-exciting task (similar as updating the docs) compared to implementing exciting new features. Thus, the interest in that is limited to interested users of the tool who are also speaking English well enough, but still wanting to support a translation to their native non-English language (although they personally could just use the English locale for themselves).

@mr-raj12 @m3nu Is this AI workflow able to support AI and human translators?

Maybe the AI works OK overall, but does a mediocre job for some strings. If then a human translator would fix these strings manually, would that translation stay or would it likely be overwritten by AI again?

@m3nu
Copy link
Copy Markdown
Contributor

m3nu commented Apr 30, 2026

Yess! We keep translations inside the repo now, so a translation update is just a PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Migrate translations from Transifex to AI-based workflow

4 participants