Erreur avec le code multilingue

ochado Messages postés 9 Date d'inscription mardi 2 septembre 2008 Statut Membre Dernière intervention 5 septembre 2008 - 2 sept. 2008 à 23:45
ochado Messages postés 9 Date d'inscription mardi 2 septembre 2008 Statut Membre Dernière intervention 5 septembre 2008 - 5 sept. 2008 à 17:20
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

cs_Aaron Messages postés 116 Date d'inscription lundi 29 juillet 2002 Statut Membre Dernière intervention 19 janvier 2009
3 sept. 2008 à 00:54
Salut,

Il manque des guillemets un peu partout.

++
0
ochado Messages postés 9 Date d'inscription mardi 2 septembre 2008 Statut Membre Dernière intervention 5 septembre 2008
3 sept. 2008 à 01:17
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...
0
cs_Aaron Messages postés 116 Date d'inscription lundi 29 juillet 2002 Statut Membre Dernière intervention 19 janvier 2009
3 sept. 2008 à 02:01
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');
}
0
cs_Aaron Messages postés 116 Date d'inscription lundi 29 juillet 2002 Statut Membre Dernière intervention 19 janvier 2009
3 sept. 2008 à 02:07
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ochado Messages postés 9 Date d'inscription mardi 2 septembre 2008 Statut Membre Dernière intervention 5 septembre 2008
3 sept. 2008 à 02:43
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à
0
extraman1 Messages postés 103 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 26 décembre 2009 2
3 sept. 2008 à 10:32
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
0
cs_Aaron Messages postés 116 Date d'inscription lundi 29 juillet 2002 Statut Membre Dernière intervention 19 janvier 2009
3 sept. 2008 à 10:56
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.
0
ochado Messages postés 9 Date d'inscription mardi 2 septembre 2008 Statut Membre Dernière intervention 5 septembre 2008
3 sept. 2008 à 18:35
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!!
0
extraman1 Messages postés 103 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 26 décembre 2009 2
3 sept. 2008 à 20:20
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
0
ochado Messages postés 9 Date d'inscription mardi 2 septembre 2008 Statut Membre Dernière intervention 5 septembre 2008
3 sept. 2008 à 20:48
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
0
extraman1 Messages postés 103 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 26 décembre 2009 2
3 sept. 2008 à 21:38
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
0
ochado Messages postés 9 Date d'inscription mardi 2 septembre 2008 Statut Membre Dernière intervention 5 septembre 2008
3 sept. 2008 à 21:44
Oui, tu peux voir le site ici : http://www.ochado.ca/store/test/

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

Merci,

ochado
0
extraman1 Messages postés 103 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 26 décembre 2009 2
3 sept. 2008 à 22:21
Re,

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

A++
0
extraman1 Messages postés 103 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 26 décembre 2009 2
4 sept. 2008 à 10:08
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
0
ochado Messages postés 9 Date d'inscription mardi 2 septembre 2008 Statut Membre Dernière intervention 5 septembre 2008
4 sept. 2008 à 20:40
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
0
extraman1 Messages postés 103 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 26 décembre 2009 2
4 sept. 2008 à 20:47
Salut,

Fichier stocké dans la BD?

extraman1
0
ochado Messages postés 9 Date d'inscription mardi 2 septembre 2008 Statut Membre Dernière intervention 5 septembre 2008
4 sept. 2008 à 21:00
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
0
ochado Messages postés 9 Date d'inscription mardi 2 septembre 2008 Statut Membre Dernière intervention 5 septembre 2008
5 sept. 2008 à 17:20
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é.
0
Rejoignez-nous