[RESOLU] fichier langue et paramètre URL

danielsandanielsan Member
décembre 2012 modifié dans Entraide
Bonjour à vous,


est-il possible de charger un fichier langue différent selon un paramètre passé dans l'url ?


Je viens de traduire les fichiers langues des thèmes et plugins d'un site,
j'aimerai qu'en fonction d'un paramètre passé dans l'URL du style:
http://monsite.fr/index.php?article1/bienvenue&lang=es
cela charge le fichier langue ES du thème au lieu de celui paramétré dans l'admin ?


Comment s'en sortir ? Je n'arrive pas à trouver l'endroit ou ce fichier est chargé.
J'ai bien trouvé la fonction loadLang mais pas pour le thème.


Merci pour tout.
«1

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut

    tu peux jouer sur la parametre default_lang du tableau aConf de plxMotor

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • je viens d'ailleurs de me rendre compte d'un truc:
    1/ je n'ai plus de textarea en admin si j'utilise une langue différente du FR (plugin CKEditor activé, si je le désactive ça fonctionne)
    2/ il n'y a pas de distinction entre les fichiers langues d'un plugin frontend/backend
  • Stéphane a écrit:
    tu peux jouer sur la parametre default_lang du tableau aConf de plxMotor
    à quel moment je fais la manip' ? en haut du template ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    danielsan a écrit:
    je viens d'ailleurs de me rendre compte d'un truc:
    1/ je n'ai plus de textarea en admin si j'utilise une langue différente du FR (plugin CKEditor activé, si je le désactive ça fonctionne)
    2/ il n'y a pas de distinction entre les fichiers langues d'un plugin frontend/backend

    Y a un bug dans la gestion des langues dans l'admin qui est corrigé et sera dispo avec la 5.1.7

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • StéphaneStéphane Member, Former PluXml Project Manager
    danielsan a écrit:
    Stéphane a écrit:
    tu peux jouer sur la parametre default_lang du tableau aConf de plxMotor
    à quel moment je fais la manip' ? en haut du template ?

    essaye en changeant la valeur dans le hook plxMotorConstruct
    ça peut ne pas fonctionner si tu rentres dans le cas du bug dont je parle dans mon post précédent.
    avec la 5.1.7 tu disposeras d'un nouveau hook (plxMotorConstructLoadPlugins) situé juste apres le chargement des plugins dans plxMotor. ça donnera beaucoup de souplesse pour intervenir avant que les articles, pages, catégories etc soient chargés

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • ok merci Stéphane, je teste ça ce soir.
    J'espère que je ne vais pas encore avoir le problème de la fonction UrlRewrite avec le passage de paramètre ... il faut que je lui donne quelle allure ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    la valeur de la variable default_lang doit contenir l'équivalent aux noms d'un dossier de core/lang: fr, en, it, pl, etc...

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • danielsandanielsan Member
    novembre 2012 modifié
    et peut-on imaginer cette procédure en natif ou une autre est en réflexion ?
    Car tout est prévu, sauf le passage d'une version à l'autre par le visiteur.
  • StéphaneStéphane Member, Former PluXml Project Manager
    quand tu vas dans l'admin, parametres > configuration de base, le paramètre "Langue par défaut du site" permet de choisir la langue à utiliser en frontend

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • vi ça je sais, mais c'est juste la méthode avec le passage de paramètre que je voulais savoir si c'était prévu.
    Bon, il est vrai que je suis dans un cas particulier avec ma base de contact:
    j'ai juste le nom des champs à traduire, le contenu de la base est identique quelque soit la langue.
  • StéphaneStéphane Member, Former PluXml Project Manager
    non rien de prévu

    Consultant PluXml

    Ancien responsable du projet (2010 à 2018)

  • okay
  • re,

    alors dans un plugin, j'ai placé ça:
    <?php
    class jumpLang extends plxPlugin {
    
    		public function __construct($default_lang) {
    			parent::__construct($default_lang);
    			
    			$this->setConfigProfil(PROFIL_ADMIN);
    
    			$this->addHook('plxMotorConstruct', 'plxMotorConstruct');
    		}
    
    
    		public function plxMotorConstruct() { // change le parametre default_lang du tableau aConf de plxMotor
    
    			$string  = "if(isset(\$this->aConf['default_lang'])) {";
    			$string .= "	\$this->aConf['default_lang']='es';";
    			$string .= "}else{}";
    			echo "<?php ".$string." ?>";
    		
    		}
    
    	}
    
    ?>
    


    déjà la langue se change :p
    la suite se corse ...
  • la suite:
    <?php
    class jumpLang extends plxPlugin {
    
    		public function __construct($default_lang) {
    			parent::__construct($default_lang);
    			
    			$this->setConfigProfil(PROFIL_ADMIN);
    
    			$this->addHook('plxMotorConstruct', 'plxMotorConstruct');
    			$this->addHook('jumpLang', 'jumpLang');
    		}
    
    
    		public function plxMotorConstruct() { // change le parametre default_lang du tableau aConf de plxMotor
    
    			$oldLang = 'fr'; // paramètrage de la langue par défaut
    			$tabLang = plxUtils::getLangs(); // récupération du tableau des langues
    			if (isset($_GET['lang']) AND !empty($_GET['lang']) ){ // récupération des données de l'URL
    				if(in_array(strip_tags($_GET['lang']), $tabLang)) { // on vérifie que le paramètre fait bien parti du tableau des langues
    					$newLang = strip_tags($_GET['lang']); // on récupère la langue passée en paramètre
    				}else{
    					$newLang=$oldLang; // on garde la langue par défaut
    				}
    			}else{
    				$newLang=$oldLang; // on garde la langue par défaut
    			}
    
    			$string  = "if(isset(\$this->aConf['default_lang'])) {";
    			$string .= "	\$this->aConf['default_lang']='".$newLang."';"; // on change la langue du thème
    			$string .= "}else{}";
    			echo "<?php ".$string." ?>";
    
    		}
    
    
    	}
    
    ?>
    
    ça à l'air de fonctionner avec l'url de ce type:
    http://mon-site.com/index.php?article1/premier-article&lang=es
    


    cependant j'ai un petit souci: par quoi puis-je remplacer
    $oldLang = 'fr'; // paramètrage de la langue par défaut
    
    vu que la langue par défaut est celle paramétrée dans l'admin et quand changeant la langue de cette manière cela revient à changer la langue par défaut ... on tourne en rond !
    du coup j'aimerai utiliser
    $plxAdmin->aConf['default_lang'];
    
    mas je ne crois pas que cela soit possible ... je me trompe ?
  • Essaie plutôt $plxMotor->aConf. Si nécessaire, charge une instance de plxMotor (mais normalement, sauf erreur, ce n'est pas nécessaire).
  • danielsandanielsan Member
    novembre 2012 modifié
    c'est quoi la vrai url de la page d'accueil ?
    http://www.mon-site.com/index.php ... et la suite ?


    Vu que je galère avec la gestion des paramètres supplémentaires et la fonction urlrewrite,
    je passe par un truc du genre:
    		public function jumpLang() {
    			$plxShow = plxShow::getInstance();
    			$urlActive = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; // récupère l'url de la page courante
    			if($urlActive!=$plxShow->plxMotor->racine){
    				$urlActive = $urlActive.'&'; // mise en forme du lien
    			}else{
    				$urlActive = $urlActive.'index.php?home&';
    			}
    			echo $urlActive;
    		?>
    
    		<ul id="jumpLang">
    			<li id="fr">
    				<a href="<?php echo $urlActive; ?>lang=fr" title="Aller &agrave; la version fran&ccedil;aise">
    					<img src="<?php echo PLX_PLUGINS ?>/jumpLang/img/fr_25x17.jpg" alt="Aller &agrave; la version fran&ccedil;aise" width="25px" height="17px">
    				</a>
    			</li>
    			<li id="es">
    				<a href="<?php echo $urlActive; ?>lang=es" title="Aller &agrave; la version espagnole">
    					<img src="<?php echo PLX_PLUGINS ?>/jumpLang/img/es_25x17.jpg" alt="Aller &agrave; la version espagnole" width="25px" height="17px">
    				</a>
    			</li>
    			<li id="en">
    				<a href="<?php echo $urlActive; ?>lang=en" title="Aller &agrave; la version anglaise">
    					<img src="<?php echo PLX_PLUGINS ?>/jumpLang/img/en_25x13.jpg" alt="Aller &agrave; la version anglaise" width="25px" height="13px">
    				</a>
    			</li>
    		</ul>
    
    		<?php
    		}
    
    il me manque à générer l'url de la page d'accueil avec le paramètre &lang=fr ... une idée ?
  • Je dirais index.php ou index.php?blog.


    Il peut y avoir des variables en get mais on n'est alors plus sur la page d'accueil. Il faudrait si possible que Stéphane valide ma réponse...
  • danielsandanielsan Member
    novembre 2012 modifié
    j'ai déjà testé /index.php?lang=es mais ça me met erreur ("Se ha detectado un error : Página no encontrada" plus exactement :p vu que le changement de langue fonctionne )
    il manque donc un truc entre index.php? et langue=es ... mais quoi ? j'ai testé home mais en vain
  • Essaie index.php?/lang=es
  • danielsandanielsan Member
    novembre 2012 modifié
    en vain, tu peux télécharger le plugin ici :
    icon_gd.png


    et l'appeler dans le thème avec
    <?php eval($plxShow->callHook('jumpLang')); ?>
    

    ça marche sur toutes les pages, sauf l'accueil :(
    j'y suis presque !
  • Je regarde ça ce soir...(pas mal l'icone)
  • merci
  • Voici ce que je te propose. A tester plus en profondeur mais je pense que ça fonctionne bien.

    A signaler que ton fichier d'aide n'est pas celui du plugin.
  • merci je regarde ça demain.
    Le plugin n'étant pas opérationnel, je ne me suis pas attelé à l'ensemble du package (juste fait plaisir avec un logo :p )
  • ok, pas pu attendre :D
    en fait ça marche ... mais qu'avec l'URLrewriting d'activé :(
    sacré bazar ce pb de paramètre supplémentaire.
    ça serait bien de trouver une solution une fois pour toute au lieu de bidouiller à chaque fois
  • Jerry WhamJerry Wham Member
    décembre 2012 modifié
    Ah oui, zut. J'ai pas fait gaffe. Vais voir ce que je peux faire.

    HS : je vois que je ne suis pas le seul à me coucher tard... :p
  • Remplace le code de la ligne 30 par :
    if(strpos(\$this->get,'lang/') !== false) {
        \$this->get = str_replace('lang/'.\$lang, '', \$this->get);
        if(\$this->aConf['urlrewriting']) {
            header('Location:'.\$this->urlRewrite().\$this->get);
            exit();	
        } else {
            if (\$this->get != '') {
                header('Location:'.\$this->urlRewrite().'index.php?'.\$this->get);
                exit();	
            } else {
               header('Location:'.\$this->urlRewrite());
               exit();
    	}
    }
    
  • oh yeah ! ça marche ! merci !


    me reste à traduire
    Version française
    dans les différentes langues de PluXml,
    faire les drapeaux correspondant,
    un fichier config' pour sélectionner les langues voulues,
    un fichier d'aide et je crois que ça sera bon.


    Merci de ton aide Jerry.
    Maintenant je peux partir quelques heures dans la forêt histoire de m'aérer la tête (j'espère ne pas me congeler quelques neurones avec ce froid :D )


    Je posterai une version compilée à mon retour
  • De rien. Couvre-toi bien. On se les pèle !!! :D
  • je peux te dire que je me suis bien pelé !
    Mais c'était mortel, comme toute balade en forêt ;)


    FILE0150.jpg


    Je me réchauffe et retourne à notre bête à plume :p
Connectez-vous ou Inscrivez-vous pour répondre.