Aller au contenu

Langues et écriture

L’interface existe en français et en arabe ; le contenu du catalogue reste en arabe. Trois surfaces, trois mécanismes, portés par un seul intergiciel :

Surface Où est la langue Défaut
Site public dans l’adresse (/ar/…, /fr/…), liens hreflang, cookie puis navigateur pour / arabe
Back-office préférence du compte, sélecteur du menu, session avant connexion français
API en-tête Accept-Language français
  1. Toute chaîne d’interface passe par __('Texte français'). Le français est la clé ; l’arabe est dans lang/ar.json. Jamais d’arabe ni de français en dur dans un gabarit.
  2. Une phrase, une clé. Les parties variables sont des paramètres nommés (:nom), jamais une concaténation de fragments.
  3. Les libellés des modèles (types, statuts, rôles…) restent en français dans les constantes ; les méthodes …Label() rendent la traduction ; les vues qui itèrent les constantes traduisent au rendu.
  4. Les réglages semés en base gardent leur libellé français, traduit à l’affichage.
  5. Un test relit le code, les constantes et les réglages : une clé sans traduction arabe, ou un chiffre arabo-indien, fait échouer la suite.

En arabe, la page entière passe en dir="rtl". Pour qu’un écran se retourne correctement :

  • n’employer que des utilitaires logiques : ms-/me- plutôt que ml-/mr-, ps-/pe-, start-/end-, text-start/text-end, rounded-s-/rounded-e-, border-s/border-e ;
  • isoler un fragment arabe dans une page française avec la classe ar (police arabe, unicode-bidi: isolate) ;
  • garder les nombres, prix et identifiants techniques en ltr-num ou dir="ltr" pour que « 1 200 DH » ne devienne jamais « DH 200 1 » ;
  • chiffres européens (0-9) partout, jamais de chiffres arabo-indiens — règle du projet.