SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano

273 Plugins, 191 contribs sur SPIP-Zone, 113 visiteurs en ce moment

Accueil du site > Multilinguisme > Archives Multilinguisme > Site public dans la langue préférée du navigateur

Site public dans la langue préférée du navigateur

1er janvier 2004 – par dani – <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

Toutes les versions de cet article : [Español] [français]

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

Un squelette qui perment de présenter à ceux et celles qui visitent le site un sommaire dans leur langue de préférence, définie dans le navigateur.

Peux mieux faire...

A l’heure de modifier la présente contrib, il convient de mentionner avant tout que depuis, Laurent en a fait une bien mieux !

Non seulement elle englobe fonctionnellement les deux approches proposées sur ce site [1], mais en plus elle utilise très élégamment les fonctions déjà développées dans le code de SPIP.

Je vous suggère vivement d’essayer d’abord sa solution. Les lignes qui suivent n’ont plus qu’un intérêt pédagogique.

SPIP 1.7.2 Attention : Pour faire marcher la contrib de Laurent avec SPIP 1.7.2, il faut ajouter dans mes_fonctions.php3 :

En effet, la fonction gerer_menu_langues, qui était présente dans ecire/inc_lang.php3 dans la version 1.7, a disparu dans la 1.7.2 (sans doute parce qu’elle ne servait à rien pour SPIP lui-même)

La langue préférée dans le navigateur

Dans un navigateur, une personne peut indiquer quelles sont ses langues de prédilection, et les classer par préférence. En fonction de cela ; un serveur web pourra modifier son comportement, et en particulier sélectionner la langue dans laquelle il affiche ses pages.

Dans Mozilla, par exemple, on le fait en éditant les préférences. Dans l’image ci-dessous, je lui indique que je préfère voir un site en espagnol, version uruguayenne si elle est disponible, sinon en français, version hexagonale de préférence, et enfin en anglais.

En fait, un site web n’apparaîtra dans la langue choisie que s’il est conçu pour cela. L’information est disponible et sa mise à disposition fait partie des standards HTTP/HTML, mais encore faut-il que le serveur s’en serve.

Dans cette contrib, nous verrons comment construire un site SPIP multilingue qui utilise cette fonctionnalité : celui ou celle qui visite le site verra s’afficher automatiquement le « sommaire » dans la langue existante sur le site, qui correspond le mieux à ses préférences.

L’idée pour SPIP

Le principe que nous venons de décrire n’est intéressant et faisable que si le site que nous construisons a vocation à présenter la totalité de son information (ou presque) dans chacune des langues qu’il gère. Dans ce cas, la structure la plus courante pour organiser ce type de site multilingue est de réserver un secteur [2] à chacune des langues du site [3].

Bien qu’il existe un squelette pour le sommaire du site (sommaire.html), la manière la plus logique de construire celui-ci pour chacune des langues sera sans doute avec la page de rubrique du secteur correspondant.

L’idée est d’utiliser le squelette sommaire.html pour détecter les langues de prédilection dans le navigateur et d’y effectuer la redirection correspondante.

Les fonctions PHP utilisées

Dans cette boucle nous utiliserons quelques variables et fonctions PHP :
-  $_SERVER['HTTP_ACCEPT_LANGUAGE'] est une variable réservée de PHP, à travers laquelle on accède à la liste ordonnée des langues préférées dans le navigateur client ;
-  split() est une de ces fonctions puissantes que propose PHP pour transformer une chaîne de caractères en tableau (array)... mais en l’occurrence, comme signalé sur le forum ci-dessous, il est plus efficace d’utiliser explode()
-  header() est la fonction PHP qui permet de renvoyer une entête HTTP au navigateur. L’entête envoyée est "Location: [URL]" [RFC2612 14.30, page 134], où [URL] est une adresse HTTP pour redirection.

Le code de la solution

Pour réaliser la redirection, il suffit de créer un squelette sommaire.html qui contienne le code suivant :

Bien sûr, on peut supprimer les lignes entre /* et */ qui ne sont que des commentaire pour mieux comprendre le squelette.

Pour finir de comprendre le fonctionnement, rappelons que SPIP est une sorte de « pré-processeur PHP » : à partir des squelettes et des données de la base SPIP construit un fichier PHP qu’il stocke dans le cache et qui s’exécute chaque fois que l’on appelle la page.

Supposons que notre site ait trois secteurs : le numéro 1 en espagnol, le numéro 2 en français, et le numéro 15 en arabe. A partir du squelette ci-dessus, SPIP va créer dans le cache un fichier avec le code PHP qui suit (on suppose qu’on a supprimé les commentaires) :

Et chaque fois que cette page est appelée, ce code s’exécute avec, dans $_SERVER['HTTP_ACCEPT_LANGUAGE'], les valeurs appropriées des préférences.

Le squelette du « sommaire »

En utilisant les fonctionnalités des fichiers de langue pour internationaliser les squelettes, il peut être utile de créer un squelette unique multilingue pour le sommaire dans toutes les langues. Cependant, comme on a déjà utilisé le squelette sommaire.html (qui, de toutes manières, ne nous aurait pas permis de distinguer véritablement la langue préférée), il sera nécessaire, si l’on veut que le sommaire se distingue des autres sous-sections, de prévoir des fichiers squelettes spécifiques pour chaque secteur de langue. Une solution pourra être d’utiliser la « fonction » SPIP INCLURE :

-  créer un squelette spécifique sommaire_lang.html et sommaire_lang.php3,

-  créer, pour chacun des secteurs, un squelette rubrique=N.html (où N est le numéro de secteur : 1, 2 et 15, dans l’exemple précédent) qui ne contiendra que l’inclusion du squelette précédent : <INCLURE(sommaire_lang.php3){id_rubrique}.

Certes, pas très élégante cette dernière proposition, mais je ne vois pas comment faire simple autrement... ;-)

P.-S.

Il convient de mentionner que je n’ai pas inventé tout ça tout seul : je me suis, comme toujours, inspiré d’un exemple trouvé sur internet (que je ne retourve plus à l’heure de rédiger la présente contrib...). L’apport est d’adapter à SPIP un exemple PHP.

Notes

[1celle de la présente contrib, et celle de Nicolas.

[2rappelons qu’un secteur est une rubrique de premier niveau, située à la racine du site.

[3Pour une discussion plus complète sur la façon d’organiser un site multilingues avec SPIP, voir la documentation « Réaliser un site multilingue ».

Retour en haut de la page

Vos commentaires

  • Le 20 août 2010 à 16:35, par oil En réponse à : Site public dans la langue préférée du navigateur

    ça marche presque chez moi 2.0.9,
    en rajoutant : le paramètre lang=XX
    de cette manière :[(#URL_RUBRIQUE|parametre_url’lang’,#LANG)]
    mais mon autre problème est que mon url est sous cette forme :
    spip.php ?rubrique1 & amp ; lang=fr

    sauriez vous pourquoi le signe : ’&’ pourtant généré par spip est mal interprété ?

    merci !!

    Répondre à ce message

  • Le 13 octobre 2005 à 16:47, par Philippe G. En réponse à : Site public dans la langue préférée du navigateur

    J’ai un problème bête de chez bête (je suis en 1.8.2d)...
    Tout marche, évidement, mais quand j’affiche la page sommaire et que je change de langue, je souhaite que la rubrique change aussi. Je m’explique avec un exemple :
    La rubrique « fr » est la rubrique 1 et la rubrique "en"est la 2. Quand je suis sur le site français (rubrique 1) et que je clique sur le menu de langues (pour afficher en anglais), je change bien de langue mais reste sur la rubrique 1 alors que je voudrais basculer sur la rubrique 2 (les articles ne sont pas forcément les mêmes).
    Merci de votre aide, je sèche !

    Répondre à ce message

  • Le 6 janvier 2004 à 09:15, par ? En réponse à : > Site public dans la langue préférée du navigateur

    « split() est une de ces fonctions puissantes que propose PHP pour transformer une chaîne de caractères en tableau (array) ; »

    Dans le manuel dont vous donnez la page, il est écrit qu’il vaut mieux préférer explode.

    • Le 7 janvier 2004 à 14:06, par dani En réponse à : split ou explode

      En effet, merci pour la remarque !

      Dès que j’ai l’occasion de le tester, je modifie la contrib.

    • Le 13 janvier 2004 à 12:52, par Laurent Laville En réponse à : > mixe des deux solutions

      Pour toutes celles et ceux qui revaient d’un mixe des deux solutions.

      Venez lire mon article sur la page d’accueil multi-langues

      J’espère que dani ne m’en voudra pas d’avoir repris une grande partie de son article ;-)
      Mais comme je le dis, il faudrait être fou pour réinventer ce que d’autres avant nous ont très bien fait !

    • Le 11 février 2004 à 10:36, par Noel En réponse à : > mixe des deux solutions

      Salut,

      J’utilise SPIP 1.7.
      Merci pour vos articles ! Suite à la version de Laurent, je suis presque arrivé à mes fins.

      Sauriez vous pourquoi gerer_menu_langues() ne fonctionne pas ?
      je met bien une valeur dans $var_lang avant de l’appeler.

      j’ai toujours #LANG positionné à l’ancienne valeur, et du coup, mes boucles de menu ne changent jamais.

      Noel

      PS : Y a-t’il un moyen d’acceder à la langue de la rubrique courante ?

    • Le 11 février 2004 à 19:19, par dani En réponse à : > mixe des deux solutions

      Sauriez vous pourquoi gerer_menu_langues() ne fonctionne pas ? je met bien une valeur dans $var_lang avant de l’appeler.

      Je pense que cette fonction n’attribue que les langues qui sont effectivement configurées dans le site (espace privé : Admin-> gestion langues->multilingüisme). Ton pb ne vient-il pas de là ?

      Y a-t’il un moyen d’acceder à la langue de la rubrique courante ?

      Oui, la balise #LANG dans une boucle RUBRIQUES. (mais est-ce la question ? ;-)

    Répondre à ce message

  • Le 3 janvier 2004 à 15:02, par dani En réponse à : Une autre solution

    Nicolas Hoizey a fait une contrib qui propose une autre solution à la même problématique, déjà valable pour des sites multilingues sous 1.6. Les fonctionnalités ne sont pas exactement les mêmes :
    -  elle utilise phpLang, un script qui ajoute un avantage fonctionnel indéniable : l’utilisateur peut choisir une autre langue et le navigateur en garde la « mémoire » avec des cookies,
    -  ceci dit, elle requiert d’avoir accès aux Rewrite rules d’Apache soit directement dans httpd.onf, soit autorisées dans le .htaccess)
    -  elle est un peu moins générale, car il faut ajouter des ’rewrite rules’ pour chaque langue ajoutée.

    Ce serait bien de réfléchir à un mix des deux.

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d'abord sur gravatar.com (gratuit et indolore) et n'oubliez pas d'indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Thélia

    26 juin 2007 – 838 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Une approche basée sur l’utilisation conjointe des deux logiciels SPIP et Thélia pour la réalisation de sites de publication et de vente en ligne

  • MediaBox

    10 mai 2010 – 178 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Aperçu La MediaBox est une Boîte multimédia polyvalente et personnalisable. Le plugin est basé sur la librairie moderne ColorBox, qui a été enrichie et adaptée pour SPIP. Par défaut, mediabox propose 5 habillages. Il est assez facile d’en créer de (...)

  • Navigation AJAX

    31 janvier – 10 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Ce plugin permet de modifier automatiquement une parties des liens internes de manière à ce qu’ils ne déclenchent pas un chargement complet de la page cible, mais un chargement en AJAX de certains éléments spécifiés à l’avance. Il permet aussi de (...)

  • Squelettes IENSP-X version Pleine Page pour SPIP 2.1

    8 décembre 2008 – 11 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Version 3.2 pour SPIP 2.1

  • Balise #CAPTCHA

    12 juillet 2007 – 24 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Cette nouvelle balise oblige à rentrer un code avant d’avoir accès aux forums publics des articles.