Passer au contenu principal

ArtinTech Solution

A Multilingual, Right-to-Left Newspaper Reader in Laravel

Une grande partie des journaux qui veulent un e-paper publient en bengali, hindi, ourdou ou arabe. Leurs lecteurs ne devraient pas voir une barre d’outils en anglais au-dessus d’une une en bengali. Pour Inkfold 1.1, nous avons traduit tout le site de lecture en bengali, hindi et arabe, mise en page de droite à gauche comprise, tandis que la rédaction reste en anglais pour l’équipe qui la gère.

Tout le texte visible par une seule fonction

La première étape fut la moins spectaculaire : tout le texte du site public passe désormais par __() de Laravel, les pluriels par trans_choice() et les dates par translatedFormat() de Carbon, si bien que « Monday, 26 October » devient « সোমবার, 26 অক্টোবর » sans gabarits séparés. Les traductions sont de simples fichiers JSON, un par langue, avec la phrase anglaise comme clé. Ajouter le français ou l’ourdou plus tard revient à copier un fichier et à traduire les valeurs.

Choisir la langue

Un petit middleware choisit la langue de chaque requête dans cet ordre : le choix explicite du visiteur enregistré en session, la langue enregistrée sur le compte d’un lecteur connecté, l’en-tête Accept-Language du navigateur quand plusieurs langues sont proposées, et enfin la langue par défaut. Les requêtes vers la rédaction ignorent ce middleware. L’éditeur choisit dans les réglages les langues proposées.

Réglages de langue dans la rédaction Inkfold avec anglais, bengali, hindi et arabe
La rédaction choisit les langues proposées et la langue par défaut.

De droite à gauche sans retourner le journal

Chaque langue porte son sens d’écriture dans la configuration, et la mise en page l’écrit dans l’attribut dir du document. L’essentiel de l’interface suit alors tout seul. Un bloc de règles RTL dédié s’occupe du reste : les panneaux latéraux changent de bord, les flèches précédent et suivant s’inversent et la mention « suite page » de la fenêtre d’article passe de l’autre côté.

Une chose n’est volontairement pas retournée : les pages. Un journal bengali ou anglais a été imprimé de gauche à droite ; l’ordre des pages et la position des articles doivent rester tels qu’imprimés, même quand l’interface autour se lit de droite à gauche. Le conteneur des pages garde direction: ltr, et les coordonnées de chaque article cliquable restent justes.

La liseuse Inkfold avec une interface arabe de droite à gauche
Interface en arabe, pages imprimées inchangées.

Des polices seulement pour la langue active

Le bengali, le devanagari et l’arabe ont besoin de leurs propres polices. Les charger toutes pour chaque visiteur alourdirait la page pour rien : la mise en page ne demande que la police Noto de la langue active et l’ajoute à la pile typographique via des variables CSS.

Un test qui échoue si une traduction manque

Les traductions se dégradent en silence : quelqu’un ajoute un bouton et oublie les fichiers JSON. Un test parcourt désormais les gabarits du site de lecture à la recherche des textes traduisibles et échoue si un fichier de langue en oublie un. Il a révélé une surprise : une clé nommée « Pagination » était résolue, sur un système de fichiers insensible à la casse, par le fichier pagination.php de Laravel et renvoyait un tableau. Évitez les clés qui portent le nom d’un fichier de traduction.

À retenir

  • Faire passer tout le texte public par __() et ranger les traductions en JSON, avec la phrase source comme clé.
  • Déterminer la langue par la session, le compte, le navigateur puis la valeur par défaut.
  • Poser dir sur le document et écrire des règles RTL ciblées, en laissant le contenu imprimé dans son sens.
  • Charger les polices d’écritures particulières pour la seule langue active, et tester l’absence de textes manquants.

Plus tôt dans la série : la lecture hors ligne avec un service worker. Changez de langue en haut de la démo Inkfold ; le logiciel est sur Charming Theme.

Besoin d’un site Laravel ou WordPress en bengali, en arabe ou en plusieurs langues ? Parlons-en — ArtinTech Solution réalise des sites multilingues chaque semaine.

Share this article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *