Quitter le forum et retourner au site

[Résolu] PHP ne veut plus traduire sous Apache2

Vous avez un didactiel ou une astuce particulière concernant un logiciel, partagez votre expérience dans cette partie.
Avatar de l’utilisateur
le Manchot Masqué
Administrateur du site
Messages : 765
Inscription : lun. 26 mai 2008, 21:05
Distribution : Debian, Ubuntu
Niveau : Moitié plein !
Localisation : Guebwiller

[Résolu] PHP ne veut plus traduire sous Apache2

Message par le Manchot Masqué »

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

Code : Tout sélectionner

printf('<p>%s</p>','Bonjour monde !');
devient un

Code : Tout sélectionner

printf('<p>%s</p>',_('Bonjour monde !'));
Il faut ensuite indiquer à PHP les locales de base

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');
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 :

Code : Tout sélectionner

bindtextdomain(__NAMESPACE__, $path);
textdomain(__NAMESPACE__);
bind_textdomain_codeset(__NAMESPACE__, 'UTF-8');
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 :

Code : Tout sélectionner

function _ (string $mess) : string {
	return dgettext(__NAMESPACE__, $mess);
}
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

Code : Tout sélectionner

php -f monscript.php
.
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...
Répondre