Site multilingue : captcha spécifique et menus par catégorie de langue
Francis
Member
Bonjour,
Le captcha de PluXml s'adapte à la langue par défaut du site, c'est super. Mais quand on a un site en plusieurs langues, il faut pouvoir changer la langue du captcha suivant la page affichée.
Pour le site trilingue français-chinois-anglais www.sun-translate.com, j'ai récupéré le captcha de PluXml et j'en ai fait un fichier captcha_lang.php que vous trouverez zippé ici : captcha_lang.zip.
On peut y paramétrer autant de langues que l'on veut.
Ensuite, il suffit de placer ce fichier captcha_lang.php dans le dossier du thème utilisé, et de l'inclure dans le fichier header.php avec l'instruction :
Dans la page statique qui contient le formulaire dans une langue donnée, on récupère un tableau en appelant la fonction avec le paramètre de cette langue, comme 'fr' pour le français, 'en' pour l'anglais ou 'zh' pour le chinois (zhong wen = la langue chinoise, pour info) :
On peut alors utiliser dans le formulaire la question $tab_captcha et la réponse $tab_captcha.
J'ai repris la méthode du fichier contact proposé par Stéphane : la réponse est placée dans un champ masqué, pour qu'elle soit transmise en même temps que le formulaire, ce qui permet d'effectuer la comparaison avec la réponse donnée par l'expéditeur du message.
Dans les paramètres du chinois de la fonction captcha_lang, j'ai dû indiquer que le mot à lire (2ème argument) soit en premier et que le n° de la lettre à trouver (1er argument) soit en deuxième.
Mais ne me demandez pas trop de précisions sur la traduction, si j'ai repéré deux ou trois caractères, c'était avant tout du copier-coller !
Le captcha de PluXml s'adapte à la langue par défaut du site, c'est super. Mais quand on a un site en plusieurs langues, il faut pouvoir changer la langue du captcha suivant la page affichée.
Pour le site trilingue français-chinois-anglais www.sun-translate.com, j'ai récupéré le captcha de PluXml et j'en ai fait un fichier captcha_lang.php que vous trouverez zippé ici : captcha_lang.zip.
On peut y paramétrer autant de langues que l'on veut.
Ensuite, il suffit de placer ce fichier captcha_lang.php dans le dossier du thème utilisé, et de l'inclure dans le fichier header.php avec l'instruction :
include(dirname(__FILE__) . '/captcha_lang.php');
Dans la page statique qui contient le formulaire dans une langue donnée, on récupère un tableau en appelant la fonction avec le paramètre de cette langue, comme 'fr' pour le français, 'en' pour l'anglais ou 'zh' pour le chinois (zhong wen = la langue chinoise, pour info) :
$tab_captcha = captcha_lang('fr');
On peut alors utiliser dans le formulaire la question $tab_captcha et la réponse $tab_captcha.
J'ai repris la méthode du fichier contact proposé par Stéphane : la réponse est placée dans un champ masqué, pour qu'elle soit transmise en même temps que le formulaire, ce qui permet d'effectuer la comparaison avec la réponse donnée par l'expéditeur du message.
Dans les paramètres du chinois de la fonction captcha_lang, j'ai dû indiquer que le mot à lire (2ème argument) soit en premier et que le n° de la lettre à trouver (1er argument) soit en deuxième.
Mais ne me demandez pas trop de précisions sur la traduction, si j'ai repéré deux ou trois caractères, c'était avant tout du copier-coller !
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'utilise des menus automatiques = liste de tous les articles d'une catégorie, triés par ordre croissant, pour le menu principal de chaque langue.
Ça donne 3 catégories : Menu principal-FR, Menu principal-EN (anglais) et Menu principal-ZH (ZH = zhong wen = chinois).
Il y a 3 autres catégories pour les pieds de page : Pied de page-FR, Pied de page-EN, Pied de page-ZH.
Bien que ce soit possible, il n'y pas de menu automatique dans les footers, simplement des liens en dur vers les pages "Mentions légales", "Copyrights and legal disclaimer" et "版本所有" (à vos dictionnaires !)
Les petits drapeaux du site pointent chacun vers la page d'accueil de la langue.
J'utilise 3 modèles avec la langue -xx (-fr, -en, -zh), ce qui me donne 3 fois les fichiers article-xx.php, statique-xx.php, header-xx.php, footer-xx.php et home-xx.php, mais comme il faut bien une page d'accueil du site, celle en français ne s'appelle pas home-fr.php mais home.php
Le menu automatique s'inspire en droite ligne d'un programme qui liste les articles par catégorie - fourni par Jerry Wham - que j'appelle menu-articles.php
Dans header-fr.php, le menu initialise le n° de catégorie et appelle ce programme :
Enfin, voici ma version de la liste des articles par catégories (fichier menu-articles.php) :
Donc si j'ai bien compris, l'interface d'administration est la même et il faut sélectionner 2 catégories par article en fonction de la langue choisie ("Menu principal-XX" et "Pied de page-XX") et le template de la langue choisie.
Et il faut penser à rédiger tous les articles dans toutes les langues.
Le changement de langue se fait ici "en dur", par l'appel de la page d'accueil de la langue demandée.
Les pages du site sont des articles. Les catégories sont associées aux langues, donc il suffit d'avoir un menu qui n'affiche que les articles d'une catégorie donnée pour obtenir le site dans la langue choisie.
Par contre, il ne faut utiliser qu'une seule catégorie par article (comme Menu principal-FR), car il y a un problème dans PluXml : lorsqu'un article appartient à plusieurs catégories, il n'est listé que dans une seule.
Le thème doit contenir des fichiers templates pour chaque langue (comme article-fr.php, qui appelle header-fr.php et footer-fr.php + static-fr.php pour les pages statiques).
Ecrire les pages dans la bonne langue, oui, c'est le minimum ! Lorsque d'une langue à l'autre, la structure des pages et les images sont les mêmes, il est pratique est de copier-coller le code source de la page qui est en français et de repasser en mode wysiwyg pour changer le texte.
Je ne pense pas que cela vienne de Pluxml, mais plutôt de la fonction qui affiche les catégories. Je vais rechercher la modif que j'avais faite pour la fonction et je te la poste. Si tu n'es pas convaincu, vas sur mon site (http://www.ecyseo.net) et regarde dans les catégories Pluxml et Divers : l'article sur Firefox apparait dans les 2.
A mettre dans un plugin avec plxShowLastCatList comme appel de hook. Comme il y a un return true à la fin, elle remplacera la fonction d'origine, sans modifier les fichiers source de pluxml ni faire d'appel de hook dans le thème.
Je la regarderai dès que j'aurai un peu de temps.
Le seul doute que j'ai est sur la fonction $plxShow->artCatId() qui ne renvoie qu'un seul id de catégorie, même si l'article appartient à plusieurs catégories.
J'ai créé quelques fonctions pour les listes d'articles par catégorie, en ordre chronologique croissant ou décroissant. Les voici les voilà, si ça peut être utile à quelqu'un.
Comme je préfère appeler mes menus à partir du n° de catégorie (qui reste fixe, le nom de catégorie pouvant être changé par l'utilisateur), voici une fonction pour afficher les articles :
- d'une catégorie dont l'id est fourni
- ou de plusieurs catégories dont les id sont fournis dans un tableau comme array(1,2,5), avec suppression des doublons pour les articles appartenant à plusieurs catégories
J'ai eu besoin aussi d'afficher le dernier article d'une catégorie (facile ! ) et un brin plus compliqué, la liste de tous les articles d'une catégorie sauf le dernier en date. Ça m'a servi pour un site qui gère 4 blogs, avec un menu spécial pour le dernier article de chaque, et les archives par catégorie pour tous les articles sauf le dernier. Voici ces deux fonctions :
Et puis ça peut être intéressant de donner les noms des catégories au lieu des identifiants, pour les listes d'articles. J'ai donc adapté la technique de Jerry pour obtenir d'abord l'id d'une catégorie à partir de son nom (ou un tableau d'id, à partir d'un tableau de noms de catégories) :
En utilisant les fonctions précédentes, ça devient facile d'avoir la liste des articles à partir du nom de leur catégorie (ou d'un tableau contenant plusieurs noms de catégories) : Toutes ces fonctions de liste renvoient des chaînes de caractères (listes <li...>...</li>, sans les balises <ul> autour. Il faut les utiliser avec echo pour les afficher.