Projet

Général

Profil

Development #70584

multilinguisme

Ajouté par Frédéric Péters il y a plus d'un an. Mis à jour il y a plus d'un an.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
22 octobre 2022
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

Détails à venir.


Demandes liées

Lié à Publik - Development #70892: Multilinguisme sur les formulairesFermé31 octobre 2022

Actions

Révisions associées

Révision 925e4ceb (diff)
Ajouté par Frédéric Péters il y a plus d'un an

misc: move remaining settings from qommon.admin.settings (#70584)

Révision a62ed120 (diff)
Ajouté par Frédéric Péters il y a plus d'un an

settings: add options to enable multilinguism (#70584)

Révision 1f96cf2b (diff)
Ajouté par Frédéric Péters il y a plus d'un an

misc: get default language from settings (#70584)

Révision 89641906 (diff)
Ajouté par Frédéric Péters il y a plus d'un an

general: add translatable messages storage basis (#70584)

Révision 4f6e9d49 (diff)
Ajouté par Frédéric Péters il y a plus d'un an

backoffice: add skeleton page for i18n (#70584)

Révision 4b25f424 (diff)
Ajouté par Frédéric Péters il y a plus d'un an

i18n: add scanning for strings (#70584)

Révision 441727bb (diff)
Ajouté par Frédéric Péters il y a plus d'un an

i18n: add ui to submit/edit translations (#70584)

Révision be3acf8d (diff)
Ajouté par Frédéric Péters il y a plus d'un an

misc: delay configuring translations (#70584)

Révision 2fff42f9 (diff)
Ajouté par Frédéric Péters il y a plus d'un an

misc: load translation catalog from db (#70584)

On some initial tests bulk loading (load_as_catalog) is 5× more
efficient than the naive call to TranslatableMessage.select();
an it takes ~8ms on my local catalog of ~5000 (mostly untranslated)
strings.

Révision 18c64bea (diff)
Ajouté par Frédéric Péters il y a plus d'un an

misc: store user language when submitting a form (#70584)

Révision 08ce5e4e (diff)
Ajouté par Frédéric Péters il y a plus d'un an

misc: apply translations to forms and workflows (#70584)

Révision 43daf966 (diff)
Ajouté par Frédéric Péters il y a plus d'un an

misc: allow /lang/ prefix to force language (#70584)

Historique

#2

Mis à jour par Chloé Girard il y a plus d'un an

#3

Mis à jour par Frédéric Péters il y a plus d'un an

  • Statut changé de Nouveau à Solution proposée
  • Patch proposed changé de Non à Oui

Dans la branche wip/70584-multilinguism,

  • misc: move remaining settings from qommon.admin.settings (#70584)

L'écran /backoffice/settings/language était encore sous qommon/admin/settings.py, ça déplace juste le code vers admin/settings.py.

  • settings: add options to enable multilinguism (#70584)

Ajout à cet écran d'une case à cocher pour activer le multilinguisme, avec le choix des langues à prendre en charge. Aussi l'option "langue du site" contenait une option "selon l'entête HTTP Accept-Language", c'est désormais séparé vers une nouvelle option "langue par défaut", qui peut alors soit être la langue sélectionnée comme langue du site, soit la langue de l'entête HTTP.

  • misc: get default language from settings (#70584)

Il y a un endroit où à défaut de paramètre on mettait 'en', ici ça prend désormais plutôt la langue configurée pour le site (et là alors se fait un fallback sur 'en' si pas de langue configurée).

  • general: add translatable messages storage basis (#70584)

Introduction du stockage des chaines traduites, chaine d'origine, contexte, emplacements. + des colonnes par langue, string_fr, string_de, etc. selon ce qui est activé. (ces colonnes sont créées à la volée et jamais supprimées).

  • backoffice: add skeleton page for i18n (#70584)

Ajout d'une page /backoffice/i18n/, liée depuis la page d'accueil "studio".

En passant, je note mes hésitations et allers-retours entre "multilinguisme" et "internationalisation", je ne sais pas ce qui au final sera le plus intelligible.

  • i18n: add scanning for strings (#70584)

Enfin du code, pour parcourir tout ce qu'il y a sur le site, formulaires, workflows, etc. et ajouter tout ça dans la base de données. C'est assez proche de ce qui existe pour le scan et l'affichage des dépréciations.

À noter qu'il y a un attribut "context" pour les traductions, qui permettrait de différencier un mot utilisé dans un libellé du même mot utilisé dans un bouton mais j'ai finalement décidé ici de ne pas encore mettre ça en œuvre.

  • i18n: add ui to submit/edit translations (#70584)

Tableau pour lister les chaines à traduire, avec formulaire pour filtrer (recherche de chaine + langue), puis fenêtre pour tape la traduction.

Dans les trucs évidents qui manquent ici c'est un export/import, pour pouvoir donner un fichier à traduire à l'équipe en charge, ça sera ajouté mais je voulais d'abord faire quelques recherches pour voir s'il y avait des formats de fichier particuliers à préférer (sinon ça sera un ods).

  • misc: delay configuring translations (#70584)

La mise en place des traductions (gettext) se faisait à l'initialisation du publisher, c'est déplacé dans une méthode start_request pour faire ça au début du traitement d'une requête.

  • misc: load translation catalog from db (#70584)

Ajout à ce moment de mise en place du chargement intégral des traductions de la langue concernées. (en local sur un gros site mais une majorité de chaines pas traduites, ça prend ~8ms).

  • misc: store user language when submitting a form (#70584)

Au dépôt d'une demande ajout dans le formdata (submission_context['language']) de la langue de l'usager. (plus précisément c'est la langue utilisée par le site, avec l'idée que l'usager aura choisi celle-ci pour correspondre à la sienne).

  • misc: apply translations to forms and workflows (#70584)

Ajout et appel d'une méthode translate() à publisher, ça fait des tas de get_publisher().translate(...) mais c'est aussi un peu plus compliqué que ça, exemple de l'agent francophone qui clique sur un bouton du workflow et d'un mail envoyé à l'usager, ce mail doit être en anglais si la demande de l'usager était en anglais. Et donc pour l'envoi de mail ou de notification il y a autosplit de l'action par langue, pour que les mails/notifs dans la bonne langue soient envoyées à la bonne personne.

Ce n'est pas fait pour les SMS parce qu'on n'a pas encore de quoi distinguer le numéro de l'usager, c'est quelque chose qui arrive par un tout autre chemin, le travail de Paul sur l'authentification via ce numéro, ça pourra alors évoluer.

  • misc: allow /lang/ prefix to force language (#70584)

Plutôt qu'aller modifier son navigateur pour lui dire d'envoyer un Accept-Language qui va bien, ça introduit la possibilité de préfixe les URL, ex: /fr/categorie/demarche/.

~~

Voilà, ça fait une grosse base, les étapes à suivre derrière ça serait donc l'export/import des chaines à traduire, l'extension des traductions pour également pouvoir concerner les données saisies dans des fiches, puis des choses au-delà de w.c.s. à détailler (combo, hobo, publik-base-theme).

#4

Mis à jour par Anaïs Ecuvillon → en congés, retour le 30/04 il y a plus d'un an

Frédéric Péters a écrit :

En passant, je note mes hésitations et allers-retours entre "multilinguisme" et "internationalisation", je ne sais pas ce qui au final sera le plus intelligible.

Multilinguisme sans hésiter (ça répond à la définition de la capacité dà s'exprimer dans plusieurs langues).

#5

Mis à jour par A. Berriot il y a plus d'un an

Anaïs Ecuvillon a écrit :

Frédéric Péters a écrit :

En passant, je note mes hésitations et allers-retours entre "multilinguisme" et "internationalisation", je ne sais pas ce qui au final sera le plus intelligible.

Multilinguisme sans hésiter (ça répond à la définition de la capacité à s'exprimer dans plusieurs langues).

Ma (relative) expérience :

  • on parle d'internationalisation (i18n) pour l'ensemble des processus qui visent à rendre un site localisable
  • on parle de localisation ou de traduction (l10n) pour la partie traduction / adaptation des contenus proprements dits
  • une fois qu'on a un système internationalisé et localisé, on est effectivement multilingues. Le multilinguisme est une conséquence des étapes précédentes

Un article plutôt bien fait sur le sujet : https://crowdin.com/blog/2022/07/14/internationalization-vs-localization

#6

Mis à jour par Pierre Cros il y a plus d'un an

Yes Agate, merci.

Fred connaît bien les enjeux de la localisation et de l'internationalisation, il me les a enseignés il y a longtemps, à peu près dans les termes que tu emploies.

Son doute concerne ce que va comprendre le client et mon avis c'est qu'on peut s'en remettre à Anaïs, employer multilinguisme même si on est pas encore sur un système totalement multilingue techniquement parlant.

#7

Mis à jour par Lauréline Guérin il y a plus d'un an

Ok pour moi; mais je laisse la possibilité à un autre relecteur de poser des remarques avant de valider.

#8

Mis à jour par Lauréline Guérin il y a plus d'un an

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

Mis à jour par Frédéric Péters il y a plus d'un an

  • Statut changé de Solution validée à Résolu (à déployer)
commit 43daf96689f8a5706c3b289902dbef0acb80c321
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sun Oct 23 18:04:36 2022 +0200

    misc: allow /lang/ prefix to force language (#70584)

commit 08ce5e4ea3e28826cb8a4d6479962d84fac77340
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Oct 22 18:34:58 2022 +0200

    misc: apply translations to forms and workflows (#70584)

commit 18c64beab191e3f369096be005b97270e847913b
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sun Oct 23 08:28:40 2022 +0200

    misc: store user language when submitting a form (#70584)

commit 2fff42f981f565a20befd5019cd9adb3db1b4ea4
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Oct 22 17:02:37 2022 +0200

    misc: load translation catalog from db (#70584)

    On some initial tests bulk loading (load_as_catalog) is 5× more
    efficient than the naive call to TranslatableMessage.select();
    an it takes ~8ms on my local catalog of ~5000 (mostly untranslated)
    strings.

commit be3acf8d78bc5a394eb61dd30ed390aeca02995e
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Oct 22 17:01:23 2022 +0200

    misc: delay configuring translations (#70584)

commit 441727bb3c168f25ee3e7735ea956ff2d4706c70
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Oct 22 14:10:19 2022 +0200

    i18n: add ui to submit/edit translations (#70584)

commit 4b25f424a60c2ecf3db6640d3fcc22f7062d7742
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Oct 22 10:51:41 2022 +0200

    i18n: add scanning for strings (#70584)

commit 4f6e9d499fe686df2ff62756a83e3264045b670d
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Oct 22 09:59:56 2022 +0200

    backoffice: add skeleton page for i18n (#70584)

commit 896419069bd6195bbca0dd4199177de7a011658e
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Oct 22 09:41:52 2022 +0200

    general: add translatable messages storage basis (#70584)

commit 1f96cf2be1fe7a57170ce99d298925d67c74707b
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Oct 22 16:59:35 2022 +0200

    misc: get default language from settings (#70584)

commit a62ed120d2797221a4207422df11f8d1e5e0b44a
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Oct 22 08:51:54 2022 +0200

    settings: add options to enable multilinguism (#70584)

commit 925e4cebd5d89e818bff645721077cd02b20a37d
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Oct 22 08:31:42 2022 +0200

    misc: move remaining settings from qommon.admin.settings (#70584)
#10

Mis à jour par Transition automatique il y a plus d'un an

  • Statut changé de Résolu (à déployer) à Solution déployée
#11

Mis à jour par Transition automatique il y a plus d'un an

Automatic expiration

Formats disponibles : Atom PDF