Projet

Général

Profil

Development #43082

traductions

Ajouté par Frédéric Péters il y a presque 4 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Bas
Assigné à:
Version cible:
-
Début:
19 mai 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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

Lié à Combo - Bug #45183: Traductions manquantes sur l'ajout d'une plateforme de paiementFermé16 juillet 2020

Actions
Lié à Combo - Development #48636: afficher le help_text des paramètres d'un backend de paiementFermé18 novembre 2020

Actions
Dupliqué par EOPayment - Development #10006: corrections à la gestion des traductionsFermé16 février 2016

Actions

Révisions associées

Révision 6fe18d4d (diff)
Ajouté par Frédéric Péters il y a plus de 3 ans

add support for translation when used as a django app (#43082)

Historique

#1

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é
#2

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.

#3

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

#4

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).

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.

Un plan pour qui n'en veut :
  • 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épertoire eopayment/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)

PS: penser à ajouter des N_(..) partout

#5

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.

#6

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é
#7

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.
#8

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)

#9

Mis à jour par Frédéric Péters il y a plus de 3 ans

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.

#10

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

  • Statut changé de Solution proposée à Solution validée
#11

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).

#12

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

Formats disponibles : Atom PDF