admin-backend
admin-backend copied to clipboard
Traduire l'interface contributeur
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/
Comment ?
- Traduire les templates html (https://docs.djangoproject.com/en/4.1/topics/i18n/translation/#translate-template-tag)
- Ajouter des commentaires pour aider les traducteurs
- Traduction dans le code python (https://docs.djangoproject.com/en/4.1/topics/i18n/translation/#internationalization-in-python-code)
- Refaire une passe pour lazy translation (https://docs.djangoproject.com/en/4.1/topics/i18n/translation/#lazy-translation)
- Ajouter des commentaires pour aider les traducteurs
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)?
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 :)
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
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 ?
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
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
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" ?
Concernant "sélecteur de langue : mémoriser la sélection de l'utilisateur ? avoir un réglage dans ses settings ?"
La PR est là 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