[Résolu] PHP ne veut plus traduire sous Apache2
Publié : ven. 21 juin 2024, 02:04
On s'intéressera ici à la traduction automatique quand on fait un programme PHP.
L'idée générale quand on développe dans un langage est d'englober un texte à traduire dans une fonction raccourcie, de type _('Mon texte') qui est par défaut l'équivalent raccourci de la fonction gettext('Mon texte').
Ainsi un
devient un
Il faut ensuite indiquer à PHP les locales de base
et se taper quelques fonctions pour charger les fichiers de traduction, en ne se trompant par de dossier de base (où PHP doit chercher les fichiers de traduction) quand on fixe la variable $path dans la fonction suivante :
et tant qu'on y est, autant surcharger tout de suite la fonction _('') pour créer plus tard des modules indépendants en utilisant les espaces de nommage (ou namespace) pour éviter les conflits de code :
Bref, et pour résumé, ces petites manières de faire permettent d'internationaliser tout de suite son code source au moindre effort, en utilisant poedit ou tout autre équivalent pour générer des fichiers .po et .mo de traduction.
PROBLEME CONSTATE :
En mode console, PHP me trouvait bien les traduction et les appliquait, via.
Mais sous APACHE, mission impossible ! A chaque fois il snobait mes fichiers de traduction, sans erreur dans les journaux ni avertissement !
Jusqu'au moment où, au bout de plusieurs heures de recherche et de test, j'ai juste viré php8.3-fpm et php-fpm !
Et c'était bien ces deux foutus paquets qui "bloquaient" !
En espérant que ça pourra servir à d'autres pour leur éviter de perdre des heures...
L'idée générale quand on développe dans un langage est d'englober un texte à traduire dans une fonction raccourcie, de type _('Mon texte') qui est par défaut l'équivalent raccourci de la fonction gettext('Mon texte').
Ainsi un
Code : Tout sélectionner
printf('<p>%s</p>','Bonjour monde !');Code : Tout sélectionner
printf('<p>%s</p>',_('Bonjour monde !'));Code : Tout sélectionner
setlocale(LC_ALL,'fr_FR.UTF-8');
setlocale(LC_TIME,'fr_FR.UTF-8');
setlocale(LC_CTYPE,'fr_FR.UTF-8');
date_default_timezone_set('Europe/Paris');Code : Tout sélectionner
bindtextdomain(__NAMESPACE__, $path);
textdomain(__NAMESPACE__);
bind_textdomain_codeset(__NAMESPACE__, 'UTF-8');Code : Tout sélectionner
function _ (string $mess) : string {
return dgettext(__NAMESPACE__, $mess);
}PROBLEME CONSTATE :
En mode console, PHP me trouvait bien les traduction et les appliquait, via
Code : Tout sélectionner
php -f monscript.phpMais sous APACHE, mission impossible ! A chaque fois il snobait mes fichiers de traduction, sans erreur dans les journaux ni avertissement !
Jusqu'au moment où, au bout de plusieurs heures de recherche et de test, j'ai juste viré php8.3-fpm et php-fpm !
Et c'était bien ces deux foutus paquets qui "bloquaient" !
En espérant que ça pourra servir à d'autres pour leur éviter de perdre des heures...