DarkFlippers / DarkFlippers/qUnleashed

Obsolete Crowdin strings are never removed

Open
#41 2 comments 0 reactions 1 assignee Claimed by @mishamyte View on GitHub
area/localization
Dominant language
C
Stars
111
Forks
8
Avg merge
3h 41m
Merged PRs (30d)
37

Description

`crowdin-tx.yml` runs `upload_sources: true` with no obsolete-string handling, and `crowdin.yml` sets only `preserve_hierarchy`. The Crowdin CLI does not remove strings that have disappeared from the source file unless `--delete-obsolete` is passed, so every key ever deleted from `translations/app_en.arb` is still in the project.

Cost compounds quietly:

- Translators spend effort on strings the app no longer has.
- Completion percentages are measured against a denominator that includes dead keys, so "100%" stops meaning the app is fully translated.
- `crowdin_summary.py` reports those same inflated numbers into the PR body and the job summary.

ChameleonUltraGUI handles this explicitly: `updateCrowdin.py` diffs `app_en.arb` against `main~1` and issues deletes through the strings API for keys that vanished.

- [ ] Confirm the input `crowdin/github-action@v2` exposes for `--delete-obsolete` (the CLI flag on `crowdin upload sources`)
- [ ] Enable it, or add a scheduled reconciliation that reports orphans without deleting
- [ ] Audit how many orphans exist today before turning deletion on — it is destructive, and a bad `.arb` in history could have registered keys worth keeping

Prefer a report-only first pass. Deleting a string in Crowdin discards its translations across every locale.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.