Skip to content

po: AI-assisted app-string translation gap-fill for it/fr/de/es - #582

Merged
mrjimenez merged 5 commits into
amule-project:masterfrom
got3nks:fix/app-translations-ai
May 11, 2026
Merged

po: AI-assisted app-string translation gap-fill for it/fr/de/es#582
mrjimenez merged 5 commits into
amule-project:masterfrom
got3nks:fix/app-translations-ai

Conversation

@got3nks

@got3nks got3nks commented May 11, 2026

Copy link
Copy Markdown
Contributor

Companion to #580 (which did the manpage catalogs). Fills the remaining untranslated and fuzzy entries in po/$lang.po for Italian, French, German, and Spanish.

Scope per language

Lang Empty msgstr filled Fuzzy entries handled AI-marked translations Pure unfuzzy (existing kept)
it 2 2 4 0
es 22 30 43 9
fr 22 30 44 8
de 26 49 66 9

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 %s placeholders 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 to GeoIP.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 bare Connected, Server: vs Server 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/s was translated as %.1f kB/s), Only to Logfile rendered as &Oeffne diese Datei, and the Copy eD2k link menu 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:

grep -B 0 -A 8 "AI-GENERATED" po/\$lang.po

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 #, fuzzy flag 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:

  • printf-style format specifiers preserved verbatim: %s, %d, %i, %llu, %lu, %.1f, %u. Order can be re-arranged via positional %1\$s etc. only when the source already uses positional form (none of the affected entries did).
  • aMule-specific terminology preserved verbatim: 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.
  • Per-language typographical convention: French uses thin-space-before-colon/question-mark style (Serveur : , Connecté (LowID), aMule ajouté ?); Italian/Spanish/German do not.
  • Hotkey ampersands preserved: &AICH-Info etc.

Languages not included

Hungarian, Turkish, Russian, Traditional Chinese, and all other po/*.po files 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.sh rerun (msgids didn't change, only translations). Each .po passes msgfmt --check --check-format --check-domain clean with all 1652 entries translated. Per-commit diffs intentionally kept focused (9 / 124 / 132 / 189 lines for it / es / fr / de) — no msgcat whole-file canonicalization to avoid drowning the actual translation work in 400-700 lines of cosmetic rewrap noise.

got3nks added 4 commits May 11, 2026 14:56
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.
@mrjimenez

Copy link
Copy Markdown
Contributor

When do you consider it would be the proper time to run update-po.sh?

@got3nks

got3nks commented May 11, 2026

Copy link
Copy Markdown
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 msgmerge rewrap / re-ordering noise across the other ~17 untouched languages.

@mrjimenez
mrjimenez merged commit a96ad87 into amule-project:master May 11, 2026
12 checks passed
@got3nks
got3nks deleted the fix/app-translations-ai branch May 12, 2026 08:15
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.
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.

2 participants