Skip to content

chore(i18n): complete the French catalog — 0 fuzzy, 0 untranslated - #174

Merged
RebelliousSmile merged 3 commits into
mainfrom
chore/i18n-fr-catalog
Jul 31, 2026
Merged

chore(i18n): complete the French catalog — 0 fuzzy, 0 untranslated#174
RebelliousSmile merged 3 commits into
mainfrom
chore/i18n-fr-catalog

Conversation

@RebelliousSmile

Copy link
Copy Markdown
Owner

Contexte

make i18n-check était rouge sur 104 entrées en attente dans locale/fr : 50 marquées fuzzy, 54 vides.

Ce que fait la PR

Catalogue français — les 104 entrées sont réglées :

  • 77 traductions identité, pour les msgid déjà rédigés en français (achievements.py, settings_views.py, _composer.html, templates messaging/users). C'est la convention du catalogue : les chaînes sources sont mixtes FR/EN.
  • 27 chaînes traduites, pour les msgid anglais. Terminologie alignée sur l'existant : follower → abonné, following → abonnement, Follow/Unfollow → Suivre / Se désabonner. Like/Unlike → « Aimer / Ne plus aimer cette scène », calqué sur le couple Suivre/Se désabonner.

Un arbitrage de contenu : la traduction fuzzy héritée de la page vie privée mentionnait « citations ». Retirée — la feature Quote a été supprimée et le msgid ne dit plus que « scenes, characters ».

Le patch a été appliqué par adressage indexé des entrées (jamais de msgid retapé), donc aucun risque de corruption d'accents, ou .

Deux tests recâbléstests/activitypub/test_follow_ui.py. gettext exclut les entrées fuzzy du .mo compilé : ces libellés s'affichaient donc encore en anglais. Les traduire a basculé le rendu en français, ce qui a révélé que deux assertions négatives étaient vacuement vraies et qu'une troisième cassait. Les trois portent désormais sur le contexte de vue (is_suddenly, activity, remote_games, remote_characters) — la propriété que les tests veulent réellement établir, insensible à la formulation et à la locale.

Point d'attention — en.mo

Le .mo anglais passe de 1960 à 594 octets. Ce n'est pas une perte de traduction : le en.mo commité était désynchronisé de son propre .po, compilé par Babel depuis un état antérieur, et portait 11 pluriels absents du .po (dont %(counter)s quote). Toutes étaient des traductions identité, donc gettext retombe sur le msgid. Rendu anglais vérifié empiriquement, inchangé : 3 characters, followers, 3 scenes · readable by all.

en.po reste vide à 884/890 — dette préexistante (838/844 sur main, proportion identique), hors périmètre.

Vérification

  • locale/fr : 890 entrées, 0 fuzzy, 0 vide, msgfmt -c propre
  • Catalogue idempotent sous makemessages — c'était le vrai risque, make i18n-check régénère avant de tester
  • pytest tests/core/test_i18n.py tests/core/test_locale_formatting.py → 15/15
  • pytest tests/activitypub/test_follow_ui.py tests/offers tests/users tests/core → 199 passed
  • ruff check et ruff format --check verts

🤖 Generated with Claude Code

- Resolve the 104 pending entries of locale/fr: 77 identity translations
  for French msgids (catalog convention), 27 new French strings for
  English msgids, aligned on the existing terminology
- Drop "citations" from the privacy string: the Quote feature is gone
- Recompile both catalogs; en.mo loses 11 stale identity plurals its own
  .po no longer carried (rendering verified unchanged)
- Assert on the view context in test_follow_ui rather than on translated
  empty-state labels: fuzzy entries were excluded from the .mo, so two
  assertions were silently vacuous and one broke once translated
- Mixed FR/EN msgids: a French msgid takes an identity translation
- gettext drops fuzzy entries from the .mo, so they render as raw msgid —
  lifting a fuzzy flag changes the rendering
- Assert on view context, never on translated labels
- A versioned .mo can drift from its own .po; diff with msgunfmt first
Move the rule to 05-pytest, which is scoped to tests/; the i18n rule is
scoped to suddenly/ and templates/, so it never loads while editing tests.
@RebelliousSmile
RebelliousSmile merged commit 2372eb9 into main Jul 31, 2026
1 check passed
@RebelliousSmile
RebelliousSmile deleted the chore/i18n-fr-catalog branch July 31, 2026 17:13
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.

1 participant