Internationalisation (i18n) en PHP : comment rendre un site multilingue
L'internationalisation (i18n) est le processus de conception de logiciels de manière à ce qu'ils puissent être facilement adaptés à différentes langues et régions sans modification du code. En PHP, il existe plusieurs outils puissants qui permettent de séparer le code et le texte, puis de charger dynamiquement la langue souhaitée.
Dans cet article, nous examinerons les principales approches et bibliothèques pour implémenter l'i18n en PHP, y compris les fonctions intégrées gettext, l'extension intl et les bibliothèques populaires telles que Symfony Translation.
1. Concepts clés de l'i18n
Avant de passer aux outils, il est important de comprendre les termes clés :
- Locale — une combinaison de langue et de région (par exemple,
ru_RU,en_US,de_DE). - Traduction — remplacement d'une chaîne source par son équivalent dans une autre langue.
- Pluralisation — déclinaison correcte des mots en fonction du nombre (par exemple, "1 fichier", "2 fichiers", "10 fichiers").
- Formatage — adaptation des dates, nombres, devises à la locale.
2. Bibliothèque intégrée gettext
gettext est un outil classique pour l'i18n, intégré à PHP. Il utilise les fichiers .po (Portable Object) et .mo (Machine Object) pour stocker les traductions.
Installation et configuration
Assurez-vous que l'extension gettext est activée dans php.ini :
extension=gettextExemple de configuration de base :
<?php// Définir la localesetlocale(LC_ALL, 'ru_RU.UTF-8');// Spécifier le domaine (nom du fichier .mo)bindtextdomain('messages', './locale');// Encodagebind_textdomain_codeset('messages', 'UTF-8');// Choisir le domainetextdomain('messages');
// Utiliser la traductionecho gettext("Hello, World!"); // affichera "Здравствуй, Мир!"// ou en version abrégéeecho _("Hello, World!");?>Structure des fichiers
Vos fichiers de traduction doivent se trouver dans le dossier locale :
locale/├── ru_RU/│ └── LC_MESSAGES/│ └── messages.po│ └── messages.mo└── en_US/ └── LC_MESSAGES/ └── messages.po └── messages.moExemple de fichier messages.po :
msgid "Hello, World!"msgstr "Здравствуй, Мир!"
msgid "Files: %d"msgstr "Файлы: %d"Pour compiler le fichier .po en .mo, utilisez l'utilitaire msgfmt :
msgfmt messages.po -o messages.mo3. Extension intl (Fonctions d'internationalisation)
L'extension intl offre des fonctionnalités plus modernes pour travailler avec les locales, notamment le formatage des nombres, des dates et des messages.
Installation
sudo apt-get install php-intl # pour Ubuntu/DebianFormatage des messages avec MessageFormatter
<?php$locale = 'ru_RU';$message = '{0} приветствует {1}!';$fmt = new MessageFormatter($locale, $message);echo $fmt->format(['PHP', 'Мир']);// Affichera : PHP приветствует Мир!?>Pluralisation
<?php$locale = 'ru_RU';$pattern = '{0, plural, one {# файл} few {# файла} other {# файлов}}';$fmt = new MessageFormatter($locale, $pattern);echo $fmt->format([1]); // 1 файлecho $fmt->format([2]); // 2 файлаecho $fmt->format([10]); // 10 файлов?>Formatage des dates et des nombres
<?php$locale = 'ru_RU';$fmt = new NumberFormatter($locale, NumberFormatter::DECIMAL);echo $fmt->format(1234567.89); // 1 234 567,89
$dateFmt = new IntlDateFormatter($locale, IntlDateFormatter::LONG, IntlDateFormatter::NONE);echo $dateFmt->f Aussi dans la bibliothèque
Micrometer Java : guide complet avec exemples
Travailler avec les dates en Swift : Foundation, SwiftDate, DateTools (iOS/macOS)
Travailler avec les archives ZIP en Go (Golang) — guide complet
node-schedule — planificateur de tâches pour TypeScript
Génération de PDF en C# (.NET) : meilleures bibliothèques et exemples de code