Jump to content

[RESOLU] Forcer la langue par défaut ?


Recommended Posts

Bonjour

Dans le cadre d'une modification pour boutique bilingue sur deux domaines (mais avec une seule BDD, un seul back-office et une seule source pour les images) j'ai le besoin de pouvoir forcer la langue par défaut.

Pour ce faire, je dois donc "forcer" la valeur de $defaultCountry dans /config/config.inc.php

Or, quand j'essaye de la forcer directement dans ce fichier, il me dit "tentative de piratage" ou un truc du genre sur le front-office !!!

Comment faire ?

C'est le SEUL truc qui ne fonctionne pas (en fait le problème ne se pose pas pour l'internaute, mais pour les bots des moteurs qui eux, vont aller utiliser la langue par défaut...) ; je n'arrive pas dans le cas des bots à forcer la langue comme je le fais pour les internautes (là ça fonctionne bien) dans le header.php...


MERCI (c'est assez urgent - je sais, on est dimanche)


voir page 2 pour solution.

Link to comment
Share on other sites

Voici une façon simple en fonction du nom de domaine :

Code à ajouter ligne 115 du fichier classes/Tools.php

// JBX - 19/07/2009 16:13:21
if($_SERVER['HTTP_HOST'] == 'localhost') // FR
{
 $array[0] = 'EN';
}
if($_SERVER['HTTP_HOST'] == 'localhost-en') // EN
{
 $array[0] = 'FR';
}
// JBX - 19/07/2009 16:13:27



Remplacer localhost par le domaine en .fr (www.google.fr)
Remplacer localhost-en par le domaine en .com (www.google.com)

Mélanger le tout, gouter, et me dire si c'est bon :)

Link to comment
Share on other sites

UP

Euh en fait je l'avais déjà fait :)

Mais ça ne fonctionne pas exactement comme je le voulais. En fait quand un bot de moteur de recherche passe sur la boutique, si la langue par défaut dans le BO (paramétré depuis "Outils / Langues") est par ex. sur "Anglais" MÊME avec un paramétrage forcé à FR comme tu l'as fait, ça ne fonctionne pas.

Le bot indexe la version anglaise :-(

Du coup il me faut forcer la variable équivalant au choix de la langue par défaut. Ce que j'essaye de faire... Du coup je ne suis pas sûr que ce soit au bon endroit que je cherche (je veux pouvoir forcer la valeur définie dans le BO à l'endroit que je dis, au niveau de la boutique) :roll:

J'ai évidemment essayé avec un "simulateur de bot", ça fonctionne bien comme je le dis. Quand il passe sur la boutique, fut-elle forcée via ta modif en français, lui lit les infos en anglais. Si je modifie ma langue par défaut au français, il les lit en français.

CQFD



Mais bon, ça répond pas à ma demande du coup :)

Link to comment
Share on other sites


Du coup, effectivement, si le "bot" ne peut sauvegarder le cookie, la langue passe à l'Anglais...

Ce qui pose un problème pour les sites qui n'ont pas de version anglaise car, en se connectant notamment depuis l'étranger, le site affiche des pages sans texte plutôt que de proposer la langue par défaut.
Link to comment
Share on other sites

UP !

La solution :-)


Modifier la fonction suivante comme ceci dans le fichier /classes/configuration.php :

   static public function get($key, $id_lang = NULL)
   {
        if (!is_array(self::$_CONF) OR !is_array(self::$_CONF_LANG) OR !Validate::isConfigName($key))
            die(Tools::displayError());

       if ($id_lang)
       {
           if (key_exists(intval($id_lang), self::$_CONF_LANG) AND key_exists($key, self::$_CONF_LANG[intval($id_lang)]))
               return self::$_CONF_LANG[intval($id_lang)][$key];
       }
       elseif (key_exists($key, self::$_CONF))
           {
               // MODIFICATION LANGUE PAR DEFAUT POUR LES ROBOTS
               if($key=='PS_LANG_DEFAULT')
               {
                   // Variable langue => on force l'anglais
                   return '1';
               }
               else
               {
                   return self::$_CONF[$key];
               }
               // FIN DE MODIFICATION
           }

       $result = Db::getInstance()->GetRow('
       SELECT IFNULL('.($id_lang ? 'cl' : 'c').'.`value`, c.`value`) AS value
       FROM `'._DB_PREFIX_.'configuration` c
       '.($id_lang ? ('LEFT JOIN `'._DB_PREFIX_.'configuration_lang` cl ON (c.`id_configuration` = cl.`id_configuration` AND cl.`id_lang` = '.intval($id_lang).')') : '').'
       WHERE `name` = \''.pSQL($key).'\'');

       return ($result ? $result['value'] : false);
   }



En fait, je "surclasse" la valeur de la langue par défaut telle que définie dans le back-office (ici pour la partie anglophone, alors que la langue par défaut est le français). Permet d'avoir la bonne langue pour les bots de Google et compagnie quand ils passent sur le site ;-)


OUF !


Je vais voir pour faire un article complet sur les modifications à réaliser pour faire fonctionner une boutique en bilingue sur deux URL (une URL = une langue), ça pourrait intéresser du monde.

La boutique que je viens de finaliser fonctionne sur le principe suivant :
* boutique francophone : y sont stockées les images et l'accès back-office. Le français est la langue par défaut.
* boutique anglophone : modifications pour utilisation de la base de données de la version française + hotlink sur les images stockées côté français + modifications pour forcer la langue à l'anglais

Petite modif finale sur le module "blocklanguages" pour pouvoir passer d'une boutique à l'autre, et voilà ;-)

Link to comment
Share on other sites

UP

Euh en fait je l'avais déjà fait :)

Mais ça ne fonctionne pas exactement comme je le voulais. En fait quand un bot de moteur de recherche passe sur la boutique, si la langue par défaut dans le BO (paramétré depuis "Outils / Langues") est par ex. sur "Anglais" MÊME avec un paramétrage forcé à FR comme tu l'as fait, ça ne fonctionne pas.

Le bot indexe la version anglaise :-(

Du coup il me faut forcer la variable équivalant au choix de la langue par défaut. Ce que j'essaye de faire... Du coup je ne suis pas sûr que ce soit au bon endroit que je cherche (je veux pouvoir forcer la valeur définie dans le BO à l'endroit que je dis, au niveau de la boutique) :roll:

J'ai évidemment essayé avec un "simulateur de bot", ça fonctionne bien comme je le dis. Quand il passe sur la boutique, fut-elle forcée via ta modif en français, lui lit les infos en anglais. Si je modifie ma langue par défaut au français, il les lit en français.

CQFD



Mais bon, ça répond pas à ma demande du coup :)




<?php

// Conecta a la base de datos    
include(dirname(__FILE__).'/config/config.inc.php'); 
include(dirname(__FILE__).'/config/settings.inc.php'); 

// Comprueba procedencia nombre dominio
If($_SERVER['HTTP_HOST'] == "www.dominioingles.com"){
$q = "UPDATE ps_configuration p SET value=1
WHERE p.`id_configuration`=1";
$r = @mysql_query($q);
}

Elseif($_SERVER['HTTP_HOST'] == "www.dominioespanol.com"){
$q = "UPDATE ps_configuration p SET value=4
WHERE p.`id_configuration`=1";
$r = @mysql_query($q);

}
?>

Link to comment
Share on other sites

Bonjour,

Simplement pour être sur que j'ai bien compris.
La procédue que tu a utilisé est bien celle qui permet au bot de detecter les différentes pages de ton site en différentes langues. c'est à dire que le bot considere bien qu'il y a deux versions du site, l'une avec des pages francaises, l'autre avec des pages de l'autre langue?

remerciements,

Clt,

Link to comment
Share on other sites

Merci pour la reponse rapide ;)

J'ai bien des url différents selon que la page est en francais en anglais ou espagnol. Sauf que ma page d'accueil a toujours le même URL www.monsite.com/index.php peut importe la langue que je selectionne.

Donc si j'ai bien compris, il me suffit de créer des sous domaines pour .es. et .en. , puis faire les modification du fichier comme décrit par tes soins et le tour sera joué?

Deux petites dernières questions:
1/ comment faire pour que mon url de page d'accueil soit différentes pour l'espagnol et pour l'anglais une fois le petit drapeaux selectionné?
2/ Y aura t'il des conséquences sur la gestion BO ?

Merci par avance pour le soutien,

Clt

Nono

Link to comment
Share on other sites

Merci pour l'info ;)

Pense tu que cette version est stable? je ne suis pas un grand expert alors je ne vousdrais pas changer de versions et risquer de chambouler mon mode opératoir.

D'autre par, tu sousentends bien ici que je n'aurai plus ce problème de "/index.php" qui reste accroché à toutes les langues?

Clt,

Nono

Link to comment
Share on other sites

  • 9 months later...

Je relance le sujet,
je souhaite utiliser les urls de base de prestashop 1.2.5 qui dans le sitemap sont bien :


Cependant, si on change de langue en navigant et que l'on clique sur un lien, la langue ne passe plus dans l'url !!!
Comment garder simplement les urls avec la langue afin d'avoir les bon lien interne suivant la langue.
Link to comment
Share on other sites

  • 4 months later...
  • 1 month later...
  • 5 months later...

Est t'il possible de changer la langue par default sur la version 1.4.1 ?
Car dans le BO , il me donne Tj l'Anglais pour remplire les parametres et moi je désire le Francais.
Quand je desactive le UK , j'ai un message d'erreur

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, [email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


et apres plus aucun acces a la boutique ( bo et Fo) ...

Merci de votre aide

Link to comment
Share on other sites

  • 8 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...