2010-08-31 5 views
1

J'ai réussi à créer des fichiers pour la localisation en utilisant Gettext (appelé es.po et es.mo).Comment changer la valeur WPLANG dans Wordpress en cliquant sur un lien (changer de langue)?

Pour autant que je sais que je peux changer la langue en définissant la valeur de WPLANG dans wp-config.php (dans ce cas définis ('WPLANG', 'es');)

Je voudrais que l'utilisateur change sa langue préférée en cliquant sur un lien.

Quelle est la meilleure façon de faire cela?

Répondre

3

J'ai accompli ceci en me basant sur le plugin jLanguage trouvé au http://www.treutech.com/files/wordpress/jLanguage.zip. * Le plugin n'est plus disponible sur le site de l'auteur, donc j'héberge ma version mise à jour. Cela vous permet de mettre en forme vos articles et pages de blog en utilisant la syntaxe [english][/english]. Il passe une chaîne de requête au code pour savoir quelle langue utiliser. J'ai commencé par modifier le code afin qu'il utilise les codes de langue standard à deux lettres. J'ai également supprimé les drapeaux que le code utilisé pour représenter les différentes langues. Cependant, après tout cela, le plugin ne fait que traduire les pages ou les messages. Je voulais que le reste du site soit traduit en fonction du choix de l'utilisateur.

WordPress permet l'internationalisation; Cependant, une fois que vous choisissez une langue vous êtes coincé avec elle jusqu'à ce que vous le changiez manuellement. J'ai donc créé wp-lang.php. Il regarde d'abord quelle langue l'utilisateur a choisi parmi les liens de langue disponibles, il stocke ensuite cela dans une variable SESSION afin que l'état soit persistant. Enfin, si aucun choix n'a été fait et qu'il n'y a pas de variable SESSION, le code examinera les langues par défaut du navigateur.

Maintenant, tous ces changements dépendent de si vous avez téléchargé un paquet de langue qui correspond aux choix de langues sur le site. Le fichier de langue MO contient des traductions de tous les noms de fonctions dans WordPress. Donc, si l'utilisateur se connecte au panneau d'administration, tout sera traduit. Si votre thème est correctement codé, vos en-têtes de menu et vos méta-informations seront également traduites. Après tout cela, j'ai modifié le fichier wp-config pour inclure wp-lang. Le site sur lequel il est configuré basculera entre l'espagnol et l'anglais.

* wp-lang.php

session_start(); 
if (isset($_GET['lang'])) { 
    $_SESSION['WPLANG'] = $_GET['lang']; 
    define ('WPLANG', $_SESSION[WPLANG]); 
} else { 
    if(isset($_SESSION['WPLANG'])) { 
     define ('WPLANG', $_SESSION['WPLANG']); 
     $_GET['lang'] = $_SESSION['WPLANG']; 
    } else { 
     if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) { 
      $languages = strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]); 
      $languages = explode(",", $languages); 
      $_SESSION['WPLANG'] = $languages[0]; 
      $_SESSION['WPLANG'] = str_replace("-", "_", $_SESSION['WPLANG']); 
      $_GET['lang'] = substr($_SESSION['WPLANG'],0,2); 
      define ('WPLANG', $_SESSION[WPLANG]); 
     } else { 
      define ('WPLANG', ''); 
     } 
    } 
} 

* wp-config.php - Trouvez la section où est définie la WPLANG constante. Ajouter dans la ligne suivante juste avant la déclaration WPLANG.

require_once(dirname(__FILE__).'/wp-lang.php'); 
define ('WPLANG', ''); 

Cette page vérifie d'abord la langue par défaut du navigateur, puis définit la langue. Si ce n'est pas le cas, l'utilisateur peut également définir la langue en fonction de celle qu'il choisit parmi les publications. La langue est définie dans une variable de session pour conserver l'état pendant toute la visite.

+0

Hey qui était une mise en œuvre très agréable, mais alors comment devrais-je écrire les liens d'ancrage pour l'utilisateur de changer la langue? Quelque chose comme ça? ESPAÑOL alexchenco

+0

Oui. La première partie de wp_lang.php prend $ _GET ['lang'] du lien et définit la variable seesion, puis définit la constante WP_LANG pour WordPress. –

2

Mes 2 cents: Je fais une chose similaire, mais je supprime également le paramètre ?lang=XX de l'URL.

Après tous les travaux sur la détection de la langue est fait, je fais la 307-redirection dans le code, à la même URL (avec ?lang=xxx ou &lan=xxx retiré de celui-ci), puis die(). Cela rend l'URL propre à la variable GET, propre et potentiellement sans danger pour les signets.

Aussi je stocke la préférence de langue dans un cookie, pour permettre à l'utilisateur de voir la même langue lors de sa prochaine visite.

0

Ma meilleure solution était ... (session_start(); sur le dessus)

if(!isset($_GET['lang']) && isset($_SESSION['WPLANG'])) { 
     define ('WPLANG', $_SESSION['WPLANG']); 
} else { 

    if (!isset($_GET['lang'])) { 
     if (isset($_SERVER["HTTP_ACCEPT_LANGUAGE"])) { 
     $languages = strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]); 
     $languages = explode(",", $languages); 
     $wplang = str_replace("-", "_", $languages[0]); 
     $_GET['lang'] = substr($wplang,0,2); 
     } 
    } 

    $language = isset($_GET['lang']) ? htmlspecialchars($_GET['lang'], ENT_QUOTES) : 'es'; 
    switch ($language) { 
     case 'en': 
      define('WPLANG', 'en_US'); 
      $_SESSION['WPLANG'] = 'en_US'; 
     break; 

     case 'es': 
     default: 
      define('WPLANG', 'es_ES'); 
      $_SESSION['WPLANG'] = 'es_ES'; 
    } 

} 
Questions connexes