Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Organiser l'internationalisation #117

Closed
2 tasks
slafayIGN opened this issue Oct 12, 2023 · 3 comments
Closed
2 tasks

Organiser l'internationalisation #117

slafayIGN opened this issue Oct 12, 2023 · 3 comments
Assignees
Labels
enhancement Nouvelle fonctionnalité ou amélioration

Comments

@slafayIGN
Copy link
Contributor

slafayIGN commented Oct 12, 2023

A moyen terme, cartes.gouv.fr aura besoin qu'une partie de ses interfaces soient traduite dans d'autres langues pour des partenaires non francophones.

Il s'agit en amont de trouver un mécanisme de gestion de l'internationalisation qui rend la gestion des chaines internationalisées plus facile que l'existant.

L'existant c'est un seul fichier (par langue) contenant toutes les chaines de l'application : https://github.com/IGNF/cartes.gouv.fr/blob/main/translations/cartesgouvfr.fr.yml
Ce fichier est nécessaire pour les chaines à traduire côté serveur (messages de retour) mais il est également utilisé côté client par l'intermédiaire du package php willdurand/js-translation-bundle.

Il peut devenir facilement très volumineux et difficile à maintenir. L'expérience sur d'autres projets montre que les fichiers par langue peuvent rapidement devenir incohérents entre eux (au minimum au niveau de l'ordre des éléments) et que les clés inutilisées ne sont pas facilement identifiables (on oublie en général de les supprimer). L'arborescence des clés ne correspond parfois plus à la structure de l'application.

react-dsfr internationalise chaque composant indépendamment. Chaque composant contient les chaines nécessaires. L'inconvénient est la dispersion des chaines à traduire (ce qui rend complexe la traduction par un tiers non développeur) et une multiplication des doublons si certaines chaines sont utilisées dans plusieurs composants, mais l'avantage est une complexité moindre des clés et une proximité des chaines avec leur utilisation (même fichier).


  • Trouver un système d'internationalisation qui satisfait toute l'équipe : simple d'utilisation, avec un fallback sur une langue par défaut quand la chaine manque dans la langue souhaitée, qui permet d'identifier facilement les chaines inutilisées et les chaines manquantes...
  • s'astreindre à ne plus mettre de chaîne "en dur" dans le code, tout devrait passer par le système d'i18n.
  • Placer le sélecteur de langue (reporté à un moment ou suffisamment de contenus multilingues seront disponibles - échéance prévisionnelle mi-2024)
@slafayIGN
Copy link
Contributor Author

Sans le sélecteur de langue, le changement se fait en ajoutant à l'URL : ?lang=en pour passer en anglais ou ?lang=fr pour repasser en français.

Cette manipulation n'est à faire qu'une seule fois, le changement de langue étant enregistré dans le stockage local du navigateur il s'applique pour toutes les pages et visites suivant le changement.

@slafayIGN slafayIGN added the enhancement Nouvelle fonctionnalité ou amélioration label Oct 24, 2023
@AlexandreJaqua
Copy link

Très peu de contenu disponible en anglais à l'heure actuelle, mais en tout cas le ?lang=en permet bien d'afficher ces contenus et possède bien une rémanence en changeant de page.

Recette à poursuivre quand plus de contenu sera disponible, en particulier quand ce changement de langue sera disponible via un bouton/menu.

@slafayIGN
Copy link
Contributor Author

Le système en place est fonctionnel même si pas encore généralisé à tous les composants.

Peu de traductions en anglais sont disponibles, ce qui justifie de ne pas encore proposer le bouton de changement de langue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Nouvelle fonctionnalité ou amélioration
Projects
None yet
Development

No branches or pull requests

3 participants