Erreur avec le code multilingue

Signaler
Messages postés
9
Date d'inscription
mardi 2 septembre 2008
Statut
Membre
Dernière intervention
5 septembre 2008
-
Messages postés
9
Date d'inscription
mardi 2 septembre 2008
Statut
Membre
Dernière intervention
5 septembre 2008
-
Bonjour,

Je voudrais offrir l'option à mes visiteurs de choisir la langue de leur choix, en cliquant sur un drapeau. J'ai deux fichiers de langues, lang_fra.php et lang_eng.php que j'ai sauvegardés dans le répertoire /lang.

J'ai utilisé le code suivant dans mon index.php:
if(!empty($_COOKIE[lang]))$lang= $_COOKIE[lang];
if(!empty($_GET[lang]))$lang=$_GET[lang];
if(!empty($lang) && ($lang==eng || $lang==fra )){
  include(/lang/lang_.$lang..php);
  setcookie(lang,$lang,time()+3600*25*365);
}else include(/lang/lang_eng.php);


Et le code suivant pour les drapeaux:



Et pour chaque mot qui doit être traduit, j'ai la variable $lang comme marqueur, ex.: $lang['index']['welcome']

Mais quand on clique sur un drapeau, je reçois le message d'erreur suivant : Fatal error : Cannot use string offset as an array in /home/ochadoca/public_html/store/test/lang/lang_fra.php on line 19

C'est à cette ligne que débute ma traduction
$lang['index']['welcome']     = 'Bienvenue';


Je ne comprends pas le message d'erreur et je ne sais plus trop où donner de la tête... Est-ce que quelqu'un aurait une idée du problème et comment le solutionner?

ochado

18 réponses

Messages postés
116
Date d'inscription
lundi 29 juillet 2002
Statut
Membre
Dernière intervention
19 janvier 2009

Salut,

Il manque des guillemets un peu partout.

++
Messages postés
9
Date d'inscription
mardi 2 septembre 2008
Statut
Membre
Dernière intervention
5 septembre 2008

Merci,

j'ai ajouté des guillemets pour les includes comme suivant:

include('lang/lang_'.$lang.'.php');
else include('lang/lang_eng.php');

Mais j'ai toujours le même message d'erreur...
Messages postés
116
Date d'inscription
lundi 29 juillet 2002
Statut
Membre
Dernière intervention
19 janvier 2009

Salut,

Il faut en mettre aussi dans les variables du style $_GET['Quelquechose'].

Essaye ceci :

if((isset($_COOKIE['lang']) || isset($_GET['lang']) && (($lang == "eng") || ($lang = "fra"))){
    include('/lang/lang_'.$lang.'.php');
    /* Cookie valable un an */
    setcookie('lang', $lang, time()+31536000);
}
else{
    include('/lang/lang_eng.php');
}
Messages postés
116
Date d'inscription
lundi 29 juillet 2002
Statut
Membre
Dernière intervention
19 janvier 2009

De plus, $lang est un string (chaîne de caractères) et non un array (un tableau), alors il n'est pas possible d'utiliser la méthode : $lang['clé']['valeur'].

Pour vérifier : print_r($lang);

Si c'est pas la même variable, nomme les différemment, là cela me parait assez confus.
Messages postés
9
Date d'inscription
mardi 2 septembre 2008
Statut
Membre
Dernière intervention
5 septembre 2008

Merci Aaron

J'ai ajouté le code et effectivement, le problème semble être dû au fait que $lang est utilisé comme un array dans mon fichier de langue mais que le code pour appeler le choix est un string... Alors j'ai codé comme ça au lieu :

if(isset($_COOKIE['text']) || isset($_GET['text']) && (($text == "eng") || ($text= "fra"))){
    include('lang_'.$text.'.php');
    /* Cookie valable un an */
    setcookie('lang', $text, time()+31536000);
}
else{
    include('lang_eng.php');
}

Mais le fouilli que ça a généré! Ouh là! Je vois ma page maintenant mais tous les array sont sorti de leurs gonds et apparaissent aussi sur la page. Je ne crois pas être sur la bonne voie là
Messages postés
103
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
26 décembre 2009
1
Salut,

Dans ton if, je vois plein d'anomalie :
tu as $text "fra" au lieu de =
Attenttion il manque aussi une parenthèse à la fin de isset($_GET['text'])

Mais je pense qu'il n'y pas que ça, il faudrait le code complet, soit tu le postes, soit tu me l'envoi en message privé.

A++ extraman1
Messages postés
116
Date d'inscription
lundi 29 juillet 2002
Statut
Membre
Dernière intervention
19 janvier 2009

Salut!

Désolé pour les petites erreurs de syntaxe, j'étais un peu fatigué!

/ Oui, il faut que nous voyions le code complet parce qu'il y'a surment d'autres erreurs.
Messages postés
9
Date d'inscription
mardi 2 septembre 2008
Statut
Membre
Dernière intervention
5 septembre 2008

Salut!

Pas de problème, je connais ça aussi les nuits blanches

Je veux bien vous poster tout le code mais ça va être vraiment long (c'est une boutique électronique)... Pour l'instant, j'ai fait les corrections et plus d'erreurs! Je sauterais de joie mais il y a un hic (bien sûr), quand je clique sur les drapeaux, il ne se passe rien. Je ne crois pas que le fichier de langue est appelé. J'ai remis "lang" au lieu de "text" (sait-on jamais) mais c'est le statu quo; rien ne se passe.

Je pense bien qu'Aaron avait raison à propos des arrays. Je n'ai plus le message d'erreur mais le programme semble bloquer quelque part.
Et vraiment, je n'en peux plus de Google Translate (il me traduit essence naturelle par gazoline naturel!! Ah oui, le thé aux pêches est devenu du thé aux poissons... et j'en passe...)

En ce moment c'est les fichiers suivant que j'utilise :
<li>index.php</li><li>main_index.html (index.php redirige à ce fichier qui fait parti d'un modèle)
</li><li>table_languages.html (appelé dans main_index.html comme $table[languages])</li><li>lang_fra.php</li><li>lang_eng.php
</li>
index.php

if((isset($_COOKIE['lang']) || isset($_GET['lang'])) && (($lang= = "eng") || ($lang== "fra"))){
    include('lang_'.$lang.'.php');

    setcookie('lang', $lang, time()+31536000);
}
else{
    include('lang_eng.php');
}

lang_fra.php (quelques lignes)

//--Miscellaneous--//
$lang['index']['welcome']    = 'Bienvenue';

//--Header Navigation--//
$lang['index']['home']        = 'Accueil';
$lang['index']['catalog']    = 'Catalogue';
$lang['index']['myaccount']    = 'Mon compte';
$lang['index']['viewcart']    = 'Voir panier';
$lang['index']['logout']    = 'Fermer la session';

lang_eng.php (quelques lignes)

//--Miscellaneous--//
$lang['index']['welcome']    = 'Welcome';

//--Header Navigation--//
$lang['index']['home']        = 'Home';
$lang['index']['catalog']    = 'Catalog';
$lang['index']['myaccount']    = 'My Account';
$lang['index']['viewcart']    = 'View Cart';
$lang['index']['logout']    = 'Logout';

table_languages.html

Langue - test

[$settings[shopurl]index.php $lang[home]]&nbsp;
        [$settings[shopurl]index.php?l=account $lang[myaccount]]&nbsp;
        [$settings[shopurl]index.php?l=cart_view $lang[viewcart]]
  

J'espère que c'est plus clair! Il y a aussi un global.php mais je ne sais pas s'il est vraiment pertinent ici?

Merci beaucoup pour l'aide que vous m'apportez!!
Messages postés
103
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
26 décembre 2009
1
Salut,

Ok essayons, peux-tu changer tous tes $lang des fichiers lang_fra.php et lang_eng.php en $langue.
Ensuite dans ton main_index.html change comme ceci:

   

       
        [$settings[shopurl]index.php $langue['index']['home']]&nbsp;
        [$settings[shopurl]index.php?l=account $langue['index']['myaccount']]&nbsp;
        [$settings[shopurl]index.php?l=cart_view $langue['index']['viewcart']]
  

A++ extraman1
Messages postés
9
Date d'inscription
mardi 2 septembre 2008
Statut
Membre
Dernière intervention
5 septembre 2008

Salut extraman1,

J'ai fait ces changements mais c'est toute ma barre de navigation qui a disparue, en français comme en anglais...oops!

a+

ochado
Messages postés
103
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
26 décembre 2009
1
Re,

Est-ce que le site tourne sur le web, si oui pourrais-tu envoyer l'adresse?

Peux-tu m'envoyer toute ta source en PV? J'y regarderai minutieusement, car là je vois pas trop comment c'est imbriqué

A++ extraman1
Messages postés
9
Date d'inscription
mardi 2 septembre 2008
Statut
Membre
Dernière intervention
5 septembre 2008

Oui, tu peux voir le site ici : http://www.ochado.ca/store/test/

Euh, qu'entends-tu par "PV"?

Merci,

ochado
Messages postés
103
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
26 décembre 2009
1
Re,

Message privé, par l'intermédiaire du site tu peux en envoyer.

A++
Messages postés
103
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
26 décembre 2009
1
Salut,

Je ne savais pas que tu utilisais les templates, c'est pour ça que quand je t'ai dit de mettre langue, tu n'avais plus rien.

Donc tu peux remettre $lang dans lang_fr et lang_en, dans ton html aussi.

Par contre dans ton html, essaye de mettre des guillemets dans tes tableaux ex: $lang['home']

Déjà on verra s'il y a du mieux.

extraman1 le grand
Messages postés
9
Date d'inscription
mardi 2 septembre 2008
Statut
Membre
Dernière intervention
5 septembre 2008

Bonjour extraman1

Ah oui, j'aurais dû parler des templates...Désolée!

J'ai remis les variables à $lang et le menu est revenu. Par contre, les guillemets simple ou double me donne un message d'erreur de "parsing". Il aime pas, quoi...

Je me demande... le template utilise par défaut le lang_fra.php, fichier qu'il est stocké dans une base de données. Est-ce que cela aurait un impact?

Merci bien,

ochado
Messages postés
103
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
26 décembre 2009
1
Salut,

Fichier stocké dans la BD?

extraman1
Messages postés
9
Date d'inscription
mardi 2 septembre 2008
Statut
Membre
Dernière intervention
5 septembre 2008

Oui, c'est que j'ai une table, "settings", dans laquelle y est indiqué le fichier de langue employé pour le template, soit dans le cas présent lang_fra.php. Je peux mettre le fichier lang_eng.php mais je reviens au même problème qu'avant, c'est à dire que mes visiteurs ne pourront pas choisir la langue et ils auront soit le français ou soit l'anglais uniquement. J'espérais pouvoir mettre ce choix dans une variable pour une session mais là je me demande si les deux sont en conflit...

ochado
Messages postés
9
Date d'inscription
mardi 2 septembre 2008
Statut
Membre
Dernière intervention
5 septembre 2008

Bon, j'ai regardé de plus près mais je n'arrive pas à trouver le code qui appelle le fichier de langue dans la base de données... si je pouvais trouver ça, je pourrais ajuster le code pour qu'il change au fichier anglais... je poursuis mes recherches... Il y a aussi le global.php que je n'ai pas vraiment regardé.