Carnet Wiki

MultilinguismeExemple6

Cette page va essayer décrire un multilinguisme dans lequel le nom de domaine indique la langue à utiliser.

Cette technique est utilisé depuis de nombreuses années sur les sites http://www.poureva.be/ (en français) et http://www.vooreva.be/ (en néerlandais).

Elle a été récemment améliorée pour la rendre moins intrusive et améliorer le référencement par google (http://googlewebmastercentral.blogspot.com/2010/03/working-with-multilingual-websites.html).

Un grand merci à _fil_ pour son aide sur irc afin d’écrire la fonction « urls_page ».

Comme vous l’aurez peut-être déjà compris, il s’agit d’un même site fonctionnant avec une seule base de donnée et un seul hébergement mais qui est accessible par plusieurs nom de domaine et à chaque nom de domaine est lié une langue particulière.

Idée N°1 : Choisir une langue « neutre » comme langue du site (ici l’anglais)

Ceci rend le site multilinguisme tout particulièrement adapté à une situation ou il serait politiquement incorrecte de choisir une langue par default pour le site. Ce situation particulière est expliquée dans la page MultilinguismeEtBelgitude.

Il faut aussi choisir un site par default pour les articles qui ne serait ni en français, ni en néerlandais... ici j’ai choisi http://www.poureva.be/ pour les quelques articles en anglais.

Idée N°2 : Utiliser « forcer_lang » (je ne sais plus pourquoi)

ecrire/mes_options.php contient

<?php
$GLOBALS['forcer_lang'] = true;
?>

Idée N°3 : Pour toute connexion au site, vérifier le nom de domaine utilisé et forcer la langue

Rajouter dans « mes_fonctions.php » un bout de code qui fait cela entre le « <?php » et le « ?> » :

        if(ereg('.*vooreva\.be.*', $_SERVER['SERVER_NAME'])) {
                $langue='nl';
        } else {
                if(ereg('.*poureva\.be.*', $_SERVER['SERVER_NAME'])) {
                        $langue='fr';
                } else {
                        $langue = "en";
                }
        }
        if (function_exists('changer_langue')) {
                changer_langue($langue);
                if ($langue != $_COOKIE['spip_lang']) {
                        include_spip('inc/cookie');
                        spip_setcookie('spip_lang', $langue);
                }
        }

Idée N°4 : Faire en sorte qu’un URL généré par spip (par exemple par [->art13]) pointe sur le site dans la langue de l’article

(merci à _fil_ pour ce bout de code).

Exemple si on utilise les urls_propres (non testé) :

function urls_propres($i, $entite, $args='', $ancre='') {
        include_spip('urls/propres');
        $a = urls_propres_dist($i, $entite, $args, $ancre);
        if (is_numeric($i)) {
                if ($entite == 'article') {
                        $s=spip_query("SELECT lang FROM spip_articles WHERE id_article=$i");
                        $t=sql_fetch($s);
                        $lang_art = $t['lang'];
                        if ($lang_art == 'nl') {
                                $a = 'http://www.vooreva.be/' . $a;
                        } else {
                                $a = 'http://www.poureva.be/' . $a;
                        }
                }
        }
        return $a;
}

Exemple si on utilise les urls_page (version en production) :

function urls_page($i, $entite, $args='', $ancre='') {
        include_spip('urls/page');
        $a = urls_page_dist($i, $entite, $args, $ancre);
        if (is_numeric($i)) {
                if ($entite == 'article') {
                        $s=spip_query("SELECT lang FROM spip_articles WHERE id_article=$i");
                        $t=sql_fetch($s);
                        $lang_art = $t['lang'];
                        if ($lang_art == 'nl') {
                                $a = 'http://www.vooreva.be/' . $a;
                        } else {
                                $a = 'http://www.poureva.be/' . $a;
                        }
                }
        }
        return $a;
}

=== sans rapport avec le multilinguisme pas nom de domaine ===

Idée N°5 : Ne pas faire de multilinguisme par rubrique.

Dans une rubrique on trouve des articles en français et en néerlandais l’un à côté de l’autre.

=> Activer le menu de langue sur les rubriques ? NON

Idée N°6 : (lié à la N°5) Utiliser <multi> pour les noms de rubrique

Exemple : <multi>Foire Aux Questions (FAQ)/Vaak Gestelde Vragen (FAQ)[fr]Foire Aux Questions (FAQ)[nl]Vaak Gestelde Vragen (FAQ)</multi>

Idée N°7 : (lié à la N°5) Indique la langue dans l’article et lier les traductions entre elles

Activer le menu de langue sur les articles ? => OUI

Gérer les liens de traduction ? => OUI

Idée N°8 : Utiliser les URLs canonique pour être certain que Google et les autres indexe bien la version mono-lingue (article et menu) de l’article...

Voir http://zzz.rezo.net/URL-canonique.html et il suffit de mettre ceci dans le squelette d’un article :

<link rel="canonical" href="[(#URL_ARTICLE|url_absolue)]" />

... à continuer ...

Une autre solution intéressante pour le problème du multilinguisme par nom de domaine :
http://www.valeryxavierlentz.eu/index.php?post/Un-domaine-par-langue-pour-un-site-SPIP

=== vieux truc ===

La partie multilinguisme proprement dite est basée sur MultilinguismeExemple5 donc cette page a que très peu d’intérêt (sic).

Echange d’idées avec Mortimer sur le concept de la langue basée sur le nom de domaine.

-  Au lieu de fournir un site spip avec multilinguisme, on peut proposé plusieurs URL pour des contenus linguistiquement différents. Par exemple en.web.com de.web.com ... Une autre possibilité pour les langues qui sont géographiquement non ambigue : www.web.fr www.web.de www.web.nl ... Il semble assez facile en php de retrouver par quel nom le site (unique) a été appelé (HTTP 1.1) cette information pourrait servir a décidé du « squelette » (=fichier html) a utiliser. Est-ce que quelqu’un a déjà essayé cela ?
DavidGlaude : La raison pour laquelle je pose la question est que je possède www.poureva.be (FR) www.poureva.org (EN ?) et www.vooreva.be (NL).

Mortimer : Mais tu peux faire un site, avec une base, que tu divises en secteur de langues differentes, chacun avec son contenue (et son squelette si tu veux). Ensuite, tu rediriges le bon url sur le bon secteur. (tu dois bien donner une addresse pour les url .be, .org, etc... non ?)

Merci Mortimer...
je cherchais plustôt quelquechose du genre ?lang=xx implicite basé sur l’URL.
L’idée est de ne plus utiliser de paramettre mais de forcer la variable « lang » à quelquechose.
Ensuite, un seul squelette avec des <: bla bla :> et des <multi> </multi>.
Je pense que cela fera plus joli.

Mortimer : si on faisait cela par mail, ca serait plus simple.
Faire une langue par secteur rend la langue implicite et ne veut pas dire avoir plusieurs squelettes.
Si tu lis un article dans le secteur francais, il est obligatoirement en francais, etc...
tu ne passes donc pas de parametre dans l’url. Ensuite, tu rediriges chaque nom de domaine sur le bon secteur de ton site.

- Mise à jour :18 mars 2018 à 19h39min