admin-backend icon indicating copy to clipboard operation
admin-backend copied to clipboard

Traduire l'interface contributeur

Open raphodn opened this issue 1 year ago • 8 comments

Quoi ?

  • ajouter des traductions
  • pouvoir changer de langue (Francais ou Anglais pour l'instant)

Pourquoi ?

Permettre à des anglophones d'accéder à l'interface et contribuer

Liens utiles

  • https://phrase.com/blog/posts/quick-guide-django-i18n/
  • https://testdriven.io/blog/multiple-languages-in-django/

raphodn avatar Feb 01 '23 09:02 raphodn

Comment ?

Questions

  • Pour les translation keys, quelle convention prenons nous? Constant string ou variable (e.g. "titre de page home" ou TitreHome)
  • Quelle langue pour ces translation keys? anglais ou français
  • Si tu as fait un projet avec internationalisation avant, quel outil pour partager aux traducteurs (editer les .po)?

dq18 avatar Feb 09 '23 16:02 dq18

Merci d'avoir regardé Didier !

Je n'ai pas beaucoup d'expérience en la matière, mais idéalement avoir des msgid qui soient explicites et en anglais comme ca la traduction EN est faite par défaut ?

En terme d'outillage je ne sais pas trop, est-ce que remplir le fichier .po suffit ? j'espère :)

raphodn avatar Feb 09 '23 16:02 raphodn

J'ai fait un premier jet. Je n'aurai pas le temps de faire plus d'ici mercredi 15.

Détail:

  • Ajout des langues /en et /fr
  • dropdown dans le footer pour switcher de langue
  • Quelques html de traduits
  • Ajout de rosetta pour directement ajouter en enregistrer les traductions dans les po (et pas besoin du logiciel poedit) accessible à /rosetta (pas sûr de comment ça marche en production)

A faire:

  • redirection /fr sur la page normale (peut-être pas besoin si on passe en .org)
  • Continuer la traduction des html et des .py

dq18 avatar Feb 12 '23 21:02 dq18

Salut Didier ! merci :)

Je vais prendre la main sur la PR pour rajouter 1 ou 2 commits et merger rapidement :)

Je vais sûrement enlever Rosetta. Même si c'est lié à cette issue, je pense que ca devrait être dans une PR séparée, histoire de comprendre l'utilité et les limites (on s'en servira très certainement ! juste séparer les concerns)

  • si on fait de la traduction via l'interface de production, comment mettre à jour ensuite nos fichier .po dans le code ?
  • pourquoi Anglais est indiqué comme étant traduit à 8% alors que c'est la langue pivot ?
  • par défaut seul les admin peuvent accéder à /rosetta , comment élargir ?

raphodn avatar Feb 14 '23 13:02 raphodn

Ok pour Rosetta. Je voulais juste pouvoir montrer en démo comment traduire. Pour traduction, plusieurs possibilités:

  • Ajout direct dans les po
  • Avec un outil comme poedit ou rosetta Puis git commit.

Une fois déployé, je ne sais pas si les po sont accessible/editable sur le serveur. A voir si faisable par Rosetta ou autre.

Les msgid sont en anglais. Il y a un po pour l'anglais pas pour la traduction mais pour la correction. On peut facilement arriver à 100% juste en copiant chaque msgid pour msgtxt

dq18 avatar Feb 14 '23 13:02 dq18

gettext() vs. gettext_lazy()

  • In definitions like forms or models you should use gettext_lazy because the code of this definitions is only executed once (mostly on django's startup)
  • In views and similar function calls you can use gettext without problems, because everytime the view is called gettext will be newly executed

https://stackoverflow.com/a/4164683

raphodn avatar Feb 16 '23 17:02 raphodn

Ce qu'il reste à faire :

  • [x] traduire les fichiers README.md & CONTRIBUTING.md : https://github.com/quiz-anthropocene/admin-backend/pull/1952
  • [x] traduire le modèle Event : https://github.com/quiz-anthropocene/admin-backend/pull/1951
  • [x] traduire les modèles Contributions, Stats : https://github.com/quiz-anthropocene/admin-backend/pull/1957
  • [ ] quelques traductions restantes côté API
  • [ ] refaire une passe sur l'interface pour voir si rien n'a été oublié
  • [x] finir la traduction des tableaux : https://github.com/quiz-anthropocene/admin-backend/pull/1964
  • [ ] sélecteur de langue : le remonter dans le header ? ~~ne pas avoir à cliquer sur "Go" pour valider la sélection~~
  • [x] sélecteur de langue : proposer seulement des langues qui sont effectivement traduites (fichier .po)
  • [ ] sélecteur de langue : mémoriser la sélection de l'utilisateur ? avoir un réglage dans ses settings ?
  • [ ] traduire en Espagnol, Italien, Allemand (utiliser DeepL ?)
  • [ ] renommer "Contributeurs" en "Auteurs"
  • [x] renommer "Contributions" en "Commentaires" ?

raphodn avatar Feb 23 '23 16:02 raphodn

Concernant "sélecteur de langue : mémoriser la sélection de l'utilisateur ? avoir un réglage dans ses settings ?"

La PR est Plus possible d'ajouter des PRs dans cette issue :)

J'ai passé beaucoup de temps pour comprendre comment ça marchait, j'ai créé un custom middleware et mis à jour les views. Mais au final après pas mal de recherche, j'ai compris que Django faisait déjà tout automatiquement... set_language s'occupe de créer la variable pour la session et le cookie par défaut. SessionMiddleware va chercher la variable session et LocaleMiddleware va chercher le cookie.

Edit: il y a un souci avec le test, mais pas l'impression que ça vienne de ça

dq18 avatar Mar 27 '23 22:03 dq18