Internationalisation PHP : comment créer un site dans toutes les langues du monde

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi l'internationalisation PHP n'est pas simplement une « traduction de mots »

\n\n

Imaginez : vous avez écrit un super projet PHP. Il fonctionne, ravit les utilisateurs, génère des profits. Mais un jour, vous remarquez dans les statistiques que 30 % du trafic provient d'Allemagne, 15 % du Japon et 10 % des Émirats Arabes Unis. Votre site ne parle que le russe. Les utilisateurs partent sans trouver le bouton « Acheter » dans leur langue.

\n\n

Une situation familière ? L'internationalisation (i18n) des applications PHP n'est pas simplement un remplacement de mots dans un modèle. C'est une approche architecturale qui permet à votre code de « comprendre » la culture, la devise, les dates et même la direction du texte (de gauche à droite ou de droite à gauche).

\n\n

Dans cet article, nous allons voir comment transformer un site PHP ordinaire en une plateforme multilingue en utilisant des outils natifs et les meilleures pratiques. Vous apprendrez comment fonctionne gettext en PHP, en quoi la localisation diffère de l'internationalisation, et comment éviter les pièges de la pluralisation.

\n\n

i18n vs l10n : quelle est la différence (et pourquoi c'est important)

\n\n

Avant d'écrire du code, mettons-nous d'accord sur les termes. L'internationalisation (i18n) est la préparation du code à la traduction : externalisation des chaînes, gestion des formats de nombres, dates, devises. La localisation (l10n) est le processus même de traduction et d'adaptation à une région spécifique.

\n\n

Une analogie simple : l'internationalisation, c'est la construction d'une maison avec des pièces vides où l'on peut mettre n'importe quel meuble. La localisation, c'est la disposition des meubles selon les goûts d'un habitant particulier.

\n\n

Pour un développeur PHP, cela signifie : ne codez pas en dur les chaînes ! Jamais. Même si le site n'est actuellement qu'en russe. Chaque phrase doit être encapsulée dans une fonction de traduction.

\n\n

Stack technologique pour l'i18n en PHP

\n\n

Dans l'écosystème PHP, il existe plusieurs outils puissants. Nous allons examiner deux approches principales : le classique gettext et le moderne ICU MessageFormat via l'extension intl.

\n\n

1. Gettext — le grand-père du multilinguisme

\n\n

Gettext en PHP est la norme de facto pour de nombreux CMS (WordPress, Drupal). Il utilise des fichiers .po et .mo pour stocker les traductions. Avantages : simplicité, prise en charge des formes plurielles, intégration avec Poedit.

\n\n

2. ICU MessageFormat — pour la logique complexe

\n\n

L'extension PHP intl (Internationalization) fournit les classes MessageFormatter et NumberFormatter. C'est le choix pour les projets nécessitant des modèles complexes avec sélection de cas, genre et nombre.

\n\n

3. Bibliothèques d'encapsulation

\n
    \n
  • symfony/translation — composant Symfony, fonctionne aussi bien avec YAML/XLIFF qu'avec gettext.
  • \n
  • laravel-localization — pour Laravel (package mcamara/laravel-localization).
  • \n
  • zend-i18n — pour Laminas (anciennement Zend Framework).
  • \n
\n\n

Pratique : configurer gettext en PHP à partir de zéro

\n\n

Supposons que nous ayons un script simple index.php qui affiche un message de bienvenue. Rendons-le multilingue.

\n\n

Étape 1. Préparation du code

\n\n

Encapsulez toutes les chaînes dans la fonction _() (alias pour gettext()) :

\n\n
<?php\n// index.php\necho _("Bienvenue sur notre site !");\n\n$items = 5;\n// Pour les formes plurielles, utilisez ngettext\necho ngettext("%d article", "%d articles", $items);\n?>
\n\n

Étape 2. Génération du fichier .pot

\n\n

Installez gettext sur le serveur ou utilisez xgettext :

\n\n
xgettext -o locales/messages.pot index.php --from-code=UTF-8
\n\n

Étape 3. Création de la traduction

\n\n

Copiez messages.pot dans locales/fr_FR/LC_MESSAGES/messages.po et modifiez-le :

\n\n
msgid "Bienvenue sur notre site !"\nmsgstr "Welcome to our site!"\n\nmsgid "%d article"\nmsgid_plural "%d articles"\nmsgstr[0] "%d item"\nmsgstr[1] "%d items"
\n\n

Étape 4. Compilation et

Blogs

Book Recommendations