Development #43082
traductions
0%
Description
Il y a des appels à gettext mais pas de .po créés, pas de traductions réalisées.
Voir également comment ça va pouvoir être derrière exploité par les utilisateurs, que le domaine .po soit utilisé; peut-être qu'il faut modifier get_parameters() pour prendre un paramètre lang et retourner des chaines traduites. (?)
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a presque 4 ans
- Lié à Bug #45183: Traductions manquantes sur l'ajout d'une plateforme de paiement ajouté
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
- Priorité changé de Normal à Bas
On ne sais juste pas faire pour l'instant (intégration localisation Django avec localisation LC_MESSAGE), si quelqu'un a une solution propre et jolie qu'il la pose ici.
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
- Dupliqué par Development #10006: corrections à la gestion des traductions ajouté
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
Commentaire recopié de #45183,
Je ne sais pas comment ça va marcher; Django ne change pas la locale globale (LANG) donc le un simple gettext.gettext ne marchera pas même si on installe le catalogue (et si on se met à utiliser deux APIs gettext, celle de Django qui utilise ses catalogues et celle de Python). L'autre possibilité c'est de passer explicitement la locale à une méthode get_description(lang=None) et que ça renvoie des descriptions déjà traduites (et en unicode).
Un plan pour qui n'en veut :J'ai cherché un peu la marche à suivre concernant des modules python pour les traductions mais ça suppose qu'on utilise les locales normalement pas comme Django.
- produire un fichier de traduction, s'arranger pour l'installer dans /usr/share/locale/<lang>/LC_MESSAGES/eopayment.mo (ou alors dans le code du projet comme Django, ça ne change pas grand chose), on doit pouvoir réutiliser
django-admin makemessages
en faisant un répertoireeopayment/locale/fr/LC_MESSAGES/
- ajouter un paramètre lang=None à
Payment.get_parameters()
- si lang=None, on fait rien
- sinon :
- on obtient un objet de traduction via
gettext.translation('eopayment', [localedir=os.path.join(os.path.dirname(__file__), 'locale'])
(localedir si on utilise pas le répertoire système) - on traverse parameters en traduisant toutes les clés 'caption', 'help_text' et 'choices' aver trans.gettext(message) (où trans.ugettext(message) pour py2 mais on peut aussi se dire qu'on s'en fout)
- on obtient un objet de traduction via
PS: penser à ajouter des N_(..) partout
Mis à jour par Frédéric Péters il y a plus de 3 ans
Proposition alternative pour marcher très facilement/rapidement avec combo, sans poser de problème ailleurs,
Taper dans common.py
+try: + from django.utils.translation import ugettext_lazy as _ +except ImportError: + from gettext import gettext as _ # compat avec un existant bidon, _ = lambda x: x ferait pareil.
Remplacer les from gettext import gettext as _
par des from .common import _
.
Ajouter un répertoire eopayment/locale/fr/LC_MESSAGES/. Ajouter un appel à django-admin compilemessages -l fr
dans le setup.py.
Dans combo ajouter eopayment à l'INSTALLED_APPS.
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Lié à Development #48636: afficher le help_text des paramètres d'un backend de paiement ajouté
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
Frédéric Péters a écrit :
Taper dans common.py
[...]
Ok mais ajouter en plus comme condition 'django' in sys.modules
. Sans cela on aura une trace dès que django est installé sur la machine mais n'est pas utilisé au moment où on charge eopayment (genre un test de paiement payfip_ws avec l'outil CLI intégré) :
Python 3.8.6 (default, Sep 25 2020, 09:36:53) [GCC 10.2.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sys.modules Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'sys.modules'; 'sys' is not a package >>> import django.utils.translation >>> from django.utils.translation import ugettext_lazy as _ >>> _('xxx') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3/dist-packages/django/utils/functional.py", line 123, in __repr__ return repr(self.__cast()) File "/usr/lib/python3/dist-packages/django/utils/functional.py", line 168, in __cast return self.__text_cast() File "/usr/lib/python3/dist-packages/django/utils/functional.py", line 156, in __text_cast return func(*self.__args, **self.__kw) File "/usr/lib/python3/dist-packages/django/utils/translation/__init__.py", line 79, in gettext return _trans.gettext(message) File "/usr/lib/python3/dist-packages/django/utils/translation/__init__.py", line 54, in __getattr__ if settings.USE_I18N: File "/usr/lib/python3/dist-packages/django/conf/__init__.py", line 79, in __getattr__ self._setup(name) File "/usr/lib/python3/dist-packages/django/conf/__init__.py", line 60, in _setup raise ImproperlyConfigured( django.core.exceptions.ImproperlyConfigured: Requested setting USE_I18N, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Nouveau à En cours
- Assigné à mis à Frédéric Péters
(je viens de pousser une branche de test)
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Fichier 0001-add-support-for-translation-when-used-as-a-django-ap.patch 0001-add-support-for-translation-when-used-as-a-django-ap.patch ajouté
- Statut changé de En cours à Solution proposée
- Patch proposed changé de Non à Oui
Dans la branche un second patch, avec le .po de la traduction.
Dans le patch attaché ce que je décris ci-dessus, avec la remarque de Benjamin concernant 'django' in sys.modules
, ainsi qu'un tour des différents backends de paiement pour retirer le marqueur de traduction des chaines écrites en français.
Mis à jour par Benjamin Dauvergne il y a plus de 3 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 6fe18d4d58a67327cebb1b4707225dc1b086c3c7 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Wed Nov 18 20:16:46 2020 +0100 add support for translation when used as a django app (#43082)
(en local c'était correct mais contenu du .deb produit à vérifier quand même).
Mis à jour par Frédéric Péters il y a plus de 3 ans
- Statut changé de Résolu (à déployer) à Solution déployée
add support for translation when used as a django app (#43082)