# Créer un site bilingue français-anglais avec Polylang, étape par étape

> Sans licence premium, Polylang permet de monter un site bilingue solide. Voici la méthode complète, du réglage des langues aux menus séparés.

- Auteur : Clément Hadrot
- Publié le : 2020-05-06
- Mis à jour le : 2020-05-06
- Catégorie : Multilingue
- URL : https://wpmoderne.dev.wordpress-developpement.fr/multilingue/polylang-site-bilingue-tutoriel/

## L’essentiel

- Installation en moins de 15 minutes
- Un menu et un widget par langue
- Le sélecteur de langue en trois lignes de code

Un client demande souvent la même chose : « je veux mon site en français et en anglais, sans complexité inutile ». Pour ce cas, précis mais très fréquent, Polylang dans sa version gratuite fait très bien le travail, sans passer par une licence premium comme celle de WPML. Ce tutoriel détaille la mise en place complète d'un site bilingue avec Polylang, du réglage initial jusqu'au sélecteur de langue dans le thème.

Nous prenons pour exemple un site vitrine simple : une page d'accueil, une page « À propos », un blog, et un menu de navigation. L'objectif est d'obtenir un site où chaque page existe en français et en anglais, avec des URL propres et un contenu correctement indexé dans chaque langue.

## Étape 1 : installer et configurer les langues

Après avoir installé Polylang depuis le répertoire officiel des extensions, un assistant de configuration se lance automatiquement. Il propose d'ajouter les langues du site. Pour notre exemple, nous ajoutons le français (langue déjà présente, généralement détectée comme langue par défaut si le site est installé en `fr_FR`) puis l'anglais.

Chaque langue reçoit un code (`fr`, `en`), un nom complet, et un drapeau associé — purement visuel, à ne pas confondre avec une notion de pays. Un point mérite l'attention : le réglage **Langues → Réglages → URL des langues**. Trois options sont proposées :

- Le préfixe de langue dans l'URL **en sous-répertoire** : `exemple.fr/en/about`.
- Aucun préfixe pour la langue par défaut, préfixe pour les autres : `exemple.fr/about` et `exemple.fr/en/about`.
- L'usage de domaines ou sous-domaines différents par langue (nécessite une configuration DNS et serveur supplémentaire).

Pour un premier projet bilingue simple, l'option en sous-répertoire avec préfixe systématique est la plus simple à maintenir et la plus lisible pour les moteurs de recherche.

## Étape 2 : traduire le contenu existant

Une fois les langues actives, chaque écran d'édition de contenu (pages, articles, catégories) affiche une colonne « Langues » avec un petit signe « + » pour créer la traduction manquante. Cliquer sur ce signe crée un nouveau brouillon pré-rempli avec certains réglages (modèle de page, image mise en avant) mais un contenu vide à traduire.

Pour notre page d'accueil, nous créons donc la version anglaise, traduisons le texte, et publions. Polylang relie automatiquement les deux pages via son propre système de correspondance de traductions, visible et modifiable depuis **Langues → Chaînes de traduction** pour les textes hors contenu, et directement sur l'écran d'édition pour le contenu principal.

> L'essentiel à retenir : Installation en moins de 15 minutes ; Un menu et un widget par langue ; Le sélecteur de langue en trois lignes de code

## Étape 3 : gérer les menus par langue

Un piège classique pour les débutants sur Polylang : oublier qu'un menu de navigation doit être créé **une fois par langue**. Dans **Apparence → Menus**, il faut créer un menu « Menu principal FR » et un menu « Menu principal EN », chacun assigné à l'emplacement de menu du thème, avec un sélecteur de langue associé à chaque menu depuis l'écran d'édition.

Si le thème actif ne gère pas nativement Polylang (rare aujourd'hui, mais possible sur des thèmes anciens), il faut vérifier que la fonction `wp_nav_menu()` est bien appelée avec le bon emplacement de menu (`theme_location`), Polylang se chargeant ensuite de servir le menu correspondant à la langue active sans intervention supplémentaire du développeur.

### Ajouter un sélecteur de langue

Polylang fournit un widget « Sélecteur de langue » prêt à l'emploi, mais il est souvent plus propre d'intégrer un sélecteur directement dans le thème, par exemple dans l'en-tête. La fonction à utiliser est `pll_the_languages()` :

```
<ul class="selecteur-langue">
  <?php
  $langues = pll_the_languages( array(
      'raw'             => 1,
      'hide_if_empty'   => 0,
      'show_flags'      => 1,
      'show_names'      => 1,
  ) );
  foreach ( $langues as $langue ) :
  ?>
    <li>
      <a href="<?php echo esc_url( $langue['url'] ); ?>">
        <?php echo esc_html( $langue['name'] ); ?>
      </a>
    </li>
  <?php endforeach; ?>
</ul>
```

Le paramètre `raw` à `1` renvoie un tableau exploitable en PHP plutôt qu'un fragment HTML tout fait, ce qui laisse une liberté totale sur le rendu visuel.

## Étape 4 : traduire les chaînes du thème

Certains textes ne sont ni des articles ni des pages : le texte du bouton « Envoyer » d'un formulaire, un slogan dans le pied de page. Si ces chaînes sont correctement internationalisées dans le thème avec `__()` ou `_e()`, elles apparaissent automatiquement dans **Langues → Chaînes de traduction**, à condition que le thème charge son fichier de traduction avec `load_theme_textdomain()`.

Pour un texte généré dynamiquement en dehors de ce mécanisme (une chaîne construite dans une option personnalisée par exemple), Polylang propose la fonction `pll_register_string()` à l'enregistrement et `pll__()` à la récupération :

```
<?php
pll_register_string( 'Slogan pied de page', 'Votre partenaire web depuis 2010', 'mon-theme' );
echo esc_html( pll__( 'Votre partenaire web depuis 2010' ) );
```

## Étape 5 : vérifier le référencement multilingue

Polylang gère nativement l'ajout des balises `hreflang` sur chaque page, indiquant aux moteurs de recherche les versions linguistiques disponibles. Il est utile de vérifier ce point directement dans le code source d'une page publiée : on doit y trouver une balise `<link rel="alternate" hreflang="en" href="...">` pour chaque langue active, y compris une entrée `x-default` si le réglage correspondant est activé.

Un sitemap XML par langue est également généré si une extension de sitemap compatible est utilisée (Yoast SEO et Rank Math gèrent tous deux Polylang correctement dans leurs versions récentes). Il faut simplement s'assurer que le sitemap soumis à Google Search Console couvre bien les deux langues, parfois via deux propriétés distinctes si les URL utilisent des sous-domaines.

## En résumé

Monter un site bilingue avec Polylang gratuit ne demande ni licence premium ni complexité excessive : configuration des langues, traduction du contenu, duplication des menus, et enregistrement des chaînes hors contenu suffisent à couvrir la quasi-totalité des besoins d'un site vitrine ou d'un blog. Les difficultés apparaissent surtout lorsque le projet grandit — ajout d'une troisième langue, besoin de traduire des types de contenu personnalisés — des sujets que nous détaillons dans d'autres articles de cette catégorie.
