po: AI-assisted app-string translation gap-fill for it/fr/de/es - #582
Merged
Conversation
The Italian application catalog had 4 entries to handle, all in a
single wxMultiChoiceDialog at src/amule.cpp:737-741 shown when
bootstrap files (server.met / nodes.dat) are missing at startup:
- src/amule.cpp:706 (fuzzy): "eD2k server list (server.met)" — old
Italian translation was for an entirely unrelated msgid
("Trovato %i server nel file server.met"); replaced with the
current checkbox-label form.
- src/amule.cpp:707 (empty): "Kad bootstrap nodes (nodes.dat)" —
paired checkbox label, translated to match.
- src/amule.cpp:714 (empty): the dialog body text.
- src/amule.cpp:715 (fuzzy): "Network bootstrap" — the dialog title;
prior translation was the unrelated "Reti" ("Networks"), replaced.
All four marked `# AI-GENERATED — please review.` for native review.
The Spanish application catalog had 22 strings with empty msgstr and 30 entries flagged fuzzy by xgettext/msgmerge after the English msgids drifted since the last Spanish translation pass. Of the 30 fuzzy entries, 21 had substantive semantic msgid changes (e.g., src/MuleTrayIcon.cpp's "Connected (LowID)" / "Connected (HighID)" replacing the generic "Connected"; the new AppImage- integration dialog strings; the HTTP-download error messages; the GeoLite2 IP2Country update strings parameterised on filename) and needed fresh translations. The other 9 fuzzies had cosmetic msgid changes only (typos, whitespace, plural-form punctuation) where the existing Spanish translation was still semantically correct -- those just have their #, fuzzy flag removed, no translation change, and no AI marker. The 22 empty msgstr cover: - AppImage desktop-integration dialogs (~12 strings) - "Kad bootstrap nodes" / "Network bootstrap" dialog - amule-remote-gui EC connection timeout - ExternalConn EC tag-validation error - HTTP download error messages - IP2Country GeoLite2 unconfigured-URL message - Kad "ask for more results" feature (3 strings) 43 substantive translations are each marked with a `# AI-GENERATED -- please review.` translator comment, allowing a native reviewer to spot them with: grep -B 0 -A 8 "AI-GENERATED" po/es.po Translations preserve printf-style format specifiers (%s, %d, %i, %llu) and aMule-specific terminology (Kad, eD2k, LowID/HighID, GeoLite2, EC_TAG_*) verbatim. Wayland / AppImage technical loanwords left untranslated where standard Spanish software-docs convention keeps them in English. No source-code changes; this is a po-only update.
Same surface as po/es: 22 strings with empty msgstr and 30 entries flagged fuzzy by xgettext/msgmerge after upstream msgid drift. Of the fuzzies, 22 had substantive msgid changes (replacement translations provided) and 8 had cosmetic changes only (fuzzy flag removed, existing translation preserved as semantically correct). Notable correction in this commit: src/amuled.cpp:159's prior French translation rendered the config-key name "ECPassword" as the localised phrase 'Mot de passe EC'. That phrase is NOT a valid field in ~/.aMule/amule.conf — users following the localised error message literally would edit the wrong (or non-existent) key. Fixed to keep "ECPassword" verbatim, matching the established convention for config-key identifiers across the rest of the catalog. 44 substantive translations are marked `# AI-GENERATED — please review.` for native French reviewer: grep -B 0 -A 8 "AI-GENERATED" po/fr.po Translations preserve printf-style format specifiers (%s, %d, %i, %llu) and aMule-specific terminology (Kad, eD2k, LowID/HighID, GeoLite2, EC_TAG_*, ECPassword) verbatim. French typographical convention applied: space before colon/question-mark in UI labels (e.g. "Serveur : ", "Connecté (LowID)") matching the rest of the catalog. No source-code changes; po-only update.
Largest of the four per-language commits in this PR: 26 strings with empty msgstr and 49 entries flagged fuzzy. Of the fuzzies, 40 had substantive msgid changes needing fresh translations and 9 had cosmetic changes only (fuzzy flag removed, existing translation preserved as semantically correct). The 26 empty msgstr cover the standard set (AppImage integration dialogs, Kad bootstrap dialog, EC connection / tag errors, HTTP / GeoLite2 error messages, the new Kad "ask for more results" feature) plus four entries the German catalog historically had gaps on that other languages already covered: notifications-on- download (muuli_wdr.cpp), the search-disabled-on-both-networks error (SearchDlg.cpp), and the ed2k-hash-OOM message (aLinkCreator). 40 substantive fuzzy fixes cover the same surface as po/fr (tray- icon download/upload-speed labels with new format specifier, the LowID/HighID disambiguation, HTTP-download error messages parameterised, GeoLite2 update strings now filename-parameterised, "Connected (firewalled)" no longer prefixed with "Kad", etc.) plus ~16 de-specific entries with stale translations (MB/s vs kB/s unit fix at DownloadListCtrl.cpp:965, "Only to Logfile" misrendered as "&Oeffne diese Datei", the "Copy eD2k link" menu label gaining "+ Source", the "No search type defined" help text, etc.). 66 substantive translations are marked `# AI-GENERATED — please review.` for native German reviewer: grep -B 0 -A 8 "AI-GENERATED" po/de.po Translations preserve printf-style format specifiers (%s, %d, %i, %llu, %lu, %.1f, %u), aMule-specific terminology (Kad, eD2k, LowID/HighID, GeoLite2, EC_TAG_*, ECPassword, Kademlia), and German software-docs convention for technical loanwords (Bootstrap, Compositor, Logdatei, AppImage, Wayland, Asio, Thread). No source-code changes; po-only update.
Contributor
|
When do you consider it would be the proper time to run update-po.sh? |
Contributor
Author
|
Probably it can be run already — I just didn't run it as part of this PR so the per-language commits would stay focused on actual translation work and not balloon with |
3 tasks
ngosang
pushed a commit
to ngosang/amule
that referenced
this pull request
Jul 24, 2026
) Ship the emule-security ipfilter.zip URL as the default (from amule-project#577) but leave the auto-update toggle off by default, so new users opt in rather than silently loading a filter at startup. emule-security's list blocks whole hosting ranges, which flags many VPN exit IPs; a default-on fetch would block those users before they ever open the preferences. Existing configs keep their stored IPFilterAutoLoad value; this only changes the shipped default for new configs. The URL default is unchanged, so ticking the box works out of the box.
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.
Companion to #580 (which did the manpage catalogs). Fills the remaining untranslated and fuzzy entries in
po/$lang.pofor Italian, French, German, and Spanish.Scope per language
The same surface appears in every language: AppImage desktop-integration dialog (12 new strings added upstream), the new Kad-bootstrap multi-choice dialog, the EC connection-timeout / tag-validation errors, several HTTP-download error messages that got
%splaceholders added (Failed to create HTTP request for %s,Downloaded %s (%llu bytes),HTTP download failed for %s: %s, etc.), the GeoLite2 IP2Country migration (no longer hard-coded toGeoIP.dat), the Kad "ask peers for more results" feature, and several tray-icon / status-bar labels that gained extra context (Connected (LowID)/Connected (HighID)instead of bareConnected,Server:vsServer IP:, etc.).German also includes a handful of de-specific stale-translation fixes the other languages didn't need: a wrong unit at
DownloadListCtrl.cpp:965(%.1f MB/swas translated as%.1f kB/s),Only to Logfilerendered as&Oeffne diese Datei, and theCopy eD2k linkmenu item gaining+ Source.AI-disclosure
Every translation added or substantively changed by this PR was generated by an AI translator, not by a human translator. Every such entry is preceded by:
# AI-GENERATED — please review.Please have a native speaker review these before merge. To list every AI-touched entry per file:
Counts by file: it=4, es=43, fr=44, de=66 markers. Total 157 entries flagged for native review.
The unfuzzy-only entries (9/8/9 across es/fr/de — see table) are entries where the English msgid changed cosmetically (typo correction, whitespace, plural-form punctuation) and the existing translation was still semantically correct. For those, only the
#, fuzzyflag is removed and no AI marker is added — no translation change.One semantic correction worth calling out (French)
src/amuled.cpp:159— the prior French translation rendered the literal config-key name"ECPassword"as the localized phrase"Mot de passe EC". That phrase is not a valid field in~/.aMule/amule.conf; a user following the localized error message literally would edit the wrong (or non-existent) key. This commit replaces the substring back to"ECPassword"verbatim, matching the convention used by the rest of the catalog and the Spanish translation. Marked AI-GENERATED so a French reviewer can confirm the rest of the message body.Translation conventions
Applied consistently across all four languages:
%s,%d,%i,%llu,%lu,%.1f,%u. Order can be re-arranged via positional%1\$setc. only when the source already uses positional form (none of the affected entries did).Kad,eD2k,LowID,HighID,AICH,GeoLite2,EC_TAG_FRIEND_SHARED,EC_TAG_FRIEND,EC_TAG_CLIENT,ECPassword,KADEMLIA_FIND_VALUE_MORE,Kademlia,MaxMind,Wayland,AppImage,APPDIR,systemd.Serveur :,Connecté (LowID),aMule ajouté ?); Italian/Spanish/German do not.&AICH-Infoetc.Languages not included
Hungarian, Turkish, Russian, Traditional Chinese, and all other
po/*.pofiles retain their existing state in this PR. As with #580, leaving a string untranslated (English fallback at runtime) is preferable to landing a poor AI translation that gets propagated through future copy-paste reuse. If a native speaker wants to fill those entries, they can do so in a follow-up.Validation
No source-code changes; po-only update. No
update-po.shrerun (msgids didn't change, only translations). Each .po passesmsgfmt --check --check-format --check-domainclean with all 1652 entries translated. Per-commit diffs intentionally kept focused (9 / 124 / 132 / 189 lines for it / es / fr / de) — nomsgcatwhole-file canonicalization to avoid drowning the actual translation work in 400-700 lines of cosmetic rewrap noise.