Résolu-Erreur avec la traduction dans une fonction

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… :confused:

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 :happy:
et comme ça ?

$langs->load("companies");

function mafonction() {
global $langs;
    echo $langs->trans("MenuNewThirdParty");
}
mafonction();

Ça fonctionne! :woohoo:
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. :wink:

de rien :wink:
au plaisir