Bonjour à tous,
Je cherche à effectuer une traduction dans un module perso qui ne fonctionne pas comme je le voudrai.
Si je fais
print $langs->trans("Civility");
print $langs->trans("Name");
J’ai bien « Civilité » et « Nom » qui s’affichent, donc mon fichier de lang est bien reconnu et utilisé.
Mais comme j’en ai une tripotée à afficher, j’ai modifié le code ainsi:
function tableau() {
print $langs->trans("Civility");
print $langs->trans("Name");
}
tableau();
Or là, j’ai une erreur Fatal error: Uncaught Error: Call to a member function trans() on null à la ligne qui utilise une traduction.
Cette méthode de traduction ne fonctionne pas dans une fonction? Y a t-il un moyen de faire?
Ou plus vraisemblablement, qu’est ce qui m’a échappé?
Merci à ceux qui pourront m’aider.
Bonjour,
Il me semble qu’il faut déclarer le fichier de traduction en début de fonction : ex. $langs->load(« NomDuFichier@NomDSuModule »);
quand une fonction est appelée, voir un fichier annexe (require ou require_once) la configuration peut suivre mais personnellement , pour éviter tous désagrément, je préfère recharger explicitement les fichiers langues.
Cordialement,
Sylvain Legrand.
Bonjour, merci de ta réponse.
J’ai tenté de faire
function tableau() {
$langs->load("mylangfile@monmodule"); <-- avec le bon fichier qui fonctionne par ailleurs, bien sûr
print $langs->trans("Civility");}
tableau();
Mais j’ai une nouvelle erreur:
Fatal error: Uncaught Error: Call to a member function load() on null
Je n’ai pas trouvé dans le code de dolibarr de fonctionnement identique duquel je pourrai m’inspirer…
Bonjour,
j’ai trouvé une solution qui fonctionne. Je la met ici pour aider le prochain (et moi éventuellement dans quelques mois…)
function tableau($langs) {
$langs->load("mylangfile@monmodule");
print $langs->trans("Civility");}
tableau($langs);
En résumé, les variables globales n’atteignent pas la fonction et sont inutilisables. Il faut donc les transférer dans celle ci ($langs, $conf, …)
A+
Bonjour
et en plancant un :
global $langs;
du type :
function tableau() {
global $langs;
}
Salut,
j’ai bien tenté, mais sans succès. Ma solution fonctionne.
c’est dans une fonction dans une classe ou pas ?
Non, juste une fonction dans une « simple » page php.
Bonjour
il faut donc dans cette page après les require etc ajouter les $langs->load("…@…"); nécessaires puis dans la fonction mettre le global je pense.
Salut,
ça ne fonctionne pas non plus
$langs->load("companies");
global $langs;
function mafonction() {
echo $langs->trans("MenuNewThirdParty");
}
mafonction();
donne l’erreur
Fatal error: Uncaught Error: Call to a member function trans() on null in /var/www/html/dolibarr-5.0.3/htdocs/mymod/debug.php:130 Stack trace: #0 /var/www/html/dolibarr-5.0.3/htdocs/mymod/debug.php(132): mafonction() #1 {main} thrown in /var/www/html/dolibarr-5.0.3/htdocs/mymod/debug.php on line 130
par contre, comme je l’indiquais, le code suivant fonctionne
function mafonction($langs) {
echo $langs->trans("MenuNewThirdParty");
}
mafonction($langs);
bonjour
et comme ça ?
$langs->load("companies");
function mafonction() {
global $langs;
echo $langs->trans("MenuNewThirdParty");
}
mafonction();
Ça fonctionne!
Bon, ça veut dire que j’avais pas pigé un truc à propos de la déclaration global…Dans mon esprit, ça exportait la portée, ça ne l’importait pas dans une fonction.
Je vais revoir ça.
Merci de t’être penché sur mon problème.