Bonjour,

Je voulais savoir si vous aviez des avis/des sources concernant la mise en place (propre si possible) de sites multi langues... (je sens que je me rouille sur le sujet). Attention pas de wordpress dans un premier temps ^^ Sites statiques et sites dynamiques.

Passez-vous par un système multi domaines? multi dossiers simple? simple ré écriture d'url? etc etc etc.
Un guide serait très chouette à partager.

Quid des questions d'accessibilité? Et surtout du SEO?

Merci pour votre aide.
Modifié par Kins (26 Mar 2014 - 14:06)
Salut,

En ce qui concerne les URLs, ma préférence va pour l'utilisation de sous-domaines, un par langue, de type code-langue.domaine.extension (à l'instar de Wikipédia). Si ce n'est pas possible, alors un système de dossiers (un par langue) peut s'envisager, système qui peut être une réécriture d'URL.

En matière de référencement, il me semble (à vérifier auprès de sites ou de forums spécialisés) que la préférence dépend des objectifs : plusieurs domaines distincts si l'on veut mettre en exergue des cibles par pays (à l'instar de Google), plusieurs sous-domaines si l'on ne cible pas par pays et qu'on veut que chaque version linguistique soit présentée comme un site à part entière, sinon dossiers.

Quant à l'accessibilité, l'essentiel est de ne pas oublier de renseigner l'attribut lang (ou l'attribut xml:lang si l'on fait du XHTML servi en tant que XML ou les deux si l'on fait du XHTML 1.0) au niveau de l'élément racine html, avec le code langue adéquat (fr pour le français, en pour l'anglais, de pour l'allemand…), sans oublier, dans le cas de langues se lisant de droite à gauche, l'attribut dir avec la valeur rtl. Autrement dit :
* en HTML 4 et HTML 5 :
<html lang="fr"> <!-- français -->
<html lang="ar" dir="rtl"> <!-- arabe -->

* en XHTML 1.0 servi en tant que HTML :
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <!-- français -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ar" lang="ar" dir="rtl"> <!-- arabe -->

* en XHTML 1.0 servi en tant que XML, en XHTML 1.1 et en XHTML 5 :
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <!-- français -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ar" dir="rtl"> <!-- arabe -->

En ce qui concerne la sémantique HTML, un bon point, dans le cas de la disponibilité d'un même document dans plusieurs langues, consiste à utiliser l'élément link pour signaler les autres versions de ce document :
<link rel="alternate" href="URL-version-en-anglais" hreflang="en" lang="en" title="The document title in English" />
<link rel="alternate" href="URL-version-en-espagnol" hreflang="es" lang="es" title="El título del documento en español" />

Enfin, même si j'ai bien compris que tu ne cherches pas la ruée vers un CMS, si, néanmoins, tu dois te pencher sur cette question, jette un œil du côté de Spip, dont une des forces est sa capacité de gestion de sites multilingues.
Modifié par Victor BRITO (27 Mar 2014 - 23:29)
Merci pour ta réponse Victor.
Je vais regarder Spip aussi.

Je dois avouer que quand ce sont des très petits sites, je suis plutôt du genre à laisser tout dans un dossier.

Si plus gros je préfère les sous dossiers + réécriture.

Maintenant c'est cette histoire de sous-domaines qui me turlupine. Je vois exactement ce que c'est et comment le mettre en place. Mais en terme d'arborescence, comment fait-on?
Je veux dire si tu as un site avec des images (par ex) qui doivent être dispo entre le site fr et le site en (par ex aussi ^^), comment fait-on? Aurais tu un exemple d'arborescence que je puisse voir à quoi ça ressemble?
Kins a écrit :
Maintenant c'est cette histoire de sous-domaines qui me turlupine. Je vois exactement ce que c'est et comment le mettre en place. Mais en terme d'arborescence, comment fait-on?
Je veux dire si tu as un site avec des images (par ex) qui doivent être dispo entre le site fr et le site en (par ex aussi ^^), comment fait-on?

Dans ce cas, il n'est pas aberrant de créer, si possible, un sous-domaine pour les ressources communes, comme le fait, d'ailleurs, Wikipédia avec les Commons.
Modifié par Victor BRITO (26 Mar 2014 - 21:03)
Personnellement sous-domaine (en.ndd.com; es.ndd.com,...) en alias, donc comme une réécriture avec un code commun à tout. Avec des fichiers php pour gérer les textes de langues, eux en répertoire.

Ce qui fait une arborescence type :
/index.php
/carte.php
/langue/fr/objets.php
/langue/en/objets.php

Dans les fichiers langues :
(langue fr, objets)
$langueObjets=array(1=>"laine blanche", 2=>"laine noire", ...);

(langue en, objets)
$langueObjets=array(1=>"white wool", 2=>"black wool", ...);


Et le code de langue en session. Ce qui donne dans mes fichiers php qui génère le html :

session_start();
require "langue/".$_SESSION['langue']."/objets.php";



Et c'est gérable sur des grands sites ^^
Modifié par Lothindil (26 Mar 2014 - 21:30)
Je déconseille de faire les traductions directement dans des fichiers php à base de strings dans des array comme rapidement montré dans l'exemple proposé ci-dessus.

Ca implique que les traducteurs soient nécessairement aussi un minimum développeurs php. Or ils ne le sont pas forcément toujours. Pour cette raison je recommanderais des fichiers clé/valeur simples ou gettext pour du plus solide; les fichiers sont ainsi éditables plus facilement par les traducteurs avec des logiciels tiers.
Mes traducteurs -hum, enfin une amie et mon époux- reçoivent des fichiers .doc ^^ qui ressemble à ça :

objets.doc
1=> "laine blanche",
2=> "laine noire",

Et un traducteur est pas idiot, si tu lui demandes de traduire et de laisser les guillemets, chiffres, flèches et virgule en fin de ligne intacte, il le fait, hein ^^ Smiley cligne

(après, ça s'adapte pas forcément à tous les cas, mais dans le mien ce sont des séries assez longues (plus de 500 lignes) d'items ne dépassant pas les 2 lignes)
Modifié par Lothindil (27 Mar 2014 - 14:06)
a écrit :
Et un traducteur est pas idiot, si tu lui demandes de traduire et de laisser les guillemets, chiffres, flèches et virgule en fin de ligne intacte, il le fait, hein ^^

Bien sûr... mais c'est si facile d'introduire une erreur.

Après, chacun fonctionne comme il le souhaite. Je dis juste que stocker les strings directement en php, à la longue, c'est pas super maintenable. Pour gettext je ne dis pas, faut quand même installer le truc et compiler, mais devant ce que ça coûte de charger des fichiers clé/valeur par contre, ça serait dommage de s'en priver tellement c'est facile. Ca peut être aussi simple que parse_ini_file ou sinon ça se fait en 5 lignes.

Mais bon, désolé, je me suis écarté de la question de départ.
Pour rebondir et revenir dans le sujet, il y a peut-être des réponses utiles dans ce topic.