5542 sujets

Sémantique web et HTML

Pages :
Bonjour à tous,

Pour la première fois de ma vie, je dois mettre en place sur un site web actuellement francophone une version anglophone de l'ensemble de son contenu.

Mes recherches sur le sujet ne m'ont pas vraiment donné les idées plus claires : j'ai trouvé beaucoup de façons différentes de faire, et qui ne sont pas forcément récentes, etc. D'où ma question sur le forum aujourd'hui Smiley lol J'ai la traduction entre les mains, maintenant, y a plus qu'à !

Alors voilà, je voulais à la base mettre en place une redirection automatique mais je me demande si c'est une solution efficace et simple, qui fonctionne partout et pour tout le monde. C'est principalement sur le choix de la façon de faire que je bute encore actuellement. Il semblerait qu'on puisse faire des redirections selon la langue avec PHP, via .htaccess ou encore JS... Mais que choisir, étant plus à l'aise avec PHP qu'avec JS ou la syntaxe des fichiers .htaccess...

D'après mes recherches, j'ai déjà pu noter quelques éléments qui m'ont l'air communs à toutes les méthodes :

1. D'abord, je sépare les différentes versions du site dans des sous-dossier afin que les pages équivalentes d'une langue à l'autre aient chacune une adresse distincte.
Je pensais donc faire comme cela :
• monsite.fr/fr/page.html - Version FR
• moniste.fr/en/page.html - Version EN

2. La page d'index de monsite.fr va donc devenir une page qui ne sert plus qu'à demander au visiteur dans quelle langue il souhaite consulter le site web.

3. Vu qu'on a dupliqué le site dans deux sous-dossiers, il va falloir gérer ça du côté des moteurs de recherche. Dans un premier temps, Google à une doc assez claire sur le sujet.
A priori, il suffirait d'ajouter des :
<link rel="alternate" hreflang="code_de_langue" href="URL_de_la_page" />

sur chacune de mes pages. Si j'ai bien compris, et en reprenant mon exemple ci-dessus, ça donnerait ça :

<head>
  <title>Mon Site</title>
<!-- Page francophone  -->
  <link rel="alternate" hreflang="fr"
        href="https://monsite.fr/fr/page.html" />
<!-- La même page, en anglais  -->
  <link rel="alternate" hreflang="en"
        href="https://monsite.fr/en/page.html" />
<!-- Et si la langue n'est pas prise en charge, la page par défaut est alors la page d'index  -->
  <link rel="alternate" hreflang="x-default"
        href="https://monsite.fr" />
</head>

il faudra mettre ce code en place sur toutes mes pages, en indiquant à chaque fois cette même page dans la langue disponible. C'est bien ça ?

4. Sur chacune des pages, on propose au visiteur de consulter cette même page dans l'autre langue, selon l'aide en ligne de Google :
"Permettre aux internautes de changer la langue de la page

Si vous proposez plusieurs versions d'une page :

• Envisagez d'ajouter des liens hypertexte vers les autres versions linguistiques de cette page. De cette façon, les internautes peuvent choisir d'accéder à la version linguistique qui les intéresse le plus.
• Évitez les redirections automatiques basées sur la détection de la langue de l'utilisateur. En effet, celles-ci risquent d'empêcher les internautes (et les moteurs de recherche) de consulter toutes les versions de votre site."


En fait, si j'ai bien compris, Google préconise de ne pas utiliser de redirection automatique (du coup on peut oublier les méthodes avec PHP, JS ou .htaccess ?), mais seulement des liens hypertextes, qui permettent à tout moment au visiteur de consulter la même page du site d'une version linguistique à l'autre, en un clic plutôt que de rediriger automatiquement.

Personnellement, cette méthode me semble fiable et facile à mettre en place, vu que c'est du pur HTML. Qu'en pensez-vous ?
Mon objectif est de trouver une méthode pas trop difficile à mettre en oeuvre, et qui fonctionne partout. Si vous connaissez une autre méthode, je suis curieux de la connaitre Smiley smile
Je pense n'avoir rien oublié... N'hésitez pas à m'indiquer si ma démarche ci-dessus est correcte, vos conseils sont évidement les bienvenus. Merci d'avance pour votre aide !

Loraga
Modifié par Loraga (25 May 2019 - 14:03)
Bonjour
La solution que j’utilise est un script PHP. Ça marche très bien sur les deux sites où je l’utIl ose, dont un qui supporte plus de deux langues.
Je te communique le code quand je rentre chez moi.
Tout d'abord, ne pas prendre les "recommandations" de Google trop au sérieux.
Quand on analyse le code de leurs pages, on se rend compte qu'ils n'observent pas aux mêmes ce qu'ils prétendent imposer au reste du monde.
En fait ils ont plusieurs départements qui s'ignorent plus ou moins, et plutôt plus que moins.

Voici le code que j'utilise:

function getLanguage() {
  $langValues = array('en' => 0, 'fr' => 0);
        /* mettre la préférence à 0 sur les 2 langues */
  $langItems = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
      /* tableau des langues acceptées par le navigateur du client */
  foreach($langItems as $langItem) {
      /* analyser les valeurs de préférence */
    list($lang, $val) = explode(';', $langItem . ';q=1');
    $lang = substr($lang, 0, 2);
    $value = floatval(preg_replace('#[^0-9\.]#', '', $val));
    if(isset($langValues[$lang])) $prevVal = $langValues[$lang];
    else $prevVal = 0;
    if($value > $prevVal) $langValues[$lang] = $value;
  }
  if($langValues['fr'] > $langValues['en']) return 'fr';
  return 'en';
}

Le code consiste à analyser les préférences que l'utilisateur a mises dans son navigateur.
Chaque lange est indiquée avec une préférence, on choisit la langue qui a la préférence la plus forte entre français et anglais.
Suppose un allemand qui a mis en préférence bien entendu la langue allemande, en second le français et en troisième l'anglais, l'algorithme choisira français.
Mais bien entendu la personne peut vouloir changer de langue.
Ce code est utilisé dans le site www.osirisnet.net, joue avec, tu verras comment ça marche.

La question c'est "où mettre ce code" ?
Ce que j'ai fait c'est le mettre dans /index.php
Si l'utilisateur appelle simplement www.osirisnet.net, le serveur exécute index.php.
Quand il a trouvé, il fait une redirection permanente vers la page d'accueil correspondant à la langue, c'est à dire pour ce site /centrale.html pour le français, /e_centrale.htm pour l'anglsais.
Dans ton cas ce serait plutôt /fr/index.html (ou index.php) et /en/index.html (ou index.php

Tu as bien compris le mécanisme des <link rel="..." ...>
Pour ne pas avoir à le refaire pour chaque page, j'utilise le fait que toutes les pages de ce site référencent un même fichier js <script src="/common.js"></script>
Dans ce script, j'analyse le chemin de la page, j'en déduis son nom et sa langue et je génère les links en JS.

A ta disposition pour en discuter.
Salut PapyJP,

Un double merci, à la fois pour tes explications et pour le code qui va avec Smiley smile

Je n'avais pas pensé au fait qu'un visiteur puisse choisir plusieurs langues qu'il classe selon ses préférences. Ta fonction est interessante ! J'ai pas bien compris pourquoi on met les préférences à zéro au tout début... Sinon, je pense avoir compris le reste du code :
• On extrait et stocke le nom des langues acceptées par le client (qu'il nous envoie via l'entête $_SERVER['HTTP_ACCEPT_LANGUAGE']
• On parcours ces langues tout en les nettoyant des caractères qui ne nous intéressent pas
• Et c'est cette dernière ligne qui nous indique si le client à sélectionné le français en premier, sinon, on retourne l'anglais :
PapyJP a écrit :

function getLanguage() {
...
  if($langValues['fr'] > $langValues['en']) return 'fr';
  return 'en';
}

Je vais aller tester ça ! J'imagine ensuite qu'il n'y a qu'à faire une petite condition pour la redirection, si getLanguage = 'fr', je redirige vers ma page française...

PapyJP a écrit :
Tu as bien compris le mécanisme des <link rel="..." ...>
Pour ne pas avoir à le refaire pour chaque page, j'utilise le fait que toutes les pages de ce site référencent un même fichier js <script src="/common.js"></script>
Dans ce script, j'analyse le chemin de la page, j'en déduis son nom et sa langue et je génère les links en JS.

Interessant ! Hélas, je ne suis pas encore assez bon en JS pour écrire un code de ce genre là. (J'ai prévu de me former au JS cet été)
Mais je pense que c'est également réalisable avec PHP. Je vais placer là dessus.

Merci beaucoup !
Modifié par Loraga (26 May 2019 - 11:20)
Ce n’est pas exactement ça
Quand on configure son navigateur on choisit la ou les langues qu’on préfère dans l’ordre.

Par exemple j’ai mis dans l’ordre français anglais allemand italien espagnol c’est à dire les principales langues que je sais lire (mais pas toutes écrire ou parler, rassure toi !).

Si on ne le fait pas, l’installation du navigateur choisit une seule langue, celle dans laquelle ton ordinateur ou mobile est configuré. La liste va donc ne contenir qu’une seule valeur.

Mais la langue indiquée c’est du genre fr-be en-uk en-us etc.
Il faut donc tout parcourir en supprimant le code pays et choisir celle parmi les fr-xx et en-yy qui a la plus forte préférence.
C’est ce que fait mon code. Il met fr et en à 0 puis il parcourt la liste, chaque fois qu’il rencontre une des deux langues il met la valeur la plus grande. Quant il a fini il choisit celle qui a la plus grande valeur entre les deux, et si les deux sont à zéro il choisit l’anglais, l’idée étant qu’un russe ou un chinois qui n’a rien configuré a plus de chance de lire l’anglais que le français.
Bonjour,

a mon avis il vaut mieux suivre les recommandations de google car comme indiqué cela peut créer des problèmes d'utilisabilité de faire des redirections.

D'autre part même si l'intention est bonne derrière ce genre de pratique, les utilisateurs qui consultent ton site le feront soit via des moteurs de recherche qui proposeront déjà des résultats en fonction de la langue soit via des sites tiers pour lesquels il est fort probable que tes visiteurs comprennent parfaitement la langue. Donc aucun souci a ne faire aucune redirection, au contraire.

Sinon pour le reste cela me semble ok si ce n'est qu'il faudrait peut être penser a développer une solution car maintenir plusieurs copies d'un même site peut être très lourd.
Salut Bacasable,

Quels problèmes d'utilisabilité peut créer cette redirection ?

Mis à part pour les bots qui se retrouveraient à tous les coups sur la version anglophone du site, pour un utilisateur humain je ne trouve pas ça gênant (ni indispensable certes). Surtout que ce script respecte les priorités des préférences linguistiques renseignées par l'utilisateur dans les préférences de son navigateur.

Et encore, pour les bots d'indexation, ce n'est pas un problème il me semble car les <link rel="alternate" hreflang="fr" ...> leur permettent de correctement indexer les différentes versions d'une même page, alors la redirection de la page d'accueil ne devrait pas les importuner...
Loraga a écrit :
Et encore, pour les bots d'indexation, ce n'est pas un problème il me semble car les &lt;link rel="alternate" hreflang="fr" ...&gt; leur permettent de correctement indexer les différentes versions d'une même page, alors la redirection de la page d'accueil ne devrait pas les importuner...

C'est effectivement ce que je constate avec ce site qui utilise ce mécanisme depuis 4 ans. On retrouve dans les moteurs de recherche en français et anglais les pages en question.
De plus dans ce site toutes les pages ont un lien sous forme de balise <a href"..."> vers la "page sœur dans le menu en haut de page.
Même si au grand dam de son propriétaire il est toujours placé après des sites de vulgarisation sur l'égyptologie, qui sont naturellement plus consultés que le sien, mais ça on ne peut pas y faire grand chose... Smiley biggrin
Modifié par PapyJP (26 May 2019 - 19:44)
Le souci c'est que cela crée potentiellement des problèmes pour n'en résoudre aucun car dans 99,99% des cas les visiteurs arrivent par le biais du langage souhaité.

Certains utilisateurs parlent plusieurs langues et recherchent parfois dans l'une ou l'autre des langues. Les réglages du navigateur ne reflètent pas forcément leur intention à l'instant T. Et il est très probable que tes visiteurs aient de toute façon recherché le site dans la bonne langue et donc s'attendent à voir cette version du site, non pas une autre.

Diriger un utilisateur vers une mauvaise langue c'est risquer de le perdre avec un langage qu'il ne comprend pas car l'utilisateur final d'un ordinateur n'est pas forcément celui qui l'a configuré.

Ce qui est sûr c'est que les redirections automatique peuvent empêcher certains utilisateurs de voir le site dans la langue souhaité. Donc si c'est imposé dès l'entré du site il faut aussi prévoir la possibilité pour le visiteur de changer cela.

D'une manière générale, il vaut mieux éviter de présumer de ce que l'utilisateur final veux car on ne peut pas réellement le savoir. Le mieux c'est de proposer les autres langages à l'utilisateur lors de la première ouverture du site si tu souhaites vraiment faire cela ou a défaut de ne rien imposer.
Modifié par bacasable (26 May 2019 - 20:33)
Je n’ai JAMAIS constaté que mon algorithme dirigeait les gens vers la mauvaise langue.
Demander au client quelle est sa langue alors qu’il l’a donnée au navigateur est une très mauvaise approche. Si on veut éviter de lui poser la questIon à chaque fois, on peut mettre la dernière langue qu’il a choisie dans un cookie et l’utiliser la prochaine fois. C’est ce que j’ai fait dans un autre site (aujourd’hui en sommeil) où il y avait 5 langues.
Moins on pose de questions au client, mieux c’est.
Je viens de passer une heure ce soir à répondre à des questions stupides pour réserver un billet à une exposition. Le site de réservation pense que c’est lui qui nous intéresse alors que c’est l’expo qui nous intéresse.
Le tout est que si on a fait la mauvaise hypothèse il soit très facile au client de modifier le choix. C’est pourquoi toutes les langues doivent être accessibles par un clic dans le menu et la correction enregistrée dans un cookie.
Il faut au minimum ajouter un système de sélection de langue avec des cookies pour ne pas ruiner totalement l’ergonomie du site en effet pour certains utilisateurs, ce qui manquait dans ta réponse en fait.

J'ai pas l'impression que ce que tu avances repose sur grand choses hormis le fait qu'il ne faut ni écouter google, ni les autres intervenant, ni l'utilisateur final. Ce qui fait beaucoup de monde à ne pas écouter donc je ne vais pas continuer plus loin là dessus.

Il y a des arguments contre et certainement quelques cas de figure ou il y aura des arguments pour encore faut t'il se poser les bonnes questions et savoir pourquoi on fait des redirections.
Bonjour,

la solution proposée par PapyJP est pertinente (et pointue). Cependant, je me pose la question, pourquoi tout ça ? J'ai un site bilingue, Anglais/Français. Il n'y a qu'un seul site mais toutes les pages sont doublées Anglais/Français, avec un drapeau de chaque pays pour passer de l'un à l'autre. La traduction est faite d'avance et figée (jusqu'à que je change du texte, ce qui n'arrive pas tous les jours). Réalisée en premier avec Depple, je corrige ensuite les plus grosses erreurs de traduction à la main et fait éventuellement relire le tout par un natif américain. C'est bien plus efficace que les traductions automatiques. Bien sûr, il ne faut pas oublier les <link rel="alternate" hreflang=""> et le reste. Et ne surtout pas oublier de traduire les menus et les liens du footer qui eux, ne bougent que rarement.

Oui, les moteurs de recherche trient déjà en fonction de la langue de la recherche. Quand je tape l'une de mes pages en anglais, je tombe sur le lien en Anglais, et vice versa, mais pas toujours. Et mes statistiques me montraient il y a quelques mois autant de connexions depuis les us que depuis la France. Ca fonctionne par conséquent pas trop mal. Je ne prends cependant pas position pour ou contre telle méthode. J'ai réalisé ce qui était le plus simple pour moi, je ne critique pas les solutions plus complexes.
Exactement Bongota, faire des redirections n'est pas nécessaire et il vaut mieux éviter de corriger des problèmes qui n'existent pas au risque d'en créer. Par exemple, si tu as un étudiant français qui consulte ton site depuis un poste configuré en anglais dans sa faculté, celui-ci va basculer vers une version du site en anglais même si il avait effectué sa recherche en français. Celui-ci pourra toujours changer de langue par la suite mais imaginons que cette personne se trouve en fait en Corée et la difficulté qu'il peut y avoir a changer de langue sur un site dans un langage pour lequel on ne comprend aucun glyphes.
Bonjour à tous et merci pour vos messages.

C'est très interessant d'avoir vos avis sur cette question de redirection, et j'ai bien compris que rediriger un utilisateur sans son accord est quelque chose de toujours délicat.

A mon avis, ce genre de redirection sera totalement transparente pour une majorité d'utilisateurs et le choix forcé de la langue leur conviendra, cependant, on ne peut pas penser à la place de tout le monde et il y aura forcément quelques cas d'utilisateurs où cette redirection ne sera pas efficace voir inapproprié. Vous avez raison de mettre en garde lorsqu'on use de ce genre de pratique et c'est tout l'interêt du forum Smiley smile

Tout ça n'est qu'une question de choix en fait : est-ce que je fais choisir à tous mes utilisateurs une langue préférée à leur première connexion ou est-ce que je les redirige vers une version française s'ils sont francophones ou vers une version anglaise s'ils ne comprennent pas le français ?

Je pense que les deux choix se valent, en tout cas dans mon contexte car il n'y a que deux langues de disponibles. Évidement, si ce site web devait être disponible en 10 langues différentes, je prendrai certainement pas le risque de mal rediriger quelqu'un et laisserait plutôt le choix total à l'utilisateur de sélectionner la langue qu'il souhaite.

Le français n'étant pas une langue parlé dans grand nombre de pays, comparé à l'anglais, je pense que dans mon contexte il ne serait pas mal perçu de rediriger un coréen vers la version anglaise automatiquement.

bacasable a écrit :
imaginons que cette personne se trouve en fait en Corée et la difficulté qu'il peut y avoir a changer de langue sur un site dans un langage pour lequel on ne comprend aucun glyphes.


C'est aussi au développeur de permettre un changement de langue accessible et compréhensible pour la majorité des utilisateurs. Un simple bouton avec un drapeau anglais par exemple devrait être simple à comprendre pour tout le monde non ? Je pars du constat qu'un coréen connait le drapeau anglais bien sûr... Si non, il sera forcément perdu (redirection ou non) sur ce site web.

Merci à tous et bon lundi Smiley lol
Bonjour,
Pour compléter cette discussion au demeurant fort intéressante, je ne suis pas, perso, fan des scripts qui détectent la langue à partir des entêtes HTTP et orientent de facto l'utilisateur vers une version ou une autre du site.
Bossant dans une entité très mondialisée, nous avons des navigateurs configurés en fonction de la localisation géographique avec, pour les Français une présélection en FR et pour les autres entités une présélection différente, essentiellement en EN / US.
Le problème, c'est que nous avons des Français qui bossent à Singapour, par exemple, et qui même s'ils maîtrisent parfaitement l'anglais peuvent souhaiter à titre personnel avoir nos IHM et contenu en français. A contrario, nous avons également des citoyens US / UK en poste en France et qui, connaissant leur très faible propension à consulter autre chose que des pages écrites en british bon teint, souhaitent avoir un accès immédiat sur la version du même type, bien qu'ils soient dans un bureau à Paname et entourés de "foggies".
Bref, pour tous les développements de sites web conduits jusqu'à présent, c'est pour chaque page une version en FR et une version en EN, avec deux options en partie supérieure afin de laisser le choix à l'utilisateur de changer selon ses affinités.
Une autre raison qui me fait rejeter le script d'auto détection c'est qu'il faut bien reconnaître que la plupart des individus croisés au boulot ont, dès le départ, choisi la version qui leur correspondait le mieux et placée celle-ci dans leurs favoris, rendant totalement inutile une auto sélection ultérieure.
Comme indiqué lors de réponses précédentes, une balise <link> @rel=alternate est par ailleurs mise en place pour garantir un parcours croisé cohérent et complet.
Par ailleurs, chaque page est dotée d'une URL intégrant sa localisation en sous répertoire (classique : /fr ou / en).
Bref, solution simple et qui jusqu'à présent nous a donné toute satisfaction, que l'on soit en Java, PHP ou autre et que l'utilisateur ait désactivé ou non JS (ça existe).
La question de savoir si cela revient à travailler deux fois plus en créant deux contenus différents n'est pas pertinente dans la mesure où, quelle que soit la configuration retenue avec ou sans script d'auto détection il faudra bien créer ces fameux contenus.
In fine, gérer des liens en URL localisée ne s'avère pas plus complexe puisque les sites dont s'agit sont créés via des générateurs (classe Java) qui prennent en charge sans aucune difficulté la structure des liens hypertextes en fonction de la langue déclarée pour chaque page.
Modifié par sepecat (27 May 2019 - 17:43)
bacasable a écrit :
Exactement Bongota, faire des redirections n'est pas nécessaire et il vaut mieux éviter de corriger des problèmes qui n'existent pas au risque d'en créer. Par exemple, si tu as un étudiant français qui consulte ton site depuis un poste configuré en anglais dans sa faculté, celui-ci va basculer vers une version du site en anglais même si il avait effectué sa recherche en français. Celui-ci pourra toujours changer de langue par la suite mais imaginons que cette personne se trouve en fait en Corée et la difficulté qu'il peut y avoir a changer de langue sur un site dans un langage pour lequel on ne comprend aucun glyphes.


pour l'un de mes site j'ai opté pour ce qui me semblait être la meilleur solution au niveau de la simplicité de dévellopement, et pour le visiteur.
J'ai un site multilingue pour lequel on peux passer d'une langue à une autre avec un menu, qui ajoute une variable lang=en par exemple à l'url. Deplus les articles on leur propre traduction et donc une url bien à eux pour chaque langue.
^C'est en effet suffisant de faire comme cela.

Pour le SEO c'est mieux d'avoir en sus :
- les metas alternate
- la meta canonical
- un sitemap.xml

Mais cela nécessite forcément du développement si le site fait plus de 4/5 pages et ça peut s'avérer compliqué a mettre en place.

Pour ceux qui ne sont pas allergiques aux cms, il est possible de mettre en place tout cela avec wordpress + polylang + yoast SEO, par exemple.
Bonjour,

Dans le fichier index.html, à la racine (dans l'élément <head>), un petit script :

<script>
if (navigator.browserLanguage)
var language = navigator.browserLanguage;
else
var language = navigator.language;
                    
if (language.indexOf('en') > -1) document.location.href = '/en/index.html';
if (language.indexOf('fr') > -1) document.location.href = '/fr/index.html';
else if (language.indexOf('en') > -1) document.location.href = '/en/index.html';
else
document.location.href = '/en/index.html';
</script>

Et on peut même ajouter d'autres langages... Smiley cligne
Modifié par OnyX (30 Jun 2020 - 14:10)
Bonjour Jean-Pierre,

Aurais-tu un code Javascript qui fonctionne pour rediriger vers la version anglaise quand le français est par défaut à la racine d'un site ?

Tous les codes que j'ai trouvés dont celui d'Onyx ci-dessus font boucler mon site Smiley eek

Merci de ton aide Smiley cligne
Pages :