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.

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.

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