Fix the CI artifacts, the update endpoint and the translations - #811
Merged
Conversation
app/build/outputs/mapping has not existed since #796, and DEBUG_SYMBOLS_PATH resolves per module rather than to the root build/symbols the workflow read, so both artifacts have been empty. upload-artifact calls an unmatched path a success, which is why neither complained.
manager/tools/check_translations.py had no caller. It runs on both resource trees now, before the build, since it needs only Python. It compared indexed %1$-style arguments only, so a literal "%d" in values-af went unseen. Bare %s and %d count now, maxed over a plurals element's items rather than summed -- Polish has four forms where English has two. Three defects fall out: a zh-rTW line pasted into values-af, that %d title, and %1$s where the source has a bare %s in values-nl. The Afrikaans strings are rewritten from vocabulary already in that file and want a native speaker's eye. Crowdin owns all three, so they need the same correction upstream.
zygisk/update.json asks for Vector-v2.0-Release.zip; the release attaches Vector-v2.0-3021-Release.zip. Magisk has offered the v2.0 update and failed the install ever since. The JingMatrix/LSPosed paths there, in module.prop's updateJson and in the issue templates only redirect. The GPL headers and the README's upstream links stay.
Read all 42 locales against the source rather than only what a checker can see. The product name had been machine-translated in 18 of them: Spanish "LSPosición de estado", Bulgarian "Предложен статус на LSP" with "posed" read as "proposed", Slovak "LSPonúkaný stav", Czech "LPosed načten"; Bengali, Hindi, Korean, Sinhala and Urdu transliterated it and Vietnamese dropped it. 20 strings. Hebrew had three where the resource key was translated instead of the value, so the Approve button read "אישור_תחום". Arabic left "Scope Request" in English and Kurdish "Scope Daxwaza". Hungarian and Turkish both wrote %2$s with no space after it, running the user name into the next word. values-zh-rHK held a Simplified string in a Traditional file. French had l\’arrêt, which is not an Android escape, and "or" where the source says "and". Ukrainian called a scope "обсяг робіт", which is the scope of a construction contract. Bulgarian's Approve button ended in a preposition with nothing after it. Then the wording. 39 locales said "Xposed module" where the source says just "module", left from an older English string; the manager says "module" everywhere and never "Xposed module", so the locales come to it. 116 strings, and not a search and replace: German drops the hyphen and keeps its article, Greek keeps "Το", Lithuanian loses the quotes that were around the name, Slovak keeps the genitive in "Aktualizácia modulu", and the CJK and RTL locales lose the space that joined it. Nine strings are deliberately untouched and want somebody who reads the language. The scope-request sentence in Bulgarian, Greek, Hungarian, Thai and Vietnamese -- it is not clear which participant is doing the asking, and Thai also has a malformed vowel in "ผูัใช้". scope_deny in Hebrew currently means denying an accusation rather than refusing a request. never_ask_again in Kurdish is still literally "Never Ask". And the multi-user install line in Slovak. Eleven of the strings that did change are sound but would still benefit from a reading, mostly the Germanic determiner question and Kurdish. Nothing to remove: all 17 keys have a caller, and no locale carries a key the source does not.
JingMatrix
added a commit
that referenced
this pull request
Jul 30, 2026
Sixteen new strings across the eighteen languages the manager is translated into. #811 made this a CI gate, and rightly: a screen that exists to be found by someone who cannot find the app is no use half in English. Terminology follows what each language already uses for "launcher" — 桌面 in Simplified Chinese, מסך הבית in Hebrew, trình khởi chạy in Vietnamese — rather than the English word.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Four unrelated fixes.
app/build/outputs/mapping has not existed since #796, and DEBUG_SYMBOLS_PATH resolves per module rather than to the root build/symbols the workflow read, so both artifacts have been silently empty. upload-artifact calls an unmatched path a success, which is why neither ever complained.
manager/tools/check_translations.py had no caller. It runs in CI over both resource trees now, and it fails on three real defects, fixed here: a zh-rTW line pasted into values-af, a literal "%d" Afrikaans users have been reading, and a stray %1$s in values-nl.
zygisk/update.json asks for Vector-v2.0-Release.zip where the release attaches Vector-v2.0-3021-Release.zip, so Magisk has offered the v2.0 update and then failed the install ever since it shipped. Fixed, along with the old repository paths there, in module.prop's updateJson and in the issue templates.
Then the daemon translations, read locale by locale rather than through the checker. The product name had been machine-translated in 18 of them -- Spanish "LSPosición de estado", Bulgarian "Предложен статус на LSP" with "posed" read as "proposed", Slovak "LSPonúkaný stav". Hebrew had three strings where the resource key was translated instead of the value, so the Approve button read "אישור_תחום". Hungarian and Turkish ran the user name into the following word with a spaceless %2$s, and values-zh-rHK held a Simplified string in a Traditional file. 152 strings in all, of which 116 are the wording: 39 locales said "Xposed module" where the source says just "module", and the manager says "module" everywhere, so the locales come to it.
Nine strings I left alone, listed in that commit. They need somebody who reads Bulgarian, Greek, Hungarian, Thai, Vietnamese, Hebrew, Kurdish or Slovak, and a guess there would be worse than the wart.
Two things to know before merging. update.json is served live from master, so that one reaches every v2.0 install on its next update check the moment it lands; nothing else here touches a device. And Crowdin owns the string files, so the translation changes want the same correction upstream or the next pull reverts them.
No tests, as usual. The translation check is its own proof -- put the defects back and it fails with exactly those.